Commit a7c5b9c2 authored by monty@donna.mysql.com's avatar monty@donna.mysql.com

Portability fixes for OPENBSD, OS2 and Windows

parent 5218a03a
...@@ -2222,6 +2222,9 @@ Apart from the following links, you can find and download a lot of ...@@ -2222,6 +2222,9 @@ Apart from the following links, you can find and download a lot of
@item @uref{http://www.4t2.com/mysql}@* @item @uref{http://www.4t2.com/mysql}@*
Information about the German MySQL mailing list. Information about the German MySQL mailing list.
@item @uref{http://www2.rent-a-database.de/mysql/}
@strong{MySQL} manual in German.
@item @uref{http://www.bitmover.com:8888//home/bk/mysql}@* @item @uref{http://www.bitmover.com:8888//home/bk/mysql}@*
Web access to the @strong{MySQL} BitKeeper repository. Web access to the @strong{MySQL} BitKeeper repository.
...@@ -3612,7 +3615,7 @@ Payment should be made to: ...@@ -3612,7 +3615,7 @@ Payment should be made to:
Postgirot Bank AB Postgirot Bank AB
105 06 STOCKHOLM, SWEDEN 105 06 STOCKHOLM, SWEDEN
TCX DataKonsult AB MySQL AB
BOX 6434 BOX 6434
11382 STOCKHOLM, SWEDEN 11382 STOCKHOLM, SWEDEN
...@@ -3629,7 +3632,7 @@ If you want to pay by check, make it payable to ``MySQL Finland AB'' and ...@@ -3629,7 +3632,7 @@ If you want to pay by check, make it payable to ``MySQL Finland AB'' and
mail it to the address below: mail it to the address below:
@example @example
TCX DataKonsult AB MySQL AB
BOX 6434, Torsgatan 21 BOX 6434, Torsgatan 21
11382 STOCKHOLM, SWEDEN 11382 STOCKHOLM, SWEDEN
@end example @end example
...@@ -8903,17 +8906,19 @@ below: ...@@ -8903,17 +8906,19 @@ below:
@example @example
shell> BINDIR/mysqladmin version shell> BINDIR/mysqladmin version
mysqladmin Ver 6.3 Distrib 3.22.9-beta, for pc-linux-gnu on i686 mysqladmin Ver 8.14 Distrib 3.23.32, for linux on i586
TCX Datakonsult AB, by Monty Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL license
Server version 3.22.9-beta Server version 3.23.32-debug
Protocol version 10 Protocol version 10
Connection Localhost via Unix socket Connection Localhost via Unix socket
TCP port 3306 TCP port 3306
UNIX socket /tmp/mysql.sock UNIX socket /tmp/mysql.sock
Uptime: 16 sec Uptime: 16 sec
Running threads: 1 Questions: 20 Reloads: 2 Open tables: 3 Threads: 1 Questions: 9 Slow queries: 0 Opens: 7 Flush tables: 2 Open tables: 0 Queries per second avg: 0.000 Memory in use: 132K Max memory used: 16773K
@end example @end example
To get a feeling for what else you can do with @code{BINDIR/mysqladmin}, To get a feeling for what else you can do with @code{BINDIR/mysqladmin},
...@@ -18528,7 +18533,7 @@ CHECK TABLE tbl_name[,tbl_name...] [option [option...]] ...@@ -18528,7 +18533,7 @@ CHECK TABLE tbl_name[,tbl_name...] [option [option...]]
option = QUICK | FAST | MEDIUM | EXTEND | CHANGED option = QUICK | FAST | MEDIUM | EXTEND | CHANGED
@end example @end example
@code{CHECK TABLE} only works on @code{MyISAM} and @code{BDB} tables. On @code{CHECK TABLE} only works on @code{MyISAM} tables. On
@code{MyISAM} tables it's the same thing as running @code{myisamchk -m @code{MyISAM} tables it's the same thing as running @code{myisamchk -m
table_name} on the table. table_name} on the table.
...@@ -18567,9 +18572,6 @@ For dynamic sized @code{MyISAM} tables a started check will always ...@@ -18567,9 +18572,6 @@ For dynamic sized @code{MyISAM} tables a started check will always
do a @code{MEDIUM} check. For static size rows we skip the row scan do a @code{MEDIUM} check. For static size rows we skip the row scan
for @code{QUICK} and @code{FAST} as the rows are very seldom corrupted. for @code{QUICK} and @code{FAST} as the rows are very seldom corrupted.
Note that for BDB tables the different check options doesn't affect the
check in any way!
You can combine check options as in: You can combine check options as in:
@example @example
...@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script. ...@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
AC_INIT(sql/mysqld.cc) AC_INIT(sql/mysqld.cc)
AC_CANONICAL_SYSTEM AC_CANONICAL_SYSTEM
# The Docs Makefile.am parses this line! # The Docs Makefile.am parses this line!
AM_INIT_AUTOMAKE(mysql, 3.23.32) AM_INIT_AUTOMAKE(mysql, 3.23.33)
AM_CONFIG_HEADER(config.h) AM_CONFIG_HEADER(config.h)
PROTOCOL_VERSION=10 PROTOCOL_VERSION=10
...@@ -129,6 +129,7 @@ fi ...@@ -129,6 +129,7 @@ fi
# Still need ranlib for readline; local static use only so no libtool. # Still need ranlib for readline; local static use only so no libtool.
AC_PROG_RANLIB AC_PROG_RANLIB
# We use libtool # We use libtool
#AC_LIBTOOL_WIN32_DLL
AM_PROG_LIBTOOL AM_PROG_LIBTOOL
#AC_LIBTOOL_DLOPEN AC_LIBTOOL_WIN32_DLL AC_DISABLE_FAST_INSTALL AC_DISABLE_SHARED AC_DISABLE_STATIC #AC_LIBTOOL_DLOPEN AC_LIBTOOL_WIN32_DLL AC_DISABLE_FAST_INSTALL AC_DISABLE_SHARED AC_DISABLE_STATIC
......
...@@ -41,13 +41,6 @@ extern int NEAR my_errno; /* Last error in mysys */ ...@@ -41,13 +41,6 @@ extern int NEAR my_errno; /* Last error in mysys */
#include <stdarg.h> #include <stdarg.h>
#ifdef __EMX__
/* record loging flags (F_GETLK, F_SETLK, F_SETLKW) */
#define F_RDLCK 1 /* FreeBSD: shared or read lock */
#define F_UNLCK 2 /* FreeBSD: unlock */
#define F_WRLCK 3 /* FreeBSD: exclusive or write lock */
#endif
#define MYSYS_PROGRAM_USES_CURSES() { error_handler_hook = my_message_curses; mysys_uses_curses=1; } #define MYSYS_PROGRAM_USES_CURSES() { error_handler_hook = my_message_curses; mysys_uses_curses=1; }
#define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;} #define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;}
#define MY_INIT(name); { my_progname= name; my_init(); } #define MY_INIT(name); { my_progname= name; my_init(); }
......
...@@ -1411,8 +1411,8 @@ else ...@@ -1411,8 +1411,8 @@ else
os2*) os2*)
hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_flag_spec='-L$libdir'
hardcode_minus_L=yes hardcode_minus_L=yes
allow_undefined_flag=unsupported allow_undefined_flag=" "
archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def' archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll $linkflags -o $lib $libobjs $deplibs $objdir/$libname.def'
old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def'
;; ;;
...@@ -2036,6 +2036,7 @@ os2*) ...@@ -2036,6 +2036,7 @@ os2*)
need_lib_prefix=no need_lib_prefix=no
library_names_spec='$libname.dll $libname.a' library_names_spec='$libname.dll $libname.a'
dynamic_linker='OS/2 ld.exe' dynamic_linker='OS/2 ld.exe'
deplibs_check_method=pass_all
shlibpath_var=LIBPATH shlibpath_var=LIBPATH
;; ;;
......
...@@ -819,6 +819,7 @@ compiler." ...@@ -819,6 +819,7 @@ compiler."
old_convenience= old_convenience=
deplibs= deplibs=
linkopts= linkopts=
linkflags=
if test -n "$shlibpath_var"; then if test -n "$shlibpath_var"; then
# get the directories listed in $shlibpath_var # get the directories listed in $shlibpath_var
...@@ -1159,6 +1160,7 @@ compiler." ...@@ -1159,6 +1160,7 @@ compiler."
# Unknown arguments in both finalize_command and compile_command need # Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later. # to be aesthetically quoted because they are evaled later.
arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
linkflags="$linkflags $arg"
case "$arg" in case "$arg" in
*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*)
arg="\"$arg\"" arg="\"$arg\""
......
...@@ -44,6 +44,7 @@ static char *rcsid = "$Id$"; ...@@ -44,6 +44,7 @@ static char *rcsid = "$Id$";
#include <resolv.h> #include <resolv.h>
#define NET_BUFSIZE 4096 #define NET_BUFSIZE 4096
#undef ALIGN
#define ALIGN(p, t) ((char *)(((((long)(p) - 1) / sizeof(t)) + 1) * sizeof(t))) #define ALIGN(p, t) ((char *)(((((long)(p) - 1) / sizeof(t)) + 1) * sizeof(t)))
#define SP(p, t, n) (ALIGN(p, t) + (n) * sizeof(t)) #define SP(p, t, n) (ALIGN(p, t) + (n) * sizeof(t))
......
...@@ -44,6 +44,7 @@ static char *rcsid = "$Id$"; ...@@ -44,6 +44,7 @@ static char *rcsid = "$Id$";
#include <resolv.h> #include <resolv.h>
#define PROTO_BUFSIZE 4096 #define PROTO_BUFSIZE 4096
#undef ALIGN
#define ALIGN(p, t) ((char *)(((((long)(p) - 1) / sizeof(t)) + 1) * sizeof(t))) #define ALIGN(p, t) ((char *)(((((long)(p) - 1) / sizeof(t)) + 1) * sizeof(t)))
#define SP(p, t, n) (ALIGN(p, t) + (n) * sizeof(t)) #define SP(p, t, n) (ALIGN(p, t) + (n) * sizeof(t))
......
...@@ -44,6 +44,7 @@ static char *rcsid = "$Id$"; ...@@ -44,6 +44,7 @@ static char *rcsid = "$Id$";
#include <resolv.h> #include <resolv.h>
#define HOST_BUFSIZE 4096 #define HOST_BUFSIZE 4096
#undef ALIGN
#define ALIGN(p, t) ((char *)(((((long)(p) - 1) / sizeof(t)) + 1) * sizeof(t))) #define ALIGN(p, t) ((char *)(((((long)(p) - 1) / sizeof(t)) + 1) * sizeof(t)))
#define SP(p, t, n) (ALIGN(p, t) + (n) * sizeof(t)) #define SP(p, t, n) (ALIGN(p, t) + (n) * sizeof(t))
......
...@@ -44,6 +44,7 @@ static char *rcsid = "$Id$"; ...@@ -44,6 +44,7 @@ static char *rcsid = "$Id$";
#include <resolv.h> #include <resolv.h>
#define SERV_BUFSIZE 4096 #define SERV_BUFSIZE 4096
#undef ALIGN
#define ALIGN(p, t) ((char *)(((((long)(p) - 1) / sizeof(t)) + 1) * sizeof(t))) #define ALIGN(p, t) ((char *)(((((long)(p) - 1) / sizeof(t)) + 1) * sizeof(t)))
#define SP(p, t, n) (ALIGN(p, t) + (n) * sizeof(t)) #define SP(p, t, n) (ALIGN(p, t) + (n) * sizeof(t))
......
...@@ -36,11 +36,12 @@ int mode; ...@@ -36,11 +36,12 @@ int mode;
int handle_locking; int handle_locking;
{ {
int save_errno,i,errpos; int save_errno,i,errpos;
uint files,dir_length; uint files,dir_length,length;
ulonglong file_offset; ulonglong file_offset;
char name_buff[FN_REFLEN*2],buff[FN_REFLEN],*end; char name_buff[FN_REFLEN*2],buff[FN_REFLEN],*end;
MYRG_INFO info,*m_info; MYRG_INFO info,*m_info;
FILE *file; File fd;
IO_CACHE file;
MI_INFO *isam,*last_isam; MI_INFO *isam,*last_isam;
DBUG_ENTER("myrg_open"); DBUG_ENTER("myrg_open");
...@@ -49,15 +50,18 @@ int handle_locking; ...@@ -49,15 +50,18 @@ int handle_locking;
isam=0; isam=0;
errpos=files=0; errpos=files=0;
bzero((gptr) &info,sizeof(info)); bzero((gptr) &info,sizeof(info));
if (!(file=my_fopen(fn_format(name_buff,name,"",MYRG_NAME_EXT,4), bzero((char*) &file,sizeof(file));
O_RDONLY | O_SHARE,MYF(0)))) if ((fd=my_open(fn_format(name_buff,name,"",MYRG_NAME_EXT,4),
O_RDONLY | O_SHARE,MYF(0))) < 0 ||
init_io_cache(&file, fd, IO_SIZE, READ_CACHE, 0, 0,
MYF(MY_WME | MY_NABP)))
goto err; goto err;
errpos=1; errpos=1;
dir_length=dirname_part(name_buff,name); dir_length=dirname_part(name_buff,name);
info.reclength=0; info.reclength=0;
while (fgets(buff,FN_REFLEN-1,file)) while ((length=my_b_gets(&file,buff,FN_REFLEN-1)))
{ {
if ((end=strend(buff))[-1] == '\n') if ((end=buff+length)[-1] == '\n')
end[-1]='\0'; end[-1]='\0';
if (buff[0] && buff[0] != '#') /* Skipp empty lines and comments */ if (buff[0] && buff[0] != '#') /* Skipp empty lines and comments */
{ {
...@@ -118,7 +122,8 @@ int handle_locking; ...@@ -118,7 +122,8 @@ int handle_locking;
m_info->end_table=m_info->open_tables+files; m_info->end_table=m_info->open_tables+files;
m_info->last_used_table=m_info->open_tables; m_info->last_used_table=m_info->open_tables;
VOID(my_fclose(file,MYF(0))); VOID(my_close(fd,MYF(0)));
end_io_cache(&file);
m_info->open_list.data=(void*) m_info; m_info->open_list.data=(void*) m_info;
pthread_mutex_lock(&THR_LOCK_open); pthread_mutex_lock(&THR_LOCK_open);
myrg_open_list=list_add(myrg_open_list,&m_info->open_list); myrg_open_list=list_add(myrg_open_list,&m_info->open_list);
...@@ -132,7 +137,8 @@ err: ...@@ -132,7 +137,8 @@ err:
my_free((char*) m_info,MYF(0)); my_free((char*) m_info,MYF(0));
/* Fall through */ /* Fall through */
case 1: case 1:
VOID(my_fclose(file,MYF(0))); VOID(my_close(fd,MYF(0)));
end_io_cache(&file);
for (i=files ; i-- > 0 ; ) for (i=files ; i-- > 0 ; )
{ {
isam=last_isam; isam=last_isam;
......
...@@ -29,6 +29,10 @@ ...@@ -29,6 +29,10 @@
#include <direct.h> #include <direct.h>
#endif #endif
#ifdef __EMX__
// chdir2 support also drive change
#define chdir _chdir2
#endif
/* Gets current working directory in buff. Directory is allways ended /* Gets current working directory in buff. Directory is allways ended
with FN_LIBCHAR */ with FN_LIBCHAR */
......
...@@ -4710,13 +4710,13 @@ create_field::create_field(Field *old_field,Field *orig_field) ...@@ -4710,13 +4710,13 @@ create_field::create_field(Field *old_field,Field *orig_field)
orig_field) orig_field)
{ {
char buff[MAX_FIELD_WIDTH],*pos; char buff[MAX_FIELD_WIDTH],*pos;
String tmp(buff,sizeof(buff)),*res; String tmp(buff,sizeof(buff));
/* Get the value from record[2] (the default value row) */ /* Get the value from record[2] (the default value row) */
my_ptrdiff_t diff= (my_ptrdiff_t) (orig_field->table->rec_buff_length*2); my_ptrdiff_t diff= (my_ptrdiff_t) (orig_field->table->rec_buff_length*2);
orig_field->move_field(diff); // Points now at record[2] orig_field->move_field(diff); // Points now at record[2]
bool is_null=orig_field->is_real_null(); bool is_null=orig_field->is_real_null();
res=orig_field->val_str(&tmp,&tmp); orig_field->val_str(&tmp,&tmp);
orig_field->move_field(-diff); // Back to record[0] orig_field->move_field(-diff); // Back to record[0]
if (!is_null) if (!is_null)
{ {
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
class Send_field; class Send_field;
struct st_cache_field; struct st_cache_field;
void field_conv(Field *to,Field *from);
class Field { class Field {
Field(const Item &); /* Prevent use of theese */ Field(const Item &); /* Prevent use of theese */
......
...@@ -110,8 +110,6 @@ static void berkeley_noticecall(DB_ENV *db_env, db_notices notice); ...@@ -110,8 +110,6 @@ static void berkeley_noticecall(DB_ENV *db_env, db_notices notice);
bool berkeley_init(void) bool berkeley_init(void)
{ {
char buff[1024],*config[10], **conf_pos, *str_pos;
conf_pos=config; str_pos=buff;
DBUG_ENTER("berkeley_init"); DBUG_ENTER("berkeley_init");
if (!berkeley_tmpdir) if (!berkeley_tmpdir)
...@@ -387,6 +385,7 @@ berkeley_cmp_packed_key(DB *file, const DBT *new_key, const DBT *saved_key) ...@@ -387,6 +385,7 @@ berkeley_cmp_packed_key(DB *file, 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 */
#ifdef NOT_YET
static int static int
berkeley_cmp_fix_length_key(DB *file, const DBT *new_key, const DBT *saved_key) berkeley_cmp_fix_length_key(DB *file, const DBT *new_key, const DBT *saved_key)
{ {
...@@ -407,7 +406,7 @@ berkeley_cmp_fix_length_key(DB *file, const DBT *new_key, const DBT *saved_key) ...@@ -407,7 +406,7 @@ berkeley_cmp_fix_length_key(DB *file, const DBT *new_key, const DBT *saved_key)
} }
return key->handler.bdb_return_if_eq; return key->handler.bdb_return_if_eq;
} }
#endif
/* Compare key against row */ /* Compare key against row */
...@@ -1901,7 +1900,6 @@ longlong ha_berkeley::get_auto_increment() ...@@ -1901,7 +1900,6 @@ longlong ha_berkeley::get_auto_increment()
{ {
DBT row,old_key; DBT row,old_key;
bzero((char*) &row,sizeof(row)); bzero((char*) &row,sizeof(row));
uint key_len;
KEY *key_info= &table->key_info[active_index]; KEY *key_info= &table->key_info[active_index];
/* Reading next available number for a sub key */ /* Reading next available number for a sub key */
...@@ -1947,6 +1945,7 @@ longlong ha_berkeley::get_auto_increment() ...@@ -1947,6 +1945,7 @@ longlong ha_berkeley::get_auto_increment()
Analyzing, checking, and optimizing tables Analyzing, checking, and optimizing tables
****************************************************************************/ ****************************************************************************/
#ifdef NOT_YET
static void print_msg(THD *thd, const char *table_name, const char *op_name, static void print_msg(THD *thd, const char *table_name, const char *op_name,
const char *msg_type, const char *fmt, ...) const char *msg_type, const char *fmt, ...)
{ {
...@@ -1970,7 +1969,7 @@ static void print_msg(THD *thd, const char *table_name, const char *op_name, ...@@ -1970,7 +1969,7 @@ static void print_msg(THD *thd, const char *table_name, const char *op_name,
thd->packet.length())) thd->packet.length()))
thd->killed=1; thd->killed=1;
} }
#endif
int ha_berkeley::analyze(THD* thd, HA_CHECK_OPT* check_opt) int ha_berkeley::analyze(THD* thd, HA_CHECK_OPT* check_opt)
{ {
...@@ -2025,14 +2024,14 @@ int ha_berkeley::optimize(THD* thd, HA_CHECK_OPT* check_opt) ...@@ -2025,14 +2024,14 @@ int ha_berkeley::optimize(THD* thd, HA_CHECK_OPT* check_opt)
int ha_berkeley::check(THD* thd, HA_CHECK_OPT* check_opt) int ha_berkeley::check(THD* thd, HA_CHECK_OPT* check_opt)
{ {
char name_buff[FN_REFLEN];
int error;
DB *tmp_file;
DBUG_ENTER("ha_berkeley::check"); DBUG_ENTER("ha_berkeley::check");
DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED); DBUG_RETURN(HA_ADMIN_NOT_IMPLEMENTED);
#ifdef NOT_YET #ifdef NOT_YET
char name_buff[FN_REFLEN];
int error;
DB *tmp_file;
/* /*
To get this to work we need to ensure that no running transaction is To get this to work we need to ensure that no running transaction is
using the table. We also need to create a new environment without using the table. We also need to create a new environment without
...@@ -2242,7 +2241,6 @@ void ha_berkeley::get_status() ...@@ -2242,7 +2241,6 @@ void ha_berkeley::get_status()
static int write_status(DB *status_block, char *buff, uint length) static int write_status(DB *status_block, char *buff, uint length)
{ {
DB_TXN *trans;
DBT row,key; DBT row,key;
int error; int error;
const char *key_buff="status"; const char *key_buff="status";
...@@ -2285,7 +2283,6 @@ static void update_status(BDB_SHARE *share, TABLE *table) ...@@ -2285,7 +2283,6 @@ static void update_status(BDB_SHARE *share, TABLE *table)
} }
{ {
char rec_buff[4+MAX_KEY*4], *pos=rec_buff; char rec_buff[4+MAX_KEY*4], *pos=rec_buff;
const char *key_buff="status";
int4store(pos,share->rows); pos+=4; int4store(pos,share->rows); pos+=4;
for (uint i=0 ; i < table->keys ; i++) for (uint i=0 ; i < table->keys ; i++)
{ {
......
...@@ -64,7 +64,7 @@ class ha_berkeley: public handler ...@@ -64,7 +64,7 @@ class ha_berkeley: public handler
ulong max_row_length(const byte *buf); ulong max_row_length(const byte *buf);
int pack_row(DBT *row,const byte *record, bool new_row); int pack_row(DBT *row,const byte *record, bool new_row);
void unpack_row(char *record, DBT *row); void unpack_row(char *record, DBT *row);
void ha_berkeley::unpack_key(char *record, DBT *key, uint index); void unpack_key(char *record, DBT *key, uint index);
DBT *create_key(DBT *key, uint keynr, char *buff, const byte *record, DBT *create_key(DBT *key, uint keynr, char *buff, const byte *record,
int key_length = MAX_KEY_LENGTH); int key_length = MAX_KEY_LENGTH);
DBT *pack_key(DBT *key, uint keynr, char *buff, const byte *key_ptr, DBT *pack_key(DBT *key, uint keynr, char *buff, const byte *key_ptr,
...@@ -156,13 +156,12 @@ class ha_berkeley: public handler ...@@ -156,13 +156,12 @@ class ha_berkeley: public handler
void get_status(); void get_status();
inline void get_auto_primary_key(byte *to) inline void get_auto_primary_key(byte *to)
{ {
ulonglong tmp;
pthread_mutex_lock(&share->mutex); pthread_mutex_lock(&share->mutex);
share->auto_ident++; share->auto_ident++;
int5store(to,share->auto_ident); int5store(to,share->auto_ident);
pthread_mutex_unlock(&share->mutex); pthread_mutex_unlock(&share->mutex);
} }
longlong ha_berkeley::get_auto_increment(); longlong get_auto_increment();
}; };
extern bool berkeley_skip, berkeley_shared_data; extern bool berkeley_skip, berkeley_shared_data;
......
...@@ -166,6 +166,8 @@ class Item_sum_count_distinct :public Item_sum_int ...@@ -166,6 +166,8 @@ class Item_sum_count_distinct :public Item_sum_int
/* Item to get the value of a stored sum function */ /* Item to get the value of a stored sum function */
class Item_sum_avg;
class Item_avg_field :public Item_result_field class Item_avg_field :public Item_result_field
{ {
public: public:
...@@ -200,6 +202,7 @@ class Item_sum_avg :public Item_sum_num ...@@ -200,6 +202,7 @@ class Item_sum_avg :public Item_sum_num
const char *func_name() const { return "avg"; } const char *func_name() const { return "avg"; }
}; };
class Item_sum_std;
class Item_std_field :public Item_result_field class Item_std_field :public Item_result_field
{ {
......
...@@ -18,6 +18,10 @@ ...@@ -18,6 +18,10 @@
/* logging of commands */ /* logging of commands */
/* TODO: Abort logging when we get an error in reading or writing log files */ /* TODO: Abort logging when we get an error in reading or writing log files */
#ifdef __EMX__
#include <io.h>
#endif
#include "mysql_priv.h" #include "mysql_priv.h"
#include "sql_acl.h" #include "sql_acl.h"
#include "sql_repl.h" #include "sql_repl.h"
......
...@@ -18,6 +18,10 @@ ...@@ -18,6 +18,10 @@
#ifndef _LOG_EVENT_H #ifndef _LOG_EVENT_H
#define _LOG_EVENT_H #define _LOG_EVENT_H
#ifdef __EMX__
#undef write // remove pthread.h macro definition, conflict with write() class member
#endif
#if defined(__GNUC__) && !defined(MYSQL_CLIENT) #if defined(__GNUC__) && !defined(MYSQL_CLIENT)
#pragma interface /* gcc class implementation */ #pragma interface /* gcc class implementation */
#endif #endif
......
...@@ -1048,7 +1048,6 @@ static void init_signals(void) ...@@ -1048,7 +1048,6 @@ static void init_signals(void)
#elif defined(__EMX__) #elif defined(__EMX__)
static void sig_reload(int signo) static void sig_reload(int signo)
{ {
//reload_acl_and_cache(~0); // Flush everything
reload_acl_and_cache((THD*) 0,~0, (TABLE_LIST*) 0); // Flush everything reload_acl_and_cache((THD*) 0,~0, (TABLE_LIST*) 0); // Flush everything
signal(signo, SIG_ACK); signal(signo, SIG_ACK);
} }
......
...@@ -271,7 +271,7 @@ net_real_write(NET *net,const char *packet,ulong len) ...@@ -271,7 +271,7 @@ net_real_write(NET *net,const char *packet,ulong len)
int length; int length;
char *pos,*end; char *pos,*end;
thr_alarm_t alarmed; thr_alarm_t alarmed;
#if !defined(__WIN__) && !defined(__EMX__) #if !defined(__WIN__)
ALARM alarm_buff; ALARM alarm_buff;
#endif #endif
uint retry_count=0; uint retry_count=0;
...@@ -426,7 +426,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed) ...@@ -426,7 +426,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed)
if ((int) (length=vio_read(net->vio,(char*) net->buff,remain)) <= 0L) if ((int) (length=vio_read(net->vio,(char*) net->buff,remain)) <= 0L)
{ {
my_bool interrupted = vio_should_retry(net->vio); my_bool interrupted = vio_should_retry(net->vio);
if (!thr_got_alarm(&alarmed) && interrupted) if (!thr_got_alarm(alarmed) && interrupted)
{ /* Probably in MIT threads */ { /* Probably in MIT threads */
if (retry_count++ < RETRY_COUNT) if (retry_count++ < RETRY_COUNT)
continue; continue;
......
...@@ -88,6 +88,9 @@ public: ...@@ -88,6 +88,9 @@ public:
}; };
int collect_string(String *element, element_count count,
TREE_INFO *info);
class field_str :public field_info class field_str :public field_info
{ {
String min_arg, max_arg; String min_arg, max_arg;
...@@ -130,6 +133,9 @@ public: ...@@ -130,6 +133,9 @@ public:
{ return (String*) 0; } { return (String*) 0; }
}; };
int collect_real(double *element, element_count count, TREE_INFO *info);
class field_real: public field_info class field_real: public field_info
{ {
double min_arg, max_arg; double min_arg, max_arg;
...@@ -174,6 +180,9 @@ public: ...@@ -174,6 +180,9 @@ public:
{ return (tree_walk_action) collect_real;} { return (tree_walk_action) collect_real;}
}; };
int collect_longlong(longlong *element, element_count count,
TREE_INFO *info);
class field_longlong: public field_info class field_longlong: public field_info
{ {
longlong min_arg, max_arg; longlong min_arg, max_arg;
...@@ -216,6 +225,8 @@ public: ...@@ -216,6 +225,8 @@ public:
{ return (tree_walk_action) collect_longlong;} { return (tree_walk_action) collect_longlong;}
}; };
int collect_ulonglong(ulonglong *element, element_count count,
TREE_INFO *info);
class field_ulonglong: public field_info class field_ulonglong: public field_info
{ {
...@@ -261,6 +272,10 @@ public: ...@@ -261,6 +272,10 @@ public:
}; };
Procedure *proc_analyse_init(THD *thd, ORDER *param,
select_result *result,
List<Item> &field_list);
class analyse: public Procedure class analyse: public Procedure
{ {
protected: protected:
......
...@@ -102,6 +102,9 @@ public: ...@@ -102,6 +102,9 @@ public:
/* character conversion tables */ /* character conversion tables */
class CONVERT;
CONVERT *get_convert_set(const char *name_ptr);
class CONVERT class CONVERT
{ {
const uchar *from_map,*to_map; const uchar *from_map,*to_map;
......
...@@ -21,6 +21,10 @@ ...@@ -21,6 +21,10 @@
#pragma interface /* gcc class implementation */ #pragma interface /* gcc class implementation */
#endif #endif
class mapped_files;
mapped_files *map_file(const my_string name,byte *magic,uint magic_length);
void unmap_file(mapped_files *map);
class mapped_files :public ilink { class mapped_files :public ilink {
byte *map; byte *map;
ha_rows size; ha_rows size;
......
...@@ -26,8 +26,7 @@ ...@@ -26,8 +26,7 @@
extern const char* any_db; extern const char* any_db;
extern pthread_handler_decl(handle_slave,arg); extern pthread_handler_decl(handle_slave,arg);
static int fake_rotate_event(NET* net, String* packet,
const char* log_file_name);
static int fake_rotate_event(NET* net, String* packet, char* log_file_name, static int fake_rotate_event(NET* net, String* packet, char* log_file_name,
const char**errmsg) const char**errmsg)
......
...@@ -25,6 +25,13 @@ ...@@ -25,6 +25,13 @@
#define NOT_FIXED_DEC 31 #define NOT_FIXED_DEC 31
#endif #endif
class String;
int sortcmp(const String *a,const String *b);
int stringcmp(const String *a,const String *b);
String *copy_if_not_alloced(String *a,String *b,uint32 arg_length);
int wild_case_compare(String &match,String &wild,char escape);
int wild_compare(String &match,String &wild,char escape);
class String class String
{ {
char *Ptr; char *Ptr;
......
...@@ -798,7 +798,6 @@ static int send_check_errmsg(THD* thd, TABLE_LIST* table, ...@@ -798,7 +798,6 @@ static int send_check_errmsg(THD* thd, TABLE_LIST* table,
static int prepare_for_restore(THD* thd, TABLE_LIST* table) static int prepare_for_restore(THD* thd, TABLE_LIST* table)
{ {
String *packet = &thd->packet;
DBUG_ENTER("prepare_for_restore"); DBUG_ENTER("prepare_for_restore");
if (table->table) // do not overwrite existing tables on restore if (table->table) // do not overwrite existing tables on restore
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* Optimized longlong2str function for Intel 80x86 (gcc/gas syntax) */ # Optimized longlong2str function for Intel 80x86 (gcc/gas syntax)
/* Some set sequences are optimized for pentuimpro II */ # Some set sequences are optimized for pentuimpro II
.file "longlong2str.s" .file "longlong2str.s"
.version "1.01" .version "1.01"
...@@ -32,90 +32,90 @@ longlong2str: ...@@ -32,90 +32,90 @@ longlong2str:
pushl %esi pushl %esi
pushl %edi pushl %edi
pushl %ebx pushl %ebx
movl 100(%esp),%esi /* Lower part of val */ movl 100(%esp),%esi # Lower part of val
movl 104(%esp),%ebp /* Higher part of val */ movl 104(%esp),%ebp # Higher part of val
movl 108(%esp),%edi /* get dst */ movl 108(%esp),%edi # get dst
movl 112(%esp),%ebx /* Radix */ movl 112(%esp),%ebx # Radix
movl %ebx,%eax movl %ebx,%eax
testl %eax,%eax testl %eax,%eax
jge .L144 jge .L144
addl $36,%eax addl $36,%eax
cmpl $34,%eax cmpl $34,%eax
ja .Lerror /* Wrong radix */ ja .Lerror # Wrong radix
testl %ebp,%ebp testl %ebp,%ebp
jge .L146 jge .L146
movb $45,(%edi) /* Add sign */ movb $45,(%edi) # Add sign
incl %edi /* Change sign of val */ incl %edi # Change sign of val
negl %esi negl %esi
adcl $0,%ebp adcl $0,%ebp
negl %ebp negl %ebp
.L146: .L146:
negl %ebx /* Change radix to positive */ negl %ebx # Change radix to positive
jmp .L148 jmp .L148
.p2align 4,,7 .align 4
.L144: .L144:
addl $-2,%eax addl $-2,%eax
cmpl $34,%eax cmpl $34,%eax
ja .Lerror /* Radix in range */ ja .Lerror # Radix in range
.L148: .L148:
movl %esi,%eax /* Test if zero (for easy loop) */ movl %esi,%eax # Test if zero (for easy loop)
orl %ebp,%eax orl %ebp,%eax
jne .L150 jne .L150
movb $48,(%edi) movb $48,(%edi)
incl %edi incl %edi
jmp .L164 jmp .L164
.p2align 4,,7 .align 4
.L150: .L150:
leal 92(%esp),%ecx /* End of buffer */ leal 92(%esp),%ecx # End of buffer
jmp .L155 jmp .L155
.p2align 4,,7 .align 4
.L153: .L153:
/* val is stored in in ebp:esi */ # val is stored in in ebp:esi
movl %ebp,%eax /* High part of value */ movl %ebp,%eax # High part of value
xorl %edx,%edx xorl %edx,%edx
divl %ebx divl %ebx
movl %eax,%ebp movl %eax,%ebp
movl %esi,%eax movl %esi,%eax
divl %ebx divl %ebx
movl %eax,%esi /* quotent in ebp:esi */ movl %eax,%esi # quotent in ebp:esi
movb _dig_vec(%edx),%al /* al is faster than dl */ movb _dig_vec(%edx),%al # al is faster than dl
decl %ecx decl %ecx
movb %al,(%ecx) /* store value in buff */ movb %al,(%ecx) # store value in buff
.p2align 4,,7 .align 4
.L155: .L155:
testl %ebp,%ebp testl %ebp,%ebp
ja .L153 ja .L153
testl %esi,%esi /* rest value */ testl %esi,%esi # rest value
jl .L153 jl .L153
je .L160 /* Ready */ je .L160 # Ready
movl %esi,%eax movl %esi,%eax
movl $_dig_vec,%ebp movl $_dig_vec,%ebp
.p2align 4,,7 .align 4
.L154: /* Do rest with integer precision */ .L154: # Do rest with integer precision
cltd cltd
divl %ebx divl %ebx
decl %ecx decl %ecx
movb (%edx,%ebp),%dl /* bh is always zero as ebx=radix < 36 */ movb (%edx,%ebp),%dl # bh is always zero as ebx=radix < 36
testl %eax,%eax testl %eax,%eax
movb %dl,(%ecx) movb %dl,(%ecx)
jne .L154 jne .L154
.L160: .L160:
movl %ecx,%esi movl %ecx,%esi
leal 92(%esp),%ecx /* End of buffer */ leal 92(%esp),%ecx # End of buffer
subl %esi,%ecx subl %esi,%ecx
rep rep
movsb movsb
.L164: .L164:
movl %edi,%eax /* Pointer to end null */ movl %edi,%eax # Pointer to end null
movb $0,(%edi) /* Store the end null */ movb $0,(%edi) # Store the end null
.L165: .L165:
popl %ebx popl %ebx
...@@ -126,7 +126,7 @@ longlong2str: ...@@ -126,7 +126,7 @@ longlong2str:
ret ret
.Lerror: .Lerror:
xorl %eax,%eax /* Wrong radix */ xorl %eax,%eax # Wrong radix
jmp .L165 jmp .L165
.Lfe3: .Lfe3:
......
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