Skip to content

Commit 7519ee2

Browse files
authored
Fixes for schema v2 conversion (#2777)
1 parent e8edf7e commit 7519ee2

File tree

4 files changed

+1851
-1
lines changed

4 files changed

+1851
-1
lines changed

pkg/schema/v2/tocorev1.go

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66

77
core "github.com/authzed/spicedb/pkg/proto/core/v1"
8+
"github.com/authzed/spicedb/pkg/schemadsl/compiler"
89
)
910

1011
// ToDefinitions converts a Schema to the full set of namespace and caveat definitions.
@@ -61,8 +62,17 @@ func defToRelations(def *Definition) ([]*core.Relation, error) {
6162

6263
// Convert relations
6364
for _, rel := range def.relations {
65+
// Ensure metadata has RelationKind set to RELATION
66+
relMetadata := rel.metadata
67+
if relMetadata == nil {
68+
relMetadata = NewMetadata()
69+
}
70+
if relMetadata.RelationKind() == RelationKindUnknown {
71+
relMetadata = relMetadata.WithRelationKind(RelationKindRelation)
72+
}
73+
6474
// Encode metadata
65-
metadata, err := encodeMetadata(rel.metadata)
75+
metadata, err := encodeMetadata(relMetadata)
6676
if err != nil {
6777
return nil, fmt.Errorf("failed to encode relation metadata for %s: %w", rel.name, err)
6878
}
@@ -81,9 +91,17 @@ func defToRelations(def *Definition) ([]*core.Relation, error) {
8191
return nil, fmt.Errorf("failed to convert permission %s: %w", perm.name, err)
8292
}
8393

94+
// Create metadata marking this as a permission
95+
permMetadata := NewMetadata().WithRelationKind(RelationKindPermission)
96+
encodedMetadata, err := encodeMetadata(permMetadata)
97+
if err != nil {
98+
return nil, fmt.Errorf("failed to encode permission metadata for %s: %w", perm.name, err)
99+
}
100+
84101
relations = append(relations, &core.Relation{
85102
Name: perm.name,
86103
UsersetRewrite: rewrite,
104+
Metadata: encodedMetadata,
87105
})
88106
}
89107

@@ -460,3 +478,27 @@ func functionTypeToCore(ft FunctionType) core.FunctionedTupleToUserset_Function
460478
return core.FunctionedTupleToUserset_FUNCTION_ANY
461479
}
462480
}
481+
482+
// AsCompiledSchema converts a Schema to a CompiledSchema by calling ToDefinitions
483+
// and creating a compiled schema structure.
484+
func (s *Schema) AsCompiledSchema() (*compiler.CompiledSchema, error) {
485+
namespaces, caveats, err := s.ToDefinitions()
486+
if err != nil {
487+
return nil, err
488+
}
489+
490+
// Build ordered definitions by combining namespaces and caveats
491+
orderedDefinitions := make([]compiler.SchemaDefinition, 0, len(namespaces)+len(caveats))
492+
for _, ns := range namespaces {
493+
orderedDefinitions = append(orderedDefinitions, ns)
494+
}
495+
for _, caveat := range caveats {
496+
orderedDefinitions = append(orderedDefinitions, caveat)
497+
}
498+
499+
return &compiler.CompiledSchema{
500+
ObjectDefinitions: namespaces,
501+
CaveatDefinitions: caveats,
502+
OrderedDefinitions: orderedDefinitions,
503+
}, nil
504+
}

0 commit comments

Comments
 (0)