@Test public final void testUnionClause() { ParseTree tree = analyzer.parse(setClauses[0]).getParseTree(); assertEquals(StatementType.UNION, tree.getType()); SetStmt union = (SetStmt) tree; assertEquals(StatementType.SELECT, union.getLeftTree().getType()); assertEquals(StatementType.SELECT, union.getRightTree().getType()); QueryBlock left = (QueryBlock) union.getLeftTree(); assertEquals("student", left.getFromTables()[0].getTableName()); QueryBlock right = (QueryBlock) union.getRightTree(); assertEquals("branch", right.getFromTables()[0].getTableName()); // multiple set statements tree = analyzer.parse(setClauses[1]).getParseTree(); assertEquals(StatementType.UNION, tree.getType()); union = (SetStmt) tree; assertEquals(StatementType.SELECT, union.getLeftTree().getType()); assertEquals(StatementType.INTERSECT, union.getRightTree().getType()); left = (QueryBlock) union.getLeftTree(); assertEquals("student", left.getFromTables()[0].getTableName()); SetStmt rightSet = (SetStmt) union.getRightTree(); left = (QueryBlock) rightSet.getLeftTree(); assertEquals("branch", left.getFromTables()[0].getTableName()); right = (QueryBlock) rightSet.getRightTree(); assertEquals("b", right.getFromTables()[0].getAlias()); }
@Test public final void testEmptyGroupSetStatement() { ParseTree tree = analyzer.parse(GROUP_BY[4]).getParseTree(); assertEquals(StatementType.SELECT, tree.getType()); QueryBlock block = (QueryBlock) tree; assertTrue(block.hasGroupbyClause()); assertTrue(block.getGroupByClause().isEmptyGroupSet()); }
@Test public final void testRollUpStatement() { ParseTree tree = analyzer.parse(GROUP_BY[2]).getParseTree(); assertEquals(StatementType.SELECT, tree.getType()); QueryBlock block = (QueryBlock) tree; assertTrue(block.hasGroupbyClause()); assertEquals(1, block.getGroupByClause().getGroupSet().size()); assertEquals(GroupType.ROLLUP, block.getGroupByClause().getGroupSet().get(0).getType()); List<GroupElement> groups = block.getGroupByClause().getGroupSet(); assertEquals("people.name", groups.get(0).getColumns()[0].getQualifiedName()); assertEquals("people.age", groups.get(0).getColumns()[1].getQualifiedName()); }
@Test public final void testGroupByStatement() { ParseTree tree = analyzer.parse(GROUP_BY[0]).getParseTree(); assertEquals(StatementType.SELECT, tree.getType()); QueryBlock block = (QueryBlock) tree; assertTrue(block.hasGroupbyClause()); assertEquals(1, block.getGroupByClause().getGroupSet().size()); assertEquals( "age", block.getGroupByClause().getGroupSet().get(0).getColumns()[0].getColumnName()); assertTrue(block.hasHavingCond()); assertEquals(Type.GTH, block.getHavingCond().getType()); }
@Test public void testCaseWhen() { ParseTree tree = analyzer .parse( "select case when p_type like 'PROMO%' then l_extendedprice * (1 - l_discount) " + "when p_type = 'MOCC' then l_extendedprice - 100 else 0 end as cond from lineitem, part") .getParseTree(); assertEquals(StatementType.SELECT, tree.getType()); QueryBlock block = (QueryBlock) tree; assertTrue(block.getTargetList()[0].hasAlias()); assertEquals("cond", block.getTargetList()[0].getAlias()); assertEquals(DataType.DOUBLE, block.getTargetList()[0].getEvalTree().getValueType()[0]); }
@Test public final void testSetQulaifier() { ParseTree tree = analyzer.parse(setQualifier[0]).getParseTree(); assertEquals(StatementType.SELECT, tree.getType()); QueryBlock block = (QueryBlock) tree; assertFalse(block.isDistinct()); tree = analyzer.parse(setQualifier[1]).getParseTree(); assertEquals(StatementType.SELECT, tree.getType()); block = (QueryBlock) tree; assertTrue(block.isDistinct()); tree = analyzer.parse(setQualifier[2]).getParseTree(); assertEquals(StatementType.SELECT, tree.getType()); block = (QueryBlock) tree; assertFalse(block.isDistinct()); }
@Test public final void testMixedGroupByStatement() { ParseTree tree = analyzer.parse(GROUP_BY[3]).getParseTree(); assertEquals(StatementType.SELECT, tree.getType()); QueryBlock block = (QueryBlock) tree; assertTrue(block.hasGroupbyClause()); assertEquals(3, block.getGroupByClause().getGroupSet().size()); Iterator<GroupElement> it = block.getGroupByClause().getGroupSet().iterator(); GroupElement group = it.next(); assertEquals(GroupType.CUBE, group.getType()); assertEquals("people.name", group.getColumns()[0].getQualifiedName()); group = it.next(); assertEquals(GroupType.ROLLUP, group.getType()); assertEquals("people.age", group.getColumns()[0].getQualifiedName()); group = it.next(); assertEquals(GroupType.GROUPBY, group.getType()); assertEquals("people.id", group.getColumns()[0].getQualifiedName()); }