Commit d0e8dbc4 authored by Michael Widenius's avatar Michael Widenius

Merge with 5.1

parents 6bc209c2 21332120
...@@ -560,3 +560,13 @@ HANDLER t1 READ a NEXT; ...@@ -560,3 +560,13 @@ HANDLER t1 READ a NEXT;
a a
HANDLER t1 CLOSE; HANDLER t1 CLOSE;
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 (f1 integer, f2 integer, primary key (f1), key (f2)) engine=innodb;
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
HANDLER t1 OPEN;
HANDLER t1 READ FIRST WHERE f2 <= 1;
f1 f2
1 1
HANDLER t1 READ `PRIMARY` PREV;
f1 f2
3 3
DROP TABLE t1;
...@@ -15,3 +15,14 @@ let $engine_type= InnoDB; ...@@ -15,3 +15,14 @@ let $engine_type= InnoDB;
--source init.inc --source init.inc
--source handler.inc --source handler.inc
#
# LP#697610 ha_index_prev(uchar*): Assertion `inited==INDEX'
#
CREATE TABLE t1 (f1 integer, f2 integer, primary key (f1), key (f2)) engine=innodb;
INSERT INTO t1 VALUES (1,1),(2,2),(3,3);
HANDLER t1 OPEN;
HANDLER t1 READ FIRST WHERE f2 <= 1;
HANDLER t1 READ `PRIMARY` PREV;
DROP TABLE t1;
...@@ -1195,14 +1195,18 @@ class handler :public Sql_alloc ...@@ -1195,14 +1195,18 @@ class handler :public Sql_alloc
DBUG_ENTER("ha_index_init"); DBUG_ENTER("ha_index_init");
DBUG_ASSERT(inited==NONE); DBUG_ASSERT(inited==NONE);
if (!(result= index_init(idx, sorted))) if (!(result= index_init(idx, sorted)))
inited=INDEX; {
inited= INDEX;
active_index= idx;
}
DBUG_RETURN(result); DBUG_RETURN(result);
} }
int ha_index_end() int ha_index_end()
{ {
DBUG_ENTER("ha_index_end"); DBUG_ENTER("ha_index_end");
DBUG_ASSERT(inited==INDEX); DBUG_ASSERT(inited==INDEX);
inited=NONE; inited= NONE;
active_index= MAX_KEY;
DBUG_RETURN(index_end()); DBUG_RETURN(index_end());
} }
/* This is called after index_init() if we need to do a index scan */ /* This is called after index_init() if we need to do a index scan */
...@@ -1371,7 +1375,12 @@ class handler :public Sql_alloc ...@@ -1371,7 +1375,12 @@ class handler :public Sql_alloc
as there may be several calls to this routine. as there may be several calls to this routine.
*/ */
virtual void column_bitmaps_signal(); virtual void column_bitmaps_signal();
uint get_index(void) const { return active_index; } /*
We have to check for inited as some engines, like innodb, sets
active_index during table scan.
*/
uint get_index(void) const
{ return inited == INDEX ? active_index : MAX_KEY; }
virtual int close(void)=0; virtual int close(void)=0;
/** /**
...@@ -1824,8 +1833,8 @@ class handler :public Sql_alloc ...@@ -1824,8 +1833,8 @@ class handler :public Sql_alloc
*/ */
virtual int open(const char *name, int mode, uint test_if_locked)=0; virtual int open(const char *name, int mode, uint test_if_locked)=0;
virtual int index_init(uint idx, bool sorted) { active_index= idx; return 0; } virtual int index_init(uint idx, bool sorted) { return 0; }
virtual int index_end() { active_index= MAX_KEY; return 0; } virtual int index_end() { return 0; }
/** /**
rnd_init() can be called two times without rnd_end() in between rnd_init() can be called two times without rnd_end() in between
(it only makes sense if scan=1). (it only makes sense if scan=1).
......
...@@ -2453,7 +2453,6 @@ int ha_federated::index_init(uint keynr, bool sorted) ...@@ -2453,7 +2453,6 @@ int ha_federated::index_init(uint keynr, bool sorted)
{ {
DBUG_ENTER("ha_federated::index_init"); DBUG_ENTER("ha_federated::index_init");
DBUG_PRINT("info", ("table: '%s' key: %u", table->s->table_name.str, keynr)); DBUG_PRINT("info", ("table: '%s' key: %u", table->s->table_name.str, keynr));
active_index= keynr;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
...@@ -2589,7 +2588,6 @@ int ha_federated::index_end(void) ...@@ -2589,7 +2588,6 @@ int ha_federated::index_end(void)
{ {
DBUG_ENTER("ha_federated::index_end"); DBUG_ENTER("ha_federated::index_end");
free_result(); free_result();
active_index= MAX_KEY;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
...@@ -759,6 +759,8 @@ ulong init_pagecache(PAGECACHE *pagecache, size_t use_mem, ...@@ -759,6 +759,8 @@ ulong init_pagecache(PAGECACHE *pagecache, size_t use_mem,
{ {
if (blocks < 8) if (blocks < 8)
{ {
my_message(ENOMEM, "Not enough memory to allocate 8 pagecache pages",
MYF(0));
my_errno= ENOMEM; my_errno= ENOMEM;
goto err; goto err;
} }
......
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