(
databaseName, tableName string,
uniqueKeyColumns *ColumnList,
rangeStartArgs, rangeEndArgs []interface{},
chunkSize int64,
startRangeComparisonSign ValueComparisonSign,
hint string,
)
| 616 | } |
| 617 | |
| 618 | func 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, |
no test coverage detected
searching dependent graphs…