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

Function BuildUniqueKeyRangeEndPreparedQueryViaOffset

go/sql/builder.go:428–484  ·  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

426}
427
428func BuildUniqueKeyRangeEndPreparedQueryViaOffset(databaseName, tableName string, uniqueKeyColumns *ColumnList, rangeStartArgs, rangeEndArgs []interface{}, chunkSize int64, includeRangeStartValues bool, hint string) (result string, explodedArgs []interface{}, err error) {
429 if uniqueKeyColumns.Len() == 0 {
430 return "", explodedArgs, fmt.Errorf("got 0 columns in BuildUniqueKeyRangeEndPreparedQuery")
431 }
432 databaseName = EscapeName(databaseName)
433 tableName = EscapeName(tableName)
434
435 var startRangeComparisonSign = GreaterThanComparisonSign
436 if includeRangeStartValues {
437 startRangeComparisonSign = GreaterThanOrEqualsComparisonSign
438 }
439
440 if uniqueKeyColumns.Len() == 2 {
441 return buildUniqueKeyRangeEndTwoColumnViaOffset(databaseName, tableName, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, chunkSize, startRangeComparisonSign, hint)
442 }
443
444 rangeStartComparison, rangeExplodedArgs, err := BuildRangePreparedComparison(uniqueKeyColumns, rangeStartArgs, startRangeComparisonSign)
445 if err != nil {
446 return "", explodedArgs, err
447 }
448 explodedArgs = append(explodedArgs, rangeExplodedArgs...)
449 rangeEndComparison, rangeExplodedArgs, err := BuildRangePreparedComparison(uniqueKeyColumns, rangeEndArgs, LessThanOrEqualsComparisonSign)
450 if err != nil {
451 return "", explodedArgs, err
452 }
453 explodedArgs = append(explodedArgs, rangeExplodedArgs...)
454
455 uniqueKeyColumnNames := duplicateNames(uniqueKeyColumns.Names())
456 uniqueKeyColumnAscending := make([]string, len(uniqueKeyColumnNames))
457 for i, column := range uniqueKeyColumns.Columns() {
458 uniqueKeyColumnNames[i] = EscapeName(uniqueKeyColumnNames[i])
459 if column.Type == EnumColumnType {
460 uniqueKeyColumnAscending[i] = fmt.Sprintf("concat(%s) asc", uniqueKeyColumnNames[i])
461 } else {
462 uniqueKeyColumnAscending[i] = fmt.Sprintf("%s asc", uniqueKeyColumnNames[i])
463 }
464 }
465 result = fmt.Sprintf(`
466 select /* gh-ost %s.%s %s */
467 %s
468 from
469 %s.%s
470 where
471 %s and %s
472 order by
473 %s
474 limit 1
475 offset %d`,
476 databaseName, tableName, hint,
477 strings.Join(uniqueKeyColumnNames, ", "),
478 databaseName, tableName,
479 rangeStartComparison, rangeEndComparison,
480 strings.Join(uniqueKeyColumnAscending, ", "),
481 (chunkSize - 1),
482 )
483 return result, explodedArgs, nil
484}
485

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…