Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
8f2ad430
Commit
8f2ad430
authored
Sep 06, 2006
by
guilhem@gbichot3.local
Browse files
Options
Browse Files
Download
Plain Diff
Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-5.1-maint
into gbichot3.local:/home/mysql_src/mysql-5.1-2
parents
ba1bb7ba
04284f8c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
51 additions
and
15 deletions
+51
-15
mysql-test/r/innodb_mysql.result
mysql-test/r/innodb_mysql.result
+26
-4
mysql-test/t/innodb_mysql.test
mysql-test/t/innodb_mysql.test
+18
-3
sql/sql_insert.cc
sql/sql_insert.cc
+7
-8
No files found.
mysql-test/r/innodb_mysql.result
View file @
8f2ad430
...
@@ -432,22 +432,44 @@ ifnull( c,
...
@@ -432,22 +432,44 @@ ifnull( c,
0 ) + 1;
0 ) + 1;
select last_insert_id();
select last_insert_id();
last_insert_id()
last_insert_id()
1
2
select last_insert_id(0);
last_insert_id(0)
0
insert into t2 ( a ) values ( 6 ) on duplicate key update c =
ifnull( c,
0 ) + 1;
select last_insert_id();
last_insert_id()
0
select * from t2;
select * from t2;
k a c
k a c
1 6
1
1 6
2
2 7 NULL
2 7 NULL
insert ignore into t2 values (null,6,1),(10,8,1);
insert ignore into t2 values (null,6,1),(10,8,1);
select last_insert_id();
select last_insert_id();
last_insert_id()
last_insert_id()
1
0
insert ignore into t2 values (null,6,1),(null,8,1),(null,15,1),(null,20,1);
insert ignore into t2 values (null,6,1),(null,8,1),(null,15,1),(null,20,1);
select last_insert_id();
select last_insert_id();
last_insert_id()
last_insert_id()
11
11
select * from t2;
select * from t2;
k a c
k a c
1 6 1
1 6 2
2 7 NULL
10 8 1
11 15 1
12 20 1
insert into t2 ( a ) values ( 6 ) on duplicate key update c =
ifnull( c,
0 ) + 1, k=last_insert_id(k);
select last_insert_id();
last_insert_id()
1
select * from t2;
k a c
1 6 3
2 7 NULL
2 7 NULL
10 8 1
10 8 1
11 15 1
11 15 1
...
...
mysql-test/t/innodb_mysql.test
View file @
8f2ad430
...
@@ -369,8 +369,8 @@ insert into t1 values('aaa');
...
@@ -369,8 +369,8 @@ insert into t1 values('aaa');
drop
table
t1
;
drop
table
t1
;
# Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY
# Fix for BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY
# UPDATE":
now LAST_INSERT_ID() will return the id of the updated
# UPDATE":
if the row is updated, it's like a regular UPDATE:
#
row
.
#
LAST_INSERT_ID() is not affected
.
CREATE
TABLE
`t2`
(
CREATE
TABLE
`t2`
(
`k`
int
(
11
)
NOT
NULL
auto_increment
,
`k`
int
(
11
)
NOT
NULL
auto_increment
,
`a`
int
(
11
)
default
NULL
,
`a`
int
(
11
)
default
NULL
,
...
@@ -390,6 +390,12 @@ insert into t2 ( a ) values ( 6 ) on duplicate key update c =
...
@@ -390,6 +390,12 @@ insert into t2 ( a ) values ( 6 ) on duplicate key update c =
ifnull
(
c
,
ifnull
(
c
,
0
)
+
1
;
0
)
+
1
;
select
last_insert_id
();
select
last_insert_id
();
# test again when last_insert_id() is 0 initially
select
last_insert_id
(
0
);
insert
into
t2
(
a
)
values
(
6
)
on
duplicate
key
update
c
=
ifnull
(
c
,
0
)
+
1
;
select
last_insert_id
();
select
*
from
t2
;
select
*
from
t2
;
# Test of LAST_INSERT_ID() when autogenerated will fail:
# Test of LAST_INSERT_ID() when autogenerated will fail:
...
@@ -402,5 +408,14 @@ insert ignore into t2 values (null,6,1),(null,8,1),(null,15,1),(null,20,1);
...
@@ -402,5 +408,14 @@ insert ignore into t2 values (null,6,1),(null,8,1),(null,15,1),(null,20,1);
select
last_insert_id
();
select
last_insert_id
();
select
*
from
t2
;
select
*
from
t2
;
drop
table
t2
;
# Test of the workaround which enables people to know the id of the
# updated row in INSERT ON DUPLICATE KEY UPDATE, by using
# LAST_INSERT_ID(autoinc_col) in the UPDATE clause.
insert
into
t2
(
a
)
values
(
6
)
on
duplicate
key
update
c
=
ifnull
(
c
,
0
)
+
1
,
k
=
last_insert_id
(
k
);
select
last_insert_id
();
select
*
from
t2
;
drop
table
t2
;
sql/sql_insert.cc
View file @
8f2ad430
...
@@ -1145,16 +1145,15 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
...
@@ -1145,16 +1145,15 @@ int write_record(THD *thd, TABLE *table,COPY_INFO *info)
}
}
info
->
updated
++
;
info
->
updated
++
;
/*
/*
If ON DUP KEY UPDATE updates a row instead of inserting one, and
If ON DUP KEY UPDATE updates a row instead of inserting one, it's
there is an auto_increment column, then SELECT LAST_INSERT_ID()
like a regular UPDATE statement: it should not affect the value of a
returns the id of the updated row:
next SELECT LAST_INSERT_ID() or mysql_insert_id().
Except if LAST_INSERT_ID(#) was in the INSERT query, which is
handled separately by THD::arg_of_last_insert_id_function.
*/
*/
insert_id_for_cur_row
=
table
->
file
->
insert_id_for_cur_row
=
0
;
if
(
table
->
next_number_field
)
if
(
table
->
next_number_field
)
{
table
->
file
->
adjust_next_insert_id_after_explicit_value
(
table
->
next_number_field
->
val_int
());
longlong
field_val
=
table
->
next_number_field
->
val_int
();
thd
->
record_first_successful_insert_id_in_cur_stmt
(
field_val
);
table
->
file
->
adjust_next_insert_id_after_explicit_value
(
field_val
);
}
trg_error
=
(
table
->
triggers
&&
trg_error
=
(
table
->
triggers
&&
table
->
triggers
->
process_triggers
(
thd
,
TRG_EVENT_UPDATE
,
table
->
triggers
->
process_triggers
(
thd
,
TRG_EVENT_UPDATE
,
TRG_ACTION_AFTER
,
TRUE
));
TRG_ACTION_AFTER
,
TRUE
));
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment