(
databaseName, originalTableName, ghostTableName string,
sharedColumnsListing, mappedSharedColumnsListing string,
uniqueKey string,
uniqueKeyColumns *ColumnList,
rangeStartValues, rangeEndValues []string,
rangeStartArgs, rangeEndArgs []interface{},
minRangeComparisonSign ValueComparisonSign,
transactionalClause string,
)
| 342 | } |
| 343 | |
| 344 | func buildRangeInsertQueryTwoColumn( |
| 345 | databaseName, originalTableName, ghostTableName string, |
| 346 | sharedColumnsListing, mappedSharedColumnsListing string, |
| 347 | uniqueKey string, |
| 348 | uniqueKeyColumns *ColumnList, |
| 349 | rangeStartValues, rangeEndValues []string, |
| 350 | rangeStartArgs, rangeEndArgs []interface{}, |
| 351 | minRangeComparisonSign ValueComparisonSign, |
| 352 | transactionalClause string, |
| 353 | ) (result string, explodedArgs []interface{}, err error) { |
| 354 | cols := uniqueKeyColumns.Columns() |
| 355 | |
| 356 | if len(cols) != len(rangeStartValues) { |
| 357 | return "", explodedArgs, fmt.Errorf("got %d columns but %d rangeStartValues in buildRangeInsertQueryTwoColumn", len(cols), len(rangeStartValues)) |
| 358 | } |
| 359 | if len(cols) != len(rangeEndValues) { |
| 360 | return "", explodedArgs, fmt.Errorf("got %d columns but %d rangeEndValues in buildRangeInsertQueryTwoColumn", len(cols), len(rangeEndValues)) |
| 361 | } |
| 362 | if len(cols) != len(rangeStartArgs) { |
| 363 | return "", explodedArgs, fmt.Errorf("got %d columns but %d rangeStartArgs in buildRangeInsertQueryTwoColumn", len(cols), len(rangeStartArgs)) |
| 364 | } |
| 365 | if len(cols) != len(rangeEndArgs) { |
| 366 | return "", explodedArgs, fmt.Errorf("got %d columns but %d rangeEndArgs in buildRangeInsertQueryTwoColumn", len(cols), len(rangeEndArgs)) |
| 367 | } |
| 368 | |
| 369 | col1Name := EscapeName(cols[0].Name) |
| 370 | col2Name := EscapeName(cols[1].Name) |
| 371 | col1StartVal := rangeStartValues[0] |
| 372 | col2StartVal := rangeStartValues[1] |
| 373 | col1EndVal := rangeEndValues[0] |
| 374 | col2EndVal := rangeEndValues[1] |
| 375 | col2StartOp := string(minRangeComparisonSign) |
| 376 | fromClause := fmt.Sprintf("%s.%s force index (%s)", databaseName, originalTableName, uniqueKey) |
| 377 | |
| 378 | if sameFirstColumnValue(rangeStartArgs, rangeEndArgs) { |
| 379 | result = fmt.Sprintf(` |
| 380 | insert /* gh-ost %s.%s */ ignore |
| 381 | into |
| 382 | %s.%s |
| 383 | (%s) |
| 384 | ( |
| 385 | select %s |
| 386 | from |
| 387 | %s.%s |
| 388 | force index (%s) |
| 389 | where (%s = %s and %s %s %s and %s <= %s) |
| 390 | %s |
| 391 | )`, |
| 392 | databaseName, originalTableName, |
| 393 | databaseName, ghostTableName, mappedSharedColumnsListing, |
| 394 | sharedColumnsListing, |
| 395 | databaseName, originalTableName, uniqueKey, |
| 396 | col1Name, col1StartVal, col2Name, col2StartOp, col2StartVal, col2Name, col2EndVal, |
| 397 | transactionalClause, |
| 398 | ) |
| 399 | explodedArgs = append(explodedArgs, rangeStartArgs[0], rangeStartArgs[1], rangeEndArgs[1]) |
| 400 | return result, explodedArgs, nil |
| 401 | } |
searching dependent graphs…