in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/translator/utils.go [246:303]
func formatValues(value string, cqlType string, protocolV primitive.ProtocolVersion) ([]byte, error) {
var iv interface{}
var dt datatype.DataType
switch cqlType {
case "int":
return EncodeBigInt(value, protocolV)
case "bigint":
val, err := strconv.ParseInt(value, 10, 64)
if err != nil {
return nil, fmt.Errorf("error converting string to int64: %w", err)
}
iv = val
dt = datatype.Bigint
case "float":
val, err := strconv.ParseFloat(value, 32)
if err != nil {
return nil, fmt.Errorf("error converting string to float32: %w", err)
}
iv = float32(val)
dt = datatype.Float
case "double":
val, err := strconv.ParseFloat(value, 64)
if err != nil {
return nil, fmt.Errorf("error converting string to float64: %w", err)
}
iv = val
dt = datatype.Double
case "boolean":
return EncodeBool(value, protocolV)
case "timestamp":
val, err := parseTimestamp(value)
if err != nil {
return nil, fmt.Errorf("error converting string to timestamp: %w", err)
}
iv = val
dt = datatype.Timestamp
case "blob":
iv = value
dt = datatype.Blob
case "text", "varchar":
iv = value
dt = datatype.Varchar
default:
return nil, fmt.Errorf("unsupported CQL type: %s", cqlType)
}
bd, err := proxycore.EncodeType(dt, protocolV, iv)
if err != nil {
return nil, fmt.Errorf("error encoding value: %w", err)
}
return bd, nil
}