mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
InnoDB support for HANDLER
This commit is contained in:
@ -920,12 +920,6 @@ create table t1 (t int not null default 1, key (t)) type=innodb;
|
|||||||
desc t1;
|
desc t1;
|
||||||
Field Type Null Key Default Extra
|
Field Type Null Key Default Extra
|
||||||
t int(11) MUL 1
|
t int(11) MUL 1
|
||||||
handler t1 open t1;
|
|
||||||
Table handler for 't1' doesn't have this option
|
|
||||||
handler t1 read t first;
|
|
||||||
Unknown table 't1' in HANDLER
|
|
||||||
handler t1 close;
|
|
||||||
Unknown table 't1' in HANDLER
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
number bigint(20) NOT NULL default '0',
|
number bigint(20) NOT NULL default '0',
|
||||||
|
139
mysql-test/r/innodb_handler.result
Normal file
139
mysql-test/r/innodb_handler.result
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
drop table if exists t1;
|
||||||
|
create table t1 (a int, b char(10), key a(a), key b(a,b)) type=innodb;
|
||||||
|
insert into t1 values
|
||||||
|
(17,"ddd"),(18,"eee"),(19,"fff"),(19,"yyy"),
|
||||||
|
(14,"aaa"),(15,"bbb"),(16,"ccc"),(16,"xxx"),
|
||||||
|
(20,"ggg"),(21,"hhh"),(22,"iii");
|
||||||
|
handler t1 open as t2;
|
||||||
|
handler t2 read a first;
|
||||||
|
a b
|
||||||
|
14 aaa
|
||||||
|
handler t2 read a next;
|
||||||
|
a b
|
||||||
|
15 bbb
|
||||||
|
handler t2 read a next;
|
||||||
|
a b
|
||||||
|
16 ccc
|
||||||
|
handler t2 read a prev;
|
||||||
|
a b
|
||||||
|
15 bbb
|
||||||
|
handler t2 read a last;
|
||||||
|
a b
|
||||||
|
22 iii
|
||||||
|
handler t2 read a prev;
|
||||||
|
a b
|
||||||
|
21 hhh
|
||||||
|
handler t2 read a prev;
|
||||||
|
a b
|
||||||
|
20 ggg
|
||||||
|
handler t2 read a first;
|
||||||
|
a b
|
||||||
|
14 aaa
|
||||||
|
handler t2 read a prev;
|
||||||
|
a b
|
||||||
|
handler t2 read a last;
|
||||||
|
a b
|
||||||
|
22 iii
|
||||||
|
handler t2 read a prev;
|
||||||
|
a b
|
||||||
|
21 hhh
|
||||||
|
handler t2 read a next;
|
||||||
|
a b
|
||||||
|
22 iii
|
||||||
|
handler t2 read a next;
|
||||||
|
a b
|
||||||
|
handler t2 read a=(15);
|
||||||
|
a b
|
||||||
|
15 bbb
|
||||||
|
handler t2 read a=(16);
|
||||||
|
a b
|
||||||
|
16 ccc
|
||||||
|
handler t2 read a=(19,"fff");
|
||||||
|
Too many key parts specified. Max 1 parts allowed
|
||||||
|
handler t2 read b=(19,"fff");
|
||||||
|
a b
|
||||||
|
19 fff
|
||||||
|
handler t2 read b=(19,"yyy");
|
||||||
|
a b
|
||||||
|
19 yyy
|
||||||
|
handler t2 read b=(19);
|
||||||
|
a b
|
||||||
|
19 fff
|
||||||
|
handler t1 read a last;
|
||||||
|
Unknown table 't1' in HANDLER
|
||||||
|
handler t2 read a=(11);
|
||||||
|
a b
|
||||||
|
handler t2 read a>=(11);
|
||||||
|
a b
|
||||||
|
14 aaa
|
||||||
|
handler t2 read a=(18);
|
||||||
|
a b
|
||||||
|
18 eee
|
||||||
|
handler t2 read a>=(18);
|
||||||
|
a b
|
||||||
|
18 eee
|
||||||
|
handler t2 read a>(18);
|
||||||
|
a b
|
||||||
|
19 fff
|
||||||
|
handler t2 read a<=(18);
|
||||||
|
a b
|
||||||
|
18 eee
|
||||||
|
handler t2 read a<(18);
|
||||||
|
a b
|
||||||
|
17 ddd
|
||||||
|
handler t2 read a first limit 5;
|
||||||
|
a b
|
||||||
|
14 aaa
|
||||||
|
15 bbb
|
||||||
|
16 ccc
|
||||||
|
16 xxx
|
||||||
|
17 ddd
|
||||||
|
handler t2 read a next limit 3;
|
||||||
|
a b
|
||||||
|
18 eee
|
||||||
|
19 fff
|
||||||
|
19 yyy
|
||||||
|
handler t2 read a prev limit 10;
|
||||||
|
a b
|
||||||
|
19 fff
|
||||||
|
18 eee
|
||||||
|
17 ddd
|
||||||
|
16 xxx
|
||||||
|
16 ccc
|
||||||
|
15 bbb
|
||||||
|
14 aaa
|
||||||
|
handler t2 read a>=(16) limit 4;
|
||||||
|
a b
|
||||||
|
16 ccc
|
||||||
|
16 xxx
|
||||||
|
17 ddd
|
||||||
|
18 eee
|
||||||
|
handler t2 read a>=(16) limit 2,2;
|
||||||
|
a b
|
||||||
|
17 ddd
|
||||||
|
18 eee
|
||||||
|
handler t2 read a last limit 3;
|
||||||
|
a b
|
||||||
|
22 iii
|
||||||
|
21 hhh
|
||||||
|
20 ggg
|
||||||
|
handler t2 read a=(19);
|
||||||
|
a b
|
||||||
|
19 fff
|
||||||
|
handler t2 read a=(19) where b="yyy";
|
||||||
|
a b
|
||||||
|
19 yyy
|
||||||
|
handler t2 read first;
|
||||||
|
a b
|
||||||
|
17 ddd
|
||||||
|
handler t2 read next;
|
||||||
|
a b
|
||||||
|
18 eee
|
||||||
|
alter table t1 type=innodb;
|
||||||
|
handler t2 read next;
|
||||||
|
a b
|
||||||
|
19 fff
|
||||||
|
handler t2 read last;
|
||||||
|
You have an error in your SQL syntax near '' at line 1
|
||||||
|
handler t2 close;
|
||||||
|
drop table if exists t1;
|
@ -578,17 +578,11 @@ explain select a,b,c from t1;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Check describe & handler
|
# Check describe
|
||||||
#
|
#
|
||||||
|
|
||||||
create table t1 (t int not null default 1, key (t)) type=innodb;
|
create table t1 (t int not null default 1, key (t)) type=innodb;
|
||||||
desc t1;
|
desc t1;
|
||||||
--error 1031
|
|
||||||
handler t1 open t1;
|
|
||||||
--error 1109
|
|
||||||
handler t1 read t first;
|
|
||||||
--error 1109
|
|
||||||
handler t1 close;
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
|
69
mysql-test/t/innodb_handler.test
Normal file
69
mysql-test/t/innodb_handler.test
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
-- source include/have_innodb.inc
|
||||||
|
|
||||||
|
#
|
||||||
|
# test of HANDLER ...
|
||||||
|
#
|
||||||
|
|
||||||
|
drop table if exists t1;
|
||||||
|
create table t1 (a int, b char(10), key a(a), key b(a,b)) type=innodb;
|
||||||
|
insert into t1 values
|
||||||
|
(17,"ddd"),(18,"eee"),(19,"fff"),(19,"yyy"),
|
||||||
|
(14,"aaa"),(15,"bbb"),(16,"ccc"),(16,"xxx"),
|
||||||
|
(20,"ggg"),(21,"hhh"),(22,"iii");
|
||||||
|
handler t1 open as t2;
|
||||||
|
handler t2 read a first;
|
||||||
|
handler t2 read a next;
|
||||||
|
handler t2 read a next;
|
||||||
|
handler t2 read a prev;
|
||||||
|
handler t2 read a last;
|
||||||
|
handler t2 read a prev;
|
||||||
|
handler t2 read a prev;
|
||||||
|
|
||||||
|
handler t2 read a first;
|
||||||
|
handler t2 read a prev;
|
||||||
|
|
||||||
|
handler t2 read a last;
|
||||||
|
handler t2 read a prev;
|
||||||
|
handler t2 read a next;
|
||||||
|
handler t2 read a next;
|
||||||
|
|
||||||
|
handler t2 read a=(15);
|
||||||
|
handler t2 read a=(16);
|
||||||
|
|
||||||
|
!$1070 handler t2 read a=(19,"fff");
|
||||||
|
|
||||||
|
handler t2 read b=(19,"fff");
|
||||||
|
handler t2 read b=(19,"yyy");
|
||||||
|
handler t2 read b=(19);
|
||||||
|
|
||||||
|
!$1109 handler t1 read a last;
|
||||||
|
|
||||||
|
handler t2 read a=(11);
|
||||||
|
handler t2 read a>=(11);
|
||||||
|
|
||||||
|
handler t2 read a=(18);
|
||||||
|
handler t2 read a>=(18);
|
||||||
|
handler t2 read a>(18);
|
||||||
|
handler t2 read a<=(18);
|
||||||
|
handler t2 read a<(18);
|
||||||
|
|
||||||
|
handler t2 read a first limit 5;
|
||||||
|
handler t2 read a next limit 3;
|
||||||
|
handler t2 read a prev limit 10;
|
||||||
|
|
||||||
|
handler t2 read a>=(16) limit 4;
|
||||||
|
handler t2 read a>=(16) limit 2,2;
|
||||||
|
handler t2 read a last limit 3;
|
||||||
|
|
||||||
|
handler t2 read a=(19);
|
||||||
|
handler t2 read a=(19) where b="yyy";
|
||||||
|
|
||||||
|
handler t2 read first;
|
||||||
|
handler t2 read next;
|
||||||
|
alter table t1 type=innodb;
|
||||||
|
handler t2 read next;
|
||||||
|
!$1064 handler t2 read last;
|
||||||
|
|
||||||
|
handler t2 close;
|
||||||
|
drop table if exists t1;
|
||||||
|
|
@ -404,7 +404,6 @@ ha_innobase::update_thd(
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef notdefined
|
|
||||||
/* The code here appears for documentational purposes only. Not used
|
/* The code here appears for documentational purposes only. Not used
|
||||||
or tested yet. Will be used in 4.1. */
|
or tested yet. Will be used in 4.1. */
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
@ -420,9 +419,6 @@ ha_innobase::init_table_handle_for_HANDLER(void)
|
|||||||
{
|
{
|
||||||
row_prebuilt_t* prebuilt;
|
row_prebuilt_t* prebuilt;
|
||||||
|
|
||||||
ut_a(0); /* the code has not been used or tested yet; to prevent
|
|
||||||
inadvertent usage we assert an error here */
|
|
||||||
|
|
||||||
/* If current thd does not yet have a trx struct, create one.
|
/* If current thd does not yet have a trx struct, create one.
|
||||||
If the current handle does not yet have a prebuilt struct, create
|
If the current handle does not yet have a prebuilt struct, create
|
||||||
one. Update the trx pointers in the prebuilt struct. Normally
|
one. Update the trx pointers in the prebuilt struct. Normally
|
||||||
@ -462,7 +458,6 @@ ha_innobase::init_table_handle_for_HANDLER(void)
|
|||||||
|
|
||||||
prebuilt->read_just_key = FALSE;
|
prebuilt->read_just_key = FALSE;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
Opens an InnoDB database. */
|
Opens an InnoDB database. */
|
||||||
|
@ -76,7 +76,7 @@ class ha_innobase: public handler
|
|||||||
ha_innobase(TABLE *table): handler(table),
|
ha_innobase(TABLE *table): handler(table),
|
||||||
int_table_flags(HA_REC_NOT_IN_SEQ |
|
int_table_flags(HA_REC_NOT_IN_SEQ |
|
||||||
HA_KEYPOS_TO_RNDPOS | HA_LASTKEY_ORDER |
|
HA_KEYPOS_TO_RNDPOS | HA_LASTKEY_ORDER |
|
||||||
HA_NULL_KEY |
|
HA_NULL_KEY | HA_CAN_SQL_HANDLER |
|
||||||
HA_NOT_EXACT_COUNT |
|
HA_NOT_EXACT_COUNT |
|
||||||
HA_NO_WRITE_DELAYED |
|
HA_NO_WRITE_DELAYED |
|
||||||
HA_PRIMARY_KEY_IN_READ_INDEX |
|
HA_PRIMARY_KEY_IN_READ_INDEX |
|
||||||
@ -164,8 +164,7 @@ class ha_innobase: public handler
|
|||||||
void free_foreign_key_create_info(char* str);
|
void free_foreign_key_create_info(char* str);
|
||||||
THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
|
THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
|
||||||
enum thr_lock_type lock_type);
|
enum thr_lock_type lock_type);
|
||||||
/* void init_table_handle_for_HANDLER(); Not tested or used yet, code
|
void init_table_handle_for_HANDLER();
|
||||||
included for documentational purposes only */
|
|
||||||
longlong get_auto_increment();
|
longlong get_auto_increment();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -313,6 +313,8 @@ public:
|
|||||||
virtual void append_create_info(String *packet) {}
|
virtual void append_create_info(String *packet) {}
|
||||||
virtual char* get_foreign_key_create_info()
|
virtual char* get_foreign_key_create_info()
|
||||||
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
||||||
|
virtual void init_table_handle_for_HANDLER()
|
||||||
|
{ return; } /* prepare InnoDB for HANDLER */
|
||||||
virtual void free_foreign_key_create_info(char* str) {}
|
virtual void free_foreign_key_create_info(char* str) {}
|
||||||
/* The following can be called without an open handler */
|
/* The following can be called without an open handler */
|
||||||
virtual const char *table_type() const =0;
|
virtual const char *table_type() const =0;
|
||||||
|
@ -117,6 +117,7 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
|
|||||||
keyname,tables->name);
|
keyname,tables->name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
table->file->index_init(keyno);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<Item> list;
|
List<Item> list;
|
||||||
@ -127,7 +128,7 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
|
|||||||
|
|
||||||
insert_fields(thd,tables,tables->db,tables->name,&it);
|
insert_fields(thd,tables,tables->db,tables->name,&it);
|
||||||
|
|
||||||
table->file->index_init(keyno);
|
table->file->init_table_handle_for_HANDLER(); // Only InnoDB requires it
|
||||||
|
|
||||||
select_limit+=offset_limit;
|
select_limit+=offset_limit;
|
||||||
send_fields(thd,list,1);
|
send_fields(thd,list,1);
|
||||||
|
Reference in New Issue
Block a user