[ 
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)

Reply via email to