Andres de la Peña created CASSANDRA-19040:
---------------------------------------------

             Summary: Consider CONTAINS KEY in SAI unindexed index contexts
                 Key: CASSANDRA-19040
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-19040
             Project: Cassandra
          Issue Type: Bug
          Components: Feature/SAI
            Reporter: Andres de la Peña
            Assignee: Andres de la Peña


As reported by CASSANDRA-19034, 
{{SelectTest#testContainsKeyAndContainsWithIndexOnMapValue}} fails when the 
default config uses SAI:
{code:java}
[junit-timeout] Testcase: 
testContainsKeyAndContainsWithIndexOnMapValue(org.apache.cassandra.cql3.validation.operations.SelectTest)-_jdk11:
     FAILED
[junit-timeout] Got less rows than expected. Expected 1 but got 0
[junit-timeout] junit.framework.AssertionFailedError: Got less rows than 
expected. Expected 1 but got 0
[junit-timeout]         at 
org.apache.cassandra.cql3.CQLTester.assertRows(CQLTester.java:1849)
[junit-timeout]         at 
org.apache.cassandra.cql3.validation.operations.SelectTest.lambda$testContainsKeyAndContainsWithIndexOnMapValue$9(SelectTest.java:625)
[junit-timeout]         at 
org.apache.cassandra.cql3.CQLTester.beforeAndAfterFlush(CQLTester.java:2238)
[junit-timeout]         at 
org.apache.cassandra.cql3.validation.operations.SelectTest.testContainsKeyAndContainsWithIndexOnMapValue(SelectTest.java:618)
[junit-timeout]         at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[junit-timeout]         at 
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[junit-timeout]         at 
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[junit-timeout] 
[junit-timeout] 
{code}
This can also be reproduced with this simple test:
{code:java}
createTable("CREATE TABLE %s (k int PRIMARY KEY, v int, m map<int,int>)");
createIndex("CREATE INDEX ON %s(v) USING 'SAI'");
execute("INSERT INTO %s (k, v, m) VALUES (?, ?, ?)", 0, 1, map(2, 3));
assertRows(execute("SELECT k, v, m FROM %s WHERE v = 1 AND m CONTAINS KEY 2 
ALLOW FILTERING"),
           row(0, 1, map(2, 3)));
{code}
I think the problem is that the index context created by the query planner for 
an unindexed column always has a {{VALUES}} index target type, 
[here|https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/index/sai/plan/QueryController.java#L149].
 This is problematic when there is a {{CONTAINS KEY}} expression that isn't 
backed by an index, since we'll be comparing the searched map key to scanned 
map values.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to