in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/responsehandler/responsehandler.go [294:348]
func (th *TypeHandler) BuildMetadata(rowMap map[string]map[string]interface{}, query QueryMetadata) (cmd []*message.ColumnMetadata, mapKeyArr []string, err error) {
uniqueColumns := ExtractUniqueKeys(rowMap, query)
i := 0
for index := range uniqueColumns {
column := uniqueColumns[index]
if column == rowkey {
continue
}
mapKey := GetMapKeyForColumn(query, column)
var cqlType string
var err error
//checking if alias exists
columnObj := GetQueryColumn(query, i, column)
if columnObj.FuncName == "count" {
cqlType = "bigint"
} else if columnObj.IsWriteTimeColumn {
cqlType = "timestamp"
} else {
lookupColumn := column
if alias, exists := query.AliasMap[column]; exists {
lookupColumn = alias.Name
if mapKey != "" {
lookupColumn = columnObj.MapColumnName
}
} else if columnObj.IsFunc {
lookupColumn = strings.SplitN(column, "_", 2)[1]
} else if mapKey != "" {
lookupColumn = columnObj.MapColumnName
}
cqlType, _, err = th.GetColumnMeta(query.KeyspaceName, query.TableName, lookupColumn)
if err != nil {
return nil, nil, err
}
}
dt, err := utilities.GetCassandraColumnType(cqlType)
if err != nil {
return nil, nil, err
}
cmd = append(cmd, &message.ColumnMetadata{
Keyspace: query.KeyspaceName,
Table: query.TableName,
Name: column,
Index: int32(i),
Type: dt,
})
mapKeyArr = append(mapKeyArr, mapKey)
i++
}
return cmd, mapKeyArr, nil
}