restored nullifyMissingField checks

This commit is contained in:
Gani Georgiev
2024-03-03 00:05:44 +02:00
parent 186d2ed328
commit 4a1736a785
35 changed files with 69 additions and 48 deletions
+19 -5
View File
@@ -514,17 +514,31 @@ func (r *runner) processActiveProps() (*search.ResolverResult, error) {
if field == nil {
parts := viaRegex.FindStringSubmatch(prop)
if len(parts) != 3 {
return nil, fmt.Errorf("field %q is not a valid back relation", prop)
if r.nullifyMisingField {
return &search.ResolverResult{Identifier: "NULL"}, nil
}
return nil, fmt.Errorf("failed to resolve field %q", prop)
}
backCollection, err := r.resolver.loadCollection(parts[1])
if err != nil {
return nil, fmt.Errorf("failed to resolve field %q", prop)
if r.nullifyMisingField {
return &search.ResolverResult{Identifier: "NULL"}, nil
}
return nil, fmt.Errorf("failed to load back relation field %q collection", prop)
}
backField := backCollection.Schema.GetFieldByName(parts[2])
if backField == nil || backField.Type != schema.FieldTypeRelation {
return nil, fmt.Errorf("invalid or missing back relation field %q", parts[2])
if backField == nil {
if r.nullifyMisingField {
return &search.ResolverResult{Identifier: "NULL"}, nil
}
return nil, fmt.Errorf("missing back relation field %q", parts[2])
}
if backField.Type != schema.FieldTypeRelation {
return nil, fmt.Errorf("invalid back relation field %q", parts[2])
}
backField.InitOptions()
backFieldOptions, ok := backField.Options.(*schema.RelationOptions)
if !ok {
@@ -629,7 +643,7 @@ func (r *runner) processActiveProps() (*search.ResolverResult, error) {
relCollection, relErr := r.resolver.loadCollection(options.CollectionId)
if relErr != nil {
return nil, fmt.Errorf("failed to find field %q collection", prop)
return nil, fmt.Errorf("failed to load field %q collection", prop)
}
cleanFieldName := inflector.Columnify(field.Name)
+4 -2
View File
@@ -213,9 +213,9 @@ func TestRecordFieldResolverUpdateQuery(t *testing.T) {
{
"@request.auth fields",
"demo4",
"@request.auth.id > true || @request.auth.username > true || @request.auth.rel.title > true || @request.data.demo > true",
"@request.auth.id > true || @request.auth.username > true || @request.auth.rel.title > true || @request.data.demo < true || @request.auth.missingA.missingB > false",
false,
"SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `users` `__auth_users` ON `__auth_users`.`id`={:TEST} LEFT JOIN `demo2` `__auth_users_rel` ON [[__auth_users_rel.id]] = [[__auth_users.rel]] WHERE ({:TEST} > 1 OR {:TEST} > 1 OR [[__auth_users_rel.title]] > 1 OR NULL > 1)",
"SELECT DISTINCT `demo4`.* FROM `demo4` LEFT JOIN `users` `__auth_users` ON `__auth_users`.`id`={:p0} LEFT JOIN `demo2` `__auth_users_rel` ON [[__auth_users_rel.id]] = [[__auth_users.rel]] WHERE ({:TEST} > 1 OR {:TEST} > 1 OR [[__auth_users_rel.title]] > 1 OR NULL < 1 OR NULL > 0)",
},
{
"@request.* static fields",
@@ -477,6 +477,8 @@ func TestRecordFieldResolverResolveSchemaFields(t *testing.T) {
// @request.auth relation join
{"@request.auth.rel", false, "[[__auth_users.rel]]"},
{"@request.auth.rel.title", false, "[[__auth_users_rel.title]]"},
{"@request.auth.rel.missing", false, "NULL"},
{"@request.auth.missing_via_rel", false, "NULL"},
// @collection fieds
{"@collect", true, ""},