Loading mysql-test/r/ps.result +18 −0 Original line number Diff line number Diff line Loading @@ -1475,6 +1475,24 @@ i 1 DEALLOCATE PREPARE stmt; DROP TABLE t1, t2; CREATE TABLE t1 (i INT); CREATE VIEW v1 AS SELECT * FROM t1; INSERT INTO t1 VALUES (1), (2); SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1); i 1 PREPARE stmt FROM "SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1)"; EXECUTE stmt; i 1 EXECUTE stmt; i 1 DEALLOCATE PREPARE stmt; DROP VIEW v1; DROP TABLE t1; DROP PROCEDURE IF EXISTS p1; flush status; prepare sq from 'show status like "slow_queries"'; Loading mysql-test/t/ps.test +23 −0 Original line number Diff line number Diff line Loading @@ -1513,6 +1513,29 @@ DEALLOCATE PREPARE stmt; DROP TABLE t1, t2; # # BUG#20327: Marking of a wrong field leads to a wrong result on select with # view, prepared statement and subquery. # CREATE TABLE t1 (i INT); CREATE VIEW v1 AS SELECT * FROM t1; INSERT INTO t1 VALUES (1), (2); let $query = SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1); eval $query; eval PREPARE stmt FROM "$query"; # Statement execution should return '1'. EXECUTE stmt; # Check re-execution. EXECUTE stmt; DEALLOCATE PREPARE stmt; DROP VIEW v1; DROP TABLE t1; # # BUG#21856: Prepared Statments: crash if bad create # Loading sql/sql_base.cc +6 −0 Original line number Diff line number Diff line Loading @@ -3308,6 +3308,12 @@ find_field_in_tables(THD *thd, Item_ident *item, { if (found == WRONG_GRANT) return (Field*) 0; /* Only views fields should be marked as dependent, not an underlying fields. */ if (!table_ref->belong_to_view) { SELECT_LEX *current_sel= thd->lex->current_select; SELECT_LEX *last_select= table_ref->select_lex; Loading Loading
mysql-test/r/ps.result +18 −0 Original line number Diff line number Diff line Loading @@ -1475,6 +1475,24 @@ i 1 DEALLOCATE PREPARE stmt; DROP TABLE t1, t2; CREATE TABLE t1 (i INT); CREATE VIEW v1 AS SELECT * FROM t1; INSERT INTO t1 VALUES (1), (2); SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1); i 1 PREPARE stmt FROM "SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1)"; EXECUTE stmt; i 1 EXECUTE stmt; i 1 DEALLOCATE PREPARE stmt; DROP VIEW v1; DROP TABLE t1; DROP PROCEDURE IF EXISTS p1; flush status; prepare sq from 'show status like "slow_queries"'; Loading
mysql-test/t/ps.test +23 −0 Original line number Diff line number Diff line Loading @@ -1513,6 +1513,29 @@ DEALLOCATE PREPARE stmt; DROP TABLE t1, t2; # # BUG#20327: Marking of a wrong field leads to a wrong result on select with # view, prepared statement and subquery. # CREATE TABLE t1 (i INT); CREATE VIEW v1 AS SELECT * FROM t1; INSERT INTO t1 VALUES (1), (2); let $query = SELECT t1.i FROM t1 JOIN v1 ON t1.i = v1.i WHERE EXISTS (SELECT * FROM t1 WHERE v1.i = 1); eval $query; eval PREPARE stmt FROM "$query"; # Statement execution should return '1'. EXECUTE stmt; # Check re-execution. EXECUTE stmt; DEALLOCATE PREPARE stmt; DROP VIEW v1; DROP TABLE t1; # # BUG#21856: Prepared Statments: crash if bad create # Loading
sql/sql_base.cc +6 −0 Original line number Diff line number Diff line Loading @@ -3308,6 +3308,12 @@ find_field_in_tables(THD *thd, Item_ident *item, { if (found == WRONG_GRANT) return (Field*) 0; /* Only views fields should be marked as dependent, not an underlying fields. */ if (!table_ref->belong_to_view) { SELECT_LEX *current_sel= thd->lex->current_select; SELECT_LEX *last_select= table_ref->select_lex; Loading