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

CTE variables are not surviving the FROM clause subquery

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Major
    • 7.0.2, 7.1.0
    • 6.6.1, Cheshire-Cat
    • query
    • None
    • Untriaged
    • 1
    • Unknown

    Description

      INSERT INTO default VALUES (UUID(), {"provider_uuid": "p2", "provider_apps_uuid": ["ap1","ap2","ap4"],"type": "app-provider" , "sub_type":"provider-extra"});
       
      WITH orderobj AS ({"us":1, "gb":2, "es":3, "fr":4})
      SELECT p.provider_uuid,  orderobj
      FROM `default` AS p
      WHERE p.type = "app-provider" AND p.sub_type = "provider-extra" AND p.provider_uuid = "p2";
       
      WITH orderobj AS ({"us":1, "gb":2, "es":3, "fr":4})
      SELECT p.provider_uuid,  orderobj
      FROM (SELECT d.provider_uuid
            FROM `default` AS d
            WHERE d.type = "app-provider" AND d.sub_type = "provider-extra" AND d.provider_uuid = "p2") AS p;
      

      When executed first query you will have orderobj, not in second query (MISSING field).

      https://forums.couchbase.com/t/how-can-you-use-array-v-in-v-for-array-end-as-where-clause/29964/27

      explain WITH orderobj AS ({"us":1, "gb":2, "es":3, "fr":4}) SELECT p.provider_uuid,  orderobj FROM (SELECT d.provider_uuid FROM `default` AS d WHERE d.type = "app-provider" AND d.sub_type = "provider-extra" AND d.provider_uuid = "p2") AS p;
      {
          "requestID": "8a686d34-9178-4560-9a92-08b9d0c2bdad",
          "signature": "json",
          "results": [
          {
              "plan": {
                  "#operator": "With",
                  "bindings": [
                      {
                          "expr": "{\"es\": 3, \"fr\": 4, \"gb\": 2, \"us\": 1}",
                          "static": true,
                          "var": "orderobj"
                      }
                  ],
                  "~child": {
                      "#operator": "Sequence",
                      "~children": [
                          {
                              "#operator": "Sequence",
                              "~children": [
                                  {
                                      "#operator": "IndexScan3",
                                      "as": "d",
                                      "covers": [
                                          "cover ((`d`.`provider_uuid`))",
                                          "cover ((`d`.`provider_apps_uuid`))",
                                          "cover ((meta(`d`).`id`))"
                                      ],
                                      "filter": "((cover ((`d`.`type`)) = \"app-provider\") and (cover ((`d`.`sub_type`)) = \"provider-extra\") and (cover ((`d`.`provider_uuid`)) = \"p2\"))",
                                      "filter_covers": {
                                          "cover ((`d`.`sub_type`))": "provider-extra",
                                          "cover ((`d`.`type`))": "app-provider"
                                      },
                                      "index": "ix2",
                                      "index_id": "1c52cf840f050e91",
                                      "index_projection": {
                                          "entry_keys": [
                                              0
                                          ]
                                      },
                                      "keyspace": "default",
                                      "namespace": "default",
                                      "spans": [
                                          {
                                              "exact": true,
                                              "range": [
                                                  {
                                                      "high": "\"p2\"",
                                                      "inclusion": 3,
                                                      "low": "\"p2\""
                                                  }
                                              ]
                                          }
                                      ],
                                      "using": "gsi"
                                  },
                                  {
                                      "#operator": "Parallel",
                                      "~child": {
                                          "#operator": "Sequence",
                                          "~children": [
                                              {
                                                  "#operator": "InitialProject",
                                                  "result_terms": [
                                                      {
                                                          "expr": "cover ((`d`.`provider_uuid`))"
                                                      }
                                                  ]
                                              }
                                          ]
                                      }
                                  }
                              ]
                          },
                          {
                              "#operator": "Alias",
                              "as": "p"
                          },
                          {
                              "#operator": "Parallel",
                              "~child": {
                                  "#operator": "Sequence",
                                  "~children": [
                                      {
                                          "#operator": "InitialProject",
                                          "result_terms": [
                                              {
                                                  "expr": "(`p`.`provider_uuid`)"
                                              },
                                              {
                                                  "expr": "`orderobj`"
                                              }
                                          ]
                                      }
                                  ]
                              }
                          }
                      ]
                  }
              },
              "text": "WITH orderobj AS ({\"us\":1, \"gb\":2, \"es\":3, \"fr\":4}) SELECT p.provider_uuid,  orderobj FROM (SELECT d.provider_uuid FROM `default` AS d WHERE d.type = \"app-provider\" AND d.sub_type = \"provider-extra\" AND d.provider_uuid = \"p2\") AS p;"
          }
          ],
          "status": "success",
          "metrics": {
              "elapsedTime": "3.270138ms",
              "executionTime": "3.193246ms",
              "resultCount": 1,
              "resultSize": 4551,
              "serviceLoad": 2
          }
      }
      
      

      Subquery needs parent CTE variables because of correlation. FROM clause subquery Alias only takes the document from the subquery projected. It is not added the CTE variables from current level (might need scope value as parent during alias).

      Attachments

        Issue Links

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

          Activity

            People

              pierre.regazzoni Pierre Regazzoni
              Sitaram.Vemulapalli Sitaram Vemulapalli
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Gerrit Reviews

                  There are no open Gerrit changes

                  PagerDuty