in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/translator/utils.go [898:977]
func handleCollectionColumn(column Column, colFamily string, value *primitive.Value, protocolV primitive.ProtocolVersion, newColumns *[]Column, newValues *[]interface{}, complexMeta *ComplexOperation) error {
var dataType datatype.DataType
switch column.CQLType {
case "map<varchar,timestamp>":
dataType = utilities.MapOfStrToBigInt
case "map<timestamp,timestamp>":
dataType = utilities.MapOfTimeToBigInt
case "set<timestamp>":
dataType = utilities.SetOfBigInt
case "list<timestamp>":
dataType = utilities.ListOfBigInt
default:
dataType, _ = utilities.GetCassandraColumnType(column.CQLType)
}
decodedValue, err := decodeCollectionValue(column.CQLType, dataType, value, protocolV)
if err != nil {
return fmt.Errorf("error decoding string to %s value: %w", column.CQLType, err)
}
switch column.CQLType {
case "map<varchar,varchar>":
return processTextMapColumn[string](decodedValue, protocolV, colFamily, "varchar", newValues, newColumns)
case "map<varchar,int>":
return processTextMapColumn[int32](decodedValue, protocolV, colFamily, "int", newValues, newColumns)
case "map<varchar,bigint>":
return processTextMapColumn[int64](decodedValue, protocolV, colFamily, "bigint", newValues, newColumns)
case "map<varchar,timestamp>":
return processTextMapColumn[int64](decodedValue, protocolV, colFamily, "bigint", newValues, newColumns)
case "map<varchar,float>":
return processTextMapColumn[float32](decodedValue, protocolV, colFamily, "float", newValues, newColumns)
case "map<varchar,double>":
return processTextMapColumn[float64](decodedValue, protocolV, colFamily, "double", newValues, newColumns)
case "map<varchar,boolean>":
return processTextMapColumn[bool](decodedValue, protocolV, colFamily, "boolean", newValues, newColumns)
case "map<timestamp,varchar>":
return processTimestampMapColumn[string](decodedValue, protocolV, colFamily, "varchar", newValues, newColumns)
case "map<timestamp,int>":
return processTimestampMapColumn[int32](decodedValue, protocolV, colFamily, "int", newValues, newColumns)
case "map<timestamp,bigint>":
return processTimestampMapColumn[int64](decodedValue, protocolV, colFamily, "bigint", newValues, newColumns)
case "map<timestamp,timestamp>":
return processTimestampMapColumn[int64](decodedValue, protocolV, colFamily, "bigint", newValues, newColumns)
case "map<timestamp,float>":
return processTimestampMapColumn[float32](decodedValue, protocolV, colFamily, "float", newValues, newColumns)
case "map<timestamp,double>":
return processTimestampMapColumn[float64](decodedValue, protocolV, colFamily, "double", newValues, newColumns)
case "map<timestamp,boolean>":
return processTimestampMapColumn[bool](decodedValue, protocolV, colFamily, "boolean", newValues, newColumns)
case "set<varchar>":
return processSetColumnGeneric[string](decodedValue, protocolV, colFamily, "varchar", newValues, newColumns)
case "set<boolean>":
return processSetColumnGeneric[bool](decodedValue, protocolV, colFamily, "boolean", newValues, newColumns)
case "set<int>":
return processSetColumnGeneric[int32](decodedValue, protocolV, colFamily, "int", newValues, newColumns)
case "set<bigint>":
return processSetColumnGeneric[int64](decodedValue, protocolV, colFamily, "bigint", newValues, newColumns)
case "set<float>":
return processSetColumnGeneric[float32](decodedValue, protocolV, colFamily, "float", newValues, newColumns)
case "set<double>":
return processSetColumnGeneric[float64](decodedValue, protocolV, colFamily, "double", newValues, newColumns)
case "set<timestamp>":
return processSetColumnGeneric[int64](decodedValue, protocolV, colFamily, "bigint", newValues, newColumns)
case "list<varchar>":
return processListColumnGeneric[string](decodedValue, protocolV, colFamily, "varchar", newValues, newColumns, complexMeta)
case "list<int>":
return processListColumnGeneric[int32](decodedValue, protocolV, colFamily, "int", newValues, newColumns, complexMeta)
case "list<bigint>":
return processListColumnGeneric[int64](decodedValue, protocolV, colFamily, "bigint", newValues, newColumns, complexMeta)
case "list<float>":
return processListColumnGeneric[float32](decodedValue, protocolV, colFamily, "float", newValues, newColumns, complexMeta)
case "list<double>":
return processListColumnGeneric[float64](decodedValue, protocolV, colFamily, "double", newValues, newColumns, complexMeta)
case "list<boolean>":
return processListColumnGeneric[bool](decodedValue, protocolV, colFamily, "boolean", newValues, newColumns, complexMeta)
case "list<timestamp>":
return processListColumnGeneric[int64](decodedValue, protocolV, colFamily, "bigint", newValues, newColumns, complexMeta)
default:
return fmt.Errorf("unsupported CQL type: %s", column.CQLType)
}
}