[ https://issues.apache.org/jira/browse/CALCITE-7079?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18007544#comment-18007544 ]
Zhen Chen commented on CALCITE-7079: ------------------------------------ Fixed in https://github.com/apache/calcite/commit/ed71c9a70539a2401b0578b786366918abbaeebe Thanks for the contribution [~zoovwang] Thanks for the reviews [~mbudiu] [~caican] > MongoDB Adapter unable to translate multiple NOT EQUALS expressions combined > with AND > ------------------------------------------------------------------------------------- > > Key: CALCITE-7079 > URL: https://issues.apache.org/jira/browse/CALCITE-7079 > Project: Calcite > Issue Type: Bug > Reporter: zhaowang > Assignee: zhaowang > Priority: Major > Labels: pull-request-available > > Mongodb adapter translate more than one $ne condition error. > run sql: > {code:java} > select city, state from zips where city <> 'ABERDEEN' and city <> > 'AIKEN'{code} > Query plan: > {code:java} > { > "$match": { > "city": { > "$ne": "AIKEN" > } > } > }, {$project: {CITY: '$city', STATE: '$state'}}{code} > The condition (city <> 'ABERDEEN') lost,actually, more than one $ne condition > conpose of AND have to translate to $nin operation > Expected plan: > {code:java} > { > "$match": { > "city": { > "$nin": [ > "AIKEN", > "ABERDEEN" > ] > } > } > }, {$project: {CITY: '$city', STATE: '$state'}} {code} > > More test case: > Case 1: > {code:java} > select city, state from zips where city <> 'ABERDEEN' and city <> 'AIKEN' and > state <> 'a' and state <> 'b' {code} > Query plan: > {code:java} > { > "$match": { > "city": { > "$ne": "AIKEN" > }, > "state": { > "$ne": "b" > } > } > }, {$project: {CITY: '$city', STATE: '$state'}} {code} > Expected plan: > {code:java} > { > "$match": { > "city": { > "$nin": [ > "ABERDEEN", > "AIKEN" > ] > }, > "state": { > "$nin": [ > "a", > "b" > ] > } > } > }, {$project: {CITY: '$city', STATE: '$state'}} {code} > > Case 2: > {code:java} > select city, state from zips where city <> 'ABERDEEN' and city <> 'AIKEN' or > (state <> 'a' and state <> 'b') {code} > Query plan: > {code:java} > { > "$match": { > "$or": [ > { > "city": { > "$ne": "AIKEN" > } > }, > { > "state": { > "$ne": "b" > } > } > ] > } > }, {$project: {CITY: '$city', STATE: '$state'}} {code} > Expected plan: > {code:java} > { > "$match": { > "$or": [ > { > "city": { > "$nin": [ > "ABERDEEN", > "AIKEN" > ] > } > }, > { > "state": { > "$nin": [ > "a", > "b" > ] > } > } > ] > } > }, {$project: {CITY: '$city', STATE: '$state'}} {code} > > Case 3: > {code:java} > select city, state from zips where city <> 'ABERDEEN' and city <> 'AIKEN' and > state <> 'a'{code} > Query plan: > {code:java} > { > "$match": { > "city": { > "$nin": [ > "ABERDEEN", > "AIKEN" > ] > }, > "state": { > "$ne": "a" > } > } > }, {$project: {CITY: '$city', STATE: '$state'}} {code} > Expected plan: > {code:java} > { > "$match": { > "city": { > "$nin": [ > "ABERDEEN", > "AIKEN" > ] > }, > "state": { > "$ne": "a" > } > } > } , {$project: {CITY: '$city', STATE: '$state'}} {code} > -- This message was sent by Atlassian Jira (v8.20.10#820010)