public DerivedTable createInlineView(QueryExpression query, String name) { return new DerivedTable(query, name); }
@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); }
TableReference translate(SubqueryFromClause clause) { if (clause.getCommand() instanceof StoredProcedure) { NamedProcedureCall result = new NamedProcedureCall(translate((StoredProcedure)clause.getCommand()), clause.getOutputName()); result.setLateral(clause.isLateral()); result.getCall().setTableReference(true); return result; } DerivedTable result = new DerivedTable(translate((QueryCommand)clause.getCommand()), clause.getOutputName()); result.setLateral(clause.isLateral()); return result; }
TableReference translate(SubqueryFromClause clause) { if (clause.getCommand() instanceof StoredProcedure) { NamedProcedureCall result = new NamedProcedureCall(translate((StoredProcedure)clause.getCommand()), clause.getOutputName()); result.setLateral(clause.isLateral()); result.getCall().setTableReference(true); return result; } DerivedTable result = new DerivedTable(translate((QueryCommand)clause.getCommand()), clause.getOutputName()); result.setLateral(clause.isLateral()); return result; }
TableReference translate(SubqueryFromClause clause) { if (clause.getCommand() instanceof StoredProcedure) { NamedProcedureCall result = new NamedProcedureCall(translate((StoredProcedure)clause.getCommand()), clause.getOutputName()); result.setLateral(clause.isLateral()); result.getCall().setTableReference(true); return result; } DerivedTable result = new DerivedTable(translate((QueryCommand)clause.getCommand()), clause.getOutputName()); result.setLateral(clause.isLateral()); return result; }