( 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, )
| 227 | } |
| 228 | |
| 229 | func 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 { |
no test coverage detected