Commit 5c377fc0 authored by unknown's avatar unknown

SCRAM Remove spaces from most changed files.

This alters not only my code so it looks like I'm not only one adding the spaces.



client/mysqladmin.c:
  cut spaces
include/mysql_com.h:
  cut soaces
sql/item_strfunc.cc:
  cut spaces
sql/mini_client.cc:
  cut spaces
sql/mysql_priv.h:
  cut spaces
sql/mysqld.cc:
  cut spaces
sql/password.c:
  cut spaces
sql/sql_parse.cc:
  cut spaces
sql/sql_yacc.yy:
  cut spaces
parent 577cb323
...@@ -84,15 +84,15 @@ static void store_values(MYSQL_RES *result); ...@@ -84,15 +84,15 @@ static void store_values(MYSQL_RES *result);
The order of commands must be the same as command_names, The order of commands must be the same as command_names,
except ADMIN_ERROR except ADMIN_ERROR
*/ */
enum commands { enum commands {
ADMIN_ERROR, ADMIN_ERROR,
ADMIN_CREATE, ADMIN_DROP, ADMIN_SHUTDOWN, ADMIN_CREATE, ADMIN_DROP, ADMIN_SHUTDOWN,
ADMIN_RELOAD, ADMIN_REFRESH, ADMIN_VER, ADMIN_RELOAD, ADMIN_REFRESH, ADMIN_VER,
ADMIN_PROCESSLIST, ADMIN_STATUS, ADMIN_KILL, ADMIN_PROCESSLIST, ADMIN_STATUS, ADMIN_KILL,
ADMIN_DEBUG, ADMIN_VARIABLES, ADMIN_FLUSH_LOGS, ADMIN_DEBUG, ADMIN_VARIABLES, ADMIN_FLUSH_LOGS,
ADMIN_FLUSH_HOSTS, ADMIN_FLUSH_TABLES, ADMIN_PASSWORD, ADMIN_FLUSH_HOSTS, ADMIN_FLUSH_TABLES, ADMIN_PASSWORD,
ADMIN_PING, ADMIN_EXTENDED_STATUS, ADMIN_FLUSH_STATUS, ADMIN_PING, ADMIN_EXTENDED_STATUS, ADMIN_FLUSH_STATUS,
ADMIN_FLUSH_PRIVILEGES, ADMIN_START_SLAVE, ADMIN_STOP_SLAVE, ADMIN_FLUSH_PRIVILEGES, ADMIN_START_SLAVE, ADMIN_STOP_SLAVE,
ADMIN_FLUSH_THREADS, ADMIN_OLD_PASSWORD ADMIN_FLUSH_THREADS, ADMIN_OLD_PASSWORD
}; };
static const char *command_names[]= { static const char *command_names[]= {
...@@ -102,8 +102,8 @@ static const char *command_names[]= { ...@@ -102,8 +102,8 @@ static const char *command_names[]= {
"debug", "variables", "flush-logs", "debug", "variables", "flush-logs",
"flush-hosts", "flush-tables", "password", "flush-hosts", "flush-tables", "password",
"ping", "extended-status", "flush-status", "ping", "extended-status", "flush-status",
"flush-privileges", "start-slave", "stop-slave", "flush-privileges", "start-slave", "stop-slave",
"flush-threads","old-password", "flush-threads","old-password",
NullS NullS
}; };
...@@ -152,7 +152,7 @@ static struct my_option my_long_options[] = ...@@ -152,7 +152,7 @@ static struct my_option my_long_options[] =
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#ifdef HAVE_SMEM #ifdef HAVE_SMEM
{"shared_memory_base_name", OPT_SHARED_MEMORY_BASE_NAME, {"shared_memory_base_name", OPT_SHARED_MEMORY_BASE_NAME,
"Base name of shared memory", (gptr*) &shared_memory_base_name, (gptr*) &shared_memory_base_name, "Base name of shared memory", (gptr*) &shared_memory_base_name, (gptr*) &shared_memory_base_name,
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif #endif
{"silent", 's', "Silently exit if one can't connect to server", {"silent", 's', "Silently exit if one can't connect to server",
...@@ -172,7 +172,7 @@ static struct my_option my_long_options[] = ...@@ -172,7 +172,7 @@ static struct my_option my_long_options[] =
(gptr*) &opt_verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, (gptr*) &opt_verbose, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"version", 'V', "Output version information and exit", 0, 0, 0, GET_NO_ARG, {"version", 'V', "Output version information and exit", 0, 0, 0, GET_NO_ARG,
NO_ARG, 0, 0, 0, 0, 0, 0}, NO_ARG, 0, 0, 0, 0, 0, 0},
{"vertical", 'E', {"vertical", 'E',
"Print output vertically. Is similar to --relative, but prints output vertically.", "Print output vertically. Is similar to --relative, but prints output vertically.",
(gptr*) &opt_vertical, (gptr*) &opt_vertical, 0, GET_BOOL, NO_ARG, 0, 0, 0, (gptr*) &opt_vertical, (gptr*) &opt_vertical, 0, GET_BOOL, NO_ARG, 0, 0, 0,
0, 0, 0}, 0, 0, 0},
...@@ -311,7 +311,7 @@ int main(int argc,char *argv[]) ...@@ -311,7 +311,7 @@ int main(int argc,char *argv[])
#ifdef HAVE_SMEM #ifdef HAVE_SMEM
if (shared_memory_base_name) if (shared_memory_base_name)
mysql_options(&mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name); mysql_options(&mysql,MYSQL_SHARED_MEMORY_BASE_NAME,shared_memory_base_name);
#endif #endif
if (sql_connect(&mysql, option_wait)) if (sql_connect(&mysql, option_wait))
error = 1; error = 1;
else else
...@@ -417,7 +417,7 @@ static my_bool sql_connect(MYSQL *mysql, uint wait) ...@@ -417,7 +417,7 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
wait--; /* One less retry */ wait--; /* One less retry */
if ((mysql_errno(mysql) != CR_CONN_HOST_ERROR) && if ((mysql_errno(mysql) != CR_CONN_HOST_ERROR) &&
(mysql_errno(mysql) != CR_CONNECTION_ERROR)) (mysql_errno(mysql) != CR_CONNECTION_ERROR))
{ {
fprintf(stderr,"Got error: %s\n", mysql_error(mysql)); fprintf(stderr,"Got error: %s\n", mysql_error(mysql));
if (!option_force) if (!option_force)
return 1; return 1;
...@@ -432,7 +432,7 @@ static my_bool sql_connect(MYSQL *mysql, uint wait) ...@@ -432,7 +432,7 @@ static my_bool sql_connect(MYSQL *mysql, uint wait)
} }
else else
{ {
putc('.',stderr); putc('.',stderr);
(void) fflush(stderr); (void) fflush(stderr);
} }
} }
...@@ -451,7 +451,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv) ...@@ -451,7 +451,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
{ {
const char *status; const char *status;
struct rand_struct rand_st; struct rand_struct rand_st;
for (; argc > 0 ; argv++,argc--) for (; argc > 0 ; argv++,argc--)
{ {
switch (find_type(argv[0],&command_typelib,2)) { switch (find_type(argv[0],&command_typelib,2)) {
...@@ -661,7 +661,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv) ...@@ -661,7 +661,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
MYSQL_RES *res; MYSQL_RES *res;
MYSQL_ROW row; MYSQL_ROW row;
uint rownr = 0; uint rownr = 0;
void (*func) (MYSQL_RES*, MYSQL_ROW, uint); void (*func) (MYSQL_RES*, MYSQL_ROW, uint);
new_line = 1; new_line = 1;
if (mysql_query(mysql, "show status") || if (mysql_query(mysql, "show status") ||
...@@ -759,9 +759,9 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv) ...@@ -759,9 +759,9 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
char buff[128],crypted_pw[64]; char buff[128],crypted_pw[64];
time_t start_time; time_t start_time;
/* Do initialization the same way as we do in mysqld */ /* Do initialization the same way as we do in mysqld */
start_time=time((time_t*) 0); start_time=time((time_t*) 0);
randominit(&rand_st,(ulong) start_time,(ulong) start_time/2); randominit(&rand_st,(ulong) start_time,(ulong) start_time/2);
if (argc < 2) if (argc < 2)
{ {
my_printf_error(0,"Too few arguments to change password",MYF(ME_BELL)); my_printf_error(0,"Too few arguments to change password",MYF(ME_BELL));
...@@ -1034,7 +1034,7 @@ static void print_relative_row_vert(MYSQL_RES *result __attribute__((unused)), ...@@ -1034,7 +1034,7 @@ static void print_relative_row_vert(MYSQL_RES *result __attribute__((unused)),
putchar('|'); putchar('|');
tmp = cur[1] ? strtoull(cur[1], NULL, 0) : (ulonglong) 0; tmp = cur[1] ? strtoull(cur[1], NULL, 0) : (ulonglong) 0;
printf(" %-*s|", ex_val_max_len[row] + 1, printf(" %-*s|", ex_val_max_len[row] + 1,
llstr((tmp - last_values[row]), buff)); llstr((tmp - last_values[row]), buff));
/* Find the minimum row length needed to output the relative value */ /* Find the minimum row length needed to output the relative value */
......
...@@ -142,11 +142,11 @@ typedef struct st_net { ...@@ -142,11 +142,11 @@ typedef struct st_net {
char save_char; char save_char;
my_bool report_error; /* We should report error (we have unreported error) */ my_bool report_error; /* We should report error (we have unreported error) */
my_bool no_send_ok; my_bool no_send_ok;
/* /*
Pointer to query object in query cache, do not equal NULL (0) for Pointer to query object in query cache, do not equal NULL (0) for
queries in cache that have not stored its results yet queries in cache that have not stored its results yet
*/ */
gptr query_cache_query; gptr query_cache_query;
} NET; } NET;
#define packet_error (~(unsigned long) 0) #define packet_error (~(unsigned long) 0)
...@@ -158,7 +158,7 @@ enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, ...@@ -158,7 +158,7 @@ enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24,
MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, MYSQL_TYPE_DATE, MYSQL_TYPE_TIME,
MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR,
MYSQL_TYPE_NEWDATE, MYSQL_TYPE_NEWDATE,
MYSQL_TYPE_ENUM=247, MYSQL_TYPE_ENUM=247,
MYSQL_TYPE_SET=248, MYSQL_TYPE_SET=248,
MYSQL_TYPE_TINY_BLOB=249, MYSQL_TYPE_TINY_BLOB=249,
...@@ -172,32 +172,32 @@ enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, ...@@ -172,32 +172,32 @@ enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY,
}; };
/* For backward compatibility */ /* For backward compatibility */
#define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL #define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL
#define FIELD_TYPE_TINY MYSQL_TYPE_TINY #define FIELD_TYPE_TINY MYSQL_TYPE_TINY
#define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT #define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT
#define FIELD_TYPE_LONG MYSQL_TYPE_LONG #define FIELD_TYPE_LONG MYSQL_TYPE_LONG
#define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT #define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT
#define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE #define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE
#define FIELD_TYPE_NULL MYSQL_TYPE_NULL #define FIELD_TYPE_NULL MYSQL_TYPE_NULL
#define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP #define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP
#define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG #define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG
#define FIELD_TYPE_INT24 MYSQL_TYPE_INT24 #define FIELD_TYPE_INT24 MYSQL_TYPE_INT24
#define FIELD_TYPE_DATE MYSQL_TYPE_DATE #define FIELD_TYPE_DATE MYSQL_TYPE_DATE
#define FIELD_TYPE_TIME MYSQL_TYPE_TIME #define FIELD_TYPE_TIME MYSQL_TYPE_TIME
#define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME #define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME
#define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR #define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR
#define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE #define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE
#define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM #define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM
#define FIELD_TYPE_SET MYSQL_TYPE_SET #define FIELD_TYPE_SET MYSQL_TYPE_SET
#define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB #define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB
#define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB #define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB
#define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB #define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB
#define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB #define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB
#define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING #define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING
#define FIELD_TYPE_STRING MYSQL_TYPE_STRING #define FIELD_TYPE_STRING MYSQL_TYPE_STRING
#define FIELD_TYPE_CHAR MYSQL_TYPE_TINY #define FIELD_TYPE_CHAR MYSQL_TYPE_TINY
#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM #define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM
#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY #define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY
#if TO_BE_INCLUDED_LATER #if TO_BE_INCLUDED_LATER
/* For bind applications, to indicate unsigned buffers */ /* For bind applications, to indicate unsigned buffers */
...@@ -296,11 +296,11 @@ my_bool validate_password(const char* password, const char* message, ...@@ -296,11 +296,11 @@ my_bool validate_password(const char* password, const char* message,
void password_hash_stage1(char *to, const char *password); void password_hash_stage1(char *to, const char *password);
void password_hash_stage2(char *to,const char *salt); void password_hash_stage2(char *to,const char *salt);
void password_crypt(const char* from,char* to, const char* password,int length); void password_crypt(const char* from,char* to, const char* password,int length);
void get_hash_and_password(ulong* salt, unsigned char pversion,char* hash, void get_hash_and_password(ulong* salt, unsigned char pversion,char* hash,
unsigned char* bin_password); unsigned char* bin_password);
void get_salt_from_password(unsigned long *res,const char *password); void get_salt_from_password(unsigned long *res,const char *password);
void create_key_from_old_password(const char* password,char* key); void create_key_from_old_password(const char* password,char* key);
void make_password_from_salt(char *to, unsigned long *hash_res, void make_password_from_salt(char *to, unsigned long *hash_res,
unsigned char password_version); unsigned char password_version);
char *scramble(char *to,const char *message,const char *password, char *scramble(char *to,const char *message,const char *password,
my_bool old_ver); my_bool old_ver);
......
...@@ -124,12 +124,12 @@ String *Item_func_sha::val_str(String *str) ...@@ -124,12 +124,12 @@ String *Item_func_sha::val_str(String *str)
digest[8], digest[9], digest[10], digest[11], digest[8], digest[9], digest[10], digest[11],
digest[12], digest[13], digest[14], digest[15], digest[12], digest[13], digest[14], digest[15],
digest[16], digest[17], digest[18], digest[19]); digest[16], digest[17], digest[18], digest[19]);
str->length((uint) SHA1_HASH_SIZE*2); str->length((uint) SHA1_HASH_SIZE*2);
null_value=0; null_value=0;
return str; return str;
} }
} }
null_value=1; null_value=1;
return 0; return 0;
} }
...@@ -153,13 +153,13 @@ String *Item_func_aes_encrypt::val_str(String *str) ...@@ -153,13 +153,13 @@ String *Item_func_aes_encrypt::val_str(String *str)
{ {
null_value=0; null_value=0;
aes_length=my_aes_get_size(sptr->length()); // Calculate result length aes_length=my_aes_get_size(sptr->length()); // Calculate result length
if (!str_value.alloc(aes_length)) // Ensure that memory is free if (!str_value.alloc(aes_length)) // Ensure that memory is free
{ {
// finally encrypt directly to allocated buffer. // finally encrypt directly to allocated buffer.
if (my_aes_encrypt(sptr->ptr(),sptr->length(), (char*) str_value.ptr(), if (my_aes_encrypt(sptr->ptr(),sptr->length(), (char*) str_value.ptr(),
key->ptr(), key->length()) == aes_length) key->ptr(), key->length()) == aes_length)
{ {
// We got the expected result length // We got the expected result length
str_value.length((uint) aes_length); str_value.length((uint) aes_length);
return &str_value; return &str_value;
...@@ -197,7 +197,7 @@ String *Item_func_aes_decrypt::val_str(String *str) ...@@ -197,7 +197,7 @@ String *Item_func_aes_decrypt::val_str(String *str)
(char*) str_value.ptr(), (char*) str_value.ptr(),
key->ptr(), key->length()); key->ptr(), key->length());
if (length >= 0) // if we got correct data data if (length >= 0) // if we got correct data data
{ {
str_value.length((uint) length); str_value.length((uint) length);
DBUG_RETURN(&str_value); DBUG_RETURN(&str_value);
} }
...@@ -328,7 +328,7 @@ void Item_func_concat::fix_length_and_dec() ...@@ -328,7 +328,7 @@ void Item_func_concat::fix_length_and_dec()
} }
} }
/* /*
Function des_encrypt() by tonu@spam.ee & monty Function des_encrypt() by tonu@spam.ee & monty
Works only if compiled with OpenSSL library support. Works only if compiled with OpenSSL library support.
This returns a binary string where first character is CHAR(128 | key-number). This returns a binary string where first character is CHAR(128 | key-number).
...@@ -385,10 +385,10 @@ String *Item_func_des_encrypt::val_str(String *str) ...@@ -385,10 +385,10 @@ String *Item_func_des_encrypt::val_str(String *str)
des_set_key_unchecked(&keyblock.key3,keyschedule.ks3); des_set_key_unchecked(&keyblock.key3,keyschedule.ks3);
} }
/* /*
The problem: DES algorithm requires original data to be in 8-bytes The problem: DES algorithm requires original data to be in 8-bytes
chunks. Missing bytes get filled with '*'s and result of encryption chunks. Missing bytes get filled with '*'s and result of encryption
can be up to 8 bytes longer than original string. When decrypted, can be up to 8 bytes longer than original string. When decrypted,
we do not know the size of original string :( we do not know the size of original string :(
We add one byte with value 0x1..0x8 as the last byte of the padded We add one byte with value 0x1..0x8 as the last byte of the padded
string marking change of string length. string marking change of string length.
...@@ -459,7 +459,7 @@ String *Item_func_des_decrypt::val_str(String *str) ...@@ -459,7 +459,7 @@ String *Item_func_des_decrypt::val_str(String *str)
// Here we set all 64-bit keys (56 effective) one by one // Here we set all 64-bit keys (56 effective) one by one
des_set_key_unchecked(&keyblock.key1,keyschedule.ks1); des_set_key_unchecked(&keyblock.key1,keyschedule.ks1);
des_set_key_unchecked(&keyblock.key2,keyschedule.ks2); des_set_key_unchecked(&keyblock.key2,keyschedule.ks2);
des_set_key_unchecked(&keyblock.key3,keyschedule.ks3); des_set_key_unchecked(&keyblock.key3,keyschedule.ks3);
} }
if (tmp_value.alloc(length-1)) if (tmp_value.alloc(length-1))
goto error; goto error;
...@@ -485,7 +485,7 @@ error: ...@@ -485,7 +485,7 @@ error:
} }
/* /*
concat with separator. First arg is the separator concat with separator. First arg is the separator
concat_ws takes at least two arguments. concat_ws takes at least two arguments.
*/ */
...@@ -683,7 +683,7 @@ String *Item_func_replace::val_str(String *str) ...@@ -683,7 +683,7 @@ String *Item_func_replace::val_str(String *str)
#ifdef USE_MB #ifdef USE_MB
const char *ptr,*end,*strend,*search,*search_end; const char *ptr,*end,*strend,*search,*search_end;
register uint32 l; register uint32 l;
bool binary_str; bool binary_str;
#endif #endif
null_value=0; null_value=0;
...@@ -1279,7 +1279,8 @@ String *Item_func_password::val_str(String *str) ...@@ -1279,7 +1279,8 @@ String *Item_func_password::val_str(String *str)
return 0; return 0;
if (res->length() == 0) if (res->length() == 0)
return &empty_string; return &empty_string;
make_scrambled_password(tmp_value,res->c_ptr(),opt_old_passwords,&current_thd->rand); make_scrambled_password(tmp_value,res->c_ptr(),opt_old_passwords,
&current_thd->rand);
str->set(tmp_value,get_password_length(opt_old_passwords),res->charset()); str->set(tmp_value,get_password_length(opt_old_passwords),res->charset());
return str; return str;
} }
...@@ -1392,7 +1393,7 @@ String *Item_func_user::val_str(String *str) ...@@ -1392,7 +1393,7 @@ String *Item_func_user::val_str(String *str)
CHARSET_INFO *cs=thd->thd_charset; CHARSET_INFO *cs=thd->thd_charset;
const char *host=thd->host ? thd->host : thd->ip ? thd->ip : ""; const char *host=thd->host ? thd->host : thd->ip ? thd->ip : "";
uint32 res_length=(strlen(thd->user)+strlen(host)+10) * cs->mbmaxlen; uint32 res_length=(strlen(thd->user)+strlen(host)+10) * cs->mbmaxlen;
if (str->alloc(res_length)) if (str->alloc(res_length))
{ {
null_value=1; null_value=1;
...@@ -1669,7 +1670,7 @@ String *Item_func_char::val_str(String *str) ...@@ -1669,7 +1670,7 @@ String *Item_func_char::val_str(String *str)
} else if (num&0xFF0000L) { } else if (num&0xFF0000L) {
b2: str->append((char)(num>>16)); b2: str->append((char)(num>>16));
goto b1; goto b1;
} else if (num&0xFF00L) { } else if (num&0xFF00L) {
b1: str->append((char)(num>>8)); b1: str->append((char)(num>>8));
} }
} }
...@@ -1938,25 +1939,25 @@ String *Item_func_conv_charset::val_str(String *str) ...@@ -1938,25 +1939,25 @@ String *Item_func_conv_charset::val_str(String *str)
uint32 dmaxlen; uint32 dmaxlen;
String *arg= args[0]->val_str(str); String *arg= args[0]->val_str(str);
CHARSET_INFO *from,*to; CHARSET_INFO *from,*to;
if (!arg) if (!arg)
{ {
null_value=1; null_value=1;
return 0; return 0;
} }
null_value=0; null_value=0;
from=arg->charset(); from=arg->charset();
to=conv_charset; to=conv_charset;
s=(const uchar*)arg->ptr(); s=(const uchar*)arg->ptr();
se=s+arg->length(); se=s+arg->length();
dmaxlen=arg->length()*to->mbmaxlen+1; dmaxlen=arg->length()*to->mbmaxlen+1;
str->alloc(dmaxlen); str->alloc(dmaxlen);
d0=d=(unsigned char*)str->ptr(); d0=d=(unsigned char*)str->ptr();
de=d+dmaxlen; de=d+dmaxlen;
while( s < se && d < de){ while( s < se && d < de){
cnvres=from->mb_wc(from,&wc,s,se); cnvres=from->mb_wc(from,&wc,s,se);
...@@ -1986,7 +1987,7 @@ outp: ...@@ -1986,7 +1987,7 @@ outp:
else else
break; break;
}; };
str->length((uint32) (d-d0)); str->length((uint32) (d-d0));
str->set_charset(to); str->set_charset(to);
return str; return str;
...@@ -2012,9 +2013,9 @@ String *Item_func_conv_charset3::val_str(String *str) ...@@ -2012,9 +2013,9 @@ String *Item_func_conv_charset3::val_str(String *str)
String *from_cs= args[2]->val_str(str); String *from_cs= args[2]->val_str(str);
CHARSET_INFO *from_charset; CHARSET_INFO *from_charset;
CHARSET_INFO *to_charset; CHARSET_INFO *to_charset;
if (!arg || args[0]->null_value || if (!arg || args[0]->null_value ||
!to_cs || args[1]->null_value || !to_cs || args[1]->null_value ||
!from_cs || args[2]->null_value || !from_cs || args[2]->null_value ||
!(from_charset=get_charset_by_name(from_cs->ptr(), MYF(MY_WME))) || !(from_charset=get_charset_by_name(from_cs->ptr(), MYF(MY_WME))) ||
!(to_charset=get_charset_by_name(to_cs->ptr(), MYF(MY_WME)))) !(to_charset=get_charset_by_name(to_cs->ptr(), MYF(MY_WME))))
...@@ -2025,12 +2026,12 @@ String *Item_func_conv_charset3::val_str(String *str) ...@@ -2025,12 +2026,12 @@ String *Item_func_conv_charset3::val_str(String *str)
s=(const uchar*)arg->ptr(); s=(const uchar*)arg->ptr();
se=s+arg->length(); se=s+arg->length();
dmaxlen=arg->length()*to_charset->mbmaxlen+1; dmaxlen=arg->length()*to_charset->mbmaxlen+1;
str->alloc(dmaxlen); str->alloc(dmaxlen);
d0=d=(unsigned char*)str->ptr(); d0=d=(unsigned char*)str->ptr();
de=d+dmaxlen; de=d+dmaxlen;
while( s < se && d < de){ while( s < se && d < de){
cnvres=from_charset->mb_wc(from_charset,&wc,s,se); cnvres=from_charset->mb_wc(from_charset,&wc,s,se);
...@@ -2060,7 +2061,7 @@ outp: ...@@ -2060,7 +2061,7 @@ outp:
else else
break; break;
}; };
str->length((uint32) (d-d0)); str->length((uint32) (d-d0));
str->set_charset(to_charset); str->set_charset(to_charset);
return str; return str;
...@@ -2072,7 +2073,7 @@ bool Item_func_conv_charset::fix_fields(THD *thd,struct st_table_list *tables, I ...@@ -2072,7 +2073,7 @@ bool Item_func_conv_charset::fix_fields(THD *thd,struct st_table_list *tables, I
char buff[STACK_BUFF_ALLOC]; // Max argument in function char buff[STACK_BUFF_ALLOC]; // Max argument in function
used_tables_cache=0; used_tables_cache=0;
const_item_cache=1; const_item_cache=1;
if (thd && check_stack_overrun(thd,buff)) if (thd && check_stack_overrun(thd,buff))
return 0; // Fatal error if flag is set! return 0; // Fatal error if flag is set!
if (args[0]->check_cols(1) || args[0]->fix_fields(thd, tables, args)) if (args[0]->check_cols(1) || args[0]->fix_fields(thd, tables, args))
...@@ -2105,7 +2106,7 @@ bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables, ...@@ -2105,7 +2106,7 @@ bool Item_func_set_collation::fix_fields(THD *thd,struct st_table_list *tables,
char buff[STACK_BUFF_ALLOC]; // Max argument in function char buff[STACK_BUFF_ALLOC]; // Max argument in function
used_tables_cache=0; used_tables_cache=0;
const_item_cache=1; const_item_cache=1;
if (thd && check_stack_overrun(thd,buff)) if (thd && check_stack_overrun(thd,buff))
return 0; // Fatal error if flag is set! return 0; // Fatal error if flag is set!
if (args[0]->check_cols(1) || args[0]->fix_fields(thd, tables, args)) if (args[0]->check_cols(1) || args[0]->fix_fields(thd, tables, args))
...@@ -2236,11 +2237,11 @@ err: ...@@ -2236,11 +2237,11 @@ err:
String* Item_func_export_set::val_str(String* str) String* Item_func_export_set::val_str(String* str)
{ {
ulonglong the_set = (ulonglong) args[0]->val_int(); ulonglong the_set = (ulonglong) args[0]->val_int();
String yes_buf, *yes; String yes_buf, *yes;
yes = args[1]->val_str(&yes_buf); yes = args[1]->val_str(&yes_buf);
String no_buf, *no; String no_buf, *no;
no = args[2]->val_str(&no_buf); no = args[2]->val_str(&no_buf);
String *sep = NULL, sep_buf ; String *sep = NULL, sep_buf ;
uint num_set_values = 64; uint num_set_values = 64;
ulonglong mask = 0x1; ulonglong mask = 0x1;
...@@ -2314,7 +2315,7 @@ String* Item_func_inet_ntoa::val_str(String* str) ...@@ -2314,7 +2315,7 @@ String* Item_func_inet_ntoa::val_str(String* str)
int4store(buf,n); int4store(buf,n);
/* Now we can assume little endian. */ /* Now we can assume little endian. */
num[3]='.'; num[3]='.';
for (p=buf+4 ; p-- > buf ; ) for (p=buf+4 ; p-- > buf ; )
{ {
...@@ -2343,7 +2344,7 @@ String* Item_func_inet_ntoa::val_str(String* str) ...@@ -2343,7 +2344,7 @@ String* Item_func_inet_ntoa::val_str(String* str)
DESCRIPTION DESCRIPTION
Adds a \ before all characters that needs to be escaped in a SQL string. 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 We also escape '^Z' (END-OF-FILE in windows) to avoid probelms when
running commands from a file in windows. running commands from a file in windows.
This function is very useful when you want to generate SQL statements This function is very useful when you want to generate SQL statements
...@@ -2359,7 +2360,7 @@ String *Item_func_quote::val_str(String *str) ...@@ -2359,7 +2360,7 @@ String *Item_func_quote::val_str(String *str)
/* /*
Bit mask that has 1 for set for the position of the following characters: Bit mask that has 1 for set for the position of the following characters:
0, \, ' and ^Z 0, \, ' and ^Z
*/ */
static uchar escmask[32]= static uchar escmask[32]=
{ {
...@@ -2457,7 +2458,7 @@ String *Item_func_as_text::val_str(String *str) ...@@ -2457,7 +2458,7 @@ String *Item_func_as_text::val_str(String *str)
Geometry geom; Geometry geom;
if ((null_value=(args[0]->null_value || if ((null_value=(args[0]->null_value ||
geom.create_from_wkb(wkt->ptr(),wkt->length())))) geom.create_from_wkb(wkt->ptr(),wkt->length()))))
return 0; return 0;
str->length(0); str->length(0);
...@@ -2494,7 +2495,7 @@ String *Item_func_envelope::val_str(String *str) ...@@ -2494,7 +2495,7 @@ String *Item_func_envelope::val_str(String *str)
Geometry geom; Geometry geom;
null_value = args[0]->null_value || null_value = args[0]->null_value ||
geom.create_from_wkb(wkb->ptr(),wkb->length()) || geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
geom.envelope(str); geom.envelope(str);
return null_value ? 0 : str; return null_value ? 0 : str;
...@@ -2507,7 +2508,7 @@ String *Item_func_centroid::val_str(String *str) ...@@ -2507,7 +2508,7 @@ String *Item_func_centroid::val_str(String *str)
Geometry geom; Geometry geom;
null_value = args[0]->null_value || null_value = args[0]->null_value ||
geom.create_from_wkb(wkb->ptr(),wkb->length()) || geom.create_from_wkb(wkb->ptr(),wkb->length()) ||
!GEOM_METHOD_PRESENT(geom,centroid) || !GEOM_METHOD_PRESENT(geom,centroid) ||
geom.centroid(str); geom.centroid(str);
...@@ -2551,7 +2552,7 @@ String *Item_func_spatial_decomp::val_str(String *str) ...@@ -2551,7 +2552,7 @@ String *Item_func_spatial_decomp::val_str(String *str)
} }
null_value=0; null_value=0;
ret: ret:
return null_value ? 0 : str; return null_value ? 0 : str;
} }
...@@ -2562,7 +2563,7 @@ String *Item_func_spatial_decomp_n::val_str(String *str) ...@@ -2562,7 +2563,7 @@ String *Item_func_spatial_decomp_n::val_str(String *str)
long n = (long) args[1]->val_int(); long n = (long) args[1]->val_int();
Geometry geom; Geometry geom;
if ((null_value = (args[0]->null_value || if ((null_value = (args[0]->null_value ||
args[1]->null_value || args[1]->null_value ||
geom.create_from_wkb(wkb->ptr(),wkb->length()) ))) geom.create_from_wkb(wkb->ptr(),wkb->length()) )))
return 0; return 0;
...@@ -2572,19 +2573,19 @@ String *Item_func_spatial_decomp_n::val_str(String *str) ...@@ -2572,19 +2573,19 @@ String *Item_func_spatial_decomp_n::val_str(String *str)
switch(decomp_func_n) switch(decomp_func_n)
{ {
case SP_POINTN: case SP_POINTN:
if (!GEOM_METHOD_PRESENT(geom,point_n) || if (!GEOM_METHOD_PRESENT(geom,point_n) ||
geom.point_n(n,str)) geom.point_n(n,str))
goto ret; goto ret;
break; break;
case SP_GEOMETRYN: case SP_GEOMETRYN:
if (!GEOM_METHOD_PRESENT(geom,geometry_n) || if (!GEOM_METHOD_PRESENT(geom,geometry_n) ||
geom.geometry_n(n,str)) geom.geometry_n(n,str))
goto ret; goto ret;
break; break;
case SP_INTERIORRINGN: case SP_INTERIORRINGN:
if (!GEOM_METHOD_PRESENT(geom,interior_ring_n) || if (!GEOM_METHOD_PRESENT(geom,interior_ring_n) ||
geom.interior_ring_n(n,str)) geom.interior_ring_n(n,str))
goto ret; goto ret;
break; break;
...@@ -2612,7 +2613,7 @@ Functions to concatinate various spatial objects ...@@ -2612,7 +2613,7 @@ Functions to concatinate various spatial objects
String *Item_func_point::val_str(String *str) String *Item_func_point::val_str(String *str)
{ {
if ( (null_value = (args[0]->null_value || if ( (null_value = (args[0]->null_value ||
args[1]->null_value || args[1]->null_value ||
str->realloc(1+4+8+8)))) str->realloc(1+4+8+8))))
return 0; return 0;
...@@ -2627,12 +2628,12 @@ String *Item_func_point::val_str(String *str) ...@@ -2627,12 +2628,12 @@ String *Item_func_point::val_str(String *str)
/* /*
Concatinates various items into various collections Concatinates various items into various collections
with checkings for valid wkb type of items. with checkings for valid wkb type of items.
For example, MultiPoint can be a collection of Points only. For example, MultiPoint can be a collection of Points only.
coll_type contains wkb type of target collection. coll_type contains wkb type of target collection.
item_type contains a valid wkb type of items. item_type contains a valid wkb type of items.
In the case when coll_type is wkbGeometryCollection, In the case when coll_type is wkbGeometryCollection,
we do not check wkb type of items, any is valid. we do not check wkb type of items, any is valid.
*/ */
...@@ -2659,14 +2660,14 @@ String *Item_func_spatial_collection::val_str(String *str) ...@@ -2659,14 +2660,14 @@ String *Item_func_spatial_collection::val_str(String *str)
if ( coll_type == Geometry::wkbGeometryCollection ) if ( coll_type == Geometry::wkbGeometryCollection )
{ {
/* /*
In the case of GeometryCollection we don't need In the case of GeometryCollection we don't need
any checkings for item types, so just copy them any checkings for item types, so just copy them
into target collection into target collection
*/ */
if ((null_value=(str->reserve(res->length(),512)))) if ((null_value=(str->reserve(res->length(),512))))
goto ret; goto ret;
str->q_append(res->ptr(),res->length()); str->q_append(res->ptr(),res->length());
} }
else else
...@@ -2675,12 +2676,12 @@ String *Item_func_spatial_collection::val_str(String *str) ...@@ -2675,12 +2676,12 @@ String *Item_func_spatial_collection::val_str(String *str)
uint32 len=res->length(); uint32 len=res->length();
const char *data=res->ptr()+1; const char *data=res->ptr()+1;
/* /*
In the case of named collection we must to In the case of named collection we must to
check that items are of specific type, let's check that items are of specific type, let's
do this checking now do this checking now
*/ */
if (len < 5) if (len < 5)
goto ret; goto ret;
wkb_type= (Geometry::wkbType) uint4korr(data); wkb_type= (Geometry::wkbType) uint4korr(data);
...@@ -2688,14 +2689,14 @@ String *Item_func_spatial_collection::val_str(String *str) ...@@ -2688,14 +2689,14 @@ String *Item_func_spatial_collection::val_str(String *str)
len-=5; len-=5;
if (wkb_type != item_type) if (wkb_type != item_type)
goto ret; goto ret;
switch (coll_type) { switch (coll_type) {
case Geometry::wkbMultiPoint: case Geometry::wkbMultiPoint:
case Geometry::wkbMultiLineString: case Geometry::wkbMultiLineString:
case Geometry::wkbMultiPolygon: case Geometry::wkbMultiPolygon:
if (len < WKB_HEADER_SIZE) if (len < WKB_HEADER_SIZE)
goto ret; goto ret;
data+=WKB_HEADER_SIZE; data+=WKB_HEADER_SIZE;
len-=WKB_HEADER_SIZE; len-=WKB_HEADER_SIZE;
if (str->reserve(len,512)) if (str->reserve(len,512))
...@@ -2710,43 +2711,43 @@ String *Item_func_spatial_collection::val_str(String *str) ...@@ -2710,43 +2711,43 @@ String *Item_func_spatial_collection::val_str(String *str)
break; break;
case Geometry::wkbPolygon: case Geometry::wkbPolygon:
{ {
uint32 n_points; uint32 n_points;
double x1, y1, x2, y2; double x1, y1, x2, y2;
if (len < WKB_HEADER_SIZE + 4 + 8 + 8) if (len < WKB_HEADER_SIZE + 4 + 8 + 8)
goto ret; goto ret;
data+=WKB_HEADER_SIZE; data+=WKB_HEADER_SIZE;
len-=WKB_HEADER_SIZE; len-=WKB_HEADER_SIZE;
uint32 llen=len; uint32 llen=len;
const char *ldata=data; const char *ldata=data;
n_points=uint4korr(data); n_points=uint4korr(data);
data+=4; data+=4;
float8get(x1,data); float8get(x1,data);
data+=8; data+=8;
float8get(y1,data); float8get(y1,data);
data+=8; data+=8;
len-= 4 + 8 + 8; len-= 4 + 8 + 8;
if (len < n_points * POINT_DATA_SIZE) if (len < n_points * POINT_DATA_SIZE)
goto ret; goto ret;
data+=(n_points-2) * POINT_DATA_SIZE; data+=(n_points-2) * POINT_DATA_SIZE;
float8get(x2,data); float8get(x2,data);
float8get(y2,data+8); float8get(y2,data+8);
if ((x1 != x2) || (y1 != y2)) if ((x1 != x2) || (y1 != y2))
goto ret; goto ret;
if (str->reserve(llen,512)) if (str->reserve(llen,512))
goto ret; goto ret;
str->q_append(ldata, llen); str->q_append(ldata, llen);
} }
break; break;
default: default:
goto ret; goto ret;
} }
......
...@@ -328,7 +328,7 @@ static int mc_sock_connect(my_socket s, const struct sockaddr *name, ...@@ -328,7 +328,7 @@ static int mc_sock_connect(my_socket s, const struct sockaddr *name,
** or packet is an error message ** or packet is an error message
*****************************************************************************/ *****************************************************************************/
ulong ulong
mc_net_safe_read(MYSQL *mysql) mc_net_safe_read(MYSQL *mysql)
{ {
NET *net= &mysql->net; NET *net= &mysql->net;
...@@ -433,7 +433,7 @@ my_bool mc_mysql_reconnect(MYSQL *mysql) ...@@ -433,7 +433,7 @@ my_bool mc_mysql_reconnect(MYSQL *mysql)
int int
mc_simple_command(MYSQL *mysql,enum enum_server_command command, mc_simple_command(MYSQL *mysql,enum enum_server_command command,
const char *arg, uint length, my_bool skipp_check) const char *arg, uint length, my_bool skipp_check)
{ {
...@@ -483,7 +483,7 @@ mc_simple_command(MYSQL *mysql,enum enum_server_command command, ...@@ -483,7 +483,7 @@ mc_simple_command(MYSQL *mysql,enum enum_server_command command,
} }
MYSQL * MYSQL *
mc_mysql_connect(MYSQL *mysql,const char *host, const char *user, mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
const char *passwd, const char *db, const char *passwd, const char *db,
uint port, const char *unix_socket,uint client_flag, uint port, const char *unix_socket,uint client_flag,
...@@ -662,7 +662,7 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user, ...@@ -662,7 +662,7 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
vio_poll_read(net->vio, mysql->options.connect_timeout)) vio_poll_read(net->vio, mysql->options.connect_timeout))
{ {
net->last_errno= CR_SERVER_LOST; net->last_errno= CR_SERVER_LOST;
strmov(net->last_error,ER(net->last_errno)); strmov(net->last_error,ER(net->last_errno));
goto error; goto error;
} }
if ((pkt_length=mc_net_safe_read(mysql)) == packet_error) if ((pkt_length=mc_net_safe_read(mysql)) == packet_error)
...@@ -777,7 +777,7 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user, ...@@ -777,7 +777,7 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
if (my_net_write(net,buff,(uint) (2)) || net_flush(net)) if (my_net_write(net,buff,(uint) (2)) || net_flush(net))
{ {
net->last_errno= CR_SERVER_LOST; net->last_errno= CR_SERVER_LOST;
strmov(net->last_error,ER(net->last_errno)); strmov(net->last_error,ER(net->last_errno));
goto error; goto error;
} }
/* Do the SSL layering. */ /* Do the SSL layering. */
...@@ -801,7 +801,7 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user, ...@@ -801,7 +801,7 @@ mc_mysql_connect(MYSQL *mysql,const char *host, const char *user,
} }
DBUG_PRINT("info",("user: %s",buff+5)); DBUG_PRINT("info",("user: %s",buff+5));
/* /*
We always start with old type handshake the only difference is message sent We always start with old type handshake the only difference is message sent
If server handles secure connection type we'll not send the real scramble If server handles secure connection type we'll not send the real scramble
...@@ -918,7 +918,7 @@ error: ...@@ -918,7 +918,7 @@ error:
** NB! Errors are not reported until you do mysql_real_connect. ** NB! Errors are not reported until you do mysql_real_connect.
************************************************************************** **************************************************************************
*/ */
int int
mysql_ssl_clear(MYSQL *mysql) mysql_ssl_clear(MYSQL *mysql)
{ {
my_free(mysql->options.ssl_key, MYF(MY_ALLOW_ZERO_PTR)); my_free(mysql->options.ssl_key, MYF(MY_ALLOW_ZERO_PTR));
...@@ -943,7 +943,7 @@ mysql_ssl_clear(MYSQL *mysql) ...@@ -943,7 +943,7 @@ mysql_ssl_clear(MYSQL *mysql)
** If handle is alloced by mysql connect free it. ** If handle is alloced by mysql connect free it.
*************************************************************************/ *************************************************************************/
void void
mc_mysql_close(MYSQL *mysql) mc_mysql_close(MYSQL *mysql)
{ {
DBUG_ENTER("mysql_close"); DBUG_ENTER("mysql_close");
......
...@@ -472,9 +472,9 @@ Field *find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables, ...@@ -472,9 +472,9 @@ Field *find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length, Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length,
bool check_grant,bool allow_rowid); bool check_grant,bool allow_rowid);
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
struct st_des_keyblock struct st_des_keyblock
{ {
des_cblock key1, key2, key3; des_cblock key1, key2, key3;
}; };
struct st_des_keyschedule struct st_des_keyschedule
{ {
...@@ -555,9 +555,9 @@ SQL_SELECT *make_select(TABLE *head, table_map const_tables, ...@@ -555,9 +555,9 @@ SQL_SELECT *make_select(TABLE *head, table_map const_tables,
enum find_item_error_report_type {REPORT_ALL_ERRORS, REPORT_EXCEPT_NOT_FOUND, enum find_item_error_report_type {REPORT_ALL_ERRORS, REPORT_EXCEPT_NOT_FOUND,
IGNORE_ERRORS}; IGNORE_ERRORS};
extern const Item **not_found_item; extern const Item **not_found_item;
Item ** find_item_in_list(Item *item, List<Item> &items, Item ** find_item_in_list(Item *item, List<Item> &items,
find_item_error_report_type report_error); find_item_error_report_type report_error);
bool insert_fields(THD *thd,TABLE_LIST *tables, bool insert_fields(THD *thd,TABLE_LIST *tables,
const char *db_name, const char *table_name, const char *db_name, const char *table_name,
List_iterator<Item> *it); List_iterator<Item> *it);
bool setup_tables(TABLE_LIST *tables); bool setup_tables(TABLE_LIST *tables);
......
...@@ -56,7 +56,7 @@ char pstack_file_name[80]; ...@@ -56,7 +56,7 @@ char pstack_file_name[80];
#if defined(HAVE_DEC_3_2_THREADS) || defined(SIGNALS_DONT_BREAK_READ) #if defined(HAVE_DEC_3_2_THREADS) || defined(SIGNALS_DONT_BREAK_READ)
#define HAVE_CLOSE_SERVER_SOCK 1 #define HAVE_CLOSE_SERVER_SOCK 1
#endif #endif
extern "C" { // Because of SCO 3.2V4.2 extern "C" { // Because of SCO 3.2V4.2
#include <errno.h> #include <errno.h>
...@@ -256,7 +256,7 @@ my_bool opt_skip_slave_start = 0; // If set, slave is not autostarted ...@@ -256,7 +256,7 @@ my_bool opt_skip_slave_start = 0; // If set, slave is not autostarted
If set, some standard measures to enforce slave data integrity will not If set, some standard measures to enforce slave data integrity will not
be performed be performed
*/ */
my_bool opt_reckless_slave = 0; my_bool opt_reckless_slave = 0;
ulong back_log, connect_timeout, concurrency; ulong back_log, connect_timeout, concurrency;
char mysql_home[FN_REFLEN], pidfile_name[FN_REFLEN], time_zone[30]; char mysql_home[FN_REFLEN], pidfile_name[FN_REFLEN], time_zone[30];
...@@ -337,7 +337,7 @@ ulong query_cache_size=0; ...@@ -337,7 +337,7 @@ ulong query_cache_size=0;
ulong query_cache_limit=0; ulong query_cache_limit=0;
Query_cache query_cache; Query_cache query_cache;
#endif #endif
arg_cmp_func Arg_comparator::comparator_matrix[4][2] = arg_cmp_func Arg_comparator::comparator_matrix[4][2] =
{{&Arg_comparator::compare_string, &Arg_comparator::compare_e_string}, {{&Arg_comparator::compare_string, &Arg_comparator::compare_e_string},
{&Arg_comparator::compare_real, &Arg_comparator::compare_e_real}, {&Arg_comparator::compare_real, &Arg_comparator::compare_e_real},
{&Arg_comparator::compare_int, &Arg_comparator::compare_e_int}, {&Arg_comparator::compare_int, &Arg_comparator::compare_e_int},
...@@ -355,7 +355,7 @@ my_string master_user = (char*) "test", master_password = 0, master_host=0, ...@@ -355,7 +355,7 @@ my_string master_user = (char*) "test", master_password = 0, master_host=0,
relay_log_info_file = (char*) "relay-log.info", relay_log_info_file = (char*) "relay-log.info",
master_ssl_key=0, master_ssl_cert=0, master_ssl_capath=0, master_ssl_cipher=0; master_ssl_key=0, master_ssl_cert=0, master_ssl_capath=0, master_ssl_cipher=0;
my_string report_user = 0, report_password = 0, report_host=0; my_string report_user = 0, report_password = 0, report_host=0;
const char *localhost=LOCAL_HOST; const char *localhost=LOCAL_HOST;
const char *delayed_user="DELAYED"; const char *delayed_user="DELAYED";
uint master_port = MYSQL_PORT, master_connect_retry = 60; uint master_port = MYSQL_PORT, master_connect_retry = 60;
...@@ -384,7 +384,7 @@ ulong max_connections,max_insert_delayed_threads,max_used_connections, ...@@ -384,7 +384,7 @@ ulong max_connections,max_insert_delayed_threads,max_used_connections,
max_connect_errors, max_user_connections = 0; max_connect_errors, max_user_connections = 0;
ulong thread_id=1L,current_pid; ulong thread_id=1L,current_pid;
ulong slow_launch_threads = 0; ulong slow_launch_threads = 0;
char mysql_real_data_home[FN_REFLEN], char mysql_real_data_home[FN_REFLEN],
language[LIBLEN],reg_ext[FN_EXTLEN], language[LIBLEN],reg_ext[FN_EXTLEN],
mysql_charsets_dir[FN_REFLEN], *charsets_list, mysql_charsets_dir[FN_REFLEN], *charsets_list,
...@@ -557,7 +557,7 @@ static void close_connections(void) ...@@ -557,7 +557,7 @@ static void close_connections(void)
{ {
HANDLE temp; HANDLE temp;
DBUG_PRINT( "quit", ("Closing named pipes") ); DBUG_PRINT( "quit", ("Closing named pipes") );
/* Create connection to the handle named pipe handler to break the loop */ /* Create connection to the handle named pipe handler to break the loop */
if ((temp = CreateFile(szPipeName, if ((temp = CreateFile(szPipeName,
GENERIC_READ | GENERIC_WRITE, GENERIC_READ | GENERIC_WRITE,
...@@ -676,7 +676,7 @@ static void close_server_sock() ...@@ -676,7 +676,7 @@ static void close_server_sock()
The following code is disabled as it causes MySQL to hang on The following code is disabled as it causes MySQL to hang on
AIX 4.3 during shutdown AIX 4.3 during shutdown
*/ */
DBUG_PRINT("info",("calling closesocket on TCP/IP socket")); DBUG_PRINT("info",("calling closesocket on TCP/IP socket"));
VOID(closesocket(tmp_sock)); VOID(closesocket(tmp_sock));
#endif #endif
} }
...@@ -708,7 +708,7 @@ void kill_mysql(void) ...@@ -708,7 +708,7 @@ void kill_mysql(void)
#ifdef SIGNALS_DONT_BREAK_READ #ifdef SIGNALS_DONT_BREAK_READ
abort_loop=1; // Break connection loops abort_loop=1; // Break connection loops
close_server_sock(); // Force accept to wake up close_server_sock(); // Force accept to wake up
#endif #endif
#if defined(__WIN__) #if defined(__WIN__)
#if !defined(EMBEDDED_LIBRARY) #if !defined(EMBEDDED_LIBRARY)
...@@ -746,7 +746,7 @@ void kill_mysql(void) ...@@ -746,7 +746,7 @@ void kill_mysql(void)
(void*) 0)) (void*) 0))
sql_print_error("Error: Can't create thread to kill server"); sql_print_error("Error: Can't create thread to kill server");
} }
#endif #endif
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
...@@ -1379,7 +1379,7 @@ extern "C" sig_handler handle_segfault(int sig) ...@@ -1379,7 +1379,7 @@ extern "C" sig_handler handle_segfault(int sig)
fprintf(stderr, "Fatal signal %d while backtracing\n", sig); fprintf(stderr, "Fatal signal %d while backtracing\n", sig);
exit(1); exit(1);
} }
segfaulted = 1; segfaulted = 1;
fprintf(stderr,"\ fprintf(stderr,"\
mysqld got signal %d;\n\ mysqld got signal %d;\n\
...@@ -1403,7 +1403,7 @@ bytes of memory\n", (keybuff_size + (global_system_variables.read_buff_size + ...@@ -1403,7 +1403,7 @@ bytes of memory\n", (keybuff_size + (global_system_variables.read_buff_size +
thd->variables.sortbuff_size) * thd->variables.sortbuff_size) *
max_connections)/ 1024); max_connections)/ 1024);
fprintf(stderr, "Hope that's ok; if not, decrease some variables in the equation.\n\n"); fprintf(stderr, "Hope that's ok; if not, decrease some variables in the equation.\n\n");
#if defined(HAVE_LINUXTHREADS) #if defined(HAVE_LINUXTHREADS)
if (sizeof(char*) == 4 && thread_count > UNSAFE_DEFAULT_LINUX_THREADS) if (sizeof(char*) == 4 && thread_count > UNSAFE_DEFAULT_LINUX_THREADS)
{ {
...@@ -2028,7 +2028,7 @@ int main(int argc, char **argv) ...@@ -2028,7 +2028,7 @@ int main(int argc, char **argv)
NullS, LOG_NEW); NullS, LOG_NEW);
using_update_log=1; using_update_log=1;
} }
if (opt_slow_log) if (opt_slow_log)
open_log(&mysql_slow_log, glob_hostname, opt_slow_logname, "-slow.log", open_log(&mysql_slow_log, glob_hostname, opt_slow_logname, "-slow.log",
NullS, LOG_NORMAL); NullS, LOG_NORMAL);
...@@ -2109,7 +2109,7 @@ int main(int argc, char **argv) ...@@ -2109,7 +2109,7 @@ int main(int argc, char **argv)
#endif #endif
/* init_slave() must be called after the thread keys are created */ /* init_slave() must be called after the thread keys are created */
init_slave(); init_slave();
if (opt_bin_log && !server_id) if (opt_bin_log && !server_id)
{ {
server_id= !master_host ? 1 : 2; server_id= !master_host ? 1 : 2;
...@@ -2310,7 +2310,7 @@ int mysql_service(void *p) ...@@ -2310,7 +2310,7 @@ int mysql_service(void *p)
SYNOPSIS SYNOPSIS
default_service_handling() default_service_handling()
argv Pointer to argument list argv Pointer to argument list
servicename Internal name of service servicename Internal name of service
displayname Display name of service (in taskbar ?) displayname Display name of service (in taskbar ?)
file_path Path to this program file_path Path to this program
...@@ -2353,7 +2353,7 @@ int main(int argc, char **argv) ...@@ -2353,7 +2353,7 @@ int main(int argc, char **argv)
fn_format(file_path,argv[0],file_path,"",1+4+16); /* Force full path */ fn_format(file_path,argv[0],file_path,"",1+4+16); /* Force full path */
if (argc == 2) if (argc == 2)
{ {
if (!default_service_handling(argv,MYSQL_SERVICENAME, MYSQL_SERVICENAME, if (!default_service_handling(argv,MYSQL_SERVICENAME, MYSQL_SERVICENAME,
file_path)) file_path))
return 0; return 0;
...@@ -2441,7 +2441,7 @@ static int bootstrap(FILE *file) ...@@ -2441,7 +2441,7 @@ static int bootstrap(FILE *file)
if (pthread_create(&thd->real_id,&connection_attrib,handle_bootstrap, if (pthread_create(&thd->real_id,&connection_attrib,handle_bootstrap,
(void*) thd)) (void*) thd))
{ {
sql_print_error("Warning: Can't create thread to handle bootstrap"); sql_print_error("Warning: Can't create thread to handle bootstrap");
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
/* Wait for thread to die */ /* Wait for thread to die */
...@@ -2498,7 +2498,7 @@ static void create_new_thread(THD *thd) ...@@ -2498,7 +2498,7 @@ static void create_new_thread(THD *thd)
thd->scramble[8]=0; thd->scramble[8]=0;
// Back it up as old clients may need it // Back it up as old clients may need it
memcpy(thd->old_scramble,thd->scramble,9); memcpy(thd->old_scramble,thd->scramble,9);
thd->real_id=pthread_self(); // Keep purify happy thd->real_id=pthread_self(); // Keep purify happy
...@@ -2860,7 +2860,7 @@ extern "C" pthread_handler_decl(handle_connections_namedpipes,arg) ...@@ -2860,7 +2860,7 @@ extern "C" pthread_handler_decl(handle_connections_namedpipes,arg)
} }
#endif /* __NT__ */ #endif /* __NT__ */
/* /*
Thread of shared memory's service Thread of shared memory's service
SYNOPSIS SYNOPSIS
...@@ -2871,10 +2871,10 @@ extern "C" pthread_handler_decl(handle_connections_namedpipes,arg) ...@@ -2871,10 +2871,10 @@ extern "C" pthread_handler_decl(handle_connections_namedpipes,arg)
#ifdef HAVE_SMEM #ifdef HAVE_SMEM
pthread_handler_decl(handle_connections_shared_memory,arg) pthread_handler_decl(handle_connections_shared_memory,arg)
{ {
/* /*
event_connect_request is event object for start connection actions event_connect_request is event object for start connection actions
event_connect_answer is event object for confirm, that server put data event_connect_answer is event object for confirm, that server put data
handle_connect_file_map is file-mapping object, use for create shared memory handle_connect_file_map is file-mapping object, use for create shared memory
handle_connect_map is pointer on shared memory handle_connect_map is pointer on shared memory
handle_map is pointer on shared memory for client handle_map is pointer on shared memory for client
event_server_wrote, event_server_wrote,
...@@ -2894,7 +2894,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -2894,7 +2894,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
char tmp[63]; char tmp[63];
char *suffix_pos; char *suffix_pos;
char connect_number_char[22], *p; char connect_number_char[22], *p;
my_thread_init(); my_thread_init();
DBUG_ENTER("handle_connections_shared_memorys"); DBUG_ENTER("handle_connections_shared_memorys");
DBUG_PRINT("general",("Waiting for allocated shared memory.")); DBUG_PRINT("general",("Waiting for allocated shared memory."));
...@@ -2908,27 +2908,27 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -2908,27 +2908,27 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
unique_part is unique value for each object (events and file-mapping) unique_part is unique value for each object (events and file-mapping)
*/ */
suffix_pos = strxmov(tmp,shared_memory_base_name,"_",NullS); suffix_pos = strxmov(tmp,shared_memory_base_name,"_",NullS);
strmov(suffix_pos, "CONNECT_REQUEST"); strmov(suffix_pos, "CONNECT_REQUEST");
if ((event_connect_request = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0) if ((event_connect_request = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0)
{ {
sql_perror("Can't create shared memory service ! The request event don't create."); sql_perror("Can't create shared memory service ! The request event don't create.");
goto error; goto error;
} }
strmov(suffix_pos, "CONNECT_ANSWER"); strmov(suffix_pos, "CONNECT_ANSWER");
if ((event_connect_answer = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0) if ((event_connect_answer = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0)
{ {
sql_perror("Can't create shared memory service ! The answer event don't create."); sql_perror("Can't create shared memory service ! The answer event don't create.");
goto error; goto error;
} }
strmov(suffix_pos, "CONNECT_DATA"); strmov(suffix_pos, "CONNECT_DATA");
if ((handle_connect_file_map = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE, if ((handle_connect_file_map = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,
0,sizeof(connect_number),tmp)) == 0) 0,sizeof(connect_number),tmp)) == 0)
{ {
sql_perror("Can't create shared memory service ! File mapping don't create."); sql_perror("Can't create shared memory service ! File mapping don't create.");
goto error; goto error;
} }
if ((handle_connect_map = (char *)MapViewOfFile(handle_connect_file_map,FILE_MAP_WRITE,0,0, if ((handle_connect_map = (char *)MapViewOfFile(handle_connect_file_map,FILE_MAP_WRITE,0,0,
sizeof(DWORD))) == 0) sizeof(DWORD))) == 0)
{ {
sql_perror("Can't create shared memory service ! Map of memory don't create."); sql_perror("Can't create shared memory service ! Map of memory don't create.");
goto error; goto error;
...@@ -2940,7 +2940,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -2940,7 +2940,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
/* /*
Wait a request from client Wait a request from client
*/ */
WaitForSingleObject(event_connect_request,INFINITE); WaitForSingleObject(event_connect_request,INFINITE);
error_allow = FALSE; error_allow = FALSE;
HANDLE handle_client_file_map = NULL; HANDLE handle_client_file_map = NULL;
...@@ -2962,13 +2962,13 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -2962,13 +2962,13 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
suffix_pos = strxmov(tmp,shared_memory_base_name,"_",connect_number_char,"_",NullS); suffix_pos = strxmov(tmp,shared_memory_base_name,"_",connect_number_char,"_",NullS);
strmov(suffix_pos, "DATA"); strmov(suffix_pos, "DATA");
if ((handle_client_file_map = CreateFileMapping(INVALID_HANDLE_VALUE,NULL, if ((handle_client_file_map = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,
PAGE_READWRITE,0,smem_buffer_length,tmp)) == 0) PAGE_READWRITE,0,smem_buffer_length,tmp)) == 0)
{ {
sql_perror("Can't create connection with client in shared memory service ! File mapping don't create."); sql_perror("Can't create connection with client in shared memory service ! File mapping don't create.");
error_allow = TRUE; error_allow = TRUE;
goto errorconn; goto errorconn;
} }
if ((handle_client_map = (char*)MapViewOfFile(handle_client_file_map,FILE_MAP_WRITE,0,0,smem_buffer_length)) == 0) if ((handle_client_map = (char*)MapViewOfFile(handle_client_file_map,FILE_MAP_WRITE,0,0,smem_buffer_length)) == 0)
{ {
sql_perror("Can't create connection with client in shared memory service ! Map of memory don't create."); sql_perror("Can't create connection with client in shared memory service ! Map of memory don't create.");
error_allow = TRUE; error_allow = TRUE;
...@@ -2976,7 +2976,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -2976,7 +2976,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
} }
strmov(suffix_pos, "CLIENT_WROTE"); strmov(suffix_pos, "CLIENT_WROTE");
if ((event_client_wrote = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0) if ((event_client_wrote = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0)
{ {
sql_perror("Can't create connection with client in shared memory service ! CW event don't create."); sql_perror("Can't create connection with client in shared memory service ! CW event don't create.");
error_allow = TRUE; error_allow = TRUE;
...@@ -2984,7 +2984,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -2984,7 +2984,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
} }
strmov(suffix_pos, "CLIENT_READ"); strmov(suffix_pos, "CLIENT_READ");
if ((event_client_read = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0) if ((event_client_read = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0)
{ {
sql_perror("Can't create connection with client in shared memory service ! CR event don't create."); sql_perror("Can't create connection with client in shared memory service ! CR event don't create.");
error_allow = TRUE; error_allow = TRUE;
...@@ -2992,7 +2992,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -2992,7 +2992,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
} }
strmov(suffix_pos, "SERVER_READ"); strmov(suffix_pos, "SERVER_READ");
if ((event_server_read = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0) if ((event_server_read = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0)
{ {
sql_perror("Can't create connection with client in shared memory service ! SR event don't create."); sql_perror("Can't create connection with client in shared memory service ! SR event don't create.");
error_allow = TRUE; error_allow = TRUE;
...@@ -3000,7 +3000,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -3000,7 +3000,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
} }
strmov(suffix_pos, "SERVER_WROTE"); strmov(suffix_pos, "SERVER_WROTE");
if ((event_server_wrote = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0) if ((event_server_wrote = CreateEvent(NULL,FALSE,FALSE,tmp)) == 0)
{ {
sql_perror("Can't create connection with client in shared memory service ! SW event don't create."); sql_perror("Can't create connection with client in shared memory service ! SW event don't create.");
error_allow = TRUE; error_allow = TRUE;
...@@ -3018,11 +3018,11 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -3018,11 +3018,11 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
Send number of connection to client Send number of connection to client
*/ */
int4store(handle_connect_map, connect_number); int4store(handle_connect_map, connect_number);
/* /*
Send number of connection to client Send number of connection to client
*/ */
if (!SetEvent(event_connect_answer)) if (!SetEvent(event_connect_answer))
{ {
sql_perror("Can't create connection with client in shared memory service ! Can't send answer event."); sql_perror("Can't create connection with client in shared memory service ! Can't send answer event.");
error_allow = TRUE; error_allow = TRUE;
...@@ -3079,25 +3079,25 @@ error: ...@@ -3079,25 +3079,25 @@ error:
******************************************************************************/ ******************************************************************************/
enum options { enum options {
OPT_ISAM_LOG=256, OPT_SKIP_NEW, OPT_ISAM_LOG=256, OPT_SKIP_NEW,
OPT_SKIP_GRANT, OPT_SKIP_LOCK, OPT_SKIP_GRANT, OPT_SKIP_LOCK,
OPT_ENABLE_LOCK, OPT_USE_LOCKING, OPT_ENABLE_LOCK, OPT_USE_LOCKING,
OPT_SOCKET, OPT_UPDATE_LOG, OPT_SOCKET, OPT_UPDATE_LOG,
OPT_BIN_LOG, OPT_SKIP_RESOLVE, OPT_BIN_LOG, OPT_SKIP_RESOLVE,
OPT_SKIP_NETWORKING, OPT_BIN_LOG_INDEX, OPT_SKIP_NETWORKING, OPT_BIN_LOG_INDEX,
OPT_BIND_ADDRESS, OPT_PID_FILE, OPT_BIND_ADDRESS, OPT_PID_FILE,
OPT_SKIP_PRIOR, OPT_BIG_TABLES, OPT_SKIP_PRIOR, OPT_BIG_TABLES,
OPT_STANDALONE, OPT_ONE_THREAD, OPT_STANDALONE, OPT_ONE_THREAD,
OPT_CONSOLE, OPT_LOW_PRIORITY_UPDATES, OPT_CONSOLE, OPT_LOW_PRIORITY_UPDATES,
OPT_SKIP_HOST_CACHE, OPT_LONG_FORMAT, OPT_SKIP_HOST_CACHE, OPT_LONG_FORMAT,
OPT_FLUSH, OPT_SAFE, OPT_FLUSH, OPT_SAFE,
OPT_BOOTSTRAP, OPT_SKIP_SHOW_DB, OPT_BOOTSTRAP, OPT_SKIP_SHOW_DB,
OPT_TABLE_TYPE, OPT_INIT_FILE, OPT_TABLE_TYPE, OPT_INIT_FILE,
OPT_DELAY_KEY_WRITE_ALL, OPT_SLOW_QUERY_LOG, OPT_DELAY_KEY_WRITE_ALL, OPT_SLOW_QUERY_LOG,
OPT_DELAY_KEY_WRITE, OPT_CHARSETS_DIR, OPT_DELAY_KEY_WRITE, OPT_CHARSETS_DIR,
OPT_BDB_HOME, OPT_BDB_LOG, OPT_BDB_HOME, OPT_BDB_LOG,
OPT_BDB_TMP, OPT_BDB_NOSYNC, OPT_BDB_TMP, OPT_BDB_NOSYNC,
OPT_BDB_LOCK, OPT_BDB_SKIP, OPT_BDB_LOCK, OPT_BDB_SKIP,
OPT_BDB_NO_RECOVER, OPT_BDB_SHARED, OPT_BDB_NO_RECOVER, OPT_BDB_SHARED,
OPT_MASTER_HOST, OPT_MASTER_USER, OPT_MASTER_HOST, OPT_MASTER_USER,
OPT_MASTER_PASSWORD, OPT_MASTER_PORT, OPT_MASTER_PASSWORD, OPT_MASTER_PORT,
...@@ -3106,26 +3106,26 @@ enum options { ...@@ -3106,26 +3106,26 @@ enum options {
OPT_MASTER_SSL, OPT_MASTER_SSL_KEY, OPT_MASTER_SSL, OPT_MASTER_SSL_KEY,
OPT_MASTER_SSL_CERT, OPT_MASTER_SSL_CAPATH, OPT_MASTER_SSL_CERT, OPT_MASTER_SSL_CAPATH,
OPT_MASTER_SSL_CIPHER, OPT_MASTER_SSL_CIPHER,
OPT_SQL_BIN_UPDATE_SAME, OPT_REPLICATE_DO_DB, OPT_SQL_BIN_UPDATE_SAME, OPT_REPLICATE_DO_DB,
OPT_REPLICATE_IGNORE_DB, OPT_LOG_SLAVE_UPDATES, OPT_REPLICATE_IGNORE_DB, OPT_LOG_SLAVE_UPDATES,
OPT_BINLOG_DO_DB, OPT_BINLOG_IGNORE_DB, OPT_BINLOG_DO_DB, OPT_BINLOG_IGNORE_DB,
OPT_WANT_CORE, OPT_CONCURRENT_INSERT, OPT_WANT_CORE, OPT_CONCURRENT_INSERT,
OPT_MEMLOCK, OPT_MYISAM_RECOVER, OPT_MEMLOCK, OPT_MYISAM_RECOVER,
OPT_REPLICATE_REWRITE_DB, OPT_SERVER_ID, OPT_REPLICATE_REWRITE_DB, OPT_SERVER_ID,
OPT_SKIP_SLAVE_START, OPT_SKIP_INNOBASE, OPT_SKIP_SLAVE_START, OPT_SKIP_INNOBASE,
OPT_SAFEMALLOC_MEM_LIMIT, OPT_REPLICATE_DO_TABLE, OPT_SAFEMALLOC_MEM_LIMIT, OPT_REPLICATE_DO_TABLE,
OPT_REPLICATE_IGNORE_TABLE, OPT_REPLICATE_WILD_DO_TABLE, OPT_REPLICATE_IGNORE_TABLE, OPT_REPLICATE_WILD_DO_TABLE,
OPT_REPLICATE_WILD_IGNORE_TABLE, OPT_REPLICATE_WILD_IGNORE_TABLE,
OPT_DISCONNECT_SLAVE_EVENT_COUNT, OPT_DISCONNECT_SLAVE_EVENT_COUNT,
OPT_ABORT_SLAVE_EVENT_COUNT, OPT_ABORT_SLAVE_EVENT_COUNT,
OPT_INNODB_DATA_HOME_DIR, OPT_INNODB_DATA_HOME_DIR,
OPT_INNODB_DATA_FILE_PATH, OPT_INNODB_DATA_FILE_PATH,
OPT_INNODB_LOG_GROUP_HOME_DIR, OPT_INNODB_LOG_GROUP_HOME_DIR,
OPT_INNODB_LOG_ARCH_DIR, OPT_INNODB_LOG_ARCH_DIR,
OPT_INNODB_LOG_ARCHIVE, OPT_INNODB_LOG_ARCHIVE,
OPT_INNODB_FLUSH_LOG_AT_TRX_COMMIT, OPT_INNODB_FLUSH_LOG_AT_TRX_COMMIT,
OPT_INNODB_FLUSH_METHOD, OPT_INNODB_FLUSH_METHOD,
OPT_INNODB_FAST_SHUTDOWN, OPT_INNODB_FAST_SHUTDOWN,
OPT_SAFE_SHOW_DB, OPT_SAFE_SHOW_DB,
OPT_INNODB_SKIP, OPT_SKIP_SAFEMALLOC, OPT_INNODB_SKIP, OPT_SKIP_SAFEMALLOC,
OPT_TEMP_POOL, OPT_TX_ISOLATION, OPT_TEMP_POOL, OPT_TX_ISOLATION,
...@@ -3162,7 +3162,7 @@ enum options { ...@@ -3162,7 +3162,7 @@ enum options {
OPT_MYISAM_MAX_SORT_FILE_SIZE, OPT_MYISAM_SORT_BUFFER_SIZE, OPT_MYISAM_MAX_SORT_FILE_SIZE, OPT_MYISAM_SORT_BUFFER_SIZE,
OPT_NET_BUFFER_LENGTH, OPT_NET_RETRY_COUNT, OPT_NET_BUFFER_LENGTH, OPT_NET_RETRY_COUNT,
OPT_NET_READ_TIMEOUT, OPT_NET_WRITE_TIMEOUT, OPT_NET_READ_TIMEOUT, OPT_NET_WRITE_TIMEOUT,
OPT_OPEN_FILES_LIMIT, OPT_OPEN_FILES_LIMIT,
OPT_QUERY_CACHE_LIMIT, OPT_QUERY_CACHE_SIZE, OPT_QUERY_CACHE_LIMIT, OPT_QUERY_CACHE_SIZE,
OPT_QUERY_CACHE_TYPE, OPT_RECORD_BUFFER, OPT_QUERY_CACHE_TYPE, OPT_RECORD_BUFFER,
OPT_RECORD_RND_BUFFER, OPT_RELAY_LOG_SPACE_LIMIT, OPT_RECORD_RND_BUFFER, OPT_RELAY_LOG_SPACE_LIMIT,
...@@ -3265,7 +3265,7 @@ struct my_option my_long_options[] = ...@@ -3265,7 +3265,7 @@ struct my_option my_long_options[] =
#endif #endif
#endif #endif
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
{"des-key-file", OPT_DES_KEY_FILE, {"des-key-file", OPT_DES_KEY_FILE,
"Load keys for des_encrypt() and des_encrypt from given file", "Load keys for des_encrypt() and des_encrypt from given file",
(gptr*) &des_key_file, (gptr*) &des_key_file, 0, GET_STR, REQUIRED_ARG, (gptr*) &des_key_file, (gptr*) &des_key_file, 0, GET_STR, REQUIRED_ARG,
0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, 0, 0},
...@@ -3297,7 +3297,7 @@ struct my_option my_long_options[] = ...@@ -3297,7 +3297,7 @@ struct my_option my_long_options[] =
{"shared-memory", OPT_ENABLE_SHARED_MEMORY, {"shared-memory", OPT_ENABLE_SHARED_MEMORY,
"Enable the shared memory.",(gptr*) &opt_enable_shared_memory, (gptr*) &opt_enable_shared_memory, "Enable the shared memory.",(gptr*) &opt_enable_shared_memory, (gptr*) &opt_enable_shared_memory,
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
#endif #endif
{"exit-info", 'T', "Used for debugging; Use at your own risk!", 0, 0, 0, {"exit-info", 'T', "Used for debugging; Use at your own risk!", 0, 0, 0,
GET_LONG, OPT_ARG, 0, 0, 0, 0, 0, 0}, GET_LONG, OPT_ARG, 0, 0, 0, 0, 0, 0},
{"flush", OPT_FLUSH, "Flush tables to disk between SQL commands", 0, 0, 0, {"flush", OPT_FLUSH, "Flush tables to disk between SQL commands", 0, 0, 0,
...@@ -3315,7 +3315,7 @@ struct my_option my_long_options[] = ...@@ -3315,7 +3315,7 @@ struct my_option my_long_options[] =
(gptr*) &innobase_data_home_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, (gptr*) &innobase_data_home_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0,
0}, 0},
{"innodb_log_group_home_dir", OPT_INNODB_LOG_GROUP_HOME_DIR, {"innodb_log_group_home_dir", OPT_INNODB_LOG_GROUP_HOME_DIR,
"Path to innodb log files.", (gptr*) &innobase_log_group_home_dir, "Path to innodb log files.", (gptr*) &innobase_log_group_home_dir,
(gptr*) &innobase_log_group_home_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, (gptr*) &innobase_log_group_home_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0,
0, 0}, 0, 0},
{"innodb_log_arch_dir", OPT_INNODB_LOG_ARCH_DIR, {"innodb_log_arch_dir", OPT_INNODB_LOG_ARCH_DIR,
...@@ -3375,7 +3375,7 @@ struct my_option my_long_options[] = ...@@ -3375,7 +3375,7 @@ struct my_option my_long_options[] =
{"log-long-format", OPT_LONG_FORMAT, {"log-long-format", OPT_LONG_FORMAT,
"Log some extra information to update log", 0, 0, 0, GET_NO_ARG, NO_ARG, "Log some extra information to update log", 0, 0, 0, GET_NO_ARG, NO_ARG,
0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, 0, 0},
{"log-slave-updates", OPT_LOG_SLAVE_UPDATES, {"log-slave-updates", OPT_LOG_SLAVE_UPDATES,
"Tells the slave to log the updates from the slave thread to the binary log. You will need to turn it on if you plan to daisy-chain the slaves.", "Tells the slave to log the updates from the slave thread to the binary log. You will need to turn it on if you plan to daisy-chain the slaves.",
(gptr*) &opt_log_slave_updates, (gptr*) &opt_log_slave_updates, 0, GET_BOOL, (gptr*) &opt_log_slave_updates, (gptr*) &opt_log_slave_updates, 0, GET_BOOL,
NO_ARG, 0, 0, 0, 0, 0, 0}, NO_ARG, 0, 0, 0, 0, 0, 0},
...@@ -3384,7 +3384,7 @@ struct my_option my_long_options[] = ...@@ -3384,7 +3384,7 @@ struct my_option my_long_options[] =
(gptr*) &global_system_variables.low_priority_updates, (gptr*) &global_system_variables.low_priority_updates,
(gptr*) &max_system_variables.low_priority_updates, (gptr*) &max_system_variables.low_priority_updates,
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"master-host", OPT_MASTER_HOST, {"master-host", OPT_MASTER_HOST,
"Master hostname or IP address for replication. If not set, the slave thread will not be started. Note that the setting of master-host will be ignored if there exists a valid master.info file.", "Master hostname or IP address for replication. If not set, the slave thread will not be started. Note that the setting of master-host will be ignored if there exists a valid master.info file.",
(gptr*) &master_host, (gptr*) &master_host, 0, GET_STR, REQUIRED_ARG, 0, 0, (gptr*) &master_host, (gptr*) &master_host, 0, GET_STR, REQUIRED_ARG, 0, 0,
0, 0, 0, 0}, 0, 0, 0, 0},
...@@ -3531,7 +3531,7 @@ struct my_option my_long_options[] = ...@@ -3531,7 +3531,7 @@ struct my_option my_long_options[] =
{"safe-mode", OPT_SAFE, "Skip some optimize stages (for testing).", {"safe-mode", OPT_SAFE, "Skip some optimize stages (for testing).",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"old-passwords", OPT_OLD_PASSWORDS, "Use old password encryption method (needed for old clients)", {"old-passwords", OPT_OLD_PASSWORDS, "Use old password encryption method (needed for old clients)",
(gptr*) &opt_old_passwords, (gptr*) &opt_old_passwords, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, (gptr*) &opt_old_passwords, (gptr*) &opt_old_passwords, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
#ifndef TO_BE_DELETED #ifndef TO_BE_DELETED
{"safe-show-database", OPT_SAFE_SHOW_DB, {"safe-show-database", OPT_SAFE_SHOW_DB,
"Deprecated option; One should use GRANT SHOW DATABASES instead...", "Deprecated option; One should use GRANT SHOW DATABASES instead...",
...@@ -3550,7 +3550,7 @@ struct my_option my_long_options[] = ...@@ -3550,7 +3550,7 @@ struct my_option my_long_options[] =
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#ifdef HAVE_SMEM #ifdef HAVE_SMEM
{"shared_memory_base_name",OPT_SHARED_MEMORY_BASE_NAME, {"shared_memory_base_name",OPT_SHARED_MEMORY_BASE_NAME,
"Base name of shared memory", (gptr*) &shared_memory_base_name, (gptr*) &shared_memory_base_name, "Base name of shared memory", (gptr*) &shared_memory_base_name, (gptr*) &shared_memory_base_name,
0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif #endif
{"show-slave-auth-info", OPT_SHOW_SLAVE_AUTH_INFO, {"show-slave-auth-info", OPT_SHOW_SLAVE_AUTH_INFO,
...@@ -3681,7 +3681,7 @@ struct my_option my_long_options[] = ...@@ -3681,7 +3681,7 @@ struct my_option my_long_options[] =
"The size of the cache to hold the SQL statements for the binary log during a transaction. If you often use big, multi-statement transactions you can increase this to get more performance.", "The size of the cache to hold the SQL statements for the binary log during a transaction. If you often use big, multi-statement transactions you can increase this to get more performance.",
(gptr*) &binlog_cache_size, (gptr*) &binlog_cache_size, 0, GET_ULONG, (gptr*) &binlog_cache_size, (gptr*) &binlog_cache_size, 0, GET_ULONG,
REQUIRED_ARG, 32*1024L, IO_SIZE, ~0L, 0, IO_SIZE, 0}, REQUIRED_ARG, 32*1024L, IO_SIZE, ~0L, 0, IO_SIZE, 0},
{"connect_timeout", OPT_CONNECT_TIMEOUT, {"connect_timeout", OPT_CONNECT_TIMEOUT,
"The number of seconds the mysqld server is waiting for a connect packet before responding with Bad handshake", "The number of seconds the mysqld server is waiting for a connect packet before responding with Bad handshake",
(gptr*) &connect_timeout, (gptr*) &connect_timeout, (gptr*) &connect_timeout, (gptr*) &connect_timeout,
0, GET_ULONG, REQUIRED_ARG, CONNECT_TIMEOUT, 2, LONG_TIMEOUT, 0, 1, 0 }, 0, GET_ULONG, REQUIRED_ARG, CONNECT_TIMEOUT, 2, LONG_TIMEOUT, 0, 1, 0 },
...@@ -3715,7 +3715,7 @@ struct my_option my_long_options[] = ...@@ -3715,7 +3715,7 @@ struct my_option my_long_options[] =
HA_FT_MAXLEN, 0, 1, 0}, HA_FT_MAXLEN, 0, 1, 0},
#ifdef HAVE_INNOBASE_DB #ifdef HAVE_INNOBASE_DB
{"innodb_mirrored_log_groups", OPT_INNODB_MIRRORED_LOG_GROUPS, {"innodb_mirrored_log_groups", OPT_INNODB_MIRRORED_LOG_GROUPS,
"Number of identical copies of log groups we keep for the database. Currently this should be set to 1.", "Number of identical copies of log groups we keep for the database. Currently this should be set to 1.",
(gptr*) &innobase_mirrored_log_groups, (gptr*) &innobase_mirrored_log_groups,
(gptr*) &innobase_mirrored_log_groups, 0, GET_LONG, REQUIRED_ARG, 1, 1, 10, (gptr*) &innobase_mirrored_log_groups, 0, GET_LONG, REQUIRED_ARG, 1, 1, 10,
0, 1, 0}, 0, 1, 0},
...@@ -3873,7 +3873,7 @@ struct my_option my_long_options[] = ...@@ -3873,7 +3873,7 @@ struct my_option my_long_options[] =
(gptr*) &max_system_variables.myisam_sort_buff_size, 0, (gptr*) &max_system_variables.myisam_sort_buff_size, 0,
GET_ULONG, REQUIRED_ARG, 8192*1024, 4, ~0L, 0, 1, 0}, GET_ULONG, REQUIRED_ARG, 8192*1024, 4, ~0L, 0, 1, 0},
{"net_buffer_length", OPT_NET_BUFFER_LENGTH, {"net_buffer_length", OPT_NET_BUFFER_LENGTH,
"Buffer length for TCP/IP and socket communication.", "Buffer length for TCP/IP and socket communication.",
(gptr*) &global_system_variables.net_buffer_length, (gptr*) &global_system_variables.net_buffer_length,
(gptr*) &max_system_variables.net_buffer_length, 0, GET_ULONG, (gptr*) &max_system_variables.net_buffer_length, 0, GET_ULONG,
REQUIRED_ARG, 16384, 1024, 1024*1024L, 0, 1024, 0}, REQUIRED_ARG, 16384, 1024, 1024*1024L, 0, 1024, 0},
...@@ -4103,7 +4103,7 @@ struct show_var_st status_vars[]= { ...@@ -4103,7 +4103,7 @@ struct show_var_st status_vars[]= {
{"Qcache_hits", (char*) &query_cache.hits, SHOW_LONG}, {"Qcache_hits", (char*) &query_cache.hits, SHOW_LONG},
{"Qcache_lowmem_prunes", (char*) &query_cache.lowmem_prunes, SHOW_LONG}, {"Qcache_lowmem_prunes", (char*) &query_cache.lowmem_prunes, SHOW_LONG},
{"Qcache_not_cached", (char*) &query_cache.refused, SHOW_LONG}, {"Qcache_not_cached", (char*) &query_cache.refused, SHOW_LONG},
{"Qcache_free_memory", (char*) &query_cache.free_memory, {"Qcache_free_memory", (char*) &query_cache.free_memory,
SHOW_LONG_CONST}, SHOW_LONG_CONST},
{"Qcache_free_blocks", (char*) &query_cache.free_memory_blocks, {"Qcache_free_blocks", (char*) &query_cache.free_memory_blocks,
SHOW_LONG_CONST}, SHOW_LONG_CONST},
...@@ -4288,9 +4288,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -4288,9 +4288,9 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
init_slave_skip_errors(argument); init_slave_skip_errors(argument);
break; break;
case OPT_SAFEMALLOC_MEM_LIMIT: case OPT_SAFEMALLOC_MEM_LIMIT:
#if !defined(DBUG_OFF) && defined(SAFEMALLOC) #if !defined(DBUG_OFF) && defined(SAFEMALLOC)
safemalloc_mem_limit = atoi(argument); safemalloc_mem_limit = atoi(argument);
#endif #endif
break; break;
#ifdef EMBEDDED_LIBRARY #ifdef EMBEDDED_LIBRARY
case OPT_MAX_ALLOWED_PACKET: case OPT_MAX_ALLOWED_PACKET:
...@@ -4352,7 +4352,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -4352,7 +4352,7 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case (int)OPT_REPLICATE_REWRITE_DB: case (int)OPT_REPLICATE_REWRITE_DB:
{ {
char* key = argument,*p, *val; char* key = argument,*p, *val;
if (!(p= strstr(argument, "->"))) if (!(p= strstr(argument, "->")))
{ {
fprintf(stderr, fprintf(stderr,
...@@ -4744,7 +4744,7 @@ static void get_options(int argc,char **argv) ...@@ -4744,7 +4744,7 @@ static void get_options(int argc,char **argv)
myisam_max_temp_length= myisam_max_temp_length=
(my_off_t) min(global_system_variables.myisam_max_sort_file_size, (my_off_t) min(global_system_variables.myisam_max_sort_file_size,
(ulonglong) MAX_FILE_SIZE); (ulonglong) MAX_FILE_SIZE);
myisam_max_extra_temp_length= myisam_max_extra_temp_length=
(my_off_t) min(global_system_variables.myisam_max_extra_sort_file_size, (my_off_t) min(global_system_variables.myisam_max_extra_sort_file_size,
(ulonglong) MAX_FILE_SIZE); (ulonglong) MAX_FILE_SIZE);
...@@ -4925,7 +4925,7 @@ static ulong find_bit_type(const char *x, TYPELIB *bit_lib) ...@@ -4925,7 +4925,7 @@ static ulong find_bit_type(const char *x, TYPELIB *bit_lib)
j=pos; j=pos;
while (j != end) while (j != end)
{ {
if (my_toupper(system_charset_info,*i++) != if (my_toupper(system_charset_info,*i++) !=
my_toupper(system_charset_info,*j++)) my_toupper(system_charset_info,*j++))
goto skipp; goto skipp;
} }
......
...@@ -32,26 +32,26 @@ ...@@ -32,26 +32,26 @@
Example: Example:
update user set password=PASSWORD("hello") where user="test" update user set password=PASSWORD("hello") where user="test"
This saves a hashed number as a string in the password field. This saves a hashed number as a string in the password field.
New in MySQL 4.1 authentication works even more secure way. New in MySQL 4.1 authentication works even more secure way.
At the first step client sends user name to the sever, and password if At the first step client sends user name to the sever, and password if
it is empty. So in case of empty password authentication is as fast as before. it is empty. So in case of empty password authentication is as fast as before.
At the second stap servers sends scramble to client, which is encoded with At the second stap servers sends scramble to client, which is encoded with
password stage2 hash stored in the password database as well as salt, needed password stage2 hash stored in the password database as well as salt, needed
for client to build stage2 password to decrypt scramble. for client to build stage2 password to decrypt scramble.
Client decrypts the scramble and encrypts it once again with stage1 password. Client decrypts the scramble and encrypts it once again with stage1 password.
This information is sent to server. This information is sent to server.
Server decrypts the scramble to get stage1 password and hashes it to get Server decrypts the scramble to get stage1 password and hashes it to get
stage2 hash. This hash is when compared to hash stored in the database. stage2 hash. This hash is when compared to hash stored in the database.
This authentication needs 2 packet round trips instead of one but it is much This authentication needs 2 packet round trips instead of one but it is much
stronger. Now if one will steal mysql database content he will not be able stronger. Now if one will steal mysql database content he will not be able
to break into MySQL. to break into MySQL.
New Password handling functions by Peter Zaitsev New Password handling functions by Peter Zaitsev
*****************************************************************************/ *****************************************************************************/
#include <my_global.h> #include <my_global.h>
...@@ -70,17 +70,17 @@ ...@@ -70,17 +70,17 @@
/* /*
New (MySQL 3.21+) random generation structure initialization New (MySQL 3.21+) random generation structure initialization
SYNOPSIS SYNOPSIS
randominit() randominit()
rand_st OUT Structure to initialize rand_st OUT Structure to initialize
seed1 IN First initialization parameter seed1 IN First initialization parameter
seed2 IN Second initialization parameter seed2 IN Second initialization parameter
RETURN RETURN
none none
*/ */
void randominit(struct rand_struct *rand_st,ulong seed1, ulong seed2) void randominit(struct rand_struct *rand_st,ulong seed1, ulong seed2)
{ /* For mysql 3.21.# */ { /* For mysql 3.21.# */
#ifdef HAVE_purify #ifdef HAVE_purify
...@@ -95,12 +95,12 @@ void randominit(struct rand_struct *rand_st,ulong seed1, ulong seed2) ...@@ -95,12 +95,12 @@ void randominit(struct rand_struct *rand_st,ulong seed1, ulong seed2)
/* /*
Old (MySQL 3.20) random generation structure initialization Old (MySQL 3.20) random generation structure initialization
SYNOPSIS SYNOPSIS
old_randominit() old_randominit()
rand_st OUT Structure to initialize rand_st OUT Structure to initialize
seed1 IN First initialization parameter seed1 IN First initialization parameter
RETURN RETURN
none none
*/ */
...@@ -116,11 +116,11 @@ static void old_randominit(struct rand_struct *rand_st,ulong seed1) ...@@ -116,11 +116,11 @@ static void old_randominit(struct rand_struct *rand_st,ulong seed1)
/* /*
Generate Random number Generate Random number
SYNOPSIS SYNOPSIS
rnd() rnd()
rand_st INOUT Structure used for number generation rand_st INOUT Structure used for number generation
RETURN RETURN
Generated pseudo random number Generated pseudo random number
*/ */
...@@ -136,13 +136,13 @@ double rnd(struct rand_struct *rand_st) ...@@ -136,13 +136,13 @@ double rnd(struct rand_struct *rand_st)
/* /*
Generate String of printable random characters of requested length Generate String of printable random characters of requested length
String will not be zero terminated. String will not be zero terminated.
SYNOPSIS SYNOPSIS
create_random_string() create_random_string()
length IN Lenght of length IN Lenght of
rand_st INOUT Structure used for number generation rand_st INOUT Structure used for number generation
target OUT Buffer for generation target OUT Buffer for generation
RETURN RETURN
none none
*/ */
...@@ -153,7 +153,7 @@ void create_random_string(int length,struct rand_struct *rand_st,char* target) ...@@ -153,7 +153,7 @@ void create_random_string(int length,struct rand_struct *rand_st,char* target)
/* Use pointer arithmetics as it is faster way to do so. */ /* Use pointer arithmetics as it is faster way to do so. */
while (target<end) while (target<end)
{ {
*target=rnd(rand_st)*94+33; *target=rnd(rand_st)*94+33;
target++; target++;
} }
} }
...@@ -162,22 +162,22 @@ void create_random_string(int length,struct rand_struct *rand_st,char* target) ...@@ -162,22 +162,22 @@ void create_random_string(int length,struct rand_struct *rand_st,char* target)
/* /*
Encrypt/Decrypt function used for password encryption in authentication Encrypt/Decrypt function used for password encryption in authentication
Simple XOR is used here but it is OK as we crypt random strings Simple XOR is used here but it is OK as we crypt random strings
SYNOPSIS SYNOPSIS
password_crypt() password_crypt()
from IN Data for encryption from IN Data for encryption
to OUT Encrypt data to the buffer (may be the same) to OUT Encrypt data to the buffer (may be the same)
password IN Password used for encryption (same length) password IN Password used for encryption (same length)
length IN Length of data to encrypt length IN Length of data to encrypt
RETURN RETURN
none none
*/ */
void password_crypt(const char* from,char* to, const char* password,int length) void password_crypt(const char* from,char* to, const char* password,int length)
{ {
const char *from_end=from+length; const char *from_end=from+length;
while (from < from_end) while (from < from_end)
*to++= *(from++) ^* (password++); *to++= *(from++) ^* (password++);
} }
...@@ -186,12 +186,12 @@ void password_crypt(const char* from,char* to, const char* password,int length) ...@@ -186,12 +186,12 @@ void password_crypt(const char* from,char* to, const char* password,int length)
/* /*
Generate binary hash from raw text password Generate binary hash from raw text password
Used for Pre-4.1 Password handling Used for Pre-4.1 Password handling
SYNOPSIS SYNOPSIS
hash_pasword() hash_pasword()
result OUT Store hash in this location result OUT Store hash in this location
password IN Plain text password to build hash password IN Plain text password to build hash
RETURN RETURN
none none
*/ */
...@@ -216,66 +216,66 @@ void hash_password(ulong *result, const char *password) ...@@ -216,66 +216,66 @@ void hash_password(ulong *result, const char *password)
/* /*
Stage one password hashing. Stage one password hashing.
Used in MySQL 4.1 password handling Used in MySQL 4.1 password handling
SYNOPSIS SYNOPSIS
password_hash_stage1() password_hash_stage1()
to OUT Store stage one hash to this location to OUT Store stage one hash to this location
password IN Plain text password to build hash password IN Plain text password to build hash
RETURN RETURN
none none
*/ */
void password_hash_stage1(char *to, const char *password) void password_hash_stage1(char *to, const char *password)
{ {
SHA1_CONTEXT context; SHA1_CONTEXT context;
sha1_reset(&context); sha1_reset(&context);
for (; *password ; password++) for (; *password ; password++)
{ {
if (*password == ' ' || *password == '\t') if (*password == ' ' || *password == '\t')
continue;/* skip space in password */ continue;/* skip space in password */
sha1_input(&context,(int8*)&password[0],1); sha1_input(&context,(int8*)&password[0],1);
} }
sha1_result(&context,(uint8*)to); sha1_result(&context,(uint8*)to);
} }
/* /*
Stage two password hashing. Stage two password hashing.
Used in MySQL 4.1 password handling Used in MySQL 4.1 password handling
SYNOPSIS SYNOPSIS
password_hash_stage2() password_hash_stage2()
to INOUT Use this as stage one hash and store stage two hash here to INOUT Use this as stage one hash and store stage two hash here
salt IN Salt used for stage two hashing salt IN Salt used for stage two hashing
RETURN RETURN
none none
*/ */
void password_hash_stage2(char *to,const char *salt) void password_hash_stage2(char *to,const char *salt)
{ {
SHA1_CONTEXT context; SHA1_CONTEXT context;
sha1_reset(&context); sha1_reset(&context);
sha1_input(&context,(uint8*)salt,4); sha1_input(&context,(uint8*)salt,4);
sha1_input(&context,to,SHA1_HASH_SIZE); sha1_input(&context,to,SHA1_HASH_SIZE);
sha1_result(&context,(uint8*)to); sha1_result(&context,(uint8*)to);
} }
/* /*
Create password to be stored in user database from raw string Create password to be stored in user database from raw string
Handles both MySQL 4.1 and Pre-MySQL 4.1 passwords Handles both MySQL 4.1 and Pre-MySQL 4.1 passwords
SYNOPSIS SYNOPSIS
make_scramble_password() make_scramble_password()
to OUT Store scrambled password here to OUT Store scrambled password here
password IN Raw string password password IN Raw string password
force_old_scramle force_old_scramle
IN Force generation of old scramble variant IN Force generation of old scramble variant
rand_st INOUT Structure for temporary number generation. rand_st INOUT Structure for temporary number generation.
RETURN RETURN
none none
*/ */
...@@ -283,7 +283,7 @@ void password_hash_stage2(char *to,const char *salt) ...@@ -283,7 +283,7 @@ void password_hash_stage2(char *to,const char *salt)
void make_scrambled_password(char *to,const char *password, void make_scrambled_password(char *to,const char *password,
my_bool force_old_scramble, my_bool force_old_scramble,
struct rand_struct *rand_st) struct rand_struct *rand_st)
{ {
ulong hash_res[2]; /* Used for pre 4.1 password hashing */ ulong hash_res[2]; /* Used for pre 4.1 password hashing */
unsigned short salt; /* Salt for 4.1 version password */ unsigned short salt; /* Salt for 4.1 version password */
uint8 digest[SHA1_HASH_SIZE]; uint8 digest[SHA1_HASH_SIZE];
...@@ -292,37 +292,37 @@ void make_scrambled_password(char *to,const char *password, ...@@ -292,37 +292,37 @@ void make_scrambled_password(char *to,const char *password,
hash_password(hash_res,password); hash_password(hash_res,password);
sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]); sprintf(to,"%08lx%08lx",hash_res[0],hash_res[1]);
} }
else /* New password 4.1 password scrambling */ else /* New password 4.1 password scrambling */
{ {
to[0]=PVERSION41_CHAR; /* New passwords have version prefix */ to[0]=PVERSION41_CHAR; /* New passwords have version prefix */
/* Random returns number from 0 to 1 so this would be good salt generation.*/ /* Random returns number from 0 to 1 so this would be good salt generation.*/
salt=rnd(rand_st)*65535+1; salt=rnd(rand_st)*65535+1;
/* Use only 2 first bytes from it */ /* Use only 2 first bytes from it */
sprintf(to+1,"%04x",salt); sprintf(to+1,"%04x",salt);
/* First hasing is done without salt */ /* First hasing is done without salt */
password_hash_stage1(digest,password); password_hash_stage1(digest,password);
/* Second stage is done with salt */ /* Second stage is done with salt */
password_hash_stage2(digest,(char*)to+1), password_hash_stage2(digest,(char*)to+1),
/* Print resulting hash into the password*/ /* Print resulting hash into the password*/
sprintf(to+5, sprintf(to+5,
"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x",
digest[0],digest[1],digest[2],digest[3],digest[4],digest[5],digest[6], digest[0],digest[1],digest[2],digest[3],digest[4],digest[5],digest[6],
digest[7],digest[8],digest[9],digest[10],digest[11],digest[12],digest[13], digest[7],digest[8],digest[9],digest[10],digest[11],digest[12],digest[13],
digest[14],digest[15],digest[16],digest[17],digest[18],digest[19]); digest[14],digest[15],digest[16],digest[17],digest[18],digest[19]);
} }
} }
/* /*
Convert password from binary string form to salt form Convert password from binary string form to salt form
Used for MySQL 4.1 password handling Used for MySQL 4.1 password handling
SYNOPSIS SYNOPSIS
get_salt_from_bin_password() get_salt_from_bin_password()
res OUT Store salt form password here res OUT Store salt form password here
password IN Binary password to be converted password IN Binary password to be converted
salt IN hashing-salt to be used for salt form generation salt IN hashing-salt to be used for salt form generation
RETURN RETURN
none none
*/ */
...@@ -332,7 +332,7 @@ void get_salt_from_bin_password(ulong *res,unsigned char *password,ulong salt) ...@@ -332,7 +332,7 @@ void get_salt_from_bin_password(ulong *res,unsigned char *password,ulong salt)
unsigned char* password_end=password+SCRAMBLE41_LENGTH; unsigned char* password_end=password+SCRAMBLE41_LENGTH;
*res=salt; *res=salt;
res++; res++;
/* Process password of known length*/ /* Process password of known length*/
while (password<password_end) while (password<password_end)
{ {
...@@ -341,19 +341,19 @@ void get_salt_from_bin_password(ulong *res,unsigned char *password,ulong salt) ...@@ -341,19 +341,19 @@ void get_salt_from_bin_password(ulong *res,unsigned char *password,ulong salt)
for (i=0 ; i < 4 ; i++) for (i=0 ; i < 4 ; i++)
val=(val << 8)+(*password++); val=(val << 8)+(*password++);
*res++=val; *res++=val;
} }
} }
/* /*
Validate password for MySQL 4.1 password handling. Validate password for MySQL 4.1 password handling.
SYNOPSIS SYNOPSIS
validate_password() validate_password()
password IN Encrypted Scramble which we got from the client password IN Encrypted Scramble which we got from the client
message IN Original scramble which we have sent to the client before message IN Original scramble which we have sent to the client before
salt IN Password in the salted form to match to salt IN Password in the salted form to match to
RETURN RETURN
0 for correct password 0 for correct password
!0 for invalid password !0 for invalid password
...@@ -367,34 +367,34 @@ my_bool validate_password(const char* password, const char* message, ...@@ -367,34 +367,34 @@ my_bool validate_password(const char* password, const char* message,
ulong salt_candidate[6]; /* Computed candidate salt */ ulong salt_candidate[6]; /* Computed candidate salt */
ulong* sc=salt_candidate; /* we need to be able to increment */ ulong* sc=salt_candidate; /* we need to be able to increment */
ulong* salt_end; ulong* salt_end;
/* Now we shall get stage1 encrypted password in buffer*/ /* Now we shall get stage1 encrypted password in buffer*/
password_crypt(password,buffer,message,SCRAMBLE41_LENGTH); password_crypt(password,buffer,message,SCRAMBLE41_LENGTH);
/* For compatibility reasons we use ulong to store salt while we need char */ /* For compatibility reasons we use ulong to store salt while we need char */
sprintf(tmpsalt,"%04x",(unsigned short)salt[0]); sprintf(tmpsalt,"%04x",(unsigned short)salt[0]);
password_hash_stage2(buffer,tmpsalt); password_hash_stage2(buffer,tmpsalt);
/* Convert password to salt to compare */ /* Convert password to salt to compare */
get_salt_from_bin_password(salt_candidate,buffer,salt[0]); get_salt_from_bin_password(salt_candidate,buffer,salt[0]);
/* Now we shall get exactly the same password as we have stored for user */ /* Now we shall get exactly the same password as we have stored for user */
for (salt_end=salt+5 ; salt < salt_end; ) for (salt_end=salt+5 ; salt < salt_end; )
if (*++salt != *++sc) if (*++salt != *++sc)
return 1; return 1;
/* Or password correct*/ /* Or password correct*/
return 0; return 0;
} }
/* /*
Get length of password string which is stored in mysql.user table Get length of password string which is stored in mysql.user table
SYNOPSIS SYNOPSIS
get_password_length() get_password_length()
force_old_scramble IN If we wish to use pre 4.1 scramble format force_old_scramble IN If we wish to use pre 4.1 scramble format
RETURN RETURN
password length >0 password length >0
*/ */
...@@ -407,11 +407,11 @@ int get_password_length(my_bool force_old_scramble) ...@@ -407,11 +407,11 @@ int get_password_length(my_bool force_old_scramble)
/* /*
Get version of the password based on mysql.user password string Get version of the password based on mysql.user password string
SYNOPSIS SYNOPSIS
get_password_version() get_password_version()
password IN Password string as stored in mysql.user password IN Password string as stored in mysql.user
RETURN RETURN
0 for pre 4.1 passwords 0 for pre 4.1 passwords
!0 password version char for newer passwords !0 password version char for newer passwords
...@@ -419,19 +419,19 @@ int get_password_length(my_bool force_old_scramble) ...@@ -419,19 +419,19 @@ int get_password_length(my_bool force_old_scramble)
char get_password_version(const char* password) char get_password_version(const char* password)
{ {
if (password==NULL) return 0; if (password==NULL) return 0;
if (password[0]==PVERSION41_CHAR) return PVERSION41_CHAR; if (password[0]==PVERSION41_CHAR) return PVERSION41_CHAR;
return 0; return 0;
} }
/* /*
Get integer value of Hex character Get integer value of Hex character
SYNOPSIS SYNOPSIS
char_val() char_val()
X IN Character to find value for X IN Character to find value for
RETURN RETURN
Appropriate integer value Appropriate integer value
*/ */
...@@ -448,18 +448,18 @@ inline uint char_val(char X) ...@@ -448,18 +448,18 @@ inline uint char_val(char X)
/* /*
Get Binary salt from password as in mysql.user format Get Binary salt from password as in mysql.user format
SYNOPSIS SYNOPSIS
get_salt_from_password() get_salt_from_password()
res OUT Store binary salt here res OUT Store binary salt here
password IN Password string as stored in mysql.user password IN Password string as stored in mysql.user
RETURN RETURN
none none
NOTE NOTE
This function does not have length check for passwords. It will just crash This function does not have length check for passwords. It will just crash
Password hashes in old format must have length divisible by 8 Password hashes in old format must have length divisible by 8
*/ */
void get_salt_from_password(ulong *res,const char *password) void get_salt_from_password(ulong *res,const char *password)
...@@ -471,18 +471,18 @@ void get_salt_from_password(ulong *res,const char *password) ...@@ -471,18 +471,18 @@ void get_salt_from_password(ulong *res,const char *password)
uint val=0; uint val=0;
uint i; uint i;
password++; /* skip version identifier */ password++; /* skip version identifier */
/*get hashing salt from password and store in in the start of array */ /*get hashing salt from password and store in in the start of array */
for (i=0 ; i < 4 ; i++) for (i=0 ; i < 4 ; i++)
val=(val << 4)+char_val(*password++); val=(val << 4)+char_val(*password++);
*res++=val; *res++=val;
} }
/* We process old passwords the same way as new ones in other case */ /* We process old passwords the same way as new ones in other case */
#ifdef EXTRA_DEBUG #ifdef EXTRA_DEBUG
if (strlen(password)%8!=0) if (strlen(password)%8!=0)
fprintf(stderr,"Warning: Incorrect password length for salting: %d\n", fprintf(stderr,"Warning: Incorrect password length for salting: %d\n",
strlen(password)); strlen(password));
#endif #endif
while (*password) while (*password)
{ {
ulong val=0; ulong val=0;
...@@ -490,7 +490,7 @@ void get_salt_from_password(ulong *res,const char *password) ...@@ -490,7 +490,7 @@ void get_salt_from_password(ulong *res,const char *password)
for (i=0 ; i < 8 ; i++) for (i=0 ; i < 8 ; i++)
val=(val << 4)+char_val(*password++); val=(val << 4)+char_val(*password++);
*res++=val; *res++=val;
} }
} }
return; return;
} }
...@@ -498,14 +498,14 @@ void get_salt_from_password(ulong *res,const char *password) ...@@ -498,14 +498,14 @@ void get_salt_from_password(ulong *res,const char *password)
/* /*
Get string version as stored in mysql.user from salt form Get string version as stored in mysql.user from salt form
SYNOPSIS SYNOPSIS
make_password_from_salt() make_password_from_salt()
to OUT Store resulting string password here to OUT Store resulting string password here
hash_res IN Password in salt format hash_res IN Password in salt format
password_version password_version
IN According to which version salt should be treated IN According to which version salt should be treated
RETURN RETURN
none none
*/ */
...@@ -526,14 +526,14 @@ void make_password_from_salt(char *to, ulong *hash_res,uint8 password_version) ...@@ -526,14 +526,14 @@ void make_password_from_salt(char *to, ulong *hash_res,uint8 password_version)
/* /*
Convert password in salted form to binary string password and hash-salt Convert password in salted form to binary string password and hash-salt
For old password this involes one more hashing For old password this involes one more hashing
SYNOPSIS SYNOPSIS
get_hash_and_password() get_hash_and_password()
salt IN Salt to convert from salt IN Salt to convert from
pversion IN Password version to use pversion IN Password version to use
hash OUT Store zero ended hash here hash OUT Store zero ended hash here
bin_password OUT Store binary password here (no zero at the end) bin_password OUT Store binary password here (no zero at the end)
RETURN RETURN
0 for pre 4.1 passwords 0 for pre 4.1 passwords
!0 password version char for newer passwords !0 password version char for newer passwords
...@@ -544,9 +544,9 @@ void get_hash_and_password(ulong* salt, uint8 pversion, char* hash, unsigned cha ...@@ -544,9 +544,9 @@ void get_hash_and_password(ulong* salt, uint8 pversion, char* hash, unsigned cha
int t; int t;
ulong* salt_end; ulong* salt_end;
ulong val; ulong val;
SHA1_CONTEXT context; SHA1_CONTEXT context;
unsigned char* bp; /* Binary password loop pointer */ unsigned char* bp; /* Binary password loop pointer */
if (pversion) /* New password version assumed */ if (pversion) /* New password version assumed */
{ {
salt_end=salt+5; salt_end=salt+5;
...@@ -559,13 +559,13 @@ void get_hash_and_password(ulong* salt, uint8 pversion, char* hash, unsigned cha ...@@ -559,13 +559,13 @@ void get_hash_and_password(ulong* salt, uint8 pversion, char* hash, unsigned cha
bin_password[t]=val%256; bin_password[t]=val%256;
val>>=8; /* Scroll 8 bits to get next part*/ val>>=8; /* Scroll 8 bits to get next part*/
} }
bin_password+=4; /* Get to next 4 chars*/ bin_password+=4; /* Get to next 4 chars*/
} }
} }
else else
{ {
/* Use zero starting hash as an indication of old password */ /* Use zero starting hash as an indication of old password */
hash[0]=0; hash[0]=0;
salt_end=salt+2; salt_end=salt+2;
bp=bin_password; bp=bin_password;
/* Encode salt using SHA1 here */ /* Encode salt using SHA1 here */
...@@ -576,28 +576,28 @@ void get_hash_and_password(ulong* salt, uint8 pversion, char* hash, unsigned cha ...@@ -576,28 +576,28 @@ void get_hash_and_password(ulong* salt, uint8 pversion, char* hash, unsigned cha
for(t=3;t>=0;t--) for(t=3;t>=0;t--)
{ {
bp[t]=val%256; bp[t]=val%256;
val>>=8; /* Scroll 8 bits to get next part*/ val>>=8; /* Scroll 8 bits to get next part*/
} }
bp+=4; /* Get to next 4 chars*/ bp+=4; /* Get to next 4 chars*/
salt++; salt++;
} }
/* Use 8 bytes of binary password for hash */ /* Use 8 bytes of binary password for hash */
sha1_input(&context,(uint8*)bin_password,8); sha1_input(&context,(uint8*)bin_password,8);
sha1_result(&context,(uint8*)bin_password); sha1_result(&context,(uint8*)bin_password);
} }
} }
/* /*
Create key from old password to decode scramble Create key from old password to decode scramble
Used in 4.1 authentication with passwords stored old way Used in 4.1 authentication with passwords stored old way
SYNOPSIS SYNOPSIS
create_key_from_old_password() create_key_from_old_password()
passwd IN Password used for key generation passwd IN Password used for key generation
key OUT Created 20 bytes key key OUT Created 20 bytes key
RETURN RETURN
None None
*/ */
...@@ -615,35 +615,35 @@ void create_key_from_old_password(const char* passwd, char* key) ...@@ -615,35 +615,35 @@ void create_key_from_old_password(const char* passwd, char* key)
get_hash_and_password(salt,0,buffer,(unsigned char*) key); get_hash_and_password(salt,0,buffer,(unsigned char*) key);
} }
/* /*
Scramble string with password Scramble string with password
Used at pre 4.1 authentication phase. Used at pre 4.1 authentication phase.
SYNOPSIS SYNOPSIS
scramble() scramble()
to OUT Store scrambled message here to OUT Store scrambled message here
message IN Message to scramble message IN Message to scramble
password IN Password to use while scrambling password IN Password to use while scrambling
old_ver IN Forse old version random number generator old_ver IN Forse old version random number generator
RETURN RETURN
End of scrambled string End of scrambled string
*/ */
char *scramble(char *to,const char *message,const char *password, char *scramble(char *to,const char *message,const char *password,
my_bool old_ver) my_bool old_ver)
{ {
struct rand_struct rand_st; struct rand_struct rand_st;
ulong hash_pass[2],hash_message[2]; ulong hash_pass[2],hash_message[2];
char message_buffer[9]; /* Real message buffer */ char message_buffer[9]; /* Real message buffer */
char* msg=message_buffer; char* msg=message_buffer;
/* We use special message buffer now as new server can provide longer hash */ /* We use special message buffer now as new server can provide longer hash */
memcpy(message_buffer,message,8); memcpy(message_buffer,message,8);
message_buffer[8]=0; message_buffer[8]=0;
if (password && password[0]) if (password && password[0])
{ {
char *to_start=to; char *to_start=to;
...@@ -669,16 +669,16 @@ char *scramble(char *to,const char *message,const char *password, ...@@ -669,16 +669,16 @@ char *scramble(char *to,const char *message,const char *password,
/* /*
Check scrambled message Check scrambled message
Used for pre 4.1 password handling Used for pre 4.1 password handling
SYNOPSIS SYNOPSIS
scramble() scramble()
scrambled IN Scrambled message to check scrambled IN Scrambled message to check
message IN Original message which was scramble message IN Original message which was scramble
hash_pass IN Password which should be used for scrambling hash_pass IN Password which should be used for scrambling
old_ver IN Forse old version random number generator old_ver IN Forse old version random number generator
RETURN RETURN
0 Password correct 0 Password correct
!0 Password invalid !0 Password invalid
...@@ -695,7 +695,7 @@ my_bool check_scramble(const char *scrambled, const char *message, ...@@ -695,7 +695,7 @@ my_bool check_scramble(const char *scrambled, const char *message,
memcpy(message_buffer,message,8); /* Old auth uses 8 bytes at maximum */ memcpy(message_buffer,message,8); /* Old auth uses 8 bytes at maximum */
message_buffer[8]=0; message_buffer[8]=0;
hash_password(hash_message,message_buffer); hash_password(hash_message,message_buffer);
if (old_ver) if (old_ver)
old_randominit(&rand_st,hash_pass[0] ^ hash_message[0]); old_randominit(&rand_st,hash_pass[0] ^ hash_message[0]);
......
...@@ -654,7 +654,7 @@ check_connections(THD *thd) ...@@ -654,7 +654,7 @@ check_connections(THD *thd)
if (user) if (user)
strmake(tmp_user,user,USERNAME_LENGTH); strmake(tmp_user,user,USERNAME_LENGTH);
tmp_db[0]=0; tmp_db[0]=0;
if (db) if (db)
strmake(tmp_db,db,NAME_LEN); strmake(tmp_db,db,NAME_LEN);
......
...@@ -547,7 +547,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -547,7 +547,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%type <lex_str> %type <lex_str>
IDENT TEXT_STRING REAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM LEX_HOSTNAME IDENT TEXT_STRING REAL_NUM FLOAT_NUM NUM LONG_NUM HEX_NUM LEX_HOSTNAME
ULONGLONG_NUM field_ident select_alias ident ident_or_text ULONGLONG_NUM field_ident select_alias ident ident_or_text
UNDERSCORE_CHARSET UNDERSCORE_CHARSET
%type <lex_str_ptr> %type <lex_str_ptr>
...@@ -561,7 +561,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -561,7 +561,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
opt_escape opt_escape
%type <string> %type <string>
text_string text_string
%type <num> %type <num>
type int_type real_type order_dir opt_field_spec lock_option type int_type real_type order_dir opt_field_spec lock_option
...@@ -626,7 +626,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -626,7 +626,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%type <lex_user> user grant_user %type <lex_user> user grant_user
%type <charset> %type <charset>
charset_name charset_name
charset_name_or_default charset_name_or_default
opt_db_default_character_set opt_db_default_character_set
...@@ -642,7 +642,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -642,7 +642,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
insert_values update delete truncate rename insert_values update delete truncate rename
show describe load alter optimize flush show describe load alter optimize flush
reset purge begin commit rollback slave master_def master_defs reset purge begin commit rollback slave master_def master_defs
repair restore backup analyze check repair restore backup analyze check
field_list field_list_item field_spec kill field_list field_list_item field_spec kill
select_item_list select_item values_list no_braces select_item_list select_item values_list no_braces
opt_limit_clause delete_limit_clause fields opt_values values opt_limit_clause delete_limit_clause fields opt_values values
...@@ -712,7 +712,7 @@ verb_clause: ...@@ -712,7 +712,7 @@ verb_clause:
| lock | lock
| kill | kill
| optimize | optimize
| purge | purge
| rename | rename
| repair | repair
| replace | replace
...@@ -730,10 +730,10 @@ verb_clause: ...@@ -730,10 +730,10 @@ verb_clause:
| update | update
| use | use
| help; | help;
/* help */ /* help */
help: help:
HELP TEXT_STRING HELP TEXT_STRING
{ {
LEX *lex= Lex; LEX *lex= Lex;
...@@ -842,7 +842,7 @@ create: ...@@ -842,7 +842,7 @@ create:
lex->col_list.empty(); lex->col_list.empty();
lex->change=NullS; lex->change=NullS;
} }
'(' key_list ')' '(' key_list ')'
{ {
LEX *lex=Lex; LEX *lex=Lex;
...@@ -951,12 +951,12 @@ create_table_option: ...@@ -951,12 +951,12 @@ create_table_option:
lex->create_info.used_fields|= HA_CREATE_USED_UNION; lex->create_info.used_fields|= HA_CREATE_USED_UNION;
} }
| opt_default CHARSET opt_equal charset_name_or_default | opt_default CHARSET opt_equal charset_name_or_default
{ {
Lex->create_info.table_charset= $4; Lex->create_info.table_charset= $4;
Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET; Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET;
} }
| opt_default CHAR_SYM SET opt_equal charset_name_or_default | opt_default CHAR_SYM SET opt_equal charset_name_or_default
{ {
Lex->create_info.table_charset= $5; Lex->create_info.table_charset= $5;
Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET; Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET;
} }
...@@ -1091,7 +1091,7 @@ type: ...@@ -1091,7 +1091,7 @@ type:
if (YYTHD->sql_mode & MODE_SAPDB) if (YYTHD->sql_mode & MODE_SAPDB)
$$=FIELD_TYPE_DATETIME; $$=FIELD_TYPE_DATETIME;
else else
$$=FIELD_TYPE_TIMESTAMP; $$=FIELD_TYPE_TIMESTAMP;
} }
| TIMESTAMP '(' NUM ')' { Lex->length=$3.str; | TIMESTAMP '(' NUM ')' { Lex->length=$3.str;
$$=FIELD_TYPE_TIMESTAMP; } $$=FIELD_TYPE_TIMESTAMP; }
...@@ -1265,7 +1265,7 @@ opt_primary: ...@@ -1265,7 +1265,7 @@ opt_primary:
references: references:
REFERENCES table_ident REFERENCES table_ident
{ {
LEX *lex=Lex; LEX *lex=Lex;
lex->fk_delete_opt= lex->fk_update_opt= lex->fk_match_option= 0; lex->fk_delete_opt= lex->fk_update_opt= lex->fk_match_option= 0;
lex->ref_list.empty(); lex->ref_list.empty();
} }
...@@ -1273,7 +1273,7 @@ references: ...@@ -1273,7 +1273,7 @@ references:
{ {
$$=$2; $$=$2;
}; };
opt_ref_list: opt_ref_list:
/* empty */ opt_on_delete {} /* empty */ opt_on_delete {}
| '(' ref_list ')' opt_on_delete {}; | '(' ref_list ')' opt_on_delete {};
...@@ -1517,11 +1517,11 @@ slave_thread_opts: ...@@ -1517,11 +1517,11 @@ slave_thread_opts:
| slave_thread_opts ',' slave_thread_opt; | slave_thread_opts ',' slave_thread_opt;
slave_thread_opt: slave_thread_opt:
/*empty*/ {} /*empty*/ {}
| SQL_THREAD { Lex->slave_thd_opt|=SLAVE_SQL; } | SQL_THREAD { Lex->slave_thd_opt|=SLAVE_SQL; }
| IO_THREAD { Lex->slave_thd_opt|=SLAVE_IO; } | IO_THREAD { Lex->slave_thd_opt|=SLAVE_IO; }
; ;
restore: restore:
RESTORE_SYM table_or_tables RESTORE_SYM table_or_tables
{ {
...@@ -1808,7 +1808,7 @@ expr_expr: ...@@ -1808,7 +1808,7 @@ expr_expr:
| expr IN_SYM in_subselect | expr IN_SYM in_subselect
{ $$= new Item_in_subselect(YYTHD, $1, $3); } { $$= new Item_in_subselect(YYTHD, $1, $3); }
| expr NOT IN_SYM in_subselect | expr NOT IN_SYM in_subselect
{ {
$$= new Item_func_not(new Item_in_subselect(YYTHD, $1, $4)); $$= new Item_func_not(new Item_in_subselect(YYTHD, $1, $4));
} }
| expr BETWEEN_SYM no_and_expr AND expr | expr BETWEEN_SYM no_and_expr AND expr
...@@ -1829,7 +1829,7 @@ expr_expr: ...@@ -1829,7 +1829,7 @@ expr_expr:
| expr comp_op expr %prec EQ { $$= (*((*$2)(0)))($1,$3); } | expr comp_op expr %prec EQ { $$= (*((*$2)(0)))($1,$3); }
| expr comp_op all_or_any in_subselect %prec EQ | expr comp_op all_or_any in_subselect %prec EQ
{ {
Item_allany_subselect *it= Item_allany_subselect *it=
new Item_allany_subselect(YYTHD, $1, (*$2)($3), $4); new Item_allany_subselect(YYTHD, $1, (*$2)($3), $4);
if ($3) if ($3)
$$ = new Item_func_not(it); /* ALL */ $$ = new Item_func_not(it); /* ALL */
...@@ -1845,7 +1845,7 @@ expr_expr: ...@@ -1845,7 +1845,7 @@ expr_expr:
| expr DIV_SYM expr { $$= new Item_func_int_div($1,$3); } | expr DIV_SYM expr { $$= new Item_func_int_div($1,$3); }
| expr MOD_SYM expr { $$= new Item_func_mod($1,$3); } | expr MOD_SYM expr { $$= new Item_func_mod($1,$3); }
| expr '|' expr { $$= new Item_func_bit_or($1,$3); } | expr '|' expr { $$= new Item_func_bit_or($1,$3); }
| expr '^' expr { $$= new Item_func_bit_xor($1,$3); } | expr '^' expr { $$= new Item_func_bit_xor($1,$3); }
| expr '&' expr { $$= new Item_func_bit_and($1,$3); } | expr '&' expr { $$= new Item_func_bit_and($1,$3); }
| expr '%' expr { $$= new Item_func_mod($1,$3); } | expr '%' expr { $$= new Item_func_mod($1,$3); }
| expr '+' INTERVAL_SYM expr interval | expr '+' INTERVAL_SYM expr interval
...@@ -1875,7 +1875,7 @@ no_in_expr: ...@@ -1875,7 +1875,7 @@ no_in_expr:
| no_in_expr comp_op expr %prec EQ { $$= (*((*$2)(0)))($1,$3); } | no_in_expr comp_op expr %prec EQ { $$= (*((*$2)(0)))($1,$3); }
| no_in_expr comp_op all_or_any in_subselect %prec EQ | no_in_expr comp_op all_or_any in_subselect %prec EQ
{ {
Item_allany_subselect *it= Item_allany_subselect *it=
new Item_allany_subselect(YYTHD, $1, (*$2)($3), $4); new Item_allany_subselect(YYTHD, $1, (*$2)($3), $4);
if ($3) if ($3)
$$ = new Item_func_not(it); /* ALL */ $$ = new Item_func_not(it); /* ALL */
...@@ -1909,7 +1909,7 @@ no_and_expr: ...@@ -1909,7 +1909,7 @@ no_and_expr:
| no_and_expr IN_SYM in_subselect | no_and_expr IN_SYM in_subselect
{ $$= new Item_in_subselect(YYTHD, $1, $3); } { $$= new Item_in_subselect(YYTHD, $1, $3); }
| no_and_expr NOT IN_SYM in_subselect | no_and_expr NOT IN_SYM in_subselect
{ {
$$= new Item_func_not(new Item_in_subselect(YYTHD, $1, $4)); $$= new Item_func_not(new Item_in_subselect(YYTHD, $1, $4));
} }
| no_and_expr BETWEEN_SYM no_and_expr AND expr | no_and_expr BETWEEN_SYM no_and_expr AND expr
...@@ -1929,7 +1929,7 @@ no_and_expr: ...@@ -1929,7 +1929,7 @@ no_and_expr:
| no_and_expr comp_op expr %prec EQ { $$= (*((*$2)(0)))($1,$3); } | no_and_expr comp_op expr %prec EQ { $$= (*((*$2)(0)))($1,$3); }
| no_and_expr comp_op all_or_any in_subselect %prec EQ | no_and_expr comp_op all_or_any in_subselect %prec EQ
{ {
Item_allany_subselect *it= Item_allany_subselect *it=
new Item_allany_subselect(YYTHD, $1, (*$2)($3), $4); new Item_allany_subselect(YYTHD, $1, (*$2)($3), $4);
if ($3) if ($3)
$$ = new Item_func_not(it); /* ALL */ $$ = new Item_func_not(it); /* ALL */
...@@ -1963,7 +1963,7 @@ simple_expr: ...@@ -1963,7 +1963,7 @@ simple_expr:
$$= new Item_func_set_user_var($2,$4); $$= new Item_func_set_user_var($2,$4);
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
} }
| '@' ident_or_text | '@' ident_or_text
{ {
$$= new Item_func_get_user_var($2); $$= new Item_func_get_user_var($2);
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
...@@ -2031,8 +2031,8 @@ simple_expr: ...@@ -2031,8 +2031,8 @@ simple_expr:
| CURTIME optional_braces | CURTIME optional_braces
{ $$= new Item_func_curtime(); Lex->safe_to_cache_query=0; } { $$= new Item_func_curtime(); Lex->safe_to_cache_query=0; }
| CURTIME '(' expr ')' | CURTIME '(' expr ')'
{ {
$$= new Item_func_curtime($3); $$= new Item_func_curtime($3);
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
} }
| DATE_ADD_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' | DATE_ADD_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')'
...@@ -2040,9 +2040,9 @@ simple_expr: ...@@ -2040,9 +2040,9 @@ simple_expr:
| DATE_SUB_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' | DATE_SUB_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')'
{ $$= new Item_date_add_interval($3,$6,$7,1); } { $$= new Item_date_add_interval($3,$6,$7,1); }
| DATABASE '(' ')' | DATABASE '(' ')'
{ {
$$= new Item_func_database(); $$= new Item_func_database();
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
} }
| ELT_FUNC '(' expr ',' expr_list ')' | ELT_FUNC '(' expr ',' expr_list ')'
{ $$= new Item_func_elt($3, *$5); } { $$= new Item_func_elt($3, *$5); }
...@@ -2051,7 +2051,7 @@ simple_expr: ...@@ -2051,7 +2051,7 @@ simple_expr:
| ENCRYPT '(' expr ')' | ENCRYPT '(' expr ')'
{ {
$$= new Item_func_encrypt($3); $$= new Item_func_encrypt($3);
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
} }
| ENCRYPT '(' expr ',' expr ')' { $$= new Item_func_encrypt($3,$5); } | ENCRYPT '(' expr ',' expr ')' { $$= new Item_func_encrypt($3,$5); }
| DECODE_SYM '(' expr ',' TEXT_STRING ')' | DECODE_SYM '(' expr ',' TEXT_STRING ')'
...@@ -2089,8 +2089,8 @@ simple_expr: ...@@ -2089,8 +2089,8 @@ simple_expr:
| GEOMFROMTEXT '(' expr ',' expr ')' | GEOMFROMTEXT '(' expr ',' expr ')'
{ $$= new Item_func_geometry_from_text($3); } { $$= new Item_func_geometry_from_text($3); }
| GEOMETRYCOLLECTION '(' expr_list ')' | GEOMETRYCOLLECTION '(' expr_list ')'
{ $$= new Item_func_spatial_collection(* $3, { $$= new Item_func_spatial_collection(* $3,
Geometry::wkbGeometryCollection, Geometry::wkbGeometryCollection,
Geometry::wkbPoint); } Geometry::wkbPoint); }
| HOUR_SYM '(' expr ')' | HOUR_SYM '(' expr ')'
{ $$= new Item_func_hour($3); } { $$= new Item_func_hour($3); }
...@@ -2116,7 +2116,7 @@ simple_expr: ...@@ -2116,7 +2116,7 @@ simple_expr:
| LEFT '(' expr ',' expr ')' | LEFT '(' expr ',' expr ')'
{ $$= new Item_func_left($3,$5); } { $$= new Item_func_left($3,$5); }
| LINESTRING '(' expr_list ')' | LINESTRING '(' expr_list ')'
{ $$= new Item_func_spatial_collection(* $3, { $$= new Item_func_spatial_collection(* $3,
Geometry::wkbLineString, Geometry::wkbPoint); } Geometry::wkbLineString, Geometry::wkbPoint); }
| LOCATE '(' expr ',' expr ')' | LOCATE '(' expr ',' expr ')'
{ $$= new Item_func_locate($5,$3); } { $$= new Item_func_locate($5,$3); }
...@@ -2145,7 +2145,7 @@ simple_expr: ...@@ -2145,7 +2145,7 @@ simple_expr:
| MONTH_SYM '(' expr ')' | MONTH_SYM '(' expr ')'
{ $$= new Item_func_month($3); } { $$= new Item_func_month($3); }
| MULTILINESTRING '(' expr_list ')' | MULTILINESTRING '(' expr_list ')'
{ $$= new Item_func_spatial_collection(* $3, { $$= new Item_func_spatial_collection(* $3,
Geometry::wkbMultiLineString, Geometry::wkbLineString); } Geometry::wkbMultiLineString, Geometry::wkbLineString); }
| MLINEFROMTEXT '(' expr ')' | MLINEFROMTEXT '(' expr ')'
{ $$= new Item_func_geometry_from_text($3); } { $$= new Item_func_geometry_from_text($3); }
...@@ -2160,10 +2160,10 @@ simple_expr: ...@@ -2160,10 +2160,10 @@ simple_expr:
| MPOLYFROMTEXT '(' expr ',' expr ')' | MPOLYFROMTEXT '(' expr ',' expr ')'
{ $$= new Item_func_geometry_from_text($3); } { $$= new Item_func_geometry_from_text($3); }
| MULTIPOINT '(' expr_list ')' | MULTIPOINT '(' expr_list ')'
{ $$= new Item_func_spatial_collection(* $3, { $$= new Item_func_spatial_collection(* $3,
Geometry::wkbMultiPoint, Geometry::wkbPoint); } Geometry::wkbMultiPoint, Geometry::wkbPoint); }
| MULTIPOLYGON '(' expr_list ')' | MULTIPOLYGON '(' expr_list ')'
{ $$= new Item_func_spatial_collection(* $3, { $$= new Item_func_spatial_collection(* $3,
Geometry::wkbMultiPolygon, Geometry::wkbPolygon ); } Geometry::wkbMultiPolygon, Geometry::wkbPolygon ); }
| NOW_SYM optional_braces | NOW_SYM optional_braces
{ $$= new Item_func_now(); Lex->safe_to_cache_query=0;} { $$= new Item_func_now(); Lex->safe_to_cache_query=0;}
...@@ -2182,7 +2182,7 @@ simple_expr: ...@@ -2182,7 +2182,7 @@ simple_expr:
| POLYFROMTEXT '(' expr ',' expr ')' | POLYFROMTEXT '(' expr ',' expr ')'
{ $$= new Item_func_geometry_from_text($3); } { $$= new Item_func_geometry_from_text($3); }
| POLYGON '(' expr_list ')' | POLYGON '(' expr_list ')'
{ $$= new Item_func_spatial_collection(* $3, { $$= new Item_func_spatial_collection(* $3,
Geometry::wkbPolygon, Geometry::wkbLineString); } Geometry::wkbPolygon, Geometry::wkbLineString); }
| POSITION_SYM '(' no_in_expr IN_SYM expr ')' | POSITION_SYM '(' no_in_expr IN_SYM expr ')'
{ $$ = new Item_func_locate($5,$3); } { $$ = new Item_func_locate($5,$3); }
...@@ -2266,7 +2266,7 @@ simple_expr: ...@@ -2266,7 +2266,7 @@ simple_expr:
$$ = new Item_func_udf_int($1); $$ = new Item_func_udf_int($1);
} }
| UNIQUE_USERS '(' text_literal ',' NUM ',' NUM ',' expr_list ')' | UNIQUE_USERS '(' text_literal ',' NUM ',' NUM ',' expr_list ')'
{ {
$$= new Item_func_unique_users($3,atoi($5.str),atoi($7.str), * $9); $$= new Item_func_unique_users($3,atoi($5.str),atoi($7.str), * $9);
} }
| UNIX_TIMESTAMP '(' ')' | UNIX_TIMESTAMP '(' ')'
...@@ -2289,7 +2289,7 @@ simple_expr: ...@@ -2289,7 +2289,7 @@ simple_expr:
| YEARWEEK '(' expr ',' expr ')' | YEARWEEK '(' expr ',' expr ')'
{ $$= new Item_func_yearweek($3, $5); } { $$= new Item_func_yearweek($3, $5); }
| BENCHMARK_SYM '(' ULONG_NUM ',' expr ')' | BENCHMARK_SYM '(' ULONG_NUM ',' expr ')'
{ {
$$=new Item_func_benchmark($3,$5); $$=new Item_func_benchmark($3,$5);
Lex->safe_to_cache_query=0; Lex->safe_to_cache_query=0;
} }
...@@ -2330,7 +2330,7 @@ in_sum_expr: ...@@ -2330,7 +2330,7 @@ in_sum_expr:
if (lex->current_select->inc_in_sum_expr()) if (lex->current_select->inc_in_sum_expr())
{ {
send_error(lex->thd, ER_SYNTAX_ERROR); send_error(lex->thd, ER_SYNTAX_ERROR);
YYABORT; YYABORT;
} }
} }
expr expr
...@@ -2389,7 +2389,7 @@ when_list: ...@@ -2389,7 +2389,7 @@ when_list:
when_list2: when_list2:
expr THEN_SYM expr expr THEN_SYM expr
{ {
SELECT_LEX_NODE *sel=Select; SELECT_LEX_NODE *sel=Select;
sel->when_list.head()->push_back($1); sel->when_list.head()->push_back($1);
sel->when_list.head()->push_back($3); sel->when_list.head()->push_back($3);
} }
...@@ -2483,7 +2483,7 @@ select_derived: ...@@ -2483,7 +2483,7 @@ select_derived:
{ {
LEX *lex= Lex; LEX *lex= Lex;
lex->derived_tables= true; lex->derived_tables= true;
if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE || if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE ||
mysql_new_select(lex, 1)) mysql_new_select(lex, 1))
YYABORT; YYABORT;
mysql_init_select(lex); mysql_init_select(lex);
...@@ -2574,7 +2574,7 @@ opt_table_alias: ...@@ -2574,7 +2574,7 @@ opt_table_alias:
where_clause: where_clause:
/* empty */ { Select->select_lex()->where= 0; } /* empty */ { Select->select_lex()->where= 0; }
| WHERE expr | WHERE expr
{ {
Select->select_lex()->where= $2; Select->select_lex()->where= $2;
...@@ -2654,8 +2654,8 @@ opt_order_clause: ...@@ -2654,8 +2654,8 @@ opt_order_clause:
| order_clause; | order_clause;
order_clause: order_clause:
ORDER_SYM BY ORDER_SYM BY
{ {
LEX *lex=Lex; LEX *lex=Lex;
if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE && if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE &&
lex->current_select->select_lex()->olap != lex->current_select->select_lex()->olap !=
...@@ -2686,7 +2686,7 @@ opt_limit_clause: ...@@ -2686,7 +2686,7 @@ opt_limit_clause:
; ;
limit_clause: limit_clause:
LIMIT LIMIT
{ {
LEX *lex= Lex; LEX *lex= Lex;
if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE && if (lex->current_select->linkage != GLOBAL_OPTIONS_TYPE &&
...@@ -2785,7 +2785,7 @@ select_var_list_init: ...@@ -2785,7 +2785,7 @@ select_var_list_init:
if (!lex->describe && (!(lex->result= new select_dumpvar()))) if (!lex->describe && (!(lex->result= new select_dumpvar())))
YYABORT; YYABORT;
} }
select_var_list select_var_list
; ;
select_var_list: select_var_list:
...@@ -2835,7 +2835,7 @@ into: ...@@ -2835,7 +2835,7 @@ into:
DO statement DO statement
*/ */
do: DO_SYM do: DO_SYM
{ {
LEX *lex=Lex; LEX *lex=Lex;
lex->sql_command = SQLCOM_DO; lex->sql_command = SQLCOM_DO;
...@@ -3105,7 +3105,7 @@ opt_low_priority: ...@@ -3105,7 +3105,7 @@ opt_low_priority:
delete: delete:
DELETE_SYM DELETE_SYM
{ {
LEX *lex= Lex; LEX *lex= Lex;
lex->sql_command= SQLCOM_DELETE; lex->sql_command= SQLCOM_DELETE;
lex->select_lex.options= 0; lex->select_lex.options= 0;
...@@ -3150,7 +3150,7 @@ table_wild_one: ...@@ -3150,7 +3150,7 @@ table_wild_one:
; ;
opt_wild: opt_wild:
/* empty */ {} /* empty */ {}
| '.' '*' {}; | '.' '*' {};
...@@ -3175,11 +3175,11 @@ truncate: ...@@ -3175,11 +3175,11 @@ truncate:
opt_table_sym: opt_table_sym:
/* empty */ /* empty */
| TABLE_SYM; | TABLE_SYM;
/* Show things */ /* Show things */
show: SHOW show: SHOW
{ {
LEX *lex=Lex; LEX *lex=Lex;
lex->wild=0; lex->wild=0;
bzero((char*) &lex->create_info,sizeof(lex->create_info)); bzero((char*) &lex->create_info,sizeof(lex->create_info));
...@@ -3218,7 +3218,7 @@ show_param: ...@@ -3218,7 +3218,7 @@ show_param:
if (!Select->add_table_to_list($4, NULL, 0)) if (!Select->add_table_to_list($4, NULL, 0))
YYABORT; YYABORT;
} }
| NEW_SYM MASTER_SYM FOR_SYM SLAVE WITH MASTER_LOG_FILE_SYM EQ | NEW_SYM MASTER_SYM FOR_SYM SLAVE WITH MASTER_LOG_FILE_SYM EQ
TEXT_STRING AND MASTER_LOG_POS_SYM EQ ulonglong_num TEXT_STRING AND MASTER_LOG_POS_SYM EQ ulonglong_num
AND MASTER_SERVER_ID_SYM EQ AND MASTER_SERVER_ID_SYM EQ
ULONG_NUM ULONG_NUM
...@@ -3266,14 +3266,14 @@ show_param: ...@@ -3266,14 +3266,14 @@ show_param:
LEX *lex=Lex; LEX *lex=Lex;
lex->sql_command= SQLCOM_SHOW_PRIVILEGES; lex->sql_command= SQLCOM_SHOW_PRIVILEGES;
} }
| COUNT_SYM '(' '*' ')' WARNINGS | COUNT_SYM '(' '*' ')' WARNINGS
{ (void) create_select_for_variable("warning_count"); } { (void) create_select_for_variable("warning_count"); }
| COUNT_SYM '(' '*' ')' ERRORS | COUNT_SYM '(' '*' ')' ERRORS
{ (void) create_select_for_variable("error_count"); } { (void) create_select_for_variable("error_count"); }
| WARNINGS {Select->offset_limit=0L;} opt_limit_clause | WARNINGS {Select->offset_limit=0L;} opt_limit_clause
{ Lex->sql_command = SQLCOM_SHOW_WARNS;} { Lex->sql_command = SQLCOM_SHOW_WARNS;}
| ERRORS {Select->offset_limit=0L;} opt_limit_clause | ERRORS {Select->offset_limit=0L;} opt_limit_clause
{ Lex->sql_command = SQLCOM_SHOW_ERRORS;} { Lex->sql_command = SQLCOM_SHOW_ERRORS;}
| STATUS_SYM wild | STATUS_SYM wild
{ Lex->sql_command= SQLCOM_SHOW_STATUS; } { Lex->sql_command= SQLCOM_SHOW_STATUS; }
| INNOBASE_SYM STATUS_SYM | INNOBASE_SYM STATUS_SYM
...@@ -3356,9 +3356,9 @@ describe: ...@@ -3356,9 +3356,9 @@ describe:
} }
opt_describe_column opt_describe_column
| describe_command { Lex->describe=1; } select | describe_command { Lex->describe=1; } select
{ {
LEX *lex=Lex; LEX *lex=Lex;
lex->select_lex.options|= SELECT_DESCRIBE; lex->select_lex.options|= SELECT_DESCRIBE;
}; };
...@@ -3438,7 +3438,7 @@ kill: ...@@ -3438,7 +3438,7 @@ kill:
{ {
LEX *lex=Lex; LEX *lex=Lex;
if ($2->check_cols(1) || $2->fix_fields(lex->thd, 0, &$2)) if ($2->check_cols(1) || $2->fix_fields(lex->thd, 0, &$2))
{ {
send_error(lex->thd, ER_SET_CONSTANTS_ONLY); send_error(lex->thd, ER_SET_CONSTANTS_ONLY);
YYABORT; YYABORT;
} }
...@@ -3554,15 +3554,15 @@ text_string: ...@@ -3554,15 +3554,15 @@ text_string:
$$= tmp ? tmp->val_str((String*) 0) : (String*) 0; $$= tmp ? tmp->val_str((String*) 0) : (String*) 0;
}; };
param_marker: param_marker:
'?' '?'
{ {
LEX *lex=Lex; LEX *lex=Lex;
if (YYTHD->prepare_command) if (YYTHD->prepare_command)
{ {
lex->param_list.push_back($$=new Item_param()); lex->param_list.push_back($$=new Item_param());
lex->param_count++; lex->param_count++;
} }
else else
{ {
yyerror("You have an error in your SQL syntax"); yyerror("You have an error in your SQL syntax");
YYABORT; YYABORT;
...@@ -3932,7 +3932,7 @@ isolation_types: ...@@ -3932,7 +3932,7 @@ isolation_types:
| REPEATABLE_SYM READ_SYM { $$= ISO_REPEATABLE_READ; } | REPEATABLE_SYM READ_SYM { $$= ISO_REPEATABLE_READ; }
| SERIALIZABLE_SYM { $$= ISO_SERIALIZABLE; } | SERIALIZABLE_SYM { $$= ISO_SERIALIZABLE; }
; ;
text_or_password: text_or_password:
TEXT_STRING { $$=$1.str;} TEXT_STRING { $$=$1.str;}
| PASSWORD '(' TEXT_STRING ')' | PASSWORD '(' TEXT_STRING ')'
...@@ -4170,7 +4170,7 @@ require_list_element: ...@@ -4170,7 +4170,7 @@ require_list_element:
lex->ssl_cipher=$2.str; lex->ssl_cipher=$2.str;
} }
; ;
opt_table: opt_table:
'*' '*'
{ {
...@@ -4286,7 +4286,7 @@ column_list_id: ...@@ -4286,7 +4286,7 @@ column_list_id:
require_clause: /* empty */ require_clause: /* empty */
| REQUIRE_SYM require_list | REQUIRE_SYM require_list
{ {
Lex->ssl_type=SSL_TYPE_SPECIFIED; Lex->ssl_type=SSL_TYPE_SPECIFIED;
} }
...@@ -4366,7 +4366,7 @@ union_list: ...@@ -4366,7 +4366,7 @@ union_list:
/* Only the last SELECT can have INTO...... */ /* Only the last SELECT can have INTO...... */
net_printf(lex->thd, ER_WRONG_USAGE, "UNION", "INTO"); net_printf(lex->thd, ER_WRONG_USAGE, "UNION", "INTO");
YYABORT; YYABORT;
} }
if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE) if (lex->current_select->linkage == GLOBAL_OPTIONS_TYPE)
{ {
send_error(lex->thd, ER_SYNTAX_ERROR); send_error(lex->thd, ER_SYNTAX_ERROR);
...@@ -4385,7 +4385,7 @@ union_opt: ...@@ -4385,7 +4385,7 @@ union_opt:
; ;
optional_order_or_limit: optional_order_or_limit:
/* Empty */ {} /* Empty */ {}
| |
{ {
LEX *lex=Lex; LEX *lex=Lex;
...@@ -4395,7 +4395,7 @@ optional_order_or_limit: ...@@ -4395,7 +4395,7 @@ optional_order_or_limit:
YYABORT; YYABORT;
} }
SELECT_LEX *sel= lex->current_select->select_lex(); SELECT_LEX *sel= lex->current_select->select_lex();
sel->master_unit()->global_parameters= sel->master_unit()->global_parameters=
sel->master_unit(); sel->master_unit();
lex->current_select= sel->master_unit(); lex->current_select= sel->master_unit();
lex->current_select->select_limit= lex->current_select->select_limit=
......
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