Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: sourcenetwork/defradb
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 7a7de1b57a30a891c96d615b1c6813e6ff1d5874
Choose a base ref
..
head repository: sourcenetwork/defradb
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 571cbc958e4b8a5923347c4f9f59c3a9a0773445
Choose a head ref
2 changes: 1 addition & 1 deletion internal/request/graphql/schema/collection.go
Original file line number Diff line number Diff line change
@@ -482,7 +482,7 @@ func setCRDTType(field *ast.FieldDefinition, kind client.FieldKind) (client.CTyp
switch arg.Name.Value {
case "type":
cTypeString := arg.Value.GetValue().(string)
cType, validCRDTEnum := types.CRDTEnum.ParseValue(cTypeString).(client.CType)
cType, validCRDTEnum := types.CRDTEnum().ParseValue(cTypeString).(client.CType)
if !validCRDTEnum {
return 0, client.NewErrInvalidCRDTType(field.Name.Value, cTypeString)
}
4 changes: 2 additions & 2 deletions internal/request/graphql/schema/descriptions.go
Original file line number Diff line number Diff line change
@@ -33,8 +33,8 @@ var (
client.FieldKind_NILLABLE_STRING: gql.String,
client.FieldKind_STRING_ARRAY: gql.NewList(gql.NewNonNull(gql.String)),
client.FieldKind_NILLABLE_STRING_ARRAY: gql.NewList(gql.String),
client.FieldKind_NILLABLE_BLOB: schemaTypes.BlobScalarType,
client.FieldKind_NILLABLE_JSON: schemaTypes.JSONScalarType,
client.FieldKind_NILLABLE_BLOB: schemaTypes.BlobScalarType(),
client.FieldKind_NILLABLE_JSON: schemaTypes.JSONScalarType(),
}

defaultCRDTForFieldKind = map[client.FieldKind]client.CType{
12 changes: 7 additions & 5 deletions internal/request/graphql/schema/generate.go
Original file line number Diff line number Diff line change
@@ -179,7 +179,7 @@ func (g *Generator) generate(ctx context.Context, collections []client.Collectio
}
}

appendCommitChildGroupField()
g.appendCommitChildGroupField()

// resolve types
if err := g.manager.ResolveTypes(); err != nil {
@@ -500,7 +500,7 @@ func (g *Generator) buildTypes(
// add _version field
fields[request.VersionFieldName] = &gql.Field{
Description: versionFieldDescription,
Type: gql.NewList(schemaTypes.CommitObject),
Type: gql.NewList(g.manager.schema.TypeMap()[request.CommitTypeName]),
}

// add _deleted field
@@ -987,11 +987,13 @@ func (g *Generator) genNumericAggregateBaseArgInputs(obj *gql.Object) *gql.Input
})
}

func appendCommitChildGroupField() {
schemaTypes.CommitObject.Fields()[request.GroupFieldName] = &gql.FieldDefinition{
func (g *Generator) appendCommitChildGroupField() {
commitObject := g.manager.schema.TypeMap()[request.CommitTypeName]

commitObject.(*gql.Object).Fields()[request.GroupFieldName] = &gql.FieldDefinition{
Name: request.GroupFieldName,
Description: groupFieldDescription,
Type: gql.NewList(schemaTypes.CommitObject),
Type: gql.NewList(commitObject),
}
}

100 changes: 65 additions & 35 deletions internal/request/graphql/schema/manager.go
Original file line number Diff line number Diff line change
@@ -27,11 +27,27 @@ type SchemaManager struct {
// with a new default type map
func NewSchemaManager() (*SchemaManager, error) {
sm := &SchemaManager{}

orderEnum := schemaTypes.OrderingEnum()
crdtEnum := schemaTypes.CRDTEnum()
explainEnum := schemaTypes.ExplainEnum()

commitLinkObject := schemaTypes.CommitLinkObject()
commitObject := schemaTypes.CommitObject(commitLinkObject)
commitsOrderArg := schemaTypes.CommitsOrderArg(orderEnum)

schema, err := gql.NewSchema(gql.SchemaConfig{
Types: defaultTypes(),
Query: defaultQueryType(),
Types: defaultTypes(
commitObject,
commitLinkObject,
commitsOrderArg,
orderEnum,
crdtEnum,
explainEnum,
),
Query: defaultQueryType(commitObject, commitsOrderArg),
Mutation: defaultMutationType(),
Directives: defaultDirectivesType(),
Directives: defaultDirectivesType(crdtEnum, explainEnum, orderEnum),
})
if err != nil {
return sm, err
@@ -80,7 +96,10 @@ func (s *SchemaManager) ResolveTypes() error {
}

// @todo: Use a better default Query type
func defaultQueryType() *gql.Object {
func defaultQueryType(commitObject *gql.Object, commitsOrderArg *gql.InputObject) *gql.Object {
queryCommits := schemaTypes.QueryCommits(commitObject, commitsOrderArg)
queryLatestCommits := schemaTypes.QueryLatestCommits(commitObject)

return gql.NewObject(gql.ObjectConfig{
Name: "Query",
Fields: gql.Fields{
@@ -90,8 +109,8 @@ func defaultQueryType() *gql.Object {
},

// database API queries
schemaTypes.QueryCommits.Name: schemaTypes.QueryCommits,
schemaTypes.QueryLatestCommits.Name: schemaTypes.QueryLatestCommits,
queryCommits.Name: queryCommits,
queryLatestCommits.Name: queryLatestCommits,
},
})
}
@@ -109,15 +128,19 @@ func defaultMutationType() *gql.Object {
}

// default directives type.
func defaultDirectivesType() []*gql.Directive {
func defaultDirectivesType(
crdtEnum *gql.Enum,
explainEnum *gql.Enum,
orderEnum *gql.Enum,
) []*gql.Directive {
return []*gql.Directive{
schemaTypes.CRDTFieldDirective,
schemaTypes.ExplainDirective,
schemaTypes.PolicyDirective,
schemaTypes.IndexDirective,
schemaTypes.IndexFieldDirective,
schemaTypes.PrimaryDirective,
schemaTypes.RelationDirective,
schemaTypes.CRDTFieldDirective(crdtEnum),
schemaTypes.ExplainDirective(explainEnum),
schemaTypes.PolicyDirective(),
schemaTypes.IndexDirective(orderEnum),
schemaTypes.IndexFieldDirective(orderEnum),
schemaTypes.PrimaryDirective(),
schemaTypes.RelationDirective(),
}
}

@@ -135,7 +158,14 @@ func inlineArrayTypes() []gql.Type {
}

// default type map includes all the native scalar types
func defaultTypes() []gql.Type {
func defaultTypes(
commitObject *gql.Object,
commitLinkObject *gql.Object,
commitsOrderArg *gql.InputObject,
orderEnum *gql.Enum,
crdtEnum *gql.Enum,
explainEnum *gql.Enum,
) []gql.Type {
return []gql.Type{
// Base Scalar types
gql.Boolean,
@@ -146,31 +176,31 @@ func defaultTypes() []gql.Type {
gql.String,

// Custom Scalar types
schemaTypes.BlobScalarType,
schemaTypes.JSONScalarType,
schemaTypes.BlobScalarType(),
schemaTypes.JSONScalarType(),

// Base Query types

// Sort/Order enum
schemaTypes.OrderingEnum,
orderEnum,

// Filter scalar blocks
schemaTypes.BooleanOperatorBlock,
schemaTypes.NotNullBooleanOperatorBlock,
schemaTypes.DateTimeOperatorBlock,
schemaTypes.FloatOperatorBlock,
schemaTypes.NotNullFloatOperatorBlock,
schemaTypes.IdOperatorBlock,
schemaTypes.IntOperatorBlock,
schemaTypes.NotNullIntOperatorBlock,
schemaTypes.StringOperatorBlock,
schemaTypes.NotNullstringOperatorBlock,

schemaTypes.CommitsOrderArg,
schemaTypes.CommitLinkObject,
schemaTypes.CommitObject,

schemaTypes.CRDTEnum,
schemaTypes.ExplainEnum,
schemaTypes.BooleanOperatorBlock(),
schemaTypes.NotNullBooleanOperatorBlock(),
schemaTypes.DateTimeOperatorBlock(),
schemaTypes.FloatOperatorBlock(),
schemaTypes.NotNullFloatOperatorBlock(),
schemaTypes.IdOperatorBlock(),
schemaTypes.IntOperatorBlock(),
schemaTypes.NotNullIntOperatorBlock(),
schemaTypes.StringOperatorBlock(),
schemaTypes.NotNullstringOperatorBlock(),

commitsOrderArg,
commitLinkObject,
commitObject,

crdtEnum,
explainEnum,
}
}
11 changes: 0 additions & 11 deletions internal/request/graphql/schema/manager_test.go
Original file line number Diff line number Diff line change
@@ -21,17 +21,6 @@ func Test_SchemaManager_NewNoErrs(t *testing.T) {
assert.NoError(t, err, "NewSchemaManager returned an error")
}

func Test_SchemaManager_HasDefaultTypes(t *testing.T) {
s, err := NewSchemaManager()
assert.NoError(t, err, "NewSchemaManager returned an error")

tm := s.schema.TypeMap()
for _, ty := range defaultTypes() {
_, ok := tm[ty.Name()]
assert.True(t, ok, "TypeMap missing default type %s", ty.Name())
}
}

func Test_SchemaManager_ResolveTypes(t *testing.T) {
s, _ := NewSchemaManager()
err := s.ResolveTypes()
Loading