Bug #25931 VIEW ignores CHECK OPTION when updated against a JOIN clause

Submitted: 29 Jan 2007 22:06 Modified: 26 Feb 2007 20:57
Reporter: Tobias Asplund Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Views Severity:S3 (Non-critical)
Version:5.0.33 OS:MacOS (Mac OS X, linux)
Assigned to: Igor Babaev CPU Architecture:Any

[29 Jan 2007 22:06] Tobias Asplund
Description:
CHECK OPTION only seems to check the WHERE clause, not the ON clause of a JOIN.
It's possible to update a column in the ON clause so that the row(s) disappear from the VIEW despite the CHECK OPTION.

How to repeat:
mysql> CREATE TABLE t1 ( a INT );
Query OK, 0 rows affected (0.26 sec)

mysql> CREATE TABLE t2 ( b INT );
Query OK, 0 rows affected (0.01 sec)

mysql> INSERT INTO t1 VALUES (1), (2);
Query OK, 2 rows affected (0.07 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> INSERT INTO t2 VALUES (1), (2);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> CREATE VIEW v1 AS SELECT t2.b FROM t1 JOIN t2 ON t1.a = t2.b WITH CHECK OPTION;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM v1;
+------+
| b    |
+------+
|    1 | 
|    2 | 
+------+
2 rows in set (0.00 sec)

mysql> UPDATE v1 SET b = 3 ;     
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> SELECT * FROM v1;
Empty set (0.00 sec)
[30 Jan 2007 7:58] Sveta Smirnova
According to http://dev.mysql.com/doc/refman/5.0/en/create-view.html it is expected behaviour:

The WITH CHECK OPTION clause can be given for an updatable view to prevent inserts or updates to rows except those for which the WHERE clause in the select_statement is true.
[31 Jan 2007 20:20] Tobias Asplund
ok, let's rewrite the view...

mysql> CREATE VIEW v1 AS SELECT t2.b FROM t1 JOIN t2 WHERE t1.a = t2.b WITH CHECK OPTION;
Query OK, 0 rows affected (0.02 sec)

mysql> SELECT * FROM v1;
+------+
| b    |
+------+
|    1 | 
|    2 | 
+------+
2 rows in set (0.00 sec)

mysql> update v1 set b=3;
Query OK, 2 rows affected (0.07 sec)
Rows matched: 2  Changed: 2  Warnings: 0

The view is now created with the comparison in the WHERE :)
[31 Jan 2007 22:19] Sveta Smirnova
Thank you for the additional information.

Verified as described on Linux using last BK sources. All versions are affected.
[31 Jan 2007 22:19] Sveta Smirnova
test case

Attachment: bug25931.test (application/octet-stream, text), 474 bytes.

[6 Feb 2007 20:30] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/19440

ChangeSet@1.2402, 2007-02-06 12:34:10-08:00, igor@olga.mysql.com +3 -0
  Fixed bug #25931.
  View check option clauses were ignored for updates of multi-table
  views when the updates could not be performed on fly and the rows
  to update had to be put into temporary tables first.
[6 Feb 2007 20:56] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/19444

ChangeSet@1.2402, 2007-02-06 12:29:45-08:00, igor@olga.mysql.com +3 -0
  Fixed bug #25931.
  View check option clauses were ignored for updates of multi-table
  views when the updates could not be performed on fly and the rows
  to update had to be put into temporary tables first.
[7 Feb 2007 20:17] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/19513

ChangeSet@1.2402, 2007-02-07 12:21:22-08:00, igor@olga.mysql.com +3 -0
  Fixed bug #25931.
  View check option clauses were ignored for updates of multi-table
  views when the updates could not be performed on fly and the rows
  to update had to be put into temporary tables first.
[7 Feb 2007 22:38] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/19523

ChangeSet@1.2405, 2007-02-07 14:41:57-08:00, igor@olga.mysql.com +3 -0
  Fixed bug #25931.
  View check option clauses were ignored for updates of multi-table
  views when the updates could not be performed on fly and the rows
  to update had to be put into temporary tables first.
[14 Feb 2007 10:32] Igor Babaev
The fix has been pushed to 5.0.36 and 5.1.16-beta.
[26 Feb 2007 20:57] Paul DuBois
Noted in 5.0.36, 5.1.16 changelogs.

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.048 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.