[
https://issues.apache.org/jira/browse/CASSANDRA-19891?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Caleb Rackliffe updated CASSANDRA-19891:
----------------------------------------
Fix Version/s: 5.0.x
> SAI fails queries when multiple columns exist and a non-indexed column is a
> composite with a map
> ------------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-19891
> URL: https://issues.apache.org/jira/browse/CASSANDRA-19891
> Project: Cassandra
> Issue Type: Bug
> Components: Feature/2i Index
> Reporter: David Capwell
> Assignee: Caleb Rackliffe
> Priority: Normal
> Fix For: 5.0.x, 5.x
>
>
> Hit an edge case where SAI fails to create a query plan when multiple columns
> are used and one of the columns is a CompositeType with a MapType inside
> {code}
> CREATE TABLE keyspace_test_00."tbl" (
> "pk1" frozen<map<'CompositeType(IntegerType,SimpleDateType)',
> 'DynamicCompositeType(Q=>LongType,I=>ByteType,6=>LexicalUUIDType)'>>,
> "pk2" frozen<tuple<frozen<tuple<float>>>>,
> "ck1" frozen<list<frozen<map<'LexicalUUIDType', ascii>>>>,
> "ck2" tinyint,
> "r1"
> frozen<list<'DynamicCompositeType(X=>DecimalType,y=>TimestampType,f=>BooleanType)'>>
> static,
> "r2" 'DynamicCompositeType(P=>ShortType)',
> "r3"
> 'CompositeType(FrozenType(ListType(DoubleType)),FrozenType(MapType(LongType,DurationType)),DoubleType)',
> "r4" frozen<list<frozen<list<time>>>>,
> "r5"
> 'CompositeType(CompositeType(ShortType,SimpleDateType,BooleanType),CompositeType(FloatType),MapType(ByteType,TimeType))',
> "r6" set<smallint>,
> PRIMARY KEY (("pk1", "pk2"), "ck1", "ck2")
> ) WITH CLUSTERING ORDER BY ("ck1" ASC, "ck2" DESC);
> CREATE INDEX index_test_01 ON keyspace_test_00."tbl"("r5") USING
> 'legacy_local_table';
> CREATE INDEX index_test_02 ON keyspace_test_00."tbl"(FULL("ck1")) USING 'SAI';
> CREATE INDEX index_test_03 ON keyspace_test_00."tbl"(FULL("pk1")) USING 'SAI';
> CREATE INDEX index_test_04 ON keyspace_test_00."tbl"(FULL("r1")) USING
> 'legacy_local_table';
> CREATE INDEX index_test_05 ON keyspace_test_00."tbl"("r3") USING
> 'legacy_local_table';
> CREATE INDEX index_test_06 ON keyspace_test_00."tbl"(FULL("r4")) USING 'SAI';
> CREATE INDEX index_test_07 ON keyspace_test_00."tbl"("r2") USING 'SAI';
> CREATE INDEX index_test_08 ON keyspace_test_00."tbl"("pk2") USING
> ‘legacy_local_table';
> {code}
> And the query
> {code}
> SELECT *
> FROM keyspace_test_00."tbl"
> WHERE "r5" =
> 0x0010000230bd00000457f0bd31000001000000000700049f647252000000260000000200000001f300000008000001c4e14bba4b00000001260000000800003f2b300d385d00
> AND "ck1" = ? AND "pk1" = ? AND "r1" = ? AND "r3" =
> 0x001c00000002000000083380d171eace676900000008e153bb97fdd5c22e00006d000000030000000897c5493857999fc000000013f08cc4fad0f04d0de51cff28d4ae743d2da1c40000000857108e8c372c868400000013f0cc6bca55f0ee240b27ff12c77a7b7dc3c665000000086c07d25fcdd3403500000013f0745922bdf0ac44c9b5ffd80f025ded9a211d000008200547f5da7a43aa00
> AND "r4" = ? AND "r2" = 0x8050000255e200 AND "pk2" = ((-1.2651989E-23))
> ALLOW FILTERING
> {code}
> I played around with this more and see you can also simplify to just SAI
> indexes
> The following test fails due to this issue but the single column query case
> (on the complex column) passes
> {code}
> @Test
> public void sai()
> {
> createKeyspace("CREATE KEYSPACE keyspace_test_00 WITH REPLICATION =
> {'class': 'SimpleStrategy', 'replication_factor': 1}");
> schemaChange("CREATE TABLE keyspace_test_00.\"tbl\" (\n" +
> " \"pk1\"
> frozen<map<'CompositeType(IntegerType,SimpleDateType)',
> 'DynamicCompositeType(Q=>LongType,I=>ByteType,6=>LexicalUUIDType)'>>,\n" +
> " \"pk2\" frozen<tuple<frozen<tuple<float>>>>,\n" +
> " \"ck1\" frozen<list<frozen<map<'LexicalUUIDType',
> ascii>>>>,\n" +
> " \"ck2\" tinyint,\n" +
> " \"r1\"
> frozen<list<'DynamicCompositeType(X=>DecimalType,y=>TimestampType,f=>BooleanType)'>>
> static,\n" +
> " \"r2\" 'DynamicCompositeType(P=>ShortType)',\n" +
> " \"r3\"
> 'CompositeType(FrozenType(ListType(DoubleType)),FrozenType(MapType(LongType,DurationType)),DoubleType)',\n"
> +
> " \"r4\" frozen<list<frozen<list<time>>>>,\n" +
> " \"r5\"
> 'CompositeType(CompositeType(ShortType,SimpleDateType,BooleanType),CompositeType(FloatType),MapType(ByteType,TimeType))',\n"
> +
> " \"r6\" set<smallint>,\n" +
> " PRIMARY KEY ((\"pk1\", \"pk2\"), \"ck1\",
> \"ck2\")\n" +
> ") WITH CLUSTERING ORDER BY (\"ck1\" ASC, \"ck2\"
> DESC);");
> schemaChange("CREATE INDEX ON keyspace_test_00.\"tbl\"(FULL(\"ck1\"))
> USING 'SAI'");
> schemaChange("CREATE INDEX ON keyspace_test_00.\"tbl\"(FULL(\"pk1\"))
> USING 'SAI'");
> schemaChange("CREATE INDEX ON keyspace_test_00.\"tbl\"(FULL(\"r4\"))
> USING 'SAI'");
> schemaChange("CREATE INDEX ON keyspace_test_00.\"tbl\"(\"r2\") USING
> 'SAI'");
> schemaChange("CREATE INDEX ON keyspace_test_00.\"tbl\"(\"r3\") USING
> 'SAI'");
> executeFormattedQuery("SELECT *\n" +
> "FROM keyspace_test_00.\"tbl\"\n" +
> "WHERE " +
> " \"r3\" =
> 0x001c00000002000000083380d171eace676900000008e153bb97fdd5c22e00006d000000030000000897c5493857999fc000000013f08cc4fad0f04d0de51cff28d4ae743d2da1c40000000857108e8c372c868400000013f0cc6bca55f0ee240b27ff12c77a7b7dc3c665000000086c07d25fcdd3403500000013f0745922bdf0ac44c9b5ffd80f025ded9a211d000008200547f5da7a43aa00
> " +
> "ALLOW FILTERING");
> executeFormattedQuery("SELECT *\n" +
> "FROM keyspace_test_00.\"tbl\"\n" +
> "WHERE \"r5\" =
> 0x0010000230bd00000457f0bd31000001000000000700049f647252000000260000000200000001f300000008000001c4e14bba4b00000001260000000800003f2b300d385d00
> " +
> " AND \"r3\" =
> 0x001c00000002000000083380d171eace676900000008e153bb97fdd5c22e00006d000000030000000897c5493857999fc000000013f08cc4fad0f04d0de51cff28d4ae743d2da1c40000000857108e8c372c868400000013f0cc6bca55f0ee240b27ff12c77a7b7dc3c665000000086c07d25fcdd3403500000013f0745922bdf0ac44c9b5ffd80f025ded9a211d000008200547f5da7a43aa00
> " +
> " AND \"r2\" = 0x8050000255e200 " + // SAI
> " AND \"pk2\" = ((-1.2651989E-23))\n" +
> "ALLOW FILTERING");
> }
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]