@@ -423,21 +423,22 @@ func TestBuildUniqueKeyRangeEndPreparedQueryViaOffset(t *testing.T) {
423423 var chunkSize int64 = 500
424424 {
425425 // Different first-column values → 3-part UNION for efficient boundary seeks.
426+ // A named (non-PRIMARY) key asserts the caller-supplied key reaches the force index hint.
426427 uniqueKeyColumns := NewColumnList ([]string {"name" , "position" })
427428 rangeStartArgs := []interface {}{3 , 17 }
428429 rangeEndArgs := []interface {}{103 , 117 }
429430
430- query , explodedArgs , err := BuildUniqueKeyRangeEndPreparedQueryViaOffset (databaseName , originalTableName , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
431+ query , explodedArgs , err := BuildUniqueKeyRangeEndPreparedQueryViaOffset (databaseName , originalTableName , "name_position_uidx" , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
431432 require .NoError (t , err )
432433 expected := `
433434 select /* gh-ost mydb.tbl test */
434435 name, position
435436 from
436- ((select name, position from mydb.tbl where name = ? and position > ? order by name asc, position asc limit 500)
437+ ((select name, position from mydb.tbl force index (name_position_uidx) where name = ? and position > ? order by name asc, position asc limit 500)
437438 union all
438- (select name, position from mydb.tbl where name > ? and name < ? order by name asc, position asc limit 500)
439+ (select name, position from mydb.tbl force index (name_position_uidx) where name > ? and name < ? order by name asc, position asc limit 500)
439440 union all
440- (select name, position from mydb.tbl where name = ? and position <= ? order by name asc, position asc limit 500)) t
441+ (select name, position from mydb.tbl force index (name_position_uidx) where name = ? and position <= ? order by name asc, position asc limit 500)) t
441442 order by
442443 name asc, position asc
443444 limit 1
@@ -451,13 +452,13 @@ func TestBuildUniqueKeyRangeEndPreparedQueryViaOffset(t *testing.T) {
451452 rangeStartArgs := []interface {}{3 , 17 }
452453 rangeEndArgs := []interface {}{3 , 117 }
453454
454- query , explodedArgs , err := BuildUniqueKeyRangeEndPreparedQueryViaOffset (databaseName , originalTableName , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
455+ query , explodedArgs , err := BuildUniqueKeyRangeEndPreparedQueryViaOffset (databaseName , originalTableName , "PRIMARY" , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
455456 require .NoError (t , err )
456457 expected := `
457458 select /* gh-ost mydb.tbl test */
458459 name, position
459460 from
460- mydb.tbl
461+ mydb.tbl force index (PRIMARY)
461462 where
462463 (name = ? and position > ? and position <= ?)
463464 order by
@@ -479,18 +480,18 @@ func TestBuildUniqueKeyRangeEndPreparedQueryViaTemptable(t *testing.T) {
479480 rangeStartArgs := []interface {}{3 , 17 }
480481 rangeEndArgs := []interface {}{103 , 117 }
481482
482- query , explodedArgs , err := BuildUniqueKeyRangeEndPreparedQueryViaTemptable (databaseName , originalTableName , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
483+ query , explodedArgs , err := BuildUniqueKeyRangeEndPreparedQueryViaTemptable (databaseName , originalTableName , "PRIMARY" , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
483484 require .NoError (t , err )
484485 expected := `
485486 select /* gh-ost mydb.tbl test */ name, position
486487 from (
487488 select name, position
488489 from
489- ((select name, position from mydb.tbl where name = ? and position > ? order by name asc, position asc limit 500)
490+ ((select name, position from mydb.tbl force index (PRIMARY) where name = ? and position > ? order by name asc, position asc limit 500)
490491 union all
491- (select name, position from mydb.tbl where name > ? and name < ? order by name asc, position asc limit 500)
492+ (select name, position from mydb.tbl force index (PRIMARY) where name > ? and name < ? order by name asc, position asc limit 500)
492493 union all
493- (select name, position from mydb.tbl where name = ? and position <= ? order by name asc, position asc limit 500)) t
494+ (select name, position from mydb.tbl force index (PRIMARY) where name = ? and position <= ? order by name asc, position asc limit 500)) t
494495 order by name asc, position asc
495496 limit 500
496497 ) select_osc_chunk
@@ -505,13 +506,13 @@ func TestBuildUniqueKeyRangeEndPreparedQueryViaTemptable(t *testing.T) {
505506 rangeStartArgs := []interface {}{3 , 17 }
506507 rangeEndArgs := []interface {}{3 , 117 }
507508
508- query , explodedArgs , err := BuildUniqueKeyRangeEndPreparedQueryViaTemptable (databaseName , originalTableName , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
509+ query , explodedArgs , err := BuildUniqueKeyRangeEndPreparedQueryViaTemptable (databaseName , originalTableName , "PRIMARY" , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
509510 require .NoError (t , err )
510511 expected := `
511512 select /* gh-ost mydb.tbl test */ name, position
512513 from (
513514 select name, position
514- from mydb.tbl
515+ from mydb.tbl force index (PRIMARY)
515516 where (name = ? and position > ? and position <= ?)
516517 order by name asc, position asc
517518 limit 500
@@ -535,17 +536,17 @@ func TestBuildUniqueKeyRangeEndPreparedQueryTwoColumnEnum(t *testing.T) {
535536 rangeStartArgs := []interface {}{"a" , 17 }
536537 rangeEndArgs := []interface {}{"z" , 117 }
537538
538- query , _ , err := BuildUniqueKeyRangeEndPreparedQueryViaOffset (databaseName , originalTableName , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
539+ query , _ , err := BuildUniqueKeyRangeEndPreparedQueryViaOffset (databaseName , originalTableName , "PRIMARY" , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
539540 require .NoError (t , err )
540541 expected := `
541542 select /* gh-ost mydb.tbl test */
542543 name, position
543544 from
544- ((select name, position from mydb.tbl where name = ? and position > ? order by concat(name) asc, position asc limit 500)
545+ ((select name, position from mydb.tbl force index (PRIMARY) where name = ? and position > ? order by concat(name) asc, position asc limit 500)
545546 union all
546- (select name, position from mydb.tbl where name > ? and name < ? order by concat(name) asc, position asc limit 500)
547+ (select name, position from mydb.tbl force index (PRIMARY) where name > ? and name < ? order by concat(name) asc, position asc limit 500)
547548 union all
548- (select name, position from mydb.tbl where name = ? and position <= ? order by concat(name) asc, position asc limit 500)) t
549+ (select name, position from mydb.tbl force index (PRIMARY) where name = ? and position <= ? order by concat(name) asc, position asc limit 500)) t
549550 order by
550551 concat(name) asc, position asc
551552 limit 1
@@ -560,18 +561,18 @@ func TestBuildUniqueKeyRangeEndPreparedQueryTwoColumnEnum(t *testing.T) {
560561 rangeStartArgs := []interface {}{3 , "a" }
561562 rangeEndArgs := []interface {}{103 , "z" }
562563
563- query , _ , err := BuildUniqueKeyRangeEndPreparedQueryViaTemptable (databaseName , originalTableName , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
564+ query , _ , err := BuildUniqueKeyRangeEndPreparedQueryViaTemptable (databaseName , originalTableName , "PRIMARY" , uniqueKeyColumns , rangeStartArgs , rangeEndArgs , chunkSize , false , "test" )
564565 require .NoError (t , err )
565566 expected := `
566567 select /* gh-ost mydb.tbl test */ name, position
567568 from (
568569 select name, position
569570 from
570- ((select name, position from mydb.tbl where name = ? and position > ? order by name asc, concat(position) asc limit 500)
571+ ((select name, position from mydb.tbl force index (PRIMARY) where name = ? and position > ? order by name asc, concat(position) asc limit 500)
571572 union all
572- (select name, position from mydb.tbl where name > ? and name < ? order by name asc, concat(position) asc limit 500)
573+ (select name, position from mydb.tbl force index (PRIMARY) where name > ? and name < ? order by name asc, concat(position) asc limit 500)
573574 union all
574- (select name, position from mydb.tbl where name = ? and position <= ? order by name asc, concat(position) asc limit 500)) t
575+ (select name, position from mydb.tbl force index (PRIMARY) where name = ? and position <= ? order by name asc, concat(position) asc limit 500)) t
575576 order by name asc, concat(position) asc
576577 limit 500
577578 ) select_osc_chunk
0 commit comments