Loading mysql-test/r/view.result +29 −4 Original line number Diff line number Diff line Loading @@ -625,7 +625,7 @@ drop table t1; create table t1 (a int, b int); create view v1 as select a, sum(b) from t1 group by a; select b from v1 use index (some_index) where b=1; ERROR HY000: Incorrect usage of index hints and VIEW ERROR 42000: Key 'some_index' doesn't exist in table 'v1' drop view v1; drop table t1; create table t1 (col1 char(5),col2 char(5)); Loading Loading @@ -3562,11 +3562,11 @@ CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2); CREATE VIEW v1 AS SELECT * FROM t1; SELECT * FROM v1 USE KEY(non_existant); ERROR HY000: Incorrect usage of index hints and VIEW ERROR 42000: Key 'non_existant' doesn't exist in table 'v1' SELECT * FROM v1 FORCE KEY(non_existant); ERROR HY000: Incorrect usage of index hints and VIEW ERROR 42000: Key 'non_existant' doesn't exist in table 'v1' SELECT * FROM v1 IGNORE KEY(non_existant); ERROR HY000: Incorrect usage of index hints and VIEW ERROR 42000: Key 'non_existant' doesn't exist in table 'v1' DROP VIEW v1; DROP TABLE t1; CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0, Loading Loading @@ -3674,6 +3674,31 @@ DROP VIEW v1; CREATE VIEW v1 AS SELECT 1; DROP VIEW v1; CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2)); INSERT INTO t1 VALUES (1,1), (2,2), (3,3); SELECT * FROM t1 USE INDEX (PRIMARY) WHERE c1=2; c1 c2 2 2 SELECT * FROM t1 USE INDEX (c2) WHERE c2=2; c1 c2 2 2 CREATE VIEW v1 AS SELECT c1, c2 FROM t1; SHOW INDEX FROM v1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment SELECT * FROM v1 USE INDEX (PRIMARY) WHERE c1=2; ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1' SELECT * FROM v1 FORCE INDEX (PRIMARY) WHERE c1=2; ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1' SELECT * FROM v1 IGNORE INDEX (PRIMARY) WHERE c1=2; ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1' SELECT * FROM v1 USE INDEX (c2) WHERE c2=2; ERROR 42000: Key 'c2' doesn't exist in table 'v1' SELECT * FROM v1 FORCE INDEX (c2) WHERE c2=2; ERROR 42000: Key 'c2' doesn't exist in table 'v1' SELECT * FROM v1 IGNORE INDEX (c2) WHERE c2=2; ERROR 42000: Key 'c2' doesn't exist in table 'v1' DROP VIEW v1; DROP TABLE t1; # ----------------------------------------------------------------- # -- End of 5.0 tests. # ----------------------------------------------------------------- Loading mysql-test/t/view.test +30 −4 Original line number Diff line number Diff line Loading @@ -510,7 +510,7 @@ drop table t1; # create table t1 (a int, b int); create view v1 as select a, sum(b) from t1 group by a; --error ER_WRONG_USAGE --error ER_KEY_DOES_NOT_EXITS select b from v1 use index (some_index) where b=1; drop view v1; drop table t1; Loading Loading @@ -3421,11 +3421,11 @@ drop table t1; CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2); CREATE VIEW v1 AS SELECT * FROM t1; --error ER_WRONG_USAGE --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 USE KEY(non_existant); --error ER_WRONG_USAGE --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 FORCE KEY(non_existant); --error ER_WRONG_USAGE --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 IGNORE KEY(non_existant); DROP VIEW v1; Loading Loading @@ -3564,6 +3564,32 @@ DROP VIEW v1; CREATE VIEW v1 AS SELECT 1; DROP VIEW v1; # # Bug #33461: SELECT ... FROM <view> USE INDEX (...) throws an error # CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2)); INSERT INTO t1 VALUES (1,1), (2,2), (3,3); SELECT * FROM t1 USE INDEX (PRIMARY) WHERE c1=2; SELECT * FROM t1 USE INDEX (c2) WHERE c2=2; CREATE VIEW v1 AS SELECT c1, c2 FROM t1; SHOW INDEX FROM v1; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 USE INDEX (PRIMARY) WHERE c1=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 FORCE INDEX (PRIMARY) WHERE c1=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 IGNORE INDEX (PRIMARY) WHERE c1=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 USE INDEX (c2) WHERE c2=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 FORCE INDEX (c2) WHERE c2=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 IGNORE INDEX (c2) WHERE c2=2; DROP VIEW v1; DROP TABLE t1; --echo # ----------------------------------------------------------------- --echo # -- End of 5.0 tests. Loading sql/sql_view.cc +3 −2 Original line number Diff line number Diff line Loading @@ -1049,7 +1049,8 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, if (table->index_hints && table->index_hints->elements) { my_error(ER_WRONG_USAGE, MYF(0), "index hints", "VIEW"); my_error(ER_KEY_DOES_NOT_EXITS, MYF(0), table->index_hints->head()->key_name.str, table->table_name); DBUG_RETURN(TRUE); } Loading Loading
mysql-test/r/view.result +29 −4 Original line number Diff line number Diff line Loading @@ -625,7 +625,7 @@ drop table t1; create table t1 (a int, b int); create view v1 as select a, sum(b) from t1 group by a; select b from v1 use index (some_index) where b=1; ERROR HY000: Incorrect usage of index hints and VIEW ERROR 42000: Key 'some_index' doesn't exist in table 'v1' drop view v1; drop table t1; create table t1 (col1 char(5),col2 char(5)); Loading Loading @@ -3562,11 +3562,11 @@ CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2); CREATE VIEW v1 AS SELECT * FROM t1; SELECT * FROM v1 USE KEY(non_existant); ERROR HY000: Incorrect usage of index hints and VIEW ERROR 42000: Key 'non_existant' doesn't exist in table 'v1' SELECT * FROM v1 FORCE KEY(non_existant); ERROR HY000: Incorrect usage of index hints and VIEW ERROR 42000: Key 'non_existant' doesn't exist in table 'v1' SELECT * FROM v1 IGNORE KEY(non_existant); ERROR HY000: Incorrect usage of index hints and VIEW ERROR 42000: Key 'non_existant' doesn't exist in table 'v1' DROP VIEW v1; DROP TABLE t1; CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT, b INT NOT NULL DEFAULT 0, Loading Loading @@ -3674,6 +3674,31 @@ DROP VIEW v1; CREATE VIEW v1 AS SELECT 1; DROP VIEW v1; CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2)); INSERT INTO t1 VALUES (1,1), (2,2), (3,3); SELECT * FROM t1 USE INDEX (PRIMARY) WHERE c1=2; c1 c2 2 2 SELECT * FROM t1 USE INDEX (c2) WHERE c2=2; c1 c2 2 2 CREATE VIEW v1 AS SELECT c1, c2 FROM t1; SHOW INDEX FROM v1; Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment SELECT * FROM v1 USE INDEX (PRIMARY) WHERE c1=2; ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1' SELECT * FROM v1 FORCE INDEX (PRIMARY) WHERE c1=2; ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1' SELECT * FROM v1 IGNORE INDEX (PRIMARY) WHERE c1=2; ERROR 42000: Key 'PRIMARY' doesn't exist in table 'v1' SELECT * FROM v1 USE INDEX (c2) WHERE c2=2; ERROR 42000: Key 'c2' doesn't exist in table 'v1' SELECT * FROM v1 FORCE INDEX (c2) WHERE c2=2; ERROR 42000: Key 'c2' doesn't exist in table 'v1' SELECT * FROM v1 IGNORE INDEX (c2) WHERE c2=2; ERROR 42000: Key 'c2' doesn't exist in table 'v1' DROP VIEW v1; DROP TABLE t1; # ----------------------------------------------------------------- # -- End of 5.0 tests. # ----------------------------------------------------------------- Loading
mysql-test/t/view.test +30 −4 Original line number Diff line number Diff line Loading @@ -510,7 +510,7 @@ drop table t1; # create table t1 (a int, b int); create view v1 as select a, sum(b) from t1 group by a; --error ER_WRONG_USAGE --error ER_KEY_DOES_NOT_EXITS select b from v1 use index (some_index) where b=1; drop view v1; drop table t1; Loading Loading @@ -3421,11 +3421,11 @@ drop table t1; CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2); CREATE VIEW v1 AS SELECT * FROM t1; --error ER_WRONG_USAGE --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 USE KEY(non_existant); --error ER_WRONG_USAGE --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 FORCE KEY(non_existant); --error ER_WRONG_USAGE --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 IGNORE KEY(non_existant); DROP VIEW v1; Loading Loading @@ -3564,6 +3564,32 @@ DROP VIEW v1; CREATE VIEW v1 AS SELECT 1; DROP VIEW v1; # # Bug #33461: SELECT ... FROM <view> USE INDEX (...) throws an error # CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT, INDEX (c2)); INSERT INTO t1 VALUES (1,1), (2,2), (3,3); SELECT * FROM t1 USE INDEX (PRIMARY) WHERE c1=2; SELECT * FROM t1 USE INDEX (c2) WHERE c2=2; CREATE VIEW v1 AS SELECT c1, c2 FROM t1; SHOW INDEX FROM v1; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 USE INDEX (PRIMARY) WHERE c1=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 FORCE INDEX (PRIMARY) WHERE c1=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 IGNORE INDEX (PRIMARY) WHERE c1=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 USE INDEX (c2) WHERE c2=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 FORCE INDEX (c2) WHERE c2=2; --error ER_KEY_DOES_NOT_EXITS SELECT * FROM v1 IGNORE INDEX (c2) WHERE c2=2; DROP VIEW v1; DROP TABLE t1; --echo # ----------------------------------------------------------------- --echo # -- End of 5.0 tests. Loading
sql/sql_view.cc +3 −2 Original line number Diff line number Diff line Loading @@ -1049,7 +1049,8 @@ bool mysql_make_view(THD *thd, File_parser *parser, TABLE_LIST *table, if (table->index_hints && table->index_hints->elements) { my_error(ER_WRONG_USAGE, MYF(0), "index hints", "VIEW"); my_error(ER_KEY_DOES_NOT_EXITS, MYF(0), table->index_hints->head()->key_name.str, table->table_name); DBUG_RETURN(TRUE); } Loading