ReadSchema returns the schema definition for a specific tenant and version as a structured object.
(ctx context.Context, tenantID, version string)
| 35 | |
| 36 | // ReadSchema returns the schema definition for a specific tenant and version as a structured object. |
| 37 | func (r *SchemaReader) ReadSchema(ctx context.Context, tenantID, version string) (sch *base.SchemaDefinition, err error) { |
| 38 | ctx, span := internal.Tracer.Start(ctx, "schema-reader.read-schema") |
| 39 | defer span.End() |
| 40 | slog.DebugContext(ctx, "reading schema", slog.Any("tenant_id", tenantID), slog.Any("version", version)) |
| 41 | builder := r.database.Builder.Select("name, serialized_definition, version").From(SchemaDefinitionTable).Where(squirrel.Eq{"version": version, "tenant_id": tenantID}) |
| 42 | |
| 43 | var query string |
| 44 | var args []interface{} |
| 45 | |
| 46 | query, args, err = builder.ToSql() |
| 47 | if err != nil { |
| 48 | return nil, utils.HandleError(ctx, span, err, base.ErrorCode_ERROR_CODE_SQL_BUILDER) |
| 49 | } |
| 50 | |
| 51 | slog.DebugContext(ctx, "executing sql query", slog.Any("query", query), slog.Any("arguments", args)) |
| 52 | var rows pgx.Rows |
| 53 | rows, err = r.database.ReadPool.Query(ctx, query, args...) |
| 54 | if err != nil { |
| 55 | return nil, utils.HandleError(ctx, span, err, base.ErrorCode_ERROR_CODE_EXECUTION) |
| 56 | } |
| 57 | defer rows.Close() |
| 58 | |
| 59 | var definitions []string |
| 60 | for rows.Next() { |
| 61 | sd := storage.SchemaDefinition{} |
| 62 | err = rows.Scan(&sd.Name, &sd.SerializedDefinition, &sd.Version) |
| 63 | if err != nil { |
| 64 | return nil, utils.HandleError(ctx, span, err, base.ErrorCode_ERROR_CODE_SCAN) |
| 65 | } |
| 66 | definitions = append(definitions, sd.Serialized()) |
| 67 | } |
| 68 | if err = rows.Err(); err != nil { |
| 69 | return nil, utils.HandleError(ctx, span, err, base.ErrorCode_ERROR_CODE_SCAN) |
| 70 | } |
| 71 | |
| 72 | slog.DebugContext(ctx, "successfully retrieved", slog.Any("schema definitions", len(definitions))) |
| 73 | sch, err = schema.NewSchemaFromStringDefinitions(false, definitions...) // parse schema |
| 74 | if err != nil { |
| 75 | return nil, utils.HandleError(ctx, span, err, base.ErrorCode_ERROR_CODE_INTERNAL) |
| 76 | } |
| 77 | |
| 78 | return sch, err |
| 79 | } |
| 80 | |
| 81 | // ReadSchemaString returns the schema definition for a specific tenant and version as a string. |
| 82 | func (r *SchemaReader) ReadSchemaString(ctx context.Context, tenantID, version string) (definitions []string, err error) { |
nothing calls this directly
no test coverage detected