SyncInstance syncs the instance.
(ctx context.Context)
| 26 | |
| 27 | // SyncInstance syncs the instance. |
| 28 | func (d *Driver) SyncInstance(ctx context.Context) (*db.InstanceMetadata, error) { |
| 29 | var fullVersion string |
| 30 | queryVersion := "SELECT BANNER FROM v$version WHERE banner LIKE 'Oracle%'" |
| 31 | if err := d.db.QueryRowContext(ctx, queryVersion).Scan(&fullVersion); err != nil { |
| 32 | return nil, util.FormatErrorWithQuery(err, queryVersion) |
| 33 | } |
| 34 | tokens := strings.Fields(fullVersion) |
| 35 | var version, canonicalVersion string |
| 36 | for _, token := range tokens { |
| 37 | if semVersionRegex.MatchString(token) { |
| 38 | version = token |
| 39 | continue |
| 40 | } |
| 41 | if canonicalVersionRegex.MatchString(token) { |
| 42 | canonicalVersion = token |
| 43 | continue |
| 44 | } |
| 45 | } |
| 46 | if canonicalVersion != "" { |
| 47 | version = fmt.Sprintf("%s (%s)", version, canonicalVersion) |
| 48 | } |
| 49 | |
| 50 | txn, err := d.db.BeginTx(ctx, nil) |
| 51 | if err != nil { |
| 52 | return nil, err |
| 53 | } |
| 54 | defer txn.Rollback() |
| 55 | |
| 56 | schemas, err := getSchemas(txn) |
| 57 | if err != nil { |
| 58 | return nil, errors.Wrapf(err, "failed to get schemas from database %q", d.databaseName) |
| 59 | } |
| 60 | var databases []*storepb.DatabaseSchemaMetadata |
| 61 | for _, schema := range schemas { |
| 62 | databases = append(databases, &storepb.DatabaseSchemaMetadata{ |
| 63 | Name: schema, |
| 64 | ServiceName: "", |
| 65 | }) |
| 66 | } |
| 67 | |
| 68 | if err := txn.Commit(); err != nil { |
| 69 | return nil, err |
| 70 | } |
| 71 | |
| 72 | return &db.InstanceMetadata{ |
| 73 | Version: version, |
| 74 | Databases: databases, |
| 75 | }, nil |
| 76 | } |
| 77 | |
| 78 | // SyncDBSchema syncs a single database schema. |
| 79 | func (d *Driver) SyncDBSchema(ctx context.Context) (*storepb.DatabaseSchemaMetadata, error) { |
nothing calls this directly
no test coverage detected