(t *testing.T)
| 2409 | } |
| 2410 | |
| 2411 | func TestQueryNodes(t *testing.T) { |
| 2412 | db, mock, err := sqlmock.New() |
| 2413 | require.NoError(t, err) |
| 2414 | mock.ExpectQuery(escape("SELECT DISTINCT `users`.`id`, `users`.`age`, `users`.`name`, `users`.`fk1`, `users`.`fk2` FROM `users` WHERE `age` < ? ORDER BY `id` LIMIT 3 OFFSET 4 FOR UPDATE NOWAIT")). |
| 2415 | WithArgs(40). |
| 2416 | WillReturnRows(sqlmock.NewRows([]string{"id", "age", "name", "fk1", "fk2"}). |
| 2417 | AddRow(1, 10, nil, nil, nil). |
| 2418 | AddRow(2, 20, "", 0, 0). |
| 2419 | AddRow(3, 30, "a8m", 1, 1)) |
| 2420 | mock.ExpectQuery(escape("SELECT COUNT(DISTINCT `users`.`id`) FROM `users` WHERE `age` < ? LIMIT 3 OFFSET 4 FOR UPDATE NOWAIT")). |
| 2421 | WithArgs(40). |
| 2422 | WillReturnRows(sqlmock.NewRows([]string{"COUNT"}). |
| 2423 | AddRow(3)) |
| 2424 | mock.ExpectQuery(escape("SELECT COUNT(DISTINCT `users`.`name`) FROM `users` WHERE `age` < ? LIMIT 3 OFFSET 4 FOR UPDATE NOWAIT")). |
| 2425 | WithArgs(40). |
| 2426 | WillReturnRows(sqlmock.NewRows([]string{"COUNT"}). |
| 2427 | AddRow(3)) |
| 2428 | |
| 2429 | var ( |
| 2430 | users []*user |
| 2431 | spec = &QuerySpec{ |
| 2432 | Node: &NodeSpec{ |
| 2433 | Table: "users", |
| 2434 | Columns: []string{"id", "age", "name", "fk1", "fk2"}, |
| 2435 | ID: &FieldSpec{Column: "id", Type: field.TypeInt}, |
| 2436 | }, |
| 2437 | Limit: 3, |
| 2438 | Offset: 4, |
| 2439 | Unique: true, |
| 2440 | Order: func(s *sql.Selector) { |
| 2441 | s.OrderBy("id") |
| 2442 | }, |
| 2443 | Predicate: func(s *sql.Selector) { |
| 2444 | s.Where(sql.LT("age", 40)) |
| 2445 | }, |
| 2446 | Modifiers: []func(*sql.Selector){ |
| 2447 | func(s *sql.Selector) { s.ForUpdate(sql.WithLockAction(sql.NoWait)) }, |
| 2448 | }, |
| 2449 | ScanValues: func(columns []string) ([]any, error) { |
| 2450 | u := &user{} |
| 2451 | users = append(users, u) |
| 2452 | return u.values(columns) |
| 2453 | }, |
| 2454 | Assign: func(columns []string, values []any) error { |
| 2455 | return users[len(users)-1].assign(columns, values) |
| 2456 | }, |
| 2457 | } |
| 2458 | ) |
| 2459 | |
| 2460 | // Query and scan. |
| 2461 | err = QueryNodes(context.Background(), sql.OpenDB("", db), spec) |
| 2462 | require.NoError(t, err) |
| 2463 | require.Equal(t, &user{id: 1, age: 10, name: ""}, users[0]) |
| 2464 | require.Equal(t, &user{id: 2, age: 20, name: ""}, users[1]) |
| 2465 | require.Equal(t, &user{id: 3, age: 30, name: "a8m", edges: struct{ fk1, fk2 int }{1, 1}}, users[2]) |
| 2466 | |
| 2467 | // Count nodes. |
| 2468 | spec.Node.Columns = nil |
nothing calls this directly
no test coverage detected
searching dependent graphs…