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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 jasonchuan
						jasonchuan