mirror of https://github.com/go-gorm/gorm.git
let limit and offset use bind parameter (#6806)
* let limit and offset use bind parameter * format * format limt_test * try again * fix test case fro connpool * adding driverName for postgres ,if not to do so, the stmt vars will be added a wrong one called pgx.QueryExecModeSimpleProtocol , causing the SQL with limit problem need 1 parameter ,but given two. * delete trunk files * restore the test_test.go * restore test_test.go * driver/postgres->v1.5.5 * change postgres version rollback to 1.5.4 --------- Co-authored-by: chenchuan <chenchuan@360.cn> Co-authored-by: jason_chuan <jason_chuan@126.com>
This commit is contained in:
parent
46816ad31d
commit
9514d5f9e6
|
@ -1,7 +1,5 @@
|
||||||
package clause
|
package clause
|
||||||
|
|
||||||
import "strconv"
|
|
||||||
|
|
||||||
// Limit limit clause
|
// Limit limit clause
|
||||||
type Limit struct {
|
type Limit struct {
|
||||||
Limit *int
|
Limit *int
|
||||||
|
@ -17,14 +15,14 @@ func (limit Limit) Name() string {
|
||||||
func (limit Limit) Build(builder Builder) {
|
func (limit Limit) Build(builder Builder) {
|
||||||
if limit.Limit != nil && *limit.Limit >= 0 {
|
if limit.Limit != nil && *limit.Limit >= 0 {
|
||||||
builder.WriteString("LIMIT ")
|
builder.WriteString("LIMIT ")
|
||||||
builder.WriteString(strconv.Itoa(*limit.Limit))
|
builder.AddVar(builder, *limit.Limit)
|
||||||
}
|
}
|
||||||
if limit.Offset > 0 {
|
if limit.Offset > 0 {
|
||||||
if limit.Limit != nil && *limit.Limit >= 0 {
|
if limit.Limit != nil && *limit.Limit >= 0 {
|
||||||
builder.WriteByte(' ')
|
builder.WriteByte(' ')
|
||||||
}
|
}
|
||||||
builder.WriteString("OFFSET ")
|
builder.WriteString("OFFSET ")
|
||||||
builder.WriteString(strconv.Itoa(limit.Offset))
|
builder.AddVar(builder, limit.Offset)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,43 +22,53 @@ func TestLimit(t *testing.T) {
|
||||||
Limit: &limit10,
|
Limit: &limit10,
|
||||||
Offset: 20,
|
Offset: 20,
|
||||||
}},
|
}},
|
||||||
"SELECT * FROM `users` LIMIT 10 OFFSET 20", nil,
|
"SELECT * FROM `users` LIMIT ? OFFSET ?",
|
||||||
|
[]interface{}{limit10, 20},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit0}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit0}},
|
||||||
"SELECT * FROM `users` LIMIT 0", nil,
|
"SELECT * FROM `users` LIMIT ?",
|
||||||
|
[]interface{}{limit0},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit0}, clause.Limit{Offset: 0}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit0}, clause.Limit{Offset: 0}},
|
||||||
"SELECT * FROM `users` LIMIT 0", nil,
|
"SELECT * FROM `users` LIMIT ?",
|
||||||
|
[]interface{}{limit0},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Offset: 20}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Offset: 20}},
|
||||||
"SELECT * FROM `users` OFFSET 20", nil,
|
"SELECT * FROM `users` OFFSET ?",
|
||||||
|
[]interface{}{20},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Offset: 20}, clause.Limit{Offset: 30}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Offset: 20}, clause.Limit{Offset: 30}},
|
||||||
"SELECT * FROM `users` OFFSET 30", nil,
|
"SELECT * FROM `users` OFFSET ?",
|
||||||
|
[]interface{}{30},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Offset: 20}, clause.Limit{Limit: &limit10}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Offset: 20}, clause.Limit{Limit: &limit10}},
|
||||||
"SELECT * FROM `users` LIMIT 10 OFFSET 20", nil,
|
"SELECT * FROM `users` LIMIT ? OFFSET ?",
|
||||||
|
[]interface{}{limit10, 20},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit10, Offset: 20}, clause.Limit{Offset: 30}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit10, Offset: 20}, clause.Limit{Offset: 30}},
|
||||||
"SELECT * FROM `users` LIMIT 10 OFFSET 30", nil,
|
"SELECT * FROM `users` LIMIT ? OFFSET ?",
|
||||||
|
[]interface{}{limit10, 30},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Offset: -10}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Offset: -10}},
|
||||||
"SELECT * FROM `users` LIMIT 10", nil,
|
"SELECT * FROM `users` LIMIT ?",
|
||||||
|
[]interface{}{limit10},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Limit: &limitNeg10}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Limit: &limitNeg10}},
|
||||||
"SELECT * FROM `users` OFFSET 30", nil,
|
"SELECT * FROM `users` OFFSET ?",
|
||||||
|
[]interface{}{30},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Limit: &limit50}},
|
[]clause.Interface{clause.Select{}, clause.From{}, clause.Limit{Limit: &limit10, Offset: 20}, clause.Limit{Offset: 30}, clause.Limit{Limit: &limit50}},
|
||||||
"SELECT * FROM `users` LIMIT 50 OFFSET 30", nil,
|
"SELECT * FROM `users` LIMIT ? OFFSET ?",
|
||||||
|
[]interface{}{limit50, 30},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -102,13 +102,13 @@ func TestConnPoolWrapper(t *testing.T) {
|
||||||
expect: []string{
|
expect: []string{
|
||||||
"SELECT VERSION()",
|
"SELECT VERSION()",
|
||||||
"INSERT INTO `users` (`created_at`,`updated_at`,`deleted_at`,`name`,`age`,`birthday`,`company_id`,`manager_id`,`active`) VALUES (?,?,?,?,?,?,?,?,?)",
|
"INSERT INTO `users` (`created_at`,`updated_at`,`deleted_at`,`name`,`age`,`birthday`,`company_id`,`manager_id`,`active`) VALUES (?,?,?,?,?,?,?,?,?)",
|
||||||
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1",
|
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT ?",
|
||||||
"INSERT INTO `users` (`created_at`,`updated_at`,`deleted_at`,`name`,`age`,`birthday`,`company_id`,`manager_id`,`active`) VALUES (?,?,?,?,?,?,?,?,?)",
|
"INSERT INTO `users` (`created_at`,`updated_at`,`deleted_at`,`name`,`age`,`birthday`,`company_id`,`manager_id`,`active`) VALUES (?,?,?,?,?,?,?,?,?)",
|
||||||
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1",
|
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT ?",
|
||||||
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1",
|
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT ?",
|
||||||
"INSERT INTO `users` (`created_at`,`updated_at`,`deleted_at`,`name`,`age`,`birthday`,`company_id`,`manager_id`,`active`) VALUES (?,?,?,?,?,?,?,?,?)",
|
"INSERT INTO `users` (`created_at`,`updated_at`,`deleted_at`,`name`,`age`,`birthday`,`company_id`,`manager_id`,`active`) VALUES (?,?,?,?,?,?,?,?,?)",
|
||||||
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1",
|
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT ?",
|
||||||
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT 1",
|
"SELECT * FROM `users` WHERE name = ? AND `users`.`deleted_at` IS NULL ORDER BY `users`.`id` LIMIT ?",
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue