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

Function buildRangeInsertQueryTwoColumn

go/sql/builder.go:344–420  ·  view source on GitHub ↗
(
	databaseName, originalTableName, ghostTableName string,
	sharedColumnsListing, mappedSharedColumnsListing string,
	uniqueKey string,
	uniqueKeyColumns *ColumnList,
	rangeStartValues, rangeEndValues []string,
	rangeStartArgs, rangeEndArgs []interface{},
	minRangeComparisonSign ValueComparisonSign,
	transactionalClause string,
)

Source from the content-addressed store, hash-verified

342}
343
344func 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 }

Callers 2

BuildRangeInsertQueryFunction · 0.85

Calls 5

EscapeNameFunction · 0.85
sameFirstColumnValueFunction · 0.85
buildTwoColumnUnionPartsFunction · 0.85
ColumnsMethod · 0.80
ErrorfMethod · 0.65

Tested by 1

Used in the wild real call sites across dependent graphs

searching dependent graphs…