Sfoglia il codice sorgente

Get table metadata for materialized views.

Nimi Wariboko Jr 9 anni fa
parent
commit
516d6d2b48
1 ha cambiato i file con 22 aggiunte e 2 eliminazioni
  1. 22 2
      metadata.go

+ 22 - 2
metadata.go

@@ -404,6 +404,7 @@ func getKeyspaceMetadata(session *Session, keyspaceName string) (*KeyspaceMetada
 func getTableMetadata(session *Session, keyspaceName string) ([]TableMetadata, error) {
 
 	var (
+		iter *Iter
 		scan func(iter *Iter, table *TableMetadata) bool
 		stmt string
 
@@ -418,10 +419,29 @@ func getTableMetadata(session *Session, keyspaceName string) ([]TableMetadata, e
 		FROM system_schema.tables
 		WHERE keyspace_name = ?`
 
+		switchIter := func() *Iter {
+			iter.Close()
+			stmt = `
+				SELECT
+					view_name
+				FROM system_schema.views
+				WHERE keyspace_name = ?`
+			iter = session.control.query(stmt, keyspaceName)
+			return iter
+		}
+
 		scan = func(iter *Iter, table *TableMetadata) bool {
-			return iter.Scan(
+			r := iter.Scan(
 				&table.Name,
 			)
+			if !r {
+				iter = switchIter()
+				if iter != nil {
+					switchIter = func() *Iter { return nil }
+					r = iter.Scan(&table.Name)
+				}
+			}
+			return r
 		}
 	} else if session.cfg.ProtoVersion < protoVersion4 {
 		// we have key aliases
@@ -469,7 +489,7 @@ func getTableMetadata(session *Session, keyspaceName string) ([]TableMetadata, e
 		}
 	}
 
-	iter := session.control.query(stmt, keyspaceName)
+	iter = session.control.query(stmt, keyspaceName)
 
 	tables := []TableMetadata{}
 	table := TableMetadata{Keyspace: keyspaceName}