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]