private QueryCommand minimizeWithProjection(WithQueryCommand with, QueryCommand subCommand, TempMetadataID tid, Collection<TempMetadataID> accessed) throws QueryMetadataException, QueryResolverException, TeiidComponentException { List<TempMetadataID> elements = tid.getElements(); List<Integer> toRemove = new ArrayList<Integer>(); for (int i = elements.size()-1; i >= 0; i--) { TempMetadataID elem = elements.get(i); if (!accessed.contains(elem)) { toRemove.add(i); } } //the strategy here is to replace the actual projections with null. this keeps //the definition of the with clause consistent if (!toRemove.isEmpty()) { if (with.isRecursive()) { SetQuery setQuery = (SetQuery) subCommand; setQuery.setLeftQuery(removeUnusedProjection(with, setQuery.getLeftQuery(), elements, toRemove)); setQuery.setRightQuery(removeUnusedProjection(with, setQuery.getRightQuery(), elements, toRemove)); } else { subCommand = removeUnusedProjection(with, subCommand, elements, toRemove); with.setCommand(subCommand); } } return subCommand; }
private QueryCommand minimizeWithProjection(WithQueryCommand with, QueryCommand subCommand, TempMetadataID tid, Collection<TempMetadataID> accessed) throws QueryMetadataException, QueryResolverException, TeiidComponentException { List<TempMetadataID> elements = tid.getElements(); List<Integer> toRemove = new ArrayList<Integer>(); for (int i = elements.size()-1; i >= 0; i--) { TempMetadataID elem = elements.get(i); if (!accessed.contains(elem)) { toRemove.add(i); } } //the strategy here is to replace the actual projections with null. this keeps //the definition of the with clause consistent if (!toRemove.isEmpty()) { if (with.isRecursive()) { SetQuery setQuery = (SetQuery) subCommand; setQuery.setLeftQuery(removeUnusedProjection(with, setQuery.getLeftQuery(), elements, toRemove)); setQuery.setRightQuery(removeUnusedProjection(with, setQuery.getRightQuery(), elements, toRemove)); } else { subCommand = removeUnusedProjection(with, subCommand, elements, toRemove); with.setCommand(subCommand); } } return subCommand; }
public static org.teiid.query.sql.lang.SetQuery helpExampleSetQuery() { org.teiid.query.sql.lang.SetQuery setQuery = new org.teiid.query.sql.lang.SetQuery(Operation.UNION); setQuery.setAll(false); setQuery.setLeftQuery(TestQueryImpl.helpExample(true)); setQuery.setRightQuery(TestQueryImpl.helpExample(true)); setQuery.setOrderBy(TestOrderByImpl.helpExample()); return setQuery; }
private SetQuery rewriteSetQuery(SetQuery setQuery) throws TeiidComponentException, TeiidProcessingException{ if (setQuery.getProjectedTypes() != null) { for (QueryCommand command : setQuery.getQueryCommands()) { if (!(command instanceof Query)) { continue; } correctProjectedTypes(setQuery.getProjectedTypes(), (Query)command); } setQuery.setProjectedTypes(null, null); } setQuery.setLeftQuery((QueryCommand)rewriteCommand(setQuery.getLeftQuery(), true)); setQuery.setRightQuery((QueryCommand)rewriteCommand(setQuery.getRightQuery(), true)); rewriteOrderBy(setQuery); if (setQuery.getLimit() != null) { setQuery.setLimit(rewriteLimitClause(setQuery.getLimit())); } return setQuery; }
private SetQuery rewriteSetQuery(SetQuery setQuery) throws TeiidComponentException, TeiidProcessingException{ if (setQuery.getProjectedTypes() != null) { for (QueryCommand command : setQuery.getQueryCommands()) { if (!(command instanceof Query)) { continue; } correctProjectedTypes(setQuery.getProjectedTypes(), (Query)command); } setQuery.setProjectedTypes(null, null); } setQuery.setLeftQuery((QueryCommand)rewriteCommand(setQuery.getLeftQuery(), true)); setQuery.setRightQuery((QueryCommand)rewriteCommand(setQuery.getRightQuery(), true)); rewriteOrderBy(setQuery); if (setQuery.getLimit() != null) { setQuery.setLimit(rewriteLimitClause(setQuery.getLimit())); } return setQuery; }
private SetQuery rewriteSetQuery(SetQuery setQuery) throws TeiidComponentException, TeiidProcessingException{ if (setQuery.getProjectedTypes() != null) { for (QueryCommand command : setQuery.getQueryCommands()) { if (!(command instanceof Query)) { continue; } correctProjectedTypes(setQuery.getProjectedTypes(), (Query)command); } setQuery.setProjectedTypes(null, null); } setQuery.setLeftQuery((QueryCommand)rewriteCommand(setQuery.getLeftQuery(), true)); setQuery.setRightQuery((QueryCommand)rewriteCommand(setQuery.getRightQuery(), true)); rewriteOrderBy(setQuery); if (setQuery.getLimit() != null) { setQuery.setLimit(rewriteLimitClause(setQuery.getLimit())); } return setQuery; }
unionCommand.setLeftQuery(command); } else if (count == 1) { unionCommand.setRightQuery(command); } else { unionCommand = new SetQuery(setOp, unionAll, unionCommand, command);
unionCommand.setLeftQuery(command); } else if (count == 1) { unionCommand.setRightQuery(command); } else { unionCommand = new SetQuery(setOp, unionAll, unionCommand, command);
unionCommand.setLeftQuery(command); } else if (count == 1) { unionCommand.setRightQuery(command); } else { unionCommand = new SetQuery(setOp, unionAll, unionCommand, command);
@Test public void testMultipleValues(){ SetQuery setQuery = new SetQuery(Operation.UNION); setQuery.setAll(true); Select select = new Select(); select.addSymbol(new ElementSymbol("c1")); //$NON-NLS-1$ Query query = new Query(); query.setSelect(select); setQuery.setLeftQuery(query); select = new Select(); select.addSymbol(new ElementSymbol("c2")); //$NON-NLS-1$ query = new Query(); query.setSelect(select); setQuery.setRightQuery(query); TestParser.helpTest("values (c1), (c2)", //$NON-NLS-1$ "SELECT c1 UNION ALL SELECT c2", //$NON-NLS-1$ setQuery); }
/** SELECT x FROM g UNION ALL SELECT y FROM h */ public static final SetQuery sample1() { Query q1 = new Query(); Select select = new Select(); select.addSymbol(new ElementSymbol("x")); //$NON-NLS-1$ q1.setSelect(select); From from = new From(); from.addGroup(new GroupSymbol("g")); //$NON-NLS-1$ q1.setFrom(from); Query q2 = new Query(); select = new Select(); select.addSymbol(new ElementSymbol("y")); //$NON-NLS-1$ q2.setSelect(select); from = new From(); from.addGroup(new GroupSymbol("h")); //$NON-NLS-1$ q2.setFrom(from); SetQuery sq = new SetQuery(Operation.UNION); sq.setLeftQuery(q1); sq.setRightQuery(q2); return sq; }
private SetQuery exampleSetQuery(Operation op) { GroupSymbol g = new GroupSymbol("g"); //$NON-NLS-1$ From from = new From(); from.addGroup(g); Select select = new Select(); select.addSymbol(new ElementSymbol("a")); //$NON-NLS-1$ Query query1 = new Query(); query1.setSelect(select); query1.setFrom(from); g = new GroupSymbol("h"); //$NON-NLS-1$ from = new From(); from.addGroup(g); select = new Select(); select.addSymbol(new ElementSymbol("b")); //$NON-NLS-1$ Query query2 = new Query(); query2.setSelect(select); query2.setFrom(from); SetQuery setQuery = new SetQuery(op); setQuery.setAll(false); setQuery.setLeftQuery(query1); setQuery.setRightQuery(query2); return setQuery; }
public void test2() { Query q1 = new Query(); Select select = new Select(); select.addSymbol(new ElementSymbol("x")); //$NON-NLS-1$ q1.setSelect(select); From from = new From(); from.addGroup(new GroupSymbol("g")); //$NON-NLS-1$ q1.setFrom(from); Query q2 = new Query(); select = new Select(); select.addSymbol(new ElementSymbol("y")); //$NON-NLS-1$ q2.setSelect(select); from = new From(); from.addGroup(new GroupSymbol("h")); //$NON-NLS-1$ q2.setFrom(from); SetQuery sq = new SetQuery(Operation.INTERSECT); sq.setAll(false); sq.setLeftQuery(q1); sq.setRightQuery(q2); assertEquals("Query combiner string doesn't match expected: ", //$NON-NLS-1$ "SELECT x FROM g INTERSECT SELECT y FROM h", //$NON-NLS-1$ sq.toString()); }
setQuery.setAll(true); setQuery.setLeftQuery(query1); setQuery.setRightQuery(query2);
/** SELECT x FROM g INTERSECT SELECT y FROM h ORDER BY x */ public static final SetQuery sample2() { Query q1 = new Query(); Select select = new Select(); select.addSymbol(new ElementSymbol("x")); //$NON-NLS-1$ q1.setSelect(select); From from = new From(); from.addGroup(new GroupSymbol("g")); //$NON-NLS-1$ q1.setFrom(from); Query q2 = new Query(); select = new Select(); select.addSymbol(new ElementSymbol("y")); //$NON-NLS-1$ q2.setSelect(select); from = new From(); from.addGroup(new GroupSymbol("h")); //$NON-NLS-1$ q2.setFrom(from); SetQuery sq = new SetQuery(Operation.INTERSECT); sq.setAll(false); sq.setLeftQuery(q1); sq.setRightQuery(q2); OrderBy orderBy = new OrderBy(); orderBy.addVariable(new ElementSymbol("x")); //$NON-NLS-1$ sq.setOrderBy(orderBy); return sq; }
query.setFrom(from); setQuery.setRightQuery(query);
query.setFrom(from); setQuery.setRightQuery(query);