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

Function TestBuildRangeInsertPreparedQuery

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

Source from the content-addressed store, hash-verified

367}
368
369func TestBuildRangeInsertPreparedQuery(t *testing.T) {
370 databaseName := "mydb"
371 originalTableName := "tbl"
372 ghostTableName := "ghost"
373 sharedColumns := []string{"id", "name", "position"}
374 {
375 uniqueKey := "name_position_uidx"
376 uniqueKeyColumns := NewColumnList([]string{"name", "position"})
377 rangeStartArgs := []interface{}{3, 17}
378 rangeEndArgs := []interface{}{103, 117}
379
380 query, explodedArgs, err := BuildRangeInsertPreparedQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, true, true, true)
381 require.NoError(t, err)
382 expected := `
383 insert /* gh-ost mydb.tbl */ ignore
384 into mydb.ghost (id, name, position)
385 (select id, name, position from mydb.tbl force index (name_position_uidx) where name = ? and position >= ? for share nowait)
386 union all
387 (select id, name, position from mydb.tbl force index (name_position_uidx) where name > ? and name < ? for share nowait)
388 union all
389 (select id, name, position from mydb.tbl force index (name_position_uidx) where name = ? and position <= ? for share nowait)`
390 require.Equal(t, normalizeQuery(expected), normalizeQuery(query))
391 require.Equal(t, []interface{}{3, 17, 3, 103, 103, 117}, explodedArgs)
392 }
393 {
394 // Same first-column value → single range query (no UNION needed).
395 uniqueKey := "name_position_uidx"
396 uniqueKeyColumns := NewColumnList([]string{"name", "position"})
397 rangeStartArgs := []interface{}{3, 17}
398 rangeEndArgs := []interface{}{3, 117}
399
400 query, explodedArgs, err := BuildRangeInsertPreparedQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, true, true, true)
401 require.NoError(t, err)
402 expected := `
403 insert /* gh-ost mydb.tbl */ ignore
404 into
405 mydb.ghost
406 (id, name, position)
407 (
408 select id, name, position
409 from
410 mydb.tbl
411 force index (name_position_uidx)
412 where (name = ? and position >= ? and position <= ?)
413 for share nowait
414 )`
415 require.Equal(t, normalizeQuery(expected), normalizeQuery(query))
416 require.Equal(t, []interface{}{3, 17, 117}, explodedArgs)
417 }
418}
419
420func TestBuildUniqueKeyRangeEndPreparedQueryViaOffset(t *testing.T) {
421 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…