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

RQG: Difference in results seen in query containing group by and having clauses

    XMLWordPrintable

Details

    • Bug
    • Resolution: Fixed
    • Test Blocker
    • 4.5.0
    • 4.5.0
    • query
    • 4.5.0-2428, 4.5.0-2438
    • Untriaged
    • Yes

    Description

      mysql query:
      mysql> SELECT primary_key_id , varchar_field1 FROM simple_table WHERE ((char_field1 IN ( "A" , "B" , "C" , "D" , "E" ) AND ((int_field1 <> 4740) AND (decimal_field1 = 4971)) OR (int_field1 IN ( 13 , 17 , 18 , 28 , 39 )))) OR (((((NOT (int_field1 IS NULL)) AND ((int_field1 IS NULL) OR (NOT (decimal_field1 <> 4971)))) AND ((int_field1 BETWEEN 13 and 9997) OR ((decimal_field1 IN ( 10 , 32 , 51 , 79 , 83 )) AND ((int_field1 IN ( 13 , 17 , 18 , 28 , 39 )) OR (decimal_field1 IN ( 10 , 32 , 51 , 79 , 83 )))))) AND (int_field1 IN ( 13 , 17 , 18 , 28 , 39 )) AND primary_key_id LIKE '%549' AND NOT (bool_field1))) GROUP BY primary_key_id , varchar_field1 HAVING (primary_key_id LIKE "549") OR (primary_key_id NOT LIKE '%549') ;

      gives 5 results:
      ------------------------------+

      primary_key_id varchar_field1

      ------------------------------+

      452 qtYHxCuPNr
      511 rokltQVNHP
      683 XplBbwDMSb
      706 bhcWOWSdfO
      979 iOPDkxgFqF

      ------------------------------+

      n1ql query:
      SELECT primary_key_id , varchar_field1 FROM simple_table WHERE ((char_field1 IN [ "A" , "B" , "C" , "D" , "E" ] AND ((int_field1 <> 4740) AND (decimal_field1 = 4971)) OR (int_field1 IN [ 13 , 17 , 18 , 28 , 39 ]))) OR (((((NOT (int_field1 IS NULL)) AND ((int_field1 IS NULL) OR (NOT (decimal_field1 <> 4971)))) AND ((int_field1 BETWEEN 13 and 9997) OR ((decimal_field1 IN [ 10 , 32 , 51 , 79 , 83 ]) AND ((int_field1 IN [ 13 , 17 , 18 , 28 , 39 ]) OR (decimal_field1 IN [ 10 , 32 , 51 , 79 , 83 ]))))) AND (int_field1 IN [ 13 , 17 , 18 , 28 , 39 ]) AND primary_key_id LIKE '%549' AND NOT (bool_field1))) GROUP BY primary_key_id , varchar_field1 HAVING (primary_key_id LIKE "549") OR (primary_key_id NOT LIKE '%549');

      gives 0 results.

      Confirmed that the 5 rows returned by sql are present in the simple_table in couchbase i.e. dataset is same.

      Explain of this query:
      explain SELECT primary_key_id , varchar_field1 FROM simple_table WHERE ((char_field1 IN [ "A" , "B" , "C" , "D" , "E" ] AND ((int_field1 <> 4740) AND (decimal_field1 = 4971)) OR (int_field1 IN [ 13 , 17 , 18 , 28 , 39 ]))) OR (((((NOT (int_field1 IS NULL)) AND ((int_field1 IS NULL) OR (NOT (decimal_field1 <> 4971)))) AND ((int_field1 BETWEEN 13 and 9997) OR ((decimal_field1 IN [ 10 , 32 , 51 , 79 , 83 ]) AND ((int_field1 IN [ 13 , 17 , 18 , 28 , 39 ]) OR (decimal_field1 IN [ 10 , 32 , 51 , 79 , 83 ]))))) AND (int_field1 IN [ 13 , 17 , 18 , 28 , 39 ]) AND primary_key_id LIKE '%549' AND NOT (bool_field1))) GROUP BY primary_key_id , varchar_field1 HAVING (primary_key_id LIKE "549") OR (primary_key_id NOT LIKE '%549');

      [
      {
      "plan": {
      "#operator": "Sequence",
      "~children": [
      {
      "#operator": "IndexScan",
      "index": "simple_table_idx_int_field1",
      "index_id": "a3f052d62a00f137",
      "keyspace": "simple_table",
      "namespace": "default",
      "spans": [
      {
      "Range":

      { "High": [ "null" ], "Inclusion": 0 }

      }
      ],
      "using": "gsi"
      },
      {
      "#operator": "Parallel",
      "~child": {
      "#operator": "Sequence",
      "~children": [

      { "#operator": "Fetch", "keyspace": "simple_table", "namespace": "default" }

      ,

      { "#operator": "Filter", "condition": "(((((`simple_table`.`char_field1`) in [\"A\", \"B\", \"C\", \"D\", \"E\"]) and ((not ((`simple_table`.`int_field1`) = 4740)) and ((`simple_table`.`decimal_field1`) = 4971))) or ((`simple_table`.`int_field1`) in [13, 17, 18, 28, 39])) or ((((((not ((`simple_table`.`int_field1`) is null)) and (((`simple_table`.`int_field1`) is null) or (not (not ((`simple_table`.`decimal_field1`) = 4971))))) and (((`simple_table`.`int_field1`) between 13 and 9997) or (((`simple_table`.`decimal_field1`) in [10, 32, 51, 79, 83]) and (((`simple_table`.`int_field1`) in [13, 17, 18, 28, 39]) or ((`simple_table`.`decimal_field1`) in [10, 32, 51, 79, 83]))))) and ((`simple_table`.`int_field1`) in [13, 17, 18, 28, 39])) and ((`simple_table`.`primary_key_id`) like \"%549\")) and (not (`simple_table`.`bool_field1`))))" }

      ,

      { "#operator": "InitialGroup", "aggregates": [], "group_keys": [ "(`simple_table`.`primary_key_id`)", "(`simple_table`.`varchar_field1`)" ] }

      ]
      }
      },

      { "#operator": "IntermediateGroup", "aggregates": [], "group_keys": [ "(`simple_table`.`primary_key_id`)", "(`simple_table`.`varchar_field1`)" ] }

      ,

      { "#operator": "FinalGroup", "aggregates": [], "group_keys": [ "(`simple_table`.`primary_key_id`)", "(`simple_table`.`varchar_field1`)" ] }

      ,
      {
      "#operator": "Parallel",
      "~child": {
      "#operator": "Sequence",
      "~children": [

      { "#operator": "Filter", "condition": "(((`simple_table`.`primary_key_id`) like \"549\") or (not ((`simple_table`.`primary_key_id`) like \"%549\")))" }

      ,
      {
      "#operator": "InitialProject",
      "result_terms": [

      { "expr": "(`simple_table`.`primary_key_id`)" }

      ,

      { "expr": "(`simple_table`.`varchar_field1`)" }

      ]
      },

      { "#operator": "FinalProject" }

      ]
      }
      }
      ]
      },
      "text": "SELECT primary_key_id , varchar_field1 FROM simple_table WHERE ((char_field1 IN [ \"A\" , \"B\" , \"C\" , \"D\" , \"E\" ] AND ((int_field1 <> 4740) AND (decimal_field1 = 4971)) OR (int_field1 IN [ 13 , 17 , 18 , 28 , 39 ]))) OR (((((NOT (int_field1 IS NULL)) AND ((int_field1 IS NULL) OR (NOT (decimal_field1 <> 4971)))) AND ((int_field1 BETWEEN 13 and 9997) OR ((decimal_field1 IN [ 10 , 32 , 51 , 79 , 83 ]) AND ((int_field1 IN [ 13 , 17 , 18 , 28 , 39 ]) OR (decimal_field1 IN [ 10 , 32 , 51 , 79 , 83 ]))))) AND (int_field1 IN [ 13 , 17 , 18 , 28 , 39 ]) AND primary_key_id LIKE '%549' AND NOT (bool_field1))) GROUP BY primary_key_id , varchar_field1 HAVING (primary_key_id LIKE \"549\") OR (primary_key_id NOT LIKE '%549');"
      }
      ]

      Index used in query:
      CREATE INDEX `simple_table_idx_int_field1` ON `simple_table`(`int_field1`) WITH

      { "defer_build"=true }

      Attachments

        1. logs.zip.gz
          22.82 MB
        2. simple_table.tar
          52.96 MB
        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            Sitaram.Vemulapalli Sitaram Vemulapalli
            Prerna.Manaktala Prerna Manaktala (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes

                PagerDuty