MCPcopy Index your code
hub / github.com/bytebase/bytebase / getViews

Function getViews

backend/plugin/db/oracle/sync.go:952–1015  ·  view source on GitHub ↗

getViews gets all views of a database.

(txn *sql.Tx, schemaName string, columnMap map[db.TableKey][]*storepb.ColumnMetadata, triggerMap map[db.TableKey][]*storepb.TriggerMetadata)

Source from the content-addressed store, hash-verified

950
951// getViews gets all views of a database.
952func getViews(txn *sql.Tx, schemaName string, columnMap map[db.TableKey][]*storepb.ColumnMetadata, triggerMap map[db.TableKey][]*storepb.TriggerMetadata) (map[string][]*storepb.ViewMetadata, error) {
953 viewMap := make(map[string][]*storepb.ViewMetadata)
954
955 // Get view comments
956 viewCommentMap, err := getViewComments(txn, schemaName)
957 if err != nil {
958 return nil, errors.Wrapf(err, "failed to get view comments")
959 }
960
961 query := fmt.Sprintf(`
962 SELECT OWNER, VIEW_NAME, TEXT
963 FROM sys.all_views
964 WHERE OWNER = '%s'
965 ORDER BY view_name
966 `, schemaName)
967
968 slog.Debug("running get view query")
969 rows, err := txn.Query(query)
970 if err != nil {
971 return nil, util.FormatErrorWithQuery(err, query)
972 }
973 defer rows.Close()
974 for rows.Next() {
975 view := &storepb.ViewMetadata{}
976 var schemaName string
977 if err := rows.Scan(&schemaName, &view.Name, &view.Definition); err != nil {
978 return nil, err
979 }
980 // Oracle may include a trailing C-string null terminator via the go-ora driver.
981 view.Definition = strings.TrimRight(view.Definition, "\x00")
982 key := db.TableKey{Schema: schemaName, Table: view.Name}
983 view.Columns = columnMap[key]
984 view.Triggers = triggerMap[key]
985 if comment, ok := viewCommentMap[key]; ok {
986 view.Comment = comment
987 }
988
989 viewMap[schemaName] = append(viewMap[schemaName], view)
990 }
991 if err := rows.Err(); err != nil {
992 return nil, util.FormatErrorWithQuery(err, query)
993 }
994 if err := rows.Close(); err != nil {
995 return nil, errors.Wrapf(err, "failed to close rows")
996 }
997
998 // Fetch all view dependencies in a single query to avoid N+1 problem
999 viewDependenciesMap, err := getAllViewDependencies(txn, schemaName)
1000 if err != nil {
1001 return nil, errors.Wrapf(err, "failed to get view dependencies")
1002 }
1003
1004 // Populate view dependencies from the map
1005 for schemaName, list := range viewMap {
1006 for _, view := range list {
1007 key := db.TableKey{Schema: schemaName, Table: view.Name}
1008 if dependencies, ok := viewDependenciesMap[key]; ok {
1009 view.DependencyColumns = dependencies

Callers 1

SyncDBSchemaMethod · 0.70

Calls 8

FormatErrorWithQueryFunction · 0.92
getViewCommentsFunction · 0.85
getAllViewDependenciesFunction · 0.85
DebugMethod · 0.80
ScanMethod · 0.80
QueryMethod · 0.65
CloseMethod · 0.65
NextMethod · 0.45

Tested by

no test coverage detected