/** * Merges the from clause into a single join predicate if there are more than 1 from clauses */ private static FromClause mergeClauseTrees(From from) { List<FromClause> clauses = from.getClauses(); while (clauses.size() > 1) { FromClause first = from.getClauses().remove(0); FromClause second = from.getClauses().remove(0); JoinPredicate jp = new JoinPredicate(first, second, JoinType.JOIN_CROSS); clauses.add(0, jp); } return clauses.get(0); }
/** * Merges the from clause into a single join predicate if there are more than 1 from clauses */ private static FromClause mergeClauseTrees(From from) { List<FromClause> clauses = from.getClauses(); while (clauses.size() > 1) { FromClause first = from.getClauses().remove(0); FromClause second = from.getClauses().remove(0); JoinPredicate jp = new JoinPredicate(first, second, JoinType.JOIN_CROSS); clauses.add(0, jp); } return clauses.get(0); }
/** * Merges the from clause into a single join predicate if there are more than 1 from clauses */ private static FromClause mergeClauseTrees(From from) { List<FromClause> clauses = from.getClauses(); while (clauses.size() > 1) { FromClause first = from.getClauses().remove(0); FromClause second = from.getClauses().remove(0); JoinPredicate jp = new JoinPredicate(first, second, JoinType.JOIN_CROSS); clauses.add(0, jp); } return clauses.get(0); }
public void testJoinPredicate2() { GroupSymbol gs1 = exampleGroupSymbol(1); GroupSymbol gs2 = exampleGroupSymbol(2); GroupSymbol gs3 = exampleGroupSymbol(3); JoinPredicate jp1 = new JoinPredicate(new UnaryFromClause(gs1), new UnaryFromClause(gs2), JoinType.JOIN_CROSS); JoinPredicate jp2 = new JoinPredicate(new UnaryFromClause(gs3), jp1, JoinType.JOIN_CROSS); Set groups = new HashSet(); groups.add(gs1); groups.add(gs2); groups.add(gs3); helpTestGroups(jp2, true, groups); }
public void testJoinPredicate1() { GroupSymbol gs1 = exampleGroupSymbol(1); GroupSymbol gs2 = exampleGroupSymbol(2); JoinPredicate jp = new JoinPredicate(new UnaryFromClause(gs1), new UnaryFromClause(gs2), JoinType.JOIN_CROSS); Set groups = new HashSet(); groups.add(gs1); groups.add(gs2); helpTestGroups(jp, true, groups); }
DocumentNode joinTable(DocumentNode joinResource, EdmNavigationProperty property, JoinType joinType) throws TeiidException { Criteria crit = null; if (!joinType.equals(JoinType.JOIN_CROSS)) { crit = buildJoinCriteria(joinResource, property); } FromClause fromClause; if (joinResource.getKeyPredicates() != null && joinResource.getKeyPredicates().size() > 0) { // here the previous entityset is verbose; need to be canonicalized fromClause = new UnaryFromClause(joinResource.getGroupSymbol()); } else { fromClause = new JoinPredicate(this.getFromClause(), new UnaryFromClause(joinResource.getGroupSymbol()), joinType, crit); } joinResource.setFromClause(fromClause); return joinResource; }
public static JoinPredicate helpExample(JoinType type) { ElementSymbol e1 = TestElementImpl.helpExample("vm1.g1", "e1"); //$NON-NLS-1$ //$NON-NLS-2$ ElementSymbol e2 = TestElementImpl.helpExample("vm1.g2", "e1"); //$NON-NLS-1$ //$NON-NLS-2$ ArrayList criteria = new ArrayList(); criteria.add(new CompareCriteria(e1, CompareCriteria.EQ, e2)); return new JoinPredicate(new UnaryFromClause(e1.getGroupSymbol()), new UnaryFromClause(e2.getGroupSymbol()), type, criteria); }
@Test public void testJoinPredicate4() { ArrayList<Criteria> crits = new ArrayList<Criteria>(); crits.add(new CompareCriteria(new ElementSymbol("m.g2.e1"), CompareCriteria.EQ, new ElementSymbol("m.g3.e1"))); //$NON-NLS-1$ //$NON-NLS-2$ JoinPredicate jp = new JoinPredicate( new UnaryFromClause(new GroupSymbol("m.g2")), //$NON-NLS-1$ new UnaryFromClause(new GroupSymbol("m.g3")), //$NON-NLS-1$ JoinType.JOIN_INNER, crits ); JoinPredicate jp2 = new JoinPredicate( jp, new UnaryFromClause(new GroupSymbol("m.g1")), //$NON-NLS-1$ JoinType.JOIN_CROSS); helpTest(jp2, "(m.g2 INNER JOIN m.g3 ON m.g2.e1 = m.g3.e1) CROSS JOIN m.g1"); //$NON-NLS-1$ }
@Test public void testJoinPredicate2() { ArrayList<Criteria> crits = new ArrayList<Criteria>(); crits.add(new CompareCriteria(new ElementSymbol("m.g2.e1"), CompareCriteria.EQ, new ElementSymbol("m.g3.e1"))); //$NON-NLS-1$ //$NON-NLS-2$ JoinPredicate jp = new JoinPredicate( new UnaryFromClause(new GroupSymbol("m.g2")), //$NON-NLS-1$ new UnaryFromClause(new GroupSymbol("m.g3")), //$NON-NLS-1$ JoinType.JOIN_INNER, crits ); helpTest(jp, "m.g2 INNER JOIN m.g3 ON m.g2.e1 = m.g3.e1"); //$NON-NLS-1$ }
@Test public void testJoinPredicate3() { ArrayList<Criteria> crits = new ArrayList<Criteria>(); crits.add(new CompareCriteria(new ElementSymbol("m.g2.e1"), CompareCriteria.EQ, new ElementSymbol("m.g3.e1"))); //$NON-NLS-1$ //$NON-NLS-2$ crits.add(new CompareCriteria(new ElementSymbol("m.g2.e2"), CompareCriteria.EQ, new ElementSymbol("m.g3.e2"))); //$NON-NLS-1$ //$NON-NLS-2$ JoinPredicate jp = new JoinPredicate( new UnaryFromClause(new GroupSymbol("m.g2")), //$NON-NLS-1$ new UnaryFromClause(new GroupSymbol("m.g3")), //$NON-NLS-1$ JoinType.JOIN_INNER, crits ); helpTest(jp, "m.g2 INNER JOIN m.g3 ON m.g2.e1 = m.g3.e1 AND m.g2.e2 = m.g3.e2"); //$NON-NLS-1$ }
@Test public void testUnionJoin() { String sql = "select * from pm1.g1 union join pm1.g2 where g1.e1 = 1"; //$NON-NLS-1$ String expected = "SELECT * FROM pm1.g1 UNION JOIN pm1.g2 WHERE g1.e1 = 1"; //$NON-NLS-1$ Select select = new Select(); select.addSymbol(new MultipleElementSymbol()); From from = new From(); from.addClause(new JoinPredicate(new UnaryFromClause(new GroupSymbol("pm1.g1")), new UnaryFromClause(new GroupSymbol("pm1.g2")), JoinType.JOIN_UNION)); //$NON-NLS-1$ //$NON-NLS-2$ Criteria crit = new CompareCriteria(new ElementSymbol("g1.e1"), CompareCriteria.EQ, new Constant(new Integer(1))); //$NON-NLS-1$ Query command = new Query(select, from, crit, null, null); helpTest(sql, expected, command); }
@Test public void testDepOptions2() { GroupSymbol a = new GroupSymbol("a"); //$NON-NLS-1$ GroupSymbol b = new GroupSymbol("b"); //$NON-NLS-1$ ElementSymbol x = new ElementSymbol("a.x", true); //$NON-NLS-1$ ElementSymbol y = new ElementSymbol("b.y", true); //$NON-NLS-1$ Criteria criteria = new CompareCriteria(x, CompareCriteria.EQ, new Function("func", new Expression[] {y})); //$NON-NLS-1$ JoinPredicate predicate = new JoinPredicate(new UnaryFromClause(a), new UnaryFromClause(b), JoinType.JOIN_INNER, Arrays.asList(new Object[] {criteria})); From from = new From(Arrays.asList(predicate)); predicate.getLeftClause().setMakeNotDep(true); predicate.getRightClause().setMakeDep(true); Select select = new Select(Arrays.asList(x, y)); Query query = new Query(select, from, null, null, null, null, null); TestParser.helpTest("Select a.x, b.y From a MAKENOTDEP INNER JOIN b MAKEDEP ON a.x = func(b.y)", //$NON-NLS-1$ "SELECT a.x, b.y FROM /*+ MAKENOTDEP */ a INNER JOIN /*+ MAKEDEP */ b ON a.x = func(b.y)", //$NON-NLS-1$ query); }
@Test public void testJoinPredicate5() { ArrayList<Criteria> crits = new ArrayList<Criteria>(); crits.add(new NotCriteria(new CompareCriteria(new ElementSymbol("m.g2.e1"), CompareCriteria.EQ, new ElementSymbol("m.g3.e1")))); //$NON-NLS-1$ //$NON-NLS-2$ JoinPredicate jp = new JoinPredicate( new UnaryFromClause(new GroupSymbol("m.g2")), //$NON-NLS-1$ new UnaryFromClause(new GroupSymbol("m.g3")), //$NON-NLS-1$ JoinType.JOIN_INNER, crits ); helpTest(jp, "m.g2 INNER JOIN m.g3 ON NOT (m.g2.e1 = m.g3.e1)"); //$NON-NLS-1$ }
@Test public void testJoinPredicate1() { JoinPredicate jp = new JoinPredicate( new UnaryFromClause(new GroupSymbol("m.g2")), //$NON-NLS-1$ new UnaryFromClause(new GroupSymbol("m.g3")), //$NON-NLS-1$ JoinType.JOIN_CROSS); helpTest(jp, "m.g2 CROSS JOIN m.g3"); //$NON-NLS-1$ }
/** * * @since 4.2 */ private void helpTestCompoundNonJoinCriteria(String sqlPred, PredicateCriteria predCrit) { Select s = new Select(); s.addSymbol(new MultipleElementSymbol()); From f = new From(); CompareCriteria c1 = new CompareCriteria(new ElementSymbol("e1"), CompareCriteria.EQ, new Constant(new Integer(0))); //$NON-NLS-1$ CompoundCriteria cc1 = new CompoundCriteria(CompoundCriteria.AND, c1, predCrit); JoinPredicate jp = new JoinPredicate(new UnaryFromClause(new GroupSymbol("m.g1")), new UnaryFromClause(new GroupSymbol("m.g2")), JoinType.JOIN_INNER, cc1); //$NON-NLS-1$ //$NON-NLS-2$ f.addClause(jp); Query q = new Query(); q.setSelect(s); q.setFrom(f); helpTest("SELECT * FROM m.g1 JOIN m.g2 ON e1=0 AND " + sqlPred, //$NON-NLS-1$ "SELECT * FROM m.g1 INNER JOIN m.g2 ON e1 = 0 AND " + sqlPred, q); //$NON-NLS-1$ }
@Test public void testOptionalJoinPredicate1() { JoinPredicate jp = new JoinPredicate( new UnaryFromClause(new GroupSymbol("m.g2")), //$NON-NLS-1$ new UnaryFromClause(new GroupSymbol("m.g3")), //$NON-NLS-1$ JoinType.JOIN_CROSS); jp.setOptional(true); helpTest(jp, "/*+ optional */ (m.g2 CROSS JOIN m.g3)"); //$NON-NLS-1$ }
/** SELECT * FROM (g1 cross join g2) cross join g3 */ @Test public void testMultiCrossJoin() { UnaryFromClause g1 = new UnaryFromClause(new GroupSymbol("g1")); //$NON-NLS-1$ UnaryFromClause g2 = new UnaryFromClause(new GroupSymbol("g2")); //$NON-NLS-1$ JoinPredicate jp = new JoinPredicate(g1, g2, JoinType.JOIN_CROSS); JoinPredicate jp2 = new JoinPredicate(jp, new UnaryFromClause(new GroupSymbol("g3")), JoinType.JOIN_CROSS); //$NON-NLS-1$ From from = new From(); from.addClause(jp2); MultipleElementSymbol all = new MultipleElementSymbol(); Select select = new Select(); select.addSymbol(all); Query query = new Query(); query.setSelect(select); query.setFrom(from); helpTest("SELECT * FROM (g1 cross join g2) cross join g3", //$NON-NLS-1$ "SELECT * FROM (g1 CROSS JOIN g2) CROSS JOIN g3", //$NON-NLS-1$ query); }
@Test public void testEscapedOuterJoin() { String sql = "SELECT * FROM {oj A LEFT OUTER JOIN B ON (A.x=B.x)}"; //$NON-NLS-1$ String expected = "SELECT * FROM A LEFT OUTER JOIN B ON A.x = B.x"; //$NON-NLS-1$ Query query = new Query(); Select select = new Select(); query.setSelect(select); select.addSymbol(new MultipleElementSymbol()); From from = new From(); query.setFrom(from); Criteria compareCriteria = new CompareCriteria(new ElementSymbol("A.x"), CompareCriteria.EQ, new ElementSymbol("B.x")); //$NON-NLS-1$ //$NON-NLS-2$ FromClause f1 = new UnaryFromClause(new GroupSymbol("A")); //$NON-NLS-1$ FromClause f2 = new UnaryFromClause(new GroupSymbol("B")); //$NON-NLS-1$ JoinPredicate jp = new JoinPredicate(f1, f2, JoinType.JOIN_LEFT_OUTER, Arrays.asList(new Object[] {compareCriteria})); from.addClause(jp); helpTest(sql, expected, query); }
@Test public void testFrom2() { From from = new From(); from.addClause(new UnaryFromClause(new GroupSymbol("m.g1"))); //$NON-NLS-1$ from.addClause(new JoinPredicate( new UnaryFromClause(new GroupSymbol("m.g2")), //$NON-NLS-1$ new UnaryFromClause(new GroupSymbol("m.g3")), //$NON-NLS-1$ JoinType.JOIN_CROSS) ); helpTest(from, "FROM m.g1, m.g2 CROSS JOIN m.g3"); //$NON-NLS-1$ }
/** SELECT * FROM g1 cross join g2 */ @Test public void testCrossJoin() { UnaryFromClause g1 = new UnaryFromClause(new GroupSymbol("g1")); //$NON-NLS-1$ UnaryFromClause g2 = new UnaryFromClause(new GroupSymbol("g2")); //$NON-NLS-1$ JoinPredicate jp = new JoinPredicate(g1, g2, JoinType.JOIN_CROSS); From from = new From(); from.addClause(jp); MultipleElementSymbol all = new MultipleElementSymbol(); Select select = new Select(); select.addSymbol(all); Query query = new Query(); query.setSelect(select); query.setFrom(from); helpTest("SELECT * FROM g1 cross join g2", //$NON-NLS-1$ "SELECT * FROM g1 CROSS JOIN g2", //$NON-NLS-1$ query); }