Details
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":
}
],
"using": "gsi"
},
{
"#operator": "Parallel",
"~child": {
"#operator": "Sequence",
"~children": [
,
,
{ "#operator": "InitialGroup", "aggregates": [], "group_keys": [ "(`simple_table`.`primary_key_id`)", "(`simple_table`.`varchar_field1`)" ] } ]
}
},
,
,
{
"#operator": "Parallel",
"~child": {
"#operator": "Sequence",
"~children": [
,
{
"#operator": "InitialProject",
"result_terms": [
,
{ "expr": "(`simple_table`.`varchar_field1`)" } ]
},
]
}
}
]
},
"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