mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
VIEW
two TABLE_LIST copy eliminated include/mysqld_error.h: errors of view libmysqld/Makefile.am: new view file mysql-test/r/connect.result: SHOW TABLE show type of table mysql-test/r/ctype_recoding.result: SHOW TABLE show type of table mysql-test/r/drop.result: SHOW TABLE show type of table mysql-test/r/grant.result: new two privileges (CRETEA|SHOW VIEW) mysql-test/r/lowercase_table.result: SHOW TABLE show type of table mysql-test/r/ps_1general.result: SHOW TABLE show type of table mysql-test/r/rename.result: SHOW TABLE show type of table mysql-test/r/rpl000009.result: SHOW TABLE show type of table mysql-test/r/rpl_error_ignored_table.result: SHOW TABLE show type of table mysql-test/r/select.result: SHOW TABLE show type of table mysql-test/r/system_mysql_db.result: SHOW TABLE show type of table new two privileges (CRETEA|SHOW VIEW) mysql-test/t/system_mysql_db_fix.test: removing all system tables scripts/mysql_fix_privilege_tables.sql: new two privileges (CRETEA|SHOW VIEW) sql/Makefile.am: new VIEW related file sql/ha_myisammrg.cc: two TABLE_LIST copy eliminated sql/item.cc: VIEW sql/item.h: VIEW sql/item_subselect.cc: VIEW sql/item_subselect.h: VIEW sql/lex.h: VIEW sql/lock.cc: VIEW sql/mysql_priv.h: VIEW sql/mysqld.cc: VIEW new parameter - sql_updatable_view_key sql/opt_sum.cc: two TABLE_LIST copy eliminated sql/set_var.cc: new parameter - sql_updatable_view_key sql/share/czech/errmsg.txt: errors messages of views sql/share/danish/errmsg.txt: errors messages of views sql/share/dutch/errmsg.txt: errors messages of views sql/share/english/errmsg.txt: errors messages of views sql/share/estonian/errmsg.txt: errors messages of views sql/share/french/errmsg.txt: errors messages of views sql/share/german/errmsg.txt: errors messages of views sql/share/greek/errmsg.txt: errors messages of views sql/share/hungarian/errmsg.txt: errors messages of views sql/share/italian/errmsg.txt: errors messages of views sql/share/japanese/errmsg.txt: errors messages of views sql/share/korean/errmsg.txt: errors messages of views sql/share/norwegian-ny/errmsg.txt: errors messages of views sql/share/norwegian/errmsg.txt: errors messages of views sql/share/polish/errmsg.txt: errors messages of views sql/share/portuguese/errmsg.txt: errors messages of views sql/share/romanian/errmsg.txt: errors messages of views sql/share/russian/errmsg.txt: errors messages of views sql/share/serbian/errmsg.txt: errors messages of views sql/share/slovak/errmsg.txt: errors messages of views sql/share/spanish/errmsg.txt: errors messages of views sql/share/swedish/errmsg.txt: errors messages of views sql/share/ukrainian/errmsg.txt: errors messages of views sql/slave.cc: two TABLE_LIST copy eliminated sql/sp.cc: VIEW sql/sql_acl.cc: VIEW sql/sql_acl.h: VIEW sql/sql_base.cc: VIEW sql/sql_cache.cc: two TABLE_LIST copy eliminated sql/sql_class.h: VIEW sql/sql_db.cc: two TABLE_LIST copy eliminated sql/sql_delete.cc: VIEW sql/sql_derived.cc: VIEW sql/sql_handler.cc: two TABLE_LIST copy eliminated sql/sql_help.cc: two TABLE_LIST copy eliminated sql/sql_insert.cc: VIEW sql/sql_lex.cc: VIEW sql/sql_lex.h: VIEW sql/sql_load.cc: VIEW sql/sql_olap.cc: VIEW sql/sql_parse.cc: two TABLE_LIST copy eliminated VIEW sql/sql_prepare.cc: VIEW sql/sql_rename.cc: two TABLE_LIST copy eliminated sql/sql_select.cc: VIEW sql/sql_show.cc: VIEW sql/sql_table.cc: VIEW sql/sql_union.cc: VIEW sql/sql_update.cc: VIEW sql/sql_yacc.yy: VIEW sql/table.cc: VIEW sql/table.h: VIEW sql/tztime.cc: two TABLE_LIST copy eliminated sql/unireg.h: VIEW tests/client_test.c: VIEW
This commit is contained in:
@ -1,67 +1,67 @@
|
||||
show tables;
|
||||
Tables_in_mysql
|
||||
columns_priv
|
||||
db
|
||||
func
|
||||
help_category
|
||||
help_keyword
|
||||
help_relation
|
||||
help_topic
|
||||
host
|
||||
proc
|
||||
tables_priv
|
||||
time_zone
|
||||
time_zone_leap_second
|
||||
time_zone_name
|
||||
time_zone_transition
|
||||
time_zone_transition_type
|
||||
user
|
||||
Tables_in_mysql Type
|
||||
columns_priv table
|
||||
db table
|
||||
func table
|
||||
help_category table
|
||||
help_keyword table
|
||||
help_relation table
|
||||
help_topic table
|
||||
host table
|
||||
proc table
|
||||
tables_priv table
|
||||
time_zone table
|
||||
time_zone_leap_second table
|
||||
time_zone_name table
|
||||
time_zone_transition table
|
||||
time_zone_transition_type table
|
||||
user table
|
||||
show tables;
|
||||
Tables_in_test
|
||||
Tables_in_test Type
|
||||
grant ALL on *.* to test@localhost identified by "gambling";
|
||||
grant ALL on *.* to test@127.0.0.1 identified by "gambling";
|
||||
show tables;
|
||||
Tables_in_mysql
|
||||
columns_priv
|
||||
db
|
||||
func
|
||||
help_category
|
||||
help_keyword
|
||||
help_relation
|
||||
help_topic
|
||||
host
|
||||
proc
|
||||
tables_priv
|
||||
time_zone
|
||||
time_zone_leap_second
|
||||
time_zone_name
|
||||
time_zone_transition
|
||||
time_zone_transition_type
|
||||
user
|
||||
Tables_in_mysql Type
|
||||
columns_priv table
|
||||
db table
|
||||
func table
|
||||
help_category table
|
||||
help_keyword table
|
||||
help_relation table
|
||||
help_topic table
|
||||
host table
|
||||
proc table
|
||||
tables_priv table
|
||||
time_zone table
|
||||
time_zone_leap_second table
|
||||
time_zone_name table
|
||||
time_zone_transition table
|
||||
time_zone_transition_type table
|
||||
user table
|
||||
show tables;
|
||||
Tables_in_test
|
||||
Tables_in_test Type
|
||||
update mysql.user set password=old_password("gambling2") where user=_binary"test";
|
||||
flush privileges;
|
||||
set password=old_password('gambling3');
|
||||
show tables;
|
||||
Tables_in_mysql
|
||||
columns_priv
|
||||
db
|
||||
func
|
||||
help_category
|
||||
help_keyword
|
||||
help_relation
|
||||
help_topic
|
||||
host
|
||||
proc
|
||||
tables_priv
|
||||
time_zone
|
||||
time_zone_leap_second
|
||||
time_zone_name
|
||||
time_zone_transition
|
||||
time_zone_transition_type
|
||||
user
|
||||
Tables_in_mysql Type
|
||||
columns_priv table
|
||||
db table
|
||||
func table
|
||||
help_category table
|
||||
help_keyword table
|
||||
help_relation table
|
||||
help_topic table
|
||||
host table
|
||||
proc table
|
||||
tables_priv table
|
||||
time_zone table
|
||||
time_zone_leap_second table
|
||||
time_zone_name table
|
||||
time_zone_transition table
|
||||
time_zone_transition_type table
|
||||
user table
|
||||
show tables;
|
||||
Tables_in_test
|
||||
Tables_in_test Type
|
||||
delete from mysql.user where user=_binary"test";
|
||||
flush privileges;
|
||||
|
@ -45,8 +45,8 @@ CREATE TABLE `
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> CHAR(32) CHARACTER SET koi8r NOT NULL COMMENT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>"
|
||||
) COMMENT "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Tables_in_test Type
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> table
|
||||
SHOW CREATE TABLE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
Table Create Table
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CREATE TABLE `<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>` (
|
||||
@ -57,8 +57,8 @@ Field Type Null Key Default Extra
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> char(32)
|
||||
SET CHARACTER SET cp1251;
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Tables_in_test Type
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> table
|
||||
SHOW CREATE TABLE <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>;
|
||||
Table Create Table
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CREATE TABLE `<60><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>` (
|
||||
@ -69,8 +69,8 @@ Field Type Null Key Default Extra
|
||||
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> char(32)
|
||||
SET CHARACTER SET utf8;
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
таблица
|
||||
Tables_in_test Type
|
||||
таблица table
|
||||
SHOW CREATE TABLE таблица;
|
||||
Table Create Table
|
||||
таблица CREATE TABLE `таблица` (
|
||||
@ -93,14 +93,14 @@ SET CHARACTER SET koi8r;
|
||||
CREATE DATABASE <20><><EFBFBD><EFBFBD>;
|
||||
USE <20><><EFBFBD><EFBFBD>;
|
||||
SHOW TABLES;
|
||||
Tables_in_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Tables_in_<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Type
|
||||
SHOW TABLES IN <20><><EFBFBD><EFBFBD>;
|
||||
Tables_in_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Tables_in_<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Type
|
||||
SET CHARACTER SET cp1251;
|
||||
SHOW TABLES;
|
||||
Tables_in_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Tables_in_<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Type
|
||||
SHOW TABLES IN <20><><EFBFBD><EFBFBD>;
|
||||
Tables_in_<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Tables_in_<EFBFBD><EFBFBD><EFBFBD><EFBFBD> Type
|
||||
SET CHARACTER SET koi8r;
|
||||
DROP DATABASE <20><><EFBFBD><EFBFBD>;
|
||||
SET NAMES koi8r;
|
||||
|
@ -52,6 +52,6 @@ ERROR HY000: Can't execute the query because you have a conflicting read lock
|
||||
unlock tables;
|
||||
create table t1(n int);
|
||||
show tables;
|
||||
Tables_in_test
|
||||
t1
|
||||
Tables_in_test Type
|
||||
t1 table
|
||||
drop table t1;
|
||||
|
@ -10,8 +10,8 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3
|
||||
GRANT SELECT ON `mysqltest`.* TO 'mysqltest_1'@'localhost'
|
||||
grant delete on mysqltest.* to mysqltest_1@localhost;
|
||||
select * from mysql.user where user="mysqltest_1";
|
||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections
|
||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N SPECIFIED EDH-RSA-DES-CBC3-SHA 0 0 0
|
||||
Host User Password Select_priv Insert_priv Update_priv Delete_priv Create_priv Drop_priv Reload_priv Shutdown_priv Process_priv File_priv Grant_priv References_priv Index_priv Alter_priv Show_db_priv Super_priv Create_tmp_table_priv Lock_tables_priv Execute_priv Repl_slave_priv Repl_client_priv Create_view_priv Show_view_priv ssl_type ssl_cipher x509_issuer x509_subject max_questions max_updates max_connections
|
||||
localhost mysqltest_1 N N N N N N N N N N N N N N N N N N N N N 0 0 0
|
||||
show grants for mysqltest_1@localhost;
|
||||
Grants for mysqltest_1@localhost
|
||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost' REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA'
|
||||
@ -62,7 +62,7 @@ revoke LOCK TABLES, ALTER on mysqltest.* from mysqltest_1@localhost;
|
||||
show grants for mysqltest_1@localhost;
|
||||
Grants for mysqltest_1@localhost
|
||||
GRANT USAGE ON *.* TO 'mysqltest_1'@'localhost'
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, CREATE TEMPORARY TABLES ON `mysqltest`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
|
||||
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, CREATE TEMPORARY TABLES, CREATE VIEW, SHOW VIEW ON `mysqltest`.* TO 'mysqltest_1'@'localhost' WITH GRANT OPTION
|
||||
revoke all privileges on mysqltest.* from mysqltest_1@localhost;
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
flush privileges;
|
||||
|
@ -24,9 +24,9 @@ RENAME TABLE T1 TO T2;
|
||||
ALTER TABLE T2 ADD new_col int not null;
|
||||
ALTER TABLE T2 RENAME T3;
|
||||
show tables like 't_';
|
||||
Tables_in_test (t_)
|
||||
t3
|
||||
t4
|
||||
Tables_in_test (t_) Type
|
||||
t3 table
|
||||
t4 table
|
||||
drop table t3,t4;
|
||||
create table t1 (a int);
|
||||
select count(*) from T1;
|
||||
@ -57,4 +57,4 @@ select C.a, c.a from t1 c, t2 C;
|
||||
ERROR 42000: Not unique table/alias: 'C'
|
||||
drop table t1, t2;
|
||||
show tables;
|
||||
Tables_in_test
|
||||
Tables_in_test Type
|
||||
|
@ -252,8 +252,8 @@ mysql
|
||||
test
|
||||
prepare stmt4 from ' show tables from test like ''t2%'' ';
|
||||
execute stmt4;
|
||||
Tables_in_test (t2%)
|
||||
t2
|
||||
Tables_in_test (t2%) Type
|
||||
t2 table
|
||||
prepare stmt4 from ' show columns from t2 from test like ''a%'' ';
|
||||
execute stmt4;
|
||||
Field Type Null Key Default Extra
|
||||
|
@ -19,10 +19,10 @@ Got one of the listed errors
|
||||
rename table t3 to t4, t2 to t3, t1 to t2, t4 to t2;
|
||||
Got one of the listed errors
|
||||
show tables like "t_";
|
||||
Tables_in_test (t_)
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
Tables_in_test (t_) Type
|
||||
t1 table
|
||||
t2 table
|
||||
t3 table
|
||||
rename table t3 to t1, t2 to t3, t1 to t2, t4 to t1;
|
||||
Got one of the listed errors
|
||||
rename table t3 to t4, t5 to t3, t1 to t2, t4 to t1;
|
||||
@ -44,12 +44,12 @@ CREATE TABLE t3 (a int);
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
RENAME TABLE t1 TO t2, t3 to t4;
|
||||
show tables;
|
||||
Tables_in_test
|
||||
t1
|
||||
t3
|
||||
Tables_in_test Type
|
||||
t1 table
|
||||
t3 table
|
||||
UNLOCK TABLES;
|
||||
show tables;
|
||||
Tables_in_test
|
||||
t2
|
||||
t4
|
||||
Tables_in_test Type
|
||||
t2 table
|
||||
t4 table
|
||||
drop table t2, t4;
|
||||
|
@ -73,25 +73,25 @@ mysqltest3
|
||||
test
|
||||
use mysqltest2;
|
||||
show tables;
|
||||
Tables_in_mysqltest2
|
||||
t1
|
||||
t3
|
||||
Tables_in_mysqltest2 Type
|
||||
t1 table
|
||||
t3 table
|
||||
select * from t1;
|
||||
n s
|
||||
1 original foo.t1
|
||||
use mysqltest3;
|
||||
show tables;
|
||||
Tables_in_mysqltest3
|
||||
t1
|
||||
Tables_in_mysqltest3 Type
|
||||
t1 table
|
||||
select * from t1;
|
||||
n s
|
||||
1 original foo2.t1
|
||||
use mysqltest;
|
||||
show tables;
|
||||
Tables_in_mysqltest
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
Tables_in_mysqltest Type
|
||||
t1 table
|
||||
t2 table
|
||||
t3 table
|
||||
select * from mysqltest.t1;
|
||||
n s
|
||||
1 one test
|
||||
|
@ -11,7 +11,7 @@ show slave status;
|
||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master
|
||||
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 273 # # master-bin.000001 Yes Yes test.t3,test.t1,test.t2 0 0 273 # None 0 No #
|
||||
show tables like 't1';
|
||||
Tables_in_test (t1)
|
||||
Tables_in_test (t1) Type
|
||||
drop table t1;
|
||||
select get_lock('crash_lock%20C', 10);
|
||||
get_lock('crash_lock%20C', 10)
|
||||
|
@ -2021,15 +2021,15 @@ select period as "Nuvarande period" from t1 group by "Nuvarande period" limit 1;
|
||||
Nuvarande period
|
||||
9410
|
||||
show tables;
|
||||
Tables_in_test
|
||||
t1
|
||||
t2
|
||||
t3
|
||||
t4
|
||||
Tables_in_test Type
|
||||
t1 table
|
||||
t2 table
|
||||
t3 table
|
||||
t4 table
|
||||
show tables from test like "s%";
|
||||
Tables_in_test (s%)
|
||||
Tables_in_test (s%) Type
|
||||
show tables from test like "t?";
|
||||
Tables_in_test (t?)
|
||||
Tables_in_test (t?) Type
|
||||
show full columns from t2;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
auto int(11) NULL PRI NULL auto_increment select,insert,update,references
|
||||
|
@ -1,21 +1,21 @@
|
||||
show tables;
|
||||
Tables_in_db
|
||||
columns_priv
|
||||
db
|
||||
func
|
||||
help_category
|
||||
help_keyword
|
||||
help_relation
|
||||
help_topic
|
||||
host
|
||||
proc
|
||||
tables_priv
|
||||
time_zone
|
||||
time_zone_leap_second
|
||||
time_zone_name
|
||||
time_zone_transition
|
||||
time_zone_transition_type
|
||||
user
|
||||
Tables_in_db Type
|
||||
columns_priv table
|
||||
db table
|
||||
func table
|
||||
help_category table
|
||||
help_keyword table
|
||||
help_relation table
|
||||
help_topic table
|
||||
host table
|
||||
proc table
|
||||
tables_priv table
|
||||
time_zone table
|
||||
time_zone_leap_second table
|
||||
time_zone_name table
|
||||
time_zone_transition table
|
||||
time_zone_transition_type table
|
||||
user table
|
||||
show create table db;
|
||||
Table Create Table
|
||||
db CREATE TABLE `db` (
|
||||
@ -34,6 +34,8 @@ db CREATE TABLE `db` (
|
||||
`Alter_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Create_tmp_table_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Lock_tables_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Create_view_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Show_view_priv` enum('N','Y') NOT NULL default 'N',
|
||||
PRIMARY KEY (`Host`,`Db`,`User`),
|
||||
KEY `User` (`User`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Database privileges'
|
||||
@ -54,6 +56,8 @@ host CREATE TABLE `host` (
|
||||
`Alter_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Create_tmp_table_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Lock_tables_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Create_view_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Show_view_priv` enum('N','Y') NOT NULL default 'N',
|
||||
PRIMARY KEY (`Host`,`Db`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Host privileges; Merged with database privileges'
|
||||
show create table user;
|
||||
@ -83,6 +87,8 @@ user CREATE TABLE `user` (
|
||||
`Execute_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Repl_slave_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Repl_client_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Create_view_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`Show_view_priv` enum('N','Y') NOT NULL default 'N',
|
||||
`ssl_type` enum('','ANY','X509','SPECIFIED') NOT NULL default '',
|
||||
`ssl_cipher` blob NOT NULL,
|
||||
`x509_issuer` blob NOT NULL,
|
||||
|
943
mysql-test/r/view.result
Normal file
943
mysql-test/r/view.result
Normal file
@ -0,0 +1,943 @@
|
||||
drop table if exists t1,t2;
|
||||
drop view if exists v1,v2,v3,v4,v5,v6;
|
||||
drop database if exists mysqltest;
|
||||
use test;
|
||||
create view v1 (c,d) as select a,b from t1;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
create temporary table t1 (a int, b int);
|
||||
create view v1 (c) as select b+1 from t1;
|
||||
ERROR HY000: View's SELECT contains a temporary table 't1'
|
||||
drop table t1;
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
|
||||
create view v1 (c,d) as select a,b+@@global.max_user_connections from t1;
|
||||
ERROR HY000: View's SELECT contains a variable or parameter
|
||||
create view v1 (c) as select b+1 from t1;
|
||||
select c from v1;
|
||||
c
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
11
|
||||
create temporary table t1 (a int, b int);
|
||||
select * from t1;
|
||||
a b
|
||||
select c from v1;
|
||||
c
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
11
|
||||
show create table v1;
|
||||
Table Create Table
|
||||
v1 CREATE VIEW test.v1 AS select (test.t1.b + 1) AS `c` from test.t1
|
||||
show create view v1;
|
||||
Table Create Table
|
||||
v1 CREATE VIEW test.v1 AS select (test.t1.b + 1) AS `c` from test.t1
|
||||
show create view t1;
|
||||
ERROR HY000: 'test.t1' is not VIEW
|
||||
drop table t1;
|
||||
select a from v1;
|
||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||
select v1.a from v1;
|
||||
ERROR 42S22: Unknown column 'v1.a' in 'field list'
|
||||
select b from v1;
|
||||
ERROR 42S22: Unknown column 'b' in 'field list'
|
||||
select v1.b from v1;
|
||||
ERROR 42S22: Unknown column 'v1.b' in 'field list'
|
||||
explain extended select c from v1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 5
|
||||
Warnings:
|
||||
Note 1003 select (test.t1.b + 1) AS `c` from test.v1
|
||||
create algorithm=temptable view v2 (c) as select b+1 from t1;
|
||||
show create table v2;
|
||||
Table Create Table
|
||||
v2 CREATE ALGORITHM=TMPTABLE VIEW test.v2 AS select (test.t1.b + 1) AS `c` from test.t1
|
||||
select c from v2;
|
||||
c
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
11
|
||||
explain extended select c from v2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 5
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 5
|
||||
Warnings:
|
||||
Note 1003 select v2.c AS `c` from test.v2
|
||||
create view v3 (c) as select a+1 from v1;
|
||||
ERROR 42S22: Unknown column 'a' in 'field list'
|
||||
create view v3 (c) as select b+1 from v1;
|
||||
ERROR 42S22: Unknown column 'b' in 'field list'
|
||||
create view v3 (c) as select c+1 from v1;
|
||||
select c from v3;
|
||||
c
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
12
|
||||
explain extended select c from v3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 5
|
||||
Warnings:
|
||||
Note 1003 select ((test.t1.b + 1) + 1) AS `c` from test.v3
|
||||
create algorithm=temptable view v4 (c) as select c+1 from v2;
|
||||
select c from v4;
|
||||
c
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
12
|
||||
explain extended select c from v4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 5
|
||||
2 SUBQUERY <derived3> ALL NULL NULL NULL NULL 5
|
||||
3 SUBQUERY t1 ALL NULL NULL NULL NULL 5
|
||||
Warnings:
|
||||
Note 1003 select v4.c AS `c` from test.v4
|
||||
create view v5 (c) as select c+1 from v2;
|
||||
select c from v5;
|
||||
c
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
12
|
||||
explain extended select c from v5;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived3> ALL NULL NULL NULL NULL 5
|
||||
3 SUBQUERY t1 ALL NULL NULL NULL NULL 5
|
||||
Warnings:
|
||||
Note 1003 select (v2.c + 1) AS `c` from test.v5
|
||||
create algorithm=temptable view v6 (c) as select c+1 from v1;
|
||||
select c from v6;
|
||||
c
|
||||
4
|
||||
5
|
||||
6
|
||||
7
|
||||
12
|
||||
explain extended select c from v6;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 5
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 5
|
||||
Warnings:
|
||||
Note 1003 select v6.c AS `c` from test.v6
|
||||
show tables;
|
||||
Tables_in_test Type
|
||||
t1 table
|
||||
v1 view
|
||||
v2 view
|
||||
v3 view
|
||||
v4 view
|
||||
v5 view
|
||||
v6 view
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 MyISAM 9 Fixed 5 9 45 38654705663 1024 0 NULL # # NULL latin1_swedish_ci NULL
|
||||
v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
|
||||
v2 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
|
||||
v3 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
|
||||
v4 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
|
||||
v5 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
|
||||
v6 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
|
||||
drop view v1,v2,v3,v4,v5,v6;
|
||||
create view v1 (c,d,e,f) as select a,b,
|
||||
a in (select a+2 from t1), a = all (select a from t1) from t1;
|
||||
create view v2 as select c, d from v1;
|
||||
select * from v1;
|
||||
c d e f
|
||||
1 2 0 0
|
||||
1 3 0 0
|
||||
2 4 0 0
|
||||
2 5 0 0
|
||||
3 10 1 0
|
||||
select * from v2;
|
||||
c d
|
||||
1 2
|
||||
1 3
|
||||
2 4
|
||||
2 5
|
||||
3 10
|
||||
create view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a = all (select a from t1) from t1;
|
||||
ERROR 42S01: Table 'v1' already exists
|
||||
create or replace view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a = all (select a from t1) from t1;
|
||||
drop view v2;
|
||||
alter view v2 as select c, d from v1;
|
||||
ERROR 42S02: Table 'test.v2' doesn't exist
|
||||
create or replace view v2 as select c, d from v1;
|
||||
alter view v1 (c,d) as select a,max(b) from t1 group by a;
|
||||
select * from v1;
|
||||
c d
|
||||
1 3
|
||||
2 5
|
||||
3 10
|
||||
select * from v2;
|
||||
c d
|
||||
1 3
|
||||
2 5
|
||||
3 10
|
||||
grant create view on test.* to test@localhost;
|
||||
show grants for test@localhost;
|
||||
Grants for test@localhost
|
||||
GRANT USAGE ON *.* TO 'test'@'localhost'
|
||||
GRANT CREATE VIEW ON `test`.* TO 'test'@'localhost'
|
||||
revoke create view on test.* from test@localhost;
|
||||
show grants for test@localhost;
|
||||
Grants for test@localhost
|
||||
GRANT USAGE ON *.* TO 'test'@'localhost'
|
||||
drop view v100;
|
||||
ERROR 42S02: Unknown table 'test.v100'
|
||||
drop view t1;
|
||||
ERROR HY000: 'test.t1' is not VIEW
|
||||
drop table v1;
|
||||
ERROR 42S02: Unknown table 'v1'
|
||||
drop view v1,v2;
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3);
|
||||
create view v1 (a) as select a+1 from t1;
|
||||
create view v2 (a) as select a-1 from t1;
|
||||
select * from t1 natural left join v1;
|
||||
a a
|
||||
1 NULL
|
||||
2 2
|
||||
3 3
|
||||
select * from v2 natural left join t1;
|
||||
a a
|
||||
0 NULL
|
||||
1 1
|
||||
2 2
|
||||
select * from v2 natural left join v1;
|
||||
a a
|
||||
0 NULL
|
||||
1 NULL
|
||||
2 2
|
||||
drop view v1, v2;
|
||||
drop table t1;
|
||||
create database mysqltest;
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create table mysqltest.t2 (a int, b int);
|
||||
grant select on mysqltest.t1 to mysqltest_1@localhost;
|
||||
grant create view,select on test.* to mysqltest_1@localhost;
|
||||
create view v1 as select * from mysqltest.t1;
|
||||
create view mysqltest.v2 as select * from mysqltest.t1;
|
||||
ERROR 42000: create view command denied to user 'mysqltest_1'@'localhost' for table 'v2'
|
||||
create view v2 as select * from mysqltest.t2;
|
||||
ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for table 't2'
|
||||
revoke all privileges on mysqltest.t1 from mysqltest_1@localhost;
|
||||
revoke all privileges on test.* from mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
drop view test.v1;
|
||||
create database mysqltest;
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create view mysqltest.v1 (c,d) as select a+1,b+1 from mysqltest.t1;
|
||||
grant select (c) on mysqltest.v1 to mysqltest_1@localhost;
|
||||
select c from mysqltest.v1;
|
||||
c
|
||||
select d from mysqltest.v1;
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'd' in table 'v1'
|
||||
revoke all privileges on mysqltest.v1 from mysqltest_1@localhost;
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
drop database mysqltest;
|
||||
create database mysqltest;
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create algorithm=temptable view mysqltest.v1 (c,d) as select a+1,b+1 from mysqltest.t1;
|
||||
grant select (c) on mysqltest.v1 to mysqltest_1@localhost;
|
||||
select c from mysqltest.v1;
|
||||
c
|
||||
select d from mysqltest.v1;
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'd' in table 'v1'
|
||||
revoke all privileges on mysqltest.v1 from mysqltest_1@localhost;
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
drop database mysqltest;
|
||||
create database mysqltest;
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create table mysqltest.t2 (a int, b int);
|
||||
create view mysqltest.v1 (c,d) as select a+1,b+1 from mysqltest.t1;
|
||||
create algorithm=temptable view mysqltest.v2 (c,d) as select a+1,b+1 from mysqltest.t1;
|
||||
create view mysqltest.v3 (c,d) as select a+1,b+1 from mysqltest.t2;
|
||||
create algorithm=temptable view mysqltest.v4 (c,d) as select a+1,b+1 from mysqltest.t2;
|
||||
grant select on mysqltest.v1 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.v2 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.v3 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.v4 to mysqltest_1@localhost;
|
||||
select c from mysqltest.v1;
|
||||
c
|
||||
select c from mysqltest.v2;
|
||||
c
|
||||
select c from mysqltest.v3;
|
||||
c
|
||||
select c from mysqltest.v4;
|
||||
c
|
||||
show columns from mysqltest.v1;
|
||||
Field Type Null Key Default Extra
|
||||
c bigint(20) YES NULL
|
||||
d bigint(20) YES NULL
|
||||
show columns from mysqltest.v2;
|
||||
Field Type Null Key Default Extra
|
||||
c bigint(20) YES NULL
|
||||
d bigint(20) YES NULL
|
||||
explain select c from mysqltest.v1;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
show create table mysqltest.v1;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
explain select c from mysqltest.v2;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
show create table mysqltest.v2;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
explain select c from mysqltest.v3;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
show create table mysqltest.v3;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
explain select c from mysqltest.v4;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
show create table mysqltest.v4;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
grant select on mysqltest.t1 to mysqltest_1@localhost;
|
||||
explain select c from mysqltest.v1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
show create table mysqltest.v1;
|
||||
Table Create Table
|
||||
v1 CREATE VIEW mysqltest.v1 AS select (mysqltest.t1.a + 1) AS `c`,(mysqltest.t1.b + 1) AS `d` from mysqltest.t1
|
||||
explain select c from mysqltest.v2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 0 const row not found
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||||
show create table mysqltest.v2;
|
||||
Table Create Table
|
||||
v2 CREATE ALGORITHM=TMPTABLE VIEW mysqltest.v2 AS select (mysqltest.t1.a + 1) AS `c`,(mysqltest.t1.b + 1) AS `d` from mysqltest.t1
|
||||
explain select c from mysqltest.v3;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
show create table mysqltest.v3;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
explain select c from mysqltest.v4;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
show create table mysqltest.v4;
|
||||
ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
|
||||
grant show view on mysqltest.* to mysqltest_1@localhost;
|
||||
explain select c from mysqltest.v1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 system NULL NULL NULL NULL 0 const row not found
|
||||
show create table mysqltest.v1;
|
||||
Table Create Table
|
||||
v1 CREATE VIEW mysqltest.v1 AS select (mysqltest.t1.a + 1) AS `c`,(mysqltest.t1.b + 1) AS `d` from mysqltest.t1
|
||||
explain select c from mysqltest.v2;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 0 const row not found
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||||
show create table mysqltest.v2;
|
||||
Table Create Table
|
||||
v2 CREATE ALGORITHM=TMPTABLE VIEW mysqltest.v2 AS select (mysqltest.t1.a + 1) AS `c`,(mysqltest.t1.b + 1) AS `d` from mysqltest.t1
|
||||
explain select c from mysqltest.v3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t2 system NULL NULL NULL NULL 0 const row not found
|
||||
show create table mysqltest.v3;
|
||||
Table Create Table
|
||||
v3 CREATE VIEW mysqltest.v3 AS select (mysqltest.t2.a + 1) AS `c`,(mysqltest.t2.b + 1) AS `d` from mysqltest.t2
|
||||
explain select c from mysqltest.v4;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> system NULL NULL NULL NULL 0 const row not found
|
||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL no matching row in const table
|
||||
show create table mysqltest.v4;
|
||||
Table Create Table
|
||||
v4 CREATE ALGORITHM=TMPTABLE VIEW mysqltest.v4 AS select (mysqltest.t2.a + 1) AS `c`,(mysqltest.t2.b + 1) AS `d` from mysqltest.t2
|
||||
revoke all privileges on mysqltest.* from mysqltest_1@localhost;
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
drop database mysqltest;
|
||||
set GLOBAL query_cache_size=1355776;
|
||||
flush status;
|
||||
create table t1 (a int, b int);
|
||||
create view v1 (c,d) as select sql_no_cache a,b from t1;
|
||||
create view v2 (c,d) as select a+rand(),b from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 0
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
select * from v1;
|
||||
c d
|
||||
select * from v2;
|
||||
c d
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 0
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
select * from v1;
|
||||
c d
|
||||
select * from v2;
|
||||
c d
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 0
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
drop view v1,v2;
|
||||
set query_cache_type=demand;
|
||||
flush status;
|
||||
create view v1 (c,d) as select sql_cache a,b from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 0
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
select * from v1;
|
||||
c d
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 1
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
select * from t1;
|
||||
a b
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 1
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 0
|
||||
select * from v1;
|
||||
c d
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 1
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 1
|
||||
select * from t1;
|
||||
a b
|
||||
show status like "Qcache_queries_in_cache";
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
show status like "Qcache_inserts";
|
||||
Variable_name Value
|
||||
Qcache_inserts 1
|
||||
show status like "Qcache_hits";
|
||||
Variable_name Value
|
||||
Qcache_hits 1
|
||||
drop view v1;
|
||||
set query_cache_type=default;
|
||||
drop table t1;
|
||||
set GLOBAL query_cache_size=default;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3), (1), (2), (3);
|
||||
create view v1 as select distinct a from t1;
|
||||
select * from v1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
explain select * from v1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 3
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 6 Using temporary
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
1
|
||||
2
|
||||
3
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
create view v1 as select distinct a from t1 WITH CHECK OPTION;
|
||||
create view v2 as select distinct a from t1 WITH CASCADED CHECK OPTION;
|
||||
create view v3 as select distinct a from t1 WITH LOCAL CHECK OPTION;
|
||||
drop view v3 RESTRICT;
|
||||
drop view v2 CASCADE;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
|
||||
create view v1 (c) as select b+1 from t1;
|
||||
select test.c from v1 test;
|
||||
c
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
11
|
||||
create algorithm=temptable view v2 (c) as select b+1 from t1;
|
||||
select test.c from v2 test;
|
||||
c
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
11
|
||||
select test1.* from v1 test1, v2 test2 where test1.c=test2.c;
|
||||
c
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
11
|
||||
select test2.* from v1 test1, v2 test2 where test1.c=test2.c;
|
||||
c
|
||||
3
|
||||
4
|
||||
5
|
||||
6
|
||||
11
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3), (4);
|
||||
create view v1 as select a+1 from t1 order by 1 desc limit 2;
|
||||
select * from v1;
|
||||
a+1
|
||||
5
|
||||
4
|
||||
explain select * from v1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2
|
||||
2 SUBQUERY t1 ALL NULL NULL NULL NULL 4 Using filesort
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3), (4);
|
||||
create view v1 as select a+1 from t1;
|
||||
create table t2 select * from v1;
|
||||
show columns from t2;
|
||||
Field Type Null Key Default Extra
|
||||
a+1 bigint(17) YES NULL
|
||||
select * from t2;
|
||||
a+1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
drop view v1;
|
||||
drop table t1,t2;
|
||||
create table t1 (a int, b int, primary key(a));
|
||||
insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
update v1 set c=a+c;
|
||||
ERROR HY000: Column 'c' is not updatable
|
||||
update v2 set a=a+c;
|
||||
ERROR HY000: The target table v2 of the UPDATE is not updatable
|
||||
update v1 set a=a+c;
|
||||
select * from v1;
|
||||
a c
|
||||
13 3
|
||||
24 4
|
||||
35 5
|
||||
46 6
|
||||
61 11
|
||||
select * from t1;
|
||||
a b
|
||||
13 2
|
||||
24 3
|
||||
35 4
|
||||
46 5
|
||||
61 10
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
create table t1 (a int, b int, primary key(a));
|
||||
insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
|
||||
create table t2 (x int);
|
||||
insert into t2 values (10), (20);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
update t2,v1 set v1.c=v1.a+v1.c where t2.x=v1.a;
|
||||
ERROR HY000: Column 'c' is not updatable
|
||||
update t2,v2 set v2.a=v2.v2.a+c where t2.x=v2.a;
|
||||
ERROR HY000: The target table v2 of the UPDATE is not updatable
|
||||
update t2,v1 set v1.a=v1.a+v1.c where t2.x=v1.a;
|
||||
select * from v1;
|
||||
a c
|
||||
13 3
|
||||
24 4
|
||||
30 5
|
||||
40 6
|
||||
50 11
|
||||
select * from t1;
|
||||
a b
|
||||
13 2
|
||||
24 3
|
||||
30 4
|
||||
40 5
|
||||
50 10
|
||||
drop table t1,t2;
|
||||
drop view v1,v2;
|
||||
create database mysqltest;
|
||||
create table mysqltest.t1 (a int, b int, primary key(a));
|
||||
insert into mysqltest.t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
|
||||
create table mysqltest.t2 (x int);
|
||||
insert into mysqltest.t2 values (3), (4), (5), (6);
|
||||
create view mysqltest.v1 (a,c) as select a, b+1 from mysqltest.t1;
|
||||
create view mysqltest.v2 (a,c) as select a, b from mysqltest.t1;
|
||||
create view mysqltest.v3 (a,c) as select a, b+1 from mysqltest.t1;
|
||||
grant update (a) on mysqltest.v2 to mysqltest_1@localhost;
|
||||
grant update on mysqltest.v1 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.* to mysqltest_1@localhost;
|
||||
use mysqltest;
|
||||
update t2,v1 set v1.a=v1.a+v1.c where t2.x=v1.c;
|
||||
select * from t1;
|
||||
a b
|
||||
13 2
|
||||
24 3
|
||||
35 4
|
||||
46 5
|
||||
50 10
|
||||
update v1 set a=a+c;
|
||||
select * from t1;
|
||||
a b
|
||||
16 2
|
||||
28 3
|
||||
40 4
|
||||
52 5
|
||||
61 10
|
||||
update t2,v2 set v2.a=v2.a+v2.c where t2.x=v2.c;
|
||||
select * from t1;
|
||||
a b
|
||||
16 2
|
||||
31 3
|
||||
44 4
|
||||
57 5
|
||||
61 10
|
||||
update v2 set a=a+c;
|
||||
select * from t1;
|
||||
a b
|
||||
18 2
|
||||
34 3
|
||||
48 4
|
||||
62 5
|
||||
71 10
|
||||
update t2,v2 set v2.c=v2.a+v2.c where t2.x=v2.c;
|
||||
ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for column 'c' in table 'v2'
|
||||
update v2 set c=a+c;
|
||||
ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for column 'c' in table 'v2'
|
||||
update t2,v3 set v3.a=v3.a+v3.c where t2.x=v3.c;
|
||||
ERROR 42000: UPDATE command denied to user 'mysqltest_1'@'localhost' for column 'a' in table 'v3'
|
||||
update v3 set a=a+c;
|
||||
ERROR 42000: update command denied to user 'mysqltest_1'@'localhost' for table 'v3'
|
||||
use test;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
create table t1 (a int, b int, primary key(b));
|
||||
insert into t1 values (1,20), (2,30), (3,40), (4,50), (5,100);
|
||||
create view v1 (c) as select b from t1 where a<3;
|
||||
select * from v1;
|
||||
c
|
||||
20
|
||||
30
|
||||
explain extended select * from v1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 5 Using where
|
||||
Warnings:
|
||||
Note 1003 select test.t1.b AS `c` from test.v1 where (test.t1.a < 3)
|
||||
update v1 set c=c+1;
|
||||
select * from t1;
|
||||
a b
|
||||
1 21
|
||||
2 31
|
||||
3 40
|
||||
4 50
|
||||
5 100
|
||||
create view v2 (c) as select b from t1 where a>=3;
|
||||
select * from v1, v2;
|
||||
c c
|
||||
21 40
|
||||
31 40
|
||||
21 50
|
||||
31 50
|
||||
21 100
|
||||
31 100
|
||||
drop view v1, v2;
|
||||
drop table t1;
|
||||
create table t1 (a int, b int, primary key(a));
|
||||
insert into t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
delete from v2 where c < 4;
|
||||
ERROR HY000: The target table v2 of the DELETE is not updatable
|
||||
delete from v1 where c < 4;
|
||||
select * from v1;
|
||||
a c
|
||||
2 4
|
||||
3 5
|
||||
4 6
|
||||
5 11
|
||||
select * from t1;
|
||||
a b
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 10
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
create table t1 (a int, b int, primary key(a));
|
||||
insert into t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
|
||||
create table t2 (x int);
|
||||
insert into t2 values (1), (2), (3), (4);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
delete v2 from t2,v2 where t2.x=v2.a;
|
||||
ERROR HY000: The target table v2 of the DELETE is not updatable
|
||||
delete v1 from t2,v1 where t2.x=v1.a;
|
||||
select * from v1;
|
||||
a c
|
||||
5 11
|
||||
select * from t1;
|
||||
a b
|
||||
5 10
|
||||
drop table t1,t2;
|
||||
drop view v1,v2;
|
||||
create database mysqltest;
|
||||
create table mysqltest.t1 (a int, b int, primary key(a));
|
||||
insert into mysqltest.t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
|
||||
create table mysqltest.t2 (x int);
|
||||
insert into mysqltest.t2 values (3), (4), (5), (6);
|
||||
create view mysqltest.v1 (a,c) as select a, b+1 from mysqltest.t1;
|
||||
create view mysqltest.v2 (a,c) as select a, b+1 from mysqltest.t1;
|
||||
grant delete on mysqltest.v1 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.* to mysqltest_1@localhost;
|
||||
use mysqltest;
|
||||
delete from v1 where c < 4;
|
||||
select * from t1;
|
||||
a b
|
||||
2 3
|
||||
3 4
|
||||
4 5
|
||||
5 10
|
||||
delete v1 from t2,v1 where t2.x=v1.c;
|
||||
select * from t1;
|
||||
a b
|
||||
5 10
|
||||
delete v2 from t2,v2 where t2.x=v2.c;
|
||||
ERROR 42000: delete command denied to user 'mysqltest_1'@'localhost' for table 'v2'
|
||||
delete from v2 where c < 4;
|
||||
ERROR 42000: delete command denied to user 'mysqltest_1'@'localhost' for table 'v2'
|
||||
use test;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
create table t1 (a int, b int, c int, primary key(a,b));
|
||||
insert into t1 values (10,2,-1), (20,3,-2), (30,4,-3), (40,5,-4), (50,10,-5);
|
||||
create view v1 (x,y) as select a, b from t1;
|
||||
create view v2 (x,y) as select a, c from t1;
|
||||
set sql_updatable_view_key=YES;
|
||||
update v1 set x=x+1;
|
||||
update v2 set x=x+1;
|
||||
ERROR HY000: The target table v2 of the UPDATE is not updatable
|
||||
set sql_updatable_view_key=LIMIT1;
|
||||
update v1 set x=x+1;
|
||||
update v2 set x=x+1;
|
||||
Warnings:
|
||||
Note 1353 View being update does not have complete key of underlying table in it
|
||||
update v1 set x=x+1 limit 1;
|
||||
update v2 set x=x+1 limit 1;
|
||||
ERROR HY000: The target table v2 of the UPDATE is not updatable
|
||||
set sql_updatable_view_key=NO;
|
||||
update v1 set x=x+1 limit 1;
|
||||
update v2 set x=x+1 limit 1;
|
||||
Warnings:
|
||||
Note 1353 View being update does not have complete key of underlying table in it
|
||||
set sql_updatable_view_key=DEFAULT;
|
||||
select * from t1;
|
||||
a b c
|
||||
16 2 -1
|
||||
23 3 -2
|
||||
33 4 -3
|
||||
43 5 -4
|
||||
53 10 -5
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
create table t1 (a int, b int, c int, primary key(a,b));
|
||||
insert into t1 values (10,2,-1), (20,3,-2);
|
||||
create view v1 (x,y,z) as select c, b, a from t1;
|
||||
create view v2 (x,y) as select b, a from t1;
|
||||
create view v3 (x,y,z) as select b, a, b from t1;
|
||||
create view v4 (x,y,z) as select c+1, b, a from t1;
|
||||
create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
|
||||
insert into v3 values (-60,4,30);
|
||||
ERROR HY000: The target table v3 of the INSERT is not updatable
|
||||
insert into v4 values (-60,4,30);
|
||||
ERROR HY000: The target table v4 of the INSERT is not updatable
|
||||
insert into v5 values (-60,4,30);
|
||||
ERROR HY000: The target table v5 of the INSERT is not updatable
|
||||
insert into v1 values (-60,4,30);
|
||||
insert into v1 (z,y,x) values (50,6,-100);
|
||||
insert into v2 values (5,40);
|
||||
select * from t1;
|
||||
a b c
|
||||
10 2 -1
|
||||
20 3 -2
|
||||
30 4 -60
|
||||
50 6 -100
|
||||
40 5 NULL
|
||||
drop table t1;
|
||||
drop view v1,v2,v3,v4,v5;
|
||||
create table t1 (a int, b int, c int, primary key(a,b));
|
||||
insert into t1 values (10,2,-1), (20,3,-2);
|
||||
create table t2 (a int, b int, c int, primary key(a,b));
|
||||
insert into t2 values (30,4,-60);
|
||||
create view v1 (x,y,z) as select c, b, a from t1;
|
||||
create view v2 (x,y) as select b, a from t1;
|
||||
create view v3 (x,y,z) as select b, a, b from t1;
|
||||
create view v4 (x,y,z) as select c+1, b, a from t1;
|
||||
create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
|
||||
insert into v3 select c, b, a from t2;
|
||||
ERROR HY000: The target table v3 of the INSERT is not updatable
|
||||
insert into v4 select c, b, a from t2;
|
||||
ERROR HY000: The target table v4 of the INSERT is not updatable
|
||||
insert into v5 select c, b, a from t2;
|
||||
ERROR HY000: The target table v5 of the INSERT is not updatable
|
||||
insert into v1 select c, b, a from t2;
|
||||
insert into v1 (z,y,x) select a+20,b+2,-100 from t2;
|
||||
insert into v2 select b+1, a+10 from t2;
|
||||
select * from t1;
|
||||
a b c
|
||||
10 2 -1
|
||||
20 3 -2
|
||||
30 4 -60
|
||||
50 6 -100
|
||||
40 5 NULL
|
||||
drop table t1;
|
||||
drop view v1,v2,v3,v4,v5;
|
||||
create database mysqltest;
|
||||
create table mysqltest.t1 (a int, b int, primary key(a));
|
||||
insert into mysqltest.t1 values (1,2), (2,3);
|
||||
create table mysqltest.t2 (x int, y int);
|
||||
insert into mysqltest.t2 values (3,4);
|
||||
create view mysqltest.v1 (a,c) as select a, b from mysqltest.t1;
|
||||
create view mysqltest.v2 (a,c) as select a, b from mysqltest.t1;
|
||||
grant insert on mysqltest.v1 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.* to mysqltest_1@localhost;
|
||||
use mysqltest;
|
||||
insert into v1 values (5,6);
|
||||
select * from t1;
|
||||
a b
|
||||
1 2
|
||||
2 3
|
||||
5 6
|
||||
insert into v1 select x,y from t2;
|
||||
select * from t1;
|
||||
a b
|
||||
1 2
|
||||
2 3
|
||||
5 6
|
||||
3 4
|
||||
insert into v2 values (5,6);
|
||||
ERROR 42000: insert command denied to user 'mysqltest_1'@'localhost' for table 'v2'
|
||||
insert into v2 select x,y from t2;
|
||||
ERROR 42000: insert command denied to user 'mysqltest_1'@'localhost' for table 'v2'
|
||||
use test;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
create table t1 (a int, primary key(a));
|
||||
insert into t1 values (1), (2), (3);
|
||||
create view v1 (x) as select a from t1 where a > 1;
|
||||
select t1.a, v1.x from t1 left join v1 on (t1.a= v1.x);
|
||||
a x
|
||||
1 NULL
|
||||
2 2
|
||||
3 3
|
||||
drop table t1;
|
||||
drop view v1;
|
||||
create table t1 (a int, primary key(a));
|
||||
insert into t1 values (1), (2), (3), (200);
|
||||
create view v1 (x) as select a from t1 where a > 1;
|
||||
create view v2 (y) as select x from v1 where x < 100;
|
||||
select * from v2;
|
||||
x
|
||||
2
|
||||
3
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
create table t1 (a int, primary key(a));
|
||||
insert into t1 values (1), (2), (3), (200);
|
||||
create ALGORITHM=TEMPTABLE view v1 (x) as select a from t1;
|
||||
create view v2 (y) as select x from v1;
|
||||
update v2 set y=10 where y=2;
|
||||
ERROR HY000: The target table v2 of the UPDATE is not updatable
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
create table t1 (a int not null auto_increment, b int not null, primary key(a), unique(b));
|
||||
create view v1 (x) as select b from t1;
|
||||
insert into v1 values (1);
|
||||
select last_insert_id();
|
||||
last_insert_id()
|
||||
0
|
||||
insert into t1 (b) values (2);
|
||||
select last_insert_id();
|
||||
last_insert_id()
|
||||
2
|
||||
select * from t1;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
create database mysqltest;
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create table mysqltest.t2 (a int, b int);
|
||||
grant update on mysqltest.t1 to mysqltest_1@localhost;
|
||||
grant update(b) on mysqltest.t2 to mysqltest_1@localhost;
|
||||
grant create view,update on test.* to mysqltest_1@localhost;
|
||||
create view v1 as select * from mysqltest.t1;
|
||||
create view v2 as select b from mysqltest.t2;
|
||||
create view mysqltest.v1 as select * from mysqltest.t1;
|
||||
ERROR 42000: create view command denied to user 'mysqltest_1'@'localhost' for table 'v1'
|
||||
create view v3 as select a from mysqltest.t2;
|
||||
ERROR 42000: ANY command denied to user 'mysqltest_1'@'localhost' for column 'a' in table 't2'
|
||||
create table mysqltest.v3 (b int);
|
||||
grant create view on mysqltest.v3 to mysqltest_1@localhost;
|
||||
drop table mysqltest.v3;
|
||||
create view mysqltest.v3 as select b from mysqltest.t2;
|
||||
ERROR 42000: create view command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 'v3'
|
||||
create table mysqltest.v3 (b int);
|
||||
grant create view, update on mysqltest.v3 to mysqltest_1@localhost;
|
||||
drop table mysqltest.v3;
|
||||
create view mysqltest.v3 as select b from mysqltest.t2;
|
||||
grant select(b) on mysqltest.v3 to mysqltest_1@localhost;
|
||||
drop view mysqltest.v3;
|
||||
create view mysqltest.v3 as select b from mysqltest.t2;
|
||||
ERROR 42000: create view command denied to user 'mysqltest_1'@'localhost' for table 'v3'
|
||||
create view v4 as select b+1 from mysqltest.t2;
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 't2'
|
||||
grant create view,update,select on test.* to mysqltest_1@localhost;
|
||||
create view v4 as select b+1 from mysqltest.t2;
|
||||
ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for column 'b' in table 't2'
|
||||
grant update,select(b) on mysqltest.t2 to mysqltest_1@localhost;
|
||||
create view v4 as select b+1 from mysqltest.t2;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
drop view v1,v2;
|
@ -68,15 +68,6 @@ INSERT INTO user VALUES ('localhost','', '','N','N','N','N','N','N','N','N','
|
||||
|
||||
-- disable_query_log
|
||||
|
||||
DROP TABLE db;
|
||||
DROP TABLE host;
|
||||
DROP TABLE user;
|
||||
DROP TABLE func;
|
||||
DROP TABLE tables_priv;
|
||||
DROP TABLE columns_priv;
|
||||
DROP TABLE help_category;
|
||||
DROP TABLE help_keyword;
|
||||
DROP TABLE help_relation;
|
||||
DROP TABLE help_topic;
|
||||
DROP TABLE db, host, user, func, tables_priv, columns_priv, help_category, help_keyword, help_relation, help_topic, proc, time_zone, time_zone_leap_second, time_zone_name, time_zone_transition, time_zone_transition_type;
|
||||
|
||||
-- enable_query_log
|
||||
|
853
mysql-test/t/view.test
Normal file
853
mysql-test/t/view.test
Normal file
@ -0,0 +1,853 @@
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
drop view if exists v1,v2,v3,v4,v5,v6;
|
||||
drop database if exists mysqltest;
|
||||
--enable_warnings
|
||||
use test;
|
||||
|
||||
#
|
||||
# some basic test of views and its functionality
|
||||
#
|
||||
|
||||
# create view on unexistence table
|
||||
-- error 1146
|
||||
create view v1 (c,d) as select a,b from t1;
|
||||
|
||||
create temporary table t1 (a int, b int);
|
||||
#view on temporary table
|
||||
-- error 1350
|
||||
create view v1 (c) as select b+1 from t1;
|
||||
drop table t1;
|
||||
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
|
||||
|
||||
#view with variable
|
||||
-- error 1349
|
||||
create view v1 (c,d) as select a,b+@@global.max_user_connections from t1;
|
||||
|
||||
# simple view
|
||||
create view v1 (c) as select b+1 from t1;
|
||||
select c from v1;
|
||||
|
||||
#tamporary table should not shade (hide) table of view
|
||||
create temporary table t1 (a int, b int);
|
||||
# this is empty
|
||||
select * from t1;
|
||||
# but this based on normal t1
|
||||
select c from v1;
|
||||
show create table v1;
|
||||
show create view v1;
|
||||
-- error 1345
|
||||
show create view t1;
|
||||
drop table t1;
|
||||
|
||||
# try to use fields from underlaid table
|
||||
-- error 1054
|
||||
select a from v1;
|
||||
-- error 1054
|
||||
select v1.a from v1;
|
||||
-- error 1054
|
||||
select b from v1;
|
||||
-- error 1054
|
||||
select v1.b from v1;
|
||||
|
||||
# view with different algorithms (explain out put are differ)
|
||||
explain extended select c from v1;
|
||||
create algorithm=temptable view v2 (c) as select b+1 from t1;
|
||||
show create table v2;
|
||||
select c from v2;
|
||||
explain extended select c from v2;
|
||||
|
||||
# try to use underlaid table fields in VIEW creation process
|
||||
-- error 1054
|
||||
create view v3 (c) as select a+1 from v1;
|
||||
-- error 1054
|
||||
create view v3 (c) as select b+1 from v1;
|
||||
|
||||
|
||||
# VIEW on VIEW test with mixing different algorithms on different order
|
||||
create view v3 (c) as select c+1 from v1;
|
||||
select c from v3;
|
||||
explain extended select c from v3;
|
||||
create algorithm=temptable view v4 (c) as select c+1 from v2;
|
||||
select c from v4;
|
||||
explain extended select c from v4;
|
||||
create view v5 (c) as select c+1 from v2;
|
||||
select c from v5;
|
||||
explain extended select c from v5;
|
||||
create algorithm=temptable view v6 (c) as select c+1 from v1;
|
||||
select c from v6;
|
||||
explain extended select c from v6;
|
||||
|
||||
# show table/table status test
|
||||
show tables;
|
||||
--replace_column 12 # 13 #
|
||||
show table status;
|
||||
|
||||
drop view v1,v2,v3,v4,v5,v6;
|
||||
|
||||
#
|
||||
# alter/create view test
|
||||
#
|
||||
|
||||
# view with subqueries of different types
|
||||
create view v1 (c,d,e,f) as select a,b,
|
||||
a in (select a+2 from t1), a = all (select a from t1) from t1;
|
||||
create view v2 as select c, d from v1;
|
||||
select * from v1;
|
||||
select * from v2;
|
||||
|
||||
# try to create VIEW with name of existing VIEW
|
||||
-- error 1050
|
||||
create view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a = all (select a from t1) from t1;
|
||||
|
||||
# 'or replace' should work in this case
|
||||
create or replace view v1 (c,d,e,f) as select a,b, a in (select a+2 from t1), a = all (select a from t1) from t1;
|
||||
|
||||
# try to ALTER unexisting VIEW
|
||||
drop view v2;
|
||||
-- error 1146
|
||||
alter view v2 as select c, d from v1;
|
||||
|
||||
# 'or replace' on unexisting view
|
||||
create or replace view v2 as select c, d from v1;
|
||||
|
||||
# alter view on existing view
|
||||
alter view v1 (c,d) as select a,max(b) from t1 group by a;
|
||||
|
||||
# check that created view works
|
||||
select * from v1;
|
||||
select * from v2;
|
||||
|
||||
# simple test of grants
|
||||
grant create view on test.* to test@localhost;
|
||||
show grants for test@localhost;
|
||||
revoke create view on test.* from test@localhost;
|
||||
show grants for test@localhost;
|
||||
|
||||
#try to drop unexisten VIEW
|
||||
-- error 1051
|
||||
drop view v100;
|
||||
|
||||
#try to drop table with DROP VIEW
|
||||
-- error 1345
|
||||
drop view t1;
|
||||
|
||||
#try to drop VIEW with DROP TABLE
|
||||
-- error 1051
|
||||
drop table v1;
|
||||
|
||||
#try to drop table with DROP VIEW
|
||||
|
||||
drop view v1,v2;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# outer left join with merged views
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3);
|
||||
|
||||
create view v1 (a) as select a+1 from t1;
|
||||
create view v2 (a) as select a-1 from t1;
|
||||
|
||||
select * from t1 natural left join v1;
|
||||
select * from v2 natural left join t1;
|
||||
select * from v2 natural left join v1;
|
||||
|
||||
drop view v1, v2;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# grant create view test
|
||||
#
|
||||
connect (root,localhost,root,,test);
|
||||
connection root;
|
||||
--disable_warnings
|
||||
create database mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create table mysqltest.t2 (a int, b int);
|
||||
|
||||
grant select on mysqltest.t1 to mysqltest_1@localhost;
|
||||
grant create view,select on test.* to mysqltest_1@localhost;
|
||||
|
||||
connect (user1,localhost,mysqltest_1,,test);
|
||||
connection user1;
|
||||
|
||||
create view v1 as select * from mysqltest.t1;
|
||||
# no CRETE VIEW privilege
|
||||
-- error 1142
|
||||
create view mysqltest.v2 as select * from mysqltest.t1;
|
||||
# no SELECT privilege
|
||||
-- error 1142
|
||||
create view v2 as select * from mysqltest.t2;
|
||||
|
||||
connection root;
|
||||
revoke all privileges on mysqltest.t1 from mysqltest_1@localhost;
|
||||
revoke all privileges on test.* from mysqltest_1@localhost;
|
||||
|
||||
drop database mysqltest;
|
||||
drop view test.v1;
|
||||
|
||||
#
|
||||
# grants per columns
|
||||
#
|
||||
# MERGE algorithm
|
||||
--disable_warnings
|
||||
create database mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create view mysqltest.v1 (c,d) as select a+1,b+1 from mysqltest.t1;
|
||||
grant select (c) on mysqltest.v1 to mysqltest_1@localhost;
|
||||
|
||||
connection user1;
|
||||
select c from mysqltest.v1;
|
||||
# there are not privilege ob column 'd'
|
||||
-- error 1143
|
||||
select d from mysqltest.v1;
|
||||
|
||||
connection root;
|
||||
revoke all privileges on mysqltest.v1 from mysqltest_1@localhost;
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
drop database mysqltest;
|
||||
|
||||
# TEMPORARY TABLE algorithm
|
||||
--disable_warnings
|
||||
create database mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create algorithm=temptable view mysqltest.v1 (c,d) as select a+1,b+1 from mysqltest.t1;
|
||||
grant select (c) on mysqltest.v1 to mysqltest_1@localhost;
|
||||
|
||||
connection user1;
|
||||
select c from mysqltest.v1;
|
||||
# there are not privilege ob column 'd'
|
||||
-- error 1143
|
||||
select d from mysqltest.v1;
|
||||
|
||||
connection root;
|
||||
revoke all privileges on mysqltest.v1 from mysqltest_1@localhost;
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
drop database mysqltest;
|
||||
|
||||
#
|
||||
# EXPLAIN rights
|
||||
#
|
||||
connection root;
|
||||
--disable_warnings
|
||||
create database mysqltest;
|
||||
--enable_warnings
|
||||
#prepare views and tables
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create table mysqltest.t2 (a int, b int);
|
||||
create view mysqltest.v1 (c,d) as select a+1,b+1 from mysqltest.t1;
|
||||
create algorithm=temptable view mysqltest.v2 (c,d) as select a+1,b+1 from mysqltest.t1;
|
||||
create view mysqltest.v3 (c,d) as select a+1,b+1 from mysqltest.t2;
|
||||
create algorithm=temptable view mysqltest.v4 (c,d) as select a+1,b+1 from mysqltest.t2;
|
||||
grant select on mysqltest.v1 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.v2 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.v3 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.v4 to mysqltest_1@localhost;
|
||||
|
||||
connection user1;
|
||||
# all selects works
|
||||
select c from mysqltest.v1;
|
||||
select c from mysqltest.v2;
|
||||
select c from mysqltest.v3;
|
||||
select c from mysqltest.v4;
|
||||
# test of show coluns
|
||||
show columns from mysqltest.v1;
|
||||
show columns from mysqltest.v2;
|
||||
# but explain/show do not
|
||||
-- error 1343
|
||||
explain select c from mysqltest.v1;
|
||||
-- error 1343
|
||||
show create table mysqltest.v1;
|
||||
-- error 1343
|
||||
explain select c from mysqltest.v2;
|
||||
-- error 1343
|
||||
show create table mysqltest.v2;
|
||||
-- error 1343
|
||||
explain select c from mysqltest.v3;
|
||||
-- error 1343
|
||||
show create table mysqltest.v3;
|
||||
-- error 1343
|
||||
explain select c from mysqltest.v4;
|
||||
-- error 1343
|
||||
show create table mysqltest.v4;
|
||||
|
||||
# allow to see one of underlaing table
|
||||
connection root;
|
||||
grant select on mysqltest.t1 to mysqltest_1@localhost;
|
||||
connection user1;
|
||||
# EXPLAIN of view on above table works
|
||||
explain select c from mysqltest.v1;
|
||||
show create table mysqltest.v1;
|
||||
explain select c from mysqltest.v2;
|
||||
show create table mysqltest.v2;
|
||||
# but other EXPLAINs do not
|
||||
-- error 1343
|
||||
explain select c from mysqltest.v3;
|
||||
-- error 1343
|
||||
show create table mysqltest.v3;
|
||||
-- error 1343
|
||||
explain select c from mysqltest.v4;
|
||||
-- error 1343
|
||||
show create table mysqltest.v4;
|
||||
|
||||
# allow to see any view in mysqltest database
|
||||
connection root;
|
||||
grant show view on mysqltest.* to mysqltest_1@localhost;
|
||||
connection user1;
|
||||
explain select c from mysqltest.v1;
|
||||
show create table mysqltest.v1;
|
||||
explain select c from mysqltest.v2;
|
||||
show create table mysqltest.v2;
|
||||
explain select c from mysqltest.v3;
|
||||
show create table mysqltest.v3;
|
||||
explain select c from mysqltest.v4;
|
||||
show create table mysqltest.v4;
|
||||
|
||||
connection root;
|
||||
revoke all privileges on mysqltest.* from mysqltest_1@localhost;
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
drop database mysqltest;
|
||||
|
||||
#
|
||||
# QUERY CHECHE options for VIEWs
|
||||
#
|
||||
set GLOBAL query_cache_size=1355776;
|
||||
flush status;
|
||||
create table t1 (a int, b int);
|
||||
|
||||
# queries with following views should not be in query cache
|
||||
create view v1 (c,d) as select sql_no_cache a,b from t1;
|
||||
create view v2 (c,d) as select a+rand(),b from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
select * from v1;
|
||||
select * from v2;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
select * from v1;
|
||||
select * from v2;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
|
||||
drop view v1,v2;
|
||||
|
||||
# SQL_CACHE option
|
||||
set query_cache_type=demand;
|
||||
flush status;
|
||||
# query with view will be cached, but direct acess to table will not
|
||||
create view v1 (c,d) as select sql_cache a,b from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
select * from v1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
select * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
select * from v1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
select * from t1;
|
||||
show status like "Qcache_queries_in_cache";
|
||||
show status like "Qcache_inserts";
|
||||
show status like "Qcache_hits";
|
||||
drop view v1;
|
||||
set query_cache_type=default;
|
||||
|
||||
drop table t1;
|
||||
set GLOBAL query_cache_size=default;
|
||||
|
||||
|
||||
#
|
||||
# DISTINCT option for VIEW
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3), (1), (2), (3);
|
||||
create view v1 as select distinct a from t1;
|
||||
select * from v1;
|
||||
explain select * from v1;
|
||||
select * from t1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# syntax compatibility
|
||||
#
|
||||
create table t1 (a int);
|
||||
create view v1 as select distinct a from t1 WITH CHECK OPTION;
|
||||
create view v2 as select distinct a from t1 WITH CASCADED CHECK OPTION;
|
||||
create view v3 as select distinct a from t1 WITH LOCAL CHECK OPTION;
|
||||
drop view v3 RESTRICT;
|
||||
drop view v2 CASCADE;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# aliases
|
||||
#
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 values (1,2), (1,3), (2,4), (2,5), (3,10);
|
||||
create view v1 (c) as select b+1 from t1;
|
||||
select test.c from v1 test;
|
||||
create algorithm=temptable view v2 (c) as select b+1 from t1;
|
||||
select test.c from v2 test;
|
||||
select test1.* from v1 test1, v2 test2 where test1.c=test2.c;
|
||||
select test2.* from v1 test1, v2 test2 where test1.c=test2.c;
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
|
||||
#
|
||||
# LIMIT clasuse test
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3), (4);
|
||||
create view v1 as select a+1 from t1 order by 1 desc limit 2;
|
||||
select * from v1;
|
||||
explain select * from v1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# CREATE ... SELECT view test
|
||||
#
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1), (2), (3), (4);
|
||||
create view v1 as select a+1 from t1;
|
||||
create table t2 select * from v1;
|
||||
show columns from t2;
|
||||
select * from t2;
|
||||
drop view v1;
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# simple view + simple update
|
||||
#
|
||||
create table t1 (a int, b int, primary key(a));
|
||||
insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
# try to update expression
|
||||
-- error 1346
|
||||
update v1 set c=a+c;
|
||||
# try to update VIEW with forced TEMPORARY TABLE algorithm
|
||||
-- error 1288
|
||||
update v2 set a=a+c;
|
||||
# updatable field of updateable view
|
||||
update v1 set a=a+c;
|
||||
select * from v1;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
|
||||
#
|
||||
# simple view + simple multi-update
|
||||
#
|
||||
create table t1 (a int, b int, primary key(a));
|
||||
insert into t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
|
||||
create table t2 (x int);
|
||||
insert into t2 values (10), (20);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
# try to update expression
|
||||
-- error 1346
|
||||
update t2,v1 set v1.c=v1.a+v1.c where t2.x=v1.a;
|
||||
# try to update VIEW with forced TEMPORARY TABLE algorithm
|
||||
-- error 1288
|
||||
update t2,v2 set v2.a=v2.v2.a+c where t2.x=v2.a;
|
||||
# updatable field of updateable view
|
||||
update t2,v1 set v1.a=v1.a+v1.c where t2.x=v1.a;
|
||||
select * from v1;
|
||||
select * from t1;
|
||||
drop table t1,t2;
|
||||
drop view v1,v2;
|
||||
|
||||
#
|
||||
# UPDATE privileges on VIEW columns and whole VIEW
|
||||
#
|
||||
connection root;
|
||||
--disable_warnings
|
||||
create database mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
create table mysqltest.t1 (a int, b int, primary key(a));
|
||||
insert into mysqltest.t1 values (10,2), (20,3), (30,4), (40,5), (50,10);
|
||||
create table mysqltest.t2 (x int);
|
||||
insert into mysqltest.t2 values (3), (4), (5), (6);
|
||||
create view mysqltest.v1 (a,c) as select a, b+1 from mysqltest.t1;
|
||||
create view mysqltest.v2 (a,c) as select a, b from mysqltest.t1;
|
||||
create view mysqltest.v3 (a,c) as select a, b+1 from mysqltest.t1;
|
||||
|
||||
grant update (a) on mysqltest.v2 to mysqltest_1@localhost;
|
||||
grant update on mysqltest.v1 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.* to mysqltest_1@localhost;
|
||||
|
||||
connection user1;
|
||||
use mysqltest;
|
||||
# update with rights on VIEW column
|
||||
update t2,v1 set v1.a=v1.a+v1.c where t2.x=v1.c;
|
||||
select * from t1;
|
||||
update v1 set a=a+c;
|
||||
select * from t1;
|
||||
# update with rights on whole VIEW
|
||||
update t2,v2 set v2.a=v2.a+v2.c where t2.x=v2.c;
|
||||
select * from t1;
|
||||
update v2 set a=a+c;
|
||||
select * from t1;
|
||||
# no rights on column
|
||||
-- error 1143
|
||||
update t2,v2 set v2.c=v2.a+v2.c where t2.x=v2.c;
|
||||
-- error 1143
|
||||
update v2 set c=a+c;
|
||||
# no rights for view
|
||||
-- error 1143
|
||||
update t2,v3 set v3.a=v3.a+v3.c where t2.x=v3.c;
|
||||
-- error 1142
|
||||
update v3 set a=a+c;
|
||||
|
||||
use test;
|
||||
connection root;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
|
||||
#
|
||||
# MEREGE VIEW with WHERE clause
|
||||
#
|
||||
create table t1 (a int, b int, primary key(b));
|
||||
insert into t1 values (1,20), (2,30), (3,40), (4,50), (5,100);
|
||||
create view v1 (c) as select b from t1 where a<3;
|
||||
# simple select and explaint to be sure that it is MERGE
|
||||
select * from v1;
|
||||
explain extended select * from v1;
|
||||
# update test
|
||||
update v1 set c=c+1;
|
||||
select * from t1;
|
||||
# join of such VIEWs test
|
||||
create view v2 (c) as select b from t1 where a>=3;
|
||||
select * from v1, v2;
|
||||
drop view v1, v2;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# simple view + simple delete
|
||||
#
|
||||
create table t1 (a int, b int, primary key(a));
|
||||
insert into t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
# try to update VIEW with forced TEMPORARY TABLE algorithm
|
||||
-- error 1288
|
||||
delete from v2 where c < 4;
|
||||
# updatable field of updateable view
|
||||
delete from v1 where c < 4;
|
||||
select * from v1;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
|
||||
#
|
||||
# simple view + simple multi-delete
|
||||
#
|
||||
create table t1 (a int, b int, primary key(a));
|
||||
insert into t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
|
||||
create table t2 (x int);
|
||||
insert into t2 values (1), (2), (3), (4);
|
||||
create view v1 (a,c) as select a, b+1 from t1;
|
||||
create algorithm=temptable view v2 (a,c) as select a, b+1 from t1;
|
||||
# try to update VIEW with forced TEMPORARY TABLE algorithm
|
||||
-- error 1288
|
||||
delete v2 from t2,v2 where t2.x=v2.a;
|
||||
# updatable field of updateable view
|
||||
delete v1 from t2,v1 where t2.x=v1.a;
|
||||
select * from v1;
|
||||
select * from t1;
|
||||
drop table t1,t2;
|
||||
drop view v1,v2;
|
||||
|
||||
#
|
||||
# DELETE privileges on VIEW
|
||||
#
|
||||
connection root;
|
||||
--disable_warnings
|
||||
create database mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
create table mysqltest.t1 (a int, b int, primary key(a));
|
||||
insert into mysqltest.t1 values (1,2), (2,3), (3,4), (4,5), (5,10);
|
||||
create table mysqltest.t2 (x int);
|
||||
insert into mysqltest.t2 values (3), (4), (5), (6);
|
||||
create view mysqltest.v1 (a,c) as select a, b+1 from mysqltest.t1;
|
||||
create view mysqltest.v2 (a,c) as select a, b+1 from mysqltest.t1;
|
||||
|
||||
grant delete on mysqltest.v1 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.* to mysqltest_1@localhost;
|
||||
|
||||
connection user1;
|
||||
use mysqltest;
|
||||
# update with rights on VIEW column
|
||||
delete from v1 where c < 4;
|
||||
select * from t1;
|
||||
delete v1 from t2,v1 where t2.x=v1.c;
|
||||
select * from t1;
|
||||
# no rights for view
|
||||
-- error 1142
|
||||
delete v2 from t2,v2 where t2.x=v2.c;
|
||||
-- error 1142
|
||||
delete from v2 where c < 4;
|
||||
|
||||
use test;
|
||||
connection root;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
|
||||
#
|
||||
# key presence check
|
||||
#
|
||||
create table t1 (a int, b int, c int, primary key(a,b));
|
||||
insert into t1 values (10,2,-1), (20,3,-2), (30,4,-3), (40,5,-4), (50,10,-5);
|
||||
create view v1 (x,y) as select a, b from t1;
|
||||
create view v2 (x,y) as select a, c from t1;
|
||||
set sql_updatable_view_key=YES;
|
||||
update v1 set x=x+1;
|
||||
-- error 1288
|
||||
update v2 set x=x+1;
|
||||
set sql_updatable_view_key=LIMIT1;
|
||||
update v1 set x=x+1;
|
||||
update v2 set x=x+1;
|
||||
update v1 set x=x+1 limit 1;
|
||||
-- error 1288
|
||||
update v2 set x=x+1 limit 1;
|
||||
set sql_updatable_view_key=NO;
|
||||
update v1 set x=x+1 limit 1;
|
||||
update v2 set x=x+1 limit 1;
|
||||
set sql_updatable_view_key=DEFAULT;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
|
||||
#
|
||||
# simple insert
|
||||
#
|
||||
create table t1 (a int, b int, c int, primary key(a,b));
|
||||
insert into t1 values (10,2,-1), (20,3,-2);
|
||||
create view v1 (x,y,z) as select c, b, a from t1;
|
||||
create view v2 (x,y) as select b, a from t1;
|
||||
create view v3 (x,y,z) as select b, a, b from t1;
|
||||
create view v4 (x,y,z) as select c+1, b, a from t1;
|
||||
create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
|
||||
# try insert to VIEW with fields duplicate
|
||||
-- error 1288
|
||||
insert into v3 values (-60,4,30);
|
||||
# try insert to VIEW with expression in SELECT list
|
||||
-- error 1288
|
||||
insert into v4 values (-60,4,30);
|
||||
# try insert to VIEW using temporary table algorithm
|
||||
-- error 1288
|
||||
insert into v5 values (-60,4,30);
|
||||
insert into v1 values (-60,4,30);
|
||||
insert into v1 (z,y,x) values (50,6,-100);
|
||||
insert into v2 values (5,40);
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
drop view v1,v2,v3,v4,v5;
|
||||
|
||||
#
|
||||
# insert ... select
|
||||
#
|
||||
create table t1 (a int, b int, c int, primary key(a,b));
|
||||
insert into t1 values (10,2,-1), (20,3,-2);
|
||||
create table t2 (a int, b int, c int, primary key(a,b));
|
||||
insert into t2 values (30,4,-60);
|
||||
create view v1 (x,y,z) as select c, b, a from t1;
|
||||
create view v2 (x,y) as select b, a from t1;
|
||||
create view v3 (x,y,z) as select b, a, b from t1;
|
||||
create view v4 (x,y,z) as select c+1, b, a from t1;
|
||||
create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
|
||||
# try insert to VIEW with fields duplicate
|
||||
-- error 1288
|
||||
insert into v3 select c, b, a from t2;
|
||||
# try insert to VIEW with expression in SELECT list
|
||||
-- error 1288
|
||||
insert into v4 select c, b, a from t2;
|
||||
# try insert to VIEW using temporary table algorithm
|
||||
-- error 1288
|
||||
insert into v5 select c, b, a from t2;
|
||||
insert into v1 select c, b, a from t2;
|
||||
insert into v1 (z,y,x) select a+20,b+2,-100 from t2;
|
||||
insert into v2 select b+1, a+10 from t2;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
drop view v1,v2,v3,v4,v5;
|
||||
|
||||
#
|
||||
# insert privileges on VIEW
|
||||
#
|
||||
connection root;
|
||||
--disable_warnings
|
||||
create database mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
create table mysqltest.t1 (a int, b int, primary key(a));
|
||||
insert into mysqltest.t1 values (1,2), (2,3);
|
||||
create table mysqltest.t2 (x int, y int);
|
||||
insert into mysqltest.t2 values (3,4);
|
||||
create view mysqltest.v1 (a,c) as select a, b from mysqltest.t1;
|
||||
create view mysqltest.v2 (a,c) as select a, b from mysqltest.t1;
|
||||
|
||||
grant insert on mysqltest.v1 to mysqltest_1@localhost;
|
||||
grant select on mysqltest.* to mysqltest_1@localhost;
|
||||
|
||||
connection user1;
|
||||
use mysqltest;
|
||||
# update with rights on VIEW column
|
||||
insert into v1 values (5,6);
|
||||
select * from t1;
|
||||
insert into v1 select x,y from t2;
|
||||
select * from t1;
|
||||
# no rights for view
|
||||
-- error 1142
|
||||
insert into v2 values (5,6);
|
||||
-- error 1142
|
||||
insert into v2 select x,y from t2;
|
||||
|
||||
use test;
|
||||
connection root;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
|
||||
#
|
||||
# outer join based on VIEW with WHERE clause
|
||||
#
|
||||
create table t1 (a int, primary key(a));
|
||||
insert into t1 values (1), (2), (3);
|
||||
create view v1 (x) as select a from t1 where a > 1;
|
||||
select t1.a, v1.x from t1 left join v1 on (t1.a= v1.x);
|
||||
drop table t1;
|
||||
drop view v1;
|
||||
|
||||
#
|
||||
# merging WHERE condition on VIEW on VIEW
|
||||
#
|
||||
create table t1 (a int, primary key(a));
|
||||
insert into t1 values (1), (2), (3), (200);
|
||||
create view v1 (x) as select a from t1 where a > 1;
|
||||
create view v2 (y) as select x from v1 where x < 100;
|
||||
select * from v2;
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
|
||||
#
|
||||
# VIEW on non-updatable view
|
||||
#
|
||||
create table t1 (a int, primary key(a));
|
||||
insert into t1 values (1), (2), (3), (200);
|
||||
create ALGORITHM=TEMPTABLE view v1 (x) as select a from t1;
|
||||
create view v2 (y) as select x from v1;
|
||||
-- error 1288
|
||||
update v2 set y=10 where y=2;
|
||||
drop table t1;
|
||||
drop view v1,v2;
|
||||
|
||||
#
|
||||
# auto_increment field out of VIEW
|
||||
#
|
||||
create table t1 (a int not null auto_increment, b int not null, primary key(a), unique(b));
|
||||
create view v1 (x) as select b from t1;
|
||||
insert into v1 values (1);
|
||||
select last_insert_id();
|
||||
insert into t1 (b) values (2);
|
||||
select last_insert_id();
|
||||
select * from t1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# test of CREATE VIEW privileges if we have limited privileges
|
||||
#
|
||||
connection root;
|
||||
--disable_warnings
|
||||
create database mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
create table mysqltest.t1 (a int, b int);
|
||||
create table mysqltest.t2 (a int, b int);
|
||||
|
||||
grant update on mysqltest.t1 to mysqltest_1@localhost;
|
||||
grant update(b) on mysqltest.t2 to mysqltest_1@localhost;
|
||||
grant create view,update on test.* to mysqltest_1@localhost;
|
||||
|
||||
connection user1;
|
||||
|
||||
create view v1 as select * from mysqltest.t1;
|
||||
create view v2 as select b from mysqltest.t2;
|
||||
# There are not rights on mysqltest.v1
|
||||
--error 1142
|
||||
create view mysqltest.v1 as select * from mysqltest.t1;
|
||||
# There are not any rights on mysqltest.t2.a
|
||||
-- error 1143
|
||||
create view v3 as select a from mysqltest.t2;
|
||||
|
||||
# give CRETEA VIEW privileges but without any privileges for result colemn
|
||||
connection root;
|
||||
create table mysqltest.v3 (b int);
|
||||
grant create view on mysqltest.v3 to mysqltest_1@localhost;
|
||||
drop table mysqltest.v3;
|
||||
connection user1;
|
||||
-- error 1143
|
||||
create view mysqltest.v3 as select b from mysqltest.t2;
|
||||
|
||||
# give UPDATE privileges -> create works
|
||||
connection root;
|
||||
create table mysqltest.v3 (b int);
|
||||
grant create view, update on mysqltest.v3 to mysqltest_1@localhost;
|
||||
drop table mysqltest.v3;
|
||||
connection user1;
|
||||
create view mysqltest.v3 as select b from mysqltest.t2;
|
||||
|
||||
|
||||
# If give other privileges for VIEW then underlaying table have =>
|
||||
# creation prohibited
|
||||
connection root;
|
||||
grant select(b) on mysqltest.v3 to mysqltest_1@localhost;
|
||||
drop view mysqltest.v3;
|
||||
connection user1;
|
||||
-- error 1142
|
||||
create view mysqltest.v3 as select b from mysqltest.t2;
|
||||
|
||||
# Expression need select privileges
|
||||
-- error 1143
|
||||
create view v4 as select b+1 from mysqltest.t2;
|
||||
|
||||
connection root;
|
||||
grant create view,update,select on test.* to mysqltest_1@localhost;
|
||||
connection user1;
|
||||
-- error 1143
|
||||
create view v4 as select b+1 from mysqltest.t2;
|
||||
|
||||
connection root;
|
||||
grant update,select(b) on mysqltest.t2 to mysqltest_1@localhost;
|
||||
connection user1;
|
||||
create view v4 as select b+1 from mysqltest.t2;
|
||||
|
||||
connection root;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM mysqltest_1@localhost;
|
||||
drop database mysqltest;
|
||||
drop view v1,v2;
|
||||
|
Reference in New Issue
Block a user