Skip to content

Commit

Permalink
Merge branch 'main' into fulghum-0aaa10ab
Browse files Browse the repository at this point in the history
  • Loading branch information
fulghum authored Feb 7, 2024
2 parents 4f4a63b + 0428499 commit 5ea6761
Show file tree
Hide file tree
Showing 3 changed files with 99 additions and 2 deletions.
2 changes: 2 additions & 0 deletions go/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,8 @@ github.com/dolthub/sqllogictest/go v0.0.0-20201107003712-816f3ae12d81 h1:7/v8q9X
github.com/dolthub/sqllogictest/go v0.0.0-20201107003712-816f3ae12d81/go.mod h1:siLfyv2c92W1eN/R4QqG/+RjjX5W2+gCTRjZxBjI3TY=
github.com/dolthub/swiss v0.1.0 h1:EaGQct3AqeP/MjASHLiH6i4TAmgbG/c4rA6a1bzCOPc=
github.com/dolthub/swiss v0.1.0/go.mod h1:BeucyB08Vb1G9tumVN3Vp/pyY4AMUnr9p7Rz7wJ7kAQ=
github.com/dolthub/vitess v0.0.0-20240205203605-9e6c6d650813 h1:tGwsoLAMFQ+7FDEyIWOIJ1Vc/nptbFi0Fh7SQahB8ro=
github.com/dolthub/vitess v0.0.0-20240205203605-9e6c6d650813/go.mod h1:IwjNXSQPymrja5pVqmfnYdcy7Uv7eNJNBPK/MEh9OOw=
github.com/dolthub/vitess v0.0.0-20240206204925-6acf16fa777c h1:Zt23BHsxvPHGfpHV9k/FcsHqWZjfybyQQux2OLpRni8=
github.com/dolthub/vitess v0.0.0-20240206204925-6acf16fa777c/go.mod h1:IwjNXSQPymrja5pVqmfnYdcy7Uv7eNJNBPK/MEh9OOw=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
Expand Down
76 changes: 76 additions & 0 deletions go/libraries/doltcore/sqle/enginetest/dolt_queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -5204,6 +5204,82 @@ var DoltAutoIncrementTests = []queries.ScriptTest{
},
},
},
{
// Dropping the primary key constraint from a table implicitly truncates the table, which resets the
// auto_increment value for the table to 0. These tests assert that the correct auto_increment value is
// restored after the drop pk operation.
Name: "drop auto_increment primary key",
SetUpScript: []string{
"create table t (a int primary key auto_increment, b int, key (a))",
"call dolt_commit('-Am', 'empty table')",
"call dolt_branch('branch1')",
"call dolt_branch('branch2')",
"insert into t (b) values (1), (2)",
"call dolt_commit('-am', 'two values on main')",
"call dolt_checkout('branch1')",
"insert into t (b) values (3), (4)",
"call dolt_commit('-am', 'two values on branch1')",
"call dolt_checkout('branch2')",
"insert into t (b) values (5), (6)",
"call dolt_checkout('main')",
},
Assertions: []queries.ScriptTestAssertion{
{
Query: "alter table t drop primary key",
Expected: []sql.Row{{types.NewOkResult(0)}},
},
{
// highest value in any branch is 6
Query: "insert into t (b) values (7), (8)",
Expected: []sql.Row{{types.OkResult{RowsAffected: 2, InsertID: 7}}},
},
{
Query: "select * from t order by a",
Expected: []sql.Row{
{1, 1},
{2, 2},
{7, 7},
{8, 8},
},
},
{
Query: "call dolt_checkout('branch2')",
SkipResultsCheck: true,
},
{
Query: "insert into t (b) values (9), (10)",
Expected: []sql.Row{{types.OkResult{RowsAffected: 2, InsertID: 9}}},
},
{
Query: "select * from t order by a",
Expected: []sql.Row{
{5, 5},
{6, 6},
{9, 9},
{10, 10},
},
},
{
Query: "alter table t drop primary key",
Expected: []sql.Row{{types.NewOkResult(0)}},
},
{
Query: "insert into t (b) values (11), (12)",
Expected: []sql.Row{{types.OkResult{RowsAffected: 2, InsertID: 11}}},
},
{
Query: "select * from t order by a",
Expected: []sql.Row{
{5, 5},
{6, 6},
{9, 9},
{10, 10},
{11, 11},
{12, 12},
},
},
},
},
}

var DoltCherryPickTests = []queries.ScriptTest{
Expand Down
23 changes: 21 additions & 2 deletions go/libraries/doltcore/sqle/tables.go
Original file line number Diff line number Diff line change
Expand Up @@ -1556,6 +1556,16 @@ func (t *AlterableDoltTable) RewriteInserter(
})
}

// Grab the next auto_increment value before we call truncate, since truncate will delete the table
// and clear out the auto_increment tracking for this table.
var nextAutoIncValue uint64
if t.autoIncCol.AutoIncrement {
nextAutoIncValue, err = t.PeekNextAutoIncrementValue(ctx)
if err != nil {
return nil, err
}
}

// TODO: test for this when the table is auto increment and exists on another branch
dt, err = t.truncate(ctx, dt, newSch, sess)
if err != nil {
Expand Down Expand Up @@ -1590,6 +1600,14 @@ func (t *AlterableDoltTable) RewriteInserter(

newWs := ws.WithWorkingRoot(newRoot)

// Restore the next auto increment value, since it was cleared when we truncated the table
if t.autoIncCol.AutoIncrement {
err = t.AutoIncrementSetter(ctx).SetAutoIncrementValue(ctx, nextAutoIncValue)
if err != nil {
return nil, err
}
}

opts := dbState.WriteSession().GetOptions()
opts.ForeignKeyChecksDisabled = true
writeSession := writer.NewWriteSession(dt.Format(), newWs, ait, opts)
Expand Down Expand Up @@ -1945,8 +1963,9 @@ func validateSchemaChange(
}

func (t *AlterableDoltTable) adjustForeignKeysForDroppedPk(ctx *sql.Context, tbl string, root *doltdb.RootValue) (*doltdb.RootValue, error) {
if t.autoIncCol.AutoIncrement {
return nil, sql.ErrWrongAutoKey.New()
err := sql.ValidatePrimaryKeyDrop(ctx, t, t.PrimaryKeySchema())
if err != nil {
return nil, err
}

fkc, err := root.GetForeignKeyCollection(ctx)
Expand Down

0 comments on commit 5ea6761

Please sign in to comment.