MCPcopy
hub / github.com/github/gh-ost / TestBuildUniqueKeyRangeEndPreparedQueryViaTemptable

Function TestBuildUniqueKeyRangeEndPreparedQueryViaTemptable

go/sql/builder_test.go:472–524  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

470}
471
472func TestBuildUniqueKeyRangeEndPreparedQueryViaTemptable(t *testing.T) {
473 databaseName := "mydb"
474 originalTableName := "tbl"
475 var chunkSize int64 = 500
476 {
477 // Different first-column values → 3-part UNION for efficient boundary seeks.
478 uniqueKeyColumns := NewColumnList([]string{"name", "position"})
479 rangeStartArgs := []interface{}{3, 17}
480 rangeEndArgs := []interface{}{103, 117}
481
482 query, explodedArgs, err := BuildUniqueKeyRangeEndPreparedQueryViaTemptable(databaseName, originalTableName, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, chunkSize, false, "test")
483 require.NoError(t, err)
484 expected := `
485 select /* gh-ost mydb.tbl test */ name, position
486 from (
487 select name, position
488 from
489 ((select name, position from mydb.tbl where name = ? and position > ? order by name asc, position asc limit 500)
490 union all
491 (select name, position from mydb.tbl where name > ? and name < ? order by name asc, position asc limit 500)
492 union all
493 (select name, position from mydb.tbl where name = ? and position <= ? order by name asc, position asc limit 500)) t
494 order by name asc, position asc
495 limit 500
496 ) select_osc_chunk
497 order by name desc, position desc
498 limit 1`
499 require.Equal(t, normalizeQuery(expected), normalizeQuery(query))
500 require.Equal(t, []interface{}{3, 17, 3, 103, 103, 117}, explodedArgs)
501 }
502 {
503 // Same first-column value → single range query (no UNION needed).
504 uniqueKeyColumns := NewColumnList([]string{"name", "position"})
505 rangeStartArgs := []interface{}{3, 17}
506 rangeEndArgs := []interface{}{3, 117}
507
508 query, explodedArgs, err := BuildUniqueKeyRangeEndPreparedQueryViaTemptable(databaseName, originalTableName, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, chunkSize, false, "test")
509 require.NoError(t, err)
510 expected := `
511 select /* gh-ost mydb.tbl test */ name, position
512 from (
513 select name, position
514 from mydb.tbl
515 where (name = ? and position > ? and position <= ?)
516 order by name asc, position asc
517 limit 500
518 ) select_osc_chunk
519 order by name desc, position desc
520 limit 1`
521 require.Equal(t, normalizeQuery(expected), normalizeQuery(query))
522 require.Equal(t, []interface{}{3, 17, 117}, explodedArgs)
523 }
524}
525
526func TestBuildUniqueKeyRangeEndPreparedQueryTwoColumnEnum(t *testing.T) {
527 databaseName := "mydb"

Callers

nothing calls this directly

Calls 3

NewColumnListFunction · 0.85
normalizeQueryFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…