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

Function getResourcesForRedshift

backend/component/export/resources.go:229–299  ·  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

227}
228
229func getResourcesForRedshift(
230 ctx context.Context,
231 storeInstance *store.Store,
232 engine storepb.Engine,
233 databaseName string,
234 statement string,
235 instance *store.InstanceMessage,
236 defaultSchema string,
237 getDatabaseMetadataFunc base.GetDatabaseMetadataFunc,
238 listDatabaseNamesFunc base.ListDatabaseNamesFunc,
239 getLinkedDatabaseMetadataFunc base.GetLinkedDatabaseMetadataFunc,
240) ([]base.SchemaResource, error) {
241 statements, err := base.SplitMultiSQL(engine, statement)
242 if err != nil {
243 return nil, err
244 }
245 spans, err := base.GetQuerySpan(ctx, base.GetQuerySpanContext{
246 InstanceID: instance.ResourceID,
247 GetDatabaseMetadataFunc: getDatabaseMetadataFunc,
248 ListDatabaseNamesFunc: listDatabaseNamesFunc,
249 GetLinkedDatabaseMetadataFunc: getLinkedDatabaseMetadataFunc,
250 }, engine, statements, databaseName, defaultSchema, !store.IsObjectCaseSensitive(instance))
251 if err != nil {
252 return nil, err
253 }
254
255 database, err := storeInstance.GetDatabase(ctx, &store.FindDatabaseMessage{
256 Workspace: instance.Workspace,
257 InstanceID: &instance.ResourceID,
258 DatabaseName: &databaseName,
259 })
260 if err != nil {
261 return nil, connect.NewError(connect.CodeInternal, errors.Wrap(err, "failed to fetch database"))
262 }
263 if database == nil {
264 return nil, nil
265 }
266
267 dbMetadata, err := storeInstance.GetDBSchema(ctx, &store.FindDBSchemaMessage{
268 Workspace: instance.Workspace,
269 InstanceID: database.InstanceID,
270 DatabaseName: database.DatabaseName,
271 })
272 if err != nil {
273 return nil, connect.NewError(connect.CodeInternal, errors.Wrap(err, "failed to fetch database schema"))
274 }
275
276 var result []base.SchemaResource
277 for _, span := range spans {
278 for sourceColumn := range span.SourceColumns {
279 sr := base.SchemaResource{
280 Database: sourceColumn.Database,
281 Schema: sourceColumn.Schema,
282 Table: sourceColumn.Table,
283 LinkedServer: sourceColumn.Server,
284 }
285
286 if sourceColumn.Database != dbMetadata.GetProto().Name {

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