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
This commit is contained in:
		@@ -1777,12 +1777,9 @@ class SchemaParserV22(_SchemaParser):
 | 
			
		||||
            comparator = types.lookup_casstype(row["comparator"])
 | 
			
		||||
            table_meta.comparator = comparator
 | 
			
		||||
 | 
			
		||||
            if issubclass(comparator, types.CompositeType):
 | 
			
		||||
                column_name_types = comparator.subtypes
 | 
			
		||||
                is_composite_comparator = True
 | 
			
		||||
            else:
 | 
			
		||||
                column_name_types = (comparator,)
 | 
			
		||||
                is_composite_comparator = False
 | 
			
		||||
            is_dct_comparator = issubclass(comparator, types.DynamicCompositeType)
 | 
			
		||||
            is_composite_comparator = issubclass(comparator, types.CompositeType)
 | 
			
		||||
            column_name_types = comparator.subtypes if is_composite_comparator else (comparator,)
 | 
			
		||||
 | 
			
		||||
            num_column_name_components = len(column_name_types)
 | 
			
		||||
            last_col = column_name_types[-1]
 | 
			
		||||
@@ -1796,7 +1793,8 @@ class SchemaParserV22(_SchemaParser):
 | 
			
		||||
 | 
			
		||||
            if column_aliases is not None:
 | 
			
		||||
                column_aliases = json.loads(column_aliases)
 | 
			
		||||
            else:
 | 
			
		||||
 | 
			
		||||
            if not column_aliases:  # json load failed or column_aliases empty PYTHON-562
 | 
			
		||||
                column_aliases = [r.get('column_name') for r in clustering_rows]
 | 
			
		||||
 | 
			
		||||
            if is_composite_comparator:
 | 
			
		||||
@@ -1819,10 +1817,10 @@ class SchemaParserV22(_SchemaParser):
 | 
			
		||||
 | 
			
		||||
                    # Some thrift tables define names in composite types (see PYTHON-192)
 | 
			
		||||
                    if not column_aliases and hasattr(comparator, 'fieldnames'):
 | 
			
		||||
                        column_aliases = comparator.fieldnames
 | 
			
		||||
                        column_aliases = filter(None, comparator.fieldnames)
 | 
			
		||||
            else:
 | 
			
		||||
                is_compact = True
 | 
			
		||||
                if column_aliases or not col_rows:
 | 
			
		||||
                if column_aliases or not col_rows or is_dct_comparator:
 | 
			
		||||
                    has_value = True
 | 
			
		||||
                    clustering_size = num_column_name_components
 | 
			
		||||
                else:
 | 
			
		||||
@@ -1867,7 +1865,7 @@ class SchemaParserV22(_SchemaParser):
 | 
			
		||||
                if len(column_aliases) > i:
 | 
			
		||||
                    column_name = column_aliases[i]
 | 
			
		||||
                else:
 | 
			
		||||
                    column_name = "column%d" % i
 | 
			
		||||
                    column_name = "column%d" % (i + 1)
 | 
			
		||||
 | 
			
		||||
                data_type = column_name_types[i]
 | 
			
		||||
                cql_type = _cql_from_cass_type(data_type)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user