public void testGetProjectedNoElements() { Select select = new Select(); select.addSymbol(new MultipleElementSymbol()); List projectedSymbols = select.getProjectedSymbols(); assertEquals("Did not get empty list for select * with no elements: ", new ArrayList(), projectedSymbols); //$NON-NLS-1$ }
public static void makeSelectUnique(Select select, boolean expressionSymbolsOnly) { select.setSymbols(select.getProjectedSymbols()); List<Expression> symbols = select.getSymbols();
/** * Return a deep copy of this Select. * @return Deep clone */ public Select clone() { Select copy = new Select(LanguageObject.Util.deepClone(this.symbols, Expression.class)); copy.setDistinct( isDistinct() ); return copy; }
public void visit(Select obj) { validateSelectElements(obj); if(obj.isDistinct()) { validateSortable(obj.getProjectedSymbols()); } }
private void correctProjectedTypes(List actualSymbolTypes, Query query) { List symbols = query.getSelect().getProjectedSymbols(); List newSymbols = SetQuery.getTypedProjectedSymbols(symbols, actualSymbolTypes, this.metadata); query.getSelect().setSymbols(newSymbols); }
Select select = new Select(); List<Expression> columns = (List<Expression>)node.getProperty(NodeConstants.Info.OUTPUT_COLS); prepareSubqueries(ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(columns)); select.addSymbols(columns); query.setSelect(select); query.setFrom(new From()); select.addSymbol(new ExpressionSymbol("dummy", new Constant(1))); //$NON-NLS-1$ } else { select.addSymbol(selectOutputElement(query.getFrom().getGroups(), metadata)); query.setSelect(query.getSelect().clone()); SymbolMap symbolMap = (SymbolMap) groupNode.getProperty(NodeConstants.Info.SYMBOL_MAP); aggs.addAll(AggregateSymbolCollectorVisitor.getAggregates(having, true)); Set<Expression> expr = new HashSet<Expression>(); for (Expression ex : sel.getProjectedSymbols()) { Expression selectExpression = SymbolMap.getExpression(ex); aggs.remove(selectExpression); expr.add(selectExpression); int originalSelect = sel.getSymbols().size(); sel.addSymbols(aggs); if (groupBy != null) { for (Expression ex : groupBy.getSymbols()) { ex = SymbolMap.getExpression(ex); if (expr.add(ex)) { sel.addSymbol(ex);
private void helpTestLiteral(Boolean expected, Class<?> expectedType, String sql, String expectedSql) { Select select = new Select(); select.addSymbol(new Constant(expected, expectedType)); //$NON-NLS-1$ Query query = new Query(); query.setSelect(select); helpTest(sql, expectedSql, query); } /** SELECT TRUE FROM m.g1 */
Expression ses = q.getProjectedSymbols().get(0); Expression expr = SymbolMap.getExpression(ses); q.getSelect().clearSymbols(); q.getSelect().addSymbol(new AggregateSymbol(type.name(), false, expr)); ScalarSubquery ss = new ScalarSubquery(q); ss.setSubqueryHint(criteria.getSubqueryHint()); Expression ex = select.getProjectedSymbols().get(0); ex = SymbolMap.getExpression(ex); select.setSymbols(Arrays.asList(new AggregateSymbol(type.name(), false, ex))); select.setDistinct(false);
private void rewriteWithExplicitArray(Expression ex, SubqueryContainer<QueryCommand> sub) throws QueryMetadataException, QueryResolverException, TeiidComponentException { if (!(ex instanceof Array) || sub.getCommand() == null || sub.getCommand().getProjectedSymbols().size() == 1) { return; } Query query = QueryRewriter.createInlineViewQuery(new GroupSymbol("x"), sub.getCommand(), metadata, sub.getCommand().getProjectedSymbols()); //$NON-NLS-1$ List<Expression> exprs = new ArrayList<Expression>(); for (Expression expr : query.getSelect().getProjectedSymbols()) { exprs.add(SymbolMap.getExpression(expr)); } Array array = new Array(exprs); query.getSelect().clearSymbols(); query.getSelect().addSymbol(array); ResolverVisitor.resolveComponentType(array); sub.setCommand(query); }
List<Expression> viewSymbols = new ArrayList<Expression>(queryExpression.getSelect().getSymbols()); queryExpression.getSelect().clearSymbols(); List<Expression> values = mapped.getValues(); queryExpression.getSelect().addSymbols(values); values.clear(); queryMapping.asUpdatableMap().putAll(mapping); ExpressionMappingVisitor visitor = new RulePlanSubqueries.ReferenceReplacementVisitor(queryMapping); Select select = new Select(); select.addSymbols(values); DeepPostOrderNavigator.doVisit(select, visitor); values.clear(); for (Expression ex : select.getSymbols()) { try { values.add(QueryRewriter.rewriteExpression(SymbolMap.getExpression(ex), context, metadata));
@Test public void testSelect2() { Select select = new Select(); select.setDistinct(true); select.addSymbol(new ElementSymbol("e1")); //$NON-NLS-1$ helpTest(select, " DISTINCT e1"); //$NON-NLS-1$ }
newJoinNode.addAsParent(projectPlanNode); Select allSymbols = new Select(symbolMap.getKeys()); allSymbols.addSymbols(otherSymbolMap.getKeys()); if (i == 0) { QueryRewriter.makeSelectUnique(allSymbols, false); projectPlanNode.setProperty(NodeConstants.Info.PROJECT_COLS, allSymbols.getSymbols()); projectPlanNode.addGroups(newJoinNode.getGroups());
public Query selectQuery() throws TeiidException { if (!this.exceptions.isEmpty()) { throw this.exceptions.get(0); } Query query = this.context.buildQuery(); if (this.countQuery) { AggregateSymbol aggregateSymbol = new AggregateSymbol(AggregateSymbol.Type.COUNT.name(), false, null); Select select = new Select(Arrays.asList(aggregateSymbol)); query.setSelect(select); } else if (this.orderBy != null) { if (this.context.getIterator() != null) { //currently this doesn't matter as the ordering can only be based upon the parent entity ((AggregateSymbol)((AliasSymbol)query.getSelect().getSymbol(query.getSelect().getProjectedSymbols().size() - 1)).getSymbol()).setOrderBy(this.orderBy); } else { query.setOrderBy(this.orderBy); } } if (this.expandOption != null) { processExpandOption(this.expandOption, this.context, query, 1, null); } return query; }
public static Query rowConstructor(List<Expression> select) { Query query = new Query(); query.setSelect(new Select()); query.getSelect().addSymbols(select); query.setRowConstructor(true); return query; }
public void visit(Select obj) { List<Expression> symbols = obj.getSymbols(); for (int i = 0; i < symbols.size(); i++) { Expression symbol = symbols.get(i); if (symbol instanceof MultipleElementSymbol) { continue; } Expression replacmentSymbol = replaceSymbol(symbol, true); symbols.set(i, replacmentSymbol); } }
List elements = select.getSymbols(); for (int i = 0; i < elements.size(); i++) { Expression ss = (Expression) elements.get(i); throw new QueryResolverException(QueryPlugin.Event.TEIID30133, QueryPlugin.Util.gs(QueryPlugin.Event.TEIID30133)); select.clearSymbols(); MultipleElementSymbol all = new MultipleElementSymbol(); all.setElementSymbols(validElements.values()); select.addSymbol(all); query.setSelect(select); return;
@Override public void visit( Select obj ) { if (obj.isDistinct()) { append(SPACE); append(DISTINCT); } beginClause(2); Iterator<Expression> iter = obj.getSymbols().iterator(); while (iter.hasNext()) { Expression symbol = iter.next(); visitNode(symbol); if (iter.hasNext()) { append(", "); //$NON-NLS-1$ } } }
public static org.teiid.query.sql.lang.Select helpExampleSelect(boolean distinct) { ArrayList<ElementSymbol> symbols = new ArrayList<ElementSymbol>(); symbols.add(TestElementImpl.helpExample("vm1.g1", "e1")); //$NON-NLS-1$ //$NON-NLS-2$ symbols.add(TestElementImpl.helpExample("vm1.g1", "e2")); //$NON-NLS-1$ //$NON-NLS-2$ symbols.add(TestElementImpl.helpExample("vm1.g1", "e3")); //$NON-NLS-1$ //$NON-NLS-2$ symbols.add(TestElementImpl.helpExample("vm1.g1", "e4")); //$NON-NLS-1$ //$NON-NLS-2$ org.teiid.query.sql.lang.Select sel = new org.teiid.query.sql.lang.Select(symbols); sel.setDistinct(distinct); return sel; }
/** * Convert the "*" in "select * from..." to the list of column names for the data source. */ protected void expandAllSymbol(Command command) { if (command instanceof Query) { Query query = (Query) command; Select select = query.getSelect(); List<Expression> originalSymbols = select.getSymbols(); List<Expression> expandedSymbols = new ArrayList<Expression>(); for (Iterator<Expression> i = originalSymbols.iterator(); i.hasNext(); ) { Expression next = i.next(); if (next instanceof MultipleElementSymbol) { MultipleElementSymbol allSymbol = (MultipleElementSymbol) next; expandedSymbols.addAll(allSymbol.getElementSymbols()); } else { expandedSymbols.add(next); } } select.setSymbols(expandedSymbols); } }
/** * Validates SELECT INTO queries. * @param query * @since 4.2 */ protected void validateSelectInto(Query query) { List<Expression> symbols = query.getSelect().getProjectedSymbols(); GroupSymbol intoGroup = query.getInto().getGroup(); validateInto(query, symbols, intoGroup); }