Skip to content

Commit a91c386

Browse files
Only specify for share nowait on transactional tables.
1 parent 095fb26 commit a91c386

File tree

4 files changed

+16
-10
lines changed

4 files changed

+16
-10
lines changed

go/logic/applier.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@ func (this *Applier) ApplyIterationInsertQuery() (chunkSize int64, rowsAffected
630630
this.migrationContext.MigrationIterationRangeMinValues.AbstractValues(),
631631
this.migrationContext.MigrationIterationRangeMaxValues.AbstractValues(),
632632
this.migrationContext.GetIteration() == 0,
633+
this.migrationContext.IsTransactionalTable(),
633634
)
634635
if err != nil {
635636
return chunkSize, rowsAffected, duration, err

go/logic/applier_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ func (suite *ApplierTestSuite) TestApplyIterationInsertQueryFailsFastWhenSelecti
456456
migrationContext.DatabaseName = "test"
457457
migrationContext.OriginalTableName = "testing"
458458
migrationContext.ChunkSize = 10
459+
migrationContext.TableEngine = "innodb"
459460
migrationContext.SetConnectionConfig("innodb")
460461

461462
db, err := suite.getDb(ctx)

go/sql/builder.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func BuildRangePreparedComparison(columns *ColumnList, args []interface{}, compa
182182
return BuildRangeComparison(columns.Names(), values, args, comparisonSign)
183183
}
184184

185-
func BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName string, sharedColumns []string, mappedSharedColumns []string, uniqueKey string, uniqueKeyColumns *ColumnList, rangeStartValues, rangeEndValues []string, rangeStartArgs, rangeEndArgs []interface{}, includeRangeStartValues bool) (result string, explodedArgs []interface{}, err error) {
185+
func BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName string, sharedColumns []string, mappedSharedColumns []string, uniqueKey string, uniqueKeyColumns *ColumnList, rangeStartValues, rangeEndValues []string, rangeStartArgs, rangeEndArgs []interface{}, includeRangeStartValues bool, transactionalTable bool) (result string, explodedArgs []interface{}, err error) {
186186
if len(sharedColumns) == 0 {
187187
return "", explodedArgs, fmt.Errorf("Got 0 shared columns in BuildRangeInsertQuery")
188188
}
@@ -212,6 +212,10 @@ func BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName strin
212212
return "", explodedArgs, err
213213
}
214214
explodedArgs = append(explodedArgs, rangeExplodedArgs...)
215+
transactionalClause := ""
216+
if transactionalTable {
217+
transactionalClause = "for share nowait"
218+
}
215219
rangeEndComparison, rangeExplodedArgs, err := BuildRangeComparison(uniqueKeyColumns.Names(), rangeEndValues, rangeEndArgs, LessThanOrEqualsComparisonSign)
216220
if err != nil {
217221
return "", explodedArgs, err
@@ -229,18 +233,18 @@ func BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName strin
229233
force index (%s)
230234
where
231235
(%s and %s)
232-
for share nowait
236+
%s
233237
)`,
234238
databaseName, originalTableName, databaseName, ghostTableName, mappedSharedColumnsListing,
235239
sharedColumnsListing, databaseName, originalTableName, uniqueKey,
236-
rangeStartComparison, rangeEndComparison)
240+
rangeStartComparison, rangeEndComparison, transactionalClause)
237241
return result, explodedArgs, nil
238242
}
239243

240-
func BuildRangeInsertPreparedQuery(databaseName, originalTableName, ghostTableName string, sharedColumns []string, mappedSharedColumns []string, uniqueKey string, uniqueKeyColumns *ColumnList, rangeStartArgs, rangeEndArgs []interface{}, includeRangeStartValues bool) (result string, explodedArgs []interface{}, err error) {
244+
func BuildRangeInsertPreparedQuery(databaseName, originalTableName, ghostTableName string, sharedColumns []string, mappedSharedColumns []string, uniqueKey string, uniqueKeyColumns *ColumnList, rangeStartArgs, rangeEndArgs []interface{}, includeRangeStartValues bool, transactionalTable bool) (result string, explodedArgs []interface{}, err error) {
241245
rangeStartValues := buildColumnsPreparedValues(uniqueKeyColumns)
242246
rangeEndValues := buildColumnsPreparedValues(uniqueKeyColumns)
243-
return BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, mappedSharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, includeRangeStartValues)
247+
return BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, mappedSharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, includeRangeStartValues, transactionalTable)
244248
}
245249

246250
func BuildUniqueKeyRangeEndPreparedQueryViaOffset(databaseName, tableName string, uniqueKeyColumns *ColumnList, rangeStartArgs, rangeEndArgs []interface{}, chunkSize int64, includeRangeStartValues bool, hint string) (result string, explodedArgs []interface{}, err error) {

go/sql/builder_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ func TestBuildRangeInsertQuery(t *testing.T) {
171171
rangeStartArgs := []interface{}{3}
172172
rangeEndArgs := []interface{}{103}
173173

174-
query, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true)
174+
query, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true, true)
175175
require.NoError(t, err)
176176
expected := `
177177
insert /* gh-ost mydb.tbl */ ignore
@@ -199,7 +199,7 @@ func TestBuildRangeInsertQuery(t *testing.T) {
199199
rangeStartArgs := []interface{}{3, 17}
200200
rangeEndArgs := []interface{}{103, 117}
201201

202-
query, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true)
202+
query, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true, true)
203203
require.NoError(t, err)
204204
expected := `
205205
insert /* gh-ost mydb.tbl */ ignore
@@ -241,7 +241,7 @@ func TestBuildRangeInsertQueryRenameMap(t *testing.T) {
241241
rangeStartArgs := []interface{}{3}
242242
rangeEndArgs := []interface{}{103}
243243

244-
query, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, mappedSharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true)
244+
query, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, mappedSharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true, true)
245245
require.NoError(t, err)
246246
expected := `
247247
insert /* gh-ost mydb.tbl */ ignore
@@ -270,7 +270,7 @@ func TestBuildRangeInsertQueryRenameMap(t *testing.T) {
270270
rangeStartArgs := []interface{}{3, 17}
271271
rangeEndArgs := []interface{}{103, 117}
272272

273-
query, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, mappedSharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true)
273+
query, explodedArgs, err := BuildRangeInsertQuery(databaseName, originalTableName, ghostTableName, sharedColumns, mappedSharedColumns, uniqueKey, uniqueKeyColumns, rangeStartValues, rangeEndValues, rangeStartArgs, rangeEndArgs, true, true)
274274
require.NoError(t, err)
275275
expected := `
276276
insert /* gh-ost mydb.tbl */ ignore
@@ -305,7 +305,7 @@ func TestBuildRangeInsertPreparedQuery(t *testing.T) {
305305
rangeStartArgs := []interface{}{3, 17}
306306
rangeEndArgs := []interface{}{103, 117}
307307

308-
query, explodedArgs, err := BuildRangeInsertPreparedQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, true)
308+
query, explodedArgs, err := BuildRangeInsertPreparedQuery(databaseName, originalTableName, ghostTableName, sharedColumns, sharedColumns, uniqueKey, uniqueKeyColumns, rangeStartArgs, rangeEndArgs, true, true)
309309
require.NoError(t, err)
310310
expected := `
311311
insert /* gh-ost mydb.tbl */ ignore

0 commit comments

Comments
 (0)