SyncInstance syncs the instance.
(ctx context.Context)
| 59 | |
| 60 | // SyncInstance syncs the instance. |
| 61 | func (d *Driver) SyncInstance(ctx context.Context) (*db.InstanceMetadata, error) { |
| 62 | version, _, err := d.getVersion(ctx) |
| 63 | if err != nil { |
| 64 | return nil, err |
| 65 | } |
| 66 | |
| 67 | var lowerCaseTableNames int32 |
| 68 | lowerCaseTableNamesText, err := d.getServerVariable(ctx, "lower_case_table_names") |
| 69 | if err != nil { |
| 70 | slog.Debug("failed to get lower_case_table_names variable", log.BBError(err)) |
| 71 | } else { |
| 72 | v, err := strconv.ParseInt(lowerCaseTableNamesText, 10, 32) |
| 73 | if err != nil { |
| 74 | slog.Debug("failed to parse lower_case_table_names variable", log.BBError(err)) |
| 75 | } else { |
| 76 | lowerCaseTableNames = int32(v) |
| 77 | } |
| 78 | } |
| 79 | |
| 80 | instanceRoles := d.getInstanceRoles(ctx) |
| 81 | |
| 82 | // Query db info |
| 83 | where := fmt.Sprintf("LOWER(SCHEMA_NAME) NOT IN (%s)", systemDatabaseClause) |
| 84 | query := ` |
| 85 | SELECT |
| 86 | SCHEMA_NAME, |
| 87 | DEFAULT_CHARACTER_SET_NAME, |
| 88 | DEFAULT_COLLATION_NAME |
| 89 | FROM information_schema.SCHEMATA |
| 90 | WHERE ` + where |
| 91 | rows, err := d.db.QueryContext(ctx, query) |
| 92 | if err != nil { |
| 93 | return nil, util.FormatErrorWithQuery(err, query) |
| 94 | } |
| 95 | defer rows.Close() |
| 96 | |
| 97 | var databases []*storepb.DatabaseSchemaMetadata |
| 98 | for rows.Next() { |
| 99 | database := &storepb.DatabaseSchemaMetadata{} |
| 100 | if err := rows.Scan( |
| 101 | &database.Name, |
| 102 | &database.CharacterSet, |
| 103 | &database.Collation, |
| 104 | ); err != nil { |
| 105 | return nil, err |
| 106 | } |
| 107 | databases = append(databases, database) |
| 108 | } |
| 109 | if err := rows.Err(); err != nil { |
| 110 | return nil, err |
| 111 | } |
| 112 | |
| 113 | return &db.InstanceMetadata{ |
| 114 | Version: version, |
| 115 | Databases: databases, |
| 116 | Metadata: &storepb.Instance{ |
| 117 | MysqlLowerCaseTableNames: lowerCaseTableNames, |
| 118 | Roles: instanceRoles, |
nothing calls this directly
no test coverage detected