in metadata.go [802:861]
func (s *Session) scanColumnMetadataV2(keyspace string) ([]ColumnMetadata, error) {
// V2+ supports the type column
const stmt = `
SELECT
columnfamily_name,
column_name,
component_index,
validator,
index_name,
index_type,
index_options,
type
FROM system.schema_columns
WHERE keyspace_name = ?`
var columns []ColumnMetadata
rows := s.control.query(stmt, keyspace).Scanner()
for rows.Next() {
var (
column = ColumnMetadata{Keyspace: keyspace}
indexOptionsJSON []byte
)
err := rows.Scan(&column.Table,
&column.Name,
&column.ComponentIndex,
&column.Validator,
&column.Index.Name,
&column.Index.Type,
&indexOptionsJSON,
&column.Kind,
)
if err != nil {
return nil, err
}
if len(indexOptionsJSON) > 0 {
err := json.Unmarshal(indexOptionsJSON, &column.Index.Options)
if err != nil {
return nil, fmt.Errorf(
"invalid JSON value '%s' as index_options for column '%s' in table '%s': %v",
indexOptionsJSON,
column.Name,
column.Table,
err)
}
}
columns = append(columns, column)
}
if err := rows.Err(); err != nil {
return nil, err
}
return columns, nil
}