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

Function buildUniqueKeyRangeEndTwoColumnViaTemptable

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

682}
683
684func buildUniqueKeyRangeEndTwoColumnViaTemptable(
685 databaseName, tableName string,
686 uniqueKeyColumns *ColumnList,
687 rangeStartArgs, rangeEndArgs []interface{},
688 chunkSize int64,
689 startRangeComparisonSign ValueComparisonSign,
690 hint string,
691) (result string, explodedArgs []interface{}, err error) {
692 m := newTwoColumnRangeMeta(uniqueKeyColumns)
693 if len(rangeStartArgs) != 2 || len(rangeEndArgs) != 2 {
694 return "", nil, fmt.Errorf("expected 2 range args in buildUniqueKeyRangeEndTwoColumnViaTemptable, got %d start and %d end", len(rangeStartArgs), len(rangeEndArgs))
695 }
696 col2StartOp := string(startRangeComparisonSign)
697 selectClause := m.col1Name + ", " + m.col2Name
698 fromClause := databaseName + "." + tableName
699 partSuffix := fmt.Sprintf("order by %s limit %d", m.orderByAsc, chunkSize)
700
701 if sameFirstColumnValue(rangeStartArgs, rangeEndArgs) {
702 result = fmt.Sprintf(`
703 select /* gh-ost %s.%s %s */ %s, %s
704 from (
705 select %s, %s
706 from %s.%s
707 where (%s = %s and %s %s %s and %s <= %s)
708 order by %s
709 limit %d
710 ) select_osc_chunk
711 order by %s
712 limit 1`,
713 databaseName, tableName, hint, m.col1Name, m.col2Name,
714 m.col1Name, m.col2Name,
715 databaseName, tableName,
716 m.col1Name, m.col1Val, m.col2Name, col2StartOp, m.col2Val, m.col2Name, m.col2Val,
717 m.orderByAsc, chunkSize,
718 m.orderByDesc,
719 )
720 explodedArgs = append(explodedArgs, rangeStartArgs[0], rangeStartArgs[1], rangeEndArgs[1])
721 return result, explodedArgs, nil
722 }
723
724 part1, part2, part3, explodedArgs := buildTwoColumnUnionParts(
725 selectClause, fromClause,
726 m.col1Name, m.col2Name,
727 m.col1Val, m.col2Val, m.col1Val, m.col2Val,
728 col2StartOp, partSuffix,
729 rangeStartArgs, rangeEndArgs,
730 )
731
732 result = fmt.Sprintf(`
733 select /* gh-ost %s.%s %s */ %s, %s
734 from (
735 select %s, %s
736 from (%s union all %s union all %s) t
737 order by %s
738 limit %d
739 ) select_osc_chunk
740 order by %s
741 limit 1`,

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…