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