MCPcopy Create free account
hub / github.com/bytebase/bytebase / getResourcesForMySQL

Function getResourcesForMySQL

backend/component/export/resources.go:51–155  ·  view source on GitHub ↗
(
	ctx context.Context,
	storeInstance *store.Store,
	engine storepb.Engine,
	databaseName string,
	statement string,
	instance *store.InstanceMessage,
	getDatabaseMetadataFunc base.GetDatabaseMetadataFunc,
	listDatabaseNamesFunc base.ListDatabaseNamesFunc,
	getLinkedDatabaseMetadataFunc base.GetLinkedDatabaseMetadataFunc,
)

Source from the content-addressed store, hash-verified

49}
50
51func getResourcesForMySQL(
52 ctx context.Context,
53 storeInstance *store.Store,
54 engine storepb.Engine,
55 databaseName string,
56 statement string,
57 instance *store.InstanceMessage,
58 getDatabaseMetadataFunc base.GetDatabaseMetadataFunc,
59 listDatabaseNamesFunc base.ListDatabaseNamesFunc,
60 getLinkedDatabaseMetadataFunc base.GetLinkedDatabaseMetadataFunc,
61) ([]base.SchemaResource, error) {
62 statements, err := base.SplitMultiSQL(engine, statement)
63 if err != nil {
64 return nil, err
65 }
66 spans, err := base.GetQuerySpan(ctx, base.GetQuerySpanContext{
67 InstanceID: instance.ResourceID,
68 GetDatabaseMetadataFunc: getDatabaseMetadataFunc,
69 ListDatabaseNamesFunc: listDatabaseNamesFunc,
70 GetLinkedDatabaseMetadataFunc: getLinkedDatabaseMetadataFunc,
71 }, engine, statements, databaseName, "", !store.IsObjectCaseSensitive(instance))
72 if err != nil {
73 return nil, err
74 } else if databaseName == "" {
75 var list []base.SchemaResource
76 for _, span := range spans {
77 for sourceColumn := range span.SourceColumns {
78 list = append(list, base.SchemaResource{
79 Database: sourceColumn.Database,
80 Schema: sourceColumn.Schema,
81 Table: sourceColumn.Table,
82 LinkedServer: sourceColumn.Server,
83 })
84 }
85 }
86 return list, nil
87 }
88
89 database, err := storeInstance.GetDatabase(ctx, &store.FindDatabaseMessage{
90 Workspace: instance.Workspace,
91 InstanceID: &instance.ResourceID,
92 DatabaseName: &databaseName,
93 })
94 if err != nil {
95 if httpErr, ok := err.(*echo.HTTPError); ok && httpErr.StatusCode() == echo.ErrNotFound.StatusCode() {
96 return nil, nil
97 }
98 return nil, connect.NewError(connect.CodeInternal, errors.Wrap(err, "failed to fetch database"))
99 }
100 if database == nil {
101 return nil, nil
102 }
103
104 dbMetadata, err := storeInstance.GetDBSchema(ctx, &store.FindDBSchemaMessage{
105 Workspace: instance.Workspace,
106 InstanceID: database.InstanceID,
107 DatabaseName: database.DatabaseName,
108 })

Callers 1

GetResourcesFunction · 0.85

Calls 7

SplitMultiSQLFunction · 0.92
GetQuerySpanFunction · 0.92
IsObjectCaseSensitiveFunction · 0.92
resourceExistsFunction · 0.85
GetDBSchemaMethod · 0.80
GetDatabaseMethod · 0.65
GetProtoMethod · 0.45

Tested by

no test coverage detected