Bug #73886 bug #16832 only fixed in 5.0, fix never merged to later versions?

Submitted: 11 Sep 2014 10:39 Modified: 12 Sep 2014 5:13
Reporter: Hartmut Holzgraefe Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Information schema Severity:S3 (Non-critical)
Version:mysql 5.6.20; anything 5.x with x>0?, 5.1.73, 5.5.41, 5.6.22 OS:Any
Assigned to: CPU Architecture:Any

[11 Sep 2014 10:39] Hartmut Holzgraefe
Description:
http://bugs.mysql.com/bug.php?id=16832

"ALGORITHM missing from "information_schema.views"

The 5.0 solution back then was not to add an ALGORITHM column as requested, but to add the ALGORITHM as comment to the I_S.VIEWS.VIEW_DEFINITION column as e.g.

  /* ALGORITHM=MERGE */ select `test`.`t1`.`id` AS `id` from `test`.`t1` 

I can verify that these comments are shown by MySQL 5.0.45, but not e.g. MySQL 5.1.67 or MySQL 5.6.20 ...

... and I also think that a new ALGORITHM column would have been the better solution as with the comment approach parsing of the VIEW_DEFINITION result would be necessary to extract the ALGORITHM instead of just saying

  SELECT ALGORITHM FROM I_S.VIEWS WHERE ...

How to repeat:
mysql> drop table t1;
Query OK, 0 rows affected (0.00 sec)

mysql> create table t1(id int primary key);
Query OK, 0 rows affected (0.05 sec)

mysql> create algorithm=merge view v1 as select * from t1;
ERROR 1050 (42S01): Table 'v1' already exists
mysql> drop view v1;
Query OK, 0 rows affected (0.00 sec)

mysql> drop view v2;
ERROR 1051 (42S02): Unknown table 'v2'
mysql> create algorithm=merge view v1 as select * from t1;
Query OK, 0 rows affected (0.04 sec)

mysql> create algorithm=temptable view v2 as select * from t1;
Query OK, 0 rows affected (0.04 sec)

mysql> select * from information_schema.views
    -> ;
+---------------+--------------+------------+--------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION                                  | CHECK_OPTION | IS_UPDATABLE | DEFINER        | SECURITY_TYPE | CHARACTER_SET_CLIENT | COLLATION_CONNECTION |
+---------------+--------------+------------+--------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+
| NULL          | test         | v1         | select `test`.`t1`.`id` AS `id` from `test`.`t1` | NONE         | YES          | root@localhost | DEFINER       | utf8                 | utf8_general_ci      |
| NULL          | test         | v2         | select `test`.`t1`.`id` AS `id` from `test`.`t1` | NONE         | NO           | root@localhost | DEFINER       | utf8                 | utf8_general_ci      |
+---------------+--------------+------------+--------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+
2 rows in set (0.01 sec)

Both views only differ by their name in the INFORMATION_SCHEMA.VIEWS table, the difference in the ALGORITHM used is invisible when relying on INFORMATION_SCHEMA unless using a 5.0.x version ... (with x>=25)

Suggested fix:
Add an ALGORITHM column to the VIEWS table as originally requested
[12 Sep 2014 5:13] MySQL Verification Team
Hello Hartmut,

Thank you for the report.

Thanks,
Umesh
[12 Sep 2014 5:15] MySQL Verification Team
// 5.0.96 - includes /* ALGORITHM.. in VIEW_DEFINITION column

mysql> show variables like '%version%';
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| protocol_version        | 10                           |
| version                 | 5.0.96-log                   |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | unknown-linux-gnu            |
+-------------------------+------------------------------+
5 rows in set (0.00 sec)

mysql> use test
Database changed
mysql> drop table if exists t1;
ERROR 1051 (42S02): Unknown table 't1'
mysql> create table t1(id int primary key);
Query OK, 0 rows affected (0.00 sec)

mysql> create algorithm=merge view v1 as select * from t1;
Query OK, 0 rows affected (0.00 sec)

mysql> create algorithm=temptable view v2 as select * from t1;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from information_schema.views;
+---------------+--------------+------------+----------------------------------------------------------------------------+--------------+--------------+----------------+---------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION                                                            | CHECK_OPTION | IS_UPDATABLE | DEFINER        | SECURITY_TYPE |
+---------------+--------------+------------+----------------------------------------------------------------------------+--------------+--------------+----------------+---------------+
| NULL          | test         | v1         | /* ALGORITHM=MERGE */ select `test`.`t1`.`id` AS `id` from `test`.`t1`     | NONE         | YES          | root@localhost | DEFINER       |
| NULL          | test         | v2         | /* ALGORITHM=TEMPTABLE */ select `test`.`t1`.`id` AS `id` from `test`.`t1` | NONE         | NO           | root@localhost | DEFINER       |
+---------------+--------------+------------+----------------------------------------------------------------------------+--------------+--------------+----------------+---------------+
2 rows in set (0.01 sec)

mysql>

// 5.1.73, 5.5.41, 5.6.22 - /* ALGORITHM.. is missing in VIEW_DEFINITION column

mysql> use test
Database changed
mysql>
mysql> drop table if exists t1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> create table t1(id int primary key);
Query OK, 0 rows affected (0.10 sec)

mysql> create algorithm=merge view v1 as select * from t1;
Query OK, 0 rows affected (0.07 sec)

mysql> create algorithm=temptable view v2 as select * from t1;
Query OK, 0 rows affected (0.07 sec)

mysql>  select * from information_schema.views;
+---------------+--------------+------------+--------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+
| TABLE_CATALOG | TABLE_SCHEMA | TABLE_NAME | VIEW_DEFINITION                                  | CHECK_OPTION | IS_UPDATABLE | DEFINER        | SECURITY_TYPE | CHARACTER_SET_CLIENT | COLLATION_CONNECTION |
+---------------+--------------+------------+--------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+
| NULL          | test         | v1         | select `test`.`t1`.`id` AS `id` from `test`.`t1` | NONE         | YES          | root@localhost | DEFINER       | latin1               | latin1_swedish_ci    |
| NULL          | test         | v2         | select `test`.`t1`.`id` AS `id` from `test`.`t1` | NONE         | NO           | root@localhost | DEFINER       | latin1               | latin1_swedish_ci    |
+---------------+--------------+------------+--------------------------------------------------+--------------+--------------+----------------+---------------+----------------------+----------------------+
2 rows in set (0.01 sec)

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

Page generated in 0.039 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.