public static boolean isDistinctWithGroupBy(Query query) { GroupBy groupBy = query.getGroupBy(); if (groupBy == null) { return false; } HashSet<Expression> selectExpressions = new HashSet<Expression>(); for (Expression selectExpr : query.getSelect().getProjectedSymbols()) { selectExpressions.add(SymbolMap.getExpression(selectExpr)); } for (Expression groupByExpr : groupBy.getSymbols()) { if (!selectExpressions.contains(groupByExpr)) { return false; } } return true; }
public static boolean isDistinctWithGroupBy(Query query) { GroupBy groupBy = query.getGroupBy(); if (groupBy == null) { return false; } HashSet<Expression> selectExpressions = new HashSet<Expression>(); for (Expression selectExpr : query.getSelect().getProjectedSymbols()) { selectExpressions.add(SymbolMap.getExpression(selectExpr)); } for (Expression groupByExpr : groupBy.getSymbols()) { if (!selectExpressions.contains(groupByExpr)) { return false; } } return true; }
public static boolean isDistinctWithGroupBy(Query query) { GroupBy groupBy = query.getGroupBy(); if (groupBy == null) { return false; } HashSet<Expression> selectExpressions = new HashSet<Expression>(); for (Expression selectExpr : query.getSelect().getProjectedSymbols()) { selectExpressions.add(SymbolMap.getExpression(selectExpr)); } for (Expression groupByExpr : groupBy.getSymbols()) { if (!selectExpressions.contains(groupByExpr)) { return false; } } return true; }
public void visit(Select obj) { validateSelectElements(obj); if(obj.isDistinct()) { validateSortable(obj.getProjectedSymbols()); } }
public void visit(Select obj) { validateSelectElements(obj); if(obj.isDistinct()) { validateSortable(obj.getProjectedSymbols()); } }
public void visit(Select obj) { validateSelectElements(obj); if(obj.isDistinct()) { validateSortable(obj.getProjectedSymbols()); } }
/** * Get the ordered list of all elements returned by this query. These elements * may be ElementSymbols or ExpressionSymbols but in all cases each represents a * single column. * @return Ordered list of SingleElementSymbol */ public List<Expression> getProjectedSymbols() { if(getSelect() != null) { if(getInto() != null){ //SELECT INTO clause return Command.getUpdateCommandSymbol(); } return getSelect().getProjectedSymbols(); } return Collections.emptyList(); }
/** * Get the ordered list of all elements returned by this query. These elements * may be ElementSymbols or ExpressionSymbols but in all cases each represents a * single column. * @return Ordered list of SingleElementSymbol */ public List<Expression> getProjectedSymbols() { if(getSelect() != null) { if(getInto() != null){ //SELECT INTO clause return Command.getUpdateCommandSymbol(); } return getSelect().getProjectedSymbols(); } return Collections.emptyList(); }
/** * 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); }
private void correctProjectedTypes(List actualSymbolTypes, Query query) { List symbols = query.getSelect().getProjectedSymbols(); List newSymbols = SetQuery.getTypedProjectedSymbols(symbols, actualSymbolTypes, this.metadata); query.getSelect().setSymbols(newSymbols); }
/** * 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); }
/** * 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); }
private void correctProjectedTypes(List actualSymbolTypes, Query query) { List symbols = query.getSelect().getProjectedSymbols(); List newSymbols = SetQuery.getTypedProjectedSymbols(symbols, actualSymbolTypes, this.metadata); query.getSelect().setSymbols(newSymbols); }
private void correctProjectedTypes(List actualSymbolTypes, Query query) { List symbols = query.getSelect().getProjectedSymbols(); List newSymbols = SetQuery.getTypedProjectedSymbols(symbols, actualSymbolTypes, this.metadata); query.getSelect().setSymbols(newSymbols); }
private void helpCheckSelect(Query query, String[] elementNames) { Select select = query.getSelect(); List<Expression> elements = select.getProjectedSymbols(); assertEquals("Wrong number of select symbols: ", elementNames.length, elements.size()); //$NON-NLS-1$ for(int i=0; i<elements.size(); i++) { Expression symbol = elements.get(i); String name = Symbol.getShortName(symbol); if (symbol instanceof ElementSymbol) { name = ((ElementSymbol)symbol).getName(); } assertEquals("Element name does not match: ", elementNames[i].toUpperCase(), name.toString().toUpperCase()); //$NON-NLS-1$ } }
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 void testGetProjectedWithStar() { List symbols = new ArrayList(); symbols.add(new ElementSymbol("a")); //$NON-NLS-1$ symbols.add(new ElementSymbol("b")); //$NON-NLS-1$ Select select = new Select(); MultipleElementSymbol all = new MultipleElementSymbol(); all.setElementSymbols(symbols); select.addSymbol(all); List projectedSymbols = select.getProjectedSymbols(); assertEquals("Did not get correct list for select *: ", symbols, projectedSymbols); //$NON-NLS-1$ }
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); }
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); }
@Test public void testLookupFunction() { String sql = "SELECT lookup('pm1.g1', 'e1', 'e2', e2) AS x, lookup('pm1.g1', 'e4', 'e3', e3) AS y FROM pm1.g1"; //$NON-NLS-1$ Query resolvedQuery = (Query) helpResolve(sql); helpCheckFrom(resolvedQuery, new String[] { "pm1.g1" }); //$NON-NLS-1$ helpCheckSelect(resolvedQuery, new String[] { "x", "y" }); //$NON-NLS-1$ //$NON-NLS-2$ helpCheckElements(resolvedQuery.getSelect(), new String[] { "PM1.G1.E2", "PM1.G1.E3" }, //$NON-NLS-1$ //$NON-NLS-2$ new String[] { "PM1.G1.E2", "PM1.G1.E3" } ); //$NON-NLS-1$ //$NON-NLS-2$ assertEquals("Resolved string form was incorrect ", sql, resolvedQuery.toString()); //$NON-NLS-1$ List projSymbols = resolvedQuery.getSelect().getProjectedSymbols(); assertEquals("Wrong number of projected symbols", 2, projSymbols.size()); //$NON-NLS-1$ assertEquals("Wrong type for first symbol", String.class, ((Expression)projSymbols.get(0)).getType()); //$NON-NLS-1$ assertEquals("Wrong type for second symbol", Double.class, ((Expression)projSymbols.get(1)).getType()); //$NON-NLS-1$ }