(ctx context.Context, getDatabaseMetadataFunc base.GetDatabaseMetadataFunc, listDatabaseNamesFunc base.ListDatabaseNamesFunc, isCaseSensitive bool, instanceID string, table *TableReference)
| 634 | } |
| 635 | |
| 636 | func classifyColumns(ctx context.Context, getDatabaseMetadataFunc base.GetDatabaseMetadataFunc, listDatabaseNamesFunc base.ListDatabaseNamesFunc, isCaseSensitive bool, instanceID string, table *TableReference) ([]string, []string, error) { |
| 637 | if getDatabaseMetadataFunc == nil { |
| 638 | return nil, nil, errors.New("GetDatabaseMetadataFunc is not set") |
| 639 | } |
| 640 | |
| 641 | var dbMetadata *model.DatabaseMetadata |
| 642 | allDatabaseNames, err := listDatabaseNamesFunc(ctx, instanceID) |
| 643 | if err != nil { |
| 644 | return nil, nil, errors.Wrap(err, "failed to list databases names") |
| 645 | } |
| 646 | if !isCaseSensitive { |
| 647 | for _, db := range allDatabaseNames { |
| 648 | if strings.EqualFold(db, table.Database) { |
| 649 | _, dbMetadata, err = getDatabaseMetadataFunc(ctx, instanceID, db) |
| 650 | if err != nil { |
| 651 | return nil, nil, errors.Wrapf(err, "failed to get database metadata for database %q", db) |
| 652 | } |
| 653 | break |
| 654 | } |
| 655 | } |
| 656 | } else { |
| 657 | for _, db := range allDatabaseNames { |
| 658 | if db == table.Database { |
| 659 | _, dbMetadata, err = getDatabaseMetadataFunc(ctx, instanceID, db) |
| 660 | if err != nil { |
| 661 | return nil, nil, errors.Wrapf(err, "failed to get database metadata for database %q", db) |
| 662 | } |
| 663 | break |
| 664 | } |
| 665 | } |
| 666 | } |
| 667 | if dbMetadata == nil { |
| 668 | slog.Debug("failed to get database metadata", slog.String("instanceID", instanceID), slog.String("database", table.Database)) |
| 669 | return nil, nil, errors.Errorf("failed to get database metadata for InstanceID %q, Database %q", instanceID, table.Database) |
| 670 | } |
| 671 | |
| 672 | schema := dbMetadata.GetSchemaMetadata("") |
| 673 | if schema == nil { |
| 674 | return nil, nil, errors.New("failed to get schema metadata") |
| 675 | } |
| 676 | |
| 677 | var tableSchema *model.TableMetadata |
| 678 | if !isCaseSensitive { |
| 679 | for _, tableName := range schema.ListTableNames() { |
| 680 | if strings.EqualFold(tableName, table.Table) { |
| 681 | tableSchema = schema.GetTable(tableName) |
| 682 | break |
| 683 | } |
| 684 | } |
| 685 | } else { |
| 686 | tableSchema = schema.GetTable(table.Table) |
| 687 | } |
| 688 | if tableSchema == nil { |
| 689 | return nil, nil, errors.Errorf("table %s not found in schema", table.Table) |
| 690 | } |
| 691 | |
| 692 | var generatedColumns, normalColumns []string |
| 693 | for _, column := range tableSchema.GetProto().GetColumns() { |
no test coverage detected