mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-19535 sql_mode=ORACLE: 'SELECT INTO @var FOR UPDATE' does not lock the table
This commit is contained in:
26
mysql-test/suite/compat/oracle/r/update_innodb.result
Normal file
26
mysql-test/suite/compat/oracle/r/update_innodb.result
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#
|
||||||
|
# MDEV-19535 sql_mode=ORACLE: 'SELECT INTO @var FOR UPDATE' does not lock the table
|
||||||
|
#
|
||||||
|
SET sql_mode='ORACLE';
|
||||||
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
START TRANSACTION;
|
||||||
|
SELECT a AS a_con1 FROM t1 INTO @a FOR UPDATE;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
|
||||||
|
connect con2,localhost,root,,;
|
||||||
|
SET sql_mode='ORACLE';
|
||||||
|
START TRANSACTION;
|
||||||
|
SELECT a AS a_con2 FROM t1 INTO @a FOR UPDATE;;
|
||||||
|
connection default;
|
||||||
|
UPDATE t1 SET a=a+100;
|
||||||
|
COMMIT;
|
||||||
|
connection con2;
|
||||||
|
Warnings:
|
||||||
|
Warning 1287 '<select expression> INTO <destination>;' is deprecated and will be removed in a future release. Please use 'SELECT <select list> INTO <destination> FROM...' instead
|
||||||
|
SELECT a AS con2 FROM t1;
|
||||||
|
con2
|
||||||
|
101
|
||||||
|
COMMIT;
|
||||||
|
connection default;
|
||||||
|
DROP TABLE t1;
|
28
mysql-test/suite/compat/oracle/t/update_innodb.test
Normal file
28
mysql-test/suite/compat/oracle/t/update_innodb.test
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-19535 sql_mode=ORACLE: 'SELECT INTO @var FOR UPDATE' does not lock the table
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
SET sql_mode='ORACLE';
|
||||||
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY) engine=innodb;
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
START TRANSACTION;
|
||||||
|
SELECT a AS a_con1 FROM t1 INTO @a FOR UPDATE;
|
||||||
|
|
||||||
|
--connect(con2,localhost,root,,)
|
||||||
|
SET sql_mode='ORACLE';
|
||||||
|
START TRANSACTION;
|
||||||
|
--send SELECT a AS a_con2 FROM t1 INTO @a FOR UPDATE;
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
UPDATE t1 SET a=a+100;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--connection con2
|
||||||
|
--reap
|
||||||
|
SELECT a AS con2 FROM t1;
|
||||||
|
COMMIT;
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
DROP TABLE t1;
|
@ -9470,6 +9470,12 @@ bool LEX::select_finalize(st_select_lex_unit *expr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool LEX::select_finalize(st_select_lex_unit *expr, Lex_select_lock l)
|
||||||
|
{
|
||||||
|
return expr->set_lock_to_the_last_select(l) ||
|
||||||
|
select_finalize(expr);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
"IN" and "EXISTS" subselect can appear in two statement types:
|
"IN" and "EXISTS" subselect can appear in two statement types:
|
||||||
|
|
||||||
|
@ -4452,6 +4452,7 @@ public:
|
|||||||
LEX_CSTRING *alias);
|
LEX_CSTRING *alias);
|
||||||
bool parsed_create_view(SELECT_LEX_UNIT *unit, int check);
|
bool parsed_create_view(SELECT_LEX_UNIT *unit, int check);
|
||||||
bool select_finalize(st_select_lex_unit *expr);
|
bool select_finalize(st_select_lex_unit *expr);
|
||||||
|
bool select_finalize(st_select_lex_unit *expr, Lex_select_lock l);
|
||||||
void relink_hack(st_select_lex *select_lex);
|
void relink_hack(st_select_lex *select_lex);
|
||||||
|
|
||||||
bool stmt_install_plugin(const DDL_options_st &opt,
|
bool stmt_install_plugin(const DDL_options_st &opt,
|
||||||
|
@ -9122,9 +9122,7 @@ select:
|
|||||||
opt_procedure_or_into
|
opt_procedure_or_into
|
||||||
{
|
{
|
||||||
Lex->pop_select();
|
Lex->pop_select();
|
||||||
if ($1->set_lock_to_the_last_select($3))
|
if (Lex->select_finalize($1, $3))
|
||||||
MYSQL_YYABORT;
|
|
||||||
if (Lex->select_finalize($1))
|
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| with_clause query_expression_body
|
| with_clause query_expression_body
|
||||||
@ -9139,9 +9137,7 @@ select:
|
|||||||
Lex->pop_select();
|
Lex->pop_select();
|
||||||
$2->set_with_clause($1);
|
$2->set_with_clause($1);
|
||||||
$1->attach_to($2->first_select());
|
$1->attach_to($2->first_select());
|
||||||
if ($2->set_lock_to_the_last_select($4))
|
if (Lex->select_finalize($2, $4))
|
||||||
MYSQL_YYABORT;
|
|
||||||
if (Lex->select_finalize($2))
|
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
@ -9239,7 +9239,7 @@ select:
|
|||||||
opt_procedure_or_into
|
opt_procedure_or_into
|
||||||
{
|
{
|
||||||
Lex->pop_select();
|
Lex->pop_select();
|
||||||
if (Lex->select_finalize($1))
|
if (Lex->select_finalize($1, $3))
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
| with_clause query_expression_body
|
| with_clause query_expression_body
|
||||||
@ -9254,7 +9254,7 @@ select:
|
|||||||
Lex->pop_select();
|
Lex->pop_select();
|
||||||
$2->set_with_clause($1);
|
$2->set_with_clause($1);
|
||||||
$1->attach_to($2->first_select());
|
$1->attach_to($2->first_select());
|
||||||
if (Lex->select_finalize($2))
|
if (Lex->select_finalize($2, $4))
|
||||||
MYSQL_YYABORT;
|
MYSQL_YYABORT;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
Reference in New Issue
Block a user