getAllViewDependencies gets all view dependencies for a schema in a single query.
(txn *sql.Tx, schemaName string)
| 1016 | |
| 1017 | // getAllViewDependencies gets all view dependencies for a schema in a single query. |
| 1018 | func getAllViewDependencies(txn *sql.Tx, schemaName string) (map[db.TableKey][]*storepb.DependencyColumn, error) { |
| 1019 | dependenciesMap := make(map[db.TableKey][]*storepb.DependencyColumn) |
| 1020 | |
| 1021 | query := fmt.Sprintf(` |
| 1022 | SELECT |
| 1023 | NAME as view_name, |
| 1024 | REFERENCED_OWNER as source_schema, |
| 1025 | REFERENCED_NAME as source_table, |
| 1026 | '*' as column_name |
| 1027 | FROM ALL_DEPENDENCIES |
| 1028 | WHERE OWNER = '%s' |
| 1029 | AND TYPE = 'VIEW' |
| 1030 | AND REFERENCED_TYPE IN ('TABLE', 'VIEW') |
| 1031 | ORDER BY NAME, REFERENCED_OWNER, REFERENCED_NAME |
| 1032 | `, schemaName) |
| 1033 | |
| 1034 | rows, err := txn.Query(query) |
| 1035 | if err != nil { |
| 1036 | return nil, err |
| 1037 | } |
| 1038 | defer rows.Close() |
| 1039 | |
| 1040 | for rows.Next() { |
| 1041 | var viewName string |
| 1042 | dependencyColumn := &storepb.DependencyColumn{} |
| 1043 | if err := rows.Scan(&viewName, &dependencyColumn.Schema, &dependencyColumn.Table, &dependencyColumn.Column); err != nil { |
| 1044 | return nil, err |
| 1045 | } |
| 1046 | |
| 1047 | key := db.TableKey{Schema: schemaName, Table: viewName} |
| 1048 | dependenciesMap[key] = append(dependenciesMap[key], dependencyColumn) |
| 1049 | } |
| 1050 | if err := rows.Err(); err != nil { |
| 1051 | return nil, err |
| 1052 | } |
| 1053 | |
| 1054 | return dependenciesMap, nil |
| 1055 | } |
| 1056 | |
| 1057 | // getAllMaterializedViewDependencies gets all materialized view dependencies for a schema in a single query. |
| 1058 | func getAllMaterializedViewDependencies(txn *sql.Tx, schemaName string) (map[db.TableKey][]*storepb.DependencyColumn, error) { |