added more geoPoint field acccess tests

This commit is contained in:
Gani Georgiev
2025-04-02 23:25:42 +03:00
parent 4c5abd5bd9
commit d135b1e686
5 changed files with 25 additions and 17 deletions
+15 -14
View File
@@ -291,6 +291,15 @@ var filterFunctions = map[string]func(
},
}
var normalizedIdentifiers = map[string]string{
// if `null` field is missing, treat `null` identifier as NULL token
"null": "NULL",
// if `true` field is missing, treat `true` identifier as TRUE token
"true": "1",
// if `false` field is missing, treat `false` identifier as FALSE token
"false": "0",
}
func resolveToken(token fexpr.Token, fieldResolver FieldResolver) (*ResolverResult, error) {
switch token.Type {
case fexpr.TokenIdentifier:
@@ -313,19 +322,11 @@ func resolveToken(token fexpr.Token, fieldResolver FieldResolver) (*ResolverResu
// custom resolver
// ---
result, err := fieldResolver.Resolve(token.Literal)
// @todo replace with strings.EqualFold
if err != nil || result.Identifier == "" {
m := map[string]string{
// if `null` field is missing, treat `null` identifier as NULL token
"null": "NULL",
// if `true` field is missing, treat `true` identifier as TRUE token
"true": "1",
// if `false` field is missing, treat `false` identifier as FALSE token
"false": "0",
}
if v, ok := m[strings.ToLower(token.Literal)]; ok {
return &ResolverResult{Identifier: v}, nil
for k, v := range normalizedIdentifiers {
if strings.EqualFold(k, token.Literal) {
return &ResolverResult{Identifier: v}, nil
}
}
return nil, err
}
@@ -346,13 +347,13 @@ func resolveToken(token fexpr.Token, fieldResolver FieldResolver) (*ResolverResu
Params: dbx.Params{placeholder: cast.ToFloat64(token.Literal)},
}, nil
case fexpr.TokenFunction:
f, ok := filterFunctions[token.Literal]
fn, ok := filterFunctions[token.Literal]
if !ok {
return nil, fmt.Errorf("unknown function %q", token.Literal)
}
args, _ := token.Meta.([]fexpr.Token)
return f(func(argToken fexpr.Token) (*ResolverResult, error) {
return fn(func(argToken fexpr.Token) (*ResolverResult, error) {
return resolveToken(argToken, fieldResolver)
}, args...)
}