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

Fixes for Ia64

parent 7ef8d67d
......@@ -5004,12 +5004,11 @@ and that provides output about what is happening.
@xref{Debugging server}.
@item
If your client programs are using threads, you need to compile the
@strong{MySQL} client library to be thread safe with
@code{--with-thread-safe-client}; this forces the library to use thread
safe functions calls for some functions that are not thread safe by
default. You pay a very small performance penalty by doing this, but
generally it's quite safe to use this option.
If your client programs are using threads, you need to also compile a
thread safe version of the @strong{MySQL} client library with the
@code{--with-thread-safe-client} configure options. This will create a
@code{libmysqlclient_r} library with which you should link your threaded
applications. @xref{Thread-safe clients}.
@item
Options that pertain to particular systems can be found in the
......@@ -30101,24 +30100,8 @@ The @strong{MySQL} server shrinks each communication buffer to
the buffer associated with a connection is not decreased until the connection
is closed, at which time client memory is reclaimed.
If you are programming with threads, you should compile the
@strong{MySQL} C API with @code{--with-thread-safe-client}. This will make
the C API thread safe per connection. You can let two threads share the same
connection as long as you do the following:
@table @asis
@item
Two threads can't send a query to the @strong{MySQL} at the same time on
the same connection. In particular you have to ensure that between a
@code{mysql_query()} and @code{mysql_store_result()} no other thread is using
the same connection.
@item
Many threads can access different result sets that are retrieved with
@code{mysql_store_result()}.
@item
If you use @code{mysql_use_result}, you have to ensure that no other thread
is asking anything on the same connection until the result set is closed.
@end table
For programming with threads, consult the 'how to make a thread safe
client' chapter. @xref{Thread-safe clients}.
@node C API datatypes, C API function overview, C, Clients
@section C API datatypes
......@@ -32769,18 +32752,21 @@ have your own alarm that can break a long read to a server. If you
install an interrupt handlers for the @code{SIGPIPE} interrupt,
the socket handling should be thread safe.
In the standard binaries we distribute on our web site, the client libraries
are not normally compiled with the thread safe option.
In the older binaries we distribute on our web site, the client
libraries are not normally compiled with the thread safe option (the
windows binaries are however by default compiled to be thread safe).
Newer binary distributions should however have both a normal and a
threadsafe client library.
To get a really thread-safe client where you can interrupt the client
from other threads and set timeouts when talking with the MySQL server,
you should use the @code{-lmysys}, @code{-lstring} and @code{-ldbug}
libraries and the @code{net_serv.o} code that the server uses.
If you don't need interrupts or timeouts you can just compile the client
library @code{(mysqlclient)} to be thread safe and use this. In this
case you don't have to worry about the @code{net_serv.o} object file or
the other @strong{MySQL} libraries.
If you don't need interrupts or timeouts you can just compile a tread
safe client library @code{(mysqlclient_r)} and use this. @xref{C,,
MySQL C API}. In this case you don't have to worry about the
@code{net_serv.o} object file or the other @strong{MySQL} libraries.
When using a threaded client and you want to use timeouts and interrupts,
you can make great use of the routines in the @file{thr_alarm.c} file.
......@@ -32798,36 +32784,43 @@ To make @code{mysql_real_connect()} thread-safe, you must recompile the
client library with this command:
@example
shell> ./configure --enable-thread-safe-client
shell> ./configure --with-thread-safe-client
@end example
This will ensure that the client library will use the header files required
for thread safe programs and also that @code{mysql_real_connect()} will use
a thread safe version of the @code{gethostbyname()} call.
You may get some errors because of undefined symbols when linking the
standard client, because the pthread libraries are not included by
default.
This will create a thread safe client library @code{libmysqlclient_r}.
@code{--with-thread-safe-client}. This library is is thread safe per
connection. You can let two threads share the same connection as long
as you do the following:
The resulting @file{libmysqlclient.a} library is now thread-safe. What this
means is that client code is thread-safe as long as two threads don't query
the same connection handle returned by @code{mysql_real_connect()} at the
same time; the client/server protocol allows only one request at a time on a
given connection. If you want to use multiple threads on the same
connection, you must have a mutex lock around your @code{mysql_query()} and
@table @asis
@item
Two threads can't send a query to the @strong{MySQL} at the same time on
the same connection. In particular you have to ensure that between a
@code{mysql_query()} and @code{mysql_store_result()} no other thread is using
the same connection.
@item
Many threads can access different result sets that are retrieved with
@code{mysql_store_result()}.
@item
If you use @code{mysql_use_result}, you have to ensure that no other thread
is asking anything on the same connection until the result set is closed.
However, it really is best for threaded clients that share the same
connection to use @code{mysql_use_result()}.
@item
If you want to use multiple threads on the same connection, you must
have a mutex lock around your @code{mysql_query()} and
@code{mysql_store_result()} call combination. Once
@code{mysql_store_result()} is ready, the lock can be released and other
threads may query the same connection. (In other words, different threads
can use different @code{MYSQL_RES} pointers that were created with
@code{mysql_store_result()}, as long as they use the proper locking
protocol.) If you program with POSIX threads, you can use
@code{pthread_mutex_lock()} and @code{pthread_mutex_unlock()} to establish
and release a mutex lock.
If you used @code{mysql_use_result()} rather than @code{mysql_store_result()},
the lock would need to surround @code{mysql_use_result()} and the calls
to @code{mysql_fetch_row()}. However, it really is best for threaded
clients not to use @code{mysql_use_result()}.
threads may query the same connection.
@item
If you program with POSIX threads, you can use
@code{pthread_mutex_lock()} and @code{pthread_mutex_unlock()} to
establish and release a mutex lock.
@end table
You may get some errors because of undefined symbols when linking your
client with @code{mysqlclient_r}; In most cases this is because you haven't
included the thread libraries on the link/compile line.
@node Perl, Eiffel, C API functions, Clients
@section MySQL Perl API
......@@ -34652,9 +34645,8 @@ The @strong{MySQL} GUI client homepage. By Sinisa at MySQL AB.
An administration tool for the @strong{MySQL} server using QT / KDE. Tested
only on Linux.
@item @uref{http://www.mysql.com/Downloads/Contrib/mysql-admin-using-java+swing.tar.gz, Java client
using Swing} By Fredy Fischer, @email{se-afs@@dial.eunet.ch}. You can
always find the latest version
@item @uref{http://www.mysql.com/Downloads/Contrib/mysql-admin-using-java+swing.tar.gz, Java client using Swing} By Fredy Fischer, @email{se-afs@@dial.eunet.ch}.
You can always find the latest version
@uref{http://www.trash.net/~ffischer/admin/index.html, here}.
@item @uref{http://www.mysql.com/Downloads/Contrib/mysqlwinadmn.zip, mysqlwinadmn.zip}
......@@ -34676,6 +34668,14 @@ URL @url{http://www.it-netservice.de/pages/software/index.html}.
Home page for this can be found at: @uref{http://www.artronic.hr}.
@item @uref{http://www.mysql.com/Downloads/Win32/W9xstop.zip,Utility from Artronic to stop MySQL on win9x}
@item @uref{http://dbtools.vila.bol.com.br/, Dbtools}
A tool to manage @strong{MySQL} databases. Currently only for Win32.
Some features:
@itemize @bullet
@item manage servers, databases, tables, columns, indexes and users
@item import wizard to import structure and data from a MS Access, MS Excel, Dbase, FoxPro, Paradox and ODBC Databases.
@end itemize
@item @uref{http://www.mysql.com/Downloads/Contrib/xmysqladmin-1.0.tar.gz, xmysqladmin-1.0.tar.gz}
An X based front end to the @strong{MySQL} database engine. It allows reloads,
status check, process control, myisamchk, grant/revoke privileges,
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This library is free software; you can redistribute it and/or
This program file 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.
......@@ -127,7 +127,7 @@ bool String::set(double num,uint decimals)
if (decimals >= NOT_FIXED_DEC)
{
sprintf(buff,"%.14g",num); // Enough for a DATETIME
return copy(buff,strlen(buff));
return copy(buff, (uint32) strlen(buff));
}
#ifdef HAVE_FCONVERT
int decpt,sign;
......@@ -142,7 +142,7 @@ bool String::set(double num,uint decimals)
buff[0]='-';
pos=buff;
}
return copy(pos,strlen(pos));
return copy(pos,(uint32) strlen(pos));
}
if (alloc((uint32) ((uint32) decpt+3+decimals)))
return TRUE;
......@@ -186,12 +186,13 @@ bool String::set(double num,uint decimals)
str_length=(uint32) (to-Ptr);
return FALSE;
#else
#ifdef HAVE_SNPRINTF_
snprintf(buff,sizeof(buff), "%.*f",(int) decimals,num);
#ifdef HAVE_SNPRINTF
buff[sizeof(buff)-1]=0; // Safety
snprintf(buff,sizeof(buff)-1, "%.*f",(int) decimals,num);
#else
sprintf(buff,"%.*f",(int) decimals,num);
#endif
return copy(buff,strlen(buff));
return copy(buff,(uint32) strlen(buff));
#endif
}
......@@ -260,7 +261,7 @@ bool String::append(const String &s)
bool String::append(const char *s,uint32 arg_length)
{
if (!arg_length) // Default argument
arg_length=strlen(s);
arg_length= (uint32) strlen(s);
if (realloc(str_length+arg_length))
return TRUE;
memcpy(Ptr+str_length,s,arg_length);
......@@ -268,6 +269,19 @@ bool String::append(const char *s,uint32 arg_length)
return FALSE;
}
bool String::append(FILE* file, uint32 arg_length, myf my_flags)
{
if (realloc(str_length+arg_length))
return TRUE;
if (my_fread(file, (byte*) Ptr + str_length, arg_length, my_flags))
{
shrink(str_length);
return TRUE;
}
str_length+=arg_length;
return FALSE;
}
uint32 String::numchars()
{
#ifdef USE_MB
......@@ -305,7 +319,7 @@ int String::charpos(int i,uint32 offset)
if ( INT_MAX32-i <= (int) (mbstr-Ptr-offset))
return INT_MAX32;
else
return (mbstr-Ptr-offset)+i;
return (int) ((mbstr-Ptr-offset)+i);
}
else
#endif
......@@ -317,7 +331,7 @@ int String::strstr(const String &s,uint32 offset)
if (s.length()+offset <= str_length)
{
if (!s.length())
return offset; // Empty string is always found
return ((int) offset); // Empty string is always found
register const char *str = Ptr+offset;
register const char *search=s.ptr();
......@@ -587,6 +601,7 @@ static int wild_case_compare(const char *str,const char *str_end,
#ifdef USE_MB
const char* mb = wildstr;
int mblen;
LINT_INIT(mblen);
if (use_mb_flag)
mblen = my_ismbchar(default_charset_info, wildstr, wildend);
#endif
......
......@@ -36,7 +36,7 @@ class String
String(uint32 length_arg)
{ alloced=0; Alloced_length=0; (void) real_alloc(length_arg); }
String(const char *str)
{ Ptr=(char*) str; str_length=strlen(str); Alloced_length=0; alloced=0;}
{ Ptr=(char*) str; str_length=(uint) strlen(str); Alloced_length=0; alloced=0;}
String(const char *str,uint32 len)
{ Ptr=(char*) str; str_length=len; Alloced_length=0; alloced=0;}
String(char *str,uint32 len)
......@@ -45,7 +45,7 @@ class String
{ Ptr=str.Ptr ; str_length=str.str_length ;
Alloced_length=str.Alloced_length; alloced=0; }
static void *operator new(size_t size) { return (void*) sql_alloc(size); }
static void *operator new(size_t size) { return (void*) sql_alloc((uint) size); }
static void operator delete(void *ptr_arg,size_t size) /*lint -e715 */
{ sql_element_free(ptr_arg); }
~String() { free(); }
......@@ -123,7 +123,7 @@ class String
if (arg_length < Alloced_length)
{
char *new_ptr;
if (!(new_ptr=my_realloc(Ptr,arg_length,MYF(0))))
if (!(new_ptr=(char*) my_realloc(Ptr,arg_length,MYF(0))))
{
(void) my_free(Ptr,MYF(0));
real_alloc(arg_length);
......@@ -152,6 +152,7 @@ class String
bool copy(const char *s,uint32 arg_length); // Allocate new string
bool append(const String &s);
bool append(const char *s,uint32 arg_length=0);
bool append(FILE* file, uint32 arg_length, myf my_flags);
int strstr(const String &search,uint32 offset=0); // Returns offset to substring or -1
int strrstr(const String &search,uint32 offset=0); // Returns offset to substring or -1
bool replace(uint32 offset,uint32 arg_length,const String &to);
......
......@@ -272,7 +272,7 @@ int insert_pointer_name(reg1 POINTER_ARRAY *pa,my_string name)
pa->max_length=PS_MALLOC-MALLOC_OVERHEAD;
pa->array_allocs=1;
}
length=strlen(name)+1;
length=(uint) strlen(name)+1;
if (pa->length+length >= pa->max_length)
{
if (!(new_pos= (byte*) my_realloc((gptr) pa->str,
......@@ -415,7 +415,7 @@ REPLACE *init_replace(my_string *from, my_string *to,uint count,
DBUG_RETURN(0);
}
states+=len+1;
result_len+=strlen(to[i])+1;
result_len+=(uint) strlen(to[i])+1;
if (len > max_length)
max_length=len;
}
......@@ -1021,7 +1021,7 @@ FILE *in,*out;
end_of_line++;
if (end_of_line == buffer+bufbytes)
{
retain=end_of_line - start_of_line;
retain= (int) (end_of_line - start_of_line);
break; /* No end of line, read more */
}
save_char=end_of_line[0];
......
......@@ -32,11 +32,17 @@
#define SYSTEM_TYPE "Win95/Win98"
#endif
#ifdef _WIN32
#define MACHINE_TYPE "i32" /* Define to machine type name */
#else
#ifdef _WIN64
#define MACHINE_TYPE "i64" /* Define to machine type name */
#else
#define MACHINE_TYPE "i32" /* Define to machine type name */
#ifndef _WIN32
#define _WIN32 /* Compatible with old source */
#endif
#ifndef __WIN32__
#define __WIN32__
#endif
#endif /* _WIN64 */
#ifndef __WIN__
#define __WIN__ /* To make it easier in VC++ */
#endif
......
......@@ -21,7 +21,7 @@
#ifndef _global_h
#define _global_h
#if defined(_WIN32) || defined(_WIN64)
#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32)
#include <config-win.h>
#else
#include <my_config.h>
......@@ -54,7 +54,9 @@
#endif
#if defined(THREAD) && !defined(__WIN__)
#ifndef _POSIX_PTHREAD_SEMANTICS
#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */
#endif
/* was #if defined(HAVE_LINUXTHREADS) || defined(HAVE_DEC_THREADS) || defined(HPUX) */
#if !defined(SCO)
#define _REENTRANT 1 /* Some thread libraries require this */
......
......@@ -241,11 +241,12 @@ int nisam_create(const char *name,uint keys,N_KEYDEF *keyinfo,
share.base.keystart = share.state.key_file_length=MY_ALIGN(info_length,
nisam_block_size);
share.base.max_block=max_block;
share.base.max_key_length=ALIGN_SIZE(max_key_length+4);
share.base.max_key_length=(uint) ALIGN_SIZE(max_key_length+4);
share.base.records=records;
share.base.reloc=reloc;
share.base.reclength=reclength;
share.base.pack_reclength=reclength+packed-share.base.blobs*sizeof(char*);
share.base.pack_reclength=
(uint) (reclength+packed-share.base.blobs*sizeof(char*));
share.base.max_pack_length=pack_reclength;
share.base.min_pack_length=min_pack_length;
share.base.pack_bits=packed;
......
......@@ -439,7 +439,7 @@ static int underflow(register N_INFO *info, register N_KEYDEF *keyinfo,
t_length=(int) _nisam_get_pack_key_length(keyinfo,nod_flag,(uchar*) 0,
(uchar*) 0, leaf_key,&s_temp);
s_temp.n_length= *half_pos; /* For _nisam_store_key */
length=(buff+getint(buff))-half_pos;
length=(uint) ((buff+getint(buff))-half_pos);
bmove((byte*) buff+p_length+t_length,(byte*) half_pos,(size_t) length);
_nisam_store_key(keyinfo,buff+p_length,&s_temp);
putint(buff,length+t_length+p_length,nod_flag);
......@@ -566,7 +566,7 @@ static uint remove_key(N_KEYDEF *keyinfo, uint nod_flag,
else
{ /* Let keypos point at next key */
VOID((*keyinfo->get_key)(keyinfo,nod_flag,&keypos,lastkey));
s_length=(keypos-start);
s_length=(uint) (keypos-start);
if (keyinfo->base.flag & HA_PACK_KEY)
{
diff_flag= (keyinfo->seg[0].base.flag & HA_SPACE_PACK);
......@@ -576,12 +576,12 @@ static uint remove_key(N_KEYDEF *keyinfo, uint nod_flag,
if ((r_length= *keypos++ & 127) == 0)
{ /* Same key after */
if (first & 128)
start++; /* Skipp ref length */
start++; /* Skip ref length */
if (diff_flag)
start+= *start+1; /* Skipp key length */
start+= *start+1; /* Skip key length */
else
start+=keyinfo->seg[0].base.length- (first & 127);
s_length=(keypos-start); /* Remove pointers and next-key-flag */
s_length=(uint)(keypos-start); /* Remove pntrs and next-key-flag */
}
else if (! (first & 128))
{ /* Deleted key was not compressed */
......@@ -589,12 +589,12 @@ static uint remove_key(N_KEYDEF *keyinfo, uint nod_flag,
{
*start= (uchar) (r_length+ *keypos);
start+=r_length+1; /* Let ref-part remain */
s_length=(keypos-start)+1; /* Skipp everything between */
s_length=(uint) (keypos-start)+1; /* Skip everything between */
}
else
{
start+=r_length+1; /* Let ref-part remain */
s_length=(keypos-start); /* Skipp everything between */
s_length=(uint) (keypos-start); /* Skip everything between */
}
}
else if ((first & 127) < r_length)
......@@ -604,7 +604,7 @@ static uint remove_key(N_KEYDEF *keyinfo, uint nod_flag,
if (diff_flag)
*start++= (uchar) (*keypos++ + r_length);
start+= r_length;
s_length=(keypos-start); /* Skipp everything between */
s_length=(uint) (keypos-start); /* Skip everything between */
}
}
}
......@@ -613,3 +613,5 @@ static uint remove_key(N_KEYDEF *keyinfo, uint nod_flag,
(uint) (page_end-start-s_length));
DBUG_RETURN((uint) s_length);
} /* remove_key */
......@@ -247,7 +247,7 @@ int _nisam_insert(register N_INFO *info, register N_KEYDEF *keyinfo,
s_temp.n_ref_length,s_temp.n_length,s_temp.key));
}
#endif
key_offset = (endpos-key_pos);
key_offset = (uint)(endpos-key_pos);
if((int) t_length < 0)
key_offset += (int) t_length;
if (key_offset < 0)
......
......@@ -53,6 +53,7 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \
mf_pack.lo my_messnc.lo mf_dirname.lo mf_fn_ext.lo\
mf_wcomp.lo typelib.lo safemalloc.lo my_alloc.lo \
mf_format.lo mf_path.lo mf_unixpath.lo my_fopen.lo \
my_fstream.lo \
mf_loadpath.lo my_pthread.lo my_thr_init.lo \
thr_mutex.lo mulalloc.lo string.lo default.lo \
my_compress.lo array.lo my_once.lo list.lo my_net.lo \
......
......@@ -1269,7 +1269,8 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
host=LOCAL_HOST;
sprintf(host_info=buff,ER(CR_TCP_CONNECTION),host);
DBUG_PRINT("info",("Server name: '%s'. TCP sock: %d", host,port));
if ((sock = socket(AF_INET,SOCK_STREAM,0)) == SOCKET_ERROR)
/* _WIN64 ; Assume that the (int) range is enough for socket() */
if ((sock = (int) socket(AF_INET,SOCK_STREAM,0)) == SOCKET_ERROR)
{
net->last_errno=CR_IPSOCK_ERROR;
sprintf(net->last_error,ER(net->last_errno),ERRNO);
......
......@@ -326,7 +326,7 @@ net_real_write(NET *net,const char *packet,ulong len)
pos=(char*) packet; end=pos+len;
while (pos != end)
{
if ((int) (length=vio_write(net->vio,pos,(size_t) (end-pos))) <= 0)
if ((int) (length=vio_write(net->vio,pos,(int) (end-pos))) <= 0)
{
my_bool interrupted = vio_should_retry(net->vio);
#if (!defined(__WIN__) && !defined(__EMX__))
......
......@@ -527,7 +527,7 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
(uchar*) 0, (uchar *) 0,
leaf_key, &s_temp);
/* t_length will always be > 0 for a new page !*/
length=(buff+mi_getint(buff))-half_pos;
length=(uint) ((buff+mi_getint(buff))-half_pos);
bmove((byte*) buff+p_length+t_length,(byte*) half_pos,(size_t) length);
(*keyinfo->store_key)(keyinfo,buff+p_length,&s_temp);
mi_putint(buff,length+t_length+p_length,nod_flag);
......@@ -683,7 +683,7 @@ static uint remove_key(MI_KEYDEF *keyinfo, uint nod_flag,
DBUG_RETURN(0); /* Error */
if (next_block && nod_flag)
*next_block= _mi_kpos(nod_flag,keypos);
s_length=(keypos-start);
s_length=(int) (keypos-start);
if (keypos != page_end)
{
if (keyinfo->flag & HA_BINARY_PACK_KEY)
......@@ -699,7 +699,7 @@ static uint remove_key(MI_KEYDEF *keyinfo, uint nod_flag,
(next_length-prev_length));
keypos-=(next_length-prev_length)+prev_pack_length;
store_key_length(keypos,prev_length);
s_length=(keypos-start);
s_length=(int) (keypos-start);
}
}
else
......@@ -746,7 +746,7 @@ static uint remove_key(MI_KEYDEF *keyinfo, uint nod_flag,
rest_length+=tmp;
pack_length= prev_length ? get_pack_length(rest_length): 0;
keypos-=tmp+pack_length+prev_pack_length;
s_length=(keypos-start);
s_length=(int) (keypos-start);
if (prev_length) /* Pack against prev key */
{
*keypos++= start[0];
......
......@@ -1588,7 +1588,7 @@ _mi_calc_var_pack_key_length(MI_KEYDEF *keyinfo,uint nod_flag,uchar *next_key,
key++; org_key++;
}
}
if ((new_ref_length= (key - start)))
if ((new_ref_length= (uint) (key - start)))
new_ref_length+=pack_marker;
}
......
......@@ -799,7 +799,7 @@ String *Field_tiny::val_str(String *val_buffer,
if (unsigned_flag)
length= (uint) (int10_to_str((long) *((uchar*) ptr),to,10)-to);
else
length=(int10_to_str((long) *((signed char*) ptr),to,-10)-to);
length= (uint) (int10_to_str((long) *((signed char*) ptr),to,-10)-to);
val_buffer->length(length);
if (zerofill)
prepend_zeros(val_buffer);
......
......@@ -33,7 +33,7 @@ class Field {
Field(const Item &); /* Prevent use of theese */
void operator=(Field &);
public:
static void *operator new(size_t size) {return (void*) sql_alloc(size); }
static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
static void operator delete(void *ptr_arg, size_t size) {} /*lint -e715 */
enum utype { NONE,DATE,SHIELD,NOEMPTY,CASEUP,PNR,BGNR,PGNR,YES,NO,REL,
......
......@@ -26,7 +26,7 @@ class Item {
Item(const Item &); /* Prevent use of theese */
void operator=(Item &);
public:
static void *operator new(size_t size) {return (void*) sql_alloc(size); }
static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
static void operator delete(void *ptr,size_t size) {} /*lint -e715 */
enum Type {FIELD_ITEM,FUNC_ITEM,SUM_FUNC_ITEM,STRING_ITEM,
......@@ -167,7 +167,7 @@ class Item_int :public Item
Item_int(const char *str_arg) :
value(str_arg[0] == '-' ? strtoll(str_arg,(char**) 0,10) :
(longlong) strtoull(str_arg,(char**) 0,10))
{ max_length=strlen(str_arg); name=(char*) str_arg;}
{ max_length= (uint) strlen(str_arg); name=(char*) str_arg;}
enum Type type() const { return INT_ITEM; }
virtual enum Item_result result_type () const { return INT_RESULT; }
longlong val_int() { return value; }
......
......@@ -418,7 +418,7 @@ String *Item_func_replace::val_str(String *str)
i=(char*) ptr+1; j=(char*) search+1;
while (j != search_end)
if (*i++ != *j++) goto skipp;
offset=ptr-res->ptr();
offset= (int) (ptr-res->ptr());
if (res->length()-from_length + to_length > max_allowed_packet)
goto null;
if (!alloced)
......@@ -740,12 +740,12 @@ String *Item_func_substr_index::val_str(String *str)
if (c) return res; /* Not found, return original string */
if (count>0) /* return left part */
{
tmp_value.set(*res,0,ptr-res->ptr());
tmp_value.set(*res,0,(ulong) (ptr-res->ptr()));
}
else /* return right part */
{
ptr+=delimeter_length;
tmp_value.set(*res,ptr-res->ptr(),strend-ptr);
tmp_value.set(*res,(ulong) (ptr-res->ptr()), (ulong) (strend-ptr));
}
}
}
......
......@@ -262,7 +262,7 @@ void mysql_lock_remove(THD *thd, MYSQL_LOCK *locked,TABLE *table)
if (locked->locks[i]->type != TL_UNLOCK)
*prev++ = locked->locks[i];
}
locked->lock_count=(prev - locked->locks);
locked->lock_count=(uint) (prev - locked->locks);
}
}
......
......@@ -51,7 +51,7 @@ static int find_uniq_filename(char *name)
length=dirname_part(buff,name);
char *start=name+length,*end=strend(start);
*end='.';
length=end-start+1;
length= (uint) (end-start+1);
if (!(dir_info = my_dir(buff,MYF(MY_DONT_SORT))))
{ // This shouldn't happen
......
......@@ -99,7 +99,7 @@ class Query_log_event: public Log_event
{
time_t end_time;
time(&end_time);
exec_time = end_time - thd->start_time;
exec_time = (ulong) (end_time - thd->start_time);
valid_exec_time = 1;
db_len = (db) ? (uint) strlen(db) : 0;
}
......@@ -187,7 +187,7 @@ class Load_log_event: public Log_event
{
time_t end_time;
time(&end_time);
exec_time = end_time - thd->start_time;
exec_time = (ulong) (end_time - thd->start_time);
valid_exec_time = 1;
db_len = (db) ? (uint) strlen(db) : 0;
table_name_len = (table_name) ? (uint) strlen(table_name) : 0;
......
......@@ -326,7 +326,7 @@ net_real_write(NET *net,const char *packet,ulong len)
pos=(char*) packet; end=pos+len;
while (pos != end)
{
if ((int) (length=vio_write(net->vio,pos,(size_t) (end-pos))) <= 0)
if ((int) (length=vio_write(net->vio,pos,(int) (end-pos))) <= 0)
{
my_bool interrupted = vio_should_retry(net->vio);
#if (!defined(__WIN__) && !defined(__EMX__))
......
......@@ -25,7 +25,7 @@
class Sql_alloc
{
public:
static void *operator new(size_t size) {return (void*) sql_alloc(size); }
static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
static void operator delete(void *ptr, size_t size) {} /*lint -e715 */
inline Sql_alloc() {};
inline ~Sql_alloc() {};
......
......@@ -323,7 +323,7 @@ pthread_handler_decl(handle_one_connection,arg)
{
THD *thd=(THD*) arg;
uint launch_time =
(thd->thr_create_time = time(NULL)) - thd->connect_time;
(uint) ((thd->thr_create_time = time(NULL)) - thd->connect_time);
if (launch_time >= slow_launch_time)
statistic_increment(slow_launch_threads,&LOCK_status );
......
......@@ -32,8 +32,7 @@ static TABLE_LIST *rename_tables(THD *thd, TABLE_LIST *table_list,
bool mysql_rename_tables(THD *thd, TABLE_LIST *table_list)
{
bool error=1,got_all_locks=1;
db_type table_type;
TABLE_LIST *lock_table,*ren_table=0,*new_table;
TABLE_LIST *lock_table,*ren_table=0;
DBUG_ENTER("mysql_rename_tables");
/* Avoid problems with a rename on a table that we have locked or
......
......@@ -2606,7 +2606,7 @@ static void clear_tables(JOIN *join)
class COND_CMP :public ilink {
public:
static void *operator new(size_t size) {return (void*) sql_alloc(size); }
static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
static void operator delete(void *ptr __attribute__((unused)),
size_t size __attribute__((unused))) {} /*lint -e715 */
......@@ -3229,7 +3229,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
*(reg_field++) =new_field;
}
}
field_count=reg_field - table->field;
field_count= (uint) (reg_field - table->field);
/* If result table is small; use a heap */
if (blob_count || using_unique_constraint ||
......
......@@ -818,11 +818,12 @@ store_create_info(THD *thd, TABLE *table, String* packet)
class thread_info :public ilink {
public:
static void *operator new(size_t size) {return (void*) sql_alloc(size); }
static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
static void operator delete(void *ptr __attribute__((unused)),
size_t size __attribute__((unused))) {} /*lint -e715 */
ulong thread_id,start_time;
ulong thread_id;
time_t start_time;
uint command;
const char *user,*host,*db,*proc_info,*state_info;
char *query;
......
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program file 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 program is distributed in the hope that it will be useful,
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 General Public License for more details.
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 General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
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 */
/* This file is originally from the mysql distribution. Coded by monty */
......@@ -126,7 +127,7 @@ bool String::set(double num,uint decimals)
if (decimals >= NOT_FIXED_DEC)
{
sprintf(buff,"%.14g",num); // Enough for a DATETIME
return copy(buff,(uint) strlen(buff));
return copy(buff, (uint32) strlen(buff));
}
#ifdef HAVE_FCONVERT
int decpt,sign;
......@@ -141,7 +142,7 @@ bool String::set(double num,uint decimals)
buff[0]='-';
pos=buff;
}
return copy(pos,(uint) strlen(pos));
return copy(pos,(uint32) strlen(pos));
}
if (alloc((uint32) ((uint32) decpt+3+decimals)))
return TRUE;
......@@ -191,7 +192,7 @@ bool String::set(double num,uint decimals)
#else
sprintf(buff,"%.*f",(int) decimals,num);
#endif
return copy(buff,(uint) strlen(buff));
return copy(buff,(uint32) strlen(buff));
#endif
}
......@@ -260,7 +261,7 @@ bool String::append(const String &s)
bool String::append(const char *s,uint32 arg_length)
{
if (!arg_length) // Default argument
arg_length=(uint) strlen(s);
arg_length= (uint32) strlen(s);
if (realloc(str_length+arg_length))
return TRUE;
memcpy(Ptr+str_length,s,arg_length);
......@@ -318,7 +319,7 @@ int String::charpos(int i,uint32 offset)
if ( INT_MAX32-i <= (int) (mbstr-Ptr-offset))
return INT_MAX32;
else
return (mbstr-Ptr-offset)+i;
return (int) ((mbstr-Ptr-offset)+i);
}
else
#endif
......@@ -330,7 +331,7 @@ int String::strstr(const String &s,uint32 offset)
if (s.length()+offset <= str_length)
{
if (!s.length())
return offset; // Empty string is always found
return ((int) offset); // Empty string is always found
register const char *str = Ptr+offset;
register const char *search=s.ptr();
......
/* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU 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 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 program is distributed in the hope that it will be useful,
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 General Public License for more details.
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 General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
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 */
/* This file is originally from the mysql distribution. Coded by monty */
......@@ -44,7 +45,7 @@ class String
{ Ptr=str.Ptr ; str_length=str.str_length ;
Alloced_length=str.Alloced_length; alloced=0; }
static void *operator new(size_t size) { return (void*) sql_alloc(size); }
static void *operator new(size_t size) { return (void*) sql_alloc((uint) size); }
static void operator delete(void *ptr_arg,size_t size) /*lint -e715 */
{ sql_element_free(ptr_arg); }
~String() { free(); }
......
......@@ -113,7 +113,7 @@ long my_gmt_sec(TIME *t)
if ((my_time_zone >=0 ? my_time_zone: -my_time_zone) > 3600L*12)
my_time_zone=0; /* Wrong date */
pthread_mutex_unlock(&LOCK_timezone);
return tmp;
return (long) tmp;
} /* my_gmt_sec */
......
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