Skip to content

Commit f6a9fbf

Browse files
committed
Test case for MB63163
Change-Id: I712016f96e0c67bed7053f882f4e552e6984aa33 Reviewed-on: https://review.couchbase.org/c/testrunner/+/228747 Reviewed-by: Ajay Bhullar <ajay.bhullar@couchbase.com> Tested-by: Pierre Regazzoni <pierre.regazzoni@couchbase.com>
1 parent ba1cd71 commit f6a9fbf

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

conf/tuq/py-tuq-gsi.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ tuqquery.tuq_gsi_index.QueriesIndexTests:
1616
test_explain_plan_time,GROUP=EXPLAIN;INDEX;P0
1717
test_MB63883,GROUP=EXPLAIN;INDEX;P0
1818
test_MB66955,GROUP=EXPLAIN;INDEX;P0
19+
test_MB63163,GROUP=EXPLAIN;INDEX;P0
1920
tuqquery.tuq_index.QueriesViewsTests:
2021
test_run_query,to_run=test_array,index_field=VMs,index_type=GSI,GROUP=P0
2122
test_run_query,to_run=test_like_aliases,index_field=name,index_type=GSI,GROUP=P0

pytests/tuqquery/tuq_gsi_index.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8752,4 +8752,42 @@ def test_MB66955(self):
87528752
WHERE type = "abc" AND IS_OBJECT(o1)
87538753
'''
87548754
# Just verify query does not fail
8755-
self.run_cbq_query(explain_query, query_context=query_context)
8755+
self.run_cbq_query(explain_query, query_context=query_context)
8756+
8757+
def test_MB63163(self):
8758+
"""
8759+
MB-63163: Sargable index not sarged for OUTER JOIN with array predicate in ON clause
8760+
This test creates a new collection in default._default, sets up the array index and data as in the JIRA,
8761+
and asserts that the queries with LEFT JOIN and ANY clause succeed with no plan error.
8762+
"""
8763+
self.fail_if_no_buckets()
8764+
collection_name = "mb63163"
8765+
query_context = "default._default"
8766+
# Create collection
8767+
self.run_cbq_query(f"CREATE COLLECTION {collection_name} IF NOT EXISTS", query_context=query_context)
8768+
self.sleep(2)
8769+
# Create array index as in JIRA
8770+
self.run_cbq_query(f"CREATE INDEX ix20 ON {collection_name}(ALL a1) WHERE type = 'docs'", query_context=query_context)
8771+
# Insert documents
8772+
self.run_cbq_query(f"INSERT INTO {collection_name} (KEY, VALUE) VALUES ('2345234', {{'type':'docs', 'test':1}})", query_context=query_context)
8773+
self.run_cbq_query(f"INSERT INTO {collection_name} (KEY, VALUE) VALUES ('d2id', {{'type':'docs', 'id':'d2id', 'c2':'val', 'a1':['2345234']}})", query_context=query_context)
8774+
self.run_cbq_query(f"INSERT INTO {collection_name} (KEY, VALUE) VALUES ('d2id2', {{'type':'docs', 'id':'d2id2', 'c2':'val2', 'a1':['notmatch']}})", query_context=query_context)
8775+
# Query 1: LEFT JOIN with ANY in ON clause
8776+
query1 = f"""
8777+
SELECT d1, d2.id, d2.c2
8778+
FROM {collection_name} AS d1 USE KEYS '2345234'
8779+
LEFT JOIN {collection_name} AS d2 ON d2.type = 'docs' AND ANY id IN d2.a1 SATISFIES id = META(d1).id END
8780+
"""
8781+
result1 = self.run_cbq_query(query1, query_context=query_context)
8782+
self.assertIn('status', result1)
8783+
self.assertEqual(result1['status'], 'success', f"Query 1 failed: {result1}")
8784+
# Query 2: Same with WHERE d1.test = 1
8785+
query2 = f"""
8786+
SELECT d1, d2.id, d2.c2
8787+
FROM {collection_name} AS d1 USE KEYS '2345234'
8788+
LEFT JOIN {collection_name} AS d2 ON d2.type = 'docs' AND ANY id IN d2.a1 SATISFIES id = META(d1).id END
8789+
WHERE d1.test = 1
8790+
"""
8791+
result2 = self.run_cbq_query(query2, query_context=query_context)
8792+
self.assertIn('status', result2)
8793+
self.assertEqual(result2['status'], 'success', f"Query 2 failed: {result2}")

0 commit comments

Comments
 (0)