(databaseName, originalTableName, ghostTableName string, sharedColumns []string, mappedSharedColumns []string, uniqueKey string, uniqueKeyColumns *ColumnList, rangeStartValues, rangeEndValues []string, rangeStartArgs, rangeEndArgs []interface{}, includeRangeStartValues bool, transactionalTable bool, noWait bool)
| 261 | } |
| 262 | |
| 263 | func 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 |
searching dependent graphs…