Skip to content

Commit

Permalink
dml : fix last insert id when autoid specified by user in first row. (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
AilinKid authored and winkyao committed Sep 4, 2019
1 parent 7d5971b commit 1806074
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 2 deletions.
5 changes: 3 additions & 2 deletions executor/insert_common.go
Original file line number Diff line number Diff line change
Expand Up @@ -494,8 +494,9 @@ func (e *InsertValues) adjustAutoIncrementDatum(d types.Datum, hasValue bool, c
if e.filterErr(err) != nil {
return types.Datum{}, errors.Trace(err)
}
// It's compatible with mysql. So it sets last insert id to the first row.
if e.rowCount == 1 {
// It's compatible with mysql setting the first allocated autoID to lastInsertID.
// Cause autoID may be specified by user, judge only the first row is not suitable.
if e.lastInsertID == 0 {
e.lastInsertID = uint64(recordID)
}
}
Expand Down
16 changes: 16 additions & 0 deletions executor/insert_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -278,6 +278,22 @@ func (s *testSuite) TestInsertWithAutoidSchema(c *C) {
`select * from t1 where id = 9`,
testkit.Rows(`9 9`),
},
// test last insert id
{
`insert into t1 values(3000, -1), (null, -2)`,
`select * from t1 where id = 3000`,
testkit.Rows(`3000 -1`),
},
{
`;`,
`select * from t1 where id = 3001`,
testkit.Rows(`3001 -2`),
},
{
`;`,
`select last_insert_id()`,
testkit.Rows(`3001`),
},
{
`insert into t2(id, n) values(1, 1)`,
`select * from t2 where id = 1`,
Expand Down

0 comments on commit 1806074

Please sign in to comment.