Commit 101a583f authored by unknown's avatar unknown

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()
parent a468c8f9
...@@ -3,16 +3,17 @@ ...@@ -3,16 +3,17 @@
# Untar a MySQL distribution, change the copyright texts, # Untar a MySQL distribution, change the copyright texts,
# pack it up again to a given directory # pack it up again to a given directory
$VER="1.1"; $VER="1.2";
use Getopt::Long; use Getopt::Long;
$opt_help= 0; $opt_help = 0;
$opt_target= "mysql-copyright-target-"; $opt_version = 0;
$opt_target.= `date +%d%m%y-%H%M%S`; $opt_target = "mysql-copyright-target-";
$opt_target .= `date +%d%m%y-%H%M%S`;
chop $opt_target; chop $opt_target;
GetOptions("help","target=s") || usage(); GetOptions("help","version","target=s") || error();
# fix the directory prefix for target dir # fix the directory prefix for target dir
...@@ -32,7 +33,13 @@ sub main ...@@ -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 $REG_VERSION = '[0-9\.\-]+[a-z]?[0-9\.\-]+?(.alpha|.beta|.gamma|pre\d|[0-9\.\-a-z])?';
my $target; 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`; `mkdir -p $opt_target`;
$pec= $? >> 8; $pec= $? >> 8;
...@@ -210,3 +217,16 @@ Options: ...@@ -210,3 +217,16 @@ Options:
EOF EOF
exit(0); exit(0);
} }
####
#### error
####
sub error
{
if ($#ARGV == -1)
{
print "Too few arguments to $0!\n";
}
exit(1);
}
...@@ -7589,7 +7589,7 @@ the DCE libraries while you compile @code{gcc} 2.95! ...@@ -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. 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: you will get the error:
@example @example
...@@ -28666,6 +28666,22 @@ shell> myisamchk /path/to/datadir/*/*.MYI ...@@ -28666,6 +28666,22 @@ shell> myisamchk /path/to/datadir/*/*.MYI
* myisamchk other options:: * myisamchk other options::
@end menu @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 options, @code{myisamchk}
@cindex @code{myisamchk}, options @cindex @code{myisamchk}, options
@node myisamchk general options, myisamchk check options, myisamchk syntax, myisamchk syntax @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. ...@@ -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 Fixed bug where the automatic repair of MyISAM tables failed sometimes
when the data file was corrupt. when the data file was corrupt.
@item @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} You can now use Unix sockets with @code{mit-pthreads}
Added the latin5 (turkish) character set Added the latin5 (turkish) character set
@item @item
...@@ -602,7 +602,7 @@ AC_MSG_RESULT($ac_cv_conv_longlong_to_float) ...@@ -602,7 +602,7 @@ AC_MSG_RESULT($ac_cv_conv_longlong_to_float)
dnl --------------------------------------------------------------------------- dnl ---------------------------------------------------------------------------
dnl Macro: MYSQL_CHECK_BDB dnl Macro: MYSQL_CHECK_BDB
dnl Sets HAVE_BERKELEY_DB if inst library is found 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 Looks in $srcdir for Berkeley distribution not told otherwise
dnl --------------------------------------------------------------------------- dnl ---------------------------------------------------------------------------
...@@ -806,15 +806,15 @@ AC_DEFUN([MYSQL_CHECK_BDB_VERSION], [ ...@@ -806,15 +806,15 @@ AC_DEFUN([MYSQL_CHECK_BDB_VERSION], [
if test $db_major -gt 3 if test $db_major -gt 3
then then
bdb_version_ok=yes 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 then
bdb_version_ok=yes 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 then
bdb_version_ok=yes bdb_version_ok=yes
else else
bdb_version_ok="invalid version $db_major.$db_minor.$db_patch" 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 fi
]) ])
......
...@@ -140,7 +140,7 @@ extern void bmove512(gptr dst,const gptr src,uint len); ...@@ -140,7 +140,7 @@ extern void bmove512(gptr dst,const gptr src,uint len);
#endif #endif
#if !defined(HAVE_BMOVE) && !defined(bmove) #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 #endif
extern void bmove_upp(char *dst,const char *src,uint len); extern void bmove_upp(char *dst,const char *src,uint len);
......
...@@ -290,14 +290,14 @@ int chk_size(MI_CHECK *param, register MI_INFO *info) ...@@ -290,14 +290,14 @@ int chk_size(MI_CHECK *param, register MI_INFO *info)
if (skr > size && skr != size + MEMMAP_EXTRA_MARGIN) if (skr > size && skr != size + MEMMAP_EXTRA_MARGIN)
{ {
error=1; 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)); llstr(size,buff), llstr(skr,buff2));
param->retry_without_quick=1; /* Don't use quick repair */ param->retry_without_quick=1; /* Don't use quick repair */
} }
else else
{ {
mi_check_print_warning(param, 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)); llstr(size,buff), llstr(skr,buff2));
} }
} }
......
No preview for this file type
...@@ -203,7 +203,7 @@ const char **ha_berkeley::bas_ext() const ...@@ -203,7 +203,7 @@ const char **ha_berkeley::bas_ext() const
static int 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 a=uint5korr((char*) new_key->data);
ulonglong b=uint5korr((char*) saved_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) ...@@ -211,9 +211,9 @@ berkeley_cmp_hidden_key(const DBT *new_key, const DBT *saved_key)
} }
static int 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 *new_key_ptr= (char*) new_key->data;
char *saved_key_ptr=(char*) saved_key->data; char *saved_key_ptr=(char*) saved_key->data;
KEY_PART_INFO *key_part= key->key_part, *end=key_part+key->key_parts; 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) ...@@ -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 */ /* The following is not yet used; Should be used for fixed length keys */
static int 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 *new_key_ptr= (char*) new_key->data;
char *saved_key_ptr=(char*) saved_key->data; char *saved_key_ptr=(char*) saved_key->data;
KEY_PART_INFO *key_part= key->key_part, *end=key_part+key->key_parts; 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) ...@@ -321,6 +321,8 @@ int ha_berkeley::open(const char *name, int mode, uint test_if_locked)
file->set_bt_compare(file, file->set_bt_compare(file,
(hidden_primary_key ? berkeley_cmp_hidden_key : (hidden_primary_key ? berkeley_cmp_hidden_key :
berkeley_cmp_packed_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, if ((error=(file->open(file, fn_format(name_buff,name,"", ha_berkeley_ext,
2 | 4), 2 | 4),
"main", DB_BTREE, open_mode,0)))) "main", DB_BTREE, open_mode,0))))
...@@ -359,6 +361,7 @@ int ha_berkeley::open(const char *name, int mode, uint test_if_locked) ...@@ -359,6 +361,7 @@ int ha_berkeley::open(const char *name, int mode, uint test_if_locked)
sprintf(part,"key%02d",++used_keys); sprintf(part,"key%02d",++used_keys);
key_type[i]=table->key_info[i].flags & HA_NOSAME ? DB_NOOVERWRITE : 0; 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_compare(*ptr, berkeley_cmp_packed_key);
(*ptr)->set_bt_app_private(*ptr,table->key_info+i);
if (!(table->key_info[i].flags & HA_NOSAME)) if (!(table->key_info[i].flags & HA_NOSAME))
(*ptr)->set_flags(*ptr, DB_DUP); (*ptr)->set_flags(*ptr, DB_DUP);
if ((error=((*ptr)->open(*ptr, name_buff, part, DB_BTREE, 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, ...@@ -561,7 +564,6 @@ DBT *ha_berkeley::pack_key(DBT *key, uint keynr, char *buff,
DBUG_ENTER("pack_key"); DBUG_ENTER("pack_key");
key->data=buff; key->data=buff;
key->app_private= key_info;
for ( ; key_part != end ; key_part++) for ( ; key_part != end ; key_part++)
{ {
...@@ -599,7 +601,6 @@ DBT *ha_berkeley::pack_key(DBT *key, uint keynr, char *buff, ...@@ -599,7 +601,6 @@ DBT *ha_berkeley::pack_key(DBT *key, uint keynr, char *buff,
bzero((char*) key,sizeof(*key)); bzero((char*) key,sizeof(*key));
key->data=buff; key->data=buff;
key->app_private= key_info;
for (; key_part != end && (int) key_length > 0 ; key_part++) 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, ...@@ -1055,7 +1056,6 @@ int ha_berkeley::read_row(int error, char *buf, uint keynr, DBT *row,
bzero((char*) &key,sizeof(key)); bzero((char*) &key,sizeof(key));
key.data=key_buff2; key.data=key_buff2;
key.size=row->size; key.size=row->size;
key.app_private=table->key_info+primary_key;
memcpy(key_buff2,row->data,row->size); memcpy(key_buff2,row->data,row->size);
/* Read the data into current_row */ /* Read the data into current_row */
current_row.flags=DB_DBT_REALLOC; current_row.flags=DB_DBT_REALLOC;
...@@ -1092,10 +1092,12 @@ int ha_berkeley::index_read(byte * buf, const byte * key, ...@@ -1092,10 +1092,12 @@ int ha_berkeley::index_read(byte * buf, const byte * key,
{ {
DBT row; DBT row;
int error; int error;
KEY *key_info= &table->key_info[active_index];
DBUG_ENTER("index_read"); DBUG_ENTER("index_read");
statistic_increment(ha_read_key_count,&LOCK_status); statistic_increment(ha_read_key_count,&LOCK_status);
bzero((char*) &row,sizeof(row)); 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, error=read_row(cursor->c_get(cursor, pack_key(&last_key,
active_index, active_index,
...@@ -1110,10 +1112,10 @@ int ha_berkeley::index_read(byte * buf, const byte * key, ...@@ -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); pack_key(&last_key, active_index, key_buff, key, key_len);
/* Store for compare */ /* Store for compare */
memcpy(key_buff2, key_buff, last_key.size); 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), error=read_row(cursor->c_get(cursor, &last_key, &row, DB_SET_RANGE),
buf, active_index, &row, (DBT*) 0, 0); 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) if (!error && find_flag == HA_READ_KEY_EXACT)
{ {
/* Check that we didn't find a key that wasn't equal to the current /* 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) ...@@ -1215,7 +1217,6 @@ DBT *ha_berkeley::get_pos(DBT *to, byte *pos)
bzero((char*) to,sizeof(*to)); bzero((char*) to,sizeof(*to));
to->data=pos; to->data=pos;
to->app_private=table->key_info+primary_key;
if (fixed_length_primary_key) if (fixed_length_primary_key)
to->size=ref_length; to->size=ref_length;
else else
......
...@@ -3905,12 +3905,16 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure) ...@@ -3905,12 +3905,16 @@ do_select(JOIN *join,List<Item> *fields,TABLE *table,Procedure *procedure)
if (error == -3) if (error == -3)
error=0; /* select_limit used */ error=0; /* select_limit used */
} }
if (!table) if (!table) /* If sending data to client */
{ {
if (error < 0) if (error < 0)
join->result->send_error(0,NullS); /* purecov: inspected */ join->result->send_error(0,NullS); /* purecov: inspected */
else if (join->result->send_eof()) else
error= -1; {
join_free(join); // Unlock all cursors
if (join->result->send_eof())
error= -1;
}
} }
else if (error < 0) else if (error < 0)
join->result->send_error(0,NullS); /* purecov: inspected */ join->result->send_error(0,NullS); /* purecov: inspected */
......
...@@ -718,17 +718,16 @@ store_create_info(THD *thd, TABLE *table, String *packet) ...@@ -718,17 +718,16 @@ store_create_info(THD *thd, TABLE *table, String *packet)
field->sql_type(type); field->sql_type(type);
packet->append(type.ptr(),type.length()); packet->append(type.ptr(),type.length());
bool null_default_value = (field->type() == FIELD_TYPE_TIMESTAMP || bool has_default = (field->type() != FIELD_TYPE_BLOB &&
field->unireg_check == Field::NEXT_NUMBER); field->type() != FIELD_TYPE_TIMESTAMP &&
bool has_default = (field->type() != FIELD_TYPE_BLOB); field->unireg_check != Field::NEXT_NUMBER);
if (flags & NOT_NULL_FLAG)
packet->append(" NOT NULL", 9);
if((flags & NOT_NULL_FLAG) && !null_default_value) if (has_default)
packet->append(" NOT NULL", 9);
if(has_default)
{ {
packet->append(" default ", 9); packet->append(" default ", 9);
if (!null_default_value && !field->is_null()) if (!field->is_null())
{ // Not null by default { // Not null by default
type.set(tmp,sizeof(tmp)); type.set(tmp,sizeof(tmp));
field->val_str(&type,&type); field->val_str(&type,&type);
...@@ -736,7 +735,7 @@ store_create_info(THD *thd, TABLE *table, String *packet) ...@@ -736,7 +735,7 @@ store_create_info(THD *thd, TABLE *table, String *packet)
packet->append(type.ptr(),type.length()); packet->append(type.ptr(),type.length());
packet->append('\''); packet->append('\'');
} }
else if (field->maybe_null() || null_default_value) else if (field->maybe_null())
packet->append("NULL", 4); // Null as default packet->append("NULL", 4); // Null as default
else else
packet->append(tmp,0); packet->append(tmp,0);
......
...@@ -52,7 +52,7 @@ asm(".L5: "); ...@@ -52,7 +52,7 @@ asm(".L5: ");
#else #else
void bmove(dst, src, len) void bmove(dst, src, len)
register byte *dst; register char *dst;
register const char *src; register const char *src;
register uint len; register uint len;
{ {
......
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