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 | ||||
| 
 | ||||
| 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) | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -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}, | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
| @ -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 ?", | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 jasonchuan
						jasonchuan