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

Function BuildUniqueKeyRangeEndPreparedQueryViaTemptable

go/sql/builder.go:486–549  ·  view source on GitHub ↗
(databaseName, tableName string, uniqueKeyColumns *ColumnList, rangeStartArgs, rangeEndArgs []interface{}, chunkSize int64, includeRangeStartValues bool, hint string)

Source from the content-addressed store, hash-verified

484}
485
486func BuildUniqueKeyRangeEndPreparedQueryViaTemptable(databaseName, tableName string, uniqueKeyColumns *ColumnList, rangeStartArgs, rangeEndArgs []interface{}, chunkSize int64, includeRangeStartValues bool, hint string) (result string, explodedArgs []interface{}, err error) {
487 if uniqueKeyColumns.Len() == 0 {
488 return "", explodedArgs, fmt.Errorf("got 0 columns in BuildUniqueKeyRangeEndPreparedQuery")
489 }
490 databaseName = EscapeName(databaseName)
491 tableName = EscapeName(tableName)
492
493 var startRangeComparisonSign = GreaterThanComparisonSign
494 if includeRangeStartValues {
495 startRangeComparisonSign = GreaterThanOrEqualsComparisonSign
496 }
497
498 if uniqueKeyColumns.Len() == 2 {
499 return buildUniqueKeyRangeEndTwoColumnViaTemptable(databaseName, tableName, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, chunkSize, startRangeComparisonSign, hint)
500 }
501
502 rangeStartComparison, rangeExplodedArgs, err := BuildRangePreparedComparison(uniqueKeyColumns, rangeStartArgs, startRangeComparisonSign)
503 if err != nil {
504 return "", explodedArgs, err
505 }
506 explodedArgs = append(explodedArgs, rangeExplodedArgs...)
507 rangeEndComparison, rangeExplodedArgs, err := BuildRangePreparedComparison(uniqueKeyColumns, rangeEndArgs, LessThanOrEqualsComparisonSign)
508 if err != nil {
509 return "", explodedArgs, err
510 }
511 explodedArgs = append(explodedArgs, rangeExplodedArgs...)
512
513 uniqueKeyColumnNames := duplicateNames(uniqueKeyColumns.Names())
514 uniqueKeyColumnAscending := make([]string, len(uniqueKeyColumnNames))
515 uniqueKeyColumnDescending := make([]string, len(uniqueKeyColumnNames))
516 for i, column := range uniqueKeyColumns.Columns() {
517 uniqueKeyColumnNames[i] = EscapeName(uniqueKeyColumnNames[i])
518 if column.Type == EnumColumnType {
519 uniqueKeyColumnAscending[i] = fmt.Sprintf("concat(%s) asc", uniqueKeyColumnNames[i])
520 uniqueKeyColumnDescending[i] = fmt.Sprintf("concat(%s) desc", uniqueKeyColumnNames[i])
521 } else {
522 uniqueKeyColumnAscending[i] = fmt.Sprintf("%s asc", uniqueKeyColumnNames[i])
523 uniqueKeyColumnDescending[i] = fmt.Sprintf("%s desc", uniqueKeyColumnNames[i])
524 }
525 }
526 result = fmt.Sprintf(`
527 select /* gh-ost %s.%s %s */ %s
528 from (
529 select
530 %s
531 from
532 %s.%s
533 where
534 %s and %s
535 order by
536 %s
537 limit %d
538 ) select_osc_chunk
539 order by
540 %s
541 limit 1`,
542 databaseName, tableName, hint, strings.Join(uniqueKeyColumnNames, ", "),
543 strings.Join(uniqueKeyColumnNames, ", "), databaseName, tableName,

Calls 8

EscapeNameFunction · 0.85
duplicateNamesFunction · 0.85
NamesMethod · 0.80
ColumnsMethod · 0.80
ErrorfMethod · 0.65
LenMethod · 0.45

Used in the wild real call sites across dependent graphs

searching dependent graphs…