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

Function getResourcesForPostgres

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

Source from the content-addressed store, hash-verified

155}
156
157func getResourcesForPostgres(
158 ctx context.Context,
159 storeInstance *store.Store,
160 engine storepb.Engine,
161 databaseName string,
162 statement string,
163 instance *store.InstanceMessage,
164 defaultSchema string,
165 getDatabaseMetadataFunc base.GetDatabaseMetadataFunc,
166 listDatabaseNamesFunc base.ListDatabaseNamesFunc,
167 getLinkedDatabaseMetadataFunc base.GetLinkedDatabaseMetadataFunc,
168) ([]base.SchemaResource, error) {
169 statements, err := base.SplitMultiSQL(engine, statement)
170 if err != nil {
171 return nil, err
172 }
173 spans, err := base.GetQuerySpan(ctx, base.GetQuerySpanContext{
174 InstanceID: instance.ResourceID,
175 GetDatabaseMetadataFunc: getDatabaseMetadataFunc,
176 ListDatabaseNamesFunc: listDatabaseNamesFunc,
177 GetLinkedDatabaseMetadataFunc: getLinkedDatabaseMetadataFunc,
178 }, engine, statements, databaseName, defaultSchema, !store.IsObjectCaseSensitive(instance))
179 if err != nil {
180 return nil, err
181 }
182
183 database, err := storeInstance.GetDatabase(ctx, &store.FindDatabaseMessage{
184 Workspace: instance.Workspace,
185 InstanceID: &instance.ResourceID,
186 DatabaseName: &databaseName,
187 })
188 if err != nil {
189 return nil, connect.NewError(connect.CodeInternal, errors.Wrap(err, "failed to fetch database"))
190 }
191 if database == nil {
192 return nil, nil
193 }
194
195 dbMetadata, err := storeInstance.GetDBSchema(ctx, &store.FindDBSchemaMessage{
196 Workspace: instance.Workspace,
197 InstanceID: database.InstanceID,
198 DatabaseName: database.DatabaseName,
199 })
200 if err != nil {
201 return nil, connect.NewError(connect.CodeInternal, errors.Wrap(err, "failed to fetch database schema"))
202 }
203
204 var result []base.SchemaResource
205 for _, span := range spans {
206 for sourceColumn := range span.SourceColumns {
207 sr := base.SchemaResource{
208 Database: sourceColumn.Database,
209 Schema: sourceColumn.Schema,
210 Table: sourceColumn.Table,
211 LinkedServer: sourceColumn.Server,
212 }
213
214 if sourceColumn.Database != dbMetadata.GetProto().Name {

Callers 4

GetResourcesFunction · 0.85
getResourcesForOracleFunction · 0.85
getResourcesForSnowflakeFunction · 0.85
getResourcesForMSSQLFunction · 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