Commit f6abe86f authored by unknown's avatar unknown

Fixed some build problems.

Fix that compressed packets and normal packets looks indentical before calling net_real_write()
(Needed for query cache)
Optimize IS NULL handling


Build-tools/Do-compile:
  Fix for machines with clocks in an earlier timezone
Docs/manual.texi:
  Fixed typo
acinclude.m4:
  Fixed typo
client/mysqlbinlog.cc:
  Cleanup
client/mysqltest.c:
  Added --compress to test the compressed protocol
configure.in:
  Increment shared library number (because structs changed)
include/mysql.h:
  Optimize structs for Ia64
include/mysql_com.h:
  Optimize structs for Ia64
libmysql/libmysql.c:
  Portability fixes
libmysql/net.c:
  Fix that compressed packets and normal packets looks indentical before calling net_real_write()
  (Needed for query cache)
libmysqld/examples/Makefile.am:
  Portability fix
libmysqld/libmysqld.c:
  Portability fixes
mysql-test/mysql-test-run.sh:
  Added --compress to test the compressed protocol
mysql-test/t/type_enum.test:
  A
mysys/mf_casecnv.c:
  Portability fixes
mysys/mf_tempfile.c:
  Portability fixes
scripts/make_binary_distribution.sh:
  Add libmysqld to binary distribution
sql-bench/server-cfg.sh:
  Fix for Interbase
sql/item.h:
  Optimize IS NULL handling
sql/item_cmpfunc.cc:
  Optimize IS NULL handling
sql/item_cmpfunc.h:
  Optimize IS NULL handling
sql/item_func.cc:
  cleanup
sql/item_func.h:
  Optimize IS NULL handling
sql/mysql_priv.h:
  c
sql/net_serv.cc:
  Fix that compressed packets and normal packets looks indentical before calling net_real_write()
  (Needed for query cache)
parent d06b86a0
gmake -k clean || true
/bin/rm -f */.deps/*.P config.cache
aclocal && autoheader && aclocal && automake && autoconf
(cd bdb/dist && sh s_all)
(cd innobase && aclocal && autoheader && aclocal && automake && autoconf)
if [ -d gemini ]
then
(cd gemini && aclocal && autoheader && aclocal && automake && autoconf)
fi
CC=ecc CFLAGS="-w1 -DEXTRA_DEBUG -DSAFEMALLOC -DSAFE_MUTEX -O2" CXX=ecc CXXFLAGS="-w1 -DEXTRA_DEBUG -DSAFEMALLOC -DSAFE_MUTEX -O2" ./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-debug --with-innodb --with-embedded-server
gmake
...@@ -105,8 +105,23 @@ $|=1; ...@@ -105,8 +105,23 @@ $|=1;
safe_cd("$host"); safe_cd("$host");
if ($opt_stage == 0 && ! $opt_use_old_distribution) if ($opt_stage == 0 && ! $opt_use_old_distribution)
{ {
my ($name);
safe_system("gunzip < $opt_distribution | $tar xf -"); safe_system("gunzip < $opt_distribution | $tar xf -");
# Fix file times; This is needed because the time for files may be
# in the future
system("touch timestamp; find $var -newer timestamp -print | xargs touch; rm -f timestamp");
sleep(2);
# Ensure that files we don't want to rebuild are newer than other files
foreach $name ("configure",
"Docs/include.texi",
"Docs/*.html", "Docs/manual.txt", "Docs/mysql.info",
"sql/sql_yacc.h", "sql/sql_yacc.cc")
{
system("touch $name");
}
} }
safe_cd($ver); safe_cd($ver);
if ($opt_stage <= 1) if ($opt_stage <= 1)
{ {
......
...@@ -7908,8 +7908,11 @@ The initial download of the source tree may take a while, depending on the ...@@ -7908,8 +7908,11 @@ The initial download of the source tree may take a while, depending on the
speed of your connection; be patient. speed of your connection; be patient.
@item @item
You will need GNU @code{autoconf}, @code{automake}, @code{libtool}, and You will need GNU @code{autoconf 2.13}, @code{automake 1.4},
@code{m4} to run the next set of commands. @code{libtool}, and @code{m4} to run the next set of commands.
Note that the new versions of @code{autoconf} (2.52) and @code{automake}
(1.5) do not work.
If you get some strange error during this stage, check that you really If you get some strange error during this stage, check that you really
have @code{libtool} installed! have @code{libtool} installed!
...@@ -53420,7 +53423,7 @@ in the @code{mysql} mail archive, you should report the bug to ...@@ -53420,7 +53423,7 @@ in the @code{mysql} mail archive, you should report the bug to
online at the @uref{http://www.mysql.com/documentation/, MySQL online at the @uref{http://www.mysql.com/documentation/, MySQL
documentation page}. documentation page}.
If you have started @code{mysqld} with @code{--with-myisam-recover}, If you have started @code{mysqld} with @code{myisam-recover},
MySQL will automatically check and try to repair @code{MyISAM} MySQL will automatically check and try to repair @code{MyISAM}
tables if they are marked as 'not closed properly' or 'crashed'. If tables if they are marked as 'not closed properly' or 'crashed'. If
this happens, MySQL will write an entry in the this happens, MySQL will write an entry in the
...@@ -726,7 +726,7 @@ AC_MSG_CHECKING(for OpenSSL) ...@@ -726,7 +726,7 @@ AC_MSG_CHECKING(for OpenSSL)
openssl_includes="-I/usr/local/ssl/include" openssl_includes="-I/usr/local/ssl/include"
AC_DEFINE(HAVE_OPENSSL) AC_DEFINE(HAVE_OPENSSL)
else else
AC_MSG_RESULT(disabled because --with-vio wasn not used) AC_MSG_RESULT(disabled because --with-vio was not used)
fi fi
else else
AC_MSG_RESULT(no) AC_MSG_RESULT(no)
......
...@@ -23,15 +23,6 @@ ...@@ -23,15 +23,6 @@
#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_LOCAL_FILES) #define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_LOCAL_FILES)
#ifndef OS2
extern "C"
{
int simple_command(MYSQL *mysql,enum enum_server_command command,
const char *arg, uint length, my_bool skipp_check);
uint net_safe_read(MYSQL* mysql);
}
#endif
char server_version[SERVER_VERSION_LENGTH]; char server_version[SERVER_VERSION_LENGTH];
uint32 server_id = 0; uint32 server_id = 0;
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
**********************************************************************/ **********************************************************************/
#define MTEST_VERSION "1.10" #define MTEST_VERSION "1.11"
#include <my_global.h> #include <my_global.h>
#include <mysql_embed.h> #include <mysql_embed.h>
...@@ -84,7 +84,7 @@ ...@@ -84,7 +84,7 @@
static int record = 0, verbose = 0, silent = 0, opt_sleep=0; static int record = 0, verbose = 0, silent = 0, opt_sleep=0;
static char *db = 0, *pass=0; static char *db = 0, *pass=0;
const char* user = 0, *host = 0, *unix_sock = 0; const char* user = 0, *host = 0, *unix_sock = 0;
static int port = 0, opt_big_test=0; static int port = 0, opt_big_test=0, opt_compress=0;
static uint start_lineno, *lineno; static uint start_lineno, *lineno;
static char **default_argv; static char **default_argv;
...@@ -246,11 +246,11 @@ static uint out_length; ...@@ -246,11 +246,11 @@ static uint out_length;
static int eval_result = 0; static int eval_result = 0;
/* Disable functions that only exist in MySQL 4.0 */ /* Disable functions that only exist in MySQL 4.0 */
#if MYSQL_VERSION_ID < 40000 #if MYSQL_VERSION_ID < 40000 || defined(EMBEDDED_LIBRARY)
static void mysql_enable_rpl_parse(MYSQL* mysql __attribute__((unused))) {} void mysql_enable_rpl_parse(MYSQL* mysql __attribute__((unused))) {}
static void mysql_disable_rpl_parse(MYSQL* mysql __attribute__((unused))) {} void mysql_disable_rpl_parse(MYSQL* mysql __attribute__((unused))) {}
static int mysql_rpl_parse_enabled(MYSQL* mysql __attribute__((unused))) { return 1; } int mysql_rpl_parse_enabled(MYSQL* mysql __attribute__((unused))) { return 1; }
static int mysql_rpl_probe(MYSQL *mysql __attribute__((unused))) { return 1; } int mysql_rpl_probe(MYSQL *mysql __attribute__((unused))) { return 1; }
#endif #endif
static void do_eval(DYNAMIC_STRING* query_eval, const char* query) static void do_eval(DYNAMIC_STRING* query_eval, const char* query)
...@@ -1164,6 +1164,8 @@ int do_connect(struct st_query* q) ...@@ -1164,6 +1164,8 @@ int do_connect(struct st_query* q)
if (!mysql_init(&next_con->mysql)) if (!mysql_init(&next_con->mysql))
die("Failed on mysql_init()"); die("Failed on mysql_init()");
if (opt_compress)
mysql_options(&next_con->mysql,MYSQL_OPT_COMPRESS,NullS);
if (con_sock) if (con_sock)
con_sock=fn_format(buff, con_sock, TMPDIR, "",0); con_sock=fn_format(buff, con_sock, TMPDIR, "",0);
if (!con_db[0]) if (!con_db[0])
...@@ -1503,6 +1505,7 @@ struct option long_options[] = ...@@ -1503,6 +1505,7 @@ struct option long_options[] =
{"debug", optional_argument, 0, '#'}, {"debug", optional_argument, 0, '#'},
{"database", required_argument, 0, 'D'}, {"database", required_argument, 0, 'D'},
{"big-test", no_argument, 0, 'B'}, {"big-test", no_argument, 0, 'B'},
{"compress", no_argument, 0, 'C'},
{"help", no_argument, 0, '?'}, {"help", no_argument, 0, '?'},
{"host", required_argument, 0, 'h'}, {"host", required_argument, 0, 'h'},
{"password", optional_argument, 0, 'p'}, {"password", optional_argument, 0, 'p'},
...@@ -1547,6 +1550,7 @@ void usage() ...@@ -1547,6 +1550,7 @@ void usage()
-p[password], --password[=...]\n\ -p[password], --password[=...]\n\
Password to use when connecting to server.\n\ Password to use when connecting to server.\n\
-B, --big-test Define BIG_TEST to 1\n\ -B, --big-test Define BIG_TEST to 1\n\
-C, --compress Use the compressed server/client protocol\n\
-D, --database=... Database to use.\n\ -D, --database=... Database to use.\n\
-P, --port=... Port number to use for connection.\n\ -P, --port=... Port number to use for connection.\n\
-S, --socket=... Socket file to use for connection.\n\ -S, --socket=... Socket file to use for connection.\n\
...@@ -1569,8 +1573,8 @@ int parse_args(int argc, char **argv) ...@@ -1569,8 +1573,8 @@ int parse_args(int argc, char **argv)
load_defaults("my",load_default_groups,&argc,&argv); load_defaults("my",load_default_groups,&argc,&argv);
default_argv= argv; default_argv= argv;
while((c = getopt_long(argc, argv, "h:p::u:BP:D:S:R:x:t:T:#:?rvVq", while ((c = getopt_long(argc, argv, "h:p::u:BCP:D:S:R:x:t:T:#:?rvVq",
long_options, &option_index)) != EOF) long_options, &option_index)) != EOF)
{ {
switch(c) { switch(c) {
case '#': case '#':
...@@ -1605,6 +1609,9 @@ int parse_args(int argc, char **argv) ...@@ -1605,6 +1609,9 @@ int parse_args(int argc, char **argv)
case 'B': case 'B':
opt_big_test=1; opt_big_test=1;
break; break;
case 'C':
opt_compress=1;
break;
case 'P': case 'P':
port = atoi(optarg); port = atoi(optarg);
break; break;
...@@ -1984,6 +1991,8 @@ int main(int argc, char** argv) ...@@ -1984,6 +1991,8 @@ int main(int argc, char** argv)
if (!( mysql_init(&cur_con->mysql))) if (!( mysql_init(&cur_con->mysql)))
die("Failed in mysql_init()"); die("Failed in mysql_init()");
if (opt_compress)
mysql_options(&cur_con->mysql,MYSQL_OPT_COMPRESS,NullS);
cur_con->name = my_strdup("default", MYF(MY_WME)); cur_con->name = my_strdup("default", MYF(MY_WME));
if (!cur_con->name) if (!cur_con->name)
die("Out of memory"); die("Out of memory");
......
...@@ -10,7 +10,7 @@ AM_CONFIG_HEADER(config.h) ...@@ -10,7 +10,7 @@ AM_CONFIG_HEADER(config.h)
PROTOCOL_VERSION=10 PROTOCOL_VERSION=10
DOT_FRM_VERSION=6 DOT_FRM_VERSION=6
# See the libtool docs for information on how to do shared lib versions. # See the libtool docs for information on how to do shared lib versions.
SHARED_LIB_VERSION=10:0:0 SHARED_LIB_VERSION=11:0:0
# Set all version vars based on $VERSION. How do we do this more elegant ? # Set all version vars based on $VERSION. How do we do this more elegant ?
# Remember that regexps needs to quote [ and ] since this is run through m4 # Remember that regexps needs to quote [ and ] since this is run through m4
......
...@@ -72,11 +72,11 @@ typedef struct st_mysql_field { ...@@ -72,11 +72,11 @@ typedef struct st_mysql_field {
char *name; /* Name of column */ char *name; /* Name of column */
char *table; /* Table of column if column was a field */ char *table; /* Table of column if column was a field */
char *def; /* Default value (set by mysql_list_fields) */ char *def; /* Default value (set by mysql_list_fields) */
enum enum_field_types type; /* Type of field. Se mysql_com.h for types */ unsigned long length; /* Width of column */
unsigned int length; /* Width of column */ unsigned long max_length; /* Max width of selected set */
unsigned int max_length; /* Max width of selected set */
unsigned int flags; /* Div flags */ unsigned int flags; /* Div flags */
unsigned int decimals; /* Number of decimals in field */ unsigned int decimals; /* Number of decimals in field */
enum enum_field_types type; /* Type of field. Se mysql_com.h for types */
} MYSQL_FIELD; } MYSQL_FIELD;
typedef char **MYSQL_ROW; /* return data as array of strings */ typedef char **MYSQL_ROW; /* return data as array of strings */
...@@ -175,25 +175,30 @@ typedef struct st_mysql { ...@@ -175,25 +175,30 @@ typedef struct st_mysql {
gptr connector_fd; /* ConnectorFd for SSL */ gptr connector_fd; /* ConnectorFd for SSL */
char *host,*user,*passwd,*unix_socket,*server_version,*host_info, char *host,*user,*passwd,*unix_socket,*server_version,*host_info,
*info,*db; *info,*db;
unsigned int port,client_flag,server_capabilities; struct charset_info_st *charset;
unsigned int protocol_version; MYSQL_FIELD *fields;
unsigned int field_count; MEM_ROOT field_alloc;
unsigned int server_status;
unsigned long thread_id; /* Id for connection in server */
my_ulonglong affected_rows; my_ulonglong affected_rows;
my_ulonglong insert_id; /* id if insert on table with NEXTNR */ my_ulonglong insert_id; /* id if insert on table with NEXTNR */
my_ulonglong extra_info; /* Used by mysqlshow */ my_ulonglong extra_info; /* Used by mysqlshow */
unsigned long thread_id; /* Id for connection in server */
unsigned long packet_length; unsigned long packet_length;
unsigned int port,client_flag,server_capabilities;
unsigned int protocol_version;
unsigned int field_count;
unsigned int server_status;
unsigned int server_language;
struct st_mysql_options options;
enum mysql_status status; enum mysql_status status;
MYSQL_FIELD *fields;
MEM_ROOT field_alloc;
my_bool free_me; /* If free in mysql_close */ my_bool free_me; /* If free in mysql_close */
my_bool reconnect; /* set to 1 if automatic reconnect */ my_bool reconnect; /* set to 1 if automatic reconnect */
struct st_mysql_options options;
char scramble_buff[9]; char scramble_buff[9];
struct charset_info_st *charset;
unsigned int server_language;
/*
Set if this is the original connection, not a master or a slave we have
added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave()
*/
my_bool rpl_pivot;
/* pointers to the master, and the next slave /* pointers to the master, and the next slave
connections, points to itself if lone connection */ connections, points to itself if lone connection */
struct st_mysql* master, *next_slave; struct st_mysql* master, *next_slave;
...@@ -201,26 +206,21 @@ typedef struct st_mysql { ...@@ -201,26 +206,21 @@ typedef struct st_mysql {
struct st_mysql* last_used_slave; /* needed for round-robin slave pick */ struct st_mysql* last_used_slave; /* needed for round-robin slave pick */
/* needed for send/read/store/use result to work correctly with replication */ /* needed for send/read/store/use result to work correctly with replication */
struct st_mysql* last_used_con; struct st_mysql* last_used_con;
/*
Set if this is the original connection, not a master or a slave we have
added though mysql_rpl_probe() or mysql_set_master()/ mysql_add_slave()
*/
my_bool rpl_pivot;
} MYSQL; } MYSQL;
typedef struct st_mysql_res { typedef struct st_mysql_res {
my_ulonglong row_count; my_ulonglong row_count;
unsigned int field_count, current_field;
MYSQL_FIELD *fields; MYSQL_FIELD *fields;
MYSQL_DATA *data; MYSQL_DATA *data;
MYSQL_ROWS *data_cursor; MYSQL_ROWS *data_cursor;
unsigned long *lengths; /* column lengths of current row */
MYSQL *handle; /* for unbuffered reads */
MEM_ROOT field_alloc; MEM_ROOT field_alloc;
unsigned int field_count, current_field;
MYSQL_ROW row; /* If unbuffered read */ MYSQL_ROW row; /* If unbuffered read */
MYSQL_ROW current_row; /* buffer to current row */ MYSQL_ROW current_row; /* buffer to current row */
unsigned long *lengths; /* column lengths of current row */ my_bool eof; /* Used by mysql_fetch_row */
MYSQL *handle; /* for unbuffered reads */
my_bool eof; /* Used my mysql_fetch_row */
} MYSQL_RES; } MYSQL_RES;
...@@ -228,14 +228,14 @@ typedef struct st_mysql_res { ...@@ -228,14 +228,14 @@ typedef struct st_mysql_res {
* work when linked against either the standard client library or the * work when linked against either the standard client library or the
* embedded server library, these functions should be called. */ * embedded server library, these functions should be called. */
int mysql_server_init(int argc, const char **argv, const char **groups); int mysql_server_init(int argc, const char **argv, const char **groups);
void mysql_server_end(); void mysql_server_end(void);
/* Set up and bring down a thread; these function should be called /* Set up and bring down a thread; these function should be called
* for each thread in an application which opens at least one MySQL * for each thread in an application which opens at least one MySQL
* connection. All uses of the connection(s) should be between these * connection. All uses of the connection(s) should be between these
* function calls. */ * function calls. */
my_bool mysql_thread_init(); my_bool mysql_thread_init(void);
void mysql_thread_end(); void mysql_thread_end(void);
/* Functions to get information from the MYSQL and MYSQL_RES structures */ /* Functions to get information from the MYSQL and MYSQL_RES structures */
/* Should definitely be used if one uses shared libraries */ /* Should definitely be used if one uses shared libraries */
...@@ -276,20 +276,20 @@ void STDCALL mysql_close(MYSQL *sock); ...@@ -276,20 +276,20 @@ void STDCALL mysql_close(MYSQL *sock);
int STDCALL mysql_select_db(MYSQL *mysql, const char *db); int STDCALL mysql_select_db(MYSQL *mysql, const char *db);
int STDCALL mysql_query(MYSQL *mysql, const char *q); int STDCALL mysql_query(MYSQL *mysql, const char *q);
int STDCALL mysql_send_query(MYSQL *mysql, const char *q, int STDCALL mysql_send_query(MYSQL *mysql, const char *q,
unsigned int length); unsigned long length);
int STDCALL mysql_read_query_result(MYSQL *mysql); int STDCALL mysql_read_query_result(MYSQL *mysql);
int STDCALL mysql_real_query(MYSQL *mysql, const char *q, int STDCALL mysql_real_query(MYSQL *mysql, const char *q,
unsigned int length); unsigned long length);
/* perform query on master */ /* perform query on master */
int STDCALL mysql_master_query(MYSQL *mysql, const char *q, int STDCALL mysql_master_query(MYSQL *mysql, const char *q,
unsigned int length); unsigned long length);
int STDCALL mysql_master_send_query(MYSQL *mysql, const char *q, int STDCALL mysql_master_send_query(MYSQL *mysql, const char *q,
unsigned int length); unsigned long length);
/* perform query on slave */ /* perform query on slave */
int STDCALL mysql_slave_query(MYSQL *mysql, const char *q, int STDCALL mysql_slave_query(MYSQL *mysql, const char *q,
unsigned int length); unsigned long length);
int STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q, int STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q,
unsigned int length); unsigned long length);
/* /*
enable/disable parsing of all queries to decide if they go on master or enable/disable parsing of all queries to decide if they go on master or
...@@ -369,16 +369,23 @@ char * STDCALL mysql_odbc_escape_string(MYSQL *mysql, ...@@ -369,16 +369,23 @@ char * STDCALL mysql_odbc_escape_string(MYSQL *mysql,
void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name); void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name);
unsigned int STDCALL mysql_thread_safe(void); unsigned int STDCALL mysql_thread_safe(void);
#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
#ifdef USE_OLD_FUNCTIONS #ifdef USE_OLD_FUNCTIONS
MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host, MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host,
const char *user, const char *passwd); const char *user, const char *passwd);
int STDCALL mysql_create_db(MYSQL *mysql, const char *DB); int STDCALL mysql_create_db(MYSQL *mysql, const char *DB);
int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB); int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB);
#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT)
#define HAVE_MYSQL_REAL_CONNECT
#endif #endif
#define HAVE_MYSQL_REAL_CONNECT /*
The following functions are mainly exported because of mysqlbinlog;
They are not for general usage
*/
int simple_command(MYSQL *mysql,enum enum_server_command command,
const char *arg, ulong length, my_bool skipp_check);
ulong net_safe_read(MYSQL* mysql);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
...@@ -108,11 +108,12 @@ typedef struct st_vio Vio; ...@@ -108,11 +108,12 @@ typedef struct st_vio Vio;
typedef struct st_net { typedef struct st_net {
Vio* vio; Vio* vio;
unsigned char *buff,*buff_end,*write_pos,*read_pos;
my_socket fd; /* For Perl DBI/dbd */ my_socket fd; /* For Perl DBI/dbd */
unsigned long max_packet;
int fcntl; int fcntl;
unsigned char *buff,*buff_end,*write_pos,*read_pos; unsigned int last_errno,timeout,pkt_nr,compress_pkt_nr;
char last_error[MYSQL_ERRMSG_SIZE]; char last_error[MYSQL_ERRMSG_SIZE];
unsigned int last_errno,max_packet,timeout,pkt_nr;
unsigned char error; unsigned char error;
my_bool return_errno,compress; my_bool return_errno,compress;
/* /*
...@@ -120,14 +121,14 @@ typedef struct st_net { ...@@ -120,14 +121,14 @@ typedef struct st_net {
command ( as in LOAD TABLE ... FROM MASTER ), command ( as in LOAD TABLE ... FROM MASTER ),
and do not want to confuse the client with OK at the wrong time and do not want to confuse the client with OK at the wrong time
*/ */
my_bool no_send_ok;
unsigned long remain_in_buf,length, buf_length, where_b; unsigned long remain_in_buf,length, buf_length, where_b;
unsigned int *return_status; unsigned int *return_status;
unsigned char reading_or_writing; unsigned char reading_or_writing;
char save_char; char save_char;
my_bool no_send_ok;
} NET; } NET;
#define packet_error ((unsigned int) -1) #define packet_error (~(unsigned long) 0)
enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY, enum enum_field_types { FIELD_TYPE_DECIMAL, FIELD_TYPE_TINY,
FIELD_TYPE_SHORT, FIELD_TYPE_LONG, FIELD_TYPE_SHORT, FIELD_TYPE_LONG,
......
...@@ -316,11 +316,11 @@ HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host, ...@@ -316,11 +316,11 @@ HANDLE create_named_pipe(NET *net, uint connect_timeout, char **arg_host,
** or packet is an error message ** or packet is an error message
*****************************************************************************/ *****************************************************************************/
uint ulong
net_safe_read(MYSQL *mysql) net_safe_read(MYSQL *mysql)
{ {
NET *net= &mysql->net; NET *net= &mysql->net;
uint len=0; ulong len=0;
init_sigpipe_variables init_sigpipe_variables
/* Don't give sigpipe errors if the client doesn't want them */ /* Don't give sigpipe errors if the client doesn't want them */
...@@ -338,7 +338,7 @@ net_safe_read(MYSQL *mysql) ...@@ -338,7 +338,7 @@ net_safe_read(MYSQL *mysql)
CR_NET_PACKET_TOO_LARGE: CR_NET_PACKET_TOO_LARGE:
CR_SERVER_LOST); CR_SERVER_LOST);
strmov(net->last_error,ER(net->last_errno)); strmov(net->last_error,ER(net->last_errno));
return(packet_error); return (packet_error);
} }
if (net->read_pos[0] == 255) if (net->read_pos[0] == 255)
{ {
...@@ -349,7 +349,7 @@ net_safe_read(MYSQL *mysql) ...@@ -349,7 +349,7 @@ net_safe_read(MYSQL *mysql)
pos+=2; pos+=2;
len-=2; len-=2;
(void) strmake(net->last_error,(char*) pos, (void) strmake(net->last_error,(char*) pos,
min(len,sizeof(net->last_error)-1)); min((uint) len,(uint) sizeof(net->last_error)-1));
} }
else else
{ {
...@@ -440,7 +440,7 @@ static void free_rows(MYSQL_DATA *cur) ...@@ -440,7 +440,7 @@ static void free_rows(MYSQL_DATA *cur)
int int
simple_command(MYSQL *mysql,enum enum_server_command command, const char *arg, simple_command(MYSQL *mysql,enum enum_server_command command, const char *arg,
uint length, my_bool skipp_check) ulong length, my_bool skipp_check)
{ {
NET *net= &mysql->net; NET *net= &mysql->net;
int result= -1; int result= -1;
...@@ -671,8 +671,8 @@ mysql_free_result(MYSQL_RES *result) ...@@ -671,8 +671,8 @@ mysql_free_result(MYSQL_RES *result)
DBUG_PRINT("warning",("Not all rows in set were read; Ignoring rows")); DBUG_PRINT("warning",("Not all rows in set were read; Ignoring rows"));
for (;;) for (;;)
{ {
uint pkt_len; ulong pkt_len;
if ((pkt_len=(uint) net_safe_read(result->handle)) == packet_error) if ((pkt_len=net_safe_read(result->handle)) == packet_error)
break; break;
if (pkt_len == 1 && result->handle->net.read_pos[0] == 254) if (pkt_len == 1 && result->handle->net.read_pos[0] == 254)
break; /* End of data */ break; /* End of data */
...@@ -866,7 +866,8 @@ unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, ...@@ -866,7 +866,8 @@ unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields,
MYSQL_FIELD *field,*result; MYSQL_FIELD *field,*result;
DBUG_ENTER("unpack_fields"); DBUG_ENTER("unpack_fields");
field=result=(MYSQL_FIELD*) alloc_root(alloc,sizeof(MYSQL_FIELD)*fields); field=result=(MYSQL_FIELD*) alloc_root(alloc,
(uint) sizeof(MYSQL_FIELD)*fields);
if (!result) if (!result)
DBUG_RETURN(0); DBUG_RETURN(0);
...@@ -913,7 +914,7 @@ static MYSQL_DATA *read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields, ...@@ -913,7 +914,7 @@ static MYSQL_DATA *read_rows(MYSQL *mysql,MYSQL_FIELD *mysql_fields,
NET *net = &mysql->net; NET *net = &mysql->net;
DBUG_ENTER("read_rows"); DBUG_ENTER("read_rows");
if ((pkt_len=(uint) net_safe_read(mysql)) == packet_error) if ((pkt_len= net_safe_read(mysql)) == packet_error)
DBUG_RETURN(0); DBUG_RETURN(0);
if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA), if (!(result=(MYSQL_DATA*) my_malloc(sizeof(MYSQL_DATA),
MYF(MY_WME | MY_ZEROFILL)))) MYF(MY_WME | MY_ZEROFILL))))
...@@ -1020,7 +1021,7 @@ read_one_row(MYSQL *mysql,uint fields,MYSQL_ROW row, ulong *lengths) ...@@ -1020,7 +1021,7 @@ read_one_row(MYSQL *mysql,uint fields,MYSQL_ROW row, ulong *lengths)
/* perform query on master */ /* perform query on master */
int STDCALL mysql_master_query(MYSQL *mysql, const char *q, int STDCALL mysql_master_query(MYSQL *mysql, const char *q,
unsigned int length) unsigned long length)
{ {
if (mysql_master_send_query(mysql, q, length)) if (mysql_master_send_query(mysql, q, length))
return 1; return 1;
...@@ -1028,7 +1029,7 @@ int STDCALL mysql_master_query(MYSQL *mysql, const char *q, ...@@ -1028,7 +1029,7 @@ int STDCALL mysql_master_query(MYSQL *mysql, const char *q,
} }
int STDCALL mysql_master_send_query(MYSQL *mysql, const char *q, int STDCALL mysql_master_send_query(MYSQL *mysql, const char *q,
unsigned int length) unsigned long length)
{ {
MYSQL*master = mysql->master; MYSQL*master = mysql->master;
if (!length) if (!length)
...@@ -1042,7 +1043,7 @@ int STDCALL mysql_master_send_query(MYSQL *mysql, const char *q, ...@@ -1042,7 +1043,7 @@ int STDCALL mysql_master_send_query(MYSQL *mysql, const char *q,
/* perform query on slave */ /* perform query on slave */
int STDCALL mysql_slave_query(MYSQL *mysql, const char *q, int STDCALL mysql_slave_query(MYSQL *mysql, const char *q,
unsigned int length) unsigned long length)
{ {
if (mysql_slave_send_query(mysql, q, length)) if (mysql_slave_send_query(mysql, q, length))
return 1; return 1;
...@@ -1050,7 +1051,7 @@ int STDCALL mysql_slave_query(MYSQL *mysql, const char *q, ...@@ -1050,7 +1051,7 @@ int STDCALL mysql_slave_query(MYSQL *mysql, const char *q,
} }
int STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q, int STDCALL mysql_slave_send_query(MYSQL *mysql, const char *q,
unsigned int length) unsigned long length)
{ {
MYSQL* last_used_slave, *slave_to_use = 0; MYSQL* last_used_slave, *slave_to_use = 0;
...@@ -1271,7 +1272,7 @@ STDCALL mysql_rpl_query_type(const char* q, int len) ...@@ -1271,7 +1272,7 @@ STDCALL mysql_rpl_query_type(const char* q, int len)
case 'c': /* create or check */ case 'c': /* create or check */
return tolower(q[1]) == 'h' ? MYSQL_RPL_ADMIN : MYSQL_RPL_MASTER ; return tolower(q[1]) == 'h' ? MYSQL_RPL_ADMIN : MYSQL_RPL_MASTER ;
case 's': /* select or show */ case 's': /* select or show */
return tolower(q[1] == 'h') ? MYSQL_RPL_ADMIN : MYSQL_RPL_SLAVE; return tolower(q[1]) == 'h' ? MYSQL_RPL_ADMIN : MYSQL_RPL_SLAVE;
case 'f': /* flush */ case 'f': /* flush */
case 'r': /* repair */ case 'r': /* repair */
case 'g': /* grant */ case 'g': /* grant */
...@@ -1280,8 +1281,7 @@ STDCALL mysql_rpl_query_type(const char* q, int len) ...@@ -1280,8 +1281,7 @@ STDCALL mysql_rpl_query_type(const char* q, int len)
return MYSQL_RPL_SLAVE; return MYSQL_RPL_SLAVE;
} }
} }
return MYSQL_RPL_MASTER; /* By default, send to master */
return 0;
} }
...@@ -1829,7 +1829,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user, ...@@ -1829,7 +1829,7 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
mysql->db=my_strdup(db,MYF(MY_WME)); mysql->db=my_strdup(db,MYF(MY_WME));
db=0; db=0;
} }
if (my_net_write(net,buff,(uint) (end-buff)) || net_flush(net) || if (my_net_write(net,buff,(ulong) (end-buff)) || net_flush(net) ||
net_safe_read(mysql) == packet_error) net_safe_read(mysql) == packet_error)
goto error; goto error;
if (client_flag & CLIENT_COMPRESS) /* We will use compression */ if (client_flag & CLIENT_COMPRESS) /* We will use compression */
...@@ -1935,7 +1935,7 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, ...@@ -1935,7 +1935,7 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
pos=scramble(pos, mysql->scramble_buff, passwd, pos=scramble(pos, mysql->scramble_buff, passwd,
(my_bool) (mysql->protocol_version == 9)); (my_bool) (mysql->protocol_version == 9));
pos=strmov(pos+1,db ? db : ""); pos=strmov(pos+1,db ? db : "");
if (simple_command(mysql,COM_CHANGE_USER, buff,(uint) (pos-buff),0)) if (simple_command(mysql,COM_CHANGE_USER, buff,(ulong) (pos-buff),0))
DBUG_RETURN(1); DBUG_RETURN(1);
my_free(mysql->user,MYF(MY_ALLOW_ZERO_PTR)); my_free(mysql->user,MYF(MY_ALLOW_ZERO_PTR));
...@@ -1960,7 +1960,7 @@ mysql_select_db(MYSQL *mysql, const char *db) ...@@ -1960,7 +1960,7 @@ mysql_select_db(MYSQL *mysql, const char *db)
DBUG_ENTER("mysql_select_db"); DBUG_ENTER("mysql_select_db");
DBUG_PRINT("enter",("db: '%s'",db)); DBUG_PRINT("enter",("db: '%s'",db));
if ((error=simple_command(mysql,COM_INIT_DB,db,(uint) strlen(db),0))) if ((error=simple_command(mysql,COM_INIT_DB,db,(ulong) strlen(db),0)))
DBUG_RETURN(error); DBUG_RETURN(error);
my_free(mysql->db,MYF(MY_ALLOW_ZERO_PTR)); my_free(mysql->db,MYF(MY_ALLOW_ZERO_PTR));
mysql->db=my_strdup(db,MYF(MY_WME)); mysql->db=my_strdup(db,MYF(MY_WME));
...@@ -2111,7 +2111,7 @@ STDCALL mysql_add_slave(MYSQL* mysql, const char* host, ...@@ -2111,7 +2111,7 @@ STDCALL mysql_add_slave(MYSQL* mysql, const char* host,
*/ */
int STDCALL int STDCALL
mysql_send_query(MYSQL* mysql, const char* query, uint length) mysql_send_query(MYSQL* mysql, const char* query, ulong length)
{ {
if (mysql->options.rpl_parse && mysql->rpl_pivot) if (mysql->options.rpl_parse && mysql->rpl_pivot)
{ {
...@@ -2179,13 +2179,13 @@ int STDCALL mysql_read_query_result(MYSQL *mysql) ...@@ -2179,13 +2179,13 @@ int STDCALL mysql_read_query_result(MYSQL *mysql)
CLIENT_LONG_FLAG)))) CLIENT_LONG_FLAG))))
DBUG_RETURN(-1); DBUG_RETURN(-1);
mysql->status=MYSQL_STATUS_GET_RESULT; mysql->status=MYSQL_STATUS_GET_RESULT;
mysql->field_count=field_count; mysql->field_count= (uint) field_count;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
int STDCALL int STDCALL
mysql_real_query(MYSQL *mysql, const char *query, uint length) mysql_real_query(MYSQL *mysql, const char *query, ulong length)
{ {
DBUG_ENTER("mysql_real_query"); DBUG_ENTER("mysql_real_query");
DBUG_PRINT("enter",("handle: %lx",mysql)); DBUG_PRINT("enter",("handle: %lx",mysql));
...@@ -2276,8 +2276,9 @@ mysql_store_result(MYSQL *mysql) ...@@ -2276,8 +2276,9 @@ mysql_store_result(MYSQL *mysql)
DBUG_RETURN(0); DBUG_RETURN(0);
} }
mysql->status=MYSQL_STATUS_READY; /* server is ready */ mysql->status=MYSQL_STATUS_READY; /* server is ready */
if (!(result=(MYSQL_RES*) my_malloc(sizeof(MYSQL_RES)+ if (!(result=(MYSQL_RES*) my_malloc((uint) (sizeof(MYSQL_RES)+
sizeof(ulong)*mysql->field_count, sizeof(ulong) *
mysql->field_count),
MYF(MY_WME | MY_ZEROFILL)))) MYF(MY_WME | MY_ZEROFILL))))
{ {
mysql->net.last_errno=CR_OUT_OF_MEMORY; mysql->net.last_errno=CR_OUT_OF_MEMORY;
...@@ -2433,7 +2434,7 @@ mysql_fetch_lengths(MYSQL_RES *res) ...@@ -2433,7 +2434,7 @@ mysql_fetch_lengths(MYSQL_RES *res)
continue; continue;
} }
if (start) /* Found end of prev string */ if (start) /* Found end of prev string */
*prev_length= (uint) (*column-start-1); *prev_length= (ulong) (*column-start-1);
start= *column; start= *column;
prev_length=lengths; prev_length=lengths;
} }
...@@ -2534,7 +2535,7 @@ mysql_list_fields(MYSQL *mysql, const char *table, const char *wild) ...@@ -2534,7 +2535,7 @@ mysql_list_fields(MYSQL *mysql, const char *table, const char *wild)
LINT_INIT(query); LINT_INIT(query);
end=strmake(strmake(buff, table,128)+1,wild ? wild : "",128); end=strmake(strmake(buff, table,128)+1,wild ? wild : "",128);
if (simple_command(mysql,COM_FIELD_LIST,buff,(uint) (end-buff),1) || if (simple_command(mysql,COM_FIELD_LIST,buff,(ulong) (end-buff),1) ||
!(query = read_rows(mysql,(MYSQL_FIELD*) 0,6))) !(query = read_rows(mysql,(MYSQL_FIELD*) 0,6)))
DBUG_RETURN(NULL); DBUG_RETURN(NULL);
...@@ -2590,7 +2591,7 @@ mysql_create_db(MYSQL *mysql, const char *db) ...@@ -2590,7 +2591,7 @@ mysql_create_db(MYSQL *mysql, const char *db)
{ {
DBUG_ENTER("mysql_createdb"); DBUG_ENTER("mysql_createdb");
DBUG_PRINT("enter",("db: %s",db)); DBUG_PRINT("enter",("db: %s",db));
DBUG_RETURN(simple_command(mysql,COM_CREATE_DB,db, (uint) strlen(db),0)); DBUG_RETURN(simple_command(mysql,COM_CREATE_DB,db, (ulong) strlen(db),0));
} }
...@@ -2599,7 +2600,7 @@ mysql_drop_db(MYSQL *mysql, const char *db) ...@@ -2599,7 +2600,7 @@ mysql_drop_db(MYSQL *mysql, const char *db)
{ {
DBUG_ENTER("mysql_drop_db"); DBUG_ENTER("mysql_drop_db");
DBUG_PRINT("enter",("db: %s",db)); DBUG_PRINT("enter",("db: %s",db));
DBUG_RETURN(simple_command(mysql,COM_DROP_DB,db,(uint) strlen(db),0)); DBUG_RETURN(simple_command(mysql,COM_DROP_DB,db,(ulong) strlen(db),0));
} }
#endif #endif
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <winsock.h> #include <winsock.h>
#endif #endif
#include <my_global.h> #include <my_global.h>
#include "mysql_embed.h"
#include <mysql_com.h> #include <mysql_com.h>
#include <violite.h> #include <violite.h>
#include <my_sys.h> #include <my_sys.h>
...@@ -89,7 +90,7 @@ extern ulong mysqld_net_retry_count; ...@@ -89,7 +90,7 @@ extern ulong mysqld_net_retry_count;
typedef my_bool thr_alarm_t; typedef my_bool thr_alarm_t;
typedef my_bool ALARM; typedef my_bool ALARM;
#define thr_alarm_init(A) (*(A))=0 #define thr_alarm_init(A) (*(A))=0
#define thr_alarm_in_use(A) (*(A)!= 0) #define thr_alarm_in_use(A) (*(A) != 0)
#define thr_end_alarm(A) #define thr_end_alarm(A)
#define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C)) #define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C))
inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused))) inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused)))
...@@ -129,7 +130,7 @@ int my_net_init(NET *net, Vio* vio) ...@@ -129,7 +130,7 @@ int my_net_init(NET *net, Vio* vio)
net->no_send_ok = 0; net->no_send_ok = 0;
net->error=0; net->return_errno=0; net->return_status=0; net->error=0; net->return_errno=0; net->return_status=0;
net->timeout=(uint) net_read_timeout; /* Timeout for read */ net->timeout=(uint) net_read_timeout; /* Timeout for read */
net->pkt_nr=0; net->pkt_nr=net->compress_pkt_nr=0;
net->write_pos=net->read_pos = net->buff; net->write_pos=net->read_pos = net->buff;
net->last_error[0]=0; net->last_error[0]=0;
net->compress=0; net->reading_or_writing=0; net->compress=0; net->reading_or_writing=0;
...@@ -190,7 +191,7 @@ static my_bool net_realloc(NET *net, ulong length) ...@@ -190,7 +191,7 @@ static my_bool net_realloc(NET *net, ulong length)
void net_clear(NET *net) void net_clear(NET *net)
{ {
#ifndef EXTRA_DEBUG #ifndef EXTRA_DEBUG
int count; int count; /* One may get 'unused' warn */
bool is_blocking=vio_is_blocking(net->vio); bool is_blocking=vio_is_blocking(net->vio);
if (is_blocking) if (is_blocking)
vio_blocking(net->vio, FALSE); vio_blocking(net->vio, FALSE);
...@@ -204,7 +205,7 @@ void net_clear(NET *net) ...@@ -204,7 +205,7 @@ void net_clear(NET *net)
vio_blocking(net->vio, TRUE); vio_blocking(net->vio, TRUE);
} }
#endif /* EXTRA_DEBUG */ #endif /* EXTRA_DEBUG */
net->pkt_nr=0; /* Ready for new command */ net->pkt_nr=net->compress_pkt_nr=0; /* Ready for new command */
net->write_pos=net->buff; net->write_pos=net->buff;
} }
...@@ -217,9 +218,12 @@ int net_flush(NET *net) ...@@ -217,9 +218,12 @@ int net_flush(NET *net)
if (net->buff != net->write_pos) if (net->buff != net->write_pos)
{ {
error=net_real_write(net,(char*) net->buff, error=net_real_write(net,(char*) net->buff,
(uint) (net->write_pos - net->buff)); (ulong) (net->write_pos - net->buff));
net->write_pos=net->buff; net->write_pos=net->buff;
} }
/* Sync packet number if using compression */
if (net->compress)
net->pkt_nr=net->compress_pkt_nr;
DBUG_RETURN(error); DBUG_RETURN(error);
} }
...@@ -248,7 +252,7 @@ my_net_write(NET *net,const char *packet,ulong len) ...@@ -248,7 +252,7 @@ my_net_write(NET *net,const char *packet,ulong len)
{ {
const ulong z_size = MAX_THREE_BYTES; const ulong z_size = MAX_THREE_BYTES;
int3store(buff, z_size); int3store(buff, z_size);
buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); buff[3]= net->pkt_nr++;
if (net_write_buff(net, (char*) buff, NET_HEADER_SIZE) || if (net_write_buff(net, (char*) buff, NET_HEADER_SIZE) ||
net_write_buff(net, packet, z_size)) net_write_buff(net, packet, z_size))
return 1; return 1;
...@@ -257,7 +261,7 @@ my_net_write(NET *net,const char *packet,ulong len) ...@@ -257,7 +261,7 @@ my_net_write(NET *net,const char *packet,ulong len)
} }
/* Write last packet */ /* Write last packet */
int3store(buff,len); int3store(buff,len);
buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); buff[3]= net->pkt_nr++;
if (net_write_buff(net,(char*) buff,NET_HEADER_SIZE)) if (net_write_buff(net,(char*) buff,NET_HEADER_SIZE))
return 1; return 1;
return net_write_buff(net,packet,len); return net_write_buff(net,packet,len);
...@@ -275,7 +279,7 @@ my_net_write(NET *net,const char *packet,ulong len) ...@@ -275,7 +279,7 @@ my_net_write(NET *net,const char *packet,ulong len)
int int
net_write_command(NET *net,uchar command,const char *packet,ulong len) net_write_command(NET *net,uchar command,const char *packet,ulong len)
{ {
uint length=len+1; /* 1 extra byte for command */ ulong length=len+1; /* 1 extra byte for command */
uchar buff[NET_HEADER_SIZE+1]; uchar buff[NET_HEADER_SIZE+1];
uint header_size=NET_HEADER_SIZE+1; uint header_size=NET_HEADER_SIZE+1;
buff[4]=command; /* For first packet */ buff[4]=command; /* For first packet */
...@@ -287,7 +291,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len) ...@@ -287,7 +291,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len)
do do
{ {
int3store(buff, MAX_THREE_BYTES); int3store(buff, MAX_THREE_BYTES);
buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); buff[3]= net->pkt_nr++;
if (net_write_buff(net,(char*) buff, header_size) || if (net_write_buff(net,(char*) buff, header_size) ||
net_write_buff(net,packet,len)) net_write_buff(net,packet,len))
return 1; return 1;
...@@ -299,7 +303,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len) ...@@ -299,7 +303,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len)
len=length; /* Data left to be written */ len=length; /* Data left to be written */
} }
int3store(buff,length); int3store(buff,length);
buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); buff[3]= net->pkt_nr++;
return test(net_write_buff(net,(char*) buff,header_size) || return test(net_write_buff(net,(char*) buff,header_size) ||
net_write_buff(net,packet,len) || net_flush(net)); net_write_buff(net,packet,len) || net_flush(net));
} }
...@@ -312,7 +316,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len) ...@@ -312,7 +316,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len)
static int static int
net_write_buff(NET *net,const char *packet,ulong len) net_write_buff(NET *net,const char *packet,ulong len)
{ {
uint left_length=(uint) (net->buff_end - net->write_pos); ulong left_length=(ulong) (net->buff_end - net->write_pos);
while (len > left_length) while (len > left_length)
{ {
...@@ -338,7 +342,7 @@ net_write_buff(NET *net,const char *packet,ulong len) ...@@ -338,7 +342,7 @@ net_write_buff(NET *net,const char *packet,ulong len)
int int
net_real_write(NET *net,const char *packet,ulong len) net_real_write(NET *net,const char *packet,ulong len)
{ {
int length; long int length;
char *pos,*end; char *pos,*end;
thr_alarm_t alarmed; thr_alarm_t alarmed;
#if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2) #if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2)
...@@ -378,7 +382,7 @@ net_real_write(NET *net,const char *packet,ulong len) ...@@ -378,7 +382,7 @@ net_real_write(NET *net,const char *packet,ulong len)
} }
int3store(&b[NET_HEADER_SIZE],complen); int3store(&b[NET_HEADER_SIZE],complen);
int3store(b,len); int3store(b,len);
b[3]=(uchar) (net->pkt_nr++); b[3]=(uchar) (net->compress_pkt_nr++);
len+= header_length; len+= header_length;
packet= (char*) b; packet= (char*) b;
} }
...@@ -396,7 +400,7 @@ net_real_write(NET *net,const char *packet,ulong len) ...@@ -396,7 +400,7 @@ net_real_write(NET *net,const char *packet,ulong len)
pos=(char*) packet; end=pos+len; pos=(char*) packet; end=pos+len;
while (pos != end) while (pos != end)
{ {
if ((int) (length=vio_write(net->vio,pos,(int) (end-pos))) <= 0) if ((long) (length=vio_write(net->vio,pos,(ulong) (end-pos))) <= 0)
{ {
my_bool interrupted = vio_should_retry(net->vio); my_bool interrupted = vio_should_retry(net->vio);
#if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2)) #if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2))
...@@ -496,7 +500,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed) ...@@ -496,7 +500,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;
...@@ -516,7 +520,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed) ...@@ -516,7 +520,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed)
This function reallocates the net->buff buffer if necessary. This function reallocates the net->buff buffer if necessary.
*/ */
static uint static ulong
my_real_read(NET *net, ulong *complen) my_real_read(NET *net, ulong *complen)
{ {
uchar *pos; uchar *pos;
...@@ -627,9 +631,9 @@ my_real_read(NET *net, ulong *complen) ...@@ -627,9 +631,9 @@ my_real_read(NET *net, ulong *complen)
if (net->buff[net->where_b] != (uchar) 255) if (net->buff[net->where_b] != (uchar) 255)
{ {
DBUG_PRINT("error", DBUG_PRINT("error",
("Packets out of order (Found: %d, expected %d)", ("Packets out of order (Found: %d, expected %u)",
(int) net->buff[net->where_b + 3], (int) net->buff[net->where_b + 3],
(uint) (uchar) net->pkt_nr)); net->pkt_nr));
#ifdef EXTRA_DEBUG #ifdef EXTRA_DEBUG
fprintf(stderr,"Packets out of order (Found: %d, expected %d)\n", fprintf(stderr,"Packets out of order (Found: %d, expected %d)\n",
(int) net->buff[net->where_b + 3], (int) net->buff[net->where_b + 3],
...@@ -642,7 +646,7 @@ my_real_read(NET *net, ulong *complen) ...@@ -642,7 +646,7 @@ my_real_read(NET *net, ulong *complen)
#endif #endif
goto end; goto end;
} }
net->pkt_nr++; net->compress_pkt_nr= ++net->pkt_nr;
#ifdef HAVE_COMPRESS #ifdef HAVE_COMPRESS
if (net->compress) if (net->compress)
{ {
...@@ -710,7 +714,7 @@ my_net_read(NET *net) ...@@ -710,7 +714,7 @@ my_net_read(NET *net)
if (len == MAX_THREE_BYTES) if (len == MAX_THREE_BYTES)
{ {
/* First packet of a multi-packet. Concatenate the packets */ /* First packet of a multi-packet. Concatenate the packets */
int save_pos = net->where_b; ulong save_pos = net->where_b;
ulong total_length=0; ulong total_length=0;
do do
{ {
...@@ -820,8 +824,8 @@ my_net_read(NET *net) ...@@ -820,8 +824,8 @@ my_net_read(NET *net)
net->read_pos= net->buff+ first_packet_offset + NET_HEADER_SIZE; net->read_pos= net->buff+ first_packet_offset + NET_HEADER_SIZE;
net->buf_length= buf_length; net->buf_length= buf_length;
net->remain_in_buf= buf_length - start_of_packet; net->remain_in_buf= (ulong) (buf_length - start_of_packet);
len = ((uint) (start_of_packet - first_packet_offset) - NET_HEADER_SIZE - len = ((ulong) (start_of_packet - first_packet_offset) - NET_HEADER_SIZE -
multi_byte_packet); multi_byte_packet);
net->save_char= net->read_pos[len]; /* Must be saved */ net->save_char= net->read_pos[len]; /* Must be saved */
net->read_pos[len]=0; /* Safeguard for mysql_use_result */ net->read_pos[len]=0; /* Safeguard for mysql_use_result */
......
...@@ -26,7 +26,7 @@ LDADD = $(top_builddir)/libmysqld/libmysqld.la \ ...@@ -26,7 +26,7 @@ LDADD = $(top_builddir)/libmysqld/libmysqld.la \
mysqltest_DEPENDENCIES = ../libmysqld.la mysqltest_DEPENDENCIES = ../libmysqld.la
mysqltest_SOURCES = mysqltest.c mysqltest_SOURCES = mysqltest.c
mysql_SOURCES = mysql.cc readline.cc sql_string.cc completion_hash.cc \ mysql_SOURCES = mysql.cc readline.cc completion_hash.cc \
my_readline.h sql_string.h completion_hash.h my_readline.h sql_string.h completion_hash.h
mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD) mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD)
......
This diff is collapsed.
...@@ -166,6 +166,8 @@ while test $# -gt 0; do ...@@ -166,6 +166,8 @@ while test $# -gt 0; do
;; ;;
--big*) # Actually --big-test --big*) # Actually --big-test
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;; EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
--compress)
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
--sleep=*) --sleep=*)
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1"
SLEEP_TIME=`$ECHO "$1" | $SED -e "s;--sleep=;;"` SLEEP_TIME=`$ECHO "$1" | $SED -e "s;--sleep=;;"`
......
This diff is collapsed.
...@@ -35,7 +35,7 @@ void caseup_str(my_string str) ...@@ -35,7 +35,7 @@ void caseup_str(my_string str)
if (use_mb(default_charset_info)) if (use_mb(default_charset_info))
{ {
register uint32 l; register uint32 l;
register char *end=str+(uint) strlen(str); register char *end=str+strlen(str);
while (*str) while (*str)
{ {
if ((l=my_ismbchar(default_charset_info, str,end))) str+=l; if ((l=my_ismbchar(default_charset_info, str,end))) str+=l;
...@@ -56,7 +56,7 @@ void casedn_str(my_string str) ...@@ -56,7 +56,7 @@ void casedn_str(my_string str)
if (use_mb(default_charset_info)) if (use_mb(default_charset_info))
{ {
register uint32 l; register uint32 l;
register char *end=str+(uint) strlen(str); register char *end=str+strlen(str);
while (*str) while (*str)
{ {
if ((l=my_ismbchar(default_charset_info, str,end))) str+=l; if ((l=my_ismbchar(default_charset_info, str,end))) str+=l;
...@@ -155,7 +155,7 @@ int my_strcasecmp(const char *s, const char *t) ...@@ -155,7 +155,7 @@ int my_strcasecmp(const char *s, const char *t)
if (use_mb(default_charset_info)) if (use_mb(default_charset_info))
{ {
register uint32 l; register uint32 l;
register const char *end=s+(uint) strlen(s); register const char *end=s+strlen(s);
while (s<end) while (s<end)
{ {
if ((l=my_ismbchar(default_charset_info, s,end))) if ((l=my_ismbchar(default_charset_info, s,end)))
......
...@@ -90,9 +90,10 @@ File create_temp_file(char *to, const char *dir, const char *prefix, ...@@ -90,9 +90,10 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
uint pfx_len; uint pfx_len;
File org_file; File org_file;
pfx_len=(strmov(strnmov(prefix_buff, pfx_len= (uint) (strmov(strnmov(prefix_buff,
prefix ? prefix : "tmp.", prefix ? prefix : "tmp.",
sizeof(prefix_buff)-7),"XXXXXX") - prefix_buff); sizeof(prefix_buff)-7),"XXXXXX") -
prefix_buff);
if (!dir && ! (dir =getenv("TMPDIR"))) if (!dir && ! (dir =getenv("TMPDIR")))
dir=P_tmpdir; dir=P_tmpdir;
if (strlen(dir)+ pfx_len > FN_REFLEN-2) if (strlen(dir)+ pfx_len > FN_REFLEN-2)
......
...@@ -88,7 +88,7 @@ do ...@@ -88,7 +88,7 @@ do
fi fi
done done
for i in libmysql/.libs/libmysqlclient.a libmysql/.libs/libmysqlclient.so* libmysql/libmysqlclient.* libmysql_r/.libs/libmysqlclient_r.a libmysql_r/.libs/libmysqlclient_r.so* libmysql_r/libmysqlclient_r.* mysys/libmysys.a strings/libmystrings.a dbug/libdbug.a $BASE/lib for i in libmysql/.libs/libmysqlclient.a libmysql/.libs/libmysqlclient.so* libmysql/libmysqlclient.* libmysql_r/.libs/libmysqlclient_r.a libmysql_r/.libs/libmysqlclient_r.so* libmysql_r/libmysqlclient_r.* mysys/libmysys.a strings/libmystrings.a dbug/libdbug.a libmysqld/.libs/libmysqld.a libmysqld/.libs/libmysqld.so* libmysqld/libmysqld.a libmysqld/libmysqld.a
do do
if [ -f $i ] if [ -f $i ]
then then
......
...@@ -73,7 +73,7 @@ sub get_server ...@@ -73,7 +73,7 @@ sub get_server
{ $server= new db_interbase($host,$database); } { $server= new db_interbase($host,$database); }
else else
{ {
die "Unknown sql server name used: $name\nUse one of: Access, Adabas, AdabasD, Empress, FrontBase, Oracle, Informix, DB2, mSQL, Mimer, MS-SQL, MySQL, Pg, Solid or Sybase.\nIf the connection is done trough ODBC the name must end with _ODBC\n"; die "Unknown sql server name used: $name\nUse one of: Access, Adabas, AdabasD, Empress, FrontBase, Oracle, Informix, InterBase, DB2, mSQL, Mimer, MS-SQL, MySQL, Pg, Solid or Sybase.\nIf the connection is done trough ODBC the name must end with _ODBC\n";
} }
if ($name =~ /_ODBC$/i || defined($odbc) && $odbc) if ($name =~ /_ODBC$/i || defined($odbc) && $odbc)
{ {
...@@ -2962,7 +2962,7 @@ sub new ...@@ -2962,7 +2962,7 @@ sub new
bless $self; bless $self;
$self->{'cmp_name'} = "interbase"; $self->{'cmp_name'} = "interbase";
$self->{'data_source'} = "DBI:InterBase:database=$database"; $self->{'data_source'} = "DBI:InterBase:database=$database:ib_dialect=3";
$self->{'limits'} = \%limits; $self->{'limits'} = \%limits;
$self->{'smds'} = \%smds; $self->{'smds'} = \%smds;
$self->{'blob'} = "blob"; $self->{'blob'} = "blob";
......
...@@ -81,6 +81,7 @@ class Item { ...@@ -81,6 +81,7 @@ class Item {
virtual void split_sum_func(List<Item> &fields) {} virtual void split_sum_func(List<Item> &fields) {}
virtual bool get_date(TIME *ltime,bool fuzzydate); virtual bool get_date(TIME *ltime,bool fuzzydate);
virtual bool get_time(TIME *ltime); virtual bool get_time(TIME *ltime);
virtual bool is_null() { return 0; }
}; };
...@@ -130,6 +131,7 @@ class Item_field :public Item_ident ...@@ -130,6 +131,7 @@ class Item_field :public Item_ident
Field *tmp_table_field() { return result_field; } Field *tmp_table_field() { return result_field; }
bool get_date(TIME *ltime,bool fuzzydate); bool get_date(TIME *ltime,bool fuzzydate);
bool get_time(TIME *ltime); bool get_time(TIME *ltime);
bool is_null() { return field->is_null(); }
}; };
...@@ -150,6 +152,7 @@ class Item_null :public Item ...@@ -150,6 +152,7 @@ class Item_null :public Item
bool send(String *str); bool send(String *str);
bool basic_const_item() const { return 1; } bool basic_const_item() const { return 1; }
Item *new_item() { return new Item_null(name); } Item *new_item() { return new Item_null(name); }
bool is_null() { return 1; }
}; };
...@@ -383,6 +386,7 @@ class Item_copy_string :public Item ...@@ -383,6 +386,7 @@ class Item_copy_string :public Item
void copy(); void copy();
table_map used_tables() const { return (table_map) 1L; } table_map used_tables() const { return (table_map) 1L; }
bool const_item() const { return 0; } bool const_item() const { return 0; }
bool is_null() { return null_value; }
}; };
......
...@@ -1197,20 +1197,12 @@ longlong Item_cond_or::val_int() ...@@ -1197,20 +1197,12 @@ longlong Item_cond_or::val_int()
longlong Item_func_isnull::val_int() longlong Item_func_isnull::val_int()
{ {
if (internal_result_type == REAL_RESULT) return args[0]->is_null() ? 1: 0;
(void) args[0]->val();
else
(void) args[0]->val_int();
return (args[0]->null_value) ? 1 : 0;
} }
longlong Item_func_isnotnull::val_int() longlong Item_func_isnotnull::val_int()
{ {
if (internal_result_type == REAL_RESULT) return args[0]->is_null() ? 0 : 1;
(void) args[0]->val();
else
(void) args[0]->val_int();
return !(args[0]->null_value) ? 1 : 0;
} }
......
...@@ -46,6 +46,7 @@ class Item_bool_func2 :public Item_int_func ...@@ -46,6 +46,7 @@ class Item_bool_func2 :public Item_int_func
virtual enum Functype rev_functype() const { return UNKNOWN_FUNC; } virtual enum Functype rev_functype() const { return UNKNOWN_FUNC; }
bool have_rev_func() const { return rev_functype() != UNKNOWN_FUNC; } bool have_rev_func() const { return rev_functype() != UNKNOWN_FUNC; }
void print(String *str) { Item_func::print_op(str); } void print(String *str) { Item_func::print_op(str); }
bool is_null() { return test(args[0]->is_null() || args[1]->is_null()); }
}; };
...@@ -429,7 +430,6 @@ class Item_func_in :public Item_int_func ...@@ -429,7 +430,6 @@ class Item_func_in :public Item_int_func
class Item_func_isnull :public Item_bool_func class Item_func_isnull :public Item_bool_func
{ {
enum Item_result internal_result_type;
public: public:
Item_func_isnull(Item *a) :Item_bool_func(a) {} Item_func_isnull(Item *a) :Item_bool_func(a) {}
longlong val_int(); longlong val_int();
...@@ -438,7 +438,6 @@ class Item_func_isnull :public Item_bool_func ...@@ -438,7 +438,6 @@ class Item_func_isnull :public Item_bool_func
{ {
decimals=0; max_length=1; maybe_null=0; decimals=0; max_length=1; maybe_null=0;
Item_func_isnull::update_used_tables(); Item_func_isnull::update_used_tables();
internal_result_type=args[0]->result_type();
} }
const char *func_name() const { return "isnull"; } const char *func_name() const { return "isnull"; }
/* Optimize case of not_null_column IS NULL */ /* Optimize case of not_null_column IS NULL */
...@@ -457,7 +456,6 @@ class Item_func_isnull :public Item_bool_func ...@@ -457,7 +456,6 @@ class Item_func_isnull :public Item_bool_func
class Item_func_isnotnull :public Item_bool_func class Item_func_isnotnull :public Item_bool_func
{ {
enum Item_result internal_result_type;
public: public:
Item_func_isnotnull(Item *a) :Item_bool_func(a) {} Item_func_isnotnull(Item *a) :Item_bool_func(a) {}
longlong val_int(); longlong val_int();
...@@ -465,7 +463,6 @@ class Item_func_isnotnull :public Item_bool_func ...@@ -465,7 +463,6 @@ class Item_func_isnotnull :public Item_bool_func
void fix_length_and_dec() void fix_length_and_dec()
{ {
decimals=0; max_length=1; maybe_null=0; decimals=0; max_length=1; maybe_null=0;
internal_result_type=args[0]->result_type();
} }
const char *func_name() const { return "isnotnull"; } const char *func_name() const { return "isnotnull"; }
optimize_type select_optimize() const { return OPTIMIZE_NULL; } optimize_type select_optimize() const { return OPTIMIZE_NULL; }
......
...@@ -209,7 +209,6 @@ void Item_func::fix_num_length_and_dec() ...@@ -209,7 +209,6 @@ void Item_func::fix_num_length_and_dec()
max_length=float_length(decimals); max_length=float_length(decimals);
} }
String *Item_int_func::val_str(String *str) String *Item_int_func::val_str(String *str)
{ {
longlong nr=val_int(); longlong nr=val_int();
......
...@@ -119,6 +119,7 @@ class Item_func :public Item_result_field ...@@ -119,6 +119,7 @@ class Item_func :public Item_result_field
{ {
return (null_value=args[0]->get_time(ltime)); return (null_value=args[0]->get_time(ltime));
} }
bool is_null() { (void) val_int(); return null_value; }
friend class udf_handler; friend class udf_handler;
}; };
...@@ -147,6 +148,7 @@ class Item_num_func :public Item_func ...@@ -147,6 +148,7 @@ class Item_num_func :public Item_func
longlong val_int() { return (longlong) val(); } longlong val_int() { return (longlong) val(); }
enum Item_result result_type () const { return hybrid_type; } enum Item_result result_type () const { return hybrid_type; }
void fix_length_and_dec() { fix_num_length_and_dec(); } void fix_length_and_dec() { fix_num_length_and_dec(); }
bool is_null() { (void) val(); return null_value; }
}; };
...@@ -161,6 +163,7 @@ class Item_num_op :public Item_func ...@@ -161,6 +163,7 @@ class Item_num_op :public Item_func
enum Item_result result_type () const { return hybrid_type; } enum Item_result result_type () const { return hybrid_type; }
void fix_length_and_dec() { fix_num_length_and_dec(); find_num_type(); } void fix_length_and_dec() { fix_num_length_and_dec(); find_num_type(); }
void find_num_type(void); void find_num_type(void);
bool is_null() { (void) val(); return null_value; }
}; };
......
...@@ -508,7 +508,7 @@ void sql_print_error(const char *format,...) ...@@ -508,7 +508,7 @@ void sql_print_error(const char *format,...)
extern uint32 server_id; extern uint32 server_id;
extern char *mysql_data_home,server_version[SERVER_VERSION_LENGTH], extern char *mysql_data_home,server_version[SERVER_VERSION_LENGTH],
max_sort_char, mysql_real_data_home[]; max_sort_char, mysql_real_data_home[];
extern my_string mysql_unix_port,mysql_tmpdir; extern my_string mysql_tmpdir;
extern const char *first_keyword, *localhost, *delayed_user; extern const char *first_keyword, *localhost, *delayed_user;
extern ulong refresh_version,flush_version, thread_id,query_id,opened_tables, extern ulong refresh_version,flush_version, thread_id,query_id,opened_tables,
created_tmp_tables, created_tmp_disk_tables, created_tmp_tables, created_tmp_disk_tables,
...@@ -522,7 +522,7 @@ extern ulong filesort_merge_passes; ...@@ -522,7 +522,7 @@ extern ulong filesort_merge_passes;
extern ulong select_range_check_count, select_range_count, select_scan_count; extern ulong select_range_check_count, select_range_count, select_scan_count;
extern ulong select_full_range_join_count,select_full_join_count, extern ulong select_full_range_join_count,select_full_join_count,
slave_open_temp_tables; slave_open_temp_tables;
extern uint test_flags,select_errors,mysql_port,ha_open_options; extern uint test_flags,select_errors,ha_open_options;
extern ulong thd_startup_options, slow_launch_threads, slow_launch_time; extern ulong thd_startup_options, slow_launch_threads, slow_launch_time;
extern time_t start_time; extern time_t start_time;
extern const char *command_name[]; extern const char *command_name[];
......
...@@ -41,7 +41,6 @@ ...@@ -41,7 +41,6 @@
#include <signal.h> #include <signal.h>
#include <errno.h> #include <errno.h>
#include <sys/types.h> #include <sys/types.h>
#include <assert.h>
#ifdef MYSQL_SERVER #ifdef MYSQL_SERVER
ulong max_allowed_packet=65536; ulong max_allowed_packet=65536;
...@@ -91,7 +90,7 @@ extern ulong mysqld_net_retry_count; ...@@ -91,7 +90,7 @@ extern ulong mysqld_net_retry_count;
typedef my_bool thr_alarm_t; typedef my_bool thr_alarm_t;
typedef my_bool ALARM; typedef my_bool ALARM;
#define thr_alarm_init(A) (*(A))=0 #define thr_alarm_init(A) (*(A))=0
#define thr_alarm_in_use(A) (*(A)) #define thr_alarm_in_use(A) (*(A) != 0)
#define thr_end_alarm(A) #define thr_end_alarm(A)
#define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C)) #define thr_alarm(A,B,C) local_thr_alarm((A),(B),(C))
inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused))) inline int local_thr_alarm(my_bool *A,int B __attribute__((unused)),ALARM *C __attribute__((unused)))
...@@ -131,7 +130,7 @@ int my_net_init(NET *net, Vio* vio) ...@@ -131,7 +130,7 @@ int my_net_init(NET *net, Vio* vio)
net->no_send_ok = 0; net->no_send_ok = 0;
net->error=0; net->return_errno=0; net->return_status=0; net->error=0; net->return_errno=0; net->return_status=0;
net->timeout=(uint) net_read_timeout; /* Timeout for read */ net->timeout=(uint) net_read_timeout; /* Timeout for read */
net->pkt_nr=0; net->pkt_nr=net->compress_pkt_nr=0;
net->write_pos=net->read_pos = net->buff; net->write_pos=net->read_pos = net->buff;
net->last_error[0]=0; net->last_error[0]=0;
net->compress=0; net->reading_or_writing=0; net->compress=0; net->reading_or_writing=0;
...@@ -192,7 +191,7 @@ static my_bool net_realloc(NET *net, ulong length) ...@@ -192,7 +191,7 @@ static my_bool net_realloc(NET *net, ulong length)
void net_clear(NET *net) void net_clear(NET *net)
{ {
#ifndef EXTRA_DEBUG #ifndef EXTRA_DEBUG
int count; // One may get 'unused' warning int count; /* One may get 'unused' warn */
bool is_blocking=vio_is_blocking(net->vio); bool is_blocking=vio_is_blocking(net->vio);
if (is_blocking) if (is_blocking)
vio_blocking(net->vio, FALSE); vio_blocking(net->vio, FALSE);
...@@ -206,7 +205,7 @@ void net_clear(NET *net) ...@@ -206,7 +205,7 @@ void net_clear(NET *net)
vio_blocking(net->vio, TRUE); vio_blocking(net->vio, TRUE);
} }
#endif /* EXTRA_DEBUG */ #endif /* EXTRA_DEBUG */
net->pkt_nr=0; /* Ready for new command */ net->pkt_nr=net->compress_pkt_nr=0; /* Ready for new command */
net->write_pos=net->buff; net->write_pos=net->buff;
} }
...@@ -219,9 +218,12 @@ int net_flush(NET *net) ...@@ -219,9 +218,12 @@ int net_flush(NET *net)
if (net->buff != net->write_pos) if (net->buff != net->write_pos)
{ {
error=net_real_write(net,(char*) net->buff, error=net_real_write(net,(char*) net->buff,
(uint) (net->write_pos - net->buff)); (ulong) (net->write_pos - net->buff));
net->write_pos=net->buff; net->write_pos=net->buff;
} }
/* Sync packet number if using compression */
if (net->compress)
net->pkt_nr=net->compress_pkt_nr;
DBUG_RETURN(error); DBUG_RETURN(error);
} }
...@@ -250,7 +252,7 @@ my_net_write(NET *net,const char *packet,ulong len) ...@@ -250,7 +252,7 @@ my_net_write(NET *net,const char *packet,ulong len)
{ {
const ulong z_size = MAX_THREE_BYTES; const ulong z_size = MAX_THREE_BYTES;
int3store(buff, z_size); int3store(buff, z_size);
buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); buff[3]= net->pkt_nr++;
if (net_write_buff(net, (char*) buff, NET_HEADER_SIZE) || if (net_write_buff(net, (char*) buff, NET_HEADER_SIZE) ||
net_write_buff(net, packet, z_size)) net_write_buff(net, packet, z_size))
return 1; return 1;
...@@ -259,7 +261,7 @@ my_net_write(NET *net,const char *packet,ulong len) ...@@ -259,7 +261,7 @@ my_net_write(NET *net,const char *packet,ulong len)
} }
/* Write last packet */ /* Write last packet */
int3store(buff,len); int3store(buff,len);
buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); buff[3]= net->pkt_nr++;
if (net_write_buff(net,(char*) buff,NET_HEADER_SIZE)) if (net_write_buff(net,(char*) buff,NET_HEADER_SIZE))
return 1; return 1;
return net_write_buff(net,packet,len); return net_write_buff(net,packet,len);
...@@ -277,7 +279,7 @@ my_net_write(NET *net,const char *packet,ulong len) ...@@ -277,7 +279,7 @@ my_net_write(NET *net,const char *packet,ulong len)
int int
net_write_command(NET *net,uchar command,const char *packet,ulong len) net_write_command(NET *net,uchar command,const char *packet,ulong len)
{ {
uint length=len+1; /* 1 extra byte for command */ ulong length=len+1; /* 1 extra byte for command */
uchar buff[NET_HEADER_SIZE+1]; uchar buff[NET_HEADER_SIZE+1];
uint header_size=NET_HEADER_SIZE+1; uint header_size=NET_HEADER_SIZE+1;
buff[4]=command; /* For first packet */ buff[4]=command; /* For first packet */
...@@ -289,7 +291,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len) ...@@ -289,7 +291,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len)
do do
{ {
int3store(buff, MAX_THREE_BYTES); int3store(buff, MAX_THREE_BYTES);
buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); buff[3]= net->pkt_nr++;
if (net_write_buff(net,(char*) buff, header_size) || if (net_write_buff(net,(char*) buff, header_size) ||
net_write_buff(net,packet,len)) net_write_buff(net,packet,len))
return 1; return 1;
...@@ -301,7 +303,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len) ...@@ -301,7 +303,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len)
len=length; /* Data left to be written */ len=length; /* Data left to be written */
} }
int3store(buff,length); int3store(buff,length);
buff[3]= (net->compress) ? 0 : (uchar) (net->pkt_nr++); buff[3]= net->pkt_nr++;
return test(net_write_buff(net,(char*) buff,header_size) || return test(net_write_buff(net,(char*) buff,header_size) ||
net_write_buff(net,packet,len) || net_flush(net)); net_write_buff(net,packet,len) || net_flush(net));
} }
...@@ -314,7 +316,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len) ...@@ -314,7 +316,7 @@ net_write_command(NET *net,uchar command,const char *packet,ulong len)
static int static int
net_write_buff(NET *net,const char *packet,ulong len) net_write_buff(NET *net,const char *packet,ulong len)
{ {
uint left_length=(uint) (net->buff_end - net->write_pos); ulong left_length=(ulong) (net->buff_end - net->write_pos);
while (len > left_length) while (len > left_length)
{ {
...@@ -340,10 +342,10 @@ net_write_buff(NET *net,const char *packet,ulong len) ...@@ -340,10 +342,10 @@ net_write_buff(NET *net,const char *packet,ulong len)
int int
net_real_write(NET *net,const char *packet,ulong len) net_real_write(NET *net,const char *packet,ulong len)
{ {
int length; long int length;
char *pos,*end; char *pos,*end;
thr_alarm_t alarmed; thr_alarm_t alarmed;
#if !defined(__WIN__) #if !defined(__WIN__) && !defined(__EMX__) && !defined(OS2)
ALARM alarm_buff; ALARM alarm_buff;
#endif #endif
uint retry_count=0; uint retry_count=0;
...@@ -380,7 +382,7 @@ net_real_write(NET *net,const char *packet,ulong len) ...@@ -380,7 +382,7 @@ net_real_write(NET *net,const char *packet,ulong len)
} }
int3store(&b[NET_HEADER_SIZE],complen); int3store(&b[NET_HEADER_SIZE],complen);
int3store(b,len); int3store(b,len);
b[3]=(uchar) (net->pkt_nr++); b[3]=(uchar) (net->compress_pkt_nr++);
len+= header_length; len+= header_length;
packet= (char*) b; packet= (char*) b;
} }
...@@ -398,7 +400,7 @@ net_real_write(NET *net,const char *packet,ulong len) ...@@ -398,7 +400,7 @@ net_real_write(NET *net,const char *packet,ulong len)
pos=(char*) packet; end=pos+len; pos=(char*) packet; end=pos+len;
while (pos != end) while (pos != end)
{ {
if ((int) (length=vio_write(net->vio,pos,(int) (end-pos))) <= 0) if ((long) (length=vio_write(net->vio,pos,(ulong) (end-pos))) <= 0)
{ {
my_bool interrupted = vio_should_retry(net->vio); my_bool interrupted = vio_should_retry(net->vio);
#if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2)) #if (!defined(__WIN__) && !defined(__EMX__) && !defined(OS2))
...@@ -499,7 +501,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed) ...@@ -499,7 +501,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed)
{ {
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;
} }
...@@ -518,7 +520,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed) ...@@ -518,7 +520,7 @@ static void my_net_skip_rest(NET *net, ulong remain, thr_alarm_t *alarmed)
This function reallocates the net->buff buffer if necessary. This function reallocates the net->buff buffer if necessary.
*/ */
static uint static ulong
my_real_read(NET *net, ulong *complen) my_real_read(NET *net, ulong *complen)
{ {
uchar *pos; uchar *pos;
...@@ -629,9 +631,9 @@ my_real_read(NET *net, ulong *complen) ...@@ -629,9 +631,9 @@ my_real_read(NET *net, ulong *complen)
if (net->buff[net->where_b] != (uchar) 255) if (net->buff[net->where_b] != (uchar) 255)
{ {
DBUG_PRINT("error", DBUG_PRINT("error",
("Packets out of order (Found: %d, expected %d)", ("Packets out of order (Found: %d, expected %u)",
(int) net->buff[net->where_b + 3], (int) net->buff[net->where_b + 3],
(uint) (uchar) net->pkt_nr)); net->pkt_nr));
#ifdef EXTRA_DEBUG #ifdef EXTRA_DEBUG
fprintf(stderr,"Packets out of order (Found: %d, expected %d)\n", fprintf(stderr,"Packets out of order (Found: %d, expected %d)\n",
(int) net->buff[net->where_b + 3], (int) net->buff[net->where_b + 3],
...@@ -644,7 +646,7 @@ my_real_read(NET *net, ulong *complen) ...@@ -644,7 +646,7 @@ my_real_read(NET *net, ulong *complen)
#endif #endif
goto end; goto end;
} }
net->pkt_nr++; net->compress_pkt_nr= ++net->pkt_nr;
#ifdef HAVE_COMPRESS #ifdef HAVE_COMPRESS
if (net->compress) if (net->compress)
{ {
...@@ -712,7 +714,7 @@ my_net_read(NET *net) ...@@ -712,7 +714,7 @@ my_net_read(NET *net)
if (len == MAX_THREE_BYTES) if (len == MAX_THREE_BYTES)
{ {
/* First packet of a multi-packet. Concatenate the packets */ /* First packet of a multi-packet. Concatenate the packets */
int save_pos = net->where_b; ulong save_pos = net->where_b;
ulong total_length=0; ulong total_length=0;
do do
{ {
...@@ -822,8 +824,8 @@ my_net_read(NET *net) ...@@ -822,8 +824,8 @@ my_net_read(NET *net)
net->read_pos= net->buff+ first_packet_offset + NET_HEADER_SIZE; net->read_pos= net->buff+ first_packet_offset + NET_HEADER_SIZE;
net->buf_length= buf_length; net->buf_length= buf_length;
net->remain_in_buf= buf_length - start_of_packet; net->remain_in_buf= (ulong) (buf_length - start_of_packet);
len = ((uint) (start_of_packet - first_packet_offset) - NET_HEADER_SIZE - len = ((ulong) (start_of_packet - first_packet_offset) - NET_HEADER_SIZE -
multi_byte_packet); multi_byte_packet);
net->save_char= net->read_pos[len]; /* Must be saved */ net->save_char= net->read_pos[len]; /* Must be saved */
net->read_pos[len]=0; /* Safeguard for mysql_use_result */ net->read_pos[len]=0; /* Safeguard for mysql_use_result */
......
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