Hello, Please correct me if my expectations are inaccurate about query predicates in Calcite.
I think there is an issue in how expression translators work when AST is more complex (has more depth). Same code / logic is used across different adapters (Mongo / Geode / ES) so multiple data-sources might be affected. Examples 1. Works 0: jdbc:calcite:model=target/test-classes/mod> select count(*) from "elastic" where _MAP['foo'] in ('1') and true; 2. Works 0: jdbc:calcite:model=target/test-classes/mod> select count(*) from "elastic" where _MAP['foo'] ='1' and true; 3. Works 0: jdbc:calcite:model=target/test-classes/mod> select count(*) from "elastic" where _MAP['foo'] in ('1', '2'); 4. Fails 0: jdbc:calcite:model=target/test-classes/mod> select count(*) from "elastic" where _MAP['foo'] in ('1', '2') and true; 5. Fails 0: jdbc:calcite:model=target/test-classes/mod> select count(*) from "elastic" where true and _MAP['foo'] in ('1', '2'); 6. Fails 0: jdbc:calcite:model=target/test-classes/mod> select count(*) from "elastic" where (_MAP['foo'] ='1' or _MAP['foo'] = '2') and true; Exception Stack (Elastic Adapter) java.lang.AssertionError: cannot translate OR(=(ITEM($0, 'foo'), '1'), =(ITEM($0, 'foo'), '2')) at org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter$ Translator.translateMatch2(ElasticsearchFilter.java:234) at org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter$ Translator.translateAnd(ElasticsearchFilter.java:158) at org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter$ Translator.translateOr(ElasticsearchFilter.java:115) at org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter$ Translator.translateMatch(ElasticsearchFilter.java:101) at org.apache.calcite.adapter.elasticsearch.ElasticsearchFilter$ Translator.access$000(ElasticsearchFilter.java:87) at org.apache.calcite.adapter.elasticsearch. ElasticsearchFilter.implement(ElasticsearchFilter.java:80) at org.apache.calcite.adapter.elasticsearch. ElasticsearchRel$Implementor.visitChild(ElasticsearchRel.java:53) at org.apache.calcite.adapter.elasticsearch. ElasticsearchToEnumerableConverter.implement(ElasticsearchToEnumerableConve rter.java:71) at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor. visitChild(EnumerableRelImplementor.java:98) at org.apache.calcite.adapter.enumerable. EnumerableAggregate.implement(EnumerableAggregate.java:106) Exception Stack (Mongo Adapter) 0: jdbc:calcite:model=target/test-classes/mod> select * from "mongo"."col" where _MAP['foo'] in ('1', '2') and true; java.lang.AssertionError: cannot translate OR(=(ITEM($0, 'foo'), '1'), =(ITEM($0, 'foo'), '2')) at org.apache.calcite.adapter.mongodb.MongoFilter$ Translator.translateMatch2(MongoFilter.java:181) at org.apache.calcite.adapter.mongodb.MongoFilter$ Translator.translateAnd(MongoFilter.java:116) at org.apache.calcite.adapter.mongodb.MongoFilter$ Translator.translateOr(MongoFilter.java:98) at org.apache.calcite.adapter.mongodb.MongoFilter$ Translator.translateMatch(MongoFilter.java:91) at org.apache.calcite.adapter.mongodb.MongoFilter$ Translator.access$000(MongoFilter.java:77) at org.apache.calcite.adapter.mongodb.MongoFilter.implement( MongoFilter.java:72) at org.apache.calcite.adapter.mongodb.MongoRel$Implementor. visitChild(MongoRel.java:51) at org.apache.calcite.adapter.mongodb.MongoToEnumerableConverter. implement(MongoToEnumerableConverter.java:84) at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor. implementRoot(EnumerableRelImplementor.java:103) at org.apache.calcite.adapter.enumerable.EnumerableInterpretable. toBindable(EnumerableInterpretable.java:92) Anything I'm doing wrong ? Thanks, Andrei.