func castColumns()

in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/translator/utils.go [1058:1093]


func castColumns(colMeta *schemaMapping.Column, columnFamily string) (string, error) {
	var nc string
	switch colMeta.ColumnType {
	case "int":
		if colMeta.IsPrimaryKey {
			nc = colMeta.ColumnName
		} else {
			nc = fmt.Sprintf("TO_INT64(%s['%s'])", columnFamily, colMeta.ColumnName)
		}
	case "bigint":
		if colMeta.IsPrimaryKey {
			nc = colMeta.ColumnName
		} else {
			nc = fmt.Sprintf("TO_INT64(%s['%s'])", columnFamily, colMeta.ColumnName)
		}
	case "float":
		nc = fmt.Sprintf("TO_FLOAT32(%s['%s'])", columnFamily, colMeta.ColumnName)
	case "double":
		nc = fmt.Sprintf("TO_FLOAT64(%s['%s'])", columnFamily, colMeta.ColumnName)
	case "boolean":
		nc = fmt.Sprintf("TO_INT64(%s['%s'])", columnFamily, colMeta.ColumnName)
	case "timestamp":
		nc = fmt.Sprintf("TO_TIME(%s['%s'])", columnFamily, colMeta.ColumnName)
	case "blob":
		nc = fmt.Sprintf("TO_BLOB(%s['%s'])", columnFamily, colMeta.ColumnName)
	case "text", "varchar":
		if colMeta.IsPrimaryKey {
			nc = colMeta.ColumnName
		} else {
			nc = fmt.Sprintf("%s['%s']", columnFamily, colMeta.ColumnName)
		}
	default:
		return "", fmt.Errorf("unsupported CQL type: %s", colMeta.ColumnType)
	}
	return nc, nil
}