func()

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
}