Commit 377b3e03 authored by igor@rurik.mysql.com's avatar igor@rurik.mysql.com

Fixed bug #17873: confusing error message when IGNORE/USE/FORCE INDEX

refers to a column name.
Added a new error message ER_INDEX_DOES_NOT_EXIST.
parent 6d285f8a
......@@ -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
......@@ -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", "",
......@@ -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
......
......@@ -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
......
......@@ -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
......
......@@ -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;
......@@ -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;
......
......@@ -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
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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'",
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment