|
|
@@ -375,12 +375,20 @@ func getKeyspaceMetadata(
|
|
|
}
|
|
|
|
|
|
// query for only the table metadata in the specified keyspace from system.schema_columnfamilies
|
|
|
-func getTableMetadata(
|
|
|
- session *Session,
|
|
|
- keyspaceName string,
|
|
|
-) ([]TableMetadata, error) {
|
|
|
- query := session.Query(
|
|
|
- `
|
|
|
+func getTableMetadata(session *Session, keyspaceName string) ([]TableMetadata, error) {
|
|
|
+
|
|
|
+ var (
|
|
|
+ scan func(iter *Iter, table *TableMetadata) bool
|
|
|
+ stmt string
|
|
|
+
|
|
|
+ keyAliasesJSON []byte
|
|
|
+ columnAliasesJSON []byte
|
|
|
+ )
|
|
|
+
|
|
|
+ if session.cfg.ProtoVersion < protoVersion4 {
|
|
|
+ // we have key aliases
|
|
|
+ // TODO: Do we need key_aliases?
|
|
|
+ stmt = `
|
|
|
SELECT
|
|
|
columnfamily_name,
|
|
|
key_validator,
|
|
|
@@ -390,29 +398,49 @@ func getTableMetadata(
|
|
|
column_aliases,
|
|
|
value_alias
|
|
|
FROM system.schema_columnfamilies
|
|
|
- WHERE keyspace_name = ?
|
|
|
- `,
|
|
|
- keyspaceName,
|
|
|
- )
|
|
|
+ WHERE keyspace_name = ?`
|
|
|
+
|
|
|
+ scan = func(iter *Iter, table *TableMetadata) bool {
|
|
|
+ return iter.Scan(
|
|
|
+ &table.Name,
|
|
|
+ &table.KeyValidator,
|
|
|
+ &table.Comparator,
|
|
|
+ &table.DefaultValidator,
|
|
|
+ &keyAliasesJSON,
|
|
|
+ &columnAliasesJSON,
|
|
|
+ &table.ValueAlias,
|
|
|
+ )
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ stmt = `
|
|
|
+ SELECT
|
|
|
+ columnfamily_name,
|
|
|
+ key_validator,
|
|
|
+ comparator,
|
|
|
+ default_validator
|
|
|
+ FROM system.schema_columnfamilies
|
|
|
+ WHERE keyspace_name = ?`
|
|
|
+
|
|
|
+ scan = func(iter *Iter, table *TableMetadata) bool {
|
|
|
+ return iter.Scan(
|
|
|
+ &table.Name,
|
|
|
+ &table.KeyValidator,
|
|
|
+ &table.Comparator,
|
|
|
+ &table.DefaultValidator,
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// Set a routing key to avoid GetRoutingKey from computing the routing key
|
|
|
// TODO use a separate connection (pool) for system keyspace queries.
|
|
|
+ query := session.Query(stmt, keyspaceName)
|
|
|
query.RoutingKey([]byte{})
|
|
|
iter := query.Iter()
|
|
|
|
|
|
tables := []TableMetadata{}
|
|
|
table := TableMetadata{Keyspace: keyspaceName}
|
|
|
|
|
|
- var keyAliasesJSON []byte
|
|
|
- var columnAliasesJSON []byte
|
|
|
- for iter.Scan(
|
|
|
- &table.Name,
|
|
|
- &table.KeyValidator,
|
|
|
- &table.Comparator,
|
|
|
- &table.DefaultValidator,
|
|
|
- &keyAliasesJSON,
|
|
|
- &columnAliasesJSON,
|
|
|
- &table.ValueAlias,
|
|
|
- ) {
|
|
|
+ for scan(iter, &table) {
|
|
|
var err error
|
|
|
|
|
|
// decode the key aliases
|