MCPcopy
hub / github.com/pocketbase/pocketbase / buildParsedFilterExpr

Function buildParsedFilterExpr

tools/search/filter.go:107–153  ·  view source on GitHub ↗
(data []fexpr.ExprGroup, fieldResolver FieldResolver, maxExpressions *int)

Source from the content-addressed store, hash-verified

105}
106
107func buildParsedFilterExpr(data []fexpr.ExprGroup, fieldResolver FieldResolver, maxExpressions *int) (dbx.Expression, error) {
108 if len(data) == 0 {
109 return nil, fexpr.ErrEmpty
110 }
111
112 result := &concatExpr{separator: " "}
113
114 for _, group := range data {
115 var expr dbx.Expression
116 var exprErr error
117
118 switch item := group.Item.(type) {
119 case fexpr.Expr:
120 if *maxExpressions <= 0 {
121 return nil, ErrFilterExprLimit
122 }
123
124 *maxExpressions--
125
126 expr, exprErr = resolveTokenizedExpr(item, fieldResolver)
127 case fexpr.ExprGroup:
128 expr, exprErr = buildParsedFilterExpr([]fexpr.ExprGroup{item}, fieldResolver, maxExpressions)
129 case []fexpr.ExprGroup:
130 expr, exprErr = buildParsedFilterExpr(item, fieldResolver, maxExpressions)
131 default:
132 exprErr = errors.New("unsupported expression item")
133 }
134
135 if exprErr != nil {
136 return nil, exprErr
137 }
138
139 if len(result.parts) > 0 {
140 var op string
141 if group.Join == fexpr.JoinOr {
142 op = "OR"
143 } else {
144 op = "AND"
145 }
146 result.parts = append(result.parts, &opExpr{op})
147 }
148
149 result.parts = append(result.parts, expr)
150 }
151
152 return result, nil
153}
154
155func resolveTokenizedExpr(expr fexpr.Expr, fieldResolver FieldResolver) (dbx.Expression, error) {
156 lResult, lErr := resolveToken(expr.Left, fieldResolver)

Callers 1

BuildExprWithLimitMethod · 0.85

Calls 1

resolveTokenizedExprFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…