mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
sql_base.cc:
Fixed bug #12382. INSERT statement effectively changed thd->set_query_id to 0, while SELECT statement changed it to 0. As a result the insert_fields function that expanded '*' was called with different values of thd->set_query_id for the query SELECT * FROM view depending on whether it was run after an INSERT or after a SELECT statement. This was corrected by restoring the old value of thd->set_query_id when returning from the function setup_fields where possible reset could occur. If the value of thd->set_query_id == 0 then the fields substituted instead of '*' were not registered as used for bitmaps used_keys. This caused selection of an invalid execution plan for the query SELECT * from <view>. view.result, view.test: Added a test case for bug #12382. mysql-test/t/view.test: Added a test case for bug #12382. mysql-test/r/view.result: Added a test case for bug #12382. sql/sql_base.cc: Fixed bug #12382. INSERT statement effectively changed thd->set_query_id to 0, while SELECT statement changed it to 0. As a result the insert_fields function that expanded '*' was called with different values of thd->set_query_id for the query SELECT * FROM view depending on whether it was run after an INSERT or after a SELECT statement. This was corrected by restoring the old value of thd->set_query_id when returning from the function setup_fields where possible reset could occur. If the value of thd->set_query_id == 0 then the fields substituted instead of '*' were not registered as used for bitmaps used_keys. This caused selection of an invalid execution plan for the query SELECT * from <view>.
This commit is contained in:
@ -2065,3 +2065,17 @@ pid GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1)
|
||||
2 c d
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (id int PRIMARY KEY, f varchar(255));
|
||||
CREATE VIEW v1 AS SELECT id, f FROM t1 WHERE id <= 2;
|
||||
INSERT INTO t1 VALUES (2, 'foo2');
|
||||
INSERT INTO t1 VALUES (1, 'foo1');
|
||||
SELECT * FROM v1;
|
||||
id f
|
||||
1 foo1
|
||||
2 foo2
|
||||
SELECT * FROM v1;
|
||||
id f
|
||||
1 foo1
|
||||
2 foo2
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
@ -1901,3 +1901,22 @@ SELECT pid,GROUP_CONCAT(CONCAT(fn,' ',ln) ORDER BY 1) FROM v1 GROUP BY pid;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
#
|
||||
# Test for bug #12382: SELECT * FROM view after INSERT command
|
||||
#
|
||||
|
||||
CREATE TABLE t1 (id int PRIMARY KEY, f varchar(255));
|
||||
CREATE VIEW v1 AS SELECT id, f FROM t1 WHERE id <= 2;
|
||||
INSERT INTO t1 VALUES (2, 'foo2');
|
||||
INSERT INTO t1 VALUES (1, 'foo1');
|
||||
|
||||
SELECT * FROM v1;
|
||||
SELECT * FROM v1;
|
||||
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user