@Override public void visit(Select obj) { visitNodes(obj.getDerivedColumns()); visitNodes(obj.getFrom()); visitNode(obj.getWhere()); visitNode(obj.getGroupBy()); visitNode(obj.getHaving()); visitNode(obj.getOrderBy()); }
@Override public void visit(Select obj) { visitNodes(obj.getFrom()); this.conditionFragments.add(obj.getWhere()); visitNode(obj.getOrderBy()); visitNode(obj.getLimit()); visitNodes(obj.getDerivedColumns()); }
@Override public List<?> translateCommand(Command command, ExecutionContext context) { if (command instanceof SetQuery) { SetQuery set = (SetQuery)command; if (!set.isAll()) { //distinct is not supported, convert to an inline view and add distinct Select s = new Select(); s.setDistinct(true); s.setDerivedColumns(new ArrayList<DerivedColumn>()); s.setOrderBy(set.getOrderBy()); for (DerivedColumn dc : set.getProjectedQuery().getDerivedColumns()) { Assertion.assertTrue(dc.getAlias() != null); //it's expected that the columns will be aliases ColumnReference cr = new ColumnReference(null, dc.getAlias(), null, dc.getExpression().getType()); s.getDerivedColumns().add(new DerivedColumn(null, cr)); } set.setOrderBy(null); s.setLimit(set.getLimit()); set.setLimit(null); set.setAll(true); s.setFrom(Arrays.asList((TableReference)new DerivedTable(set, "x"))); //$NON-NLS-1$ return Arrays.asList(s); } } return super.translateCommand(command, context); }
/** * Method to get SELECT Element list from the supplied query * @param query the supplied Query * @return the list of SELECT elements */ private ArrayList<Column> getElementsFromSelectSymbols(Select query) { ArrayList<Column> selectElementList = new ArrayList<Column>(); Iterator<DerivedColumn> selectSymbolItr = query.getDerivedColumns().iterator(); while(selectSymbolItr.hasNext()) { Column e = getElementFromSymbol(selectSymbolItr.next()); selectElementList.add(e); } return selectElementList; }
@Override public List<?> translateCommand(Command command, ExecutionContext context) { if (command instanceof Select) { Select select = (Select)command; if (select.getFrom() == null || select.getFrom().isEmpty()) { List<Object> result = new ArrayList<Object>(); result.add("VALUES("); //$NON-NLS-1$ for (int i = 0; i < select.getDerivedColumns().size(); i++) { DerivedColumn dc = select.getDerivedColumns().get(i); if (i != 0) { result.add(", "); //$NON-NLS-1$ } result.add(dc.getExpression()); } result.add(")"); //$NON-NLS-1$ return result; } } return super.translateCommand(command, context); }
Condition c = select.getWhere(); List<Condition> conditions = LanguageUtil.separateCriteriaByAnd(c); Map<String, List<Comparison>> tables = new HashMap<String, List<Comparison>>(); tempTables.add(table); select.getFrom().add(0, table); //TODO: assumes that ansi and non-ansi can be mixed List<? extends List<?>> list = select.getDependentValues().get(entry.getKey()); loadTempTable(cols, params, tableName, table, list); select.setDependentValues(null); select.setWhere(LanguageUtil.combineCriteria(conditions)); return result;
@Override public List<?> translateCommand(Command command, ExecutionContext context) { if (!supportsLiteralOnlyWithGrouping() && (command instanceof Select)) { Select select = (Select)command; if (select.getGroupBy() != null && select.getDerivedColumns().size() == 1) { DerivedColumn dc = select.getDerivedColumns().get(0); if (dc.getExpression() instanceof Literal) { dc.setExpression(select.getGroupBy().getElements().get(0)); } } } return super.translateCommand(command, context); }
if (((queryCommand instanceof Select && ((Select)queryCommand).isDistinct()) || (queryCommand instanceof SetQuery && !((SetQuery)queryCommand).isAll()))) { for (DerivedColumn selectSymbol : queryCommand.getProjectedQuery().getDerivedColumns()) { if (selectSymbol.getAlias() == null) { allAliased = false; if (orderBy != null && queryCommand instanceof Select) { Select select = (Select)queryCommand; if (!select.isDistinct() && select.getGroupBy() == null) { windowSpecification.setOrderBy(orderBy); expression.setWindowSpecification(windowSpecification); select.getDerivedColumns().add(new DerivedColumn("ROWNUM_", expression)); //$NON-NLS-1$ parts.add(" FROM ("); //$NON-NLS-1$ parts.add(select);
Select select = (Select)command; TableReference tr = select.getFrom().get(0); if (tr instanceof NamedTable && isDual((NamedTable)tr)) { if (limit.getRowOffset() > 0 || limit.getRowLimit() == 0) { select.setWhere(new Comparison(new Literal(1, TypeFacility.RUNTIME_TYPES.INTEGER), new Literal(0, TypeFacility.RUNTIME_TYPES.INTEGER), Operator.EQ)); return null; for (DerivedColumn selectSymbol : queryCommand.getProjectedQuery().getDerivedColumns()) { if (selectSymbol.getAlias() == null) { allAliased = false;
private void validateOrderBy(Select obj) { Collection<ColumnReference> whereColumns = CollectorVisitor.collectElements(obj.getWhere()); for (SortSpecification sort:obj.getOrderBy().getSortSpecifications()) { boolean matched = false; for (ColumnReference where:whereColumns) { ColumnReference col = (ColumnReference)sort.getExpression(); if (col.getName().equals(where.getName())) { matched = true; } } if (!matched) { this.exceptions.add(new TranslatorException(SimpleDBPlugin.Event.TEIID24005, SimpleDBPlugin.Util.gs(SimpleDBPlugin.Event.TEIID24005))); break; } } }
public List<?> translateCommand(Command command, ExecutionContext context) { if (!(command instanceof Select)) { return null; } Select select = (Select)command; TableReference tableReference = select.getFrom().get(0); moveCondition(select, tableReference); return null; }
public void testGetWhere() throws Exception { assertNotNull(example(true).getWhere()); }
/** * only a single join predicate is supported, so move up conditions if possible */ private void moveCondition(Select select, TableReference tableReference) { if (!(tableReference instanceof Join)) { return; } Join join = (Join)tableReference; if (join.getJoinType() != JoinType.INNER_JOIN) { return; } while (join.getCondition() instanceof AndOr) { AndOr andOr = (AndOr) join.getCondition(); if (andOr.getOperator() == AndOr.Operator.OR) { break; } Condition c = andOr.getLeftCondition(); select.setWhere(LanguageUtil.combineCriteria(select.getWhere(), c, getLanguageFactory())); join.setCondition(andOr.getRightCondition()); } moveCondition(select, join.getLeftItem()); moveCondition(select, join.getRightItem()); } }
assertEquals(1, s.getDependentValues().size()); List<? extends List<?>> vals = s.getDependentValues().values().iterator().next(); assertEquals(2, vals.size()); if (supportsArrayType) { Comparison comp = (Comparison) s.getWhere(); Parameter p = (Parameter)((Array)comp.getRightExpression()).getExpressions().get(0); assertEquals(0, p.getValueIndex()); assertNotNull(s.getDependentValues().get(p.getDependentValueId()));
public Select createQuery( List<DerivedColumn> select, boolean isDistinct, List<TableReference> from, Condition where, GroupBy groupBy, Condition having, OrderBy orderBy) { return new Select(select, isDistinct, from, where, groupBy, having, orderBy); }
public void testGetGroupBy() throws Exception { assertNotNull(example(true).getGroupBy()); }
public void testGetOrderBy() throws Exception { assertNotNull(example(true).getOrderBy()); }
public void testGetColumnDataTypes(){ Class<?>[] expectedResults = new Class[2]; List<DerivedColumn> symbols = new ArrayList<DerivedColumn>(); symbols.add(new DerivedColumn("c1", new Literal("3", DataTypeManager.DefaultDataClasses.STRING))); //$NON-NLS-1$//$NON-NLS-2$ expectedResults[0] = DataTypeManager.DefaultDataClasses.STRING; symbols.add(new DerivedColumn("c2", new Literal(new Integer(5), DataTypeManager.DefaultDataClasses.INTEGER))); //$NON-NLS-1$ expectedResults[1] = DataTypeManager.DefaultDataClasses.INTEGER; Select query = new Select(symbols, false, null, null, null, null, null); Class<?>[] results = query.getColumnTypes(); assertEquals( results[0], expectedResults[0]); assertEquals( results[1], expectedResults[1]); }