Julian Hyde created CALCITE-7628:
------------------------------------

             Summary: Interpreter gives wrong result for query with MINUS or 
INTERSECT with 3 or more inputs
                 Key: CALCITE-7628
                 URL: https://issues.apache.org/jira/browse/CALCITE-7628
             Project: Calcite
          Issue Type: Bug
            Reporter: Julian Hyde


A {{MINUS}} (or {{INTERSECT}}, {{UNION}}) with three or more inputs returns the 
wrong result in the interpreter. For example, evaluated via the interpreter:

{code:sql}
VALUES 1, 2, 3 EXCEPT VALUES 3, 4, 5 EXCEPT VALUES 4, 5, 1;
{code}

returns {{[1], [2]}} but should return {{[2]}}.

The cause is that {{SetOpNode}} reads only the first two inputs 
({{compiler.source(setOp, 0)}} and {{compiler.source(setOp, 1)}}); inputs at 
index 2 and beyond are silently dropped. It should fold the operation across 
all of {{setOp.getInputs()}}.

Only the interpreter (BindableConvention) is affected; {{EnumerableMinus}} is 
correct. Note that {{A EXCEPT B EXCEPT C}} is converted to a left-deep tree of 
two-input nodes, so this only surfaces once the merge rules collapse it into a 
single n-ary {{SetOp}} (as they do in bindable mode).

Reported via [Morel #402|https://github.com/hydromatic/morel/issues/402].



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to