mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-26693 ROW_NUMBER is wrong upon INSERT or UPDATE on Spider table
in case of a bulk insert the server sends all rows to the engine, and then the engine replies that there was ER_DUP_ENTRY somewhere. the exact number of the row that caused the error is unknown.
This commit is contained in:
@ -1158,8 +1158,13 @@ values_loop_end:
|
|||||||
table->file->ha_release_auto_increment();
|
table->file->ha_release_auto_increment();
|
||||||
if (using_bulk_insert)
|
if (using_bulk_insert)
|
||||||
{
|
{
|
||||||
if (unlikely(table->file->ha_end_bulk_insert()) &&
|
/*
|
||||||
!error)
|
if my_error() wasn't called yet on some specific row, end_bulk_insert()
|
||||||
|
can still do it, but the error shouldn't be for any specific row number
|
||||||
|
*/
|
||||||
|
if (!error)
|
||||||
|
thd->get_stmt_da()->reset_current_row_for_warning(0);
|
||||||
|
if (unlikely(table->file->ha_end_bulk_insert()) && !error)
|
||||||
{
|
{
|
||||||
table->file->print_error(my_errno,MYF(0));
|
table->file->print_error(my_errno,MYF(0));
|
||||||
error=1;
|
error=1;
|
||||||
|
45
storage/spider/mysql-test/spider/r/error_row_number.result
Normal file
45
storage/spider/mysql-test/spider/r/error_row_number.result
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
#
|
||||||
|
# MDEV-26693 ROW_NUMBER is wrong upon INSERT or UPDATE on Spider table
|
||||||
|
#
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
child2_1
|
||||||
|
child2_2
|
||||||
|
child2_3
|
||||||
|
for child3
|
||||||
|
child3_1
|
||||||
|
child3_2
|
||||||
|
child3_3
|
||||||
|
connection child2_1;
|
||||||
|
create database auto_test_remote;
|
||||||
|
use auto_test_remote;
|
||||||
|
create table ta_r (id int primary key);
|
||||||
|
connection master_1;
|
||||||
|
create table spd (id int primary key) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
|
||||||
|
insert into spd values (1),(2),(1);
|
||||||
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
get diagnostics condition 1 @n = row_number;
|
||||||
|
select @n;
|
||||||
|
@n
|
||||||
|
0
|
||||||
|
delete from spd;
|
||||||
|
insert into spd values (1),(2),(3),(13);
|
||||||
|
update spd set id = id + 10;
|
||||||
|
ERROR 23000: Duplicate entry '13' for key 'PRIMARY'
|
||||||
|
get diagnostics condition 1 @n = row_number;
|
||||||
|
select @n;
|
||||||
|
@n
|
||||||
|
0
|
||||||
|
drop table spd;
|
||||||
|
connection child2_1;
|
||||||
|
drop database auto_test_remote;
|
||||||
|
connection master_1;
|
||||||
|
for master_1
|
||||||
|
for child2
|
||||||
|
child2_1
|
||||||
|
child2_2
|
||||||
|
child2_3
|
||||||
|
for child3
|
||||||
|
child3_1
|
||||||
|
child3_2
|
||||||
|
child3_3
|
37
storage/spider/mysql-test/spider/t/error_row_number.test
Normal file
37
storage/spider/mysql-test/spider/t/error_row_number.test
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
--echo #
|
||||||
|
--echo # MDEV-26693 ROW_NUMBER is wrong upon INSERT or UPDATE on Spider table
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source test_init.inc
|
||||||
|
--enable_result_log
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
--connection child2_1
|
||||||
|
create database auto_test_remote;
|
||||||
|
use auto_test_remote;
|
||||||
|
create table ta_r (id int primary key);
|
||||||
|
|
||||||
|
--connection master_1
|
||||||
|
evalp create table spd (id int primary key) $MASTER_1_ENGINE $MASTER_1_CHARSET $MASTER_1_COMMENT_2_1;
|
||||||
|
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
insert into spd values (1),(2),(1);
|
||||||
|
get diagnostics condition 1 @n = row_number;
|
||||||
|
select @n;
|
||||||
|
|
||||||
|
delete from spd;
|
||||||
|
insert into spd values (1),(2),(3),(13);
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
update spd set id = id + 10;
|
||||||
|
get diagnostics condition 1 @n = row_number;
|
||||||
|
select @n;
|
||||||
|
|
||||||
|
drop table spd;
|
||||||
|
--connection child2_1
|
||||||
|
drop database auto_test_remote;
|
||||||
|
--connection master_1
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
--source test_deinit.inc
|
Reference in New Issue
Block a user