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)

Reply via email to