[ https://issues.apache.org/jira/browse/CASSANDRA-19040?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Maxwell Guo updated CASSANDRA-19040: ------------------------------------ Reviewers: Maxwell Guo, Maxwell Guo Maxwell Guo, Maxwell Guo (was: Maxwell Guo) Status: Review In Progress (was: Patch Available) > 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 > Priority: Normal > Fix For: 5.0-beta > > Time Spent: 10m > Remaining Estimate: 0h > > 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