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

Function buildUniqueKeyRangeEndTwoColumnViaOffset

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

Source from the content-addressed store, hash-verified

616}
617
618func buildUniqueKeyRangeEndTwoColumnViaOffset(
619 databaseName, tableName string,
620 uniqueKeyColumns *ColumnList,
621 rangeStartArgs, rangeEndArgs []interface{},
622 chunkSize int64,
623 startRangeComparisonSign ValueComparisonSign,
624 hint string,
625) (result string, explodedArgs []interface{}, err error) {
626 m := newTwoColumnRangeMeta(uniqueKeyColumns)
627 if len(rangeStartArgs) != 2 || len(rangeEndArgs) != 2 {
628 return "", nil, fmt.Errorf("expected 2 range args in buildUniqueKeyRangeEndTwoColumnViaOffset, got %d start and %d end", len(rangeStartArgs), len(rangeEndArgs))
629 }
630 col2StartOp := string(startRangeComparisonSign)
631 selectClause := m.col1Name + ", " + m.col2Name
632 fromClause := databaseName + "." + tableName
633 partSuffix := fmt.Sprintf("order by %s limit %d", m.orderByAsc, chunkSize)
634
635 if sameFirstColumnValue(rangeStartArgs, rangeEndArgs) {
636 result = fmt.Sprintf(`
637 select /* gh-ost %s.%s %s */
638 %s, %s
639 from
640 %s.%s
641 where
642 (%s = %s and %s %s %s and %s <= %s)
643 order by
644 %s
645 limit 1
646 offset %d`,
647 databaseName, tableName, hint,
648 m.col1Name, m.col2Name,
649 databaseName, tableName,
650 m.col1Name, m.col1Val, m.col2Name, col2StartOp, m.col2Val, m.col2Name, m.col2Val,
651 m.orderByAsc,
652 chunkSize-1,
653 )
654 explodedArgs = append(explodedArgs, rangeStartArgs[0], rangeStartArgs[1], rangeEndArgs[1])
655 return result, explodedArgs, nil
656 }
657
658 part1, part2, part3, explodedArgs := buildTwoColumnUnionParts(
659 selectClause, fromClause,
660 m.col1Name, m.col2Name,
661 m.col1Val, m.col2Val, m.col1Val, m.col2Val,
662 col2StartOp, partSuffix,
663 rangeStartArgs, rangeEndArgs,
664 )
665
666 result = fmt.Sprintf(`
667 select /* gh-ost %s.%s %s */
668 %s, %s
669 from
670 (%s union all %s union all %s) t
671 order by
672 %s
673 limit 1
674 offset %d`,
675 databaseName, tableName, hint,

Calls 4

newTwoColumnRangeMetaFunction · 0.85
sameFirstColumnValueFunction · 0.85
buildTwoColumnUnionPartsFunction · 0.85
ErrorfMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…