[ 
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

Reply via email to