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

Method ReadRuleDefinition

internal/storage/postgres/schema_reader.go:157–191  ·  view source on GitHub ↗

ReadRuleDefinition - Reads rule config from the repository.

(ctx context.Context, tenantID, name, version string)

Source from the content-addressed store, hash-verified

155
156// ReadRuleDefinition - Reads rule config from the repository.
157func (r *SchemaReader) ReadRuleDefinition(ctx context.Context, tenantID, name, version string) (definition *base.RuleDefinition, v string, err error) {
158 ctx, span := internal.Tracer.Start(ctx, "schema-reader.read-rule-definition")
159 defer span.End() // close span
160 slog.DebugContext(ctx, "reading rule definition", slog.Any("tenant_id", tenantID), slog.Any("name", name), slog.Any("version", version))
161 builder := r.database.Builder.Select("name, serialized_definition, version").Where(squirrel.Eq{"name": name, "version": version, "tenant_id": tenantID}).From(SchemaDefinitionTable).Limit(1)
162
163 var query string
164 var args []interface{}
165
166 query, args, err = builder.ToSql()
167 if err != nil {
168 return nil, "", utils.HandleError(ctx, span, err, base.ErrorCode_ERROR_CODE_SQL_BUILDER)
169 }
170
171 slog.DebugContext(ctx, "executing sql query", slog.Any("query", query), slog.Any("arguments", args))
172 var def storage.SchemaDefinition
173 row := r.database.ReadPool.QueryRow(ctx, query, args...) // Execute query
174 if err = row.Scan(&def.Name, &def.SerializedDefinition, &def.Version); err != nil {
175 if errors.Is(err, pgx.ErrNoRows) {
176 return nil, "", utils.HandleError(ctx, span, err, base.ErrorCode_ERROR_CODE_SCHEMA_NOT_FOUND)
177 }
178 return nil, "", utils.HandleError(ctx, span, err, base.ErrorCode_ERROR_CODE_SCAN)
179 }
180
181 slog.DebugContext(ctx, "successfully retrieved rule definition for", slog.Any("name", name))
182 var sch *base.SchemaDefinition
183 sch, err = schema.NewSchemaFromStringDefinitions(false, def.Serialized())
184 if err != nil {
185 return nil, "", utils.HandleError(ctx, span, err, base.ErrorCode_ERROR_CODE_INTERNAL)
186 }
187
188 definition, err = schema.GetRuleByName(sch, name)
189 slog.DebugContext(ctx, "successfully created rule definition")
190 return definition, def.Version, err // Return result
191}
192
193// HeadVersion - Finds the latest version of the schema.
194func (r *SchemaReader) HeadVersion(ctx context.Context, tenantID string) (version 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 7

SerializedMethod · 0.95
HandleErrorFunction · 0.92
GetRuleByNameFunction · 0.92
StartMethod · 0.80
LimitMethod · 0.45
ScanMethod · 0.45

Tested by

no test coverage detected