mirror of
https://github.com/MariaDB/server.git
synced 2026-05-15 11:27:39 +02:00
Merged Performance Version 0.2.1 with latest 5.1 tree (last push 11 feb 14.01.13 2009)
This commit is contained in:
commit
6db314c628
1739 changed files with 40593 additions and 24981 deletions
|
|
@ -212,6 +212,8 @@ copy_uca_collation(CHARSET_INFO *to, CHARSET_INFO *from)
|
|||
to->max_sort_char= from->max_sort_char;
|
||||
to->mbminlen= from->mbminlen;
|
||||
to->mbmaxlen= from->mbmaxlen;
|
||||
to->state|= MY_CS_AVAILABLE | MY_CS_LOADED |
|
||||
MY_CS_STRNXFRM | MY_CS_UNICODE;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -246,14 +248,12 @@ static int add_collation(CHARSET_INFO *cs)
|
|||
{
|
||||
#if defined(HAVE_CHARSET_ucs2) && defined(HAVE_UCA_COLLATIONS)
|
||||
copy_uca_collation(newcs, &my_charset_ucs2_unicode_ci);
|
||||
newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED;
|
||||
#endif
|
||||
}
|
||||
else if (!strcmp(cs->csname, "utf8"))
|
||||
{
|
||||
#if defined (HAVE_CHARSET_utf8) && defined(HAVE_UCA_COLLATIONS)
|
||||
copy_uca_collation(newcs, &my_charset_utf8_unicode_ci);
|
||||
newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2000 MySQL AB
|
||||
/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc.
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@
|
|||
#include <stdarg.h>
|
||||
#include <m_ctype.h>
|
||||
|
||||
/* Max length of a error message. Should be kept in sync with MYSQL_ERRMSG_SIZE. */
|
||||
#define ERRMSGSIZE (512)
|
||||
|
||||
|
||||
/* Define some external variables for error handling */
|
||||
|
||||
/*
|
||||
|
|
@ -30,8 +34,6 @@
|
|||
my_printf_error(ER_CODE, format, MYF(N), ...)
|
||||
*/
|
||||
|
||||
char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
||||
|
||||
/*
|
||||
Message texts are registered into a linked list of 'my_err_head' structs.
|
||||
Each struct contains (1.) an array of pointers to C character strings with
|
||||
|
|
@ -75,7 +77,7 @@ int my_error(int nr, myf MyFlags, ...)
|
|||
const char *format;
|
||||
struct my_err_head *meh_p;
|
||||
va_list args;
|
||||
char ebuff[ERRMSGSIZE + 20];
|
||||
char ebuff[ERRMSGSIZE];
|
||||
DBUG_ENTER("my_error");
|
||||
DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d", nr, MyFlags, errno));
|
||||
|
||||
|
|
@ -112,7 +114,7 @@ int my_error(int nr, myf MyFlags, ...)
|
|||
int my_printf_error(uint error, const char *format, myf MyFlags, ...)
|
||||
{
|
||||
va_list args;
|
||||
char ebuff[ERRMSGSIZE+20];
|
||||
char ebuff[ERRMSGSIZE];
|
||||
DBUG_ENTER("my_printf_error");
|
||||
DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d Format: %s",
|
||||
error, MyFlags, errno, format));
|
||||
|
|
|
|||
|
|
@ -976,24 +976,26 @@ static void init_one_value(const struct my_option *option, uchar* *variable,
|
|||
*((my_bool*) variable)= (my_bool) value;
|
||||
break;
|
||||
case GET_INT:
|
||||
*((int*) variable)= (int) value;
|
||||
*((int*) variable)= (int) getopt_ll_limit_value((int) value, option, NULL);
|
||||
break;
|
||||
case GET_UINT:
|
||||
case GET_ENUM:
|
||||
*((uint*) variable)= (uint) value;
|
||||
break;
|
||||
case GET_UINT:
|
||||
*((uint*) variable)= (uint) getopt_ull_limit_value((uint) value, option, NULL);
|
||||
break;
|
||||
case GET_LONG:
|
||||
*((long*) variable)= (long) value;
|
||||
*((long*) variable)= (long) getopt_ll_limit_value((long) value, option, NULL);
|
||||
break;
|
||||
case GET_ULONG:
|
||||
*((ulong*) variable)= (ulong) value;
|
||||
*((ulong*) variable)= (ulong) getopt_ull_limit_value((ulong) value, option, NULL);
|
||||
break;
|
||||
case GET_LL:
|
||||
*((longlong*) variable)= (longlong) value;
|
||||
*((longlong*) variable)= (longlong) getopt_ll_limit_value((longlong) value, option, NULL);
|
||||
break;
|
||||
case GET_ULL:
|
||||
case GET_SET:
|
||||
*((ulonglong*) variable)= (ulonglong) value;
|
||||
*((ulonglong*) variable)= (ulonglong) getopt_ull_limit_value((ulonglong) value, option, NULL);
|
||||
break;
|
||||
case GET_DOUBLE:
|
||||
*((double*) variable)= (double) value;
|
||||
|
|
|
|||
153
mysys/my_init.c
153
mysys/my_init.c
|
|
@ -30,7 +30,6 @@
|
|||
#endif
|
||||
my_bool have_tcpip=0;
|
||||
static void my_win_init(void);
|
||||
static my_bool win32_have_tcpip(void);
|
||||
static my_bool win32_init_tcp_ip();
|
||||
#else
|
||||
#define my_win_init()
|
||||
|
|
@ -78,8 +77,12 @@ my_bool my_init(void)
|
|||
my_umask= 0660; /* Default umask for new files */
|
||||
my_umask_dir= 0700; /* Default umask for new directories */
|
||||
init_glob_errs();
|
||||
#if defined(THREAD) && defined(SAFE_MUTEX)
|
||||
#if defined(THREAD)
|
||||
if (my_thread_global_init())
|
||||
return 1;
|
||||
# if defined(SAFE_MUTEX)
|
||||
safe_mutex_global_init(); /* Must be called early */
|
||||
# endif
|
||||
#endif
|
||||
#if defined(THREAD) && defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX)
|
||||
fastmutex_global_init(); /* Must be called early */
|
||||
|
|
@ -89,8 +92,6 @@ my_bool my_init(void)
|
|||
#if defined(HAVE_PTHREAD_INIT)
|
||||
pthread_init(); /* Must be called before DBUG_ENTER */
|
||||
#endif
|
||||
if (my_thread_global_init())
|
||||
return 1;
|
||||
#if !defined( __WIN__) && !defined(__NETWARE__)
|
||||
sigfillset(&my_signals); /* signals blocked by mf_brkhant */
|
||||
#endif
|
||||
|
|
@ -152,9 +153,11 @@ void my_end(int infoflag)
|
|||
{ /* Test if some file is left open */
|
||||
if (my_file_opened | my_stream_opened)
|
||||
{
|
||||
sprintf(errbuff[0],EE(EE_OPEN_WARNING),my_file_opened,my_stream_opened);
|
||||
(void) my_message_no_curses(EE_OPEN_WARNING,errbuff[0],ME_BELL);
|
||||
DBUG_PRINT("error",("%s",errbuff[0]));
|
||||
char ebuff[512];
|
||||
my_snprintf(ebuff, sizeof(ebuff), EE(EE_OPEN_WARNING),
|
||||
my_file_opened, my_stream_opened);
|
||||
my_message_no_curses(EE_OPEN_WARNING, ebuff, ME_BELL);
|
||||
DBUG_PRINT("error", ("%s", ebuff));
|
||||
my_print_open_files();
|
||||
}
|
||||
}
|
||||
|
|
@ -235,29 +238,6 @@ Voluntary context switches %ld, Involuntary context switches %ld\n",
|
|||
|
||||
#ifdef __WIN__
|
||||
|
||||
/*
|
||||
This code is specially for running MySQL, but it should work in
|
||||
other cases too.
|
||||
|
||||
Inizializzazione delle variabili d'ambiente per Win a 32 bit.
|
||||
|
||||
Vengono inserite nelle variabili d'ambiente (utilizzando cosi'
|
||||
le funzioni getenv e putenv) i valori presenti nelle chiavi
|
||||
del file di registro:
|
||||
|
||||
HKEY_LOCAL_MACHINE\software\MySQL
|
||||
|
||||
Se la kiave non esiste nonn inserisce nessun valore
|
||||
*/
|
||||
|
||||
/* Crea la stringa d'ambiente */
|
||||
|
||||
void setEnvString(char *ret, const char *name, const char *value)
|
||||
{
|
||||
DBUG_ENTER("setEnvString");
|
||||
strxmov(ret, name,"=",value,NullS);
|
||||
DBUG_VOID_RETURN ;
|
||||
}
|
||||
|
||||
/*
|
||||
my_parameter_handler
|
||||
|
|
@ -307,17 +287,6 @@ int handle_rtc_failure(int err_type, const char *file, int line,
|
|||
|
||||
static void my_win_init(void)
|
||||
{
|
||||
HKEY hSoftMysql ;
|
||||
DWORD dimName = 256 ;
|
||||
DWORD dimData = 1024 ;
|
||||
DWORD dimNameValueBuffer = 256 ;
|
||||
DWORD dimDataValueBuffer = 1024 ;
|
||||
DWORD indexValue = 0 ;
|
||||
long retCodeEnumValue ;
|
||||
char NameValueBuffer[256] ;
|
||||
char DataValueBuffer[1024] ;
|
||||
char EnvString[1271] ;
|
||||
const char *targetKey = "Software\\MySQL" ;
|
||||
DBUG_ENTER("my_win_init");
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
|
|
@ -343,6 +312,30 @@ static void my_win_init(void)
|
|||
|
||||
_tzset();
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* The following is used by time functions */
|
||||
#define OFFSET_TO_EPOC ((__int64) 134774 * 24 * 60 * 60 * 1000 * 1000 * 10)
|
||||
#define MS 10000000
|
||||
|
|
@ -367,43 +360,57 @@ static void my_win_init(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* apre la chiave HKEY_LOCAL_MACHINES\software\MySQL */
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)targetKey,0,
|
||||
KEY_READ,&hSoftMysql) != ERROR_SUCCESS)
|
||||
DBUG_VOID_RETURN;
|
||||
|
||||
/*
|
||||
** Ne legge i valori e li inserisce nell'ambiente
|
||||
** suppone che tutti i valori letti siano di tipo stringa + '\0'
|
||||
** Legge il valore con indice 0 e lo scarta
|
||||
*/
|
||||
retCodeEnumValue = RegEnumValue(hSoftMysql, indexValue++,
|
||||
(LPTSTR)NameValueBuffer, &dimNameValueBuffer,
|
||||
NULL, NULL, (LPBYTE)DataValueBuffer,
|
||||
&dimDataValueBuffer) ;
|
||||
|
||||
while (retCodeEnumValue != ERROR_NO_MORE_ITEMS)
|
||||
{
|
||||
char *my_env;
|
||||
/* Crea la stringa d'ambiente */
|
||||
setEnvString(EnvString, NameValueBuffer, DataValueBuffer) ;
|
||||
/*
|
||||
Open HKEY_LOCAL_MACHINE\SOFTWARE\MySQL and set any strings found
|
||||
there as environment variables
|
||||
*/
|
||||
HKEY key_handle;
|
||||
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, (LPCTSTR)"SOFTWARE\\MySQL",
|
||||
0, KEY_READ, &key_handle) == ERROR_SUCCESS)
|
||||
{
|
||||
LONG ret;
|
||||
DWORD index= 0;
|
||||
DWORD type;
|
||||
char key_name[256], key_data[1024];
|
||||
DWORD key_name_len= sizeof(key_name) - 1;
|
||||
DWORD key_data_len= sizeof(key_data) - 1;
|
||||
|
||||
/* Inserisce i dati come variabili d'ambiente */
|
||||
my_env=strdup(EnvString); /* variable for putenv must be allocated ! */
|
||||
putenv(my_env) ;
|
||||
while ((ret= RegEnumValue(key_handle, index++,
|
||||
key_name, &key_name_len,
|
||||
NULL, &type, (LPBYTE)&key_data,
|
||||
&key_data_len)) != ERROR_NO_MORE_ITEMS)
|
||||
{
|
||||
char env_string[sizeof(key_name) + sizeof(key_data) + 2];
|
||||
|
||||
dimNameValueBuffer = dimName ;
|
||||
dimDataValueBuffer = dimData ;
|
||||
if (ret == ERROR_MORE_DATA)
|
||||
{
|
||||
/* Registry value larger than 'key_data', skip it */
|
||||
DBUG_PRINT("error", ("Skipped registry value that was too large"));
|
||||
}
|
||||
else if (ret == ERROR_SUCCESS)
|
||||
{
|
||||
if (type == REG_SZ)
|
||||
{
|
||||
strxmov(env_string, key_name, "=", key_data, NullS);
|
||||
|
||||
retCodeEnumValue = RegEnumValue(hSoftMysql, indexValue++,
|
||||
NameValueBuffer, &dimNameValueBuffer,
|
||||
NULL, NULL, (LPBYTE)DataValueBuffer,
|
||||
&dimDataValueBuffer) ;
|
||||
/* variable for putenv must be allocated ! */
|
||||
putenv(strdup(env_string)) ;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Unhandled error, break out of loop */
|
||||
break;
|
||||
}
|
||||
|
||||
key_name_len= sizeof(key_name) - 1;
|
||||
key_data_len= sizeof(key_data) - 1;
|
||||
}
|
||||
|
||||
RegCloseKey(key_handle) ;
|
||||
}
|
||||
}
|
||||
|
||||
/* chiude la chiave */
|
||||
RegCloseKey(hSoftMysql) ;
|
||||
|
||||
DBUG_VOID_RETURN ;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -147,7 +147,7 @@ void *_mymalloc(size_t size, const char *filename, uint lineno, myf MyFlags)
|
|||
error_handler_hook=fatal_error_handler_hook;
|
||||
if (MyFlags & (MY_FAE+MY_WME))
|
||||
{
|
||||
char buff[SC_MAXWIDTH];
|
||||
char buff[256];
|
||||
my_errno=errno;
|
||||
sprintf(buff,"Out of memory at line %d, '%s'", lineno, filename);
|
||||
my_message(EE_OUTOFMEMORY, buff, MYF(ME_BELL+ME_WAITTANG+ME_NOREFRESH));
|
||||
|
|
|
|||
|
|
@ -1359,7 +1359,8 @@ void thr_downgrade_write_lock(THR_LOCK_DATA *in_data,
|
|||
|
||||
/* Upgrade a WRITE_DELAY lock to a WRITE_LOCK */
|
||||
|
||||
my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data)
|
||||
my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data,
|
||||
enum thr_lock_type new_lock_type)
|
||||
{
|
||||
THR_LOCK *lock=data->lock;
|
||||
DBUG_ENTER("thr_upgrade_write_delay_lock");
|
||||
|
|
@ -1372,7 +1373,7 @@ my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data)
|
|||
}
|
||||
check_locks(lock,"before upgrading lock",0);
|
||||
/* TODO: Upgrade to TL_WRITE_CONCURRENT_INSERT in some cases */
|
||||
data->type=TL_WRITE; /* Upgrade lock */
|
||||
data->type= new_lock_type; /* Upgrade lock */
|
||||
|
||||
/* Check if someone has given us the lock */
|
||||
if (!data->cond)
|
||||
|
|
@ -1411,6 +1412,7 @@ my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data)
|
|||
my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data)
|
||||
{
|
||||
THR_LOCK *lock=data->lock;
|
||||
enum thr_lock_type write_lock_type;
|
||||
DBUG_ENTER("thr_reschedule_write_lock");
|
||||
|
||||
pthread_mutex_lock(&lock->mutex);
|
||||
|
|
@ -1420,6 +1422,7 @@ my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data)
|
|||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
write_lock_type= data->type;
|
||||
data->type=TL_WRITE_DELAYED;
|
||||
if (lock->update_status)
|
||||
(*lock->update_status)(data->status_param);
|
||||
|
|
@ -1438,7 +1441,7 @@ my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data)
|
|||
free_all_read_locks(lock,0);
|
||||
|
||||
pthread_mutex_unlock(&lock->mutex);
|
||||
DBUG_RETURN(thr_upgrade_write_delay_lock(data));
|
||||
DBUG_RETURN(thr_upgrade_write_delay_lock(data, write_lock_type));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue