[
https://issues.apache.org/jira/browse/CALCITE-7079?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
zhaowang updated CALCITE-7079:
------------------------------
Summary: MongoDB Adapter unable to translate multiple NOT EQUALS
expressions combined with AND (was: Mongodb Adapter unable to translate
multiple $ne condition conposed of "AND")
> 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)