MCPcopy
hub / github.com/pocketbase/pocketbase / Resolve

Method Resolve

tools/search/simple_field_resolver.go:88–124  ·  view source on GitHub ↗

Resolve implements `search.Resolve` interface. Returns error if `field` is not in `r.allowedFields`.

(field string)

Source from the content-addressed store, hash-verified

86//
87// Returns error if `field` is not in `r.allowedFields`.
88func (r *SimpleFieldResolver) Resolve(field string) (*ResolverResult, error) {
89 if !list.ExistInSliceWithRegex(field, r.allowedFields) {
90 return nil, fmt.Errorf("failed to resolve field %q", field)
91 }
92
93 parts := strings.Split(field, ".")
94
95 // single regular field
96 if len(parts) == 1 {
97 return &ResolverResult{
98 Identifier: "[[" + inflector.Columnify(parts[0]) + "]]",
99 }, nil
100 }
101
102 // treat as json path
103 var jsonPath strings.Builder
104 jsonPath.WriteString("$")
105 for _, part := range parts[1:] {
106 if _, err := strconv.Atoi(part); err == nil {
107 jsonPath.WriteString("[")
108 jsonPath.WriteString(inflector.Columnify(part))
109 jsonPath.WriteString("]")
110 } else {
111 jsonPath.WriteString(".")
112 jsonPath.WriteString(inflector.Columnify(part))
113 }
114 }
115
116 return &ResolverResult{
117 NullFallback: NullFallbackDisabled,
118 Identifier: fmt.Sprintf(
119 "JSON_EXTRACT([[%s]], '%s')",
120 inflector.Columnify(parts[0]),
121 jsonPath.String(),
122 ),
123 }, nil
124}

Calls 3

ExistInSliceWithRegexFunction · 0.92
ColumnifyFunction · 0.92
StringMethod · 0.45

Tested by 2