func handleCollectionColumn()

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)
	}
}