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

Function TestBuildUniqueKeyRangeEndPreparedQueryViaOffset

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

Source from the content-addressed store, hash-verified

418}
419
420func TestBuildUniqueKeyRangeEndPreparedQueryViaOffset(t *testing.T) {
421 databaseName := "mydb"
422 originalTableName := "tbl"
423 var chunkSize int64 = 500
424 {
425 // Different first-column values → 3-part UNION for efficient boundary seeks.
426 uniqueKeyColumns := NewColumnList([]string{"name", "position"})
427 rangeStartArgs := []interface{}{3, 17}
428 rangeEndArgs := []interface{}{103, 117}
429
430 query, explodedArgs, err := BuildUniqueKeyRangeEndPreparedQueryViaOffset(databaseName, originalTableName, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, chunkSize, false, "test")
431 require.NoError(t, err)
432 expected := `
433 select /* gh-ost mydb.tbl test */
434 name, position
435 from
436 ((select name, position from mydb.tbl where name = ? and position > ? order by name asc, position asc limit 500)
437 union all
438 (select name, position from mydb.tbl where name > ? and name < ? order by name asc, position asc limit 500)
439 union all
440 (select name, position from mydb.tbl where name = ? and position <= ? order by name asc, position asc limit 500)) t
441 order by
442 name asc, position asc
443 limit 1
444 offset 499`
445 require.Equal(t, normalizeQuery(expected), normalizeQuery(query))
446 require.Equal(t, []interface{}{3, 17, 3, 103, 103, 117}, explodedArgs)
447 }
448 {
449 // Same first-column value → single range query (no UNION needed).
450 uniqueKeyColumns := NewColumnList([]string{"name", "position"})
451 rangeStartArgs := []interface{}{3, 17}
452 rangeEndArgs := []interface{}{3, 117}
453
454 query, explodedArgs, err := BuildUniqueKeyRangeEndPreparedQueryViaOffset(databaseName, originalTableName, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, chunkSize, false, "test")
455 require.NoError(t, err)
456 expected := `
457 select /* gh-ost mydb.tbl test */
458 name, position
459 from
460 mydb.tbl
461 where
462 (name = ? and position > ? and position <= ?)
463 order by
464 name asc, position asc
465 limit 1
466 offset 499`
467 require.Equal(t, normalizeQuery(expected), normalizeQuery(query))
468 require.Equal(t, []interface{}{3, 17, 117}, explodedArgs)
469 }
470}
471
472func TestBuildUniqueKeyRangeEndPreparedQueryViaTemptable(t *testing.T) {
473 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…