@@ -2577,6 +2577,10 @@ class SchemaParserV3(SchemaParserV22):
25772577 _SELECT_AGGREGATES = "SELECT * FROM system_schema.aggregates"
25782578 _SELECT_VIEWS = "SELECT * FROM system_schema.views"
25792579
2580+ def _is_not_scylla (self ):
2581+ """Check if NOT connected to ScyllaDB by checking for shard awareness."""
2582+ return getattr (getattr (self .connection , 'features' , None ), 'shard_id' , None ) is None
2583+
25802584 _table_name_col = 'table_name'
25812585
25822586 _function_agg_arument_type_col = 'argument_types'
@@ -2627,27 +2631,44 @@ def get_table(self, keyspaces, keyspace, table):
26272631 indexes_query = QueryMessage (
26282632 query = maybe_add_timeout_to_query (self ._SELECT_INDEXES + where_clause , self .metadata_request_timeout ),
26292633 consistency_level = cl , fetch_size = fetch_size )
2630- triggers_query = QueryMessage (
2631- query = maybe_add_timeout_to_query (self ._SELECT_TRIGGERS + where_clause , self .metadata_request_timeout ),
2632- consistency_level = cl , fetch_size = fetch_size )
2634+
2635+ # ScyllaDB doesn't have triggers, skip the query
2636+ if self ._is_not_scylla ():
2637+ triggers_query = QueryMessage (
2638+ query = maybe_add_timeout_to_query (self ._SELECT_TRIGGERS + where_clause , self .metadata_request_timeout ),
2639+ consistency_level = cl , fetch_size = fetch_size )
26332640
26342641 # in protocol v4 we don't know if this event is a view or a table, so we look for both
26352642 where_clause = bind_params (" WHERE keyspace_name = %s AND view_name = %s" , (keyspace , table ), _encoder )
26362643 view_query = QueryMessage (
26372644 query = maybe_add_timeout_to_query (self ._SELECT_VIEWS + where_clause , self .metadata_request_timeout ),
26382645 consistency_level = cl , fetch_size = fetch_size )
2639- ((cf_success , cf_result ), (col_success , col_result ),
2640- (indexes_sucess , indexes_result ), (triggers_success , triggers_result ),
2641- (view_success , view_result )) = (
2642- self .connection .wait_for_responses (
2643- cf_query , col_query , indexes_query , triggers_query ,
2644- view_query , timeout = self .timeout , fail_on_error = False )
2645- )
2646+
2647+ if self ._is_not_scylla ():
2648+ ((cf_success , cf_result ), (col_success , col_result ),
2649+ (indexes_sucess , indexes_result ), (triggers_success , triggers_result ),
2650+ (view_success , view_result )) = (
2651+ self .connection .wait_for_responses (
2652+ cf_query , col_query , indexes_query , triggers_query ,
2653+ view_query , timeout = self .timeout , fail_on_error = False )
2654+ )
2655+ else :
2656+ ((cf_success , cf_result ), (col_success , col_result ),
2657+ (indexes_sucess , indexes_result ),
2658+ (view_success , view_result )) = (
2659+ self .connection .wait_for_responses (
2660+ cf_query , col_query , indexes_query ,
2661+ view_query , timeout = self .timeout , fail_on_error = False )
2662+ )
2663+
26462664 table_result = self ._handle_results (cf_success , cf_result , query_msg = cf_query )
26472665 col_result = self ._handle_results (col_success , col_result , query_msg = col_query )
26482666 if table_result :
26492667 indexes_result = self ._handle_results (indexes_sucess , indexes_result , query_msg = indexes_query )
2650- triggers_result = self ._handle_results (triggers_success , triggers_result , query_msg = triggers_query )
2668+ if self ._is_not_scylla ():
2669+ triggers_result = self ._handle_results (triggers_success , triggers_result , query_msg = triggers_query )
2670+ else :
2671+ triggers_result = None
26512672 return self ._build_table_metadata (table_result [0 ], col_result , triggers_result , indexes_result )
26522673
26532674 view_result = self ._handle_results (view_success , view_result , query_msg = view_query )
@@ -2696,9 +2717,10 @@ def _build_table_metadata(self, row, col_rows=None, trigger_rows=None, index_row
26962717
26972718 self ._build_table_columns (table_meta , col_rows , compact_static , is_dense , virtual )
26982719
2699- for trigger_row in trigger_rows :
2700- trigger_meta = self ._build_trigger_metadata (table_meta , trigger_row )
2701- table_meta .triggers [trigger_meta .name ] = trigger_meta
2720+ if self ._is_not_scylla ():
2721+ for trigger_row in trigger_rows :
2722+ trigger_meta = self ._build_trigger_metadata (table_meta , trigger_row )
2723+ table_meta .triggers [trigger_meta .name ] = trigger_meta
27022724
27032725 for index_row in index_rows :
27042726 index_meta = self ._build_index_metadata (table_meta , index_row )
@@ -2793,6 +2815,7 @@ def _build_trigger_metadata(table_metadata, row):
27932815 trigger_meta = TriggerMetadata (table_metadata , name , options )
27942816 return trigger_meta
27952817
2818+
27962819 def _query_all (self ):
27972820 cl = ConsistencyLevel .ONE
27982821 fetch_size = self .fetch_size
@@ -2809,35 +2832,45 @@ def _query_all(self):
28092832 fetch_size = fetch_size , consistency_level = cl ),
28102833 QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_AGGREGATES , self .metadata_request_timeout ),
28112834 fetch_size = fetch_size , consistency_level = cl ),
2812- QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_TRIGGERS , self .metadata_request_timeout ),
2813- fetch_size = fetch_size , consistency_level = cl ),
28142835 QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_INDEXES , self .metadata_request_timeout ),
28152836 fetch_size = fetch_size , consistency_level = cl ),
28162837 QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_VIEWS , self .metadata_request_timeout ),
28172838 fetch_size = fetch_size , consistency_level = cl ),
28182839 ]
28192840
2841+ # ScyllaDB doesn't have triggers, skip the query
2842+ if self ._is_not_scylla ():
2843+ queries .append (QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_TRIGGERS , self .metadata_request_timeout ),
2844+ fetch_size = fetch_size , consistency_level = cl ))
2845+
2846+ responses = self .connection .wait_for_responses (* queries , timeout = self .timeout , fail_on_error = False )
2847+
2848+ # Unpack common responses (always present)
28202849 ((ks_success , ks_result ),
28212850 (table_success , table_result ),
28222851 (col_success , col_result ),
28232852 (types_success , types_result ),
28242853 (functions_success , functions_result ),
28252854 (aggregates_success , aggregates_result ),
2826- (triggers_success , triggers_result ),
28272855 (indexes_success , indexes_result ),
2828- (views_success , views_result )) = self .connection .wait_for_responses (
2829- * queries , timeout = self .timeout , fail_on_error = False
2830- )
2856+ (views_success , views_result )) = responses [:8 ]
2857+
2858+ # Unpack triggers response if present (Cassandra/DSE only)
2859+ if self ._is_not_scylla ():
2860+ (triggers_success , triggers_result ) = responses [8 ]
28312861
28322862 self .keyspaces_result = self ._handle_results (ks_success , ks_result , query_msg = queries [0 ])
28332863 self .tables_result = self ._handle_results (table_success , table_result , query_msg = queries [1 ])
28342864 self .columns_result = self ._handle_results (col_success , col_result , query_msg = queries [2 ])
2835- self .triggers_result = self ._handle_results (triggers_success , triggers_result , query_msg = queries [6 ])
28362865 self .types_result = self ._handle_results (types_success , types_result , query_msg = queries [3 ])
28372866 self .functions_result = self ._handle_results (functions_success , functions_result , query_msg = queries [4 ])
28382867 self .aggregates_result = self ._handle_results (aggregates_success , aggregates_result , query_msg = queries [5 ])
2839- self .indexes_result = self ._handle_results (indexes_success , indexes_result , query_msg = queries [7 ])
2840- self .views_result = self ._handle_results (views_success , views_result , query_msg = queries [8 ])
2868+ self .indexes_result = self ._handle_results (indexes_success , indexes_result , query_msg = queries [6 ])
2869+ self .views_result = self ._handle_results (views_success , views_result , query_msg = queries [7 ])
2870+ if self ._is_not_scylla ():
2871+ self .triggers_result = self ._handle_results (triggers_success , triggers_result , query_msg = queries [8 ])
2872+ else :
2873+ self .triggers_result = []
28412874
28422875 self ._aggregate_results ()
28432876
@@ -2915,8 +2948,6 @@ def _query_all(self):
29152948 fetch_size = fetch_size , consistency_level = cl ),
29162949 QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_AGGREGATES , self .metadata_request_timeout ),
29172950 fetch_size = fetch_size , consistency_level = cl ),
2918- QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_TRIGGERS , self .metadata_request_timeout ),
2919- fetch_size = fetch_size , consistency_level = cl ),
29202951 QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_INDEXES , self .metadata_request_timeout ),
29212952 fetch_size = fetch_size , consistency_level = cl ),
29222953 QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_VIEWS , self .metadata_request_timeout ),
@@ -2930,8 +2961,15 @@ def _query_all(self):
29302961 fetch_size = fetch_size , consistency_level = cl ),
29312962 ]
29322963
2964+ # ScyllaDB doesn't have triggers, skip the query
2965+ if self ._is_not_scylla ():
2966+ queries .append (QueryMessage (query = maybe_add_timeout_to_query (self ._SELECT_TRIGGERS , self .metadata_request_timeout ),
2967+ fetch_size = fetch_size , consistency_level = cl ))
2968+
29332969 responses = self .connection .wait_for_responses (
29342970 * queries , timeout = self .timeout , fail_on_error = False )
2971+
2972+ # Unpack common responses (always present)
29352973 (
29362974 # copied from V3
29372975 (ks_success , ks_result ),
@@ -2940,39 +2978,45 @@ def _query_all(self):
29402978 (types_success , types_result ),
29412979 (functions_success , functions_result ),
29422980 (aggregates_success , aggregates_result ),
2943- (triggers_success , triggers_result ),
29442981 (indexes_success , indexes_result ),
29452982 (views_success , views_result ),
29462983 # V4-only responses
29472984 (virtual_ks_success , virtual_ks_result ),
29482985 (virtual_table_success , virtual_table_result ),
2949- (virtual_column_success , virtual_column_result )
2950- ) = responses
2986+ (virtual_column_success , virtual_column_result ),
2987+ ) = responses [:11 ]
2988+
2989+ # Unpack triggers response if present (Cassandra/DSE only)
2990+ if self ._is_not_scylla ():
2991+ (triggers_success , triggers_result ) = responses [11 ]
29512992
29522993 # copied from V3
29532994 self .keyspaces_result = self ._handle_results (ks_success , ks_result , query_msg = queries [0 ])
29542995 self .tables_result = self ._handle_results (table_success , table_result , query_msg = queries [1 ])
29552996 self .columns_result = self ._handle_results (col_success , col_result , query_msg = queries [2 ])
2956- self .triggers_result = self ._handle_results (triggers_success , triggers_result , query_msg = queries [6 ])
29572997 self .types_result = self ._handle_results (types_success , types_result , query_msg = queries [3 ])
29582998 self .functions_result = self ._handle_results (functions_success , functions_result , query_msg = queries [4 ])
29592999 self .aggregates_result = self ._handle_results (aggregates_success , aggregates_result , query_msg = queries [5 ])
2960- self .indexes_result = self ._handle_results (indexes_success , indexes_result , query_msg = queries [7 ])
2961- self .views_result = self ._handle_results (views_success , views_result , query_msg = queries [8 ])
3000+ self .indexes_result = self ._handle_results (indexes_success , indexes_result , query_msg = queries [6 ])
3001+ self .views_result = self ._handle_results (views_success , views_result , query_msg = queries [7 ])
3002+ if self ._is_not_scylla ():
3003+ self .triggers_result = self ._handle_results (triggers_success , triggers_result , query_msg = queries [11 ])
3004+ else :
3005+ self .triggers_result = []
29623006 # V4-only results
29633007 # These tables don't exist in some DSE versions reporting 4.X so we can
29643008 # ignore them if we got an error
29653009 self .virtual_keyspaces_result = self ._handle_results (
29663010 virtual_ks_success , virtual_ks_result ,
2967- expected_failures = (InvalidRequest ,), query_msg = queries [9 ]
3011+ expected_failures = (InvalidRequest ,), query_msg = queries [8 ]
29683012 )
29693013 self .virtual_tables_result = self ._handle_results (
29703014 virtual_table_success , virtual_table_result ,
2971- expected_failures = (InvalidRequest ,), query_msg = queries [10 ]
3015+ expected_failures = (InvalidRequest ,), query_msg = queries [9 ]
29723016 )
29733017 self .virtual_columns_result = self ._handle_results (
29743018 virtual_column_success , virtual_column_result ,
2975- expected_failures = (InvalidRequest ,), query_msg = queries [11 ]
3019+ expected_failures = (InvalidRequest ,), query_msg = queries [10 ]
29763020 )
29773021
29783022 self ._aggregate_results ()
0 commit comments