@Test public void testOptionalFromClause8() {
String sql = "SELECT b FROM t1, /*+ optional */ (/*+ optional */ (SELECT * FROM t1, t2) AS x INNER JOIN t3 ON x.a = t3.a)"; //$NON-NLS-1$
Query query = new Query();
Select select = new Select();
select.addSymbol(new ElementSymbol("b"));//$NON-NLS-1$
query.setSelect(select);
From from = new From();
Query query2 = new Query();
select = new Select();
select.addSymbol(new AllSymbol());
From from2 = new From();
from2.addGroup(new GroupSymbol("t1")); //$NON-NLS-1$
from2.addGroup(new GroupSymbol("t2")); //$NON-NLS-1$
query2.setSelect(select);
query2.setFrom(from2);
SubqueryFromClause sfc = new SubqueryFromClause("x", query2);//$NON-NLS-1$
sfc.setOptional(true);
UnaryFromClause ufc2 = new UnaryFromClause();
ufc2.setGroup(new GroupSymbol("t3")); //$NON-NLS-1$
List criteria = new ArrayList();
criteria.add(new CompareCriteria(new ElementSymbol("x.a"), AbstractCompareCriteria.EQ, new ElementSymbol("t3.a")));//$NON-NLS-1$//$NON-NLS-2$
JoinPredicate joinPredicate = new JoinPredicate(sfc, ufc2, JoinType.JOIN_INNER, criteria);
joinPredicate.setOptional(true);
UnaryFromClause ufc3 = new UnaryFromClause();
ufc3.setGroup(new GroupSymbol("t1")); //$NON-NLS-1$