diff options
author | unknown <monty@donna.mysql.com> | 2000-10-24 02:39:54 +0300 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2000-10-24 02:39:54 +0300 |
commit | 101a583f0ec7c71786817bf13705737eeedfa366 (patch) | |
tree | 73129936be11d0b1bee843a961a70f81aeae1a6b /sql/ha_berkeley.cc | |
parent | a468c8f9a987ed919eb9883b8124b7ed58f3c943 (diff) | |
download | mariadb-git-101a583f0ec7c71786817bf13705737eeedfa366.tar.gz |
Update of interface for BDB tables.
Fixed bug in SHOW CREATE TABLE
Build-tools/mysql-copyright:
Shorter error message
Docs/manual.texi:
Update of myisamchk stuff
acinclude.m4:
Force use of Berkeley DB 3.2.3 or newer
include/m_string.h:
Changed type of arguments to bmove()
myisam/mi_check.c:
Nicer error message
mysql.proj:
Updated
sql/ha_berkeley.cc:
Use new key compare interface
sql/sql_select.cc:
Call join_free() early to free all cursors
sql/sql_show.cc:
Fixed CREATE TABLE when used with auto_increment columns
strings/bmove.c:
Changed type of arguments to bmove()
Diffstat (limited to 'sql/ha_berkeley.cc')
-rw-r--r-- | sql/ha_berkeley.cc | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index 274d9164a9b..bf993c39a20 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -203,7 +203,7 @@ const char **ha_berkeley::bas_ext() const static int -berkeley_cmp_hidden_key(const DBT *new_key, const DBT *saved_key) +berkeley_cmp_hidden_key(DB* file, const DBT *new_key, const DBT *saved_key) { ulonglong a=uint5korr((char*) new_key->data); ulonglong b=uint5korr((char*) saved_key->data); @@ -211,9 +211,9 @@ berkeley_cmp_hidden_key(const DBT *new_key, const DBT *saved_key) } static int -berkeley_cmp_packed_key(const DBT *new_key, const DBT *saved_key) +berkeley_cmp_packed_key(DB *file, const DBT *new_key, const DBT *saved_key) { - KEY *key= (KEY*) new_key->app_private; + KEY *key= (KEY*) BT_APP_PRIVATE(file); char *new_key_ptr= (char*) new_key->data; char *saved_key_ptr=(char*) saved_key->data; KEY_PART_INFO *key_part= key->key_part, *end=key_part+key->key_parts; @@ -242,9 +242,9 @@ berkeley_cmp_packed_key(const DBT *new_key, const DBT *saved_key) /* The following is not yet used; Should be used for fixed length keys */ static int -berkeley_cmp_fix_length_key(const DBT *new_key, const DBT *saved_key) +berkeley_cmp_fix_length_key(DB *file, const DBT *new_key, const DBT *saved_key) { - KEY *key=(KEY*) (new_key->app_private); + KEY *key=(KEY*) BT_APP_PRIVATE(file); char *new_key_ptr= (char*) new_key->data; char *saved_key_ptr=(char*) saved_key->data; KEY_PART_INFO *key_part= key->key_part, *end=key_part+key->key_parts; @@ -321,6 +321,8 @@ int ha_berkeley::open(const char *name, int mode, uint test_if_locked) file->set_bt_compare(file, (hidden_primary_key ? berkeley_cmp_hidden_key : berkeley_cmp_packed_key)); + if (!hidden_primary_key) + file->set_bt_app_private(file,table->key_info+table->primary_key); if ((error=(file->open(file, fn_format(name_buff,name,"", ha_berkeley_ext, 2 | 4), "main", DB_BTREE, open_mode,0)))) @@ -359,6 +361,7 @@ int ha_berkeley::open(const char *name, int mode, uint test_if_locked) sprintf(part,"key%02d",++used_keys); key_type[i]=table->key_info[i].flags & HA_NOSAME ? DB_NOOVERWRITE : 0; (*ptr)->set_bt_compare(*ptr, berkeley_cmp_packed_key); + (*ptr)->set_bt_app_private(*ptr,table->key_info+i); if (!(table->key_info[i].flags & HA_NOSAME)) (*ptr)->set_flags(*ptr, DB_DUP); if ((error=((*ptr)->open(*ptr, name_buff, part, DB_BTREE, @@ -561,7 +564,6 @@ DBT *ha_berkeley::pack_key(DBT *key, uint keynr, char *buff, DBUG_ENTER("pack_key"); key->data=buff; - key->app_private= key_info; for ( ; key_part != end ; key_part++) { @@ -599,7 +601,6 @@ DBT *ha_berkeley::pack_key(DBT *key, uint keynr, char *buff, bzero((char*) key,sizeof(*key)); key->data=buff; - key->app_private= key_info; for (; key_part != end && (int) key_length > 0 ; key_part++) { @@ -1055,7 +1056,6 @@ int ha_berkeley::read_row(int error, char *buf, uint keynr, DBT *row, bzero((char*) &key,sizeof(key)); key.data=key_buff2; key.size=row->size; - key.app_private=table->key_info+primary_key; memcpy(key_buff2,row->data,row->size); /* Read the data into current_row */ current_row.flags=DB_DBT_REALLOC; @@ -1092,10 +1092,12 @@ int ha_berkeley::index_read(byte * buf, const byte * key, { DBT row; int error; + KEY *key_info= &table->key_info[active_index]; DBUG_ENTER("index_read"); + statistic_increment(ha_read_key_count,&LOCK_status); bzero((char*) &row,sizeof(row)); - if (key_len == table->key_info[active_index].key_length) + if (key_len == key_info->key_length) { error=read_row(cursor->c_get(cursor, pack_key(&last_key, active_index, @@ -1110,10 +1112,10 @@ int ha_berkeley::index_read(byte * buf, const byte * key, pack_key(&last_key, active_index, key_buff, key, key_len); /* Store for compare */ memcpy(key_buff2, key_buff, last_key.size); - ((KEY*) last_key.app_private)->handler.bdb_return_if_eq= -1; + key_info->handler.bdb_return_if_eq= -1; error=read_row(cursor->c_get(cursor, &last_key, &row, DB_SET_RANGE), buf, active_index, &row, (DBT*) 0, 0); - ((KEY*) last_key.app_private)->handler.bdb_return_if_eq=0; + key_info->handler.bdb_return_if_eq= 0; if (!error && find_flag == HA_READ_KEY_EXACT) { /* Check that we didn't find a key that wasn't equal to the current @@ -1215,7 +1217,6 @@ DBT *ha_berkeley::get_pos(DBT *to, byte *pos) bzero((char*) to,sizeof(*to)); to->data=pos; - to->app_private=table->key_info+primary_key; if (fixed_length_primary_key) to->size=ref_length; else |