Bug #4663 constant function in WHERE clause evaluated in view definition
| Submitted: | 21 Jul 2004 0:40 | Modified: | 27 Jul 2005 23:06 |
|---|---|---|---|
| Reporter: | Dean Ellis | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S3 (Non-critical) |
| Version: | 5.0.3 | OS: | |
| Assigned to: | Oleksandr Byelkin | CPU Architecture: | Any |
[21 Jul 2004 0:40]
Dean Ellis
[24 Aug 2004 17:47]
Oleksandr Byelkin
ChangeSet 1.1729 04/08/24 18:46:27 bell@sanja.is.com.ua +4 -0 items for functions which is converted to constants internally to support its correct printing added (BUG#4663)
[25 Aug 2004 8:59]
Oleksandr Byelkin
Thank you for bugreport! Patch is pushed into source repository.
[9 Jan 2005 23:08]
Dean Ellis
This previous test case was corrected, but the problem remains: DROP TABLE IF EXISTS t1; DROP VIEW IF EXISTS v1; CREATE TABLE t1 ( a varchar(50) ); CREATE VIEW v1 AS SELECT * FROM t1 WHERE a = CURRENT_USER(); SHOW CREATE VIEW v1; DROP TABLE t1; DROP VIEW v1;
[5 Jun 2005 7:57]
Stewart Smith
Also exists in 5.0.6 - and is (seemingly) for all functions. e.g. mysql> create table t1 (a timestamp default now()); Query OK, 0 rows affected (0.01 sec) mysql> create table t2 (b timestamp default now()); Query OK, 0 rows affected (0.02 sec) mysql> create view v1 as select * from t1,t2 where t1.a < now(); Query OK, 0 rows affected (0.01 sec) mysql> select * from v1; Empty set (0.01 sec) mysql> insert into t1 values(); Query OK, 1 row affected (0.01 sec) mysql> select * from v1; Empty set (0.02 sec) mysql> show create table v1; +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | View | Create View | +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | v1 | CREATE ALGORITHM=UNDEFINED VIEW `test`.`v1` AS select sql_no_cache `test`.`t1`.`a` AS `a`,`test`.`t2`.`b` AS `b` from `test`.`t1` join `test`.`t2` where (`test`.`t1`.`a` < 20050605174304) | +------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.01 sec) Note that 20050605174304 should be 'now()'
[17 Jun 2005 17:27]
Ted Kalbfleisch
I am using mysql 5.0.7 on Mac OS X 10.3
I need row level security, and am attempting to use views as described in the whitepaper
MySQL 5.0 Views MySQL 5.0 New Features Series – Part 3
I seem to be having the same problem as other users. I guess it has not been fixed in
release 5.0.7. Below is an example of how to reproduce what I did. I have two users,
root, and publicuser.
logged in as the root user
mysql> CREATE TABLE Employees ( name CHAR(20), wage DECIMAL(5,2) , note CHAR(20));
mysql> INSERT INTO Employees VALUES ('root@localhost',3.25,'reliable');
mysql> INSERT INTO Employees VALUES ('publicuser@localhost',4.00,'worthy');
mysql> create view employee_name_and_wage_2 as
-> select name, wage from employees
-> where
-> current_user = name;
mysql> grant select on employees_name_and_wage_2 to publicuser@localhost;
logging in as publicuser@localhost
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 13 to server version: 5.0.7-beta-standard
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use test
Database changed
mysql> select current_user;
+----------------------+
| current_user |
+----------------------+
| publicuser@localhost |
+----------------------+
1 row in set (0.00 sec)
mysql> select * from employee_name_and_wage_2;
+----------------+------+
| name | wage |
+----------------+------+
| root@localhost | 3.25 |
+----------------+------+
1 row in set (0.00 sec)
That last select should return the information for the publicuser.
[23 Jun 2005 16:48]
Oleksandr Byelkin
CURRENT_USER() bug is already fixed but now() in WHERE clause in comparison with integer value can be evaluated now
[23 Jun 2005 19:05]
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/internals/26382
[14 Jul 2005 9:25]
Oleksandr Byelkin
http://lists.mysql.com/internals/27055 (the same patch as for bug#7291)
[16 Jul 2005 5:41]
Oleksandr Byelkin
pushed to 5.0.10
[27 Jul 2005 23:06]
Mike Hillyer
Documented in the 5.0.10 changelog.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.044 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.