Skip to content

Commit bd1e7e7

Browse files
committed
handle missing column aliases for composite types
This fixes some edge cases where some metadata goes missing in an upgrade from C* 2.0 --> 2.1. PYTHON-562
1 parent a6e6613 commit bd1e7e7

1 file changed

Lines changed: 8 additions & 10 deletions

File tree

cassandra/metadata.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1777,12 +1777,9 @@ def _build_table_metadata(self, row, col_rows=None, trigger_rows=None):
17771777
comparator = types.lookup_casstype(row["comparator"])
17781778
table_meta.comparator = comparator
17791779

1780-
if issubclass(comparator, types.CompositeType):
1781-
column_name_types = comparator.subtypes
1782-
is_composite_comparator = True
1783-
else:
1784-
column_name_types = (comparator,)
1785-
is_composite_comparator = False
1780+
is_dct_comparator = issubclass(comparator, types.DynamicCompositeType)
1781+
is_composite_comparator = issubclass(comparator, types.CompositeType)
1782+
column_name_types = comparator.subtypes if is_composite_comparator else (comparator,)
17861783

17871784
num_column_name_components = len(column_name_types)
17881785
last_col = column_name_types[-1]
@@ -1796,7 +1793,8 @@ def _build_table_metadata(self, row, col_rows=None, trigger_rows=None):
17961793

17971794
if column_aliases is not None:
17981795
column_aliases = json.loads(column_aliases)
1799-
else:
1796+
1797+
if not column_aliases: # json load failed or column_aliases empty PYTHON-562
18001798
column_aliases = [r.get('column_name') for r in clustering_rows]
18011799

18021800
if is_composite_comparator:
@@ -1819,10 +1817,10 @@ def _build_table_metadata(self, row, col_rows=None, trigger_rows=None):
18191817

18201818
# Some thrift tables define names in composite types (see PYTHON-192)
18211819
if not column_aliases and hasattr(comparator, 'fieldnames'):
1822-
column_aliases = comparator.fieldnames
1820+
column_aliases = filter(None, comparator.fieldnames)
18231821
else:
18241822
is_compact = True
1825-
if column_aliases or not col_rows:
1823+
if column_aliases or not col_rows or is_dct_comparator:
18261824
has_value = True
18271825
clustering_size = num_column_name_components
18281826
else:
@@ -1867,7 +1865,7 @@ def _build_table_metadata(self, row, col_rows=None, trigger_rows=None):
18671865
if len(column_aliases) > i:
18681866
column_name = column_aliases[i]
18691867
else:
1870-
column_name = "column%d" % i
1868+
column_name = "column%d" % (i + 1)
18711869

18721870
data_type = column_name_types[i]
18731871
cql_type = _cql_from_cass_type(data_type)

0 commit comments

Comments
 (0)