Uploaded image for project: 'Couchbase Server'
  1. Couchbase Server
  2. MB-28783

Values are incorrectly projected when group by has meta().id

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Major
    • 5.5.0
    • 5.5.0
    • query
    • None
    • Untriaged
    • Unknown

    Description

      I am unsure if GROUP BY meta().id is valid but I see some incorrect behaviour when I tried out the same. Below are the steps:
      Create a document:

      { "f1": 20, "f2": 5 }

      Index: CREATE INDEX `i1` ON `default`(`f1`,`f2`)
      Query: SELECT SUM(f1 * 2), meta().id FROM default WHERE f1 IS NOT NULL GROUP BY f2, meta().id
      Results:
      [

      { "$1": null, "id": 40 }

      ]

      The result is incorrect as I see id as 40 and SUM (ie $1) as null.
      Explain plan:

      {
        "plan": {
          "#operator": "Sequence",
          "~children": [
            {
              "#operator": "IndexScan3",
              "covers": [
                "cover ((`default`.`f1`))",
                "cover ((`default`.`f2`))",
                "cover ((meta(`default`).`id`))",
                "cover ((meta(`default`).`id`))",
                "cover (sum((cover ((`default`.`f1`)) * 2)))"
              ],
              "index": "i1",
              "index_group_aggs": {
                "aggregates": [
                  {
                    "aggregate": "SUM",
                    "depends": [
                      0
                    ],
                    "expr": "(cover ((`default`.`f1`)) * 2)",
                    "id": 3,
                    "keypos": -1
                  }
                ],
                "depends": [
                  0,
                  1,
                  2
                ],
                "group": [
                  {
                    "depends": [
                      1
                    ],
                    "expr": "cover ((`default`.`f2`))",
                    "id": 1,
                    "keypos": 1
                  },
                  {
                    "depends": [
                      2
                    ],
                    "expr": "cover ((meta(`default`).`id`))",
                    "id": 2,
                    "keypos": -1
                  }
                ],
                "partial": true
              },
              "index_id": "4e4a11c49a600684",
              "index_projection": {
                "entry_keys": [
                  1,
                  2,
                  3
                ]
              },
              "keyspace": "default",
              "namespace": "default",
              "spans": [
                {
                  "exact": true,
                  "range": [
                    {
                      "inclusion": 0,
                      "low": "null"
                    }
                  ]
                }
              ],
              "using": "gsi"
            },
            {
              "#operator": "Parallel",
              "~child": {
                "#operator": "Sequence",
                "~children": [
                  {
                    "#operator": "InitialGroup",
                    "aggregates": [
                      "sum(cover (sum((cover ((`default`.`f1`)) * 2))))"
                    ],
                    "group_keys": [
                      "cover ((`default`.`f2`))",
                      "cover ((meta(`default`).`id`))"
                    ]
                  }
                ]
              }
            },
            {
              "#operator": "IntermediateGroup",
              "aggregates": [
                "sum(cover (sum((cover ((`default`.`f1`)) * 2))))"
              ],
              "group_keys": [
                "cover ((`default`.`f2`))",
                "cover ((meta(`default`).`id`))"
              ]
            },
            {
              "#operator": "FinalGroup",
              "aggregates": [
                "sum(cover (sum((cover ((`default`.`f1`)) * 2))))"
              ],
              "group_keys": [
                "cover ((`default`.`f2`))",
                "cover ((meta(`default`).`id`))"
              ]
            },
            {
              "#operator": "Parallel",
              "~child": {
                "#operator": "Sequence",
                "~children": [
                  {
                    "#operator": "InitialProject",
                    "result_terms": [
                      {
                        "expr": "sum(cover (sum((cover ((`default`.`f1`)) * 2))))"
                      },
                      {
                        "expr": "cover ((meta(`default`).`id`))"
                      }
                    ]
                  },
                  {
                    "#operator": "FinalProject"
                  }
                ]
              }
            }
          ]
        },
        "text": "SELECT SUM(f1 * 2), meta().id FROM default WHERE f1 IS NOT NULL\nGROUP BY f2, meta().id"
      }
      

      Indexer returns result row as : [5,"K1",40] which seems correct given the index_projection by query.

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            korrigan.clark Korrigan Clark (Inactive)
            prathibha Prathibha Bisarahalli (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes

                PagerDuty