Silun Dong created CALCITE-7437:
-----------------------------------

             Summary: Type coercion for quantifier operators is incomplete
                 Key: CALCITE-7437
                 URL: https://issues.apache.org/jira/browse/CALCITE-7437
             Project: Calcite
          Issue Type: Bug
          Components: core
            Reporter: Silun Dong


The follow sql will throw an error at runtime:

 
{code:java}
SELECT deptno, dname > SOME(SELECT empno FROM emp) AS b FROM dept;


// the plan in CoreQuidemTest
EnumerableCalc(expr#0..4=[{inputs}], expr#5=[>($t4, $t0)], expr#6=[IS 
TRUE($t5)], expr#7=[0], expr#8=[<>($t1, $t7)], expr#9=[AND($t6, $t8)], 
expr#10=[>($t1, $t2)], expr#11=[null:BOOLEAN], expr#12=[IS NOT TRUE($t5)], 
expr#13=[AND($t10, $t11, $t8, $t12)], expr#14=[<=($t1, $t2)], expr#15=[AND($t5, 
$t8, $t12, $t14)], expr#16=[OR($t9, $t13, $t15)], DEPTNO=[$t3], B=[$t16])
  EnumerableNestedLoopJoin(condition=[true], joinType=[inner])
    EnumerableCalc(expr#0..1=[{inputs}], proj#0..1=[{exprs}], d=[$t1])
      EnumerableAggregate(group=[{}], m=[MIN($0)], c=[COUNT()])
        EnumerableTableScan(table=[[scott, EMP]])
    EnumerableCalc(expr#0..2=[{inputs}], proj#0..1=[{exprs}])
      EnumerableTableScan(table=[[scott, DEPT]])

// the plan in CoreQuidemTest2
EnumerableCalc(expr#0..2=[{inputs}], DEPTNO=[$t0], B=[$t2])
  EnumerableNestedLoopJoin(condition=[>($1, $2)], joinType=[left_mark])
    EnumerableCalc(expr#0..2=[{inputs}], proj#0..1=[{exprs}])
      EnumerableTableScan(table=[[scott, DEPT]])
    EnumerableCalc(expr#0..7=[{inputs}], EMPNO=[$t0])
      EnumerableTableScan(table=[[scott, EMP]])

// both will throw an error at runtime
java.lang.RuntimeException: while resolving method 'gt[class java.lang.String, 
short]' in class class org.apache.calcite.runtime.SqlFunctions{code}
The type of {{dname}} is VARCHAR, while the type of {{empno}} is SMALLINT. 

There is no type coercion being applied here, is that expected? The current 
implementation in Calcite seems to perform type coercion by default. It's just 
that the quantifier operators only handle the case where the right operand is a 
[collection 
expression|https://github.com/apache/calcite/blob/c628e6876bc28f268a69dece649c172869118607/core/src/main/java/org/apache/calcite/sql/fun/SqlQuantifyOperator.java#L109]
 during type coercion, ignoring subqueries.

Should we consider this a bug and improve the subqueries case?



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

Reply via email to