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

Function BuildRangeInsertQuery

go/sql/builder.go:263–335  ·  view source on GitHub ↗
(databaseName, originalTableName, ghostTableName string, sharedColumns []string, mappedSharedColumns []string, uniqueKey string, uniqueKeyColumns *ColumnList, rangeStartValues, rangeEndValues []string, rangeStartArgs, rangeEndArgs []interface{}, includeRangeStartValues bool, transactionalTable bool, noWait bool)

Source from the content-addressed store, hash-verified

261}
262
263func BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName string, sharedColumns []string, mappedSharedColumns []string, uniqueKey string, uniqueKeyColumns *ColumnList, rangeStartValues, rangeEndValues []string, rangeStartArgs, rangeEndArgs []interface{}, includeRangeStartValues bool, transactionalTable bool, noWait bool) (result string, explodedArgs []interface{}, err error) {
264 if len(sharedColumns) == 0 {
265 return "", explodedArgs, fmt.Errorf("got 0 shared columns in BuildRangeInsertQuery")
266 }
267 databaseName = EscapeName(databaseName)
268 originalTableName = EscapeName(originalTableName)
269 ghostTableName = EscapeName(ghostTableName)
270
271 mappedSharedColumns = duplicateNames(mappedSharedColumns)
272 for i := range mappedSharedColumns {
273 mappedSharedColumns[i] = EscapeName(mappedSharedColumns[i])
274 }
275 mappedSharedColumnsListing := strings.Join(mappedSharedColumns, ", ")
276
277 sharedColumns = duplicateNames(sharedColumns)
278 for i := range sharedColumns {
279 sharedColumns[i] = EscapeName(sharedColumns[i])
280 }
281 sharedColumnsListing := strings.Join(sharedColumns, ", ")
282
283 uniqueKey = EscapeName(uniqueKey)
284 transactionalClause := ""
285 if transactionalTable {
286 if noWait {
287 transactionalClause = "for share nowait"
288 } else {
289 transactionalClause = "lock in share mode"
290 }
291 }
292 var minRangeComparisonSign = GreaterThanComparisonSign
293 if includeRangeStartValues {
294 minRangeComparisonSign = GreaterThanOrEqualsComparisonSign
295 }
296
297 if uniqueKeyColumns.Len() == 2 {
298 return buildRangeInsertQueryTwoColumn(
299 databaseName, originalTableName, ghostTableName,
300 sharedColumnsListing, mappedSharedColumnsListing,
301 uniqueKey, uniqueKeyColumns,
302 rangeStartValues, rangeEndValues,
303 rangeStartArgs, rangeEndArgs,
304 minRangeComparisonSign, transactionalClause,
305 )
306 }
307 rangeStartComparison, rangeExplodedArgs, err := BuildRangeComparison(uniqueKeyColumns.Names(), rangeStartValues, rangeStartArgs, minRangeComparisonSign)
308 if err != nil {
309 return "", explodedArgs, err
310 }
311 explodedArgs = append(explodedArgs, rangeExplodedArgs...)
312 rangeEndComparison, rangeExplodedArgs, err := BuildRangeComparison(uniqueKeyColumns.Names(), rangeEndValues, rangeEndArgs, LessThanOrEqualsComparisonSign)
313 if err != nil {
314 return "", explodedArgs, err
315 }
316 explodedArgs = append(explodedArgs, rangeExplodedArgs...)
317 result = fmt.Sprintf(`
318 insert /* gh-ost %s.%s */ ignore
319 into
320 %s.%s

Calls 7

EscapeNameFunction · 0.85
duplicateNamesFunction · 0.85
BuildRangeComparisonFunction · 0.85
NamesMethod · 0.80
ErrorfMethod · 0.65
LenMethod · 0.45

Tested by 2

Used in the wild real call sites across dependent graphs

searching dependent graphs…