(t *testing.T)
| 180 | } |
| 181 | |
| 182 | func 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 { |
nothing calls this directly
no test coverage detected
searching dependent graphs…