MCPcopy Create free account
hub / github.com/Permify/permify / ReadSchema

Method ReadSchema

internal/storage/postgres/schema_reader.go:37–79  ·  view source on GitHub ↗

ReadSchema returns the schema definition for a specific tenant and version as a structured object.

(ctx context.Context, tenantID, version string)

Source from the content-addressed store, hash-verified

35
36// ReadSchema returns the schema definition for a specific tenant and version as a structured object.
37func (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.
82func (r *SchemaReader) ReadSchemaString(ctx context.Context, tenantID, version string) (definitions []string, err error) {

Callers

nothing calls this directly

Implementers 7

NoopSchemaReaderinternal/storage/storage.go
SchemaReaderinternal/storage/proxies/cache/schema_
SchemaReaderinternal/storage/proxies/circuitbreake
SchemaReaderinternal/storage/proxies/singleflight/
SchemaReaderinternal/storage/postgres/schema_reade
SchemaReaderinternal/storage/memory/schema_reader.
mockSchemaReaderinternal/engines/lookup_test.go

Calls 6

SerializedMethod · 0.95
HandleErrorFunction · 0.92
StartMethod · 0.80
CloseMethod · 0.65
ScanMethod · 0.45

Tested by

no test coverage detected