Commit 683ebcd1 authored by unknown's avatar unknown

Fixed bug#19789: REPLACE was allowed for a VIEW with CHECK OPTION enabled.

The st_lex::which_check_option_applicable() function controls for which 
statements WITH CHECK OPTION clause should be taken into account. REPLACE and
REPLACE_SELECT wasn't in the list which results in allowing REPLACE to insert
wrong rows in a such view.

The st_lex::which_check_option_applicable() now includes REPLACE and 
REPLACE_SELECT in the list of statements for which WITH CHECK OPTION clause is
applicable.


mysql-test/t/replace.test:
  Added test case for bug#19789: REPLACE was allowed for a VIEW with CHECK OPTION enabled.
mysql-test/r/replace.result:
  Added test case for bug#19789: REPLACE was allowed for a VIEW with CHECK OPTION enabled.
sql/sql_lex.h:
  Fixed bug#19789: REPLACE was allowed for a VIEW with CHECK OPTION enabled.
  The st_lex::which_check_option_applicable() now includes REPLACE and 
  REPLACE_SELECT in the list of statements for which WITH CHECK OPTION clause is
  applicable.
parent 63d63364
......@@ -24,3 +24,9 @@ a b
63 default_value
127 last
drop table t1;
CREATE TABLE t1 (f1 INT);
CREATE VIEW v1 AS SELECT f1 FROM t1 WHERE f1 = 0 WITH CHECK OPTION;
REPLACE INTO v1 (f1) VALUES (1);
ERROR HY000: CHECK OPTION failed 'test.v1'
DROP TABLE t1;
DROP VIEW v1;
......@@ -35,3 +35,13 @@ select * from t1;
drop table t1;
# End of 4.1 tests
#
# Bug#19789: REPLACE was allowed for a VIEW with CHECK OPTION enabled.
#
CREATE TABLE t1 (f1 INT);
CREATE VIEW v1 AS SELECT f1 FROM t1 WHERE f1 = 0 WITH CHECK OPTION;
--error 1369
REPLACE INTO v1 (f1) VALUES (1);
DROP TABLE t1;
DROP VIEW v1;
......@@ -1000,6 +1000,8 @@ typedef struct st_lex
case SQLCOM_UPDATE_MULTI:
case SQLCOM_INSERT:
case SQLCOM_INSERT_SELECT:
case SQLCOM_REPLACE:
case SQLCOM_REPLACE_SELECT:
case SQLCOM_LOAD:
return TRUE;
default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment