diff --git a/clause/limit.go b/clause/limit.go index abda00551..3edde4346 100644 --- a/clause/limit.go +++ b/clause/limit.go @@ -1,7 +1,5 @@ package clause -import "strconv" - // Limit limit clause type Limit struct { Limit *int @@ -17,14 +15,14 @@ func (limit Limit) Name() string { func (limit Limit) Build(builder Builder) { if limit.Limit != nil && *limit.Limit >= 0 { builder.WriteString("LIMIT ") - builder.WriteString(strconv.Itoa(*limit.Limit)) + builder.AddVar(builder, *limit.Limit) } if limit.Offset > 0 { if limit.Limit != nil && *limit.Limit >= 0 { builder.WriteByte(' ') } builder.WriteString("OFFSET ") - builder.WriteString(strconv.Itoa(limit.Offset)) + builder.AddVar(builder, limit.Offset) } } diff --git a/clause/limit_test.go b/clause/limit_test.go index a9fd4e24a..96a7e7e6e 100644 --- a/clause/limit_test.go +++ b/clause/limit_test.go @@ -22,43 +22,53 @@ func TestLimit(t *testing.T) { Limit: &limit10, 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}}, - "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}}, - "SELECT * FROM `users` LIMIT 0", nil, + "SELECT * FROM `users` LIMIT ?", + []interface{}{limit0}, }, { []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}}, - "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}}, - "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}}, - "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}}, - "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}}, - "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}}, - "SELECT * FROM `users` LIMIT 50 OFFSET 30", nil, + "SELECT * FROM `users` LIMIT ? OFFSET ?", + []interface{}{limit50, 30}, }, } diff --git a/tests/connpool_test.go b/tests/connpool_test.go index e0e1c7710..21a2bad03 100644 --- a/tests/connpool_test.go +++ b/tests/connpool_test.go @@ -102,13 +102,13 @@ func TestConnPoolWrapper(t *testing.T) { expect: []string{ "SELECT VERSION()", "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 (?,?,?,?,?,?,?,?,?)", - "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 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 ?", "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 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 ?", }, }