From e62e8fbf8f3351727e70a00cf3a3f5c83519c270 Mon Sep 17 00:00:00 2001 From: Stefan Miklosovic Date: Tue, 16 Apr 2024 00:33:24 +0200 Subject: [PATCH] added virtual types --- cassandra/metadata.py | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/cassandra/metadata.py b/cassandra/metadata.py index f52bfd9317..e61a1d90cd 100644 --- a/cassandra/metadata.py +++ b/cassandra/metadata.py @@ -2776,12 +2776,14 @@ class SchemaParserV4(SchemaParserV3): _SELECT_VIRTUAL_KEYSPACES = 'SELECT * from system_virtual_schema.keyspaces' _SELECT_VIRTUAL_TABLES = 'SELECT * from system_virtual_schema.tables' _SELECT_VIRTUAL_COLUMNS = 'SELECT * from system_virtual_schema.columns' + _SELECT_VIRTUAL_TYPES = 'SELECT * from system_virtual_schema.types' def __init__(self, connection, timeout): super(SchemaParserV4, self).__init__(connection, timeout) self.virtual_keyspaces_rows = defaultdict(list) self.virtual_tables_rows = defaultdict(list) self.virtual_columns_rows = defaultdict(lambda: defaultdict(list)) + self.virtual_types_rows = defaultdict(list) def _query_all(self): cl = ConsistencyLevel.ONE @@ -2801,7 +2803,8 @@ def _query_all(self): # V4-only queries QueryMessage(query=self._SELECT_VIRTUAL_KEYSPACES, consistency_level=cl), QueryMessage(query=self._SELECT_VIRTUAL_TABLES, consistency_level=cl), - QueryMessage(query=self._SELECT_VIRTUAL_COLUMNS, consistency_level=cl) + QueryMessage(query=self._SELECT_VIRTUAL_COLUMNS, consistency_level=cl), + QueryMessage(query=self._SELECT_VIRTUAL_TYPES, consistency_level=cl) ] responses = self.connection.wait_for_responses( @@ -2820,7 +2823,8 @@ def _query_all(self): # V4-only responses (virtual_ks_success, virtual_ks_result), (virtual_table_success, virtual_table_result), - (virtual_column_success, virtual_column_result) + (virtual_column_success, virtual_column_result), + (virtual_type_success, virtual_type_result) ) = responses # copied from V3 @@ -2848,6 +2852,10 @@ def _query_all(self): virtual_column_success, virtual_column_result, expected_failures=(InvalidRequest,) ) + self.virtual_types_result = self._handle_results( + virtual_type_success, virtual_type_result, + expected_failures=(InvalidRequest,) + ) self._aggregate_results() @@ -2864,6 +2872,10 @@ def _aggregate_results(self): tab_name = row[self._table_name_col] m[ks_name][tab_name].append(row) + m = self.virtual_types_rows + for row in self.virtual_types_result: + m[row['keyspace_name']].append(row) + def get_all_keyspaces(self): for x in super(SchemaParserV4, self).get_all_keyspaces(): yield x @@ -2882,6 +2894,11 @@ def get_all_keyspaces(self): col_rows=col_rows, virtual=True) ) + + for usertype_row in self.virtual_types_rows.get(keyspace_meta.name, []): + usertype = self._build_user_type(usertype_row) + keyspace_meta.user_types[usertype.name] = usertype + yield keyspace_meta @staticmethod