Example query:
```sql
SELECT COUNT(*)
FROM (
  SELECT DISTINCT dim2
  FROM druid.foo
  WHERE SUBSTRING(dim2, 1, 1) IN (
    SELECT SUBSTRING(dim1, 1, 1) FROM druid.foo WHERE dim1 <> ''
  ) AND __time >= '2000-01-01' AND __time < '2002-01-01'
)
```

When outer query contains AND filters like above, druid throws AssertionError 
when constructing Filter.

```
java.lang.AssertionError: AND(AND(>=($0, 2000-01-01 00:00:00), <($0, 2002-01-01 
00:00:00)), OR(=(SUBSTRING($3, 1, 1), '1'), =(SUBSTRING($3, 1, 1), '2'), 
=(SUBSTRING($3, 1, 1), 'a'), =(SUBSTRING($3, 1, 1), 'd')))
        at org.apache.calcite.rel.core.Filter.<init>(Filter.java:74)
        at 
org.apache.calcite.rel.logical.LogicalFilter.<init>(LogicalFilter.java:71)
        at 
org.apache.calcite.rel.logical.LogicalFilter.copy(LogicalFilter.java:136)
        at 
org.apache.calcite.rel.logical.LogicalFilter.copy(LogicalFilter.java:48)
        at 
io.druid.sql.calcite.rel.DruidSemiJoin.getLeftRelWithFilter(DruidSemiJoin.java:345)
```

The reason is calcite requires filter condition to be flattened, while 
DruidSemiJoin#getLeftRelWithFilter may construct unflatten filter.

[ Full content available at: 
https://github.com/apache/incubator-druid/issues/6243 ]
This message was relayed via gitbox.apache.org for [email protected]

Reply via email to