Wang Yanlin created CALCITE-3407:
------------------------------------
Summary: Add support for interpretering minus/intersect relational
set operators
Key: CALCITE-3407
URL: https://issues.apache.org/jira/browse/CALCITE-3407
Project: Calcite
Issue Type: Improvement
Reporter: Wang Yanlin
Currently, for SetOp, only `union` is supported by Interpreter
add the test cases in InterpreterTest, and run, they will fail by throwing
exception
{code:java}
@Test public void testInterpretIntersect() throws Exception {
final String sql = "select * from\n"
+ "(select x, y from (values (1, 'a'), (1, 'a'), (2, 'b'), (3, 'c')) as
t(x, y))\n"
+ "intersect\n"
+ "(select x, y from (values (1, 'a'), (2, 'c'), (4, 'x')) as t2(x,
y))\n";
SqlNode validate = planner.validate(planner.parse(sql));
RelNode convert = planner.rel(validate).rel;
final Interpreter interpreter = new Interpreter(dataContext, convert);
assertRows(interpreter, "[1, a]");
}
@Test public void testInterpretIntersectAll() throws Exception {
final String sql = "select * from\n"
+ "(select x, y from (values (1, 'a'), (1, 'a'), (2, 'b'), (3, 'c')) as
t(x, y))\n"
+ "intersect all\n"
+ "(select x, y from (values (1, 'a'), (2, 'c'), (4, 'x')) as t2(x,
y))\n";
SqlNode validate = planner.validate(planner.parse(sql));
RelNode convert = planner.rel(validate).rel;
final Interpreter interpreter = new Interpreter(dataContext, convert);
assertRows(interpreter, "[1, a]", "[1, a]");
}
@Test public void testInterpretMinus() throws Exception {
final String sql = "select * from\n"
+ "(select x, y from (values (1, 'a'), (2, 'b'), (2, 'b'), (3, 'c')) as
t(x, y))\n"
+ "except\n"
+ "(select x, y from (values (1, 'a'), (2, 'c'), (4, 'x')) as t2(x,
y))\n";
SqlNode validate = planner.validate(planner.parse(sql));
RelNode convert = planner.rel(validate).rel;
final Interpreter interpreter = new Interpreter(dataContext, convert);
assertRows(interpreter, "[2, b]", "[3, c]");
}
@Test public void testInterpretMinusAll() throws Exception {
final String sql = "select * from\n"
+ "(select x, y from (values (1, 'a'), (2, 'b'), (2, 'b'), (3, 'c')) as
t(x, y))\n"
+ "except all\n"
+ "(select x, y from (values (1, 'a'), (2, 'c'), (4, 'x')) as t2(x,
y))\n";
SqlNode validate = planner.validate(planner.parse(sql));
RelNode convert = planner.rel(validate).rel;
final Interpreter interpreter = new Interpreter(dataContext, convert);
assertRows(interpreter, "[2, b]", "[2, b]", "[3, c]");
}
{code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)