MCPcopy
hub / github.com/pocketbase/pocketbase / TestFilterDataBuildExprWithParams

Function TestFilterDataBuildExprWithParams

tools/search/filter_test.go:182–247  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

180}
181
182func TestFilterDataBuildExprWithParams(t *testing.T) {
183 // create a dummy db
184 sqlDB, err := sql.Open("sqlite", "file::memory:?cache=shared")
185 if err != nil {
186 t.Fatal(err)
187 }
188 db := dbx.NewFromDB(sqlDB, "sqlite")
189
190 calledQueries := []string{}
191 db.QueryLogFunc = func(ctx context.Context, t time.Duration, sql string, rows *sql.Rows, err error) {
192 calledQueries = append(calledQueries, sql)
193 }
194 db.ExecLogFunc = func(ctx context.Context, t time.Duration, sql string, result sql.Result, err error) {
195 calledQueries = append(calledQueries, sql)
196 }
197
198 date, err := time.Parse("2006-01-02", "2023-01-01")
199 if err != nil {
200 t.Fatal(err)
201 }
202
203 resolver := search.NewSimpleFieldResolver(`^test\w+$`)
204
205 filter := search.FilterData(`
206 test1 = {:test1} ||
207 test2 = {:test2} ||
208 test3a = {:test3} ||
209 test3b = {:test3} ||
210 test4 = {:test4} ||
211 test5 = {:test5} ||
212 test6 = {:test6} ||
213 test7 = {:test7} ||
214 test8 = {:test8} ||
215 test9 = {:test9} ||
216 test10 = {:test10} ||
217 test11 = {:test11} ||
218 test12 = {:test12}
219 `)
220
221 replacements := []dbx.Params{
222 {"test1": true},
223 {"test2": false},
224 {"test3": 123.456},
225 {"test4": nil},
226 {"test5": "", "test6": "simple", "test7": `'single_quotes'`, "test8": `"double_quotes"`, "test9": `escape\"quote`},
227 {"test10": date},
228 {"test11": []string{"a", "b", `"quote`}},
229 {"test12": map[string]any{"a": 123, "b": `quote"`}},
230 }
231
232 expr, err := filter.BuildExpr(resolver, replacements...)
233 if err != nil {
234 t.Fatal(err)
235 }
236
237 db.Select().Where(expr).Build().Execute()
238
239 if len(calledQueries) != 1 {

Callers

nothing calls this directly

Calls 8

NewSimpleFieldResolverFunction · 0.92
FilterDataTypeAlias · 0.92
ParseMethod · 0.80
ExecuteMethod · 0.80
SelectMethod · 0.80
OpenMethod · 0.65
BuildExprMethod · 0.45
BuildMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…