mirror of
https://github.com/ent/ent.git
synced 2026-05-24 09:31:56 +03:00
sql/builder: expand limit / offset into query instead of args (#816)
This commit is contained in:
@@ -1782,11 +1782,11 @@ func (s *Selector) Query() (string, []interface{}) {
|
||||
}
|
||||
if s.limit != nil {
|
||||
b.WriteString(" LIMIT ")
|
||||
b.Arg(*s.limit)
|
||||
b.WriteString(strconv.Itoa(*s.limit))
|
||||
}
|
||||
if s.offset != nil {
|
||||
b.WriteString(" OFFSET ")
|
||||
b.Arg(*s.offset)
|
||||
b.WriteString(strconv.Itoa(*s.offset))
|
||||
}
|
||||
s.total = b.total
|
||||
return b.String(), b.args
|
||||
@@ -2110,9 +2110,9 @@ func (b *Builder) join(qs []Querier, sep string) *Builder {
|
||||
// Nested gets a callback, and wraps its result with parentheses.
|
||||
func (b *Builder) Nested(f func(*Builder)) *Builder {
|
||||
nb := &Builder{dialect: b.dialect, total: b.total}
|
||||
nb.WriteString("(")
|
||||
nb.WriteByte('(')
|
||||
f(nb)
|
||||
nb.WriteString(")")
|
||||
nb.WriteByte(')')
|
||||
nb.WriteTo(b)
|
||||
b.args = append(b.args, nb.args...)
|
||||
b.total = nb.total
|
||||
|
||||
@@ -1055,16 +1055,14 @@ func TestBuilder(t *testing.T) {
|
||||
input: Select("*").
|
||||
From(Table("users")).
|
||||
Limit(1),
|
||||
wantQuery: "SELECT * FROM `users` LIMIT ?",
|
||||
wantArgs: []interface{}{1},
|
||||
wantQuery: "SELECT * FROM `users` LIMIT 1",
|
||||
},
|
||||
{
|
||||
input: Dialect(dialect.Postgres).
|
||||
Select("*").
|
||||
From(Table("users")).
|
||||
Limit(1),
|
||||
wantQuery: `SELECT * FROM "users" LIMIT $1`,
|
||||
wantArgs: []interface{}{1},
|
||||
wantQuery: `SELECT * FROM "users" LIMIT 1`,
|
||||
},
|
||||
{
|
||||
input: Select("age").Distinct().From(Table("users")),
|
||||
@@ -1130,8 +1128,8 @@ func TestBuilder(t *testing.T) {
|
||||
Join(t4).
|
||||
On(t1.C("id"), t4.C("id")).Limit(1)
|
||||
}(),
|
||||
wantQuery: `SELECT * FROM "groups" JOIN (SELECT "user_groups"."id" FROM "user_groups" JOIN "users" AS "t0" ON "user_groups"."id" = "t0"."id2" WHERE "t0"."id" = $1) AS "t1" ON "groups"."id" = "t1"."id" LIMIT $2`,
|
||||
wantArgs: []interface{}{"baz", 1},
|
||||
wantQuery: `SELECT * FROM "groups" JOIN (SELECT "user_groups"."id" FROM "user_groups" JOIN "users" AS "t0" ON "user_groups"."id" = "t0"."id2" WHERE "t0"."id" = $1) AS "t1" ON "groups"."id" = "t1"."id" LIMIT 1`,
|
||||
wantArgs: []interface{}{"baz"},
|
||||
},
|
||||
{
|
||||
input: func() Querier {
|
||||
|
||||
@@ -1311,14 +1311,14 @@ func TestDeleteNodes(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 ? OFFSET ?")).
|
||||
WithArgs(40, 3, 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")).
|
||||
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 ? OFFSET ?")).
|
||||
WithArgs(40, 3, 4).
|
||||
mock.ExpectQuery(escape("SELECT COUNT(DISTINCT `users`.`id`) FROM `users` WHERE `age` < ? ORDER BY `id` LIMIT 3 OFFSET 4")).
|
||||
WithArgs(40).
|
||||
WillReturnRows(sqlmock.NewRows([]string{"COUNT"}).
|
||||
AddRow(3))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user