Commit 830076cc authored by paul@teton.kitebird.com's avatar paul@teton.kitebird.com

Merge

parents 509305c2 454339b2
......@@ -31071,6 +31071,10 @@ mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
-> 'no'
@end example
If @code{expr2} or @code{expr3} is explicitely @code{NULL} then the
result type of the @code{IF()} function is the type of the not
@code{NULL} column. (This behavior is new in MySQL 4.0.3).
@code{expr1} is evaluated as an integer value, which means that if you are
testing floating-point or string values, you should do so using a comparison
operation:
......@@ -50246,10 +50250,13 @@ each individual 4.0.x release.
Added @code{QUOTE()} function that performs SQL quoting to produce values
that can be used as data values in queries.
@item
Fixed security bug in database hash
Changed behavior of @code{IF(condition,column,NULL)} so that it returns
the value of the column type.
@item
Made @code{safe_mysqld} a symlink to @code{mysqld_safe} in binary distribution.
@item
Fixed security bug when having an empty databasename in the user.db table.
Fixed security bug when having an empty databasename in the @code{user.db}
table.
@item
Fixed some problems with @code{CREATE TABLE ... SELECT function()}.
@item
......@@ -50894,7 +50901,10 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.52
@itemize @bullet
@item
Fixed a security bug with empty db column in db table
Fixed problem with @code{UNSIGNED BIGINT} on AIX.
@item
Fixed security bug when having an empty databasename in the @code{user.db}
table.
@item
Changed initialisation of @code{RND()} to make it less predicatable.
@item
......@@ -20,7 +20,7 @@
environment, easier to use.
*/
#if !defined(_my_no_pthread_h) && !defined(THREADS)
#if !defined(_my_no_pthread_h) && !defined(THREAD)
#define _my_no_pthread_h
#define pthread_mutex_init(A,B)
......
......@@ -158,22 +158,21 @@ extern my_string my_strdup(const char *from,myf MyFlags);
#define CALLER_INFO /* nothing */
#define ORIG_CALLER_INFO /* nothing */
#endif
#ifdef HAVE_ALLOCA
#ifdef __GNUC__
/* Remove any previous definitions. */
#undef alloca
#define alloca(size) __builtin_alloca (size)
#else /* xlc */
#ifdef _AIX
#pragma alloca
#if defined(_AIX) && !defined(__GNUC__)
#pragma alloca
#endif /* _AIX */
#endif /* __GNUC__ */
#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H)
#define alloca __builtin_alloca
#endif /* GNUC */
#define my_alloca(SZ) alloca((size_t) (SZ))
#define my_afree(PTR) {}
#else
#define my_alloca(SZ) my_malloc(SZ,MYF(0))
#define my_afree(PTR) my_free(PTR,MYF(MY_WME))
#endif /* HAVE_ALLOCA */
#ifdef MSDOS
#ifdef __ZTC__
void * __CDECL halloc(long count,size_t length);
......
......@@ -70,7 +70,9 @@ os_thread_create(
void* arg, /* in: argument to start
function */
os_thread_id_t* thread_id); /* out: id of created
thread */
thread; currently this is
identical to the handle to
the thread */
/*********************************************************************
A thread calling this function ends its execution. */
......
......@@ -117,6 +117,13 @@ void
trx_start_if_not_started(
/*=====================*/
trx_t* trx); /* in: transaction */
/*****************************************************************
Starts the transaction if it is not yet started. */
void
trx_start_if_not_started_noninline(
/*===============================*/
trx_t* trx); /* in: transaction */
/********************************************************************
Commits a transaction. */
......@@ -262,7 +269,7 @@ void
trx_print(
/*======*/
char* buf, /* in/out: buffer where to print, must be at least
500 bytes */
800 bytes */
trx_t* trx); /* in: transaction */
......
......@@ -63,6 +63,12 @@ Microsoft Visual C++ */
#define HAVE_PWRITE
#endif
/* Apparently in some old SCO Unixes the return type of sprintf is not
an integer as it should be according to the modern Posix standard. Because
of that we define sprintf inside InnoDB code as our own function ut_sprintf */
#undef sprintf
#define sprintf ut_sprintf
#endif
/* DEBUG VERSION CONTROL
......
......@@ -17,6 +17,18 @@ Created 1/20/1994 Heikki Tuuri
typedef time_t ib_time_t;
/************************************************************
Uses vsprintf to emulate sprintf so that the function always returns
the printed length. Apparently in some old SCO Unixes sprintf did not
return the printed length but a pointer to the end of the printed string. */
ulint
ut_sprintf(
/*=======*/
char* buf, /* in/out: buffer where to print */
const char* format, /* in: format of prints */
...); /* in: arguments to be printed */
/************************************************************
Gets the high 32 bits in a ulint. That is makes a shift >> 32,
but since there seem to be compiler bugs in both gcc and Visual C++,
......
......@@ -2755,6 +2755,8 @@ lock_deadlock_occurs(
err_buf += sprintf(err_buf,
"*** WE ROLL BACK TRANSACTION (2)\n");
ut_a(strlen(lock_latest_err_buf) < 4100);
/*
sess_raise_error_low(trx, DB_DEADLOCK, lock->type_mode, table,
index, NULL, NULL, NULL);
......@@ -3626,7 +3628,7 @@ lock_print_info(
trx = UT_LIST_GET_FIRST(trx_sys->mysql_trx_list);
while (trx) {
if (buf_end - buf < 600) {
if (buf_end - buf < 900) {
return;
}
......@@ -3663,7 +3665,7 @@ loop:
return;
}
if (buf_end - buf < 600) {
if (buf_end - buf < 900) {
return;
}
......
......@@ -97,17 +97,20 @@ os_thread_create(
function */
os_thread_id_t* thread_id __attribute__((unused)))
/* out: id of created
thread */
thread; currently this is
identical to the handle to
the thread */
{
#ifdef __WIN__
os_thread_t thread;
ulint win_thread_id;
thread = CreateThread(NULL, /* no security attributes */
0, /* default size stack */
(LPTHREAD_START_ROUTINE)start_f,
arg,
0, /* thread runs immediately */
thread_id);
&win_thread_id);
if (srv_set_thread_priorities) {
......@@ -118,6 +121,8 @@ os_thread_create(
ut_a(SetThreadPriority(thread, srv_query_thread_priority));
}
*thread_id = thread;
return(thread);
#else
int ret;
......@@ -135,6 +140,8 @@ os_thread_create(
my_pthread_setprio(pthread, srv_query_thread_priority);
}
*thread_id = pthread;
return(pthread);
#endif
}
......
......@@ -2228,6 +2228,7 @@ srv_sprintf_innodb_monitor(
ut_sprintf_timestamp(buf);
buf = buf + strlen(buf);
ut_a(buf < buf_end + 1500);
buf += sprintf(buf, " INNODB MONITOR OUTPUT\n"
"=====================================\n");
......@@ -2242,6 +2243,7 @@ srv_sprintf_innodb_monitor(
sync_print(buf, buf_end);
buf = buf + strlen(buf);
ut_a(buf < buf_end + 1500);
buf += sprintf(buf, "------------\n"
"TRANSACTIONS\n"
......@@ -2254,15 +2256,18 @@ srv_sprintf_innodb_monitor(
"--------\n");
os_aio_print(buf, buf_end);
buf = buf + strlen(buf);
ut_a(buf < buf_end + 1500);
buf += sprintf(buf, "-------------------------------------\n"
"INSERT BUFFER AND ADAPTIVE HASH INDEX\n"
"-------------------------------------\n");
ibuf_print(buf, buf_end);
buf = buf + strlen(buf);
ut_a(buf < buf_end + 1500);
ha_print_info(buf, buf_end, btr_search_sys->hash_index);
buf = buf + strlen(buf);
ut_a(buf < buf_end + 1500);
buf += sprintf(buf,
"%.2f hash searches/s, %.2f non-hash searches/s\n",
......@@ -2278,6 +2283,7 @@ srv_sprintf_innodb_monitor(
"---\n");
log_print(buf, buf_end);
buf = buf + strlen(buf);
ut_a(buf < buf_end + 1500);
buf += sprintf(buf, "----------------------\n"
"BUFFER POOL AND MEMORY\n"
......@@ -2288,6 +2294,7 @@ srv_sprintf_innodb_monitor(
mem_pool_get_reserved(mem_comm_pool));
buf_print_io(buf, buf_end);
buf = buf + strlen(buf);
ut_a(buf < buf_end + 1500);
buf += sprintf(buf, "--------------\n"
"ROW OPERATIONS\n"
......@@ -2321,6 +2328,8 @@ srv_sprintf_innodb_monitor(
buf += sprintf(buf, "----------------------------\n"
"END OF INNODB MONITOR OUTPUT\n"
"============================\n");
ut_a(buf < buf_end + 1900);
mutex_exit(&srv_innodb_monitor_mutex);
}
......@@ -2378,7 +2387,9 @@ loop:
buf = mem_alloc(100000);
srv_sprintf_innodb_monitor(buf, 100000);
srv_sprintf_innodb_monitor(buf, 90000);
ut_a(strlen(buf) < 99000);
printf("%s", buf);
......
......@@ -39,6 +39,17 @@ sess_t* trx_dummy_sess = NULL;
the kernel mutex */
ulint trx_n_mysql_transactions = 0;
/*****************************************************************
Starts the transaction if it is not yet started. */
void
trx_start_if_not_started_noninline(
/*===============================*/
trx_t* trx) /* in: transaction */
{
trx_start_if_not_started(trx);
}
/********************************************************************
Retrieves the error_info field from a trx. */
......@@ -1465,7 +1476,7 @@ void
trx_print(
/*======*/
char* buf, /* in/out: buffer where to print, must be at least
500 bytes */
800 bytes */
trx_t* trx) /* in: transaction */
{
char* start_of_line;
......
......@@ -12,10 +12,35 @@ Created 5/11/1994 Heikki Tuuri
#include "ut0ut.ic"
#endif
#include <stdarg.h>
#include "ut0sort.h"
ibool ut_always_false = FALSE;
/************************************************************
Uses vsprintf to emulate sprintf so that the function always returns
the printed length. Apparently in some old SCO Unixes sprintf did not
return the printed length but a pointer to the end of the printed string. */
ulint
ut_sprintf(
/*=======*/
char* buf, /* in/out: buffer where to print */
const char* format, /* in: format of prints */
...) /* in: arguments to be printed */
{
va_list args;
va_start(args, format);
vsprintf(buf, format, args);
va_end(args);
return((ulint)strlen(buf));
}
/************************************************************
Gets the high 32 bits in a ulint. That is makes a shift >> 32,
but since there seem to be compiler bugs in both gcc and Visual C++,
......
......@@ -60,7 +60,7 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \
charset.lo hash.lo mf_iocache.lo \
mf_iocache2.lo my_seek.lo \
my_pread.lo mf_cache.lo my_vsnprintf.lo md5.lo \
my_getopt.lo my_gethostbyname.lo
my_getopt.lo my_gethostbyname.lo my_port.lo
sqlobjects = net.lo
# Not needed in the minimum library
......
......@@ -89,7 +89,6 @@ EXPORTS
mysql_read_query_result
mysql_real_escape_string
mysql_ssl_set
mysql_ssl_clear
mysql_real_connect
mysql_master_query
mysql_master_send_query
......
......@@ -1097,7 +1097,6 @@ int _mi_cmp_dynamic_unique(MI_INFO *info, MI_UNIQUEDEF *def,
const byte *record, my_off_t pos)
{
byte *rec_buff,*old_record;
uint alloced_rec_buff_length;
int error;
DBUG_ENTER("_mi_cmp_dynamic_unique");
......
......@@ -19,7 +19,7 @@ TZ=GMT-3; export TZ # for UNIX_TIMESTAMP tests to work
# Program Definitions
#--
PATH=/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin
PATH=/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin:/usr/bin/X11
MASTER_40_ARGS="--rpl-recovery-rank=1 --init-rpl-role=master"
# Standard functions
......
......@@ -46,3 +46,9 @@ select sum(if(num is null,0.00,num)) from t1;
sum(if(num is null,0.00,num))
144.54
drop table t1;
create table t1 (x int, y int);
insert into t1 values (0,6),(10,16),(20,26),(30,10),(40,46),(50,56);
select min(if(y -x > 5,y,NULL)), max(if(y - x > 5,y,NULL)) from t1;
min(if(y -x > 5,y,NULL)) max(if(y - x > 5,y,NULL))
6 56
drop table t1;
......@@ -152,6 +152,9 @@ quote('\'\"\\test')
select quote(concat('abc\'', '\\cba'));
quote(concat('abc\'', '\\cba'))
'abc\'\\cba'
select quote(1/0), quote('\0\Z');
quote(1/0) quote('\0\Z')
NULL '\0\Z'
select reverse("");
reverse("")
......
......@@ -5,6 +5,12 @@ select 0,256,00000000000000065536,2147483647,-2147483648,2147483648,+4294967296;
select 9223372036854775807,-009223372036854775808;
select +9999999999999999999,-9999999999999999999;
#
# In 3.23 we have to disable the test of column to bigint as
# this fails on AIX powerpc (the resolution for double is not good enough)
# This will work on 4.0 as we then have internal handling of bigint variables.
#
drop table if exists t1;
create table t1 (a bigint unsigned not null, primary key(a));
insert into t1 values (18446744073709551615), (0xFFFFFFFFFFFFFFFE);
......
......@@ -28,3 +28,7 @@ create table t1 (num double(12,2));
insert into t1 values (144.54);
select sum(if(num is null,0.00,num)) from t1;
drop table t1;
create table t1 (x int, y int);
insert into t1 values (0,6),(10,16),(20,26),(30,10),(40,46),(50,56);
select min(if(y -x > 5,y,NULL)), max(if(y - x > 5,y,NULL)) from t1;
drop table t1;
......@@ -63,6 +63,7 @@ select decode(encode("abcdef","monty"),"monty")="abcdef";
select quote('\'\"\\test');
select quote(concat('abc\'', '\\cba'));
select quote(1/0), quote('\0\Z');
#
# Wrong usage of functions
......
......@@ -49,7 +49,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
my_quick.c my_lockmem.c my_static.c \
my_getopt.c my_mkdir.c \
default.c my_compress.c checksum.c raid.cc \
my_net.c my_semaphore.c \
my_net.c my_semaphore.c my_port.c \
my_vsnprintf.c charset.c my_bitmap.c my_bit.c md5.c \
my_gethostbyname.c rijndael.c my_aes.c sha1.c
EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
......
......@@ -521,8 +521,9 @@ int _my_b_read_r(register IO_CACHE *info, byte *Buffer, uint Count)
length=(length <= info->read_length) ?
length + IO_ROUND_DN(info->read_length - length) :
length - IO_ROUND_UP(length - info->read_length) ;
if (info->type != READ_FIFO && (length > info->end_of_file - pos_in_file))
length=info->end_of_file - pos_in_file;
if (info->type != READ_FIFO &&
(length > (uint) (info->end_of_file - pos_in_file)))
length= (uint) (info->end_of_file - pos_in_file);
if (length == 0)
{
info->error=(int) read_len;
......
......@@ -18,9 +18,6 @@
/* Thread safe version of gethostbyname_r() */
#include "mysys_priv.h"
#ifdef THREAD
#include "my_pthread.h"
#endif
#include <assert.h>
#if !defined(MSDOS) && !defined(__WIN__)
#include <netdb.h>
......
......@@ -20,9 +20,6 @@
#include "m_ctype.h"
#include <m_string.h>
#include <m_ctype.h>
#ifdef THREAD
#include <my_pthread.h>
#endif
#ifdef HAVE_GETRUSAGE
#include <sys/resource.h>
/* extern int getrusage(int, struct rusage *); */
......
......@@ -33,11 +33,6 @@
#endif
#endif /* !defined(MSDOS) && !defined(__WIN__) */
#ifndef THREAD
#define pthread_mutex_lock(A)
#define pthread_mutex_unlock(A)
#endif
void my_inet_ntoa(struct in_addr in, char *buf)
{
char *ptr;
......
......@@ -32,8 +32,8 @@
int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr)
{
APIRET rc = 0;
HEV event;
APIRET rc = 0;
HEV event;
cond->waiting=0;
/* Warp3 FP29 or Warp4 FP4 or better required */
rc = DosCreateEventSem( NULL, &cond->semaphore, 0x0800, 0);
......@@ -61,7 +61,7 @@ int pthread_cond_destroy(pthread_cond_t *cond)
int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
{
APIRET rc;
int rval;
int rval;
rval = 0;
cond->waiting++;
......@@ -80,13 +80,13 @@ int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
}
int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
struct timespec *abstime)
struct timespec *abstime)
{
struct timeb curtime;
int result;
long timeout;
APIRET rc;
int rval;
int rval;
_ftime(&curtime);
timeout= ((long) (abstime->ts_sec - curtime.time)*1000L +
......@@ -123,13 +123,13 @@ int pthread_cond_signal(pthread_cond_t *cond)
int pthread_cond_broadcast(pthread_cond_t *cond)
{
int i;
int i;
APIRET rc;
/*
* Enter a loop to bring all threads off the
* condition queue:
*/
/*
* Enter a loop to bring all threads off the
* condition queue:
*/
i = cond->waiting;
while (i--) rc = DosPostEventSem(cond->semaphore);
......@@ -176,9 +176,9 @@ struct tm *localtime_r(const time_t *timep,struct tm *tmp)
else
{
struct tm *res=localtime(timep);
if (!res) /* Wrong date */
if (!res) /* Wrong date */
{
bzero(tmp,sizeof(*tmp)); /* Keep things safe */
bzero(tmp,sizeof(*tmp)); /* Keep things safe */
return 0;
}
*tmp= *res;
......
......@@ -26,10 +26,10 @@
long _findfirst( char* path, struct _finddata_t* dos_file)
{
HDIR hdir = HDIR_CREATE;
APIRET rc;
HDIR hdir = HDIR_CREATE;
APIRET rc;
FILEFINDBUF3 buf3;
ULONG entries = 1;
ULONG entries = 1;
#ifdef _DEBUG
printf( "_findfirst path %s\n", path);
......@@ -37,13 +37,13 @@ long _findfirst( char* path, struct _finddata_t* dos_file)
memset( &buf3, 0, sizeof( buf3));
rc = DosFindFirst(
path, /* Address of the ASCIIZ path name of the file or subdirectory to be found. */
&hdir, /* Address of the handle associated with this DosFindFirst request. */
FILE_NORMAL | FILE_DIRECTORY, /* Attribute value that determines the file objects to be searched for. */
&buf3, /* Result buffer. */
sizeof( buf3), /* The length, in bytes, of pfindbuf. */
&entries, /* Pointer to the number of entries: */
FIL_STANDARD); /* The level of file information required. */
path, /* Address of the ASCIIZ path name of the file or subdirectory to be found. */
&hdir, /* Address of the handle associated with this DosFindFirst request. */
FILE_NORMAL | FILE_DIRECTORY, /* Attribute value that determines the file objects to be searched for. */
&buf3, /* Result buffer. */
sizeof( buf3), /* The length, in bytes, of pfindbuf. */
&entries, /* Pointer to the number of entries: */
FIL_STANDARD); /* The level of file information required. */
#ifdef _DEBUG
printf( "_findfirst rc=%d hdir=%d entries=%d->%s\n", rc, hdir, entries, buf3.achName);
......@@ -64,16 +64,16 @@ long _findfirst( char* path, struct _finddata_t* dos_file)
long _findnext( long hdir, struct _finddata_t* dos_file)
{
APIRET rc;
APIRET rc;
FILEFINDBUF3 buf3;
ULONG entries = 1;
ULONG entries = 1;
memset( &buf3, 0, sizeof( buf3));
rc = DosFindNext(
hdir,
&buf3, /* Result buffer. */
sizeof( buf3), /* The length, in bytes, of pfindbuf. */
&entries); /* Pointer to the number of entries: */
hdir,
&buf3, /* Result buffer. */
sizeof( buf3), /* The length, in bytes, of pfindbuf. */
&entries); /* Pointer to the number of entries: */
#ifdef _DEBUG
printf( "_findnext rc=%d hdir=%d entries=%d->%s\n", rc, hdir, entries, buf3.achName);
......@@ -93,7 +93,7 @@ long _findnext( long hdir, struct _finddata_t* dos_file)
void _findclose( long hdir)
{
APIRET rc;
APIRET rc;
rc = DosFindClose( hdir);
#ifdef _DEBUG
......@@ -105,8 +105,8 @@ DIR* opendir( char* path)
{
DIR* dir = (DIR*) calloc( 1, sizeof( DIR));
char buffer[260];
APIRET rc;
ULONG entries = 1;
APIRET rc;
ULONG entries = 1;
strcpy( buffer, path);
strcat( buffer, "*.*");
......@@ -118,13 +118,13 @@ DIR* opendir( char* path)
dir->hdir = HDIR_CREATE;
memset( &dir->buf3, 0, sizeof( dir->buf3));
rc = DosFindFirst(
buffer, /* Address of the ASCIIZ path name of the file or subdirectory to be found. */
&dir->hdir, /* Address of the handle associated with this DosFindFirst request. */
FILE_NORMAL | FILE_DIRECTORY, /* Attribute value that determines the file objects to be searched for. */
&dir->buf3, /* Result buffer. */
sizeof( dir->buf3), /* The length, in bytes, of pfindbuf. */
&entries, /* Pointer to the number of entries: */
FIL_STANDARD); /* The level of file information required. */
buffer, /* Address of the ASCIIZ path name of the file or subdirectory to be found. */
&dir->hdir, /* Address of the handle associated with this DosFindFirst request. */
FILE_NORMAL | FILE_DIRECTORY, /* Attribute value that determines the file objects to be searched for. */
&dir->buf3, /* Result buffer. */
sizeof( dir->buf3), /* The length, in bytes, of pfindbuf. */
&entries, /* Pointer to the number of entries: */
FIL_STANDARD); /* The level of file information required. */
#ifdef _DEBUG
printf( "opendir rc=%d hdir=%d entries=%d->%s\n", rc, dir->hdir, entries, dir->buf3.achName);
......@@ -138,9 +138,9 @@ DIR* opendir( char* path)
struct dirent* readdir( DIR* dir)
{
APIRET rc;
APIRET rc;
//FILEFINDBUF3 buf3;
ULONG entries = 1;
ULONG entries = 1;
if (!dir->buf3.achName[0]) // file not found on previous query
return NULL;
......@@ -151,10 +151,10 @@ struct dirent* readdir( DIR* dir)
// query next file
memset( &dir->buf3, 0, sizeof( dir->buf3));
rc = DosFindNext(
dir->hdir,
&dir->buf3, /* Result buffer. */
sizeof( dir->buf3), /* The length, in bytes, of pfindbuf. */
&entries); /* Pointer to the number of entries: */
dir->hdir,
&dir->buf3, /* Result buffer. */
sizeof( dir->buf3), /* The length, in bytes, of pfindbuf. */
&entries); /* Pointer to the number of entries: */
#ifdef _DEBUG
printf( "_findnext rc=%d hdir=%d entries=%d->%s\n", rc, dir->hdir, entries, dir->buf3.achName);
......@@ -168,7 +168,7 @@ struct dirent* readdir( DIR* dir)
int closedir (DIR *dir)
{
APIRET rc;
APIRET rc;
rc = DosFindClose( dir->hdir);
#ifdef _DEBUG
......
......@@ -30,9 +30,9 @@ extern "C" {
struct _finddata_t
{
unsigned attrib;
//unsigned long time_create; /* -1 for FAT file systems */
//unsigned long time_access; /* -1 for FAT file systems */
//unsigned long time_write;
//unsigned long time_create; /* -1 for FAT file systems */
//unsigned long time_access; /* -1 for FAT file systems */
//unsigned long time_write;
unsigned long size;
char name[260];
//uint16 wr_date;
......@@ -42,10 +42,10 @@ struct _finddata_t
struct dirent
{
//unsigned attrib;
//unsigned long time_create; /* -1 for FAT file systems */
//unsigned long time_access; /* -1 for FAT file systems */
//unsigned long time_write;
//unsigned long size;
//unsigned long time_create; /* -1 for FAT file systems */
//unsigned long time_access; /* -1 for FAT file systems */
//unsigned long time_write;
//unsigned long size;
char d_name[260];
//uint16 wr_date;
//uint16 wr_time;
......@@ -66,9 +66,9 @@ int closedir (DIR *);
//#define _A_SUBDIR FILE_DIRECTORY
//#define _A_RDONLY FILE_READONLY
//long _findfirst( char*, struct _finddata_t*);
//long _findnext( long, struct _finddata_t*);
//void _findclose( long);
//long _findfirst( char*, struct _finddata_t*);
//long _findnext( long, struct _finddata_t*);
//void _findclose( long);
#ifdef __cplusplus_00
}
......
......@@ -34,7 +34,7 @@ char* dlerror( void);
void* dlsym( void* hmod, char* fn);
void dlclose( void* hmod);
char fail[ 256];
char fail[ 256];
void* dlopen( char* path, int flag)
{
......@@ -56,7 +56,7 @@ char* dlerror( void)
void* dlsym( void* hmod, char* fn)
{
APIRET rc;
PFN addr;
PFN addr;
rc = DosQueryProcAddr( (HMODULE) hmod, 0l, fn, &addr);
if (rc)
......
This diff is collapsed.
......@@ -72,8 +72,8 @@ pthread_mutex_destroy(pthread_mutex_t * mutex)
int
pthread_mutex_lock(pthread_mutex_t * mutex)
{
int ret = 0;
int status = 0;
int ret = 0;
int status = 0;
APIRET rc = 0;
rc = DosRequestMutexSem(*mutex,SEM_INDEFINITE_WAIT);
......@@ -86,9 +86,9 @@ pthread_mutex_lock(pthread_mutex_t * mutex)
int
pthread_mutex_unlock(pthread_mutex_t * mutex)
{
int ret = 0;
int ret = 0;
APIRET rc = 0;
int status;
int status;
rc = DosReleaseMutexSem(*mutex);
......
......@@ -31,9 +31,9 @@ static pthread_mutex_t THR_LOCK_thread;
struct pthread_map
{
HANDLE pthreadself;
HANDLE pthreadself;
pthread_handler func;
void * param;
void * param;
};
void win_pthread_init(void)
......@@ -57,7 +57,7 @@ static pthread_handler_decl(pthread_start,param)
pthread_handler func=((struct pthread_map *) param)->func;
void *func_param=((struct pthread_map *) param)->param;
my_thread_init(); /* Will always succeed in windows */
pthread_mutex_lock(&THR_LOCK_thread); /* Wait for beginthread to return */
pthread_mutex_lock(&THR_LOCK_thread); /* Wait for beginthread to return */
win_pthread_self=((struct pthread_map *) param)->pthreadself;
pthread_mutex_unlock(&THR_LOCK_thread);
free((char*) param); /* Free param from create */
......
......@@ -18,23 +18,23 @@
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
DWORD TlsAlloc( void);
BOOL TlsFree( DWORD);
PVOID TlsGetValue( DWORD);
BOOL TlsSetValue( DWORD, PVOID);
DWORD TlsAlloc( void);
BOOL TlsFree( DWORD);
PVOID TlsGetValue( DWORD);
BOOL TlsSetValue( DWORD, PVOID);
#define TLS_MINIMUM_AVAILABLE 64
#define TLS_MINIMUM_AVAILABLE 64
PULONG tls_storage; /* TLS local storage */
DWORD tls_bits[2]; /* TLS in-use bits */
pthread_mutex_t tls_mutex; /* TLS mutex for in-use bits */
PULONG tls_storage; /* TLS local storage */
DWORD tls_bits[2]; /* TLS in-use bits */
pthread_mutex_t tls_mutex; /* TLS mutex for in-use bits */
DWORD TlsAlloc( void)
DWORD TlsAlloc( void)
{
DWORD index = -1;
DWORD mask, tibidx;
int i;
int i;
if (tls_storage == NULL) {
......@@ -43,12 +43,12 @@ DWORD TlsAlloc( void)
// allocate memory for TLS storage
rc = DosAllocThreadLocalMemory( 1, &tls_storage);
if (rc) {
fprintf( stderr, "DosAllocThreadLocalMemory error: return code = %u\n", rc);
fprintf( stderr, "DosAllocThreadLocalMemory error: return code = %u\n", rc);
}
// create a mutex
if (pthread_mutex_init( &tls_mutex, NULL))
fprintf( stderr, "Failed to init TLS mutex\n");
fprintf( stderr, "Failed to init TLS mutex\n");
}
pthread_mutex_lock( &tls_mutex);
......@@ -56,18 +56,18 @@ DWORD TlsAlloc( void)
tibidx = 0;
if (tls_bits[0] == 0xFFFFFFFF) {
if (tls_bits[1] == 0xFFFFFFFF) {
fprintf( stderr, "tid#%d, no more TLS bits available\n", _threadid);
pthread_mutex_unlock( &tls_mutex);
return -1;
fprintf( stderr, "tid#%d, no more TLS bits available\n", _threadid);
pthread_mutex_unlock( &tls_mutex);
return -1;
}
tibidx = 1;
}
for( i=0; i<32; i++) {
mask = (1 << i);
if ((tls_bits[ tibidx] & mask) == 0) {
tls_bits[ tibidx] |= mask;
index = (tibidx*32) + i;
break;
tls_bits[ tibidx] |= mask;
index = (tibidx*32) + i;
break;
}
}
tls_storage[index] = 0;
......@@ -79,9 +79,9 @@ DWORD TlsAlloc( void)
return index;
}
BOOL TlsFree( DWORD index)
BOOL TlsFree( DWORD index)
{
int tlsidx;
int tlsidx;
DWORD mask;
if (index >= TLS_MINIMUM_AVAILABLE)
......@@ -106,7 +106,7 @@ BOOL TlsFree( DWORD index)
}
PVOID TlsGetValue( DWORD index)
PVOID TlsGetValue( DWORD index)
{
if (index >= TLS_MINIMUM_AVAILABLE)
return NULL;
......@@ -122,7 +122,7 @@ PVOID TlsGetValue( DWORD index)
return (PVOID) tls_array[ index];
}
BOOL TlsSetValue( DWORD index, PVOID val)
BOOL TlsSetValue( DWORD index, PVOID val)
{
// verify if memory has been allocated for this thread
......
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/*
Small functions to make code portable
*/
#include "mysys_priv.h"
#ifdef _AIX
/*
On AIX, at least with gcc 3.1, the expression
'(double) (ulonglong) var' doesn't always work for big unsigned
integers like '18446744073709551615'. The end result is that the
high bit is simply dropped. (probably bug in gcc optimizations)
Handling the conversion in a sub function seems to work.
*/
double my_longlong2double(unsigned long long nr)
{
return (double) nr;
}
#endif /* _AIX */
......@@ -22,10 +22,10 @@
#endif
#ifdef THREAD
#include <my_pthread.h>
extern pthread_mutex_t THR_LOCK_malloc,THR_LOCK_open,THR_LOCK_keycache,
THR_LOCK_lock,THR_LOCK_isam,THR_LOCK_net,THR_LOCK_charset;
extern pthread_mutex_t LOCK_bitmap;
#else /* THREAD */
#define pthread_mutex_lock(A)
#define pthread_mutex_unlock(A)
#else
#include <my_no_pthread.h>
#endif
......@@ -17,7 +17,6 @@
/* Synchronization - readers / writer thread locks */
#include "mysys_priv.h"
#include <my_pthread.h>
#if defined(THREAD) && !defined(HAVE_PTHREAD_RWLOCK_RDLOCK) && !defined(HAVE_RWLOCK_INIT)
#include <errno.h>
......
......@@ -19,7 +19,7 @@
/* TODO list for the InnoDB handler:
- Ask Monty if strings of different languages can exist in the same
database. Answer: in near future yes, but not yet.
database. Answer: in 4.1 yes.
*/
#ifdef __GNUC__
......@@ -306,7 +306,10 @@ innobase_mysql_print_thd(
*buf++=' ';
buf=strnmov(buf, thd->query, 150);
}
*buf='\n';
buf[0]='\n';
buf[1]=0;
ut_a(strlen(buf) < 400);
}
}
......@@ -392,6 +395,61 @@ ha_innobase::update_thd(
return(0);
}
/*********************************************************************
Call this when you have opened a new table handle in HANDLER, before you
call index_read_idx() etc. Actually, we can let the cursor stay open even
over a transaction commit! Then you should call this before every operation,
fecth next etc. This function inits the necessary things even after a
transaction commit. */
/* TODO: THIS CODE HAS NOT BEEN TESTED!!! */
void
ha_innobase::init_table_handle_for_HANDLER(void)
/*============================================*/
{
row_prebuilt_t* prebuilt;
/* If current thd does not yet have a trx struct, create one.
If the current handle does not yet have a prebuilt struct, create
one. Update the trx pointers in the prebuilt struct. Normally
this operation is done in external_lock. */
update_thd(current_thd);
/* Initialize the prebuilt struct much like it would be inited in
external_lock */
prebuilt = (row_prebuilt_t*)innobase_prebuilt;
/* If the transaction is not started yet, start it */
trx_start_if_not_started_noninline(prebuilt->trx);
/* Assign a read view if the transaction does not have it yet */
trx_assign_read_view(prebuilt->trx);
/* We did the necessary inits in this function, no need to repeat them
in row_search_for_mysql */
prebuilt->sql_stat_start = FALSE;
/* We let HANDLER always to do the reads as consistent reads, even
if the trx isolation level would have been specified as SERIALIZABLE */
prebuilt->select_lock_type = LOCK_NONE;
/* Always fetch all columns in the index record */
prebuilt->hint_no_need_to_fetch_extra_cols = FALSE;
/* We want always to fetch all columns in the whole row? Or do
we???? */
prebuilt->read_just_key = FALSE;
}
/*************************************************************************
Opens an InnoDB database. */
......@@ -3459,8 +3517,10 @@ innodb_show_status(
DBUG_ENTER("innodb_show_status");
/* We let the InnoDB Monitor to output at most 100 kB of text */
buf = (char*)ut_malloc(100 * 1024);
/* We let the InnoDB Monitor to output at most 100 kB of text, add
a safety margin of 10 kB for buffer overruns */
buf = (char*)ut_malloc(110 * 1024);
srv_sprintf_innodb_monitor(buf, 100 * 1024);
......
......@@ -164,6 +164,7 @@ class ha_innobase: public handler
void free_foreign_key_create_info(char* str);
THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
enum thr_lock_type lock_type);
void init_table_handle_for_HANDLER(); /* TODO: NOT TESTED!!! */
longlong get_auto_increment();
};
......
......@@ -486,6 +486,7 @@ Item_func_ifnull::val_str(String *str)
return res;
}
void
Item_func_if::fix_length_and_dec()
{
......@@ -494,16 +495,32 @@ Item_func_if::fix_length_and_dec()
decimals=max(args[1]->decimals,args[2]->decimals);
enum Item_result arg1_type=args[1]->result_type();
enum Item_result arg2_type=args[2]->result_type();
binary=1;
if (arg1_type == STRING_RESULT || arg2_type == STRING_RESULT)
bool null1=args[1]->null_value;
bool null2=args[2]->null_value;
if (null1)
{
cached_result_type= arg2_type;
binary= args[2]->binary;
}
else if (null2)
{
cached_result_type= arg1_type;
binary= args[1]->binary;
}
else if (arg1_type == STRING_RESULT || arg2_type == STRING_RESULT)
{
cached_result_type = STRING_RESULT;
binary=args[1]->binary | args[2]->binary;
}
else if (arg1_type == REAL_RESULT || arg2_type == REAL_RESULT)
cached_result_type = REAL_RESULT;
else
cached_result_type=arg1_type; // Should be INT_RESULT
{
binary=1; // Number
if (arg1_type == REAL_RESULT || arg2_type == REAL_RESULT)
cached_result_type = REAL_RESULT;
else
cached_result_type=arg1_type; // Should be INT_RESULT
}
}
......
......@@ -2071,41 +2071,90 @@ String* Item_func_inet_ntoa::val_str(String* str)
return str;
}
#define get_esc_bit(mask, num) (1 & (*((mask) + ((num) >> 3))) >> ((num) & 7))
/*
QUOTE() function returns argument string in single quotes,
also adds a \ before \, ' CHAR(0) and CHAR(24)
QUOTE() function returns argument string in single quotes suitable for
using in a SQL statement.
DESCRIPTION
Adds a \ before all characters that needs to be escaped in a SQL string.
We also escape '^Z' (END-OF-FILE in windows) to avoid probelms when
running commands from a file in windows.
This function is very useful when you want to generate SQL statements
RETURN VALUES
str Quoted string
NULL Argument to QUOTE() was NULL or out of memory.
*/
#define get_esc_bit(mask, num) (1 & (*((mask) + ((num) >> 3))) >> ((num) & 7))
String *Item_func_quote::val_str(String *str)
{
static char escmask[32] = {0x01, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
String *arg= args[0]->val_str(str);
char *from, *to, *end;
uint delta= 2; /* for beginning and ending ' signs */
/*
Bit mask that has 1 for set for the position of the following characters:
0, \, ' and ^Z
*/
static char escmask[32]=
{
0x01, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
if (!arg)
char *from, *to, *end, *start;
String *arg= args[0]->val_str(str);
uint arg_length, new_length;
if (!arg) // Null argument
goto null;
arg_length= arg->length();
new_length= arg_length+2; /* for beginning and ending ' signs */
for (from= (char*) arg->ptr(), end= from + arg->length(); from < end; from++)
delta+= get_esc_bit(escmask, *from);
for (from= (char*) arg->ptr(), end= from + arg_length; from < end; from++)
new_length+= get_esc_bit(escmask, *from);
if (str->alloc(arg->length() + delta))
/*
We have to use realloc() instead of alloc() as we want to keep the
old result in str
*/
if (str->realloc(new_length))
goto null;
to= (char*) str->ptr() + arg->length() + delta - 1;
/*
As 'arg' and 'str' may be the same string, we must replace characters
from the end to the beginning
*/
to= (char*) str->ptr() + new_length - 1;
*to--= '\'';
for (end= (char*) arg->ptr(), from= end + arg->length() - 1; from >= end;
from--, to--)
for (start= (char*) arg->ptr() ; end-- != start; to--)
{
*to= *from;
if (get_esc_bit(escmask, *from))
*--to= '\\';
/*
We can't use the bitmask here as we want to replace \O and ^Z with 0
and Z
*/
switch (*end) {
case 0:
*to--= '0';
*to= '\\';
break;
case '\032':
*to--= 'Z';
*to= '\\';
break;
case '\'':
case '\\':
*to--= *end;
*to= '\\';
break;
default:
*to= *end;
break;
}
}
*to= '\'';
str->length(arg->length() + delta);
str->length(new_length);
return str;
null:
......
......@@ -451,7 +451,6 @@ int MYSQL_LOG::find_log_pos(LOG_INFO *linfo, const char *log_name,
}
}
err:
if (need_lock)
pthread_mutex_unlock(&LOCK_index);
DBUG_RETURN(error);
......@@ -602,15 +601,15 @@ err:
- Read the first file name from the index file and store in rli->linfo
RETURN VALUES
0 ok
1 error
0 ok
LOG_INFO_EOF End of log-index-file found
LOG_INFO_SEEK Could not allocate IO cache
LOG_INFO_IO Got IO error while reading file
*/
int MYSQL_LOG::purge_first_log(struct st_relay_log_info* rli)
{
File file;
bool error= 1;
my_off_t offset, init_offset;
int error;
DBUG_ENTER("purge_first_log");
/*
......
......@@ -640,7 +640,7 @@ extern bool opt_using_transactions, use_temp_pool, mysql_embedded;
extern bool using_update_log, opt_large_files;
extern bool opt_log, opt_update_log, opt_bin_log, opt_slow_log;
extern bool opt_sql_bin_update, opt_safe_user_create, opt_no_mix_types;
extern bool opt_disable_networking, opt_skip_show_db;
extern bool opt_disable_networking, opt_skip_show_db, opt_enable_named_pipe;
extern bool volatile abort_loop, shutdown_in_progress, grant_option;
extern uint volatile thread_count, thread_running, global_read_lock;
extern my_bool opt_safe_show_db, opt_local_infile, lower_case_table_names;
......
......@@ -181,7 +181,6 @@ static SECURITY_DESCRIPTOR sdPipeDescriptor;
static HANDLE hPipe = INVALID_HANDLE_VALUE;
static pthread_cond_t COND_handler_count;
static uint handler_count;
static bool opt_enable_named_pipe = 0;
#endif
#ifdef __WIN__
static bool opt_console=0, start_mode=0, use_opt_args;
......@@ -258,6 +257,7 @@ ulong back_log, connect_timeout, concurrency;
char mysql_home[FN_REFLEN], pidfile_name[FN_REFLEN], time_zone[30];
bool opt_log, opt_update_log, opt_bin_log, opt_slow_log;
bool opt_disable_networking=0, opt_skip_show_db=0;
bool opt_enable_named_pipe= 0;
my_bool opt_local_infile, opt_external_locking, opt_slave_compressed_protocol;
static bool opt_do_pstack = 0;
......@@ -646,29 +646,45 @@ static void close_server_sock()
if (tmp_sock != INVALID_SOCKET)
{
ip_sock=INVALID_SOCKET;
DBUG_PRINT("info",("closing TCP/IP socket"));
DBUG_PRINT("info",("calling shutdown on TCP/IP socket"));
VOID(shutdown(tmp_sock,2));
#ifdef NOT_USED
/*
The following code is disabled as it causes MySQL to hang on
AIX 4.3 during shutdown
*/
DBUG_PRINT("info",("calling closesocket on TCP/IP socket"));
VOID(closesocket(tmp_sock));
#endif
}
tmp_sock=unix_sock;
if (tmp_sock != INVALID_SOCKET)
{
unix_sock=INVALID_SOCKET;
DBUG_PRINT("info",("closing Unix socket"));
DBUG_PRINT("info",("calling shutdown on unix socket"));
VOID(shutdown(tmp_sock,2));
#ifdef NOT_USED
/*
The following code is disabled as it may cause MySQL to hang on
AIX 4.3 during shutdown (not tested, but likely)
*/
DBUG_PRINT("info",("calling closesocket on unix/IP socket"));
VOID(closesocket(tmp_sock));
#endif
VOID(unlink(mysql_unix_port));
}
DBUG_VOID_RETURN;
#endif
}
void kill_mysql(void)
{
DBUG_ENTER("kill_mysql");
#ifdef SIGNALS_DONT_BREAK_READ
close_server_sock(); /* force accept to wake up */
abort_loop=1; // Break connection loops
close_server_sock(); // Force accept to wake up
#endif
#if defined(__WIN__)
......@@ -699,7 +715,7 @@ void kill_mysql(void)
DBUG_PRINT("quit",("After pthread_kill"));
shutdown_in_progress=1; // Safety if kill didn't work
#ifdef SIGNALS_DONT_BREAK_READ
if (!abort_loop)
if (!kill_in_progress)
{
pthread_t tmp;
abort_loop=1;
......@@ -1045,8 +1061,8 @@ static void server_init(void)
PIPE_READMODE_BYTE |
PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
(int) global_variables.net_buffer_length,
(int) global_variables.net_buffer_length,
(int) global_system_variables.net_buffer_length,
(int) global_system_variables.net_buffer_length,
NMPWAIT_USE_DEFAULT_WAIT,
&saPipeSecurity )) == INVALID_HANDLE_VALUE)
{
......@@ -1273,7 +1289,7 @@ static void sig_reload(int signo)
static void sig_kill(int signo)
{
if (!abort_loop)
if (!kill_in_progress)
{
abort_loop=1; // mark abort for threads
kill_server((void*) signo);
......@@ -2275,7 +2291,8 @@ int main(int argc, char **argv)
if (Service.IsService(argv[1]))
{
/* start an optional service */
event_name = load_default_groups[0]= argv[1];
event_name= argv[1];
load_default_groups[0]= argv[1];
start_mode= 1;
Service.Init(event_name, mysql_service);
return 0;
......@@ -2285,8 +2302,8 @@ int main(int argc, char **argv)
{
/* Add service name after filename */
uint length=strlen(file_path);
strxnmov(file_path + length, sizeof(file_path)-length-2, " ",
argv[2], NullS)= '\0';
*strxnmov(file_path + length, sizeof(file_path)-length-2, " ",
argv[2], NullS)= '\0';
if (!default_service_handling(argv, argv[2], argv[2], file_path))
return 0;
......@@ -2309,8 +2326,8 @@ int main(int argc, char **argv)
mysqld --install-manual mysqldopt --defaults-file=c:\miguel\my.ini
*/
uint length=strlen(file_path);
strxnmov(file_path + length, sizeof(file_path)-length-2, " ",
argv[3], " ", argv[2], NullS)= '\0';
*strxnmov(file_path + length, sizeof(file_path)-length-2, " ",
argv[3], " ", argv[2], NullS)= '\0';
if (!default_service_handling(argv, argv[2], argv[2], file_path))
return 0;
}
......@@ -2724,8 +2741,8 @@ pthread_handler_decl(handle_connections_namedpipes,arg)
PIPE_READMODE_BYTE |
PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
(int) global_variables.net_buffer_length,
(int) global_variables.net_buffer_length,
(int) global_system_variables.net_buffer_length,
(int) global_systenm_ariables.net_buffer_length,
NMPWAIT_USE_DEFAULT_WAIT,
&saPipeSecurity )) ==
INVALID_HANDLE_VALUE )
......@@ -2742,8 +2759,8 @@ pthread_handler_decl(handle_connections_namedpipes,arg)
PIPE_READMODE_BYTE |
PIPE_WAIT,
PIPE_UNLIMITED_INSTANCES,
(int) global_variables.net_buffer_length,
(int) global_variables.net_buffer_length,
(int) global_system_variables.net_buffer_length,
(int) global_system_variables.net_buffer_length,
NMPWAIT_USE_DEFAULT_WAIT,
&saPipeSecurity)) ==
INVALID_HANDLE_VALUE)
......@@ -4446,7 +4463,8 @@ static void fix_paths(void)
}
char *end=convert_dirname(buff, opt_mysql_tmpdir, NullS);
if (!(mysql_tmpdir= my_memdup(buff,(uint) (end-buff)+1, MYF(MY_FAE))))
if (!(mysql_tmpdir= my_memdup((byte*) buff,(uint) (end-buff)+1,
MYF(MY_FAE))))
exit(1);
if (!slave_load_tmpdir)
{
......
......@@ -669,7 +669,7 @@ bool sys_var_thd_ulong::update(THD *thd, set_var *var)
{
/* Lock is needed to make things safe on 32 bit systems */
pthread_mutex_lock(&LOCK_global_system_variables);
global_system_variables.*offset=tmp;
global_system_variables.*offset= (ulong) tmp;
pthread_mutex_unlock(&LOCK_global_system_variables);
}
else
......@@ -998,7 +998,7 @@ bool sys_var_slave_skip_counter::update(THD *thd, set_var *var)
if (!active_mi->rli.slave_running)
{
pthread_mutex_lock(&active_mi->rli.data_lock);
active_mi->rli.slave_skip_counter= var->value->val_int();
active_mi->rli.slave_skip_counter= (ulong) var->value->val_int();
pthread_mutex_unlock(&active_mi->rli.data_lock);
}
pthread_mutex_unlock(&active_mi->rli.run_lock);
......
......@@ -855,7 +855,7 @@ static int check_master_version(MYSQL* mysql, MASTER_INFO* mi)
errmsg = "Master reported unrecognized MySQL version";
break;
}
err:
if (errmsg)
{
sql_print_error(errmsg);
......@@ -874,7 +874,7 @@ static int create_table_from_dump(THD* thd, NET* net, const char* db,
TABLE_LIST tables;
int error= 1;
handler *file;
uint save_options;
ulong save_options;
if (packet_len == packet_error)
{
......@@ -903,7 +903,7 @@ static int create_table_from_dump(THD* thd, NET* net, const char* db,
/* we do not want to log create table statement */
save_options = thd->options;
thd->options &= ~(ulong) OPTION_BIN_LOG;
thd->options &= ~(ulong) (OPTION_BIN_LOG);
thd->proc_info = "Creating table from master dump";
// save old db in case we are creating in a different database
char* save_db = thd->db;
......@@ -2642,7 +2642,7 @@ bool flush_relay_log_info(RELAY_LOG_INFO* rli)
*pos++='\n';
pos=longlong2str(rli->master_log_pos, pos, 10);
*pos='\n';
if (my_b_write(file, buff, (ulong) (pos-buff)+1))
if (my_b_write(file, (byte*) buff, (ulong) (pos-buff)+1))
error=1;
if (flush_io_cache(file))
error=1;
......
......@@ -345,7 +345,7 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list, List<Item> &fields,
else
sprintf(buff,ER(ER_INSERT_INFO),info.records,info.deleted,
thd->cuted_fields);
::send_ok(&thd->net,info.copied+info.deleted,0L,buff);
::send_ok(&thd->net,info.copied+info.deleted,(ulonglong)id,buff);
}
DBUG_RETURN(0);
......
......@@ -1152,7 +1152,6 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables,
String packet2(buff,sizeof(buff));
List<Item> field_list;
CONVERT *convert=thd->variables.convert_set;
ulong offset;
DBUG_ENTER("mysqld_show");
field_list.push_back(new Item_empty_string("Variable_name",30));
......@@ -1173,7 +1172,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables,
if (show_type == SHOW_SYS)
{
show_type= ((sys_var*) value)->type();
value= ((sys_var*) value)->value_ptr(thd, value_type);
value= (char*) ((sys_var*) value)->value_ptr(thd, value_type);
}
switch (show_type) {
......
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