Commit 01604355 authored by unknown's avatar unknown

Bug #6748 heap_rfirst() doesn't work (and never did!)

range for BETWEEN typo fixed


extra/perror.c:
  meaningless error message fixed
heap/hp_rfirst.c:
  Bug #6748 heap_rfirst() doesn't work (and never did!)
mysql-test/r/heap.result:
  Bug #6748 heap_rfirst() doesn't work (and never did!)
mysql-test/r/range.result:
  range for BETWEEN typo fixed
mysql-test/t/heap.test:
  Bug #6748 heap_rfirst() doesn't work (and never did!)
sql/handler.cc:
  Bug #6748 heap_rfirst() doesn't work (and never did!)
sql/sql_select.cc:
  range for BETWEEN typo fixed
parent a3740c88
...@@ -69,7 +69,7 @@ static HA_ERRORS ha_errlist[]= ...@@ -69,7 +69,7 @@ static HA_ERRORS ha_errlist[]=
{ {
{ 120,"Didn't find key on read or update" }, { 120,"Didn't find key on read or update" },
{ 121,"Duplicate key on write or update" }, { 121,"Duplicate key on write or update" },
{ 123,"Someone has changed the row since it was read; Update with is recoverable" }, { 123,"Someone has changed the row since it was read (while the table was locked to prevent it)" },
{ 124,"Wrong index given to function" }, { 124,"Wrong index given to function" },
{ 126,"Index file is crashed" }, { 126,"Index file is crashed" },
{ 127,"Record-file is crashed" }, { 127,"Record-file is crashed" },
......
...@@ -52,6 +52,7 @@ int heap_rfirst(HP_INFO *info, byte *record, int inx) ...@@ -52,6 +52,7 @@ int heap_rfirst(HP_INFO *info, byte *record, int inx)
my_errno=HA_ERR_END_OF_FILE; my_errno=HA_ERR_END_OF_FILE;
DBUG_RETURN(my_errno); DBUG_RETURN(my_errno);
} }
DBUG_ASSERT(0); /* TODO fix it */
info->current_record=0; info->current_record=0;
info->current_hash_ptr=0; info->current_hash_ptr=0;
info->update=HA_STATE_PREV_FOUND; info->update=HA_STATE_PREV_FOUND;
......
...@@ -233,3 +233,10 @@ SELECT * FROM t1 WHERE B is not null; ...@@ -233,3 +233,10 @@ SELECT * FROM t1 WHERE B is not null;
a B a B
1 1 1 1
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (pseudo char(35) PRIMARY KEY, date int(10) unsigned NOT NULL) ENGINE=HEAP;
INSERT INTO t1 VALUES ('massecot',1101106491),('altec',1101106492),('stitch+',1101106304),('Seb Corgan',1101106305),('beerfilou',1101106263),('flaker',1101106529),('joce8',5),('M4vrick',1101106418),('gabay008',1101106525),('Vamp irX',1101106291),('ZoomZip',1101106546),('rip666',1101106502),('CBP ',1101106397),('guezpard',1101106496);
DELETE FROM t1 WHERE date<1101106546;
SELECT * FROM t1;
pseudo date
ZoomZip 1101106546
DROP TABLE t1;
...@@ -221,7 +221,7 @@ update t1 set y=x; ...@@ -221,7 +221,7 @@ update t1 set y=x;
explain select * from t1, t1 t2 where t1.y = 2 and t2.x between 7 and t1.y+0; explain select * from t1, t1 t2 where t1.y = 2 and t2.x between 7 and t1.y+0;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ref y y 5 const 1 Using where 1 SIMPLE t1 ref y y 5 const 1 Using where
1 SIMPLE t2 range x x 5 NULL 4 Using where 1 SIMPLE t2 range x x 5 NULL 4 Range checked for each record (index map: 0x1)
explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= 7 and t2.x <= t1.y+0; explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= 7 and t2.x <= t1.y+0;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ref y y 5 const 1 Using where 1 SIMPLE t1 ref y y 5 const 1 Using where
...@@ -237,7 +237,7 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -237,7 +237,7 @@ id select_type table type possible_keys key key_len ref rows Extra
explain select * from t1, t1 t2 where t1.y = 2 and t2.x between 0 and t1.y; explain select * from t1, t1 t2 where t1.y = 2 and t2.x between 0 and t1.y;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ref y y 5 const 1 Using where 1 SIMPLE t1 ref y y 5 const 1 Using where
1 SIMPLE t2 ALL x NULL NULL NULL 9 Using where 1 SIMPLE t2 ALL x NULL NULL NULL 9 Range checked for each record (index map: 0x1)
explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= 0 and t2.x <= t1.y; explain select * from t1, t1 t2 where t1.y = 2 and t2.x >= 0 and t2.x <= t1.y;
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 ref y y 5 const 1 Using where 1 SIMPLE t1 ref y y 5 const 1 Using where
......
...@@ -174,3 +174,14 @@ CREATE TABLE t1 (a INT NOT NULL, B INT, KEY(B)) ENGINE=HEAP; ...@@ -174,3 +174,14 @@ CREATE TABLE t1 (a INT NOT NULL, B INT, KEY(B)) ENGINE=HEAP;
INSERT INTO t1 VALUES(1,1), (1,NULL); INSERT INTO t1 VALUES(1,1), (1,NULL);
SELECT * FROM t1 WHERE B is not null; SELECT * FROM t1 WHERE B is not null;
DROP TABLE t1; DROP TABLE t1;
#
# Bug #6748
# heap_rfirst() doesn't work (and never did!)
#
CREATE TABLE t1 (pseudo char(35) PRIMARY KEY, date int(10) unsigned NOT NULL) ENGINE=HEAP;
INSERT INTO t1 VALUES ('massecot',1101106491),('altec',1101106492),('stitch+',1101106304),('Seb Corgan',1101106305),('beerfilou',1101106263),('flaker',1101106529),('joce8',5),('M4vrick',1101106418),('gabay008',1101106525),('Vamp irX',1101106291),('ZoomZip',1101106546),('rip666',1101106502),('CBP ',1101106397),('guezpard',1101106496);
DELETE FROM t1 WHERE date<1101106546;
SELECT * FROM t1;
DROP TABLE t1;
...@@ -953,8 +953,10 @@ int handler::read_first_row(byte * buf, uint primary_key) ...@@ -953,8 +953,10 @@ int handler::read_first_row(byte * buf, uint primary_key)
/* /*
If there is very few deleted rows in the table, find the first row by If there is very few deleted rows in the table, find the first row by
scanning the table. scanning the table.
TODO remove the test for HA_READ_ORDER
*/ */
if (deleted < 10 || primary_key >= MAX_KEY) if (deleted < 10 || primary_key >= MAX_KEY ||
!(index_flags(primary_key, 0, 0) & HA_READ_ORDER))
{ {
(void) ha_rnd_init(1); (void) ha_rnd_init(1);
while ((error= rnd_next(buf)) == HA_ERR_RECORD_DELETED) ; while ((error= rnd_next(buf)) == HA_ERR_RECORD_DELETED) ;
......
...@@ -2154,7 +2154,7 @@ add_key_field(KEY_FIELD **key_fields,uint and_level, COND *cond, ...@@ -2154,7 +2154,7 @@ add_key_field(KEY_FIELD **key_fields,uint and_level, COND *cond,
bool is_const=1; bool is_const=1;
for (uint i=0; i<num_values; i++) for (uint i=0; i<num_values; i++)
is_const&= (*value)->const_item(); is_const&= value[i]->const_item();
if (is_const) if (is_const)
stat[0].const_keys.merge(possible_keys); stat[0].const_keys.merge(possible_keys);
/* /*
......
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