Skip to content

Commit a37223d

Browse files
Gleb Natapovavikivity
authored andcommitted
python-driver: add support for in_memory table attribute
For cqlsh to show in_memory attribute properly python driver support is needed. Message-Id: <[email protected]>
1 parent 85466dd commit a37223d

File tree

1 file changed

+38
-5
lines changed

1 file changed

+38
-5
lines changed

cassandra/metadata.py

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1732,6 +1732,7 @@ class SchemaParserV22(_SchemaParser):
17321732
"dclocal_read_repair_chance", # kept to be safe, but see _build_table_options()
17331733
"local_read_repair_chance",
17341734
"replicate_on_write",
1735+
'in_memory',
17351736
"gc_grace_seconds",
17361737
"bloom_filter_fp_chance",
17371738
"caching",
@@ -1759,13 +1760,15 @@ def __init__(self, connection, timeout):
17591760
self.types_result = []
17601761
self.functions_result = []
17611762
self.aggregates_result = []
1763+
self.scylla_result = []
17621764

17631765
self.keyspace_table_rows = defaultdict(list)
17641766
self.keyspace_table_col_rows = defaultdict(lambda: defaultdict(list))
17651767
self.keyspace_type_rows = defaultdict(list)
17661768
self.keyspace_func_rows = defaultdict(list)
17671769
self.keyspace_agg_rows = defaultdict(list)
17681770
self.keyspace_table_trigger_rows = defaultdict(lambda: defaultdict(list))
1771+
self.keyspace_scylla_rows = defaultdict(lambda: defaultdict(list))
17691772

17701773
def get_all_keyspaces(self):
17711774
self._query_all()
@@ -2176,9 +2179,24 @@ def _query_all(self):
21762179
self._aggregate_results()
21772180

21782181
def _aggregate_results(self):
2182+
m = self.keyspace_scylla_rows
2183+
for row in self.scylla_result:
2184+
ksname = row["keyspace_name"]
2185+
cfname = row[self._table_name_col]
2186+
m[ksname][cfname].append(row)
2187+
21792188
m = self.keyspace_table_rows
21802189
for row in self.tables_result:
2181-
m[row["keyspace_name"]].append(row)
2190+
ksname = row["keyspace_name"]
2191+
cfname = row[self._table_name_col]
2192+
# in_memory property is stored in scylla private table
2193+
# add it to table properties if enabled
2194+
try:
2195+
if self.keyspace_scylla_rows[ksname][cfname][0]["in_memory"] == True:
2196+
row["in_memory"] = True
2197+
except (IndexError, KeyError):
2198+
pass
2199+
m[ksname].append(row)
21822200

21832201
m = self.keyspace_table_col_rows
21842202
for row in self.columns_result:
@@ -2220,6 +2238,7 @@ class SchemaParserV3(SchemaParserV22):
22202238
_SELECT_FUNCTIONS = "SELECT * FROM system_schema.functions"
22212239
_SELECT_AGGREGATES = "SELECT * FROM system_schema.aggregates"
22222240
_SELECT_VIEWS = "SELECT * FROM system_schema.views"
2241+
_SELECT_SCYLLA = "SELECT * FROM system_schema.scylla_tables"
22232242

22242243
_table_name_col = 'table_name'
22252244

@@ -2235,6 +2254,7 @@ class SchemaParserV3(SchemaParserV22):
22352254
'crc_check_chance',
22362255
'dclocal_read_repair_chance',
22372256
'default_time_to_live',
2257+
'in_memory',
22382258
'gc_grace_seconds',
22392259
'max_index_interval',
22402260
'memtable_flush_period_in_ms',
@@ -2262,23 +2282,33 @@ def get_table(self, keyspaces, keyspace, table):
22622282
col_query = QueryMessage(query=self._SELECT_COLUMNS + where_clause, consistency_level=cl)
22632283
indexes_query = QueryMessage(query=self._SELECT_INDEXES + where_clause, consistency_level=cl)
22642284
triggers_query = QueryMessage(query=self._SELECT_TRIGGERS + where_clause, consistency_level=cl)
2285+
scylla_query = QueryMessage(query=self._SELECT_SCYLLA + where_clause, consistency_level=cl)
22652286

22662287
# in protocol v4 we don't know if this event is a view or a table, so we look for both
22672288
where_clause = bind_params(" WHERE keyspace_name = %s AND view_name = %s", (keyspace, table), _encoder)
22682289
view_query = QueryMessage(query=self._SELECT_VIEWS + where_clause,
22692290
consistency_level=cl)
22702291
((cf_success, cf_result), (col_success, col_result),
22712292
(indexes_sucess, indexes_result), (triggers_success, triggers_result),
2272-
(view_success, view_result)) = (
2293+
(view_success, view_result),
2294+
(scylla_sucess, scylla_result)) = (
22732295
self.connection.wait_for_responses(
22742296
cf_query, col_query, indexes_query, triggers_query,
2275-
view_query, timeout=self.timeout, fail_on_error=False)
2297+
view_query, scylla_query, timeout=self.timeout, fail_on_error=False)
22762298
)
22772299
table_result = self._handle_results(cf_success, cf_result)
22782300
col_result = self._handle_results(col_success, col_result)
22792301
if table_result:
22802302
indexes_result = self._handle_results(indexes_sucess, indexes_result)
22812303
triggers_result = self._handle_results(triggers_success, triggers_result)
2304+
# in_memory property is stored in scylla private table
2305+
# add it to table properties if enabled
2306+
scylla_result = self._handle_results(scylla_success, scylla_result)
2307+
try:
2308+
if scylla_result[0]["in_memory"] == True:
2309+
table_result[0]["in_memory"] = True
2310+
except (IndexError, KeyError):
2311+
pass
22822312
return self._build_table_metadata(table_result[0], col_result, triggers_result, indexes_result)
22832313

22842314
view_result = self._handle_results(view_success, view_result)
@@ -2434,7 +2464,8 @@ def _query_all(self):
24342464
QueryMessage(query=self._SELECT_AGGREGATES, consistency_level=cl),
24352465
QueryMessage(query=self._SELECT_TRIGGERS, consistency_level=cl),
24362466
QueryMessage(query=self._SELECT_INDEXES, consistency_level=cl),
2437-
QueryMessage(query=self._SELECT_VIEWS, consistency_level=cl)
2467+
QueryMessage(query=self._SELECT_VIEWS, consistency_level=cl),
2468+
QueryMessage(query=self._SELECT_SCYLLA, consistency_level=cl)
24382469
]
24392470

24402471
((ks_success, ks_result),
@@ -2445,7 +2476,8 @@ def _query_all(self):
24452476
(aggregates_success, aggregates_result),
24462477
(triggers_success, triggers_result),
24472478
(indexes_success, indexes_result),
2448-
(views_success, views_result)) = self.connection.wait_for_responses(
2479+
(views_success, views_result),
2480+
(scylla_success, scylla_result)) = self.connection.wait_for_responses(
24492481
*queries, timeout=self.timeout, fail_on_error=False
24502482
)
24512483

@@ -2458,6 +2490,7 @@ def _query_all(self):
24582490
self.aggregates_result = self._handle_results(aggregates_success, aggregates_result)
24592491
self.indexes_result = self._handle_results(indexes_success, indexes_result)
24602492
self.views_result = self._handle_results(views_success, views_result)
2493+
self.scylla_result = self._handle_results(scylla_success, scylla_result)
24612494

24622495
self._aggregate_results()
24632496

0 commit comments

Comments
 (0)