/** * Compare two Froms for equality. Order is not important in the from, so * this is a set comparison. */ public boolean equals(Object obj) { if(obj == this) { return true; } if(!(obj instanceof From)) { return false; } return EquivalenceUtil.areEqual(getClauses(), ((From)obj).getClauses()); }
/** * Take the query, built straight from the subtree, and rebuild as a simple query * if possible. * @param query Query built from collapsing the source nodes * @return Same query with simplified from clause if possible */ private void simplifyFromClause(Query query) { From from = query.getFrom(); List<FromClause> clauses = from.getClauses(); FromClause rootClause = clauses.get(0); // If all joins are inner joins, move criteria to WHERE and make // FROM a list of groups instead of a tree of JoinPredicates if(! hasOuterJoins(rootClause)) { from.setClauses(new ArrayList<FromClause>()); shredJoinTree(rootClause, query); } // else leave as is }
@Test public void testOptionalFromClause1_1() { String sql = "SELECT * FROM /*+ optional*/ t1, t2"; //$NON-NLS-1$ Query query = new Query(); Select select = new Select(); select.addSymbol(new MultipleElementSymbol()); query.setSelect(select); From from = new From(); UnaryFromClause ufc = new UnaryFromClause(); ufc.setGroup(new GroupSymbol("t1")); //$NON-NLS-1$ ufc.setOptional(true); from.addClause(ufc); from.addGroup(new GroupSymbol("t2")); //$NON-NLS-1$ query.setFrom(from); TestParser.helpTest(sql, "SELECT * FROM /*+ optional */ t1, t2", query); //$NON-NLS-1$ }
/** * Return copy of this From clause. */ public Object clone() { return new From(LanguageObject.Util.deepClone(clauses, FromClause.class)); }
/** * Checks if a group is in the From * @param group Group to check for * @return True if the From contains the group */ public boolean containsGroup( GroupSymbol group ) { return getGroups().contains(group); }
@Test public void testOptionalFromClause1_4() { String sql = "SELECT * /*+ optional */ FROM /*+ OptiOnal */ t1, t2"; //$NON-NLS-1$ Query query = new Query(); Select select = new Select(); select.addSymbol(new MultipleElementSymbol()); query.setSelect(select); From from = new From(); UnaryFromClause ufc = new UnaryFromClause(); ufc.setGroup(new GroupSymbol("t1")); //$NON-NLS-1$ ufc.setOptional(true); from.addClause(ufc); from.addGroup(new GroupSymbol("t2")); //$NON-NLS-1$ query.setFrom(from); TestParser.helpTest(sql, "SELECT * FROM /*+ optional */ t1, t2", query); //$NON-NLS-1$ }
public static Command createDeleteProcedure(Delete delete, QueryMetadataInterface metadata, CommandContext context) throws QueryResolverException, QueryMetadataException, TeiidComponentException, TeiidProcessingException { QueryRewriter rewriter = new QueryRewriter(metadata, context); Criteria crit = delete.getCriteria(); Query query = new Query(new Select(), new From(Arrays.asList(new UnaryFromClause(delete.getGroup()))), crit, null, null); return rewriter.createDeleteProcedure(delete, query, delete.getGroup(), delete.getGroup().getName()); }
/** * Checks if a group is in the From * @param group Group to check for * @return True if the From contains the group */ public boolean containsGroup( GroupSymbol group ) { return getGroups().contains(group); }
/** * Take the query, built straight from the subtree, and rebuild as a simple query * if possible. * @param query Query built from collapsing the source nodes * @return Same query with simplified from clause if possible */ private void simplifyFromClause(Query query) { From from = query.getFrom(); List<FromClause> clauses = from.getClauses(); FromClause rootClause = clauses.get(0); // If all joins are inner joins, move criteria to WHERE and make // FROM a list of groups instead of a tree of JoinPredicates if(! hasOuterJoins(rootClause)) { from.setClauses(new ArrayList<FromClause>()); shredJoinTree(rootClause, query); } // else leave as is }
@Test public void testOptionalFromClause1_5() { String sql = "SELECT * FROM /*+ OptiOnal */ t1, t2"; //$NON-NLS-1$ Query query = new Query(); Select select = new Select(); select.addSymbol(new MultipleElementSymbol()); query.setSelect(select); From from = new From(); UnaryFromClause ufc = new UnaryFromClause(); ufc.setGroup(new GroupSymbol("t1")); //$NON-NLS-1$ ufc.setOptional(true); from.addClause(ufc); from.addGroup(new GroupSymbol("t2")); //$NON-NLS-1$ query.setFrom(from); TestParser.helpTest(sql, "SELECT * FROM /*+ optional */ t1, t2", query); //$NON-NLS-1$ }
@Test public void testExecSubquery(){ Query query = new Query(); Select select = new Select(); select.addSymbol(new MultipleElementSymbol()); query.setSelect(select); From from = new From(); from.addClause(new UnaryFromClause(new GroupSymbol("newModel2.Table1"))); //$NON-NLS-1$ StoredProcedure subquery = new StoredProcedure(); subquery.setProcedureName("NewVirtual.StoredQuery"); from.addClause(new SubqueryFromClause("a", subquery)); //$NON-NLS-1$ query.setFrom(from); helpTest("SELECT * FROM newModel2.Table1, (EXEC NewVirtual.StoredQuery()) AS a", //$NON-NLS-1$ "SELECT * FROM newModel2.Table1, (EXEC NewVirtual.StoredQuery()) AS a", //$NON-NLS-1$ query); }
/** * Compare two Froms for equality. Order is not important in the from, so * this is a set comparison. */ public boolean equals(Object obj) { if(obj == this) { return true; } if(!(obj instanceof From)) { return false; } return EquivalenceUtil.areEqual(getClauses(), ((From)obj).getClauses()); }
public static Command createDeleteProcedure(Delete delete, QueryMetadataInterface metadata, CommandContext context) throws QueryResolverException, QueryMetadataException, TeiidComponentException, TeiidProcessingException { QueryRewriter rewriter = new QueryRewriter(metadata, context); Criteria crit = delete.getCriteria(); Query query = new Query(new Select(), new From(Arrays.asList(new UnaryFromClause(delete.getGroup()))), crit, null, null); return rewriter.createDeleteProcedure(delete, query, delete.getGroup(), delete.getGroup().getName()); }
/** * Checks if a group is in the From * @param group Group to check for * @return True if the From contains the group */ public boolean containsGroup( GroupSymbol group ) { return getGroups().contains(group); }
/** * Take the query, built straight from the subtree, and rebuild as a simple query * if possible. * @param query Query built from collapsing the source nodes * @return Same query with simplified from clause if possible */ private void simplifyFromClause(Query query) { From from = query.getFrom(); List<FromClause> clauses = from.getClauses(); FromClause rootClause = clauses.get(0); // If all joins are inner joins, move criteria to WHERE and make // FROM a list of groups instead of a tree of JoinPredicates if(! hasOuterJoins(rootClause)) { from.setClauses(new ArrayList<FromClause>()); shredJoinTree(rootClause, query); } // else leave as is }
private Query buildSubquery(DocumentNode eResource, org.teiid.query.sql.symbol.Expression projected) { Select s1 = new Select(); s1.addSymbol(projected); Query q = new Query(); From from = new From(); from.addGroup(eResource.getGroupSymbol()); q.setFrom(from); q.setCriteria(DocumentNode.buildJoinCriteria(eResource, this.ctxQuery)); q.setSelect(s1); return q; }
@Test public void testOptionalFromClause1_2() { String sql = "SELECT * FROM /*+optional */ t1, t2"; //$NON-NLS-1$ Query query = new Query(); Select select = new Select(); select.addSymbol(new MultipleElementSymbol()); query.setSelect(select); From from = new From(); UnaryFromClause ufc = new UnaryFromClause(); ufc.setGroup(new GroupSymbol("t1")); //$NON-NLS-1$ ufc.setOptional(true); from.addClause(ufc); from.addGroup(new GroupSymbol("t2")); //$NON-NLS-1$ query.setFrom(from); TestParser.helpTest(sql, "SELECT * FROM /*+ optional */ t1, t2", query); //$NON-NLS-1$ }