Skip to content

Commit

Permalink
MDEV-7287 VIEW: CREATE IF NOT EXISTS
Browse files Browse the repository at this point in the history
  • Loading branch information
Alexander Barkov committed Dec 10, 2014
1 parent 92a523e commit acdc383
Show file tree
Hide file tree
Showing 4 changed files with 240 additions and 0 deletions.
59 changes: 59 additions & 0 deletions mysql-test/r/create_drop_view.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
CREATE TABLE t1(id INT);
CREATE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>10;
INSERT INTO t1 VALUES (5), (8), (10), (20), (30);
SELECT * FROM t1;
id
5
8
10
20
30
SELECT * FROM v1;
id
20
30
CREATE VIEW v1 AS SELECT * FROM t1 WHERE id>11;
ERROR 42S01: Table 'v1' already exists
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1';
VIEW_DEFINITION
select `test`.`t1`.`id` AS `id` from `test`.`t1` where (`test`.`t1`.`id` > 10)
CREATE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>12;
Warnings:
Note 1050 Table 'test' already exists
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1';
VIEW_DEFINITION
select `test`.`t1`.`id` AS `id` from `test`.`t1` where (`test`.`t1`.`id` > 10)
CREATE OR REPLACE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>13;
ERROR HY000: Incorrect usage of OR REPLACE and IF NOT EXISTS
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1';
VIEW_DEFINITION
select `test`.`t1`.`id` AS `id` from `test`.`t1` where (`test`.`t1`.`id` > 10)
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1 WHERE id>14;
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1';
VIEW_DEFINITION
select `test`.`t1`.`id` AS `id` from `test`.`t1` where (`test`.`t1`.`id` > 14)
INSERT INTO t1 VALUES (50), (80), (3), (2), (40);
SELECT * FROM t1;
id
5
8
10
20
30
50
80
3
2
40
SELECT * FROM v1;
id
20
30
50
80
40
DROP VIEW IF EXISTS v1;
DROP VIEW IF EXISTS v1;
Warnings:
Note 1051 Unknown table 'test.v1'
DROP TABLE t1;
99 changes: 99 additions & 0 deletions mysql-test/suite/rpl/r/rpl_create_drop_view.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
include/master-slave.inc
[connection master]
CREATE TABLE t1(id INT);
CREATE VIEW v1 AS SELECT * FROM t1 WHERE id>10;
INSERT INTO t1 VALUES (5), (8), (10), (20), (30);
SELECT * FROM t1;
id
5
8
10
20
30
SELECT * FROM v1;
id
20
30
# Syncing slave with master
SELECT * FROM t1;
id
5
8
10
20
30
SELECT * FROM v1;
id
20
30
CREATE VIEW v1 AS SELECT * FROM t1 WHERE id>10;
ERROR 42S01: Table 'v1' already exists
CREATE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>10;
Warnings:
Note 1050 Table 'test' already exists
CREATE OR REPLACE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>10;
ERROR HY000: Incorrect usage of OR REPLACE and IF NOT EXISTS
# Syncing slave with master
SELECT * FROM t1;
id
5
8
10
20
30
SELECT * FROM v1;
id
20
30
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1 WHERE id>10;
INSERT INTO t1 VALUES (50), (80), (3), (2), (40);
SELECT * FROM t1;
id
5
8
10
20
30
50
80
3
2
40
SELECT * FROM v1;
id
20
30
50
80
40
# Syncing slave with master
SELECT * FROM t1;
id
5
8
10
20
30
50
80
3
2
40
SELECT * FROM v1;
id
20
30
50
80
40
DROP VIEW v1;
DROP TABLE t1;
DROP VIEW v1;
ERROR 42S02: Unknown table 'test.v1'
DROP VIEW IF EXISTS v2;
Warnings:
Note 1051 Unknown table 'test.v2'
# Syncing slave with master
SELECT * FROM v1;
ERROR 42S02: Table 'test.v1' doesn't exist
include/rpl_end.inc
55 changes: 55 additions & 0 deletions mysql-test/suite/rpl/t/rpl_create_drop_view.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
--source include/master-slave.inc

connection master;
CREATE TABLE t1(id INT);
CREATE VIEW v1 AS SELECT * FROM t1 WHERE id>10;
INSERT INTO t1 VALUES (5), (8), (10), (20), (30);
SELECT * FROM t1;
SELECT * FROM v1;

--echo # Syncing slave with master
sync_slave_with_master;
SELECT * FROM t1;
SELECT * FROM v1;

connection master;
--error ER_TABLE_EXISTS_ERROR
CREATE VIEW v1 AS SELECT * FROM t1 WHERE id>10;

CREATE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>10;

--error ER_WRONG_USAGE
CREATE OR REPLACE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>10;

--echo # Syncing slave with master
sync_slave_with_master;
SELECT * FROM t1;
SELECT * FROM v1;

connection master;
CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1 WHERE id>10;
INSERT INTO t1 VALUES (50), (80), (3), (2), (40);
SELECT * FROM t1;
SELECT * FROM v1;

--echo # Syncing slave with master
sync_slave_with_master;
SELECT * FROM t1;
SELECT * FROM v1;

connection master;
DROP VIEW v1;
DROP TABLE t1;

--error ER_BAD_TABLE_ERROR
DROP VIEW v1;

DROP VIEW IF EXISTS v2;

--echo # Syncing slave with master
sync_slave_with_master;

--error ER_NO_SUCH_TABLE
SELECT * FROM v1;

--source include/rpl_end.inc
27 changes: 27 additions & 0 deletions mysql-test/t/create_drop_view.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
CREATE TABLE t1(id INT);
CREATE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>10;
INSERT INTO t1 VALUES (5), (8), (10), (20), (30);
SELECT * FROM t1;
SELECT * FROM v1;

--error ER_TABLE_EXISTS_ERROR
CREATE VIEW v1 AS SELECT * FROM t1 WHERE id>11;
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1';

CREATE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>12;
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1';

--error ER_WRONG_USAGE
CREATE OR REPLACE VIEW IF NOT EXISTS v1 AS SELECT * FROM t1 WHERE id>13;
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1';

CREATE OR REPLACE VIEW v1 AS SELECT * FROM t1 WHERE id>14;
SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME='v1';

INSERT INTO t1 VALUES (50), (80), (3), (2), (40);
SELECT * FROM t1;
SELECT * FROM v1;

DROP VIEW IF EXISTS v1;
DROP VIEW IF EXISTS v1;
DROP TABLE t1;

0 comments on commit acdc383

Please sign in to comment.