mirror of
https://github.com/ent/ent.git
synced 2026-04-30 14:40:57 +03:00
dialect/sql/sqlgraph: add support for query modifiers
This commit is contained in:
committed by
Ariel Mashraki
parent
dfc7a79f6d
commit
279d6c2a12
@@ -492,6 +492,7 @@ type QuerySpec struct {
|
||||
Unique bool
|
||||
Order func(*sql.Selector)
|
||||
Predicate func(*sql.Selector)
|
||||
Modifiers []func(*sql.Selector)
|
||||
|
||||
ScanValues func(columns []string) ([]interface{}, error)
|
||||
Assign func(columns []string, values []interface{}) error
|
||||
@@ -633,6 +634,9 @@ func (q *query) selector(ctx context.Context) (*sql.Selector, error) {
|
||||
if q.Unique {
|
||||
selector.Distinct()
|
||||
}
|
||||
for _, m := range q.Modifiers {
|
||||
m(selector)
|
||||
}
|
||||
if err := selector.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -1806,13 +1806,13 @@ func TestDeleteNodesSchema(t *testing.T) {
|
||||
func TestQueryNodes(t *testing.T) {
|
||||
db, mock, err := sqlmock.New()
|
||||
require.NoError(t, err)
|
||||
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")).
|
||||
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")).
|
||||
WithArgs(40).
|
||||
WillReturnRows(sqlmock.NewRows([]string{"id", "age", "name", "fk1", "fk2"}).
|
||||
AddRow(1, 10, nil, nil, nil).
|
||||
AddRow(2, 20, "", 0, 0).
|
||||
AddRow(3, 30, "a8m", 1, 1))
|
||||
mock.ExpectQuery(escape("SELECT COUNT(DISTINCT `users`.`id`) FROM `users` WHERE `age` < ? ORDER BY `id` LIMIT 3 OFFSET 4")).
|
||||
mock.ExpectQuery(escape("SELECT COUNT(DISTINCT `users`.`id`) FROM `users` WHERE `age` < ? ORDER BY `id` LIMIT 3 OFFSET 4 FOR UPDATE NOWAIT")).
|
||||
WithArgs(40).
|
||||
WillReturnRows(sqlmock.NewRows([]string{"COUNT"}).
|
||||
AddRow(3))
|
||||
@@ -1834,6 +1834,9 @@ func TestQueryNodes(t *testing.T) {
|
||||
Predicate: func(s *sql.Selector) {
|
||||
s.Where(sql.LT("age", 40))
|
||||
},
|
||||
Modifiers: []func(*sql.Selector){
|
||||
func(s *sql.Selector) { s.ForUpdate(sql.WithLockAction(sql.NoWait)) },
|
||||
},
|
||||
ScanValues: func(columns []string) ([]interface{}, error) {
|
||||
u := &user{}
|
||||
users = append(users, u)
|
||||
|
||||
Reference in New Issue
Block a user