getAllMaterializedViewDependencies gets all materialized view dependencies for a schema in a single query.
(txn *sql.Tx, schemaName string)
| 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) { |
| 1059 | dependenciesMap := make(map[db.TableKey][]*storepb.DependencyColumn) |
| 1060 | |
| 1061 | query := fmt.Sprintf(` |
| 1062 | SELECT |
| 1063 | NAME as mview_name, |
| 1064 | REFERENCED_OWNER as source_schema, |
| 1065 | REFERENCED_NAME as source_table, |
| 1066 | '*' as column_name |
| 1067 | FROM ALL_DEPENDENCIES |
| 1068 | WHERE OWNER = '%s' |
| 1069 | AND TYPE = 'MATERIALIZED VIEW' |
| 1070 | AND REFERENCED_TYPE IN ('TABLE', 'VIEW') |
| 1071 | ORDER BY NAME, REFERENCED_OWNER, REFERENCED_NAME |
| 1072 | `, schemaName) |
| 1073 | |
| 1074 | rows, err := txn.Query(query) |
| 1075 | if err != nil { |
| 1076 | return nil, err |
| 1077 | } |
| 1078 | defer rows.Close() |
| 1079 | |
| 1080 | for rows.Next() { |
| 1081 | var mviewName string |
| 1082 | dependencyColumn := &storepb.DependencyColumn{} |
| 1083 | if err := rows.Scan(&mviewName, &dependencyColumn.Schema, &dependencyColumn.Table, &dependencyColumn.Column); err != nil { |
| 1084 | return nil, err |
| 1085 | } |
| 1086 | |
| 1087 | key := db.TableKey{Schema: schemaName, Table: mviewName} |
| 1088 | dependenciesMap[key] = append(dependenciesMap[key], dependencyColumn) |
| 1089 | } |
| 1090 | if err := rows.Err(); err != nil { |
| 1091 | return nil, err |
| 1092 | } |
| 1093 | |
| 1094 | return dependenciesMap, nil |
| 1095 | } |
| 1096 | |
| 1097 | // getMaterializedViews gets all materialized views of a database. |
| 1098 | func getMaterializedViews(txn *sql.Tx, schemaName string, _ map[db.TableKey][]*storepb.ColumnMetadata) ([]*storepb.MaterializedViewMetadata, error) { |
no test coverage detected