mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Fixed bug #28716.
The result of the CHECK OPTION condition evaluation over an updated record and records of merged tables was arbitrary and dependant on the order of records in the merged tables during the execution of SELECT statement. The CHECK OPTION expression was evaluated over expired record buffers (with arbitrary data in the fields). Rowids of tables used in the CHECK OPTION expression were added to temporary table rows. The multi_update::do_updates() method was modified to restore necessary record buffers before evaluation of the CHECK OPTION condition. sql/sql_class.h: Fixed bug #29716. The multi_update::unupdatable_check_opt_tables variable has been added. sql/sql_update.cc: Fixed bug #29716. Rowids of tables used in the CHECK OPTION expression were added to temporary table rows. The multi_update::do_updates() method was modified to restore necessary record buffers before evaluation of the CHECK OPTION condition. mysql-test/t/view.test: Updated test case for bug #28716. mysql-test/r/view.result: Updated test case for bug #28716.
This commit is contained in:
@ -3367,4 +3367,21 @@ SHOW CREATE VIEW v1;
|
||||
View Create View
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select cast(1.23456789 as decimal(8,0)) AS `col`
|
||||
DROP VIEW v1;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (b INT, c INT DEFAULT 0);
|
||||
INSERT INTO t1 (a) VALUES (1), (2);
|
||||
INSERT INTO t2 (b) VALUES (1), (2);
|
||||
CREATE VIEW v1 AS SELECT t2.b,t2.c FROM t1, t2
|
||||
WHERE t1.a=t2.b AND t2.b < 3 WITH CHECK OPTION;
|
||||
SELECT * FROM v1;
|
||||
b c
|
||||
1 0
|
||||
2 0
|
||||
UPDATE v1 SET c=1 WHERE b=1;
|
||||
SELECT * FROM v1;
|
||||
b c
|
||||
1 1
|
||||
2 0
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests.
|
||||
|
@ -3233,4 +3233,20 @@ CREATE VIEW v1 AS SELECT CAST(1.23456789 AS DECIMAL(8,0)) AS col;
|
||||
SHOW CREATE VIEW v1;
|
||||
DROP VIEW v1;
|
||||
|
||||
#
|
||||
# Bug #28716: CHECK OPTION expression is evaluated over expired record buffers
|
||||
# when VIEW is updated via temporary tables
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (b INT, c INT DEFAULT 0);
|
||||
INSERT INTO t1 (a) VALUES (1), (2);
|
||||
INSERT INTO t2 (b) VALUES (1), (2);
|
||||
CREATE VIEW v1 AS SELECT t2.b,t2.c FROM t1, t2
|
||||
WHERE t1.a=t2.b AND t2.b < 3 WITH CHECK OPTION;
|
||||
SELECT * FROM v1;
|
||||
UPDATE v1 SET c=1 WHERE b=1;
|
||||
SELECT * FROM v1;
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo End of 5.0 tests.
|
||||
|
Reference in New Issue
Block a user