Hi Calcite,

I am wondering why we convert a value list with NULL into an inline table.
The code is in SqlToRelConverter, where we call
!containsNullLiteral(valueList). For example, if I have a SQL select * from
druid.foo where dim in ('a', null) then why do we not convert this to
dim='a' OR dim=null.
Furthermore, this then can be simply to just dim='a' since dim=null is
always null.

The plan I got after converting SqlNode to RelNode:
LogicalProject(__time=[$0], cnt=[$1], dim1=[$2], dim2=[$3], dim3=[$4],
m1=[$5], m2=[$6], unique_dim1=[$7])
  LogicalJoin(condition=[=($3, $8)], joinType=[inner])
    LogicalTableScan(table=[[druid, foo]])
    LogicalAggregate(group=[{0}])
      LogicalValues(tuples=[[{ 'a' }, { null }]])
however, i expect:
LogicalProject(__time=[$0], cnt=[$1], dim1=[$2], dim2=[$3], dim3=[$4],
m1=[$5], m2=[$6], unique_dim1=[$7])
  LogicalFilter(condition=[OR(=($3, 'a'), =($3, null))])
    LogicalTableScan(table=[[druid, foo]])

or something like:
LogicalProject(__time=[$0], cnt=[$1], dim1=[$2], dim2=[$3], dim3=[$4],
m1=[$5], m2=[$6], unique_dim1=[$7])
  LogicalFilter(condition=[=($3, 'a')])
    LogicalTableScan(table=[[druid, foo]])

Thanks!
-Maytas

Reply via email to