[
https://issues.apache.org/jira/browse/CALCITE-2415?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16602458#comment-16602458
]
Vladimir Sitnikov commented on CALCITE-2415:
--------------------------------------------
The following test in MongoAdapterTest reproduces the issue:
{code:java} @Test public void testAndOr() {
assertModel("{\n"
+ " version: '1.0',\n"
+ " defaultSchema: 'test',\n"
+ " schemas: [\n"
+ " {\n"
+ " type: 'custom',\n"
+ " name: 'test',\n"
+ " factory:
'org.apache.calcite.adapter.mongodb.MongoSchemaFactory',\n"
+ " operand: {\n"
+ " host: 'localhost',\n"
+ " database: 'test'\n"
+ " }\n"
+ " }\n"
+ " ]\n"
+ "}")
.query("select 1 from \"datatypes\" where _MAP['value'] in ('1', '2')
and true")
.returnsUnordered("EXPR$0=2012-09-05");
}
{code}
However, it looks like "simplification is missing" since AND(x, true) should be
simplified to just x
> Evaluation of predicate "(A or B) and C" fails for MongoDB adapter
> ------------------------------------------------------------------
>
> Key: CALCITE-2415
> URL: https://issues.apache.org/jira/browse/CALCITE-2415
> Project: Calcite
> Issue Type: Bug
> Components: mongodb
> Reporter: Andrei Sereda
> Assignee: Michael Mior
> Priority: Critical
>
> h2. Queries that are working
> {code:java}
> select count(*) from "elastic" where _MAP['foo'] in ('1') and true;
> select count(*) from "elastic" where _MAP['foo'] ='1' and true;
> select count(*) from "elastic" where _MAP['foo'] in ('1', '2');
> {code}
> h2. Queries that are failing
> {code:java}
> select count(*) from "elastic" where _MAP['foo'] in ('1', '2') and true;
> select count(*) from "elastic" where true and _MAP['foo'] in ('1', '2');
> select count(*) from "elastic" where (_MAP['foo'] ='1' or _MAP['foo'] = '2')
> and true;
> {code}
> h2. Mongo Adapter Exception
> {quote}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)
> {quote}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)