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 | |
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()
-rwxr-xr-x | Build-tools/mysql-copyright | 32 | ||||
-rw-r--r-- | Docs/manual.texi | 20 | ||||
-rw-r--r-- | acinclude.m4 | 8 | ||||
-rw-r--r-- | include/m_string.h | 2 | ||||
-rw-r--r-- | myisam/mi_check.c | 4 | ||||
-rw-r--r-- | mysql.proj | bin | 163840 -> 167936 bytes | |||
-rw-r--r-- | sql/ha_berkeley.cc | 25 | ||||
-rw-r--r-- | sql/sql_select.cc | 12 | ||||
-rw-r--r-- | sql/sql_show.cc | 17 | ||||
-rw-r--r-- | strings/bmove.c | 2 |
10 files changed, 82 insertions, 40 deletions
diff --git a/Build-tools/mysql-copyright b/Build-tools/mysql-copyright index a4eac33ded8..f481325bebb 100755 --- a/Build-tools/mysql-copyright +++ b/Build-tools/mysql-copyright @@ -3,16 +3,17 @@ # Untar a MySQL distribution, change the copyright texts, # pack it up again to a given directory -$VER="1.1"; +$VER="1.2"; use Getopt::Long; -$opt_help= 0; -$opt_target= "mysql-copyright-target-"; -$opt_target.= `date +%d%m%y-%H%M%S`; +$opt_help = 0; +$opt_version = 0; +$opt_target = "mysql-copyright-target-"; +$opt_target .= `date +%d%m%y-%H%M%S`; chop $opt_target; -GetOptions("help","target=s") || usage(); +GetOptions("help","version","target=s") || error(); # fix the directory prefix for target dir @@ -32,7 +33,13 @@ sub main my $REG_VERSION = '[0-9\.\-]+[a-z]?[0-9\.\-]+?(.alpha|.beta|.gamma|pre\d|[0-9\.\-a-z])?'; my $target; - usage() if (!$ARGV[0] || $opt_help); + if ($opt_version) + { + print "$0 version $VER by Jani Tolonen\n"; + exit(0); + } + usage() if ($opt_help); + print error() if ($#ARGV == -1); `mkdir -p $opt_target`; $pec= $? >> 8; @@ -210,3 +217,16 @@ Options: EOF exit(0); } + +#### +#### error +#### + +sub error +{ + if ($#ARGV == -1) + { + print "Too few arguments to $0!\n"; + } + exit(1); +} diff --git a/Docs/manual.texi b/Docs/manual.texi index 3afb6161a75..dbb6923d3ed 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -7589,7 +7589,7 @@ the DCE libraries while you compile @code{gcc} 2.95! For HPUX Version 11.x we recommend @strong{MySQL} 3.23.15 or later. -If you are using @code{gcc} 2.95.1 on a unpatched HPUX Versiib 11.x system, +If you are using @code{gcc} 2.95.1 on a unpatched HPUX 11.x system, you will get the error: @example @@ -28666,6 +28666,22 @@ shell> myisamchk /path/to/datadir/*/*.MYI * myisamchk other options:: @end menu +Note that if you get an error like: + +@example +myisamchk: warning: 1 clients is using or hasn't closed the table properly +@end example + +This means that you are trying to check a table that has been updated by +the another program (like the mysqld server) that hasn't yet closed +the file or that has died without closing the file properly. + +If you @code{mysqld} is running, you must force a sync/close of all +tables with @code{FLUSH TABLES} and ensure that no one is using the +tables while you are running @code{myisamchk}. In MySQL 3.23 the easiest +way to avoid this problem is to use @code{CHECK TABLE} instead of +@code{myisamchk} to check tables. + @cindex options, @code{myisamchk} @cindex @code{myisamchk}, options @node myisamchk general options, myisamchk check options, myisamchk syntax, myisamchk syntax @@ -38157,6 +38173,8 @@ though, so 3.23 is not released as a stable version yet. Fixed bug where the automatic repair of MyISAM tables failed sometimes when the data file was corrupt. @item +Changed BDB tables to use new compare function in Berkeley DB 3.2.3 +@item You can now use Unix sockets with @code{mit-pthreads} Added the latin5 (turkish) character set @item diff --git a/acinclude.m4 b/acinclude.m4 index 7361acd6bee..c8dab319c99 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -602,7 +602,7 @@ AC_MSG_RESULT($ac_cv_conv_longlong_to_float) dnl --------------------------------------------------------------------------- dnl Macro: MYSQL_CHECK_BDB dnl Sets HAVE_BERKELEY_DB if inst library is found -dnl Makes sure db version is >= 3.1.11 +dnl Makes sure db version is >= 3.2.3 dnl Looks in $srcdir for Berkeley distribution not told otherwise dnl --------------------------------------------------------------------------- @@ -806,15 +806,15 @@ AC_DEFUN([MYSQL_CHECK_BDB_VERSION], [ if test $db_major -gt 3 then bdb_version_ok=yes - elif test $db_major -eq 3 && test $db_minor -gt 1 + elif test $db_major -eq 3 && test $db_minor -gt 2 then bdb_version_ok=yes - elif test $db_major -eq 3 && test $db_minor -eq 1 && test $db_patch -ge 11 + elif test $db_major -eq 3 && test $db_minor -eq 2 && test $db_patch -ge 3 then bdb_version_ok=yes else bdb_version_ok="invalid version $db_major.$db_minor.$db_patch" - bdb_version_ok="$bdb_version_ok (must be at least version 3.1.11)" + bdb_version_ok="$bdb_version_ok (must be at least version 3.2.3)" fi ]) diff --git a/include/m_string.h b/include/m_string.h index 6b7719d44f5..ce5197f17af 100644 --- a/include/m_string.h +++ b/include/m_string.h @@ -140,7 +140,7 @@ extern void bmove512(gptr dst,const gptr src,uint len); #endif #if !defined(HAVE_BMOVE) && !defined(bmove) -extern void bmove(gptr dst,const char *src,uint len); +extern void bmove(char *dst, const char *src,uint len); #endif extern void bmove_upp(char *dst,const char *src,uint len); diff --git a/myisam/mi_check.c b/myisam/mi_check.c index 2e3df08083d..253abbbcffb 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -290,14 +290,14 @@ int chk_size(MI_CHECK *param, register MI_INFO *info) if (skr > size && skr != size + MEMMAP_EXTRA_MARGIN) { error=1; - mi_check_print_error(param,"Size of datafile is: %-8s Should be: %s", + mi_check_print_error(param,"Size of datafile is: %-9s Should be: %s", llstr(size,buff), llstr(skr,buff2)); param->retry_without_quick=1; /* Don't use quick repair */ } else { mi_check_print_warning(param, - "Size of datafile is: %-8s Should be: %s", + "Size of datafile is: %-9s Should be: %s", llstr(size,buff), llstr(skr,buff2)); } } diff --git a/mysql.proj b/mysql.proj Binary files differindex f8a4ea2d46f..0cf0074c048 100644 --- a/mysql.proj +++ b/mysql.proj 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 diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 4cdfc992e19..d97a59cb898 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -3905,12 +3905,16 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure) if (error == -3) error=0; /* select_limit used */ } - if (!table) + if (!table) /* If sending data to client */ { if (error < 0) - join->result->send_error(0,NullS); /* purecov: inspected */ - else if (join->result->send_eof()) - error= -1; + join->result->send_error(0,NullS); /* purecov: inspected */ + else + { + join_free(join); // Unlock all cursors + if (join->result->send_eof()) + error= -1; + } } else if (error < 0) join->result->send_error(0,NullS); /* purecov: inspected */ diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 8c3c5dc6bf5..eb7e1455297 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -718,17 +718,16 @@ store_create_info(THD *thd, TABLE *table, String *packet) field->sql_type(type); packet->append(type.ptr(),type.length()); - bool null_default_value = (field->type() == FIELD_TYPE_TIMESTAMP || - field->unireg_check == Field::NEXT_NUMBER); - bool has_default = (field->type() != FIELD_TYPE_BLOB); + bool has_default = (field->type() != FIELD_TYPE_BLOB && + field->type() != FIELD_TYPE_TIMESTAMP && + field->unireg_check != Field::NEXT_NUMBER); + if (flags & NOT_NULL_FLAG) + packet->append(" NOT NULL", 9); - if((flags & NOT_NULL_FLAG) && !null_default_value) - packet->append(" NOT NULL", 9); - - if(has_default) + if (has_default) { packet->append(" default ", 9); - if (!null_default_value && !field->is_null()) + if (!field->is_null()) { // Not null by default type.set(tmp,sizeof(tmp)); field->val_str(&type,&type); @@ -736,7 +735,7 @@ store_create_info(THD *thd, TABLE *table, String *packet) packet->append(type.ptr(),type.length()); packet->append('\''); } - else if (field->maybe_null() || null_default_value) + else if (field->maybe_null()) packet->append("NULL", 4); // Null as default else packet->append(tmp,0); diff --git a/strings/bmove.c b/strings/bmove.c index 096a6282609..f63ff0bd4f8 100644 --- a/strings/bmove.c +++ b/strings/bmove.c @@ -52,7 +52,7 @@ asm(".L5: "); #else void bmove(dst, src, len) -register byte *dst; +register char *dst; register const char *src; register uint len; { |