diff --git a/plugin/trino-cassandra/src/test/java/io/trino/plugin/cassandra/CassandraTestingUtils.java b/plugin/trino-cassandra/src/test/java/io/trino/plugin/cassandra/CassandraTestingUtils.java index ea8f684493f9..1450f0f0afa2 100644 --- a/plugin/trino-cassandra/src/test/java/io/trino/plugin/cassandra/CassandraTestingUtils.java +++ b/plugin/trino-cassandra/src/test/java/io/trino/plugin/cassandra/CassandraTestingUtils.java @@ -38,6 +38,7 @@ public final class CassandraTestingUtils public static final String TABLE_ALL_TYPES_INSERT = "table_all_types_insert"; public static final String TABLE_ALL_TYPES_PARTITION_KEY = "table_all_types_partition_key"; public static final String TABLE_PUSHDOWN_UUID_PARTITION_KEY_PREDICATE = "table_pushdown_uuid_partition_key_predicate"; + public static final String TABLE_PUSHDOWN_ALL_TYPES_PARTITION_KEY_PREDICATE = "table_pushdown_all_types_partition_key_predicate"; public static final String TABLE_TUPLE_TYPE = "table_tuple_type"; public static final String TABLE_USER_DEFINED_TYPE = "table_user_defined_type"; public static final String TABLE_CLUSTERING_KEYS = "table_clustering_keys"; @@ -55,6 +56,7 @@ public static void createTestTables(CassandraSession cassandraSession, String ke createTableAllTypes(cassandraSession, new SchemaTableName(keyspace, TABLE_ALL_TYPES_INSERT), date, 0); createTableAllTypesPartitionKey(cassandraSession, new SchemaTableName(keyspace, TABLE_ALL_TYPES_PARTITION_KEY), date); createTablePushdownUuidPartitionKey(cassandraSession, new SchemaTableName(keyspace, TABLE_PUSHDOWN_UUID_PARTITION_KEY_PREDICATE)); + createTablePushdownAllTypesPartitionKey(cassandraSession, new SchemaTableName(keyspace, TABLE_PUSHDOWN_ALL_TYPES_PARTITION_KEY_PREDICATE), date); createTableTupleType(cassandraSession, new SchemaTableName(keyspace, TABLE_TUPLE_TYPE)); createTableUserDefinedType(cassandraSession, new SchemaTableName(keyspace, TABLE_USER_DEFINED_TYPE)); createTableClusteringKeys(cassandraSession, new SchemaTableName(keyspace, TABLE_CLUSTERING_KEYS), 9); @@ -248,6 +250,54 @@ public static void createTablePushdownUuidPartitionKey(CassandraSession session, session.execute("INSERT INTO " + table + "(col_uuid, col_text) VALUES (00000000-0000-0000-0000-000000000001, 'Trino')"); } + public static void createTablePushdownAllTypesPartitionKey(CassandraSession session, SchemaTableName table, Date date) + { + session.execute("DROP TABLE IF EXISTS " + table); + + session.execute("CREATE TABLE " + table + " (" + + " key text, " + + " typeuuid uuid, " + + " typetinyint tinyint, " + + " typesmallint smallint, " + + " typeinteger int, " + + " typelong bigint, " + + " typebytes blob, " + + " typedate date, " + + " typetimestamp timestamp, " + + " typeansi ascii, " + + " typeboolean boolean, " + + " typedecimal decimal, " + + " typedouble double, " + + " typefloat float, " + + " typeinet inet, " + + " typevarchar varchar, " + + " typevarint varint, " + + " typetimeuuid timeuuid, " + + " typelist frozen >, " + + " typemap frozen >, " + + " typeset frozen >, " + + " PRIMARY KEY ((" + + " key, " + + " typeuuid, " + + " typetinyint, " + + " typesmallint, " + + " typeinteger, " + + " typelong, " + + " typedate, " + + " typetimestamp, " + + " typeansi, " + + " typeboolean, " + + " typedouble, " + + " typefloat, " + + " typeinet, " + + " typevarchar, " + + " typetimeuuid" + + " ))" + + ")"); + + insertTestData(session, table, date, 9); + } + public static void createTableTupleType(CassandraSession session, SchemaTableName table) { session.execute("DROP TABLE IF EXISTS " + table); diff --git a/plugin/trino-cassandra/src/test/java/io/trino/plugin/cassandra/TestCassandraConnectorTest.java b/plugin/trino-cassandra/src/test/java/io/trino/plugin/cassandra/TestCassandraConnectorTest.java index 6447a8aa10b0..d942d648829b 100644 --- a/plugin/trino-cassandra/src/test/java/io/trino/plugin/cassandra/TestCassandraConnectorTest.java +++ b/plugin/trino-cassandra/src/test/java/io/trino/plugin/cassandra/TestCassandraConnectorTest.java @@ -50,6 +50,7 @@ import static io.trino.plugin.cassandra.CassandraTestingUtils.TABLE_CLUSTERING_KEYS_LARGE; import static io.trino.plugin.cassandra.CassandraTestingUtils.TABLE_DELETE_DATA; import static io.trino.plugin.cassandra.CassandraTestingUtils.TABLE_MULTI_PARTITION_CLUSTERING_KEYS; +import static io.trino.plugin.cassandra.CassandraTestingUtils.TABLE_PUSHDOWN_ALL_TYPES_PARTITION_KEY_PREDICATE; import static io.trino.plugin.cassandra.CassandraTestingUtils.TABLE_PUSHDOWN_UUID_PARTITION_KEY_PREDICATE; import static io.trino.plugin.cassandra.CassandraTestingUtils.createTestTables; import static io.trino.spi.type.BigintType.BIGINT; @@ -245,6 +246,33 @@ public void testPushdownUuidPartitionKeyPredicate() .matches("VALUES CAST('Trino' AS varchar)"); } + @Test + public void testPushdownAllTypesPartitionKeyPredicate() + { + // TODO partition key predicate pushdown for decimal types does not work https://github.com/trinodb/trino/issues/10927 + String sql = "SELECT *" + + " FROM " + TABLE_PUSHDOWN_ALL_TYPES_PARTITION_KEY_PREDICATE + + " WHERE key = 'key 7'" + + " AND typeuuid = UUID '00000000-0000-0000-0000-000000000007'" + + " AND typetinyint = 7" + + " AND typesmallint = 7" + + " AND typeinteger = 7" + + " AND typelong = 1007" + + " AND typedate = DATE '1970-01-01'" + + " AND typetimestamp = TIMESTAMP '1970-01-01 03:04:05Z'" + + " AND typeansi = 'ansi 7'" + + " AND typeboolean = false" + + " AND typedouble = 16384.0" + + " AND typefloat = REAL '2097152.0'" + + " AND typeinet = '127.0.0.1'" + + " AND typevarchar = 'varchar 7'" + + " AND typetimeuuid = UUID 'd2177dd0-eaa2-11de-a572-001b779c76e7'" + + ""; + MaterializedResult result = execute(sql); + + assertEquals(result.getRowCount(), 1); + } + @Test public void testPartitionKeyPredicate() {