diff options
33 files changed, 86 insertions, 59 deletions
diff --git a/include/mysqld_error.h b/include/mysqld_error.h index 776869ff045..726779c45c5 100644 --- a/include/mysqld_error.h +++ b/include/mysqld_error.h @@ -319,4 +319,5 @@ #define ER_INVALID_CHARACTER_STRING 1300 #define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1301 #define ER_CONFLICTING_DECLARATIONS 1302 +#define ER_INDEX_DOES_NOT_EXIST 1303 #define ER_ERROR_MESSAGES 303 diff --git a/include/sql_state.h b/include/sql_state.h index 52a359405e1..079349eb3cb 100644 --- a/include/sql_state.h +++ b/include/sql_state.h @@ -162,3 +162,4 @@ ER_WARN_DATA_TRUNCATED, "01000", "", ER_WRONG_NAME_FOR_INDEX, "42000", "", ER_WRONG_NAME_FOR_CATALOG, "42000", "", ER_UNKNOWN_STORAGE_ENGINE, "42000", "", +ER_INDEX_DOES_NOT_EXIST, "42000", "", diff --git a/mysql-test/r/explain.result b/mysql-test/r/explain.result index d66dec741bd..f77ddce118e 100644 --- a/mysql-test/r/explain.result +++ b/mysql-test/r/explain.result @@ -24,9 +24,9 @@ explain select * from t1 use key (str,str) where str="foo"; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1 const str str 11 const 1 explain select * from t1 use key (str,str,foo) where str="foo"; -ERROR 42000: Key column 'foo' doesn't exist in table +ERROR 42000: Index 'foo' is not defined for table 't1' explain select * from t1 ignore key (str,str,foo) where str="foo"; -ERROR 42000: Key column 'foo' doesn't exist in table +ERROR 42000: Index 'foo' is not defined for table 't1' drop table t1; explain select 1; id select_type table type possible_keys key key_len ref rows Extra diff --git a/mysql-test/r/key_cache.result b/mysql-test/r/key_cache.result index 15dc244693d..749af3c87d8 100644 --- a/mysql-test/r/key_cache.result +++ b/mysql-test/r/key_cache.result @@ -191,7 +191,7 @@ cache index t1 in unknown_key_cache; ERROR HY000: Unknown key cache 'unknown_key_cache' cache index t1 key (unknown_key) in keycache1; Table Op Msg_type Msg_text -test.t1 assign_to_keycache error Key column 'unknown_key' doesn't exist in table +test.t1 assign_to_keycache error Index 'unknown_key' is not defined for table 't1' test.t1 assign_to_keycache status Operation failed select @@keycache2.key_buffer_size; @@keycache2.key_buffer_size diff --git a/mysql-test/r/preload.result b/mysql-test/r/preload.result index 7237a0da7e0..efe39dc1f22 100644 --- a/mysql-test/r/preload.result +++ b/mysql-test/r/preload.result @@ -158,7 +158,7 @@ Key_reads 0 load index into cache t3 key (b), t2 key (c) ; Table Op Msg_type Msg_text test.t3 preload_keys error Table 'test.t3' doesn't exist -test.t2 preload_keys error Key column 'c' doesn't exist in table +test.t2 preload_keys error Index 'c' is not defined for table 't2' test.t2 preload_keys status Operation failed show status like "key_read%"; Variable_name Value diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result index b80ca2b195e..82cb4f2b978 100644 --- a/mysql-test/r/select.result +++ b/mysql-test/r/select.result @@ -143,9 +143,9 @@ explain select fld3 from t2 use index (fld1,fld3) where fld3 = 'honeysuckle'; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 ref fld3 fld3 30 const 1 Using where; Using index explain select fld3 from t2 ignore index (fld3,not_used); -ERROR 42000: Key column 'not_used' doesn't exist in table +ERROR 42000: Index 'not_used' is not defined for table 't2' explain select fld3 from t2 use index (not_used); -ERROR 42000: Key column 'not_used' doesn't exist in table +ERROR 42000: Index 'not_used' is not defined for table 't2' select t2.fld3 from t2 where fld3 >= 'honeysuckle' and fld3 <= 'honoring' order by fld3; fld3 honeysuckle @@ -2714,3 +2714,13 @@ select * from t1 where f1 in (select f3 from t2 where (f3,f4)= (select f3,f4 fro f1 f2 1 1 drop table t1,t2; +CREATE TABLE t1 (a int, INDEX idx(a)); +INSERT INTO t1 VALUES (2), (3), (1); +EXPLAIN SELECT * FROM t1 IGNORE INDEX (idx); +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE t1 ALL NULL NULL NULL NULL 3 +EXPLAIN SELECT * FROM t1 IGNORE INDEX (a); +ERROR 42000: Index 'a' is not defined for table 't1' +EXPLAIN SELECT * FROM t1 FORCE INDEX (a); +ERROR 42000: Index 'a' is not defined for table 't1' +DROP TABLE t1; diff --git a/mysql-test/t/explain.test b/mysql-test/t/explain.test index 2a3a23c5f96..8e64255f239 100644 --- a/mysql-test/t/explain.test +++ b/mysql-test/t/explain.test @@ -15,9 +15,9 @@ explain select * from t1 ignore key (str) where str="foo"; explain select * from t1 use key (str,str) where str="foo"; #The following should give errors ---error 1072 +--error 1303 explain select * from t1 use key (str,str,foo) where str="foo"; ---error 1072 +--error 1303 explain select * from t1 ignore key (str,str,foo) where str="foo"; drop table t1; diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test index 996d5854854..90d54e59b61 100644 --- a/mysql-test/t/select.test +++ b/mysql-test/t/select.test @@ -1295,9 +1295,9 @@ explain select fld3 from t2 use index (fld1,fld3) where fld3 = 'honeysuckle'; # The next should give an error # --- error 1072 +-- error 1303 explain select fld3 from t2 ignore index (fld3,not_used); --- error 1072 +-- error 1303 explain select fld3 from t2 use index (not_used); # @@ -2248,4 +2248,19 @@ insert into t2 values(1,1); select * from t1 where f1 in (select f3 from t2 where (f3,f4)= (select f3,f4 from t2)); drop table t1,t2; +# +# Bug #17873: confusing error message when IGNORE INDEX refers a column name +# + +CREATE TABLE t1 (a int, INDEX idx(a)); +INSERT INTO t1 VALUES (2), (3), (1); + +EXPLAIN SELECT * FROM t1 IGNORE INDEX (idx); +--error 1303 +EXPLAIN SELECT * FROM t1 IGNORE INDEX (a); +--error 1303 +EXPLAIN SELECT * FROM t1 FORCE INDEX (a); + +DROP TABLE t1; + # End of 4.1 tests diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt index 04f8fcc8dd4..f99ddfc82a4 100644 --- a/sql/share/czech/errmsg.txt +++ b/sql/share/czech/errmsg.txt @@ -330,5 +330,5 @@ character-set=latin2 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt index 4983d39714a..b12b2bbff48 100644 --- a/sql/share/danish/errmsg.txt +++ b/sql/share/danish/errmsg.txt @@ -321,5 +321,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt index 3f320dca750..923a739bab6 100644 --- a/sql/share/dutch/errmsg.txt +++ b/sql/share/dutch/errmsg.txt @@ -330,5 +330,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt index 763c984866b..35cea937a44 100644 --- a/sql/share/english/errmsg.txt +++ b/sql/share/english/errmsg.txt @@ -318,5 +318,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/estonian/errmsg.txt b/sql/share/estonian/errmsg.txt index b7557a37670..741bac333db 100644 --- a/sql/share/estonian/errmsg.txt +++ b/sql/share/estonian/errmsg.txt @@ -323,5 +323,5 @@ character-set=latin7 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt index 6f10a468e26..4164aa67427 100644 --- a/sql/share/french/errmsg.txt +++ b/sql/share/french/errmsg.txt @@ -318,5 +318,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt index c3d00ae06b4..11be1d95a79 100644 --- a/sql/share/german/errmsg.txt +++ b/sql/share/german/errmsg.txt @@ -331,5 +331,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt index 979091a566c..c03f526cc2a 100644 --- a/sql/share/greek/errmsg.txt +++ b/sql/share/greek/errmsg.txt @@ -318,5 +318,5 @@ character-set=greek "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt index 5d32c5b9cc2..45e42c60ed9 100644 --- a/sql/share/hungarian/errmsg.txt +++ b/sql/share/hungarian/errmsg.txt @@ -323,5 +323,5 @@ character-set=latin2 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt index 556b90511b0..e5d4f2d6812 100644 --- a/sql/share/italian/errmsg.txt +++ b/sql/share/italian/errmsg.txt @@ -318,5 +318,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/japanese-sjis/errmsg.txt b/sql/share/japanese-sjis/errmsg.txt index 1aa9ef74d5f..995f58c1845 100644 --- a/sql/share/japanese-sjis/errmsg.txt +++ b/sql/share/japanese-sjis/errmsg.txt @@ -322,5 +322,5 @@ character-set=sjis "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt index 47adbf74b86..97e8ced4764 100644 --- a/sql/share/japanese/errmsg.txt +++ b/sql/share/japanese/errmsg.txt @@ -322,5 +322,5 @@ character-set=ujis "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt index aeafef9d159..28dff9788fc 100644 --- a/sql/share/korean/errmsg.txt +++ b/sql/share/korean/errmsg.txt @@ -318,5 +318,5 @@ character-set=euckr "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt index 3f60876348f..2164feaf7cd 100644 --- a/sql/share/norwegian-ny/errmsg.txt +++ b/sql/share/norwegian-ny/errmsg.txt @@ -320,5 +320,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt index badeed1c0dd..425016ea32d 100644 --- a/sql/share/norwegian/errmsg.txt +++ b/sql/share/norwegian/errmsg.txt @@ -320,5 +320,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt index 664a8e8e539..f24b325f37d 100644 --- a/sql/share/polish/errmsg.txt +++ b/sql/share/polish/errmsg.txt @@ -323,5 +323,5 @@ character-set=latin2 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt index 453c9dd5c18..f3ec49f4b76 100644 --- a/sql/share/portuguese/errmsg.txt +++ b/sql/share/portuguese/errmsg.txt @@ -320,5 +320,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt index 0fcc2804326..58f4341d005 100644 --- a/sql/share/romanian/errmsg.txt +++ b/sql/share/romanian/errmsg.txt @@ -323,5 +323,5 @@ character-set=latin2 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt index 1913fd3f1c1..eb2f81047c2 100644 --- a/sql/share/russian/errmsg.txt +++ b/sql/share/russian/errmsg.txt @@ -323,5 +323,5 @@ character-set=koi8r "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/serbian/errmsg.txt b/sql/share/serbian/errmsg.txt index adda7d7cf53..558c1ef780c 100644 --- a/sql/share/serbian/errmsg.txt +++ b/sql/share/serbian/errmsg.txt @@ -311,5 +311,5 @@ character-set=cp1250 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt index fafab0c2716..58590279359 100644 --- a/sql/share/slovak/errmsg.txt +++ b/sql/share/slovak/errmsg.txt @@ -326,5 +326,5 @@ character-set=latin2 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt index 3af8e7b97d1..8fd295aea04 100644 --- a/sql/share/spanish/errmsg.txt +++ b/sql/share/spanish/errmsg.txt @@ -322,5 +322,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt index b552df08bf3..e55aa70922f 100644 --- a/sql/share/swedish/errmsg.txt +++ b/sql/share/swedish/errmsg.txt @@ -318,5 +318,5 @@ character-set=latin1 "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt index 9914846b1f8..2b0026e3674 100644 --- a/sql/share/ukrainian/errmsg.txt +++ b/sql/share/ukrainian/errmsg.txt @@ -324,5 +324,5 @@ character-set=koi8u "Invalid TIMESTAMP value in column '%s' at row %ld", "Invalid %s character string: '%.64s'", "Result of %s() was larger than max_allowed_packet (%ld) - truncated" -"Conflicting declarations: '%s%s' and '%s%s'" - +"Conflicting declarations: '%s%s' and '%s%s'", +"Index '%-.100s' is not defined for table '%-.100s'", diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 4f18b2ea99f..e681b0b0a73 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2633,7 +2633,7 @@ bool get_key_map_from_key_list(key_map *map, TABLE *table, if ((pos= find_type(&table->keynames, name->ptr(), name->length(), 1)) <= 0) { - my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), name->c_ptr(), + my_error(ER_INDEX_DOES_NOT_EXIST, MYF(0), name->c_ptr(), table->real_name); map->set_all(); return 1; |