[ https://issues.apache.org/jira/browse/CASSANDRA-19034?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17788030#comment-17788030 ]
Andres de la Peña commented on CASSANDRA-19034: ----------------------------------------------- The issue with {{testContainsKeyAndContainsWithIndexOnMapValue}} can be reproduced with this simple test: {code} 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 simple patch modifies that to consider the {{CONTAINS KEY}} case: ||Patch||CI|| |[5.0 |https://github.com/apache/cassandra/compare/cassandra-5.0...adelapena:19034-5.0]|[j11|https://app.circleci.com/pipelines/github/adelapena/cassandra/3321/workflows/1450ed03-61d9-4abc-93f0-ad0a335dd703]| The other two failures ({{testFilterWithIndexForContains}} and {{testStaticIndexAndNonStaticIndex}}) seem to have different causes. Should we open separate tickets for each one? > SelectTest fails when run with SAI index > ---------------------------------------- > > Key: CASSANDRA-19034 > URL: https://issues.apache.org/jira/browse/CASSANDRA-19034 > Project: Cassandra > Issue Type: Bug > Components: Feature/SAI > Reporter: Branimir Lambov > Assignee: Caleb Rackliffe > Priority: Normal > Fix For: 5.0-beta > > > When run with SAI index, the following two tests error out: > {code} > [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] > [junit-timeout] Testcase: > testFilterWithIndexForContains(org.apache.cassandra.cql3.validation.operations.SelectTest)-_jdk11: > FAILED > [junit-timeout] Invalid value for row 1 column 0 (k1 of type int), expected > <1> but got <0> > [junit-timeout] Invalid value for row 1 column 2 (v of type set<int>), > expected <{4, 5, 6}> but got <{2, 3, 4}> > [junit-timeout] > [junit-timeout] junit.framework.AssertionFailedError: Invalid value for row 1 > column 0 (k1 of type int), expected <1> but got <0> > [junit-timeout] Invalid value for row 1 column 2 (v of type set<int>), > expected <{4, 5, 6}> but got <{2, 3, 4}> > [junit-timeout] > [junit-timeout] at > org.apache.cassandra.cql3.CQLTester.assertRows(CQLTester.java:1826) > [junit-timeout] at > org.apache.cassandra.cql3.validation.operations.SelectTest.lambda$testFilterWithIndexForContains$6(SelectTest.java:543) > [junit-timeout] at > org.apache.cassandra.cql3.CQLTester.beforeAndAfterFlush(CQLTester.java:2240) > [junit-timeout] at > org.apache.cassandra.cql3.validation.operations.SelectTest.testFilterWithIndexForContains(SelectTest.java:542) > [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) > {code} > The latter seems to be giving the results in the wrong order, and the order > flips when the data is flushed. > Caught during preparation of _latest config that would switch default to SAI > (CASSANDRA-18753). -- 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