mirror of
https://github.com/MariaDB/server.git
synced 2025-07-04 01:23:45 +03:00
merge
This commit is contained in:
16
.bzrignore
16
.bzrignore
@ -23,6 +23,7 @@
|
|||||||
.vimrc
|
.vimrc
|
||||||
50
|
50
|
||||||
=6
|
=6
|
||||||
|
BUILD/compile-pentium-maintainer
|
||||||
BitKeeper/etc/config
|
BitKeeper/etc/config
|
||||||
BitKeeper/etc/csets
|
BitKeeper/etc/csets
|
||||||
BitKeeper/etc/csets-in
|
BitKeeper/etc/csets-in
|
||||||
@ -30,6 +31,8 @@ BitKeeper/etc/csets-out
|
|||||||
BitKeeper/etc/gone
|
BitKeeper/etc/gone
|
||||||
BitKeeper/etc/level
|
BitKeeper/etc/level
|
||||||
BitKeeper/etc/pushed
|
BitKeeper/etc/pushed
|
||||||
|
BitKeeper/post-commit
|
||||||
|
BitKeeper/post-commit-manual
|
||||||
BitKeeper/tmp/*
|
BitKeeper/tmp/*
|
||||||
BitKeeper/tmp/bkr3sAHD
|
BitKeeper/tmp/bkr3sAHD
|
||||||
BitKeeper/tmp/gone
|
BitKeeper/tmp/gone
|
||||||
@ -223,6 +226,7 @@ bkpull.log.5
|
|||||||
bkpull.log.6
|
bkpull.log.6
|
||||||
bkpush.log
|
bkpush.log
|
||||||
build.log
|
build.log
|
||||||
|
build_tags.sh
|
||||||
client/insert_test
|
client/insert_test
|
||||||
client/log_event.cc
|
client/log_event.cc
|
||||||
client/log_event.h
|
client/log_event.h
|
||||||
@ -311,6 +315,8 @@ libmysql_r/conf_to_src
|
|||||||
libmysql_r/my_static.h
|
libmysql_r/my_static.h
|
||||||
libmysql_r/mysys_priv.h
|
libmysql_r/mysys_priv.h
|
||||||
libmysqld/backup_dir
|
libmysqld/backup_dir
|
||||||
|
libmysqld/client.c
|
||||||
|
libmysqld/client_settings.h
|
||||||
libmysqld/convert.cc
|
libmysqld/convert.cc
|
||||||
libmysqld/derror.cc
|
libmysqld/derror.cc
|
||||||
libmysqld/errmsg.c
|
libmysqld/errmsg.c
|
||||||
@ -355,6 +361,7 @@ libmysqld/item_sum.cc
|
|||||||
libmysqld/item_timefunc.cc
|
libmysqld/item_timefunc.cc
|
||||||
libmysqld/item_uniq.cc
|
libmysqld/item_uniq.cc
|
||||||
libmysqld/key.cc
|
libmysqld/key.cc
|
||||||
|
libmysqld/libmysql.c
|
||||||
libmysqld/lock.cc
|
libmysqld/lock.cc
|
||||||
libmysqld/log.cc
|
libmysqld/log.cc
|
||||||
libmysqld/log_event.cc
|
libmysqld/log_event.cc
|
||||||
@ -366,6 +373,7 @@ libmysqld/net_serv.cc
|
|||||||
libmysqld/opt_ft.cc
|
libmysqld/opt_ft.cc
|
||||||
libmysqld/opt_range.cc
|
libmysqld/opt_range.cc
|
||||||
libmysqld/opt_sum.cc
|
libmysqld/opt_sum.cc
|
||||||
|
libmysqld/pack.c
|
||||||
libmysqld/password.c
|
libmysqld/password.c
|
||||||
libmysqld/procedure.cc
|
libmysqld/procedure.cc
|
||||||
libmysqld/protocol.cc
|
libmysqld/protocol.cc
|
||||||
@ -473,6 +481,7 @@ mysql-test/r/rpl_log.eval
|
|||||||
mysql-test/r/slave-running.eval
|
mysql-test/r/slave-running.eval
|
||||||
mysql-test/r/slave-stopped.eval
|
mysql-test/r/slave-stopped.eval
|
||||||
mysql-test/share/mysql
|
mysql-test/share/mysql
|
||||||
|
mysql-test/std_data/*.pem
|
||||||
mysql-test/var/*
|
mysql-test/var/*
|
||||||
mysql.kdevprj
|
mysql.kdevprj
|
||||||
mysql.proj
|
mysql.proj
|
||||||
@ -482,6 +491,7 @@ mysys/#mf_iocache.c#
|
|||||||
mysys/charset2html
|
mysys/charset2html
|
||||||
mysys/getopt.c
|
mysys/getopt.c
|
||||||
mysys/getopt1.c
|
mysys/getopt1.c
|
||||||
|
mysys/main.cc
|
||||||
mysys/ste5KbMa
|
mysys/ste5KbMa
|
||||||
mysys/test_charset
|
mysys/test_charset
|
||||||
mysys/test_dir
|
mysys/test_dir
|
||||||
@ -585,6 +595,7 @@ stamp-h1
|
|||||||
stamp-h2
|
stamp-h2
|
||||||
stamp-h3
|
stamp-h3
|
||||||
stamp-h4
|
stamp-h4
|
||||||
|
start_mysqld.sh
|
||||||
strings/conf_to_src
|
strings/conf_to_src
|
||||||
strings/ctype_autoconf.c
|
strings/ctype_autoconf.c
|
||||||
strings/ctype_extra_sources.c
|
strings/ctype_extra_sources.c
|
||||||
@ -611,6 +622,7 @@ support-files/mysql.spec
|
|||||||
tags
|
tags
|
||||||
test_xml
|
test_xml
|
||||||
tests/client_test
|
tests/client_test
|
||||||
|
tests/connect_test
|
||||||
thread_test
|
thread_test
|
||||||
tmp/*
|
tmp/*
|
||||||
tools/my_vsnprintf.c
|
tools/my_vsnprintf.c
|
||||||
@ -622,7 +634,3 @@ vio/test-ssl
|
|||||||
vio/test-sslclient
|
vio/test-sslclient
|
||||||
vio/test-sslserver
|
vio/test-sslserver
|
||||||
vio/viotest-ssl
|
vio/viotest-ssl
|
||||||
libmysqld/client.c
|
|
||||||
libmysqld/client_settings.h
|
|
||||||
libmysqld/libmysql.c
|
|
||||||
libmysqld/pack.c
|
|
||||||
|
@ -23,12 +23,16 @@ autoconf || (echo \"Can't execute autoconf\" && exit 1)
|
|||||||
if [ -d gemini ]
|
if [ -d gemini ]
|
||||||
then
|
then
|
||||||
(cd gemini && aclocal && autoheader && aclocal && automake && autoconf)
|
(cd gemini && aclocal && autoheader && aclocal && automake && autoconf)
|
||||||
fi
|
fi"
|
||||||
|
|
||||||
|
if [ -z "$just_clean" ]
|
||||||
|
then
|
||||||
|
commands="$commands
|
||||||
CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\" CXXLDFLAGS=\"$CXXLDFLAGS\" \
|
CFLAGS=\"$cflags\" CXX=\"$CXX\" CXXFLAGS=\"$cxxflags\" CXXLDFLAGS=\"$CXXLDFLAGS\" \
|
||||||
$configure"
|
$configure"
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$just_configure" ]
|
if [ -z "$just_configure" -a -z "$just_clean" ]
|
||||||
then
|
then
|
||||||
commands="$commands
|
commands="$commands
|
||||||
|
|
||||||
|
8
BUILD/cleanup
Executable file
8
BUILD/cleanup
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
|
||||||
|
path=`dirname $0`
|
||||||
|
. "$path/SETUP.sh"
|
||||||
|
|
||||||
|
just_clean=1;
|
||||||
|
|
||||||
|
. "$path/FINISH.sh"
|
0
INSTALL-WIN-SOURCE
Executable file → Normal file
0
INSTALL-WIN-SOURCE
Executable file → Normal file
@ -769,9 +769,12 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (argv[1][0])
|
if (argv[1][0])
|
||||||
make_scrambled_password(crypted_pw,argv[1],
|
{
|
||||||
(find_type(argv[0], &command_typelib, 2) ==
|
if (find_type(argv[0], &command_typelib, 2) == ADMIN_OLD_PASSWORD)
|
||||||
ADMIN_OLD_PASSWORD), &rand_st);
|
make_scrambled_password_323(crypted_pw, argv[1]);
|
||||||
|
else
|
||||||
|
make_scrambled_password(crypted_pw, argv[1]);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
crypted_pw[0]=0; /* No password */
|
crypted_pw[0]=0; /* No password */
|
||||||
sprintf(buff,"set password='%s',sql_log_off=0",crypted_pw);
|
sprintf(buff,"set password='%s',sql_log_off=0",crypted_pw);
|
||||||
|
@ -1137,7 +1137,7 @@ static void dumpTable(uint numFields, char *table)
|
|||||||
safe_exit(EX_CONSCHECK);
|
safe_exit(EX_CONSCHECK);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (extended_insert)
|
if (extended_insert && !opt_xml)
|
||||||
{
|
{
|
||||||
ulong length = lengths[i];
|
ulong length = lengths[i];
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
@ -1222,7 +1222,7 @@ static void dumpTable(uint numFields, char *table)
|
|||||||
if (opt_xml)
|
if (opt_xml)
|
||||||
fprintf(md_result_file, "\t</row>\n");
|
fprintf(md_result_file, "\t</row>\n");
|
||||||
|
|
||||||
if (extended_insert)
|
if (extended_insert && !opt_xml)
|
||||||
{
|
{
|
||||||
ulong row_length;
|
ulong row_length;
|
||||||
dynstr_append(&extended_row,")");
|
dynstr_append(&extended_row,")");
|
||||||
@ -1404,7 +1404,7 @@ static int init_dumping(char *database)
|
|||||||
(opt_quoted ? "`" : ""));
|
(opt_quoted ? "`" : ""));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (extended_insert)
|
if (extended_insert && !opt_xml)
|
||||||
if (init_dynamic_string(&extended_row, "", 1024, 1024))
|
if (init_dynamic_string(&extended_row, "", 1024, 1024))
|
||||||
exit(EX_EOM);
|
exit(EX_EOM);
|
||||||
return 0;
|
return 0;
|
||||||
@ -1676,7 +1676,7 @@ int main(int argc, char **argv)
|
|||||||
if (md_result_file != stdout)
|
if (md_result_file != stdout)
|
||||||
my_fclose(md_result_file, MYF(0));
|
my_fclose(md_result_file, MYF(0));
|
||||||
my_free(opt_password, MYF(MY_ALLOW_ZERO_PTR));
|
my_free(opt_password, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
if (extended_insert)
|
if (extended_insert & !opt_xml)
|
||||||
dynstr_free(&extended_row);
|
dynstr_free(&extended_row);
|
||||||
my_end(0);
|
my_end(0);
|
||||||
return(first_error);
|
return(first_error);
|
||||||
|
@ -86,3 +86,4 @@ extern const char *client_errors[]; /* Error messages */
|
|||||||
#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2045
|
#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2045
|
||||||
#define CR_CONN_UNKNOW_PROTOCOL 2046
|
#define CR_CONN_UNKNOW_PROTOCOL 2046
|
||||||
#define CR_INVALID_CONN_HANDLE 2047
|
#define CR_INVALID_CONN_HANDLE 2047
|
||||||
|
#define CR_MYSQL_SERVER_INIT_MISSED 2048
|
||||||
|
@ -111,7 +111,6 @@ void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/
|
|||||||
#endif
|
#endif
|
||||||
#define pthread_self() win_pthread_self
|
#define pthread_self() win_pthread_self
|
||||||
#define HAVE_LOCALTIME_R 1
|
#define HAVE_LOCALTIME_R 1
|
||||||
#define HAVE_GMTIME_R 1
|
|
||||||
#define _REENTRANT 1
|
#define _REENTRANT 1
|
||||||
#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1
|
#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1
|
||||||
|
|
||||||
|
@ -213,7 +213,7 @@ extern uint get_charset_number(const char *cs_name);
|
|||||||
extern const char *get_charset_name(uint cs_number);
|
extern const char *get_charset_name(uint cs_number);
|
||||||
extern CHARSET_INFO *get_charset(uint cs_number, myf flags);
|
extern CHARSET_INFO *get_charset(uint cs_number, myf flags);
|
||||||
extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags);
|
extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags);
|
||||||
extern CHARSET_INFO *get_charset_by_csname(const char *cs_name,
|
extern CHARSET_INFO *get_charset_by_csname(const char *cs_name,
|
||||||
uint cs_flags, myf my_flags);
|
uint cs_flags, myf my_flags);
|
||||||
extern void free_charsets(void);
|
extern void free_charsets(void);
|
||||||
extern char *get_charsets_dir(char *buf);
|
extern char *get_charsets_dir(char *buf);
|
||||||
@ -507,6 +507,8 @@ typedef struct st_keycache
|
|||||||
ulonglong size;
|
ulonglong size;
|
||||||
} KEY_CACHE;
|
} KEY_CACHE;
|
||||||
|
|
||||||
|
typedef uint32 ha_checksum;
|
||||||
|
|
||||||
#include <my_alloc.h>
|
#include <my_alloc.h>
|
||||||
|
|
||||||
/* Prototypes for mysys and my_func functions */
|
/* Prototypes for mysys and my_func functions */
|
||||||
@ -749,10 +751,11 @@ extern void print_defaults(const char *conf_file, const char **groups);
|
|||||||
extern my_bool my_compress(byte *, ulong *, ulong *);
|
extern my_bool my_compress(byte *, ulong *, ulong *);
|
||||||
extern my_bool my_uncompress(byte *, ulong *, ulong *);
|
extern my_bool my_uncompress(byte *, ulong *, ulong *);
|
||||||
extern byte *my_compress_alloc(const byte *packet, ulong *len, ulong *complen);
|
extern byte *my_compress_alloc(const byte *packet, ulong *len, ulong *complen);
|
||||||
extern ulong checksum(const byte *mem, uint count);
|
extern ha_checksum my_checksum(ha_checksum crc, const byte *mem, uint count);
|
||||||
extern uint my_bit_log2(ulong value);
|
extern uint my_bit_log2(ulong value);
|
||||||
uint my_count_bits(ulonglong v);
|
extern uint my_count_bits(ulonglong v);
|
||||||
extern void my_sleep(ulong m_seconds);
|
extern void my_sleep(ulong m_seconds);
|
||||||
|
extern ulong crc32(ulong crc, const uchar *buf, uint len);
|
||||||
|
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
extern my_bool have_tcpip; /* Is set if tcpip is used */
|
extern my_bool have_tcpip; /* Is set if tcpip is used */
|
||||||
|
@ -53,8 +53,6 @@ extern "C" {
|
|||||||
|
|
||||||
#define mi_portable_sizeof_char_ptr 8
|
#define mi_portable_sizeof_char_ptr 8
|
||||||
|
|
||||||
typedef uint32 ha_checksum;
|
|
||||||
|
|
||||||
/* Param to/from mi_info */
|
/* Param to/from mi_info */
|
||||||
|
|
||||||
typedef struct st_mi_isaminfo /* Struct from h_info */
|
typedef struct st_mi_isaminfo /* Struct from h_info */
|
||||||
|
@ -229,7 +229,9 @@ typedef struct st_mysql
|
|||||||
enum mysql_status status;
|
enum mysql_status status;
|
||||||
my_bool free_me; /* If free in mysql_close */
|
my_bool free_me; /* If free in mysql_close */
|
||||||
my_bool reconnect; /* set to 1 if automatic reconnect */
|
my_bool reconnect; /* set to 1 if automatic reconnect */
|
||||||
char scramble_buff[21]; /* New protocol requires longer scramble*/
|
|
||||||
|
/* session-wide random string */
|
||||||
|
char scramble[SCRAMBLE_LENGTH+1];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Set if this is the original connection, not a master or a slave we have
|
Set if this is the original connection, not a master or a slave we have
|
||||||
@ -541,16 +543,16 @@ typedef struct st_mysql_stmt
|
|||||||
|
|
||||||
typedef struct st_mysql_methods
|
typedef struct st_mysql_methods
|
||||||
{
|
{
|
||||||
my_bool STDCALL (*read_query_result)(MYSQL *mysql);
|
my_bool (STDCALL *read_query_result)(MYSQL *mysql);
|
||||||
my_bool STDCALL (*advanced_command)(MYSQL *mysql,
|
my_bool (STDCALL *advanced_command)(MYSQL *mysql,
|
||||||
enum enum_server_command command,
|
enum enum_server_command command,
|
||||||
const char *header,
|
const char *header,
|
||||||
unsigned long header_length,
|
unsigned long header_length,
|
||||||
const char *arg,
|
const char *arg,
|
||||||
unsigned long arg_length, my_bool skip_check);
|
unsigned long arg_length, my_bool skip_check);
|
||||||
MYSQL_RES * STDCALL (*store_result)(MYSQL *mysql);
|
MYSQL_RES * (STDCALL *store_result)(MYSQL *mysql);
|
||||||
MYSQL_RES * STDCALL (*use_result)(MYSQL *mysql);
|
MYSQL_RES * (STDCALL *use_result)(MYSQL *mysql);
|
||||||
void STDCALL (*fetch_lengths)(unsigned long *to, MYSQL_ROW column, uint field_count);
|
void (STDCALL *fetch_lengths)(unsigned long *to, MYSQL_ROW column, uint field_count);
|
||||||
} MYSQL_METHODS;
|
} MYSQL_METHODS;
|
||||||
|
|
||||||
MYSQL_STMT * STDCALL mysql_prepare(MYSQL * mysql, const char *query,
|
MYSQL_STMT * STDCALL mysql_prepare(MYSQL * mysql, const char *query,
|
||||||
|
@ -49,8 +49,15 @@ enum enum_server_command
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#define SCRAMBLE_LENGTH 8
|
/*
|
||||||
#define SCRAMBLE41_LENGTH 20
|
Length of random string sent by server on handshake; this is also length of
|
||||||
|
obfuscated password, recieved from client
|
||||||
|
*/
|
||||||
|
#define SCRAMBLE_LENGTH 20
|
||||||
|
#define SCRAMBLE_LENGTH_323 8
|
||||||
|
/* length of password stored in the db: new passwords are preceeded with '*' */
|
||||||
|
#define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH*2+1)
|
||||||
|
#define SCRAMBLED_PASSWORD_CHAR_LENGTH_323 (SCRAMBLE_LENGTH_323*2)
|
||||||
|
|
||||||
|
|
||||||
#define NOT_NULL_FLAG 1 /* Field can't be NULL */
|
#define NOT_NULL_FLAG 1 /* Field can't be NULL */
|
||||||
@ -302,31 +309,34 @@ extern "C" {
|
|||||||
extern unsigned long max_allowed_packet;
|
extern unsigned long max_allowed_packet;
|
||||||
extern unsigned long net_buffer_length;
|
extern unsigned long net_buffer_length;
|
||||||
|
|
||||||
void randominit(struct rand_struct *,unsigned long seed1,
|
/*
|
||||||
unsigned long seed2);
|
These functions are used for authentication by client and server and
|
||||||
|
implemented in sql/password.c
|
||||||
|
*/
|
||||||
|
|
||||||
|
void randominit(struct rand_struct *, unsigned long seed1,
|
||||||
|
unsigned long seed2);
|
||||||
double my_rnd(struct rand_struct *);
|
double my_rnd(struct rand_struct *);
|
||||||
void make_scrambled_password(char *to,const char *password,
|
void create_random_string(char *to, uint length, struct rand_struct *rand_st);
|
||||||
my_bool force_old_scramble,struct rand_struct *rand_st);
|
|
||||||
int get_password_length(my_bool force_old_scramble);
|
void hash_password(unsigned long *to, const char *password, uint password_len);
|
||||||
char get_password_version(const char* password);
|
void make_scrambled_password_323(char *to, const char *password);
|
||||||
void create_random_string(int length,struct rand_struct *rand_st,char* target);
|
void scramble_323(char *to, const char *message, const char *password);
|
||||||
my_bool validate_password(const char* password, const char* message,
|
my_bool check_scramble_323(const char *, const char *message,
|
||||||
unsigned long* salt);
|
unsigned long *salt);
|
||||||
void password_hash_stage1(char *to, const char *password);
|
void get_salt_from_password_323(unsigned long *res, const char *password);
|
||||||
void password_hash_stage2(char *to,const char *salt);
|
void make_password_from_salt_323(char *to, const unsigned long *salt);
|
||||||
void password_crypt(const char* from,char* to, const char* password,int length);
|
|
||||||
void get_hash_and_password(unsigned long* salt, unsigned char pversion,char* hash,
|
void make_scrambled_password(char *to, const char *password);
|
||||||
unsigned char* bin_password);
|
void scramble(char *to, const char *message, const char *password);
|
||||||
void get_salt_from_password(unsigned long *res,const char *password);
|
my_bool check_scramble(const char *reply, const char *message,
|
||||||
void create_key_from_old_password(const char* password,char* key);
|
const unsigned char *hash_stage2);
|
||||||
void make_password_from_salt(char *to, unsigned long *hash_res,
|
void get_salt_from_password(unsigned char *res, const char *password);
|
||||||
unsigned char password_version);
|
void make_password_from_salt(char *to, const unsigned char *hash_stage2);
|
||||||
char *scramble(char *to,const char *message,const char *password,
|
|
||||||
my_bool old_ver);
|
/* end of password.c */
|
||||||
my_bool check_scramble(const char *, const char *message,
|
|
||||||
unsigned long *salt,my_bool old_ver);
|
|
||||||
char *get_tty_password(char *opt_message);
|
char *get_tty_password(char *opt_message);
|
||||||
void hash_password(unsigned long *result, const char *password);
|
|
||||||
const char *mysql_errno_to_sqlstate(unsigned int mysql_errno);
|
const char *mysql_errno_to_sqlstate(unsigned int mysql_errno);
|
||||||
|
|
||||||
/* Some other useful functions */
|
/* Some other useful functions */
|
||||||
|
@ -289,5 +289,7 @@
|
|||||||
#define ER_CANT_AGGREGATE_NCOLLATIONS 1270
|
#define ER_CANT_AGGREGATE_NCOLLATIONS 1270
|
||||||
#define ER_VARIABLE_IS_NOT_STRUCT 1271
|
#define ER_VARIABLE_IS_NOT_STRUCT 1271
|
||||||
#define ER_UNKNOWN_COLLATION 1272
|
#define ER_UNKNOWN_COLLATION 1272
|
||||||
#define ER_WARN_FIELD_RESOLVED 1273
|
#define ER_SLAVE_IGNORED_SSL_PARAMS 1273
|
||||||
#define ER_ERROR_MESSAGES 274
|
#define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1274
|
||||||
|
#define ER_WARN_FIELD_RESOLVED 1275
|
||||||
|
#define ER_ERROR_MESSAGES 276
|
||||||
|
@ -100,7 +100,7 @@ typedef struct st_alarm {
|
|||||||
#define thr_alarm_init(A) (*(A))=0
|
#define thr_alarm_init(A) (*(A))=0
|
||||||
#define thr_alarm_in_use(A) (*(A)!= 0)
|
#define thr_alarm_in_use(A) (*(A)!= 0)
|
||||||
void init_thr_alarm(uint max_alarm);
|
void init_thr_alarm(uint max_alarm);
|
||||||
bool thr_alarm(thr_alarm_t *alarmed, uint sec, ALARM *buff);
|
my_bool thr_alarm(thr_alarm_t *alarmed, uint sec, ALARM *buff);
|
||||||
void thr_alarm_kill(pthread_t thread_id);
|
void thr_alarm_kill(pthread_t thread_id);
|
||||||
void thr_end_alarm(thr_alarm_t *alarmed);
|
void thr_end_alarm(thr_alarm_t *alarmed);
|
||||||
void end_thr_alarm(my_bool free_structures);
|
void end_thr_alarm(my_bool free_structures);
|
||||||
|
@ -2170,7 +2170,7 @@ row_sel_store_mysql_rec(
|
|||||||
ulint len;
|
ulint len;
|
||||||
byte* blob_buf;
|
byte* blob_buf;
|
||||||
ulint i;
|
ulint i;
|
||||||
|
|
||||||
ut_ad(prebuilt->mysql_template);
|
ut_ad(prebuilt->mysql_template);
|
||||||
|
|
||||||
if (prebuilt->blob_heap != NULL) {
|
if (prebuilt->blob_heap != NULL) {
|
||||||
@ -2178,9 +2178,9 @@ row_sel_store_mysql_rec(
|
|||||||
prebuilt->blob_heap = NULL;
|
prebuilt->blob_heap = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark all columns as not SQL NULL */
|
/* Mark all columns as SQL NULL */
|
||||||
|
|
||||||
memset(mysql_rec, '\0', prebuilt->null_bitmap_len);
|
memset(mysql_rec, 255, prebuilt->null_bitmap_len);
|
||||||
|
|
||||||
for (i = 0; i < prebuilt->n_template; i++) {
|
for (i = 0; i < prebuilt->n_template; i++) {
|
||||||
|
|
||||||
@ -2235,16 +2235,21 @@ row_sel_store_mysql_rec(
|
|||||||
|
|
||||||
data = blob_buf;
|
data = blob_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
row_sel_field_store_in_mysql_format(
|
row_sel_field_store_in_mysql_format(
|
||||||
mysql_rec + templ->mysql_col_offset,
|
mysql_rec + templ->mysql_col_offset,
|
||||||
templ->mysql_col_len, data, len,
|
templ->mysql_col_len, data, len,
|
||||||
templ->type, templ->is_unsigned);
|
templ->type, templ->is_unsigned);
|
||||||
|
|
||||||
if (extern_field_heap) {
|
if (extern_field_heap) {
|
||||||
mem_heap_free(extern_field_heap);
|
mem_heap_free(extern_field_heap);
|
||||||
extern_field_heap = NULL;
|
extern_field_heap = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (templ->mysql_null_bit_mask) {
|
||||||
|
mysql_rec[templ->mysql_null_byte_offset] &=
|
||||||
|
~(byte) (templ->mysql_null_bit_mask);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* MySQL seems to assume the field for an SQL NULL
|
/* MySQL seems to assume the field for an SQL NULL
|
||||||
value is set to zero. Not taking this into account
|
value is set to zero. Not taking this into account
|
||||||
@ -2252,19 +2257,13 @@ row_sel_store_mysql_rec(
|
|||||||
bug number 154 in the MySQL bug database: GROUP BY
|
bug number 154 in the MySQL bug database: GROUP BY
|
||||||
and DISTINCT could treat NULL values inequal. */
|
and DISTINCT could treat NULL values inequal. */
|
||||||
|
|
||||||
memset(mysql_rec + templ->mysql_col_offset, '\0',
|
memset(mysql_rec + templ->mysql_col_offset,
|
||||||
|
((templ->type == DATA_VARCHAR ||
|
||||||
|
templ->type == DATA_VARMYSQL ||
|
||||||
|
templ->type == DATA_BINARY) ? ' ' : '\0'),
|
||||||
templ->mysql_col_len);
|
templ->mysql_col_len);
|
||||||
|
|
||||||
if (!templ->mysql_null_bit_mask) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"InnoDB: Error: trying to return an SQL NULL field in a non-null\n"
|
|
||||||
"innoDB: column! Table name %s\n", prebuilt->table->name);
|
|
||||||
} else {
|
|
||||||
mysql_rec[templ->mysql_null_byte_offset] |=
|
|
||||||
(byte) (templ->mysql_null_bit_mask);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
@ -1328,7 +1328,7 @@ int extend;
|
|||||||
print_error("Found wrong record at %lu",(ulong) start_recpos);
|
print_error("Found wrong record at %lu",(ulong) start_recpos);
|
||||||
got_error=1;
|
got_error=1;
|
||||||
}
|
}
|
||||||
crc^=checksum(record,info->s->base.reclength);
|
crc^=_nisam_checksum(record,info->s->base.reclength);
|
||||||
link_used+=info->s->pack.ref_length;
|
link_used+=info->s->pack.ref_length;
|
||||||
used+=block_info.rec_len+info->s->pack.ref_length;
|
used+=block_info.rec_len+info->s->pack.ref_length;
|
||||||
}
|
}
|
||||||
|
@ -358,6 +358,7 @@ extern int _nisam_read_pack_record(N_INFO *info,ulong filepos,byte *buf);
|
|||||||
extern int _nisam_read_rnd_pack_record(N_INFO*, byte *,ulong, int);
|
extern int _nisam_read_rnd_pack_record(N_INFO*, byte *,ulong, int);
|
||||||
extern int _nisam_pack_rec_unpack(N_INFO *info,byte *to,byte *from,
|
extern int _nisam_pack_rec_unpack(N_INFO *info,byte *to,byte *from,
|
||||||
uint reclength);
|
uint reclength);
|
||||||
|
extern ulong _nisam_checksum(const byte *mem, uint count);
|
||||||
|
|
||||||
typedef struct st_sortinfo {
|
typedef struct st_sortinfo {
|
||||||
uint key_length;
|
uint key_length;
|
||||||
|
19
isam/open.c
19
isam/open.c
@ -453,3 +453,22 @@ static void setup_key_functions(register N_KEYDEF *keyinfo)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Calculate a long checksum for a memoryblock. Used to verify pack_isam
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
checksum()
|
||||||
|
mem Pointer to memory block
|
||||||
|
count Count of bytes
|
||||||
|
*/
|
||||||
|
|
||||||
|
ulong _nisam_checksum(const byte *mem, uint count)
|
||||||
|
{
|
||||||
|
ulong crc;
|
||||||
|
for (crc= 0; count-- ; mem++)
|
||||||
|
crc= ((crc << 1) + *((uchar*) mem)) +
|
||||||
|
test(crc & ((ulong) 1L << (8*sizeof(ulong)-1)));
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -738,7 +738,7 @@ static int get_statistic(MRG_INFO *mrg,HUFF_COUNTS *huff_counts)
|
|||||||
{
|
{
|
||||||
if (! error)
|
if (! error)
|
||||||
{
|
{
|
||||||
crc^=checksum(record,reclength);
|
crc^=_nisam_checksum(record,reclength);
|
||||||
for (pos=record,count=huff_counts ;
|
for (pos=record,count=huff_counts ;
|
||||||
count < end_count ;
|
count < end_count ;
|
||||||
count++,
|
count++,
|
||||||
|
@ -71,7 +71,8 @@ const char *client_errors[]=
|
|||||||
"Can't open shared memory. Server abandoded and don't sent the answer event (%lu)",
|
"Can't open shared memory. Server abandoded and don't sent the answer event (%lu)",
|
||||||
"Can't open shared memory. Can't send the request event to server (%lu)",
|
"Can't open shared memory. Can't send the request event to server (%lu)",
|
||||||
"Wrong or unknown protocol",
|
"Wrong or unknown protocol",
|
||||||
"Invalid connection handle"
|
"Invalid connection handle",
|
||||||
|
"mysql_server_init wasn't called"
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Start of code added by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */
|
/* Start of code added by Roberto M. Serqueira - martinsc@uol.com.br - 05.24.2001 */
|
||||||
@ -126,7 +127,8 @@ const char *client_errors[]=
|
|||||||
"Can't open shared memory. Server abandoded and don't sent the answer event (%lu)",
|
"Can't open shared memory. Server abandoded and don't sent the answer event (%lu)",
|
||||||
"Can't open shared memory. Can't send the request event to server (%lu)",
|
"Can't open shared memory. Can't send the request event to server (%lu)",
|
||||||
"Wrong or unknown protocol",
|
"Wrong or unknown protocol",
|
||||||
"Invalid connection handle"
|
"Invalid connection handle",
|
||||||
|
"mysql_server_init wasn't called"
|
||||||
};
|
};
|
||||||
|
|
||||||
#else /* ENGLISH */
|
#else /* ENGLISH */
|
||||||
@ -179,7 +181,8 @@ const char *client_errors[]=
|
|||||||
"Can't open shared memory. Server abandoded and don't sent the answer event (%lu)",
|
"Can't open shared memory. Server abandoded and don't sent the answer event (%lu)",
|
||||||
"Can't open shared memory. Can't send the request event to server (%lu)",
|
"Can't open shared memory. Can't send the request event to server (%lu)",
|
||||||
"Wrong or unknown protocol",
|
"Wrong or unknown protocol",
|
||||||
"Invalid connection handle"
|
"Invalid connection handle",
|
||||||
|
"mysql_server_init wasn't called"
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -594,6 +594,8 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
|
|||||||
const char *passwd, const char *db)
|
const char *passwd, const char *db)
|
||||||
{
|
{
|
||||||
char buff[512],*end=buff;
|
char buff[512],*end=buff;
|
||||||
|
NET *net= &mysql->net;
|
||||||
|
ulong pkt_length;
|
||||||
DBUG_ENTER("mysql_change_user");
|
DBUG_ENTER("mysql_change_user");
|
||||||
|
|
||||||
if (!user)
|
if (!user)
|
||||||
@ -604,41 +606,54 @@ my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user,
|
|||||||
/* Store user into the buffer */
|
/* Store user into the buffer */
|
||||||
end=strmov(end,user)+1;
|
end=strmov(end,user)+1;
|
||||||
|
|
||||||
/*
|
/* write scrambled password according to server capabilities */
|
||||||
We always start with old type handshake the only difference is message sent
|
if (passwd[0])
|
||||||
If server handles secure connection type we'll not send the real scramble
|
|
||||||
*/
|
|
||||||
if (mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
|
|
||||||
{
|
{
|
||||||
if (passwd[0])
|
if (mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
|
||||||
{
|
{
|
||||||
/* Prepare false scramble */
|
*end++= SCRAMBLE_LENGTH;
|
||||||
bfill(end, SCRAMBLE_LENGTH, 'x');
|
scramble(end, mysql->scramble, passwd);
|
||||||
end+=SCRAMBLE_LENGTH;
|
end+= SCRAMBLE_LENGTH;
|
||||||
*end=0;
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scramble_323(end, mysql->scramble, passwd);
|
||||||
|
end+= SCRAMBLE_LENGTH_323 + 1;
|
||||||
}
|
}
|
||||||
else /* For empty password */
|
|
||||||
*end=0; /* zero length scramble */
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
*end++= '\0'; // empty password
|
||||||
/*
|
|
||||||
Real scramble is only sent to old servers. This can be blocked
|
|
||||||
by calling mysql_options(MYSQL *, MYSQL_SECURE_CONNECT, (char*) &1);
|
|
||||||
*/
|
|
||||||
end=scramble(end, mysql->scramble_buff, passwd,
|
|
||||||
(my_bool) (mysql->protocol_version == 9));
|
|
||||||
}
|
|
||||||
/* Add database if needed */
|
/* Add database if needed */
|
||||||
end=strmov(end+1,db ? db : "");
|
end= strmov(end, db ? db : "") + 1;
|
||||||
|
|
||||||
/* Write authentication package */
|
/* Write authentication package */
|
||||||
simple_command(mysql,COM_CHANGE_USER, buff,(ulong) (end-buff),1);
|
simple_command(mysql,COM_CHANGE_USER, buff,(ulong) (end-buff),1);
|
||||||
|
|
||||||
if (mysql_autenticate(mysql, passwd))
|
pkt_length= net_safe_read(mysql);
|
||||||
|
|
||||||
|
if (pkt_length == packet_error)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
if (pkt_length == 1 && net->read_pos[0] == 254 &&
|
||||||
|
mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
By sending this very specific reply server asks us to send scrambled
|
||||||
|
password in old format. The reply contains scramble_323.
|
||||||
|
*/
|
||||||
|
scramble_323(buff, mysql->scramble, passwd);
|
||||||
|
if (my_net_write(net, buff, SCRAMBLE_LENGTH_323 + 1) || net_flush(net))
|
||||||
|
{
|
||||||
|
net->last_errno= CR_SERVER_LOST;
|
||||||
|
strmov(net->sqlstate, unknown_sqlstate);
|
||||||
|
strmov(net->last_error,ER(net->last_errno));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
/* Read what server thinks about out new auth message report */
|
||||||
|
if (net_safe_read(mysql) == packet_error)
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
/* Free old connect information */
|
/* Free old connect information */
|
||||||
my_free(mysql->user,MYF(MY_ALLOW_ZERO_PTR));
|
my_free(mysql->user,MYF(MY_ALLOW_ZERO_PTR));
|
||||||
my_free(mysql->passwd,MYF(MY_ALLOW_ZERO_PTR));
|
my_free(mysql->passwd,MYF(MY_ALLOW_ZERO_PTR));
|
||||||
|
@ -26,7 +26,8 @@
|
|||||||
static int fake_argc= 1;
|
static int fake_argc= 1;
|
||||||
static char *fake_argv[]= {(char *)"", 0};
|
static char *fake_argv[]= {(char *)"", 0};
|
||||||
static const char *fake_groups[] = { "server", "embedded", 0 };
|
static const char *fake_groups[] = { "server", "embedded", 0 };
|
||||||
static char inited, org_my_init_done;
|
static char org_my_init_done;
|
||||||
|
char server_inited;
|
||||||
|
|
||||||
#if defined (__WIN__)
|
#if defined (__WIN__)
|
||||||
#include "../sql/mysqld.cpp"
|
#include "../sql/mysqld.cpp"
|
||||||
@ -34,9 +35,9 @@ static char inited, org_my_init_done;
|
|||||||
#include "../sql/mysqld.cc"
|
#include "../sql/mysqld.cc"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SCRAMBLE_LENGTH 8
|
|
||||||
C_MODE_START
|
C_MODE_START
|
||||||
#include <mysql.h>
|
#include <mysql.h>
|
||||||
|
#undef ER
|
||||||
#include "errmsg.h"
|
#include "errmsg.h"
|
||||||
#include <sql_common.h>
|
#include <sql_common.h>
|
||||||
|
|
||||||
@ -48,19 +49,20 @@ static bool check_user(THD *thd, enum_server_command command,
|
|||||||
char * get_mysql_home(){ return mysql_home;};
|
char * get_mysql_home(){ return mysql_home;};
|
||||||
char * get_mysql_real_data_home(){ return mysql_real_data_home;};
|
char * get_mysql_real_data_home(){ return mysql_real_data_home;};
|
||||||
|
|
||||||
my_bool
|
my_bool STDCALL
|
||||||
emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
||||||
const char *header, ulong header_length,
|
const char *header, ulong header_length,
|
||||||
const char *arg, ulong arg_length, my_bool skip_check)
|
const char *arg, ulong arg_length, my_bool skip_check)
|
||||||
{
|
{
|
||||||
my_bool result= 1;
|
my_bool result= 1;
|
||||||
THD *thd=(THD *) mysql->thd;
|
THD *thd=(THD *) mysql->thd;
|
||||||
|
NET *net= &mysql->net;
|
||||||
|
|
||||||
/* Check that we are calling the client functions in right order */
|
/* Check that we are calling the client functions in right order */
|
||||||
if (mysql->status != MYSQL_STATUS_READY)
|
if (mysql->status != MYSQL_STATUS_READY)
|
||||||
{
|
{
|
||||||
strmov(thd->net.last_error,
|
strmov(net->last_error,
|
||||||
ER(thd->net.last_errno=CR_COMMANDS_OUT_OF_SYNC));
|
ER(net->last_errno=CR_COMMANDS_OUT_OF_SYNC));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,12 +78,12 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
|||||||
if (!skip_check)
|
if (!skip_check)
|
||||||
result= thd->net.last_errno ? -1 : 0;
|
result= thd->net.last_errno ? -1 : 0;
|
||||||
|
|
||||||
if ((mysql->net.last_errno= thd->net.last_errno))
|
if ((net->last_errno= thd->net.last_errno))
|
||||||
{
|
{
|
||||||
memcpy(mysql->net.last_error, thd->net.last_error,
|
memcpy(net->last_error, net->last_error,
|
||||||
sizeof(mysql->net.last_error));
|
sizeof(net->last_error));
|
||||||
memcpy(mysql->net.sqlstate, thd->net.sqlstate,
|
memcpy(net->sqlstate, thd->net.sqlstate,
|
||||||
sizeof(mysql->net.sqlstate));
|
sizeof(net->sqlstate));
|
||||||
}
|
}
|
||||||
mysql->warning_count= ((THD*)mysql->thd)->total_warn_count;
|
mysql->warning_count= ((THD*)mysql->thd)->total_warn_count;
|
||||||
return result;
|
return result;
|
||||||
@ -182,9 +184,9 @@ int STDCALL mysql_server_init(int argc, char **argv, char **groups)
|
|||||||
|
|
||||||
|
|
||||||
/* Only call MY_INIT() if it hasn't been called before */
|
/* Only call MY_INIT() if it hasn't been called before */
|
||||||
if (!inited)
|
if (!server_inited)
|
||||||
{
|
{
|
||||||
inited=1;
|
server_inited=1;
|
||||||
org_my_init_done=my_init_done;
|
org_my_init_done=my_init_done;
|
||||||
}
|
}
|
||||||
if (!org_my_init_done)
|
if (!org_my_init_done)
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void free_old_query(MYSQL *mysql);
|
void free_old_query(MYSQL *mysql);
|
||||||
my_bool
|
my_bool STDCALL
|
||||||
emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
||||||
const char *header, ulong header_length,
|
const char *header, ulong header_length,
|
||||||
const char *arg, ulong arg_length, my_bool skip_check);
|
const char *arg, ulong arg_length, my_bool skip_check);
|
||||||
@ -79,6 +79,8 @@ struct passwd *getpwuid(uid_t);
|
|||||||
char* getlogin(void);
|
char* getlogin(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
extern char server_inited;
|
||||||
|
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
static my_bool is_NT(void)
|
static my_bool is_NT(void)
|
||||||
{
|
{
|
||||||
@ -169,7 +171,7 @@ static inline int mysql_init_charset(MYSQL *mysql)
|
|||||||
else the lengths are calculated from the offset between pointers.
|
else the lengths are calculated from the offset between pointers.
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
static void emb_fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count)
|
static void STDCALL emb_fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count)
|
||||||
{
|
{
|
||||||
MYSQL_ROW end;
|
MYSQL_ROW end;
|
||||||
|
|
||||||
@ -210,6 +212,20 @@ mysql_real_connect(MYSQL *mysql,const char *host, const char *user,
|
|||||||
db ? db : "(Null)",
|
db ? db : "(Null)",
|
||||||
user ? user : "(Null)"));
|
user ? user : "(Null)"));
|
||||||
|
|
||||||
|
#ifdef EMBEDDED_LIBRARY
|
||||||
|
/*
|
||||||
|
Here we check that mysql_server_init was called before.
|
||||||
|
Actually we can perform the test for client (not embedded) library as well.
|
||||||
|
But i'm afraid some old applications will be broken then.
|
||||||
|
*/
|
||||||
|
if (!server_inited)
|
||||||
|
{
|
||||||
|
mysql->net.last_errno=CR_MYSQL_SERVER_INIT_MISSED;
|
||||||
|
strmov(mysql->net.last_error,ER(mysql->net.last_errno));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
#endif /*EMBEDDED_LIBRARY*/
|
||||||
|
|
||||||
if (mysql->options.methods_to_use == MYSQL_OPT_USE_REMOTE_CONNECTION)
|
if (mysql->options.methods_to_use == MYSQL_OPT_USE_REMOTE_CONNECTION)
|
||||||
cli_mysql_real_connect(mysql, host, user,
|
cli_mysql_real_connect(mysql, host, user,
|
||||||
passwd, db, port, unix_socket, client_flag);
|
passwd, db, port, unix_socket, client_flag);
|
||||||
|
@ -28,30 +28,29 @@ ha_checksum mi_checksum(MI_INFO *info, const byte *buf)
|
|||||||
{
|
{
|
||||||
const byte *pos;
|
const byte *pos;
|
||||||
const byte *end;
|
const byte *end;
|
||||||
|
ulong length;
|
||||||
switch (rec->type) {
|
switch (rec->type) {
|
||||||
case FIELD_BLOB:
|
case FIELD_BLOB:
|
||||||
{
|
{
|
||||||
ulong length=_mi_calc_blob_length(rec->length-
|
length=_mi_calc_blob_length(rec->length-
|
||||||
mi_portable_sizeof_char_ptr,
|
mi_portable_sizeof_char_ptr,
|
||||||
buf);
|
buf);
|
||||||
memcpy((char*) &pos, buf+rec->length- mi_portable_sizeof_char_ptr,
|
memcpy((char*) &pos, buf+rec->length- mi_portable_sizeof_char_ptr,
|
||||||
sizeof(char*));
|
sizeof(char*));
|
||||||
end=pos+length;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case FIELD_VARCHAR:
|
case FIELD_VARCHAR:
|
||||||
{
|
{
|
||||||
uint length;
|
|
||||||
length=uint2korr(buf);
|
length=uint2korr(buf);
|
||||||
pos=buf+2; end=pos+length;
|
pos=buf+2;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
pos=buf; end=buf+rec->length;
|
length=rec->length;
|
||||||
|
pos=buf;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for ( ; pos != end ; pos++)
|
crc=my_checksum(crc, pos ? pos : "", length);
|
||||||
crc=((crc << 8) + *((uchar*) pos)) + (crc >> (8*sizeof(ha_checksum)-8));
|
|
||||||
}
|
}
|
||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
@ -59,9 +58,5 @@ ha_checksum mi_checksum(MI_INFO *info, const byte *buf)
|
|||||||
|
|
||||||
ha_checksum mi_static_checksum(MI_INFO *info, const byte *pos)
|
ha_checksum mi_static_checksum(MI_INFO *info, const byte *pos)
|
||||||
{
|
{
|
||||||
ha_checksum crc;
|
return my_checksum(0, pos, info->s->base.reclength);
|
||||||
const byte *end=pos+info->s->base.reclength;
|
|
||||||
for (crc=0; pos != end; pos++)
|
|
||||||
crc=((crc << 8) + *((uchar*) pos)) + (crc >> (8*sizeof(ha_checksum)-8));
|
|
||||||
return crc;
|
|
||||||
}
|
}
|
||||||
|
@ -21,8 +21,9 @@ benchdir_root= $(prefix)
|
|||||||
testdir = $(benchdir_root)/mysql-test
|
testdir = $(benchdir_root)/mysql-test
|
||||||
EXTRA_SCRIPTS = mysql-test-run.sh install_test_db.sh
|
EXTRA_SCRIPTS = mysql-test-run.sh install_test_db.sh
|
||||||
EXTRA_DIST = $(EXTRA_SCRIPTS)
|
EXTRA_DIST = $(EXTRA_SCRIPTS)
|
||||||
test_SCRIPTS = mysql-test-run install_test_db
|
test_SCRIPTS = mysql-test-run install_test_db
|
||||||
CLEANFILES = $(test_SCRIPTS)
|
test_DATA = std_data/client-key.pem std_data/client-cert.pem std_data/cacert.pem
|
||||||
|
CLEANFILES = $(test_SCRIPTS) $(test_DATA)
|
||||||
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
mkdir -p $(distdir)/t $(distdir)/r $(distdir)/include \
|
||||||
@ -32,6 +33,8 @@ dist-hook:
|
|||||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r
|
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.000001 $(distdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(srcdir)/std_data/*.000001 $(distdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(distdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(distdir)/std_data
|
||||||
|
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(distdir)/std_data
|
||||||
|
|
||||||
|
|
||||||
install-data-local:
|
install-data-local:
|
||||||
$(mkinstalldirs) \
|
$(mkinstalldirs) \
|
||||||
@ -49,6 +52,11 @@ install-data-local:
|
|||||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
|
||||||
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(DESTDIR)$(testdir)/std_data
|
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(DESTDIR)$(testdir)/std_data
|
||||||
|
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(DESTDIR)$(testdir)/std_data
|
||||||
|
|
||||||
|
std_data/%.pem:
|
||||||
|
@CP@ $(top_srcdir)/SSL/$(@F) $(srcdir)/std_data
|
||||||
|
|
||||||
|
|
||||||
SUFFIXES = .sh
|
SUFFIXES = .sh
|
||||||
|
|
||||||
|
@ -30,6 +30,7 @@ show tables;
|
|||||||
Tables_in_test
|
Tables_in_test
|
||||||
update mysql.user set password=old_password("gambling2") where user="test";
|
update mysql.user set password=old_password("gambling2") where user="test";
|
||||||
flush privileges;
|
flush privileges;
|
||||||
|
set password=old_password('gambling3');
|
||||||
show tables;
|
show tables;
|
||||||
Tables_in_mysql
|
Tables_in_mysql
|
||||||
columns_priv
|
columns_priv
|
||||||
|
@ -312,3 +312,52 @@ SET SESSION table_type=default;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 select x'4132';
|
create table t1 select x'4132';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1(a int,b int,c int unsigned,d date,e char,f datetime,g time,h blob);
|
||||||
|
insert into t1(a)values(1);
|
||||||
|
insert into t1(a,b,c,d,e,f,g,h)
|
||||||
|
values(2,-2,2,'1825-12-14','a','2003-1-1 3:2:1','4:3:2','binary data');
|
||||||
|
select * from t1;
|
||||||
|
a b c d e f g h
|
||||||
|
1 NULL NULL NULL NULL NULL NULL NULL
|
||||||
|
2 -2 2 1825-12-14 a 2003-01-01 03:02:01 04:03:02 binary data
|
||||||
|
select a,
|
||||||
|
ifnull(b,cast(-7 as signed)) as b,
|
||||||
|
ifnull(c,cast(7 as unsigned)) as c,
|
||||||
|
ifnull(d,cast('2000-01-01' as date)) as d,
|
||||||
|
ifnull(e,cast('b' as char)) as e,
|
||||||
|
ifnull(f,cast('2000-01-01' as datetime)) as f,
|
||||||
|
ifnull(g,cast('5:4:3' as time)) as g,
|
||||||
|
ifnull(h,cast('yet another binary data' as binary)) as h,
|
||||||
|
addtime(cast('1:0:0' as time),cast('1:0:0' as time)) as dd
|
||||||
|
from t1;
|
||||||
|
a b c d e f g h dd
|
||||||
|
1 -7 7 2000-01-01 b 2000-01-01 00:00:00 05:04:03 yet another binary data 02:00:00
|
||||||
|
2 -2 2 1825-12-14 a 2003-01-01 03:02:01 04:03:02 binary data 02:00:00
|
||||||
|
create table t2
|
||||||
|
select
|
||||||
|
a,
|
||||||
|
ifnull(b,cast(-7 as signed)) as b,
|
||||||
|
ifnull(c,cast(7 as unsigned)) as c,
|
||||||
|
ifnull(d,cast('2000-01-01' as date)) as d,
|
||||||
|
ifnull(e,cast('b' as char)) as e,
|
||||||
|
ifnull(f,cast('2000-01-01' as datetime)) as f,
|
||||||
|
ifnull(g,cast('5:4:3' as time)) as g,
|
||||||
|
ifnull(h,cast('yet another binary data' as binary)) as h,
|
||||||
|
addtime(cast('1:0:0' as time),cast('1:0:0' as time)) as dd
|
||||||
|
from t1;
|
||||||
|
explain t2;
|
||||||
|
Field Type Null Key Default Extra
|
||||||
|
a int(11) YES NULL
|
||||||
|
b bigint(11) 0
|
||||||
|
c bigint(10) 0
|
||||||
|
d date 0000-00-00
|
||||||
|
e char(1)
|
||||||
|
f datetime 0000-00-00 00:00:00
|
||||||
|
g time 00:00:00
|
||||||
|
h mediumblob
|
||||||
|
dd time 00:00:00
|
||||||
|
select * from t2;
|
||||||
|
a b c d e f g h dd
|
||||||
|
1 -7 7 2000-01-01 b 2000-01-01 00:00:00 05:04:03 yet another binary data 02:00:00
|
||||||
|
2 -2 2 1825-12-14 a 2003-01-01 03:02:01 04:03:02 binary data 02:00:00
|
||||||
|
drop table t1, t2;
|
||||||
|
@ -196,3 +196,11 @@ drop table t1,t2;
|
|||||||
SELECT a.x FROM (SELECT 1 AS x) AS a HAVING a.x = 1;
|
SELECT a.x FROM (SELECT 1 AS x) AS a HAVING a.x = 1;
|
||||||
x
|
x
|
||||||
1
|
1
|
||||||
|
create table a1 select 1 as a;
|
||||||
|
select 2 as a from (select * from a1) b;
|
||||||
|
ERROR 3D000: No Database Selected
|
||||||
|
use test;
|
||||||
|
select 2 as a from (select * from a1) b;
|
||||||
|
a
|
||||||
|
2
|
||||||
|
drop table a1;
|
||||||
|
@ -44,3 +44,13 @@ mysql
|
|||||||
test
|
test
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
ERROR HY000: Can't drop database 'mysqltest'; database doesn't exist
|
ERROR HY000: Can't drop database 'mysqltest'; database doesn't exist
|
||||||
|
drop table t1;
|
||||||
|
flush tables with read lock;
|
||||||
|
create table t1(n int);
|
||||||
|
ERROR HY000: Can't execute the query because you have a conflicting read lock
|
||||||
|
unlock tables;
|
||||||
|
create table t1(n int);
|
||||||
|
show tables;
|
||||||
|
Tables_in_test
|
||||||
|
t1
|
||||||
|
drop table t1;
|
||||||
|
@ -1,15 +1,79 @@
|
|||||||
select length(encrypt('foo', 'ff')) <> 0;
|
select length(encrypt('foo', 'ff')) <> 0;
|
||||||
length(encrypt('foo', 'ff')) <> 0
|
length(encrypt('foo', 'ff')) <> 0
|
||||||
1
|
1
|
||||||
select password("a",""), password("a",NULL), password("","a"), password(NULL,"a");
|
select password('abc');
|
||||||
password("a","") password("a",NULL) password("","a") password(NULL,"a")
|
password('abc')
|
||||||
*2517f7235d68d4ba2e5019c93420523101157a792c01 NULL NULL
|
*0D3CED9BEC10A777AEC23CCC353A8C08A633045E
|
||||||
select password("aaaaaaaaaaaaaaaa","a"), password("a","aaaaaaaaaaaaaaaa");
|
select password('');
|
||||||
password("aaaaaaaaaaaaaaaa","a") password("a","aaaaaaaaaaaaaaaa")
|
password('')
|
||||||
*2cd3b9a44e9a9994789a30f935c92f45a96c5472f381 *37c7c5c794ff144819f2531bf03c57772cd84e40db09
|
|
||||||
select old_password('test'), length(password("1")), length(encrypt('test')), encrypt('test','aa');
|
select old_password('abc');
|
||||||
old_password('test') length(password("1")) length(encrypt('test')) encrypt('test','aa')
|
old_password('abc')
|
||||||
378b243e220ca493 45 13 aaqPiZY5xR5l.
|
7cd2b5942be28759
|
||||||
select old_password(""), old_password(NULL), password(""), password(NULL);
|
select old_password('');
|
||||||
old_password("") old_password(NULL) password("") password(NULL)
|
old_password('')
|
||||||
NULL NULL
|
|
||||||
|
select password('gabbagabbahey');
|
||||||
|
password('gabbagabbahey')
|
||||||
|
*B0F99D2963660DD7E16B751EC9EE2F17B6A68FA6
|
||||||
|
select old_password('idkfa');
|
||||||
|
old_password('idkfa')
|
||||||
|
5c078dc54ca0fcca
|
||||||
|
select length(password('1'));
|
||||||
|
length(password('1'))
|
||||||
|
41
|
||||||
|
select length(encrypt('test'));
|
||||||
|
length(encrypt('test'))
|
||||||
|
13
|
||||||
|
select encrypt('test','aa');
|
||||||
|
encrypt('test','aa')
|
||||||
|
aaqPiZY5xR5l.
|
||||||
|
select old_password(NULL);
|
||||||
|
old_password(NULL)
|
||||||
|
NULL
|
||||||
|
select password(NULL);
|
||||||
|
password(NULL)
|
||||||
|
NULL
|
||||||
|
set global old_passwords=on;
|
||||||
|
select password('');
|
||||||
|
password('')
|
||||||
|
|
||||||
|
select old_password('');
|
||||||
|
old_password('')
|
||||||
|
|
||||||
|
select password('idkfa');
|
||||||
|
password('idkfa')
|
||||||
|
*B669C9DAC3AA6F2254B03CDEF8DFDD6B2D1054BA
|
||||||
|
select old_password('idkfa');
|
||||||
|
old_password('idkfa')
|
||||||
|
5c078dc54ca0fcca
|
||||||
|
set old_passwords=on;
|
||||||
|
select password('idkfa');
|
||||||
|
password('idkfa')
|
||||||
|
5c078dc54ca0fcca
|
||||||
|
select old_password('idkfa');
|
||||||
|
old_password('idkfa')
|
||||||
|
5c078dc54ca0fcca
|
||||||
|
set global old_passwords=off;
|
||||||
|
select password('idkfa');
|
||||||
|
password('idkfa')
|
||||||
|
5c078dc54ca0fcca
|
||||||
|
select old_password('idkfa');
|
||||||
|
old_password('idkfa')
|
||||||
|
5c078dc54ca0fcca
|
||||||
|
set old_passwords=off;
|
||||||
|
select password('idkfa ');
|
||||||
|
password('idkfa ')
|
||||||
|
*2DC31D90647B4C1ABC9231563D2236E96C9A2DB2
|
||||||
|
select password('idkfa');
|
||||||
|
password('idkfa')
|
||||||
|
*B669C9DAC3AA6F2254B03CDEF8DFDD6B2D1054BA
|
||||||
|
select password(' idkfa');
|
||||||
|
password(' idkfa')
|
||||||
|
*12B099E56BB7FE8D43C78FD834A9D1D11178D045
|
||||||
|
select old_password('idkfa');
|
||||||
|
old_password('idkfa')
|
||||||
|
5c078dc54ca0fcca
|
||||||
|
select old_password(' i d k f a ');
|
||||||
|
old_password(' i d k f a ')
|
||||||
|
5c078dc54ca0fcca
|
||||||
|
@ -167,6 +167,11 @@ t2.URL_ID = t1.URL_ID group by REQ_ID;
|
|||||||
REQ_ID URL
|
REQ_ID URL
|
||||||
1 X
|
1 X
|
||||||
5 X,X,X
|
5 X,X,X
|
||||||
|
select REQ_ID, Group_Concat(URL) as URL, Min(t1.URL_ID) urll,
|
||||||
|
Max(t1.URL_ID)
|
||||||
|
urlg from t1, t2 where t2.URL_ID = t1.URL_ID group by REQ_ID;
|
||||||
|
REQ_ID URL urll urlg
|
||||||
|
1 X 4 4
|
||||||
5 X,X,X 4 5
|
5 X,X,X 4 5
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
@ -178,3 +183,16 @@ select distinct ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') a
|
|||||||
select distinct ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'with distinct: cutoff at length of shortname' from t1;
|
select distinct ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'with distinct: cutoff at length of shortname' from t1;
|
||||||
with distinct: cutoff at length of shortname
|
with distinct: cutoff at length of shortname
|
||||||
1:longername,1:evenlongername
|
1:longername,1:evenlongername
|
||||||
|
drop table t1;
|
||||||
|
create table t1(id int);
|
||||||
|
create table t2(id int);
|
||||||
|
insert into t1 values(0),(1);
|
||||||
|
select group_concat(t1.id) FROM t1,t2;
|
||||||
|
group_concat(t1.id)
|
||||||
|
NULL
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
create table t1 (bar varchar(32));
|
||||||
|
insert into t1 values('test'),('test2');
|
||||||
|
select * from t1 having group_concat(bar)='';
|
||||||
|
bar
|
||||||
|
@ -251,6 +251,18 @@ n
|
|||||||
6
|
6
|
||||||
rollback;
|
rollback;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (n int not null primary key) type=innodb;
|
||||||
|
start transaction;
|
||||||
|
insert into t1 values (4);
|
||||||
|
flush tables with read lock;
|
||||||
|
commit;
|
||||||
|
ERROR HY000: Can't execute the query because you have a conflicting read lock
|
||||||
|
unlock tables;
|
||||||
|
commit;
|
||||||
|
select * from t1;
|
||||||
|
n
|
||||||
|
4
|
||||||
|
drop table t1;
|
||||||
create table t1 ( id int NOT NULL PRIMARY KEY, nom varchar(64)) type=innodb;
|
create table t1 ( id int NOT NULL PRIMARY KEY, nom varchar(64)) type=innodb;
|
||||||
begin;
|
begin;
|
||||||
insert into t1 values(1,'hamdouni');
|
insert into t1 values(1,'hamdouni');
|
||||||
@ -1342,3 +1354,40 @@ id label
|
|||||||
3524 Societe Test
|
3524 Societe Test
|
||||||
3525 Fournisseur Test
|
3525 Fournisseur Test
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
create table t1 (c1 char(5) unique not null, c2 int, stamp timestamp) type=innodb;
|
||||||
|
select * from t1;
|
||||||
|
c1 c2 stamp
|
||||||
|
replace delayed into t1 (c1, c2) values ( "text1","11"),( "text2","12");
|
||||||
|
ERROR HY000: Table storage engine for 't1' doesn't have this option
|
||||||
|
select * from t1;
|
||||||
|
c1 c2 stamp
|
||||||
|
replace delayed into t1 (c1, c2) values ( "text1","12"),( "text2","13"),( "text3","14", "a" ),( "text4","15", "b" );
|
||||||
|
ERROR HY000: Table storage engine for 't1' doesn't have this option
|
||||||
|
select * from t1;
|
||||||
|
c1 c2 stamp
|
||||||
|
drop table t1;
|
||||||
|
create table t1 (a int, b varchar(200), c text not null) checksum=1 type=myisam;
|
||||||
|
create table t2 (a int, b varchar(200), c text not null) checksum=0 type=innodb;
|
||||||
|
create table t3 (a int, b varchar(200), c text not null) checksum=1 type=innodb;
|
||||||
|
insert t1 values (1, "aaa", "bbb"), (NULL, "", "ccccc"), (0, NULL, "");
|
||||||
|
insert t2 select * from t1;
|
||||||
|
insert t3 select * from t1;
|
||||||
|
checksum table t1, t2, t3, t4 quick;
|
||||||
|
Table Checksum
|
||||||
|
test.t1 968604391
|
||||||
|
test.t2 NULL
|
||||||
|
test.t3 NULL
|
||||||
|
test.t4 NULL
|
||||||
|
checksum table t1, t2, t3, t4;
|
||||||
|
Table Checksum
|
||||||
|
test.t1 968604391
|
||||||
|
test.t2 968604391
|
||||||
|
test.t3 968604391
|
||||||
|
test.t4 NULL
|
||||||
|
checksum table t1, t2, t3, t4 extended;
|
||||||
|
Table Checksum
|
||||||
|
test.t1 968604391
|
||||||
|
test.t2 968604391
|
||||||
|
test.t3 968604391
|
||||||
|
test.t4 NULL
|
||||||
|
drop table t1,t2,t3;
|
||||||
|
@ -1,13 +1,5 @@
|
|||||||
drop table if exists t1,t2;
|
drop table if exists t1,t2;
|
||||||
create table t1 (a tinyint not null auto_increment, b blob not null, primary key (a)) type=isam;
|
create table t1 (a tinyint not null auto_increment, b blob not null, primary key (a)) type=isam;
|
||||||
Warnings:
|
|
||||||
Warning 1263 Data truncated for column 'b' at row 1
|
|
||||||
Warnings:
|
|
||||||
Warning 1263 Data truncated for column 'b' at row 1
|
|
||||||
Warnings:
|
|
||||||
Warning 1263 Data truncated for column 'b' at row 1
|
|
||||||
Warnings:
|
|
||||||
Warning 1263 Data truncated for column 'b' at row 1
|
|
||||||
delete from t1 where (a & 1);
|
delete from t1 where (a & 1);
|
||||||
select sum(length(b)) from t1;
|
select sum(length(b)) from t1;
|
||||||
sum(length(b))
|
sum(length(b))
|
||||||
|
@ -367,6 +367,23 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
CREATE TABLE t1 (`a` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0', UNIQUE KEY `a` USING RTREE (`a`,`b`)) TYPE=MyISAM;
|
CREATE TABLE t1 (`a` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0', UNIQUE KEY `a` USING RTREE (`a`,`b`)) TYPE=MyISAM;
|
||||||
ERROR 42000: This version of MySQL doesn't yet support 'RTREE INDEX'
|
ERROR 42000: This version of MySQL doesn't yet support 'RTREE INDEX'
|
||||||
DROP TABLE IF EXISTS t1;
|
create table t1 (a int, b varchar(200), c text not null) checksum=1;
|
||||||
Warnings:
|
create table t2 (a int, b varchar(200), c text not null) checksum=0;
|
||||||
Note 1051 Unknown table 't1'
|
insert t1 values (1, "aaa", "bbb"), (NULL, "", "ccccc"), (0, NULL, "");
|
||||||
|
insert t2 select * from t1;
|
||||||
|
checksum table t1, t2, t3 quick;
|
||||||
|
Table Checksum
|
||||||
|
test.t1 968604391
|
||||||
|
test.t2 NULL
|
||||||
|
test.t3 NULL
|
||||||
|
checksum table t1, t2, t3;
|
||||||
|
Table Checksum
|
||||||
|
test.t1 968604391
|
||||||
|
test.t2 968604391
|
||||||
|
test.t3 NULL
|
||||||
|
checksum table t1, t2, t3 extended;
|
||||||
|
Table Checksum
|
||||||
|
test.t1 968604391
|
||||||
|
test.t2 968604391
|
||||||
|
test.t3 NULL
|
||||||
|
drop table t1,t2;
|
||||||
|
@ -254,3 +254,18 @@ ERROR 42000: This version of MySQL doesn't yet support 'CUBE'
|
|||||||
select product, country_id , year, sum(profit) from t1 group by product, country_id, year with cube union all select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
|
select product, country_id , year, sum(profit) from t1 group by product, country_id, year with cube union all select product, country_id , year, sum(profit) from t1 group by product, country_id, year with rollup;
|
||||||
ERROR 42000: This version of MySQL doesn't yet support 'CUBE'
|
ERROR 42000: This version of MySQL doesn't yet support 'CUBE'
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
CREATE TABLE t1 (i int);
|
||||||
|
INSERT INTO t1 VALUES(100);
|
||||||
|
CREATE TABLE t2 (i int);
|
||||||
|
INSERT INTO t2 VALUES (100),(200);
|
||||||
|
SELECT i, COUNT(*) FROM t1 GROUP BY i WITH ROLLUP;
|
||||||
|
i COUNT(*)
|
||||||
|
100 1
|
||||||
|
NULL 1
|
||||||
|
SELECT t1.i, t2.i, COUNT(*) FROM t1,t2 GROUP BY t1.i,t2.i WITH ROLLUP;
|
||||||
|
i i COUNT(*)
|
||||||
|
100 100 1
|
||||||
|
100 200 1
|
||||||
|
100 NULL 2
|
||||||
|
NULL NULL 2
|
||||||
|
drop table t1,t2;
|
||||||
|
@ -4,20 +4,20 @@ File Position Binlog_do_db Binlog_ignore_db
|
|||||||
master-bin.000001 79
|
master-bin.000001 79
|
||||||
reset slave;
|
reset slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
change master to master_host='127.0.0.1';
|
change master to master_host='127.0.0.1';
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 test MASTER_PORT 7 4 slave-relay-bin.000001 4 No No 0 0 0 4
|
127.0.0.1 test MASTER_PORT 7 4 slave-relay-bin.000001 4 No No 0 0 0 4 No
|
||||||
change master to master_host='127.0.0.1',master_user='root',
|
change master to master_host='127.0.0.1',master_user='root',
|
||||||
master_password='',master_port=MASTER_PORT;
|
master_password='',master_port=MASTER_PORT;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 7 4 slave-relay-bin.000001 4 No No 0 0 0 4
|
127.0.0.1 root MASTER_PORT 7 4 slave-relay-bin.000001 4 No No 0 0 0 4 No
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 7 master-bin.000001 79 slave-relay-bin.000001 123 master-bin.000001 Yes Yes 0 0 79 123
|
127.0.0.1 root MASTER_PORT 7 master-bin.000001 79 slave-relay-bin.000001 123 master-bin.000001 Yes Yes 0 0 79 123 No
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 (n int);
|
create table t1 (n int);
|
||||||
insert into t1 values (10),(45),(90);
|
insert into t1 values (10),(45),(90);
|
||||||
|
@ -5,7 +5,7 @@ reset slave;
|
|||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
load table t1 from master;
|
load table t1 from master;
|
||||||
ERROR 08S01: Error connecting to master: Master is not configured
|
ERROR 08S01: Error connecting to master: Master is not configured
|
||||||
load table t1 from master;
|
load table t1 from master;
|
||||||
|
@ -8,8 +8,8 @@ create table t1 (a int primary key);
|
|||||||
insert into t1 values (1),(1);
|
insert into t1 values (1),(1);
|
||||||
ERROR 23000: Duplicate entry '1' for key 1
|
ERROR 23000: Duplicate entry '1' for key 1
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 213 slave-relay-bin.000002 257 master-bin.000001 Yes Yes test.t1 0 0 213 257
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 213 slave-relay-bin.000002 257 master-bin.000001 Yes Yes test.t1 0 0 213 257 No
|
||||||
show tables like 't1';
|
show tables like 't1';
|
||||||
Tables_in_test (t1)
|
Tables_in_test (t1)
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -13,5 +13,5 @@ master_password='',master_port=SLAVE_PORT;
|
|||||||
start slave;
|
start slave;
|
||||||
flush logs;
|
flush logs;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root SLAVE_PORT 60 slave-bin.000001 79 relay-log.000002 4 slave-bin.000001 Yes Yes 0 0 79 4
|
127.0.0.1 root SLAVE_PORT 60 slave-bin.000001 79 relay-log.000002 4 slave-bin.000001 Yes Yes 0 0 79 4 No
|
||||||
|
@ -28,8 +28,8 @@ load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
|||||||
set global sql_slave_skip_counter=1;
|
set global sql_slave_skip_counter=1;
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 1311 slave-relay-bin.000002 1355 master-bin.000001 Yes Yes 0 0 1311 1355
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 1311 slave-relay-bin.000002 1355 master-bin.000001 Yes Yes 0 0 1311 1355 No
|
||||||
set sql_log_bin=0;
|
set sql_log_bin=0;
|
||||||
delete from t1;
|
delete from t1;
|
||||||
set sql_log_bin=1;
|
set sql_log_bin=1;
|
||||||
@ -38,8 +38,8 @@ stop slave;
|
|||||||
change master to master_user='test';
|
change master to master_user='test';
|
||||||
change master to master_user='root';
|
change master to master_user='root';
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 1442 slave-relay-bin.000001 4 master-bin.000001 No No 0 0 1442 4
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 1442 slave-relay-bin.000001 4 master-bin.000001 No No 0 0 1442 4 No
|
||||||
set global sql_slave_skip_counter=1;
|
set global sql_slave_skip_counter=1;
|
||||||
start slave;
|
start slave;
|
||||||
set sql_log_bin=0;
|
set sql_log_bin=0;
|
||||||
@ -49,5 +49,5 @@ load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
|||||||
stop slave;
|
stop slave;
|
||||||
reset slave;
|
reset slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 4 slave-relay-bin.000001 4 No No 0 0 0 4
|
127.0.0.1 root MASTER_PORT 1 4 slave-relay-bin.000001 4 No No 0 0 0 4 No
|
||||||
|
@ -92,7 +92,7 @@ slave-bin.000002 4 Query 1 110 use `test`; create table t1 (n int)
|
|||||||
slave-bin.000002 62 Query 1 168 use `test`; insert into t1 values (1)
|
slave-bin.000002 62 Query 1 168 use `test`; insert into t1 values (1)
|
||||||
slave-bin.000002 122 Query 1 228 use `test`; drop table t1
|
slave-bin.000002 122 Query 1 228 use `test`; drop table t1
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000002 276 slave-relay-bin.000003 214 master-bin.000002 Yes Yes 0 0 276 214
|
127.0.0.1 root MASTER_PORT 1 master-bin.000002 276 slave-relay-bin.000003 214 master-bin.000002 Yes Yes 0 0 276 214 No
|
||||||
show binlog events in 'slave-bin.000005' from 4;
|
show binlog events in 'slave-bin.000005' from 4;
|
||||||
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Could not find target log
|
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Could not find target log
|
||||||
|
@ -8,26 +8,26 @@ show master status;
|
|||||||
File Position Binlog_do_db Binlog_ignore_db
|
File Position Binlog_do_db Binlog_ignore_db
|
||||||
master-bin.000001 79
|
master-bin.000001 79
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000002 123 master-bin.000001 Yes Yes 0 0 79 123
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000002 123 master-bin.000001 Yes Yes 0 0 79 123 No
|
||||||
stop slave;
|
stop slave;
|
||||||
change master to master_log_pos=73;
|
change master to master_log_pos=73;
|
||||||
start slave;
|
start slave;
|
||||||
stop slave;
|
stop slave;
|
||||||
change master to master_log_pos=73;
|
change master to master_log_pos=73;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 73 slave-relay-bin.000001 4 master-bin.000001 No No 0 0 73 4
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 73 slave-relay-bin.000001 4 master-bin.000001 No No 0 0 73 4 No
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 73 slave-relay-bin.000001 48 master-bin.000001 No Yes 0 0 73 48
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 73 slave-relay-bin.000001 48 master-bin.000001 No Yes 0 0 73 48 No
|
||||||
stop slave;
|
stop slave;
|
||||||
change master to master_log_pos=173;
|
change master to master_log_pos=173;
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 173 slave-relay-bin.000001 4 master-bin.000001 No Yes 0 0 173 4
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 173 slave-relay-bin.000001 4 master-bin.000001 No Yes 0 0 173 4 No
|
||||||
show master status;
|
show master status;
|
||||||
File Position Binlog_do_db Binlog_ignore_db
|
File Position Binlog_do_db Binlog_ignore_db
|
||||||
master-bin.000001 79
|
master-bin.000001 79
|
||||||
|
@ -15,8 +15,8 @@ select @@global.max_relay_log_size;
|
|||||||
4096
|
4096
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50477 slave-relay-bin.000014 1221 master-bin.000001 Yes Yes 0 0 50477 1221
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50477 slave-relay-bin.000014 1221 master-bin.000001 Yes Yes 0 0 50477 1221 No
|
||||||
stop slave;
|
stop slave;
|
||||||
reset slave;
|
reset slave;
|
||||||
set global max_relay_log_size=(5*4096);
|
set global max_relay_log_size=(5*4096);
|
||||||
@ -25,8 +25,8 @@ select @@global.max_relay_log_size;
|
|||||||
20480
|
20480
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50477 slave-relay-bin.000004 9457 master-bin.000001 Yes Yes 0 0 50477 9457
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50477 slave-relay-bin.000004 9457 master-bin.000001 Yes Yes 0 0 50477 9457 No
|
||||||
stop slave;
|
stop slave;
|
||||||
reset slave;
|
reset slave;
|
||||||
set global max_relay_log_size=0;
|
set global max_relay_log_size=0;
|
||||||
@ -35,26 +35,26 @@ select @@global.max_relay_log_size;
|
|||||||
0
|
0
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50477 slave-relay-bin.000008 1283 master-bin.000001 Yes Yes 0 0 50477 1283
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50477 slave-relay-bin.000008 1283 master-bin.000001 Yes Yes 0 0 50477 1283 No
|
||||||
stop slave;
|
stop slave;
|
||||||
reset slave;
|
reset slave;
|
||||||
flush logs;
|
flush logs;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 4 slave-relay-bin.000001 4 No No 0 0 0 4
|
127.0.0.1 root MASTER_PORT 1 4 slave-relay-bin.000001 4 No No 0 0 0 4 No
|
||||||
reset slave;
|
reset slave;
|
||||||
start slave;
|
start slave;
|
||||||
flush logs;
|
flush logs;
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50535 slave-relay-bin.000009 62 master-bin.000001 Yes Yes 0 0 50535 62
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50535 slave-relay-bin.000009 62 master-bin.000001 Yes Yes 0 0 50535 62 No
|
||||||
flush logs;
|
flush logs;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50583 slave-relay-bin.000010 52 master-bin.000001 Yes Yes 0 0 50583 52
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 50583 slave-relay-bin.000010 52 master-bin.000001 Yes Yes 0 0 50583 52 No
|
||||||
flush logs;
|
flush logs;
|
||||||
show master status;
|
show master status;
|
||||||
File Position Binlog_do_db Binlog_ignore_db
|
File Position Binlog_do_db Binlog_ignore_db
|
||||||
|
30
mysql-test/r/rpl_openssl.result
Normal file
30
mysql-test/r/rpl_openssl.result
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
stop slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
reset master;
|
||||||
|
reset slave;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
|
start slave;
|
||||||
|
grant replication slave on *.* to replssl@'%' require ssl;
|
||||||
|
create table t1 (t int);
|
||||||
|
stop slave;
|
||||||
|
change master to master_user='replssl',master_password='';
|
||||||
|
start slave;
|
||||||
|
insert into t1 values (1);
|
||||||
|
select * from t1;
|
||||||
|
t
|
||||||
|
stop slave;
|
||||||
|
change master to master_ssl=1 , master_ssl_ca ='MYSQL_TEST_DIR/std_data/cacert.pem', master_ssl_cert='MYSQL_TEST_DIR/std_data/client-cert.pem', master_ssl_key='MYSQL_TEST_DIR/std_data/client-key.pem';
|
||||||
|
start slave;
|
||||||
|
select * from t1;
|
||||||
|
t
|
||||||
|
1
|
||||||
|
show slave status;
|
||||||
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
|
127.0.0.1 replssl MASTER_MYPORT 1 master-bin.000001 289 slave-relay-bin.000001 108 master-bin.000001 Yes Yes 0 0 289 108 Yes MYSQL_TEST_DIR/std_data/cacert.pem MYSQL_TEST_DIR/std_data/client-cert.pem MYSQL_TEST_DIR/std_data/client-key.pem
|
||||||
|
stop slave;
|
||||||
|
change master to master_user='root',master_password='', master_ssl=0;
|
||||||
|
start slave;
|
||||||
|
drop table t1;
|
||||||
|
show slave status;
|
||||||
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
|
127.0.0.1 root MASTER_MYPORT 1 master-bin.000001 337 slave-relay-bin.000001 96 master-bin.000001 Yes Yes 0 0 337 96 No MYSQL_TEST_DIR/std_data/cacert.pem MYSQL_TEST_DIR/std_data/client-cert.pem MYSQL_TEST_DIR/std_data/client-key.pem
|
@ -5,7 +5,7 @@ reset slave;
|
|||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
SHOW SLAVE STATUS;
|
SHOW SLAVE STATUS;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
SHOW SLAVE HOSTS;
|
SHOW SLAVE HOSTS;
|
||||||
Server_id Host Port Rpl_recovery_rank Master_id
|
Server_id Host Port Rpl_recovery_rank Master_id
|
||||||
2 127.0.0.1 SLAVE_PORT 2 1
|
2 127.0.0.1 SLAVE_PORT 2 1
|
||||||
|
@ -27,5 +27,5 @@ select * from t11;
|
|||||||
ERROR 42S02: Table 'test.t11' doesn't exist
|
ERROR 42S02: Table 'test.t11' doesn't exist
|
||||||
drop table if exists t1,t2,t11;
|
drop table if exists t1,t2,t11;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 1281 slave-relay-bin.000002 1325 master-bin.000001 Yes Yes test.t1 0 0 1281 1325
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 1281 slave-relay-bin.000002 1325 master-bin.000001 Yes Yes test.t1 0 0 1281 1325 No
|
||||||
|
@ -5,18 +5,18 @@ reset slave;
|
|||||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000002 123 master-bin.000001 Yes Yes 0 0 79 123
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000002 123 master-bin.000001 Yes Yes 0 0 79 123 No
|
||||||
stop slave;
|
stop slave;
|
||||||
change master to master_user='test';
|
change master to master_user='test';
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 test MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000001 4 master-bin.000001 No No 0 0 79 4
|
127.0.0.1 test MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000001 4 master-bin.000001 No No 0 0 79 4 No
|
||||||
reset slave;
|
reset slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 4 slave-relay-bin.000001 4 No No 0 0 0 4
|
127.0.0.1 root MASTER_PORT 1 4 slave-relay-bin.000001 4 No No 0 0 0 4 No
|
||||||
start slave;
|
start slave;
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000002 123 master-bin.000001 Yes Yes 0 0 79 123
|
127.0.0.1 root MASTER_PORT 1 master-bin.000001 79 slave-relay-bin.000002 123 master-bin.000001 Yes Yes 0 0 79 123 No
|
||||||
|
@ -15,8 +15,8 @@ insert into temp_table values ("testing temporary tables");
|
|||||||
create table t1 (s text);
|
create table t1 (s text);
|
||||||
insert into t1 values('Could not break slave'),('Tried hard');
|
insert into t1 values('Could not break slave'),('Tried hard');
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 60 master-bin.000001 417 slave-relay-bin.000001 461 master-bin.000001 Yes Yes 0 0 417 461
|
127.0.0.1 root MASTER_PORT 60 master-bin.000001 417 slave-relay-bin.000001 461 master-bin.000001 Yes Yes 0 0 417 461 No
|
||||||
select * from t1;
|
select * from t1;
|
||||||
s
|
s
|
||||||
Could not break slave
|
Could not break slave
|
||||||
@ -56,8 +56,8 @@ Log_name
|
|||||||
master-bin.000003
|
master-bin.000003
|
||||||
insert into t2 values (65);
|
insert into t2 values (65);
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 60 master-bin.000003 290 slave-relay-bin.000001 1088 master-bin.000003 Yes Yes 0 0 290 1088
|
127.0.0.1 root MASTER_PORT 60 master-bin.000003 290 slave-relay-bin.000001 1088 master-bin.000003 Yes Yes 0 0 290 1088 No
|
||||||
select * from t2;
|
select * from t2;
|
||||||
m
|
m
|
||||||
34
|
34
|
||||||
@ -80,8 +80,8 @@ select * from t4;
|
|||||||
a
|
a
|
||||||
testing temporary tables part 2
|
testing temporary tables part 2
|
||||||
show slave status;
|
show slave status;
|
||||||
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space
|
Master_Host Master_User Master_Port Connect_retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_do_db Replicate_ignore_db Replicate_do_table Replicate_ignore_table Replicate_wild_do_table Replicate_wild_ignore_table Last_errno Last_error Skip_counter Exec_master_log_pos Relay_log_space Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key
|
||||||
127.0.0.1 root MASTER_PORT 60 master-bin.000004 2886 slave-relay-bin.000001 7891 master-bin.000004 Yes Yes 0 0 2886 7891
|
127.0.0.1 root MASTER_PORT 60 master-bin.000004 2886 slave-relay-bin.000001 7891 master-bin.000004 Yes Yes 0 0 2886 7891 No
|
||||||
lock tables t3 read;
|
lock tables t3 read;
|
||||||
select count(*) from t3 where n >= 4;
|
select count(*) from t3 where n >= 4;
|
||||||
count(*)
|
count(*)
|
||||||
|
@ -43,7 +43,7 @@ wait_timeout 28800
|
|||||||
show variables like "this_doesn't_exists%";
|
show variables like "this_doesn't_exists%";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
show table status from test like "this_doesn't_exists%";
|
show table status from test like "this_doesn't_exists%";
|
||||||
Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Charset Create_options Comment
|
Name Type Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Charset Checksum Create_options Comment
|
||||||
show databases;
|
show databases;
|
||||||
Database
|
Database
|
||||||
mysql
|
mysql
|
||||||
|
@ -1355,3 +1355,34 @@ a
|
|||||||
2
|
2
|
||||||
10
|
10
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
CREATE TABLE t1 (s1 CHAR(5) COLLATE latin1_german1_ci,
|
||||||
|
s2 CHAR(5) COLLATE latin1_swedish_ci);
|
||||||
|
INSERT INTO t1 VALUES ('z','?');
|
||||||
|
select * from t1 where s1 > (select max(s2) from t1);
|
||||||
|
ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '>'
|
||||||
|
select * from t1 where s1 > any (select max(s2) from t1);
|
||||||
|
ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '>'
|
||||||
|
drop table t1;
|
||||||
|
create table t1(toid int,rd int);
|
||||||
|
create table t2(userid int,pmnew int,pmtotal int);
|
||||||
|
insert into t2 values(1,0,0),(2,0,0);
|
||||||
|
insert into t1 values(1,0),(1,0),(1,0),(1,12),(1,15),(1,123),(1,12312),(1,12312),(1,123),(2,0),(2,0),(2,1),(2,2);
|
||||||
|
select userid,pmtotal,pmnew, (select count(rd) from t1 where toid=t2.userid) calc_total, (select count(rd) from t1 where rd=0 and toid=t2.userid) calc_new from t2 where userid in (select distinct toid from t1);
|
||||||
|
userid pmtotal pmnew calc_total calc_new
|
||||||
|
1 0 0 9 3
|
||||||
|
2 0 0 4 2
|
||||||
|
drop table t1, t2;
|
||||||
|
create table t1 (s1 char(5));
|
||||||
|
select (select 'a','b' from t1 union select 'a','b' from t1) from t1;
|
||||||
|
ERROR 21000: Cardinality error (more/less than 1 columns)
|
||||||
|
insert into t1 values ('tttt');
|
||||||
|
select * from t1 where ('a','b')=(select 'a','b' from t1 union select 'a','b' from t1);
|
||||||
|
s1
|
||||||
|
tttt
|
||||||
|
explain (select * from t1);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 system NULL NULL NULL NULL 1
|
||||||
|
(select * from t1);
|
||||||
|
s1
|
||||||
|
tttt
|
||||||
|
drop table t1;
|
||||||
|
@ -46,8 +46,6 @@ alter table t8 rename t7;
|
|||||||
rename table t7 to t9;
|
rename table t7 to t9;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
Warnings:
|
|
||||||
Note 1008 Can't drop database 'test_mysqltest'; database doesn't exist
|
|
||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
Got one of the listed errors
|
Got one of the listed errors
|
||||||
|
@ -103,7 +103,7 @@ a b
|
|||||||
2 b
|
2 b
|
||||||
select found_rows();
|
select found_rows();
|
||||||
found_rows()
|
found_rows()
|
||||||
6
|
8
|
||||||
explain select a,b from t1 union all select a,b from t2;
|
explain select a,b from t1 union all select a,b from t2;
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
1 PRIMARY t1 ALL NULL NULL NULL NULL 4
|
||||||
|
@ -48,8 +48,9 @@ flush privileges;
|
|||||||
#connect (con1,localhost,test,gambling2,"");
|
#connect (con1,localhost,test,gambling2,"");
|
||||||
#show tables;
|
#show tables;
|
||||||
connect (con1,localhost,test,gambling2,mysql);
|
connect (con1,localhost,test,gambling2,mysql);
|
||||||
|
set password=old_password('gambling3');
|
||||||
show tables;
|
show tables;
|
||||||
connect (con1,localhost,test,gambling2,test);
|
connect (con1,localhost,test,gambling3,test);
|
||||||
show tables;
|
show tables;
|
||||||
|
|
||||||
# Re enable this one day if error handling on connect will take place
|
# Re enable this one day if error handling on connect will take place
|
||||||
@ -63,7 +64,9 @@ show tables;
|
|||||||
#connect (con1,localhost,test,zorro,);
|
#connect (con1,localhost,test,zorro,);
|
||||||
#--error 1045
|
#--error 1045
|
||||||
|
|
||||||
|
|
||||||
# remove user 'test' so that other tests which may use 'test'
|
# remove user 'test' so that other tests which may use 'test'
|
||||||
# do not depend on this test.
|
# do not depend on this test.
|
||||||
|
|
||||||
delete from mysql.user where user="test";
|
delete from mysql.user where user="test";
|
||||||
flush privileges;
|
flush privileges;
|
||||||
|
@ -219,6 +219,44 @@ drop table t1;
|
|||||||
#
|
#
|
||||||
# Bug # 801
|
# Bug # 801
|
||||||
#
|
#
|
||||||
|
|
||||||
create table t1 select x'4132';
|
create table t1 select x'4132';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test types of data for create select with functions
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1(a int,b int,c int unsigned,d date,e char,f datetime,g time,h blob);
|
||||||
|
insert into t1(a)values(1);
|
||||||
|
insert into t1(a,b,c,d,e,f,g,h)
|
||||||
|
values(2,-2,2,'1825-12-14','a','2003-1-1 3:2:1','4:3:2','binary data');
|
||||||
|
select * from t1;
|
||||||
|
select a,
|
||||||
|
ifnull(b,cast(-7 as signed)) as b,
|
||||||
|
ifnull(c,cast(7 as unsigned)) as c,
|
||||||
|
ifnull(d,cast('2000-01-01' as date)) as d,
|
||||||
|
ifnull(e,cast('b' as char)) as e,
|
||||||
|
ifnull(f,cast('2000-01-01' as datetime)) as f,
|
||||||
|
ifnull(g,cast('5:4:3' as time)) as g,
|
||||||
|
ifnull(h,cast('yet another binary data' as binary)) as h,
|
||||||
|
addtime(cast('1:0:0' as time),cast('1:0:0' as time)) as dd
|
||||||
|
from t1;
|
||||||
|
|
||||||
|
create table t2
|
||||||
|
select
|
||||||
|
a,
|
||||||
|
ifnull(b,cast(-7 as signed)) as b,
|
||||||
|
ifnull(c,cast(7 as unsigned)) as c,
|
||||||
|
ifnull(d,cast('2000-01-01' as date)) as d,
|
||||||
|
ifnull(e,cast('b' as char)) as e,
|
||||||
|
ifnull(f,cast('2000-01-01' as datetime)) as f,
|
||||||
|
ifnull(g,cast('5:4:3' as time)) as g,
|
||||||
|
ifnull(h,cast('yet another binary data' as binary)) as h,
|
||||||
|
addtime(cast('1:0:0' as time),cast('1:0:0' as time)) as dd
|
||||||
|
from t1;
|
||||||
|
explain t2;
|
||||||
|
|
||||||
|
select * from t2;
|
||||||
|
|
||||||
|
drop table t1, t2;
|
||||||
|
|
||||||
|
@ -94,3 +94,16 @@ drop table t1,t2;
|
|||||||
# derived table reference
|
# derived table reference
|
||||||
#
|
#
|
||||||
SELECT a.x FROM (SELECT 1 AS x) AS a HAVING a.x = 1;
|
SELECT a.x FROM (SELECT 1 AS x) AS a HAVING a.x = 1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test for select if database is not selected.
|
||||||
|
#
|
||||||
|
# Connect without a database
|
||||||
|
create table a1 select 1 as a;
|
||||||
|
connect (con1,localhost,mysqltest_1,,*NO-ONE*,$MASTER_MYPORT,master.sock);
|
||||||
|
connection con1;
|
||||||
|
--error 1046
|
||||||
|
select 2 as a from (select * from a1) b;
|
||||||
|
use test;
|
||||||
|
select 2 as a from (select * from a1) b;
|
||||||
|
drop table a1;
|
||||||
|
@ -43,3 +43,13 @@ drop database mysqltest;
|
|||||||
show databases;
|
show databases;
|
||||||
--error 1008
|
--error 1008
|
||||||
drop database mysqltest;
|
drop database mysqltest;
|
||||||
|
|
||||||
|
# test create table and FLUSH TABLES WITH READ LOCK
|
||||||
|
drop table t1;
|
||||||
|
flush tables with read lock;
|
||||||
|
--error 1223;
|
||||||
|
create table t1(n int);
|
||||||
|
unlock tables;
|
||||||
|
create table t1(n int);
|
||||||
|
show tables;
|
||||||
|
drop table t1;
|
||||||
|
@ -4,7 +4,33 @@ select length(encrypt('foo', 'ff')) <> 0;
|
|||||||
--replace_result $1$aa$4OSUA5cjdx0RUQ08opV27/ aaqPiZY5xR5l.
|
--replace_result $1$aa$4OSUA5cjdx0RUQ08opV27/ aaqPiZY5xR5l.
|
||||||
|
|
||||||
# Test new and old password handling functions
|
# Test new and old password handling functions
|
||||||
select password("a",""), password("a",NULL), password("","a"), password(NULL,"a");
|
select password('abc');
|
||||||
select password("aaaaaaaaaaaaaaaa","a"), password("a","aaaaaaaaaaaaaaaa");
|
select password('');
|
||||||
select old_password('test'), length(password("1")), length(encrypt('test')), encrypt('test','aa');
|
select old_password('abc');
|
||||||
select old_password(""), old_password(NULL), password(""), password(NULL);
|
select old_password('');
|
||||||
|
select password('gabbagabbahey');
|
||||||
|
select old_password('idkfa');
|
||||||
|
select length(password('1'));
|
||||||
|
select length(encrypt('test'));
|
||||||
|
select encrypt('test','aa');
|
||||||
|
select old_password(NULL);
|
||||||
|
select password(NULL);
|
||||||
|
set global old_passwords=on;
|
||||||
|
select password('');
|
||||||
|
select old_password('');
|
||||||
|
select password('idkfa');
|
||||||
|
select old_password('idkfa');
|
||||||
|
set old_passwords=on;
|
||||||
|
select password('idkfa');
|
||||||
|
select old_password('idkfa');
|
||||||
|
set global old_passwords=off;
|
||||||
|
select password('idkfa');
|
||||||
|
select old_password('idkfa');
|
||||||
|
|
||||||
|
# this test shows that new scrambles honor spaces in passwords:
|
||||||
|
set old_passwords=off;
|
||||||
|
select password('idkfa ');
|
||||||
|
select password('idkfa');
|
||||||
|
select password(' idkfa');
|
||||||
|
select old_password('idkfa');
|
||||||
|
select old_password(' i d k f a ');
|
||||||
|
@ -91,6 +91,11 @@ insert into t2 values (1,4), (5,4), (5,5);
|
|||||||
--replace_result www.help.com X www.host.com X www.google.com X
|
--replace_result www.help.com X www.host.com X www.google.com X
|
||||||
select REQ_ID, Group_Concat(URL) as URL from t1, t2 where
|
select REQ_ID, Group_Concat(URL) as URL from t1, t2 where
|
||||||
t2.URL_ID = t1.URL_ID group by REQ_ID;
|
t2.URL_ID = t1.URL_ID group by REQ_ID;
|
||||||
|
# check min/max function
|
||||||
|
--replace_result www.help.com X www.host.com X www.google.com X
|
||||||
|
select REQ_ID, Group_Concat(URL) as URL, Min(t1.URL_ID) urll,
|
||||||
|
Max(t1.URL_ID)
|
||||||
|
urlg from t1, t2 where t2.URL_ID = t1.URL_ID group by REQ_ID;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
@ -99,3 +104,19 @@ insert into t1 values (1,'longername'),(1,'evenlongername');
|
|||||||
insert into t1 values (1,'longername'),(1,'evenlongername');
|
insert into t1 values (1,'longername'),(1,'evenlongername');
|
||||||
select ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'without distinct: how it should be' from t1;
|
select ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'without distinct: how it should be' from t1;
|
||||||
select distinct ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'with distinct: cutoff at length of shortname' from t1;
|
select distinct ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'with distinct: cutoff at length of shortname' from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
# check zero rows
|
||||||
|
create table t1(id int);
|
||||||
|
create table t2(id int);
|
||||||
|
insert into t1 values(0),(1);
|
||||||
|
select group_concat(t1.id) FROM t1,t2;
|
||||||
|
drop table t1;
|
||||||
|
drop table t2;
|
||||||
|
|
||||||
|
# check having
|
||||||
|
create table t1 (bar varchar(32));
|
||||||
|
insert into t1 values('test'),('test2');
|
||||||
|
select * from t1 having group_concat(bar)='';
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -133,6 +133,21 @@ select n from t1;
|
|||||||
rollback;
|
rollback;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test for commit and FLUSH TABLES WITH READ LOCK
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (n int not null primary key) type=innodb;
|
||||||
|
start transaction;
|
||||||
|
insert into t1 values (4);
|
||||||
|
flush tables with read lock;
|
||||||
|
--error 1223;
|
||||||
|
commit;
|
||||||
|
unlock tables;
|
||||||
|
commit;
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Testing transactions
|
# Testing transactions
|
||||||
#
|
#
|
||||||
@ -925,3 +940,29 @@ SELECT t2.id, t1.label FROM t2 INNER JOIN
|
|||||||
(SELECT t1.id_object as id_object FROM t1 WHERE t1.label LIKE '%test%') AS lbl
|
(SELECT t1.id_object as id_object FROM t1 WHERE t1.label LIKE '%test%') AS lbl
|
||||||
ON (t2.id = lbl.id_object) INNER JOIN t1 ON (t2.id = t1.id_object);
|
ON (t2.id = lbl.id_object) INNER JOIN t1 ON (t2.id = t1.id_object);
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #1078
|
||||||
|
#
|
||||||
|
create table t1 (c1 char(5) unique not null, c2 int, stamp timestamp) type=innodb;
|
||||||
|
select * from t1;
|
||||||
|
--error 1031
|
||||||
|
replace delayed into t1 (c1, c2) values ( "text1","11"),( "text2","12");
|
||||||
|
select * from t1;
|
||||||
|
--error 1031
|
||||||
|
replace delayed into t1 (c1, c2) values ( "text1","12"),( "text2","13"),( "text3","14", "a" ),( "text4","15", "b" );
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
create table t1 (a int, b varchar(200), c text not null) checksum=1 type=myisam;
|
||||||
|
create table t2 (a int, b varchar(200), c text not null) checksum=0 type=innodb;
|
||||||
|
create table t3 (a int, b varchar(200), c text not null) checksum=1 type=innodb;
|
||||||
|
insert t1 values (1, "aaa", "bbb"), (NULL, "", "ccccc"), (0, NULL, "");
|
||||||
|
insert t2 select * from t1;
|
||||||
|
insert t3 select * from t1;
|
||||||
|
checksum table t1, t2, t3, t4 quick;
|
||||||
|
checksum table t1, t2, t3, t4;
|
||||||
|
checksum table t1, t2, t3, t4 extended;
|
||||||
|
#show table status;
|
||||||
|
drop table t1,t2,t3;
|
||||||
|
|
||||||
|
@ -15,7 +15,3 @@ truncate table t1;
|
|||||||
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' LINES STARTING BY ',' (b,c,d);
|
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' LINES STARTING BY ',' (b,c,d);
|
||||||
SELECT * from t1;
|
SELECT * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -363,4 +363,15 @@ drop table t1,t2;
|
|||||||
CREATE TABLE t1 (`a` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0', UNIQUE KEY `a` USING RTREE (`a`,`b`)) TYPE=MyISAM;
|
CREATE TABLE t1 (`a` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0', UNIQUE KEY `a` USING RTREE (`a`,`b`)) TYPE=MyISAM;
|
||||||
# INSERT INTO t1 VALUES (1,1),(1,1);
|
# INSERT INTO t1 VALUES (1,1),(1,1);
|
||||||
# DELETE FROM rt WHERE a<1;
|
# DELETE FROM rt WHERE a<1;
|
||||||
DROP TABLE IF EXISTS t1;
|
# DROP TABLE IF EXISTS t1;
|
||||||
|
|
||||||
|
create table t1 (a int, b varchar(200), c text not null) checksum=1;
|
||||||
|
create table t2 (a int, b varchar(200), c text not null) checksum=0;
|
||||||
|
insert t1 values (1, "aaa", "bbb"), (NULL, "", "ccccc"), (0, NULL, "");
|
||||||
|
insert t2 select * from t1;
|
||||||
|
checksum table t1, t2, t3 quick;
|
||||||
|
checksum table t1, t2, t3;
|
||||||
|
checksum table t1, t2, t3 extended;
|
||||||
|
#show table status;
|
||||||
|
drop table t1,t2;
|
||||||
|
|
||||||
|
@ -77,3 +77,14 @@ select product, country_id , year, sum(profit) from t1 group by product, country
|
|||||||
|
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test bug with const tables
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (i int);
|
||||||
|
INSERT INTO t1 VALUES(100);
|
||||||
|
CREATE TABLE t2 (i int);
|
||||||
|
INSERT INTO t2 VALUES (100),(200);
|
||||||
|
SELECT i, COUNT(*) FROM t1 GROUP BY i WITH ROLLUP;
|
||||||
|
SELECT t1.i, t2.i, COUNT(*) FROM t1,t2 GROUP BY t1.i,t2.i WITH ROLLUP;
|
||||||
|
drop table t1,t2;
|
||||||
|
60
mysql-test/t/rpl_openssl.test
Normal file
60
mysql-test/t/rpl_openssl.test
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
source include/have_openssl_1.inc;
|
||||||
|
source include/master-slave.inc;
|
||||||
|
|
||||||
|
# We don't test all types of ssl auth params here since it's a bit hard
|
||||||
|
# until problems with OpenSSL 0.9.7 are unresolved
|
||||||
|
|
||||||
|
# creating replication user for whom ssl auth is required
|
||||||
|
# preparing playground
|
||||||
|
connection master;
|
||||||
|
grant replication slave on *.* to replssl@'%' require ssl;
|
||||||
|
create table t1 (t int);
|
||||||
|
save_master_pos;
|
||||||
|
|
||||||
|
#syncing with master
|
||||||
|
connection slave;
|
||||||
|
sync_with_master;
|
||||||
|
|
||||||
|
#trying to use this user without ssl
|
||||||
|
stop slave;
|
||||||
|
change master to master_user='replssl',master_password='';
|
||||||
|
start slave;
|
||||||
|
|
||||||
|
#showing that replication don't work
|
||||||
|
connection master;
|
||||||
|
insert into t1 values (1);
|
||||||
|
#reasonable timeout for changes to propagate to slave
|
||||||
|
sleep 3;
|
||||||
|
connection slave;
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
#showing that replication could work with ssl params
|
||||||
|
stop slave;
|
||||||
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||||
|
eval change master to master_ssl=1 , master_ssl_ca ='$MYSQL_TEST_DIR/std_data/cacert.pem', master_ssl_cert='$MYSQL_TEST_DIR/std_data/client-cert.pem', master_ssl_key='$MYSQL_TEST_DIR/std_data/client-key.pem';
|
||||||
|
start slave;
|
||||||
|
|
||||||
|
#avoiding unneeded sleeps
|
||||||
|
connection master;
|
||||||
|
save_master_pos;
|
||||||
|
connection slave;
|
||||||
|
sync_with_master;
|
||||||
|
|
||||||
|
#checking that replication is ok
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
#checking show slave status
|
||||||
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR $MASTER_MYPORT MASTER_MYPORT
|
||||||
|
show slave status;
|
||||||
|
|
||||||
|
#checking if replication works without ssl also performing clean up
|
||||||
|
stop slave;
|
||||||
|
change master to master_user='root',master_password='', master_ssl=0;
|
||||||
|
start slave;
|
||||||
|
connection master;
|
||||||
|
drop table t1;
|
||||||
|
save_master_pos;
|
||||||
|
connection slave;
|
||||||
|
sync_with_master;
|
||||||
|
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR $MASTER_MYPORT MASTER_MYPORT
|
||||||
|
show slave status;
|
@ -901,3 +901,36 @@ insert into t3 values (1),(2),(10),(50);
|
|||||||
select a from t3 where t3.a in (select a from t1 where a <= 3 union select * from t2 where a <= 30);
|
select a from t3 where t3.a in (select a from t1 where a <= 3 union select * from t2 where a <= 30);
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# collation test
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (s1 CHAR(5) COLLATE latin1_german1_ci,
|
||||||
|
s2 CHAR(5) COLLATE latin1_swedish_ci);
|
||||||
|
INSERT INTO t1 VALUES ('z','?');
|
||||||
|
-- error 1266
|
||||||
|
select * from t1 where s1 > (select max(s2) from t1);
|
||||||
|
-- error 1266
|
||||||
|
select * from t1 where s1 > any (select max(s2) from t1);
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# aggregate functions reinitialization
|
||||||
|
#
|
||||||
|
create table t1(toid int,rd int);
|
||||||
|
create table t2(userid int,pmnew int,pmtotal int);
|
||||||
|
insert into t2 values(1,0,0),(2,0,0);
|
||||||
|
insert into t1 values(1,0),(1,0),(1,0),(1,12),(1,15),(1,123),(1,12312),(1,12312),(1,123),(2,0),(2,0),(2,1),(2,2);
|
||||||
|
select userid,pmtotal,pmnew, (select count(rd) from t1 where toid=t2.userid) calc_total, (select count(rd) from t1 where rd=0 and toid=t2.userid) calc_new from t2 where userid in (select distinct toid from t1);
|
||||||
|
drop table t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# row union
|
||||||
|
#
|
||||||
|
create table t1 (s1 char(5));
|
||||||
|
-- error 1240
|
||||||
|
select (select 'a','b' from t1 union select 'a','b' from t1) from t1;
|
||||||
|
insert into t1 values ('tttt');
|
||||||
|
select * from t1 where ('a','b')=(select 'a','b' from t1 union select 'a','b' from t1);
|
||||||
|
explain (select * from t1);
|
||||||
|
(select * from t1);
|
||||||
|
drop table t1;
|
||||||
|
@ -29,7 +29,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
|
|||||||
mf_path.c mf_loadpath.c\
|
mf_path.c mf_loadpath.c\
|
||||||
my_open.c my_create.c my_dup.c my_seek.c my_read.c \
|
my_open.c my_create.c my_dup.c my_seek.c my_read.c \
|
||||||
my_pread.c my_write.c \
|
my_pread.c my_write.c \
|
||||||
mf_keycache.c \
|
mf_keycache.c my_crc32.c \
|
||||||
mf_iocache.c mf_iocache2.c mf_cache.c mf_tempfile.c \
|
mf_iocache.c mf_iocache2.c mf_cache.c mf_tempfile.c \
|
||||||
mf_tempdir.c my_lock.c mf_brkhant.c my_alarm.c \
|
mf_tempdir.c my_lock.c mf_brkhant.c my_alarm.c \
|
||||||
my_malloc.c my_realloc.c my_once.c mulalloc.c \
|
my_malloc.c my_realloc.c my_once.c mulalloc.c \
|
||||||
|
@ -19,19 +19,22 @@
|
|||||||
#include "my_sys.h"
|
#include "my_sys.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Calculate a long checksum for a memoryblock. Used to verify pack_isam
|
Calculate a long checksum for a memoryblock.
|
||||||
|
|
||||||
SYNOPSIS
|
SYNOPSIS
|
||||||
checksum()
|
my_checksum()
|
||||||
mem Pointer to memory block
|
crc start value for crc
|
||||||
count Count of bytes
|
pos pointer to memory block
|
||||||
|
length length of the block
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ulong checksum(const byte *mem, uint count)
|
ha_checksum my_checksum(ha_checksum crc, const byte *pos, uint length)
|
||||||
{
|
{
|
||||||
ulong crc;
|
/* const byte *end=pos+length;
|
||||||
for (crc= 0; count-- ; mem++)
|
for ( ; pos != end ; pos++)
|
||||||
crc= ((crc << 1) + *((uchar*) mem)) +
|
crc=((crc << 8) + *((uchar*) pos)) + (crc >> (8*sizeof(ha_checksum)-8));
|
||||||
test(crc & ((ulong) 1L << (8*sizeof(ulong)-1)));
|
|
||||||
return crc;
|
return crc;
|
||||||
|
*/
|
||||||
|
return (ha_checksum)crc32((uint)crc, (const uchar *)pos, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
36
mysys/my_crc32.c
Normal file
36
mysys/my_crc32.c
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/* Copyright (C) 2003 MySQL AB
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||||
|
|
||||||
|
#include "mysys_priv.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_COMPRESS
|
||||||
|
|
||||||
|
/* minimal set of defines for using crc32() from zlib codebase */
|
||||||
|
#define _ZLIB_H
|
||||||
|
#define ZEXPORT
|
||||||
|
#define Z_NULL 0
|
||||||
|
#define OF(args) args
|
||||||
|
#undef DYNAMIC_CRC_TABLE
|
||||||
|
typedef uchar Byte;
|
||||||
|
typedef uchar Bytef;
|
||||||
|
typedef uint uInt;
|
||||||
|
typedef ulong uLong;
|
||||||
|
typedef ulong uLongf;
|
||||||
|
|
||||||
|
#include "../zlib/crc32.c"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -24,26 +24,26 @@
|
|||||||
|
|
||||||
/* My memory allocator */
|
/* My memory allocator */
|
||||||
|
|
||||||
gptr my_malloc(unsigned int Size, myf MyFlags)
|
gptr my_malloc(unsigned int size, myf my_flags)
|
||||||
{
|
{
|
||||||
gptr point;
|
gptr point;
|
||||||
DBUG_ENTER("my_malloc");
|
DBUG_ENTER("my_malloc");
|
||||||
DBUG_PRINT("my",("Size: %u MyFlags: %d",Size, MyFlags));
|
DBUG_PRINT("my",("size: %u my_flags: %d",size, my_flags));
|
||||||
|
|
||||||
if (!Size)
|
if (!size)
|
||||||
Size=1; /* Safety */
|
size=1; /* Safety */
|
||||||
if ((point = (char*)malloc(Size)) == NULL)
|
if ((point = (char*)malloc(size)) == NULL)
|
||||||
{
|
{
|
||||||
my_errno=errno;
|
my_errno=errno;
|
||||||
if (MyFlags & MY_FAE)
|
if (my_flags & MY_FAE)
|
||||||
error_handler_hook=fatal_error_handler_hook;
|
error_handler_hook=fatal_error_handler_hook;
|
||||||
if (MyFlags & (MY_FAE+MY_WME))
|
if (my_flags & (MY_FAE+MY_WME))
|
||||||
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),Size);
|
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),size);
|
||||||
if (MyFlags & MY_FAE)
|
if (my_flags & MY_FAE)
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
else if (MyFlags & MY_ZEROFILL)
|
else if (my_flags & MY_ZEROFILL)
|
||||||
bzero(point,Size);
|
bzero(point,size);
|
||||||
DBUG_PRINT("exit",("ptr: %lx",point));
|
DBUG_PRINT("exit",("ptr: %lx",point));
|
||||||
DBUG_RETURN(point);
|
DBUG_RETURN(point);
|
||||||
} /* my_malloc */
|
} /* my_malloc */
|
||||||
@ -64,29 +64,29 @@ void my_no_flags_free(gptr ptr)
|
|||||||
|
|
||||||
/* malloc and copy */
|
/* malloc and copy */
|
||||||
|
|
||||||
gptr my_memdup(const byte *from, uint length, myf MyFlags)
|
gptr my_memdup(const byte *from, uint length, myf my_flags)
|
||||||
{
|
{
|
||||||
gptr ptr;
|
gptr ptr;
|
||||||
if ((ptr=my_malloc(length,MyFlags)) != 0)
|
if ((ptr=my_malloc(length,my_flags)) != 0)
|
||||||
memcpy((byte*) ptr, (byte*) from,(size_t) length);
|
memcpy((byte*) ptr, (byte*) from,(size_t) length);
|
||||||
return(ptr);
|
return(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *my_strdup(const char *from, myf MyFlags)
|
char *my_strdup(const char *from, myf my_flags)
|
||||||
{
|
{
|
||||||
gptr ptr;
|
gptr ptr;
|
||||||
uint length=(uint) strlen(from)+1;
|
uint length=(uint) strlen(from)+1;
|
||||||
if ((ptr=my_malloc(length,MyFlags)) != 0)
|
if ((ptr=my_malloc(length,my_flags)) != 0)
|
||||||
memcpy((byte*) ptr, (byte*) from,(size_t) length);
|
memcpy((byte*) ptr, (byte*) from,(size_t) length);
|
||||||
return((my_string) ptr);
|
return((my_string) ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
char *my_strdup_with_length(const byte *from, uint length, myf MyFlags)
|
char *my_strdup_with_length(const byte *from, uint length, myf my_flags)
|
||||||
{
|
{
|
||||||
gptr ptr;
|
gptr ptr;
|
||||||
if ((ptr=my_malloc(length+1,MyFlags)) != 0)
|
if ((ptr=my_malloc(length+1,my_flags)) != 0)
|
||||||
{
|
{
|
||||||
memcpy((byte*) ptr, (byte*) from,(size_t) length);
|
memcpy((byte*) ptr, (byte*) from,(size_t) length);
|
||||||
((char*) ptr)[length]=0;
|
((char*) ptr)[length]=0;
|
||||||
|
@ -23,40 +23,41 @@
|
|||||||
|
|
||||||
/* My memory re allocator */
|
/* My memory re allocator */
|
||||||
|
|
||||||
gptr my_realloc(gptr oldpoint, uint Size, myf MyFlags)
|
gptr my_realloc(gptr oldpoint, uint size, myf my_flags)
|
||||||
{
|
{
|
||||||
gptr point;
|
gptr point;
|
||||||
DBUG_ENTER("my_realloc");
|
DBUG_ENTER("my_realloc");
|
||||||
DBUG_PRINT("my",("ptr: %lx Size: %u MyFlags: %d",oldpoint, Size, MyFlags));
|
DBUG_PRINT("my",("ptr: %lx size: %u my_flags: %d",oldpoint, size,
|
||||||
|
my_flags));
|
||||||
|
|
||||||
if (!oldpoint && (MyFlags & MY_ALLOW_ZERO_PTR))
|
if (!oldpoint && (my_flags & MY_ALLOW_ZERO_PTR))
|
||||||
DBUG_RETURN(my_malloc(Size,MyFlags));
|
DBUG_RETURN(my_malloc(size,my_flags));
|
||||||
#ifdef USE_HALLOC
|
#ifdef USE_HALLOC
|
||||||
if (!(point = malloc(Size)))
|
if (!(point = malloc(size)))
|
||||||
{
|
{
|
||||||
if (MyFlags & MY_FREE_ON_ERROR)
|
if (my_flags & MY_FREE_ON_ERROR)
|
||||||
my_free(oldpoint,MyFlags);
|
my_free(oldpoint,my_flags);
|
||||||
if (MyFlags & MY_HOLD_ON_ERROR)
|
if (my_flags & MY_HOLD_ON_ERROR)
|
||||||
DBUG_RETURN(oldpoint);
|
DBUG_RETURN(oldpoint);
|
||||||
my_errno=errno;
|
my_errno=errno;
|
||||||
if (MyFlags & MY_FAE+MY_WME)
|
if (my_flags & MY_FAE+MY_WME)
|
||||||
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),Size);
|
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG),size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy(point,oldpoint,Size);
|
memcpy(point,oldpoint,size);
|
||||||
free(oldpoint);
|
free(oldpoint);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if ((point = (char*)realloc(oldpoint,Size)) == NULL)
|
if ((point = (char*)realloc(oldpoint,size)) == NULL)
|
||||||
{
|
{
|
||||||
if (MyFlags & MY_FREE_ON_ERROR)
|
if (my_flags & MY_FREE_ON_ERROR)
|
||||||
my_free(oldpoint,MyFLAGS);
|
my_free(oldpoint,MyFLAGS);
|
||||||
if (MyFlags & MY_HOLD_ON_ERROR)
|
if (my_flags & MY_HOLD_ON_ERROR)
|
||||||
DBUG_RETURN(oldpoint);
|
DBUG_RETURN(oldpoint);
|
||||||
my_errno=errno;
|
my_errno=errno;
|
||||||
if (MyFlags & (MY_FAE+MY_WME))
|
if (my_flags & (MY_FAE+MY_WME))
|
||||||
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG), Size);
|
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG), size);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
DBUG_PRINT("exit",("ptr: %lx",point));
|
DBUG_PRINT("exit",("ptr: %lx",point));
|
||||||
|
@ -86,6 +86,8 @@ client_libs='@CLIENT_LIBS@'
|
|||||||
|
|
||||||
libs="$ldflags -L'$pkglibdir' -lmysqlclient $client_libs"
|
libs="$ldflags -L'$pkglibdir' -lmysqlclient $client_libs"
|
||||||
libs=`echo $libs | sed -e 's; +;;'`
|
libs=`echo $libs | sed -e 's; +;;'`
|
||||||
|
libs_r="$ldflags -L'$pkglibdir' -lmysqlclient_r $client_libs"
|
||||||
|
libs_r=`echo $libs_r | sed -e 's; +;;'`
|
||||||
cflags="-I'$pkgincludedir'"
|
cflags="-I'$pkgincludedir'"
|
||||||
embedded_libs="$ldflags -L'$pkglibdir' -lmysqld @LIBS@ @innodb_system_libs@"
|
embedded_libs="$ldflags -L'$pkglibdir' -lmysqld @LIBS@ @innodb_system_libs@"
|
||||||
|
|
||||||
@ -95,6 +97,7 @@ Usage: $0 [OPTIONS]
|
|||||||
Options:
|
Options:
|
||||||
--cflags [$cflags]
|
--cflags [$cflags]
|
||||||
--libs [$libs]
|
--libs [$libs]
|
||||||
|
--libs_r [$libs_r]
|
||||||
--socket [$socket]
|
--socket [$socket]
|
||||||
--port [$port]
|
--port [$port]
|
||||||
--version [$version]
|
--version [$version]
|
||||||
@ -109,6 +112,7 @@ while test $# -gt 0; do
|
|||||||
case $1 in
|
case $1 in
|
||||||
--cflags) echo "$cflags" ;;
|
--cflags) echo "$cflags" ;;
|
||||||
--libs) echo "$libs" ;;
|
--libs) echo "$libs" ;;
|
||||||
|
--libs_r) echo "$libs_r" ;;
|
||||||
--socket) echo "$socket" ;;
|
--socket) echo "$socket" ;;
|
||||||
--port) echo "$port" ;;
|
--port) echo "$port" ;;
|
||||||
--version) echo "$version" ;;
|
--version) echo "$version" ;;
|
||||||
|
@ -108,7 +108,7 @@ then
|
|||||||
c_u="$c_u CREATE TABLE user ("
|
c_u="$c_u CREATE TABLE user ("
|
||||||
c_u="$c_u Host char(60) binary DEFAULT '' NOT NULL,"
|
c_u="$c_u Host char(60) binary DEFAULT '' NOT NULL,"
|
||||||
c_u="$c_u User char(16) binary DEFAULT '' NOT NULL,"
|
c_u="$c_u User char(16) binary DEFAULT '' NOT NULL,"
|
||||||
c_u="$c_u Password char(45) binary DEFAULT '' NOT NULL,"
|
c_u="$c_u Password char(41) binary DEFAULT '' NOT NULL,"
|
||||||
c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_u="$c_u Select_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_u="$c_u Insert_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
c_u="$c_u Update_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||||
|
@ -1,10 +1,22 @@
|
|||||||
|
-- This script converts any old privilege tables to privilege tables suitable
|
||||||
|
-- for MySQL 4.0.
|
||||||
|
|
||||||
|
-- You can safely ignore all 'Duplicate column' and 'Unknown column' errors"
|
||||||
|
-- as this just means that your tables where already up to date.
|
||||||
|
-- This script is safe to run even if your tables are already up to date!
|
||||||
|
|
||||||
|
-- On unix, you should use the mysql_fix_privilege_tables script to execute
|
||||||
|
-- this sql script.
|
||||||
|
-- On windows you should do 'mysql --force < mysql_fix_privilege_tables.sql'
|
||||||
|
|
||||||
|
USE mysql;
|
||||||
ALTER TABLE user type=MyISAM;
|
ALTER TABLE user type=MyISAM;
|
||||||
ALTER TABLE db type=MyISAM;
|
ALTER TABLE db type=MyISAM;
|
||||||
ALTER TABLE host type=MyISAM;
|
ALTER TABLE host type=MyISAM;
|
||||||
ALTER TABLE func type=MyISAM;
|
ALTER TABLE func type=MyISAM;
|
||||||
ALTER TABLE columns_priv type=MyISAM;
|
ALTER TABLE columns_priv type=MyISAM;
|
||||||
ALTER TABLE tables_priv type=MyISAM;
|
ALTER TABLE tables_priv type=MyISAM;
|
||||||
ALTER TABLE user change Password Password char(45) not null;
|
ALTER TABLE user change Password Password char(41) not null;
|
||||||
ALTER TABLE user add File_priv enum('N','Y') NOT NULL;
|
ALTER TABLE user add File_priv enum('N','Y') NOT NULL;
|
||||||
CREATE TABLE IF NOT EXISTS func (
|
CREATE TABLE IF NOT EXISTS func (
|
||||||
name char(64) DEFAULT '' NOT NULL,
|
name char(64) DEFAULT '' NOT NULL,
|
||||||
|
@ -587,7 +587,7 @@ net_safe_read(MYSQL *mysql)
|
|||||||
DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d",
|
DBUG_PRINT("error",("Wrong connection or packet. fd: %s len: %d",
|
||||||
vio_description(net->vio),len));
|
vio_description(net->vio),len));
|
||||||
#ifdef MYSQL_SERVER
|
#ifdef MYSQL_SERVER
|
||||||
if (socket_errno == SOCKET_EINTR)
|
if (vio_errno(net->vio) == SOCKET_EINTR)
|
||||||
return (packet_error);
|
return (packet_error);
|
||||||
#endif /*MYSQL_SERVER*/
|
#endif /*MYSQL_SERVER*/
|
||||||
end_server(mysql);
|
end_server(mysql);
|
||||||
@ -636,7 +636,7 @@ void free_rows(MYSQL_DATA *cur)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static my_bool
|
static my_bool STDCALL
|
||||||
cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
cli_advanced_command(MYSQL *mysql, enum enum_server_command command,
|
||||||
const char *header, ulong header_length,
|
const char *header, ulong header_length,
|
||||||
const char *arg, ulong arg_length, my_bool skip_check)
|
const char *arg, ulong arg_length, my_bool skip_check)
|
||||||
@ -1008,7 +1008,7 @@ void mysql_read_default_options(struct st_mysql_options *options,
|
|||||||
else the lengths are calculated from the offset between pointers.
|
else the lengths are calculated from the offset between pointers.
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
static void cli_fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count)
|
static void STDCALL cli_fetch_lengths(ulong *to, MYSQL_ROW column, uint field_count)
|
||||||
{
|
{
|
||||||
ulong *prev_length;
|
ulong *prev_length;
|
||||||
byte *start=0;
|
byte *start=0;
|
||||||
@ -1391,76 +1391,6 @@ mysql_ssl_free(MYSQL *mysql __attribute__((unused)))
|
|||||||
#endif /* HAVE_OPENSSL */
|
#endif /* HAVE_OPENSSL */
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Handle password authentication
|
|
||||||
*/
|
|
||||||
|
|
||||||
my_bool mysql_autenticate(MYSQL *mysql, const char *passwd)
|
|
||||||
{
|
|
||||||
ulong pkt_length;
|
|
||||||
NET *net= &mysql->net;
|
|
||||||
char buff[SCRAMBLE41_LENGTH];
|
|
||||||
char password_hash[SCRAMBLE41_LENGTH]; /* Used for storage of stage1 hash */
|
|
||||||
|
|
||||||
/* We shall only query server if it expect us to do so */
|
|
||||||
if ((pkt_length=net_safe_read(mysql)) == packet_error)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
if (mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
This should always happen with new server unless empty password
|
|
||||||
OK/Error packets have zero as the first char
|
|
||||||
*/
|
|
||||||
if (pkt_length == 24 && net->read_pos[0])
|
|
||||||
{
|
|
||||||
/* Old passwords will have '*' at the first byte of hash */
|
|
||||||
if (net->read_pos[0] != '*')
|
|
||||||
{
|
|
||||||
/* Build full password hash as it is required to decode scramble */
|
|
||||||
password_hash_stage1(buff, passwd);
|
|
||||||
/* Store copy as we'll need it later */
|
|
||||||
memcpy(password_hash,buff,SCRAMBLE41_LENGTH);
|
|
||||||
/* Finally hash complete password using hash we got from server */
|
|
||||||
password_hash_stage2(password_hash,(const char*) net->read_pos);
|
|
||||||
/* Decypt and store scramble 4 = hash for stage2 */
|
|
||||||
password_crypt((const char*) net->read_pos+4,mysql->scramble_buff,
|
|
||||||
password_hash, SCRAMBLE41_LENGTH);
|
|
||||||
mysql->scramble_buff[SCRAMBLE41_LENGTH]=0;
|
|
||||||
/* Encode scramble with password. Recycle buffer */
|
|
||||||
password_crypt(mysql->scramble_buff,buff,buff,SCRAMBLE41_LENGTH);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Create password to decode scramble */
|
|
||||||
create_key_from_old_password(passwd,password_hash);
|
|
||||||
/* Decypt and store scramble 4 = hash for stage2 */
|
|
||||||
password_crypt((const char*) net->read_pos+4,mysql->scramble_buff,
|
|
||||||
password_hash, SCRAMBLE41_LENGTH);
|
|
||||||
mysql->scramble_buff[SCRAMBLE41_LENGTH]=0;
|
|
||||||
/* Finally scramble decoded scramble with password */
|
|
||||||
scramble(buff, mysql->scramble_buff, passwd,0);
|
|
||||||
}
|
|
||||||
/* Write second package of authentication */
|
|
||||||
if (my_net_write(net,buff,SCRAMBLE41_LENGTH) || net_flush(net))
|
|
||||||
{
|
|
||||||
net->last_errno= CR_SERVER_LOST;
|
|
||||||
strmov(net->sqlstate, unknown_sqlstate);
|
|
||||||
strmov(net->last_error,ER(net->last_errno));
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
/* Read what server thinks about out new auth message report */
|
|
||||||
if (net_safe_read(mysql) == packet_error)
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
error:
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Note that the mysql argument must be initialized with mysql_init()
|
Note that the mysql argument must be initialized with mysql_init()
|
||||||
before calling mysql_real_connect !
|
before calling mysql_real_connect !
|
||||||
@ -1553,7 +1483,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||||||
mysql->server_status=SERVER_STATUS_AUTOCOMMIT;
|
mysql->server_status=SERVER_STATUS_AUTOCOMMIT;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Grab a socket and connect it to the server
|
Part 0: Grab a socket and connect it to the server
|
||||||
*/
|
*/
|
||||||
#if defined(HAVE_SMEM)
|
#if defined(HAVE_SMEM)
|
||||||
if ((!mysql->options.protocol ||
|
if ((!mysql->options.protocol ||
|
||||||
@ -1754,6 +1684,11 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||||||
strmov(net->last_error,ER(net->last_errno));
|
strmov(net->last_error,ER(net->last_errno));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Part 1: Connection established, read and parse first packet
|
||||||
|
*/
|
||||||
|
|
||||||
if ((pkt_length=net_safe_read(mysql)) == packet_error)
|
if ((pkt_length=net_safe_read(mysql)) == packet_error)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
@ -1774,8 +1709,13 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||||||
end=strend((char*) net->read_pos+1);
|
end=strend((char*) net->read_pos+1);
|
||||||
mysql->thread_id=uint4korr(end+1);
|
mysql->thread_id=uint4korr(end+1);
|
||||||
end+=5;
|
end+=5;
|
||||||
strmake(mysql->scramble_buff,end,8);
|
/*
|
||||||
end+=9;
|
Scramble is split into two parts because old clients does not understand
|
||||||
|
long scrambles; here goes the first part.
|
||||||
|
*/
|
||||||
|
strmake(mysql->scramble, end, SCRAMBLE_LENGTH_323);
|
||||||
|
end+= SCRAMBLE_LENGTH_323+1;
|
||||||
|
|
||||||
if (pkt_length >= (uint) (end+1 - (char*) net->read_pos))
|
if (pkt_length >= (uint) (end+1 - (char*) net->read_pos))
|
||||||
mysql->server_capabilities=uint2korr(end);
|
mysql->server_capabilities=uint2korr(end);
|
||||||
if (pkt_length >= (uint) (end+18 - (char*) net->read_pos))
|
if (pkt_length >= (uint) (end+18 - (char*) net->read_pos))
|
||||||
@ -1784,6 +1724,14 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||||||
mysql->server_language=end[2];
|
mysql->server_language=end[2];
|
||||||
mysql->server_status=uint2korr(end+3);
|
mysql->server_status=uint2korr(end+3);
|
||||||
}
|
}
|
||||||
|
end+= 18;
|
||||||
|
if (pkt_length >= (uint) (end + SCRAMBLE_LENGTH - SCRAMBLE_LENGTH_323 + 1 -
|
||||||
|
(char *) net->read_pos))
|
||||||
|
strmake(mysql->scramble+SCRAMBLE_LENGTH_323, end,
|
||||||
|
SCRAMBLE_LENGTH-SCRAMBLE_LENGTH_323);
|
||||||
|
else
|
||||||
|
mysql->server_capabilities&= ~CLIENT_SECURE_CONNECTION;
|
||||||
|
|
||||||
charset_number= mysql->server_language;
|
charset_number= mysql->server_language;
|
||||||
|
|
||||||
/* Set character set */
|
/* Set character set */
|
||||||
@ -1860,9 +1808,12 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||||||
mysql->unix_socket=0;
|
mysql->unix_socket=0;
|
||||||
strmov(mysql->server_version,(char*) net->read_pos+1);
|
strmov(mysql->server_version,(char*) net->read_pos+1);
|
||||||
mysql->port=port;
|
mysql->port=port;
|
||||||
client_flag|=mysql->options.client_flag;
|
|
||||||
|
|
||||||
/* Send client information for access check */
|
/*
|
||||||
|
Part 2: format and send client info to the server for access check
|
||||||
|
*/
|
||||||
|
|
||||||
|
client_flag|=mysql->options.client_flag;
|
||||||
client_flag|=CLIENT_CAPABILITIES;
|
client_flag|=CLIENT_CAPABILITIES;
|
||||||
if (client_flag & CLIENT_MULTI_QUERIES)
|
if (client_flag & CLIENT_MULTI_QUERIES)
|
||||||
client_flag|= CLIENT_MULTI_RESULTS;
|
client_flag|= CLIENT_MULTI_RESULTS;
|
||||||
@ -1949,7 +1900,7 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||||||
mysql->server_status, client_flag));
|
mysql->server_status, client_flag));
|
||||||
/* This needs to be changed as it's not useful with big packets */
|
/* This needs to be changed as it's not useful with big packets */
|
||||||
if (user && user[0])
|
if (user && user[0])
|
||||||
strmake(end,user,32); /* Max user name */
|
strmake(end,user,USERNAME_LENGTH); /* Max user name */
|
||||||
else
|
else
|
||||||
read_user_name((char*) end);
|
read_user_name((char*) end);
|
||||||
|
|
||||||
@ -1958,41 +1909,30 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||||||
#include "_cust_libmysql.h"
|
#include "_cust_libmysql.h"
|
||||||
#endif
|
#endif
|
||||||
DBUG_PRINT("info",("user: %s",end));
|
DBUG_PRINT("info",("user: %s",end));
|
||||||
/*
|
end= strend(end) + 1;
|
||||||
We always start with old type handshake the only difference is message sent
|
if (passwd[0])
|
||||||
If server handles secure connection type we'll not send the real scramble
|
|
||||||
*/
|
|
||||||
if (mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
|
|
||||||
{
|
{
|
||||||
if (passwd[0])
|
if (mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
|
||||||
{
|
{
|
||||||
/* Prepare false scramble */
|
*end++= SCRAMBLE_LENGTH;
|
||||||
end=strend(end)+1;
|
scramble(end, mysql->scramble, passwd);
|
||||||
bfill(end, SCRAMBLE_LENGTH, 'x');
|
end+= SCRAMBLE_LENGTH;
|
||||||
end+=SCRAMBLE_LENGTH;
|
|
||||||
*end=0;
|
|
||||||
}
|
}
|
||||||
else /* For empty password*/
|
else
|
||||||
{
|
{
|
||||||
end=strend(end)+1;
|
scramble_323(end, mysql->scramble, passwd);
|
||||||
*end=0; /* Store zero length scramble */
|
end+= SCRAMBLE_LENGTH_323 + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
*end++= '\0'; /* empty password */
|
||||||
/*
|
|
||||||
Real scramble is only sent to old servers. This can be blocked
|
|
||||||
by calling mysql_options(MYSQL *, MYSQL_SECURE_CONNECT, (char*) &1);
|
|
||||||
*/
|
|
||||||
end=scramble(strend(end)+1, mysql->scramble_buff, passwd,
|
|
||||||
(my_bool) (mysql->protocol_version == 9));
|
|
||||||
}
|
|
||||||
/* Add database if needed */
|
/* Add database if needed */
|
||||||
if (db && (mysql->server_capabilities & CLIENT_CONNECT_WITH_DB))
|
if (db && (mysql->server_capabilities & CLIENT_CONNECT_WITH_DB))
|
||||||
{
|
{
|
||||||
end=strmake(end+1,db,NAME_LEN);
|
end= strmake(end, db, NAME_LEN) + 1;
|
||||||
mysql->db=my_strdup(db,MYF(MY_WME));
|
mysql->db= my_strdup(db,MYF(MY_WME));
|
||||||
db=0;
|
db= 0;
|
||||||
}
|
}
|
||||||
/* Write authentication package */
|
/* Write authentication package */
|
||||||
if (my_net_write(net,buff,(ulong) (end-buff)) || net_flush(net))
|
if (my_net_write(net,buff,(ulong) (end-buff)) || net_flush(net))
|
||||||
@ -2002,10 +1942,36 @@ CLI_MYSQL_REAL_CONNECT(MYSQL *mysql,const char *host, const char *user,
|
|||||||
strmov(net->last_error,ER(net->last_errno));
|
strmov(net->last_error,ER(net->last_errno));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Part 3: Authorization data's been sent. Now server can reply with
|
||||||
|
OK-packet, or re-request scrambled password.
|
||||||
|
*/
|
||||||
|
|
||||||
if (mysql_autenticate(mysql, passwd))
|
if ((pkt_length=net_safe_read(mysql)) == packet_error)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
|
if (pkt_length == 1 && net->read_pos[0] == 254 &&
|
||||||
|
mysql->server_capabilities & CLIENT_SECURE_CONNECTION)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
By sending this very specific reply server asks us to send scrambled
|
||||||
|
password in old format.
|
||||||
|
*/
|
||||||
|
scramble_323(buff, mysql->scramble, passwd);
|
||||||
|
if (my_net_write(net, buff, SCRAMBLE_LENGTH_323 + 1) || net_flush(net))
|
||||||
|
{
|
||||||
|
net->last_errno= CR_SERVER_LOST;
|
||||||
|
strmov(net->sqlstate, unknown_sqlstate);
|
||||||
|
strmov(net->last_error,ER(net->last_errno));
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
/* Read what server thinks about out new auth message report */
|
||||||
|
if (net_safe_read(mysql) == packet_error)
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (client_flag & CLIENT_COMPRESS) /* We will use compression */
|
if (client_flag & CLIENT_COMPRESS) /* We will use compression */
|
||||||
net->compress=1;
|
net->compress=1;
|
||||||
|
|
||||||
|
29
sql/field.h
29
sql/field.h
@ -305,6 +305,11 @@ public:
|
|||||||
unireg_check_arg, field_name_arg, table_arg,
|
unireg_check_arg, field_name_arg, table_arg,
|
||||||
dec_arg, zero_arg,unsigned_arg)
|
dec_arg, zero_arg,unsigned_arg)
|
||||||
{}
|
{}
|
||||||
|
Field_decimal(uint32 len_arg,bool maybe_null_arg, const char *field_name_arg,
|
||||||
|
struct st_table *table_arg,bool unsigned_arg)
|
||||||
|
:Field_num((char*) 0, len_arg, maybe_null_arg ? (uchar*) "": 0,0,
|
||||||
|
NONE, field_name_arg, table_arg,0,0,unsigned_arg)
|
||||||
|
{}
|
||||||
enum_field_types type() const { return FIELD_TYPE_DECIMAL;}
|
enum_field_types type() const { return FIELD_TYPE_DECIMAL;}
|
||||||
enum ha_base_keytype key_type() const
|
enum ha_base_keytype key_type() const
|
||||||
{ return zerofill ? HA_KEYTYPE_BINARY : HA_KEYTYPE_NUM; }
|
{ return zerofill ? HA_KEYTYPE_BINARY : HA_KEYTYPE_NUM; }
|
||||||
@ -334,6 +339,11 @@ public:
|
|||||||
unireg_check_arg, field_name_arg, table_arg,
|
unireg_check_arg, field_name_arg, table_arg,
|
||||||
0, zero_arg,unsigned_arg)
|
0, zero_arg,unsigned_arg)
|
||||||
{}
|
{}
|
||||||
|
Field_tiny(uint32 len_arg,bool maybe_null_arg, const char *field_name_arg,
|
||||||
|
struct st_table *table_arg,bool unsigned_arg)
|
||||||
|
:Field_num((char*) 0, len_arg, maybe_null_arg ? (uchar*) "": 0,0,
|
||||||
|
NONE, field_name_arg, table_arg,0,0,unsigned_arg)
|
||||||
|
{}
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
enum Item_result result_type () const { return INT_RESULT; }
|
||||||
enum_field_types type() const { return FIELD_TYPE_TINY;}
|
enum_field_types type() const { return FIELD_TYPE_TINY;}
|
||||||
enum ha_base_keytype key_type() const
|
enum ha_base_keytype key_type() const
|
||||||
@ -364,6 +374,11 @@ public:
|
|||||||
unireg_check_arg, field_name_arg, table_arg,
|
unireg_check_arg, field_name_arg, table_arg,
|
||||||
0, zero_arg,unsigned_arg)
|
0, zero_arg,unsigned_arg)
|
||||||
{}
|
{}
|
||||||
|
Field_short(uint32 len_arg,bool maybe_null_arg, const char *field_name_arg,
|
||||||
|
struct st_table *table_arg,bool unsigned_arg)
|
||||||
|
:Field_num((char*) 0, len_arg, maybe_null_arg ? (uchar*) "": 0,0,
|
||||||
|
NONE, field_name_arg, table_arg,0,0,unsigned_arg)
|
||||||
|
{}
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
enum Item_result result_type () const { return INT_RESULT; }
|
||||||
enum_field_types type() const { return FIELD_TYPE_SHORT;}
|
enum_field_types type() const { return FIELD_TYPE_SHORT;}
|
||||||
enum ha_base_keytype key_type() const
|
enum ha_base_keytype key_type() const
|
||||||
@ -497,6 +512,11 @@ public:
|
|||||||
unireg_check_arg, field_name_arg, table_arg,
|
unireg_check_arg, field_name_arg, table_arg,
|
||||||
dec_arg, zero_arg,unsigned_arg)
|
dec_arg, zero_arg,unsigned_arg)
|
||||||
{}
|
{}
|
||||||
|
Field_float(uint32 len_arg, bool maybe_null_arg, const char *field_name_arg,
|
||||||
|
struct st_table *table_arg, uint8 dec_arg)
|
||||||
|
:Field_num((char*) 0, len_arg, maybe_null_arg ? (uchar*) "": 0, (uint) 0,
|
||||||
|
NONE, field_name_arg, table_arg,dec_arg,0,0)
|
||||||
|
{}
|
||||||
enum_field_types type() const { return FIELD_TYPE_FLOAT;}
|
enum_field_types type() const { return FIELD_TYPE_FLOAT;}
|
||||||
enum ha_base_keytype key_type() const { return HA_KEYTYPE_FLOAT; }
|
enum ha_base_keytype key_type() const { return HA_KEYTYPE_FLOAT; }
|
||||||
int store(const char *to,uint length,CHARSET_INFO *charset);
|
int store(const char *to,uint length,CHARSET_INFO *charset);
|
||||||
@ -558,6 +578,11 @@ public:
|
|||||||
:Field_str(ptr_arg, len_arg, null, 1,
|
:Field_str(ptr_arg, len_arg, null, 1,
|
||||||
unireg_check_arg, field_name_arg, table_arg, cs)
|
unireg_check_arg, field_name_arg, table_arg, cs)
|
||||||
{}
|
{}
|
||||||
|
Field_null(uint32 len_arg, const char *field_name_arg,
|
||||||
|
struct st_table *table_arg, CHARSET_INFO *cs)
|
||||||
|
:Field_str((char*) 0, len_arg, null, 1,
|
||||||
|
NONE, field_name_arg, table_arg, cs)
|
||||||
|
{}
|
||||||
enum_field_types type() const { return FIELD_TYPE_NULL;}
|
enum_field_types type() const { return FIELD_TYPE_NULL;}
|
||||||
int store(const char *to, uint length, CHARSET_INFO *cs) { null[0]=1; return 0; }
|
int store(const char *to, uint length, CHARSET_INFO *cs) { null[0]=1; return 0; }
|
||||||
int store(double nr) { null[0]=1; return 0; }
|
int store(double nr) { null[0]=1; return 0; }
|
||||||
@ -627,6 +652,10 @@ public:
|
|||||||
:Field_tiny(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
|
:Field_tiny(ptr_arg, len_arg, null_ptr_arg, null_bit_arg,
|
||||||
unireg_check_arg, field_name_arg, table_arg, 1, 1)
|
unireg_check_arg, field_name_arg, table_arg, 1, 1)
|
||||||
{}
|
{}
|
||||||
|
Field_year(uint32 len_arg,bool maybe_null_arg, const char *field_name_arg,
|
||||||
|
struct st_table *table_arg)
|
||||||
|
:Field_tiny(len_arg,maybe_null_arg,field_name_arg,table_arg,1)
|
||||||
|
{}
|
||||||
enum_field_types type() const { return FIELD_TYPE_YEAR;}
|
enum_field_types type() const { return FIELD_TYPE_YEAR;}
|
||||||
int store(const char *to,uint length,CHARSET_INFO *charset);
|
int store(const char *to,uint length,CHARSET_INFO *charset);
|
||||||
int store(double nr);
|
int store(double nr);
|
||||||
|
@ -236,6 +236,8 @@ int ha_myisam::open(const char *name, int mode, uint test_if_locked)
|
|||||||
VOID(mi_extra(file, HA_EXTRA_WAIT_LOCK, 0));
|
VOID(mi_extra(file, HA_EXTRA_WAIT_LOCK, 0));
|
||||||
if (!table->db_record_offset)
|
if (!table->db_record_offset)
|
||||||
int_table_flags|=HA_REC_NOT_IN_SEQ;
|
int_table_flags|=HA_REC_NOT_IN_SEQ;
|
||||||
|
if (file->s->options & (HA_OPTION_CHECKSUM | HA_OPTION_COMPRESS_RECORD))
|
||||||
|
int_table_flags|=HA_HAS_CHECKSUM;
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1414,3 +1416,9 @@ int ha_myisam::ft_read(byte * buf)
|
|||||||
table->status=error ? STATUS_NOT_FOUND: 0;
|
table->status=error ? STATUS_NOT_FOUND: 0;
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint ha_myisam::checksum() const
|
||||||
|
{
|
||||||
|
return (uint)file->s->state.checksum;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -64,6 +64,7 @@ class ha_myisam: public handler
|
|||||||
uint max_keys() const { return MI_MAX_KEY; }
|
uint max_keys() const { return MI_MAX_KEY; }
|
||||||
uint max_key_parts() const { return MAX_REF_PARTS; }
|
uint max_key_parts() const { return MAX_REF_PARTS; }
|
||||||
uint max_key_length() const { return MI_MAX_KEY_LENGTH; }
|
uint max_key_length() const { return MI_MAX_KEY_LENGTH; }
|
||||||
|
uint checksum() const;
|
||||||
|
|
||||||
int open(const char *name, int mode, uint test_if_locked);
|
int open(const char *name, int mode, uint test_if_locked);
|
||||||
int close(void);
|
int close(void);
|
||||||
|
@ -359,7 +359,10 @@ int ha_commit_trans(THD *thd, THD_TRANS* trans)
|
|||||||
if (trans == &thd->transaction.all && mysql_bin_log.is_open() &&
|
if (trans == &thd->transaction.all && mysql_bin_log.is_open() &&
|
||||||
my_b_tell(&thd->transaction.trans_log))
|
my_b_tell(&thd->transaction.trans_log))
|
||||||
{
|
{
|
||||||
|
if (wait_if_global_read_lock(thd, 0))
|
||||||
|
DBUG_RETURN(1);
|
||||||
mysql_bin_log.write(thd, &thd->transaction.trans_log);
|
mysql_bin_log.write(thd, &thd->transaction.trans_log);
|
||||||
|
start_waiting_global_read_lock(thd);
|
||||||
reinit_io_cache(&thd->transaction.trans_log,
|
reinit_io_cache(&thd->transaction.trans_log,
|
||||||
WRITE_CACHE, (my_off_t) 0, 0, 1);
|
WRITE_CACHE, (my_off_t) 0, 0, 1);
|
||||||
thd->transaction.trans_log.end_of_file= max_binlog_cache_size;
|
thd->transaction.trans_log.end_of_file= max_binlog_cache_size;
|
||||||
|
@ -42,38 +42,39 @@
|
|||||||
#define HA_ADMIN_INVALID -5
|
#define HA_ADMIN_INVALID -5
|
||||||
|
|
||||||
/* Bits in table_flags() to show what database can do */
|
/* Bits in table_flags() to show what database can do */
|
||||||
#define HA_READ_RND_SAME 1 /* Read RND-record to KEY-record
|
#define HA_READ_RND_SAME 1 /* Read RND-record to KEY-record
|
||||||
(To update with RND-read) */
|
(To update with RND-read) */
|
||||||
#define HA_KEYPOS_TO_RNDPOS 2 /* ha_info gives pos to record */
|
#define HA_KEYPOS_TO_RNDPOS 2 /* ha_info gives pos to record */
|
||||||
#define HA_TABLE_SCAN_ON_INDEX 4 /* No separate data/index file */
|
#define HA_TABLE_SCAN_ON_INDEX 4 /* No separate data/index file */
|
||||||
#define HA_REC_NOT_IN_SEQ 8 /* ha_info don't return recnumber;
|
#define HA_REC_NOT_IN_SEQ 8 /* ha_info don't return recnumber;
|
||||||
It returns a position to ha_r_rnd */
|
It returns a position to ha_r_rnd */
|
||||||
#define HA_HAS_GEOMETRY 16
|
#define HA_HAS_GEOMETRY (1 << 4)
|
||||||
#define HA_NO_INDEX 32 /* No index needed for next/prev */
|
#define HA_NO_INDEX (1 << 5) /* No index needed for next/prev */
|
||||||
#define HA_KEY_READ_WRONG_STR 64 /* keyread returns converted strings */
|
#define HA_KEY_READ_WRONG_STR (1 << 6) /* keyread returns converted strings */
|
||||||
#define HA_NULL_KEY 128 /* One can have keys with NULL */
|
#define HA_NULL_KEY (1 << 7) /* One can have keys with NULL */
|
||||||
#define HA_DUPP_POS 256 /* ha_position() gives dupp row */
|
#define HA_DUPP_POS (1 << 8) /* ha_position() gives dupp row */
|
||||||
#define HA_NO_BLOBS 512 /* Doesn't support blobs */
|
#define HA_NO_BLOBS (1 << 9) /* Doesn't support blobs */
|
||||||
#define HA_BLOB_KEY (HA_NO_BLOBS*2) /* key on blob */
|
#define HA_BLOB_KEY (1 << 10) /* key on blob */
|
||||||
#define HA_AUTO_PART_KEY (HA_BLOB_KEY*2)
|
#define HA_AUTO_PART_KEY (1 << 11)
|
||||||
#define HA_REQUIRE_PRIMARY_KEY (HA_AUTO_PART_KEY*2)
|
#define HA_REQUIRE_PRIMARY_KEY (1 << 12)
|
||||||
#define HA_NOT_EXACT_COUNT (HA_REQUIRE_PRIMARY_KEY*2)
|
#define HA_NOT_EXACT_COUNT (1 << 13)
|
||||||
#define HA_NO_WRITE_DELAYED (HA_NOT_EXACT_COUNT*2)
|
#define HA_NO_WRITE_DELAYED (1 << 14)
|
||||||
#define HA_PRIMARY_KEY_IN_READ_INDEX (HA_NO_WRITE_DELAYED*2)
|
#define HA_PRIMARY_KEY_IN_READ_INDEX (1 << 15)
|
||||||
#define HA_DROP_BEFORE_CREATE (HA_PRIMARY_KEY_IN_READ_INDEX*2)
|
#define HA_DROP_BEFORE_CREATE (1 << 16)
|
||||||
#define HA_NOT_READ_AFTER_KEY (HA_DROP_BEFORE_CREATE*2)
|
#define HA_NOT_READ_AFTER_KEY (1 << 17)
|
||||||
#define HA_NOT_DELETE_WITH_CACHE (HA_NOT_READ_AFTER_KEY*2)
|
#define HA_NOT_DELETE_WITH_CACHE (1 << 18)
|
||||||
#define HA_NO_TEMP_TABLES (HA_NOT_DELETE_WITH_CACHE*2)
|
#define HA_NO_TEMP_TABLES (1 << 19)
|
||||||
#define HA_NO_PREFIX_CHAR_KEYS (HA_NO_TEMP_TABLES*2)
|
#define HA_NO_PREFIX_CHAR_KEYS (1 << 20)
|
||||||
#define HA_CAN_FULLTEXT (HA_NO_PREFIX_CHAR_KEYS*2)
|
#define HA_CAN_FULLTEXT (1 << 21)
|
||||||
#define HA_CAN_SQL_HANDLER (HA_CAN_FULLTEXT*2)
|
#define HA_CAN_SQL_HANDLER (1 << 22)
|
||||||
#define HA_NO_AUTO_INCREMENT (HA_CAN_SQL_HANDLER*2)
|
#define HA_NO_AUTO_INCREMENT (1 << 23)
|
||||||
|
#define HA_HAS_CHECKSUM (1 << 24)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Next record gives next record according last record read (even
|
Next record gives next record according last record read (even
|
||||||
if database is updated after read). Not used at this point.
|
if database is updated after read). Not used at this point.
|
||||||
*/
|
*/
|
||||||
#define HA_LASTKEY_ORDER (HA_NO_AUTO_INCREMENT*2)
|
#define HA_LASTKEY_ORDER (1 << 25)
|
||||||
|
|
||||||
|
|
||||||
/* bits in index_flags(index_number) for what you can do with index */
|
/* bits in index_flags(index_number) for what you can do with index */
|
||||||
@ -306,8 +307,8 @@ public:
|
|||||||
virtual bool check_and_repair(THD *thd) {return 1;}
|
virtual bool check_and_repair(THD *thd) {return 1;}
|
||||||
virtual int optimize(THD* thd,HA_CHECK_OPT* check_opt);
|
virtual int optimize(THD* thd,HA_CHECK_OPT* check_opt);
|
||||||
virtual int analyze(THD* thd, HA_CHECK_OPT* check_opt);
|
virtual int analyze(THD* thd, HA_CHECK_OPT* check_opt);
|
||||||
virtual int backup(THD* thd, HA_CHECK_OPT* check_opt);
|
|
||||||
virtual int preload_keys(THD* thd, HA_CHECK_OPT* check_opt);
|
virtual int preload_keys(THD* thd, HA_CHECK_OPT* check_opt);
|
||||||
|
virtual int backup(THD* thd, HA_CHECK_OPT* check_opt);
|
||||||
/*
|
/*
|
||||||
restore assumes .frm file must exist, and that generate_table() has been
|
restore assumes .frm file must exist, and that generate_table() has been
|
||||||
called; It will just copy the data file and run repair.
|
called; It will just copy the data file and run repair.
|
||||||
@ -325,8 +326,8 @@ public:
|
|||||||
virtual char* get_foreign_key_create_info()
|
virtual char* get_foreign_key_create_info()
|
||||||
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
{ return(NULL);} /* gets foreign key create string from InnoDB */
|
||||||
virtual void init_table_handle_for_HANDLER()
|
virtual void init_table_handle_for_HANDLER()
|
||||||
{ return; } /* prepare InnoDB for HANDLER */
|
{ return; } /* prepare InnoDB for HANDLER */
|
||||||
virtual void free_foreign_key_create_info(char* str) {}
|
virtual void free_foreign_key_create_info(char* str) {}
|
||||||
/* The following can be called without an open handler */
|
/* The following can be called without an open handler */
|
||||||
virtual const char *table_type() const =0;
|
virtual const char *table_type() const =0;
|
||||||
virtual const char **bas_ext() const =0;
|
virtual const char **bas_ext() const =0;
|
||||||
@ -342,6 +343,7 @@ public:
|
|||||||
virtual uint max_key_part_length() { return 255; }
|
virtual uint max_key_part_length() { return 255; }
|
||||||
virtual uint min_record_length(uint options) const { return 1; }
|
virtual uint min_record_length(uint options) const { return 1; }
|
||||||
virtual bool low_byte_first() const { return 1; }
|
virtual bool low_byte_first() const { return 1; }
|
||||||
|
virtual uint checksum() const { return 0; }
|
||||||
virtual bool is_crashed() const { return 0; }
|
virtual bool is_crashed() const { return 0; }
|
||||||
virtual bool auto_repair() const { return 0; }
|
virtual bool auto_repair() const { return 0; }
|
||||||
|
|
||||||
@ -355,13 +357,12 @@ public:
|
|||||||
|
|
||||||
/* Type of table for caching query */
|
/* Type of table for caching query */
|
||||||
virtual uint8 table_cache_type() { return HA_CACHE_TBL_NONTRANSACT; }
|
virtual uint8 table_cache_type() { return HA_CACHE_TBL_NONTRANSACT; }
|
||||||
/*
|
/*
|
||||||
Is query with this cable cachable (have sense only for ASKTRANSACT
|
Is query with this table cachable (have sense only for ASKTRANSACT
|
||||||
tables)
|
tables)
|
||||||
*/
|
*/
|
||||||
static bool caching_allowed(THD* thd, char* table_key,
|
static bool caching_allowed(THD* thd, char* table_key,
|
||||||
uint key_length, uint8 cahe_type);
|
uint key_length, uint8 cahe_type);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Some extern variables used with handlers */
|
/* Some extern variables used with handlers */
|
||||||
@ -390,7 +391,7 @@ int ha_delete_table(enum db_type db_type, const char *path);
|
|||||||
void ha_drop_database(char* path);
|
void ha_drop_database(char* path);
|
||||||
void ha_key_cache(void);
|
void ha_key_cache(void);
|
||||||
void ha_resize_key_cache(void);
|
void ha_resize_key_cache(void);
|
||||||
int ha_start_stmt(THD *thd);
|
int ha_start_stmt(THD *thd);
|
||||||
int ha_report_binlog_offset_and_commit(THD *thd, char *log_file_name,
|
int ha_report_binlog_offset_and_commit(THD *thd, char *log_file_name,
|
||||||
my_off_t end_offset);
|
my_off_t end_offset);
|
||||||
int ha_commit_complete(THD *thd);
|
int ha_commit_complete(THD *thd);
|
||||||
|
98
sql/item.cc
98
sql/item.cc
@ -490,27 +490,38 @@ String *Item_null::val_str(String *str)
|
|||||||
|
|
||||||
/* Item_param related */
|
/* Item_param related */
|
||||||
void Item_param::set_null()
|
void Item_param::set_null()
|
||||||
{
|
{
|
||||||
maybe_null=null_value=1;
|
DBUG_ENTER("Item_param::set_null");
|
||||||
|
maybe_null= null_value= 1;
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Item_param::set_int(longlong i)
|
void Item_param::set_int(longlong i)
|
||||||
{
|
{
|
||||||
int_value=(longlong)i;
|
DBUG_ENTER("Item_param::set_int");
|
||||||
item_type = INT_ITEM;
|
int_value= (longlong)i;
|
||||||
|
item_type= INT_ITEM;
|
||||||
|
DBUG_PRINT("info", ("integer: %lld", int_value));
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Item_param::set_double(double value)
|
void Item_param::set_double(double value)
|
||||||
{
|
{
|
||||||
|
DBUG_ENTER("Item_param::set_double");
|
||||||
real_value=value;
|
real_value=value;
|
||||||
item_type = REAL_ITEM;
|
item_type= REAL_ITEM;
|
||||||
|
DBUG_PRINT("info", ("double: %lg", real_value));
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Item_param::set_value(const char *str, uint length)
|
void Item_param::set_value(const char *str, uint length)
|
||||||
{
|
{
|
||||||
str_value.set(str,length,default_charset());
|
DBUG_ENTER("Item_param::set_value");
|
||||||
item_type = STRING_ITEM;
|
str_value.copy(str,length,default_charset());
|
||||||
|
item_type= STRING_ITEM;
|
||||||
|
DBUG_PRINT("info", ("string: %s", str_value.ptr()));
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -923,6 +934,73 @@ enum_field_types Item::field_type() const
|
|||||||
FIELD_TYPE_DOUBLE);
|
FIELD_TYPE_DOUBLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Field *Item::tmp_table_field_from_field_type(TABLE *table)
|
||||||
|
{
|
||||||
|
switch (field_type())
|
||||||
|
{
|
||||||
|
case MYSQL_TYPE_DECIMAL:
|
||||||
|
return new Field_decimal(max_length, maybe_null, name, table,
|
||||||
|
unsigned_flag);
|
||||||
|
case MYSQL_TYPE_TINY:
|
||||||
|
return new Field_tiny(max_length, maybe_null, name, table,
|
||||||
|
unsigned_flag);
|
||||||
|
case MYSQL_TYPE_SHORT:
|
||||||
|
return new Field_short(max_length, maybe_null, name, table,
|
||||||
|
unsigned_flag);
|
||||||
|
case MYSQL_TYPE_LONG:
|
||||||
|
return new Field_long(max_length, maybe_null, name, table,
|
||||||
|
unsigned_flag);
|
||||||
|
case MYSQL_TYPE_FLOAT:
|
||||||
|
return new Field_float(max_length, maybe_null, name, table, decimals);
|
||||||
|
case MYSQL_TYPE_DOUBLE:
|
||||||
|
return new Field_double(max_length, maybe_null, name, table, decimals);
|
||||||
|
case MYSQL_TYPE_NULL:
|
||||||
|
return new Field_null(max_length, name, table, &my_charset_bin);
|
||||||
|
#ifdef HAVE_LONG_LONG
|
||||||
|
case MYSQL_TYPE_LONGLONG:
|
||||||
|
return new Field_longlong(max_length, maybe_null, name, table,
|
||||||
|
unsigned_flag);
|
||||||
|
#endif
|
||||||
|
case MYSQL_TYPE_NEWDATE:
|
||||||
|
case MYSQL_TYPE_INT24:
|
||||||
|
return new Field_long(max_length, maybe_null, name, table,
|
||||||
|
unsigned_flag);
|
||||||
|
case MYSQL_TYPE_DATE:
|
||||||
|
return new Field_date(maybe_null, name, table, &my_charset_bin);
|
||||||
|
case MYSQL_TYPE_TIME:
|
||||||
|
return new Field_time(maybe_null, name, table, &my_charset_bin);
|
||||||
|
case MYSQL_TYPE_TIMESTAMP:
|
||||||
|
case MYSQL_TYPE_DATETIME:
|
||||||
|
return new Field_datetime(maybe_null, name, table, &my_charset_bin);
|
||||||
|
case MYSQL_TYPE_YEAR:
|
||||||
|
return new Field_year(max_length, maybe_null, name, table);
|
||||||
|
case MYSQL_TYPE_ENUM:
|
||||||
|
case MYSQL_TYPE_SET:
|
||||||
|
return new Field_long(max_length, maybe_null, name, table,
|
||||||
|
unsigned_flag);
|
||||||
|
case MYSQL_TYPE_TINY_BLOB:
|
||||||
|
case MYSQL_TYPE_MEDIUM_BLOB:
|
||||||
|
case MYSQL_TYPE_LONG_BLOB:
|
||||||
|
case MYSQL_TYPE_BLOB:
|
||||||
|
case MYSQL_TYPE_GEOMETRY:
|
||||||
|
return new Field_blob(max_length, maybe_null, name, table, collation.collation);
|
||||||
|
case MYSQL_TYPE_VAR_STRING:
|
||||||
|
if (max_length > 255)
|
||||||
|
return new Field_blob(max_length, maybe_null, name, table, collation.collation);
|
||||||
|
else
|
||||||
|
return new Field_varstring(max_length, maybe_null, name, table, collation.collation);
|
||||||
|
case MYSQL_TYPE_STRING:
|
||||||
|
if (max_length > 255)
|
||||||
|
return new Field_blob(max_length, maybe_null, name, table, collation.collation);
|
||||||
|
else
|
||||||
|
return new Field_string(max_length, maybe_null, name, table, collation.collation);
|
||||||
|
default:
|
||||||
|
// This case should never be choosen
|
||||||
|
DBUG_ASSERT(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
void Item_field::make_field(Send_field *tmp_field)
|
void Item_field::make_field(Send_field *tmp_field)
|
||||||
{
|
{
|
||||||
|
16
sql/item.h
16
sql/item.h
@ -120,6 +120,9 @@ public:
|
|||||||
Constructor used by Item_field, Item_ref & agregate (sum) functions.
|
Constructor used by Item_field, Item_ref & agregate (sum) functions.
|
||||||
Used for duplicating lists in processing queries with temporary
|
Used for duplicating lists in processing queries with temporary
|
||||||
tables
|
tables
|
||||||
|
Also it used for Item_cond_and/Item_cond_or for creating
|
||||||
|
top AND/OR ctructure of WHERE clause to protect it of
|
||||||
|
optimisation changes in prepared statements
|
||||||
*/
|
*/
|
||||||
Item(THD *thd, Item &item);
|
Item(THD *thd, Item &item);
|
||||||
virtual ~Item() { name=0; } /*lint -e1509 */
|
virtual ~Item() { name=0; } /*lint -e1509 */
|
||||||
@ -140,7 +143,7 @@ public:
|
|||||||
virtual double val()=0;
|
virtual double val()=0;
|
||||||
virtual longlong val_int()=0;
|
virtual longlong val_int()=0;
|
||||||
virtual String *val_str(String*)=0;
|
virtual String *val_str(String*)=0;
|
||||||
virtual Field *tmp_table_field() { return 0; }
|
virtual Field *get_tmp_table_field() { return 0; }
|
||||||
virtual Field *tmp_table_field(TABLE *t_arg) { return 0; }
|
virtual Field *tmp_table_field(TABLE *t_arg) { return 0; }
|
||||||
virtual const char *full_name() const { return name ? name : "???"; }
|
virtual const char *full_name() const { return name ? name : "???"; }
|
||||||
virtual double val_result() { return val(); }
|
virtual double val_result() { return val(); }
|
||||||
@ -184,6 +187,7 @@ public:
|
|||||||
virtual void save_in_result_field(bool no_conversions) {}
|
virtual void save_in_result_field(bool no_conversions) {}
|
||||||
virtual void no_rows_in_result() {}
|
virtual void no_rows_in_result() {}
|
||||||
virtual Item *copy_or_same(THD *thd) { return this; }
|
virtual Item *copy_or_same(THD *thd) { return this; }
|
||||||
|
virtual Item *copy_andor_structure(THD *thd) { return this; }
|
||||||
virtual Item *real_item() { return this; }
|
virtual Item *real_item() { return this; }
|
||||||
virtual Item *get_tmp_table_item(THD *thd) { return copy_or_same(thd); }
|
virtual Item *get_tmp_table_item(THD *thd) { return copy_or_same(thd); }
|
||||||
|
|
||||||
@ -205,6 +209,8 @@ public:
|
|||||||
virtual bool null_inside() { return 0; }
|
virtual bool null_inside() { return 0; }
|
||||||
// used in row subselects to get value of elements
|
// used in row subselects to get value of elements
|
||||||
virtual void bring_value() {}
|
virtual void bring_value() {}
|
||||||
|
|
||||||
|
Field *tmp_table_field_from_field_type(TABLE *table);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -265,7 +271,7 @@ public:
|
|||||||
{
|
{
|
||||||
return field->type();
|
return field->type();
|
||||||
}
|
}
|
||||||
Field *tmp_table_field() { return result_field; }
|
Field *get_tmp_table_field() { return result_field; }
|
||||||
Field *tmp_table_field(TABLE *t_arg) { return result_field; }
|
Field *tmp_table_field(TABLE *t_arg) { return result_field; }
|
||||||
bool get_date(TIME *ltime,bool fuzzydate);
|
bool get_date(TIME *ltime,bool fuzzydate);
|
||||||
bool get_date_result(TIME *ltime,bool fuzzydate);
|
bool get_date_result(TIME *ltime,bool fuzzydate);
|
||||||
@ -539,12 +545,12 @@ class Item_result_field :public Item /* Item with result field */
|
|||||||
public:
|
public:
|
||||||
Field *result_field; /* Save result here */
|
Field *result_field; /* Save result here */
|
||||||
Item_result_field() :result_field(0) {}
|
Item_result_field() :result_field(0) {}
|
||||||
// Constructor used for Item_sum (see Item comment)
|
// Constructor used for Item_sum/Item_cond_and/or (see Item comment)
|
||||||
Item_result_field(THD *thd, Item_result_field &item):
|
Item_result_field(THD *thd, Item_result_field &item):
|
||||||
Item(thd, item), result_field(item.result_field)
|
Item(thd, item), result_field(item.result_field)
|
||||||
{}
|
{}
|
||||||
~Item_result_field() {} /* Required with gcc 2.95 */
|
~Item_result_field() {} /* Required with gcc 2.95 */
|
||||||
Field *tmp_table_field() { return result_field; }
|
Field *get_tmp_table_field() { return result_field; }
|
||||||
Field *tmp_table_field(TABLE *t_arg) { return result_field; }
|
Field *tmp_table_field(TABLE *t_arg) { return result_field; }
|
||||||
table_map used_tables() const { return 1; }
|
table_map used_tables() const { return 1; }
|
||||||
virtual void fix_length_and_dec()=0;
|
virtual void fix_length_and_dec()=0;
|
||||||
@ -862,6 +868,7 @@ public:
|
|||||||
{
|
{
|
||||||
value= item->val_int_result();
|
value= item->val_int_result();
|
||||||
null_value= item->null_value;
|
null_value= item->null_value;
|
||||||
|
collation.set(item->collation);
|
||||||
}
|
}
|
||||||
double val() { return (double) value; }
|
double val() { return (double) value; }
|
||||||
longlong val_int() { return value; }
|
longlong val_int() { return value; }
|
||||||
@ -879,6 +886,7 @@ public:
|
|||||||
{
|
{
|
||||||
value= item->val_result();
|
value= item->val_result();
|
||||||
null_value= item->null_value;
|
null_value= item->null_value;
|
||||||
|
collation.set(item->collation);
|
||||||
}
|
}
|
||||||
double val() { return value; }
|
double val() { return value; }
|
||||||
longlong val_int() { return (longlong) (value+(value > 0 ? 0.5 : -0.5)); }
|
longlong val_int() { return (longlong) (value+(value > 0 ? 0.5 : -0.5)); }
|
||||||
|
@ -698,8 +698,21 @@ Item_func_ifnull::fix_length_and_dec()
|
|||||||
agg_arg_collations(collation, args, arg_count);
|
agg_arg_collations(collation, args, arg_count);
|
||||||
else if (cached_result_type != REAL_RESULT)
|
else if (cached_result_type != REAL_RESULT)
|
||||||
decimals= 0;
|
decimals= 0;
|
||||||
|
|
||||||
|
cached_field_type= args[0]->field_type();
|
||||||
|
if (cached_field_type != args[1]->field_type())
|
||||||
|
cached_field_type= Item_func::field_type();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum_field_types Item_func_ifnull::field_type() const
|
||||||
|
{
|
||||||
|
return cached_field_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
Field *Item_func_ifnull::tmp_table_field(TABLE *table)
|
||||||
|
{
|
||||||
|
return tmp_table_field_from_field_type(table);
|
||||||
|
}
|
||||||
|
|
||||||
double
|
double
|
||||||
Item_func_ifnull::val()
|
Item_func_ifnull::val()
|
||||||
@ -1536,6 +1549,31 @@ longlong Item_func_bit_and::val_int()
|
|||||||
return (longlong) (arg1 & arg2);
|
return (longlong) (arg1 & arg2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Item_cond::Item_cond(THD *thd, Item_cond &item)
|
||||||
|
:Item_bool_func(thd, item),
|
||||||
|
abort_on_null(item.abort_on_null),
|
||||||
|
and_tables_cache(item.and_tables_cache)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
here should be following text:
|
||||||
|
|
||||||
|
List_iterator_fast<Item*> li(item.list);
|
||||||
|
while(Item *it= li++)
|
||||||
|
list.push_back(it);
|
||||||
|
|
||||||
|
but it do not need,
|
||||||
|
because this constructor used only for AND/OR and
|
||||||
|
argument list will be copied by copy_andor_arguments call
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Item_cond::copy_andor_arguments(THD *thd, Item_cond *item)
|
||||||
|
{
|
||||||
|
List_iterator_fast<Item> li(item->list);
|
||||||
|
while(Item *it= li++)
|
||||||
|
list.push_back(it->copy_andor_structure(thd));
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
Item_cond::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
|
Item_cond::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
|
||||||
|
@ -82,6 +82,7 @@ public:
|
|||||||
Item_bool_func() :Item_int_func() {}
|
Item_bool_func() :Item_int_func() {}
|
||||||
Item_bool_func(Item *a) :Item_int_func(a) {}
|
Item_bool_func(Item *a) :Item_int_func(a) {}
|
||||||
Item_bool_func(Item *a,Item *b) :Item_int_func(a,b) {}
|
Item_bool_func(Item *a,Item *b) :Item_int_func(a,b) {}
|
||||||
|
Item_bool_func(THD *thd, Item_bool_func &item) :Item_int_func(thd, item) {}
|
||||||
void fix_length_and_dec() { decimals=0; max_length=1; }
|
void fix_length_and_dec() { decimals=0; max_length=1; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -115,8 +116,8 @@ protected:
|
|||||||
String tmp_value1,tmp_value2;
|
String tmp_value1,tmp_value2;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Item_bool_func2(Item *a,Item *b):
|
Item_bool_func2(Item *a,Item *b)
|
||||||
Item_int_func(a,b), cmp(tmp_arg, tmp_arg+1) {}
|
:Item_int_func(a,b), cmp(tmp_arg, tmp_arg+1) {}
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
void set_cmp_func()
|
void set_cmp_func()
|
||||||
{
|
{
|
||||||
@ -158,7 +159,7 @@ public:
|
|||||||
class Item_func_eq :public Item_bool_rowready_func2
|
class Item_func_eq :public Item_bool_rowready_func2
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Item_func_eq(Item *a,Item *b) :Item_bool_rowready_func2(a,b) {};
|
Item_func_eq(Item *a,Item *b) :Item_bool_rowready_func2(a,b) {}
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
enum Functype functype() const { return EQ_FUNC; }
|
enum Functype functype() const { return EQ_FUNC; }
|
||||||
enum Functype rev_functype() const { return EQ_FUNC; }
|
enum Functype rev_functype() const { return EQ_FUNC; }
|
||||||
@ -280,6 +281,8 @@ public:
|
|||||||
class Item_func_ifnull :public Item_func
|
class Item_func_ifnull :public Item_func
|
||||||
{
|
{
|
||||||
enum Item_result cached_result_type;
|
enum Item_result cached_result_type;
|
||||||
|
enum_field_types cached_field_type;
|
||||||
|
bool field_type_defined;
|
||||||
public:
|
public:
|
||||||
Item_func_ifnull(Item *a,Item *b)
|
Item_func_ifnull(Item *a,Item *b)
|
||||||
:Item_func(a,b), cached_result_type(INT_RESULT)
|
:Item_func(a,b), cached_result_type(INT_RESULT)
|
||||||
@ -288,8 +291,10 @@ public:
|
|||||||
longlong val_int();
|
longlong val_int();
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
enum Item_result result_type () const { return cached_result_type; }
|
enum Item_result result_type () const { return cached_result_type; }
|
||||||
|
enum_field_types field_type() const;
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
const char *func_name() const { return "ifnull"; }
|
const char *func_name() const { return "ifnull"; }
|
||||||
|
Field *tmp_table_field(TABLE *table);
|
||||||
table_map not_null_tables() const { return 0; }
|
table_map not_null_tables() const { return 0; }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -787,8 +792,13 @@ protected:
|
|||||||
public:
|
public:
|
||||||
/* Item_cond() is only used to create top level items */
|
/* Item_cond() is only used to create top level items */
|
||||||
Item_cond() : Item_bool_func(), abort_on_null(1) { const_item_cache=0; }
|
Item_cond() : Item_bool_func(), abort_on_null(1) { const_item_cache=0; }
|
||||||
Item_cond(Item *i1,Item *i2) :Item_bool_func(), abort_on_null(0)
|
Item_cond(Item *i1,Item *i2)
|
||||||
{ list.push_back(i1); list.push_back(i2); }
|
:Item_bool_func(), abort_on_null(0)
|
||||||
|
{
|
||||||
|
list.push_back(i1);
|
||||||
|
list.push_back(i2);
|
||||||
|
}
|
||||||
|
Item_cond(THD *thd, Item_cond &item);
|
||||||
~Item_cond() { list.delete_elements(); }
|
~Item_cond() { list.delete_elements(); }
|
||||||
bool add(Item *item) { return list.push_back(item); }
|
bool add(Item *item) { return list.push_back(item); }
|
||||||
bool fix_fields(THD *, struct st_table_list *, Item **ref);
|
bool fix_fields(THD *, struct st_table_list *, Item **ref);
|
||||||
@ -801,6 +811,7 @@ public:
|
|||||||
void split_sum_func(Item **ref_pointer_array, List<Item> &fields);
|
void split_sum_func(Item **ref_pointer_array, List<Item> &fields);
|
||||||
friend int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds);
|
friend int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds);
|
||||||
void top_level_item() { abort_on_null=1; }
|
void top_level_item() { abort_on_null=1; }
|
||||||
|
void copy_andor_arguments(THD *thd, Item_cond *item);
|
||||||
|
|
||||||
bool walk(Item_processor processor, byte *arg);
|
bool walk(Item_processor processor, byte *arg);
|
||||||
};
|
};
|
||||||
@ -811,9 +822,17 @@ class Item_cond_and :public Item_cond
|
|||||||
public:
|
public:
|
||||||
Item_cond_and() :Item_cond() {}
|
Item_cond_and() :Item_cond() {}
|
||||||
Item_cond_and(Item *i1,Item *i2) :Item_cond(i1,i2) {}
|
Item_cond_and(Item *i1,Item *i2) :Item_cond(i1,i2) {}
|
||||||
|
Item_cond_and(THD *thd, Item_cond_and &item) :Item_cond(thd, item) {}
|
||||||
enum Functype functype() const { return COND_AND_FUNC; }
|
enum Functype functype() const { return COND_AND_FUNC; }
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "and"; }
|
const char *func_name() const { return "and"; }
|
||||||
|
Item* copy_andor_structure(THD *thd)
|
||||||
|
{
|
||||||
|
Item_cond_and *item;
|
||||||
|
if((item= new Item_cond_and(thd, *this)))
|
||||||
|
item->copy_andor_arguments(thd, this);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Item_cond_or :public Item_cond
|
class Item_cond_or :public Item_cond
|
||||||
@ -821,10 +840,18 @@ class Item_cond_or :public Item_cond
|
|||||||
public:
|
public:
|
||||||
Item_cond_or() :Item_cond() {}
|
Item_cond_or() :Item_cond() {}
|
||||||
Item_cond_or(Item *i1,Item *i2) :Item_cond(i1,i2) {}
|
Item_cond_or(Item *i1,Item *i2) :Item_cond(i1,i2) {}
|
||||||
|
Item_cond_or(THD *thd, Item_cond_or &item) :Item_cond(thd, item) {}
|
||||||
enum Functype functype() const { return COND_OR_FUNC; }
|
enum Functype functype() const { return COND_OR_FUNC; }
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
const char *func_name() const { return "or"; }
|
const char *func_name() const { return "or"; }
|
||||||
table_map not_null_tables() const { return and_tables_cache; }
|
table_map not_null_tables() const { return and_tables_cache; }
|
||||||
|
Item* copy_andor_structure(THD *thd)
|
||||||
|
{
|
||||||
|
Item_cond_or *item;
|
||||||
|
if((item= new Item_cond_or(thd, *this)))
|
||||||
|
item->copy_andor_arguments(thd, this);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,13 +52,6 @@ Item *create_func_ord(Item* a)
|
|||||||
return new Item_func_ord(a);
|
return new Item_func_ord(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Item *create_func_old_password(Item* a)
|
|
||||||
{
|
|
||||||
return new Item_func_old_password(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Item *create_func_asin(Item* a)
|
Item *create_func_asin(Item* a)
|
||||||
{
|
{
|
||||||
return new Item_func_asin(a);
|
return new Item_func_asin(a);
|
||||||
@ -107,14 +100,6 @@ Item *create_func_cot(Item* a)
|
|||||||
new Item_func_tan(a));
|
new Item_func_tan(a));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_COMPRESS
|
|
||||||
Item *create_func_crc32(Item* a)
|
|
||||||
{
|
|
||||||
return new Item_func_crc32(a);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Item *create_func_date_format(Item* a,Item *b)
|
Item *create_func_date_format(Item* a,Item *b)
|
||||||
{
|
{
|
||||||
return new Item_func_date_format(a,b,0);
|
return new Item_func_date_format(a,b,0);
|
||||||
@ -332,11 +317,6 @@ Item *create_func_quarter(Item* a)
|
|||||||
return new Item_func_quarter(a);
|
return new Item_func_quarter(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
Item *create_func_password(Item* a)
|
|
||||||
{
|
|
||||||
return new Item_func_password(a);
|
|
||||||
}
|
|
||||||
|
|
||||||
Item *create_func_radians(Item *a)
|
Item *create_func_radians(Item *a)
|
||||||
{
|
{
|
||||||
return new Item_func_units((char*) "radians",a,M_PI/180,0.0);
|
return new Item_func_units((char*) "radians",a,M_PI/180,0.0);
|
||||||
@ -666,13 +646,10 @@ Item *create_func_point(Item *a, Item *b)
|
|||||||
return new Item_func_point(a, b);
|
return new Item_func_point(a, b);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(HAVE_COMPRESS)
|
Item *create_func_crc32(Item* a)
|
||||||
|
{
|
||||||
Item *create_func_compress (Item*a __attribute__((unused))){return 0;}
|
return new Item_func_crc32(a);
|
||||||
Item *create_func_uncompress (Item*a __attribute__((unused))){return 0;}
|
}
|
||||||
Item *create_func_uncompressed_length(Item*a __attribute__((unused))){return 0;}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
Item *create_func_compress(Item* a)
|
Item *create_func_compress(Item* a)
|
||||||
{
|
{
|
||||||
@ -689,8 +666,6 @@ Item *create_func_uncompressed_length(Item* a)
|
|||||||
return new Item_func_uncompressed_length(a);
|
return new Item_func_uncompressed_length(a);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Item *create_func_datediff(Item *a, Item *b)
|
Item *create_func_datediff(Item *a, Item *b)
|
||||||
{
|
{
|
||||||
return new Item_func_minus(new Item_func_to_days(a),
|
return new Item_func_minus(new Item_func_to_days(a),
|
||||||
|
@ -33,9 +33,7 @@ Item *create_func_connection_id(void);
|
|||||||
Item *create_func_conv(Item* a, Item *b, Item *c);
|
Item *create_func_conv(Item* a, Item *b, Item *c);
|
||||||
Item *create_func_cos(Item* a);
|
Item *create_func_cos(Item* a);
|
||||||
Item *create_func_cot(Item* a);
|
Item *create_func_cot(Item* a);
|
||||||
#ifdef HAVE_COMPRESS
|
|
||||||
Item *create_func_crc32(Item* a);
|
Item *create_func_crc32(Item* a);
|
||||||
#endif
|
|
||||||
Item *create_func_date_format(Item* a,Item *b);
|
Item *create_func_date_format(Item* a,Item *b);
|
||||||
Item *create_func_dayname(Item* a);
|
Item *create_func_dayname(Item* a);
|
||||||
Item *create_func_dayofmonth(Item* a);
|
Item *create_func_dayofmonth(Item* a);
|
||||||
@ -69,14 +67,12 @@ Item *create_func_monthname(Item* a);
|
|||||||
Item *create_func_nullif(Item* a, Item *b);
|
Item *create_func_nullif(Item* a, Item *b);
|
||||||
Item *create_func_oct(Item *);
|
Item *create_func_oct(Item *);
|
||||||
Item *create_func_ord(Item* a);
|
Item *create_func_ord(Item* a);
|
||||||
Item *create_func_old_password(Item* a);
|
|
||||||
Item *create_func_period_add(Item* a, Item *b);
|
Item *create_func_period_add(Item* a, Item *b);
|
||||||
Item *create_func_period_diff(Item* a, Item *b);
|
Item *create_func_period_diff(Item* a, Item *b);
|
||||||
Item *create_func_pi(void);
|
Item *create_func_pi(void);
|
||||||
Item *create_func_pow(Item* a, Item *b);
|
Item *create_func_pow(Item* a, Item *b);
|
||||||
Item *create_func_current_user(void);
|
Item *create_func_current_user(void);
|
||||||
Item *create_func_quarter(Item* a);
|
Item *create_func_quarter(Item* a);
|
||||||
Item *create_func_password(Item* a);
|
|
||||||
Item *create_func_radians(Item *a);
|
Item *create_func_radians(Item *a);
|
||||||
Item *create_func_release_lock(Item* a);
|
Item *create_func_release_lock(Item* a);
|
||||||
Item *create_func_repeat(Item* a, Item *b);
|
Item *create_func_repeat(Item* a, Item *b);
|
||||||
|
@ -27,22 +27,18 @@
|
|||||||
#include <hash.h>
|
#include <hash.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <ft_global.h>
|
#include <ft_global.h>
|
||||||
#ifdef HAVE_COMPRESS
|
|
||||||
#include <zlib.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
static void my_coll_agg_error(DTCollation &c1, DTCollation &c2,
|
static void my_coll_agg_error(DTCollation &c1, DTCollation &c2,
|
||||||
const char *fname)
|
const char *fname)
|
||||||
{
|
{
|
||||||
my_error(ER_CANT_AGGREGATE_2COLLATIONS,MYF(0),
|
my_error(ER_CANT_AGGREGATE_2COLLATIONS,MYF(0),
|
||||||
c1.collation->name,c1.derivation_name(),
|
c1.collation->name,c1.derivation_name(),
|
||||||
c2.collation->name,c2.derivation_name(),
|
c2.collation->name,c2.derivation_name(),
|
||||||
fname);
|
fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void my_coll_agg_error(DTCollation &c1,
|
||||||
static void my_coll_agg_error(DTCollation &c1,
|
|
||||||
DTCollation &c2,
|
DTCollation &c2,
|
||||||
DTCollation &c3,
|
DTCollation &c3,
|
||||||
const char *fname)
|
const char *fname)
|
||||||
@ -134,6 +130,27 @@ Item_func::Item_func(List<Item> &list)
|
|||||||
set_arguments(list);
|
set_arguments(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Item_func::Item_func(THD *thd, Item_func &item)
|
||||||
|
:Item_result_field(thd, item),
|
||||||
|
allowed_arg_cols(item.allowed_arg_cols),
|
||||||
|
arg_count(item.arg_count),
|
||||||
|
used_tables_cache(item.used_tables_cache),
|
||||||
|
not_null_tables_cache(item.not_null_tables_cache),
|
||||||
|
const_item_cache(item.const_item_cache)
|
||||||
|
{
|
||||||
|
if (arg_count)
|
||||||
|
{
|
||||||
|
if (arg_count <=2)
|
||||||
|
args= tmp_arg;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!(args=(Item**) thd->alloc(sizeof(Item*)*arg_count)))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
memcpy((char*) args, (char*) item.args, sizeof(Item*)*arg_count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Resolve references to table column for a function and it's argument
|
Resolve references to table column for a function and it's argument
|
||||||
@ -1085,36 +1102,6 @@ longlong Item_func_min_max::val_int()
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_COMPRESS
|
|
||||||
longlong Item_func_crc32::val_int()
|
|
||||||
{
|
|
||||||
String *res=args[0]->val_str(&value);
|
|
||||||
if (!res)
|
|
||||||
{
|
|
||||||
null_value=1;
|
|
||||||
return 0; /* purecov: inspected */
|
|
||||||
}
|
|
||||||
null_value=0;
|
|
||||||
return (longlong) crc32(0L, (Bytef*)res->ptr(), res->length());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
longlong Item_func_uncompressed_length::val_int()
|
|
||||||
{
|
|
||||||
String *res= args[0]->val_str(&value);
|
|
||||||
if (!res)
|
|
||||||
{
|
|
||||||
null_value=1;
|
|
||||||
return 0; /* purecov: inspected */
|
|
||||||
}
|
|
||||||
null_value=0;
|
|
||||||
if (res->is_empty()) return 0;
|
|
||||||
return uint4korr(res->c_ptr()) & 0x3FFFFFFF;
|
|
||||||
}
|
|
||||||
#endif /* HAVE_COMPRESS */
|
|
||||||
|
|
||||||
|
|
||||||
longlong Item_func_length::val_int()
|
longlong Item_func_length::val_int()
|
||||||
{
|
{
|
||||||
String *res=args[0]->val_str(&value);
|
String *res=args[0]->val_str(&value);
|
||||||
|
@ -104,6 +104,8 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item_func(List<Item> &list);
|
Item_func(List<Item> &list);
|
||||||
|
// Constructor used for Item_cond_and/or (see Item comment)
|
||||||
|
Item_func(THD *thd, Item_func &item);
|
||||||
~Item_func() {} /* Nothing to do; Items are freed automaticly */
|
~Item_func() {} /* Nothing to do; Items are freed automaticly */
|
||||||
bool fix_fields(THD *,struct st_table_list *, Item **ref);
|
bool fix_fields(THD *,struct st_table_list *, Item **ref);
|
||||||
table_map used_tables() const;
|
table_map used_tables() const;
|
||||||
@ -196,6 +198,7 @@ public:
|
|||||||
Item_int_func(Item *a,Item *b) :Item_func(a,b) { max_length=21; }
|
Item_int_func(Item *a,Item *b) :Item_func(a,b) { max_length=21; }
|
||||||
Item_int_func(Item *a,Item *b,Item *c) :Item_func(a,b,c) { max_length=21; }
|
Item_int_func(Item *a,Item *b,Item *c) :Item_func(a,b,c) { max_length=21; }
|
||||||
Item_int_func(List<Item> &list) :Item_func(list) { max_length=21; }
|
Item_int_func(List<Item> &list) :Item_func(list) { max_length=21; }
|
||||||
|
Item_int_func(THD *thd, Item_int_func &item) :Item_func(thd, item) {}
|
||||||
double val() { return (double) val_int(); }
|
double val() { return (double) val_int(); }
|
||||||
String *val_str(String*str);
|
String *val_str(String*str);
|
||||||
enum Item_result result_type () const { return INT_RESULT; }
|
enum Item_result result_type () const { return INT_RESULT; }
|
||||||
@ -555,27 +558,6 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_COMPRESS
|
|
||||||
class Item_func_crc32 :public Item_int_func
|
|
||||||
{
|
|
||||||
String value;
|
|
||||||
public:
|
|
||||||
Item_func_crc32(Item *a) :Item_int_func(a) {}
|
|
||||||
longlong val_int();
|
|
||||||
const char *func_name() const { return "crc32"; }
|
|
||||||
void fix_length_and_dec() { max_length=10; }
|
|
||||||
};
|
|
||||||
class Item_func_uncompressed_length : public Item_int_func
|
|
||||||
{
|
|
||||||
String value;
|
|
||||||
public:
|
|
||||||
Item_func_uncompressed_length(Item *a):Item_int_func(a){}
|
|
||||||
longlong val_int();
|
|
||||||
const char *func_name() const{return "uncompressed_length";}
|
|
||||||
void fix_length_and_dec() { max_length=10; }
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class Item_func_length :public Item_int_func
|
class Item_func_length :public Item_int_func
|
||||||
{
|
{
|
||||||
String value;
|
String value;
|
||||||
|
@ -167,30 +167,6 @@ public:
|
|||||||
const char *func_name() const { return "multipoint"; }
|
const char *func_name() const { return "multipoint"; }
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef HAVE_COMPRESS
|
|
||||||
|
|
||||||
class Item_func_compress: public Item_str_func
|
|
||||||
{
|
|
||||||
String buffer;
|
|
||||||
public:
|
|
||||||
Item_func_compress(Item *a):Item_str_func(a){}
|
|
||||||
String *val_str(String *);
|
|
||||||
void fix_length_and_dec(){max_length= (args[0]->max_length*120)/100+12;}
|
|
||||||
const char *func_name() const{return "compress";}
|
|
||||||
};
|
|
||||||
|
|
||||||
class Item_func_uncompress: public Item_str_func
|
|
||||||
{
|
|
||||||
String buffer;
|
|
||||||
public:
|
|
||||||
Item_func_uncompress(Item *a): Item_str_func(a){}
|
|
||||||
String *val_str(String *);
|
|
||||||
void fix_length_and_dec(){max_length= MAX_BLOB_WIDTH;}
|
|
||||||
const char *func_name() const{return "uncompress";}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Spatial relations
|
Spatial relations
|
||||||
*/
|
*/
|
||||||
|
@ -1327,95 +1327,49 @@ void Item_func_trim::fix_length_and_dec()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Item_func_password */
|
||||||
|
|
||||||
void Item_func_password::fix_length_and_dec()
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
If PASSWORD() was called with only one argument, it depends on a random
|
|
||||||
number so we need to save this random number into the binary log.
|
|
||||||
If called with two arguments, it is repeatable.
|
|
||||||
*/
|
|
||||||
if (arg_count == 1)
|
|
||||||
{
|
|
||||||
THD *thd= current_thd;
|
|
||||||
thd->rand_used= 1;
|
|
||||||
thd->rand_saved_seed1= thd->rand.seed1;
|
|
||||||
thd->rand_saved_seed2= thd->rand.seed2;
|
|
||||||
}
|
|
||||||
max_length= get_password_length(use_old_passwords);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
Password() function has 2 arguments. Second argument can be used
|
|
||||||
to make results repeatable
|
|
||||||
*/
|
|
||||||
|
|
||||||
String *Item_func_password::val_str(String *str)
|
String *Item_func_password::val_str(String *str)
|
||||||
{
|
{
|
||||||
struct rand_struct rand_st; // local structure for 2 param version
|
String *res= args[0]->val_str(str);
|
||||||
ulong seed=0; // seed to initialise random generator to
|
|
||||||
|
|
||||||
String *res =args[0]->val_str(str);
|
|
||||||
if ((null_value=args[0]->null_value))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (arg_count == 1)
|
|
||||||
{
|
|
||||||
if (res->length() == 0)
|
|
||||||
return &empty_string;
|
|
||||||
make_scrambled_password(tmp_value,res->c_ptr(),use_old_passwords,
|
|
||||||
¤t_thd->rand);
|
|
||||||
str->set(tmp_value,get_password_length(use_old_passwords),res->charset());
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* We'll need the buffer to get second parameter */
|
|
||||||
char key_buff[80];
|
|
||||||
String tmp_key_value(key_buff, sizeof(key_buff), system_charset_info);
|
|
||||||
String *key =args[1]->val_str(&tmp_key_value);
|
|
||||||
|
|
||||||
/* Check second argument for NULL value. First one is already checked */
|
|
||||||
if ((null_value=args[1]->null_value))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* This shall be done after checking for null for proper results */
|
|
||||||
if (res->length() == 0)
|
|
||||||
return &empty_string;
|
|
||||||
|
|
||||||
/* Generate the seed first this allows to avoid double allocation */
|
|
||||||
char* seed_ptr=key->c_ptr();
|
|
||||||
while (*seed_ptr)
|
|
||||||
{
|
|
||||||
seed=(seed*211+*seed_ptr) & 0xffffffffL; /* Use simple hashing */
|
|
||||||
seed_ptr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Use constants which allow nice random values even with small seed */
|
|
||||||
randominit(&rand_st,
|
|
||||||
(ulong) ((ulonglong) seed*111111+33333333L) & (ulong) 0xffffffff,
|
|
||||||
(ulong) ((ulonglong) seed*1111+55555555L) & (ulong) 0xffffffff);
|
|
||||||
|
|
||||||
make_scrambled_password(tmp_value,res->c_ptr(),use_old_passwords,
|
|
||||||
&rand_st);
|
|
||||||
str->set(tmp_value,get_password_length(use_old_passwords),res->charset());
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
String *Item_func_old_password::val_str(String *str)
|
|
||||||
{
|
|
||||||
String *res =args[0]->val_str(str);
|
|
||||||
if ((null_value=args[0]->null_value))
|
if ((null_value=args[0]->null_value))
|
||||||
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(),1,¤t_thd->rand);
|
make_scrambled_password(tmp_value, res->c_ptr());
|
||||||
str->set(tmp_value,16,res->charset());
|
str->set(tmp_value, SCRAMBLED_PASSWORD_CHAR_LENGTH, res->charset());
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *Item_func_password::alloc(THD *thd, const char *password)
|
||||||
|
{
|
||||||
|
char *buff= (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1);
|
||||||
|
if (buff)
|
||||||
|
make_scrambled_password(buff, password);
|
||||||
|
return buff;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Item_func_old_password */
|
||||||
|
|
||||||
|
String *Item_func_old_password::val_str(String *str)
|
||||||
|
{
|
||||||
|
String *res= args[0]->val_str(str);
|
||||||
|
if ((null_value=args[0]->null_value))
|
||||||
|
return 0;
|
||||||
|
if (res->length() == 0)
|
||||||
|
return &empty_string;
|
||||||
|
make_scrambled_password_323(tmp_value, res->c_ptr());
|
||||||
|
str->set(tmp_value, SCRAMBLED_PASSWORD_CHAR_LENGTH_323, res->charset());
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
char *Item_func_old_password::alloc(THD *thd, const char *password)
|
||||||
|
{
|
||||||
|
char *buff= (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1);
|
||||||
|
if (buff)
|
||||||
|
make_scrambled_password_323(buff, password);
|
||||||
|
return buff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define bin_to_ascii(c) ((c)>=38?((c)-38+'a'):(c)>=12?((c)-12+'A'):(c)+'.')
|
#define bin_to_ascii(c) ((c)>=38?((c)-38+'a'):(c)>=12?((c)-12+'A'):(c)+'.')
|
||||||
@ -2554,6 +2508,31 @@ null:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
longlong Item_func_uncompressed_length::val_int()
|
||||||
|
{
|
||||||
|
String *res= args[0]->val_str(&value);
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
null_value=1;
|
||||||
|
return 0; /* purecov: inspected */
|
||||||
|
}
|
||||||
|
null_value=0;
|
||||||
|
if (res->is_empty()) return 0;
|
||||||
|
return uint4korr(res->c_ptr()) & 0x3FFFFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
longlong Item_func_crc32::val_int()
|
||||||
|
{
|
||||||
|
String *res=args[0]->val_str(&value);
|
||||||
|
if (!res)
|
||||||
|
{
|
||||||
|
null_value=1;
|
||||||
|
return 0; /* purecov: inspected */
|
||||||
|
}
|
||||||
|
null_value=0;
|
||||||
|
return (longlong) crc32(0L, (uchar*)res->ptr(), res->length());
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef HAVE_COMPRESS
|
#ifdef HAVE_COMPRESS
|
||||||
#include "zlib.h"
|
#include "zlib.h"
|
||||||
|
|
||||||
@ -2581,7 +2560,7 @@ String *Item_func_compress::val_str(String *str)
|
|||||||
|
|
||||||
buffer.realloc((uint32)new_size + 4 + 1);
|
buffer.realloc((uint32)new_size + 4 + 1);
|
||||||
Byte *body= ((Byte*)buffer.c_ptr()) + 4;
|
Byte *body= ((Byte*)buffer.c_ptr()) + 4;
|
||||||
|
|
||||||
if ((err= compress(body, &new_size,
|
if ((err= compress(body, &new_size,
|
||||||
(const Bytef*)res->c_ptr(), res->length())) != Z_OK)
|
(const Bytef*)res->c_ptr(), res->length())) != Z_OK)
|
||||||
{
|
{
|
||||||
@ -2603,7 +2582,7 @@ String *Item_func_compress::val_str(String *str)
|
|||||||
}
|
}
|
||||||
|
|
||||||
buffer.length((uint32)new_size + 4);
|
buffer.length((uint32)new_size + 4);
|
||||||
|
|
||||||
return &buffer;
|
return &buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2615,7 +2594,7 @@ String *Item_func_uncompress::val_str(String *str)
|
|||||||
ulong new_size= uint4korr(res->c_ptr()) & 0x3FFFFFFF;
|
ulong new_size= uint4korr(res->c_ptr()) & 0x3FFFFFFF;
|
||||||
int err= Z_OK;
|
int err= Z_OK;
|
||||||
uint code;
|
uint code;
|
||||||
|
|
||||||
if (new_size > MAX_BLOB_WIDTH)
|
if (new_size > MAX_BLOB_WIDTH)
|
||||||
{
|
{
|
||||||
push_warning_printf(current_thd,MYSQL_ERROR::WARN_LEVEL_ERROR,
|
push_warning_printf(current_thd,MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
@ -2624,21 +2603,20 @@ String *Item_func_uncompress::val_str(String *str)
|
|||||||
null_value= 0;
|
null_value= 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
buffer.realloc((uint32)new_size);
|
buffer.realloc((uint32)new_size);
|
||||||
|
|
||||||
if ((err= uncompress((Byte*)buffer.c_ptr(), &new_size,
|
if ((err= uncompress((Byte*)buffer.c_ptr(), &new_size,
|
||||||
((const Bytef*)res->c_ptr())+4,res->length())) == Z_OK)
|
((const Bytef*)res->c_ptr())+4,res->length())) == Z_OK)
|
||||||
{
|
{
|
||||||
buffer.length((uint32)new_size);
|
buffer.length((uint32)new_size);
|
||||||
return &buffer;
|
return &buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
code= err==Z_BUF_ERROR ? ER_ZLIB_Z_BUF_ERROR :
|
code= err==Z_BUF_ERROR ? ER_ZLIB_Z_BUF_ERROR :
|
||||||
err==Z_MEM_ERROR ? ER_ZLIB_Z_MEM_ERROR : ER_ZLIB_Z_DATA_ERROR;
|
err==Z_MEM_ERROR ? ER_ZLIB_Z_MEM_ERROR : ER_ZLIB_Z_DATA_ERROR;
|
||||||
push_warning(current_thd,MYSQL_ERROR::WARN_LEVEL_ERROR,code,ER(code));
|
push_warning(current_thd,MYSQL_ERROR::WARN_LEVEL_ERROR,code,ER(code));
|
||||||
null_value= 1;
|
null_value= 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -254,30 +254,45 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Item_func_password -- new (4.1.1) PASSWORD() function implementation.
|
||||||
|
Returns strcat('*', octet2hex(sha1(sha1(password)))). '*' stands for new
|
||||||
|
password format, sha1(sha1(password) is so-called hash_stage2 value.
|
||||||
|
Length of returned string is always 41 byte. To find out how entire
|
||||||
|
authentification procedure works, see comments in password.c.
|
||||||
|
*/
|
||||||
|
|
||||||
class Item_func_password :public Item_str_func
|
class Item_func_password :public Item_str_func
|
||||||
{
|
{
|
||||||
char tmp_value[64]; /* This should be enough for new password format */
|
char tmp_value[SCRAMBLED_PASSWORD_CHAR_LENGTH+1];
|
||||||
public:
|
public:
|
||||||
Item_func_password(Item *a) :Item_str_func(a) {}
|
Item_func_password(Item *a) :Item_str_func(a) {}
|
||||||
Item_func_password(Item *a, Item *b) :Item_str_func(a,b) {}
|
String *val_str(String *str);
|
||||||
String *val_str(String *);
|
void fix_length_and_dec() { max_length= SCRAMBLED_PASSWORD_CHAR_LENGTH; }
|
||||||
void fix_length_and_dec();
|
|
||||||
const char *func_name() const { return "password"; }
|
const char *func_name() const { return "password"; }
|
||||||
|
static char *alloc(THD *thd, const char *password);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Item_func_old_password -- PASSWORD() implementation used in MySQL 3.21 - 4.0
|
||||||
|
compatibility mode. This item is created in sql_yacc.yy when
|
||||||
|
'old_passwords' session variable is set, and to handle OLD_PASSWORD()
|
||||||
|
function.
|
||||||
|
*/
|
||||||
|
|
||||||
class Item_func_old_password :public Item_str_func
|
class Item_func_old_password :public Item_str_func
|
||||||
{
|
{
|
||||||
char tmp_value[17]; /* old password length +1 */
|
char tmp_value[SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1];
|
||||||
public:
|
public:
|
||||||
Item_func_old_password(Item *a) :Item_str_func(a) {}
|
Item_func_old_password(Item *a) :Item_str_func(a) {}
|
||||||
String *val_str(String *);
|
String *val_str(String *str);
|
||||||
void fix_length_and_dec() { max_length = get_password_length(1); }
|
void fix_length_and_dec() { max_length= SCRAMBLED_PASSWORD_CHAR_LENGTH_323; }
|
||||||
const char *func_name() const { return "old_password"; }
|
const char *func_name() const { return "old_password"; }
|
||||||
|
static char *alloc(THD *thd, const char *password);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Item_func_des_encrypt :public Item_str_func
|
class Item_func_des_encrypt :public Item_str_func
|
||||||
{
|
{
|
||||||
String tmp_value;
|
String tmp_value;
|
||||||
@ -624,9 +639,56 @@ public:
|
|||||||
Item_func_collation(Item *a) :Item_str_func(a) {}
|
Item_func_collation(Item *a) :Item_str_func(a) {}
|
||||||
String *val_str(String *);
|
String *val_str(String *);
|
||||||
const char *func_name() const { return "collation"; }
|
const char *func_name() const { return "collation"; }
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
max_length=40; // should be enough
|
max_length=40; // should be enough
|
||||||
collation.set(system_charset_info);
|
collation.set(system_charset_info);
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Item_func_crc32 :public Item_int_func
|
||||||
|
{
|
||||||
|
String value;
|
||||||
|
public:
|
||||||
|
Item_func_crc32(Item *a) :Item_int_func(a) {}
|
||||||
|
const char *func_name() const { return "crc32"; }
|
||||||
|
void fix_length_and_dec() { max_length=10; }
|
||||||
|
longlong val_int();
|
||||||
|
};
|
||||||
|
|
||||||
|
class Item_func_uncompressed_length : public Item_int_func
|
||||||
|
{
|
||||||
|
String value;
|
||||||
|
public:
|
||||||
|
Item_func_uncompressed_length(Item *a):Item_int_func(a){}
|
||||||
|
const char *func_name() const{return "uncompressed_length";}
|
||||||
|
void fix_length_and_dec() { max_length=10; }
|
||||||
|
longlong val_int();
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef HAVE_COMPRESS
|
||||||
|
#define ZLIB_DEPENDED_FUNCTION ;
|
||||||
|
#else
|
||||||
|
#define ZLIB_DEPENDED_FUNCTION { null_value=1; return 0; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class Item_func_compress: public Item_str_func
|
||||||
|
{
|
||||||
|
String buffer;
|
||||||
|
public:
|
||||||
|
Item_func_compress(Item *a):Item_str_func(a){}
|
||||||
|
void fix_length_and_dec(){max_length= (args[0]->max_length*120)/100+12;}
|
||||||
|
const char *func_name() const{return "compress";}
|
||||||
|
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
|
||||||
|
};
|
||||||
|
|
||||||
|
class Item_func_uncompress: public Item_str_func
|
||||||
|
{
|
||||||
|
String buffer;
|
||||||
|
public:
|
||||||
|
Item_func_uncompress(Item *a): Item_str_func(a){}
|
||||||
|
void fix_length_and_dec(){max_length= MAX_BLOB_WIDTH;}
|
||||||
|
const char *func_name() const{return "uncompress";}
|
||||||
|
String *val_str(String *) ZLIB_DEPENDED_FUNCTION
|
||||||
|
};
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ Item_subselect::trans_res
|
|||||||
Item_subselect::select_transformer(JOIN *join)
|
Item_subselect::select_transformer(JOIN *join)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("Item_subselect::select_transformer");
|
DBUG_ENTER("Item_subselect::select_transformer");
|
||||||
DBUG_RETURN(OK);
|
DBUG_RETURN(RES_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -214,14 +214,14 @@ Item_singlerow_subselect::select_transformer(JOIN *join)
|
|||||||
cond= join->having;
|
cond= join->having;
|
||||||
else
|
else
|
||||||
if (!(cond= new Item_cond_and(join->conds, join->having)))
|
if (!(cond= new Item_cond_and(join->conds, join->having)))
|
||||||
return ERROR;
|
return RES_ERROR;
|
||||||
if (!(substitution= new Item_func_if(cond, substitution,
|
if (!(substitution= new Item_func_if(cond, substitution,
|
||||||
new Item_null())))
|
new Item_null())))
|
||||||
return ERROR;
|
return RES_ERROR;
|
||||||
}
|
}
|
||||||
return REDUCE;
|
return RES_REDUCE;
|
||||||
}
|
}
|
||||||
return OK;
|
return RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Item_singlerow_subselect::store(uint i, Item *item)
|
void Item_singlerow_subselect::store(uint i, Item *item)
|
||||||
@ -508,7 +508,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||||||
if (!optimizer || optimizer->fix_left(thd, up->get_table_list(), 0))
|
if (!optimizer || optimizer->fix_left(thd, up->get_table_list(), 0))
|
||||||
{
|
{
|
||||||
thd->lex.current_select= current;
|
thd->lex.current_select= current;
|
||||||
DBUG_RETURN(ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
}
|
}
|
||||||
thd->lex.current_select= current;
|
thd->lex.current_select= current;
|
||||||
|
|
||||||
@ -528,7 +528,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||||||
if (select_lex->item_list.elements > 1)
|
if (select_lex->item_list.elements > 1)
|
||||||
{
|
{
|
||||||
my_error(ER_CARDINALITY_COL, MYF(0), 1);
|
my_error(ER_CARDINALITY_COL, MYF(0), 1);
|
||||||
DBUG_RETURN(ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
item= (Item*) select_lex->item_list.head();
|
item= (Item*) select_lex->item_list.head();
|
||||||
@ -546,7 +546,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||||||
if (join->having->fix_fields(thd, join->tables_list, &join->having))
|
if (join->having->fix_fields(thd, join->tables_list, &join->having))
|
||||||
{
|
{
|
||||||
select_lex->having_fix_field= 0;
|
select_lex->having_fix_field= 0;
|
||||||
DBUG_RETURN(ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
}
|
}
|
||||||
select_lex->having_fix_field= 0;
|
select_lex->having_fix_field= 0;
|
||||||
}
|
}
|
||||||
@ -570,7 +570,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||||||
if (join->having->fix_fields(thd, join->tables_list, &join->having))
|
if (join->having->fix_fields(thd, join->tables_list, &join->having))
|
||||||
{
|
{
|
||||||
select_lex->having_fix_field= 0;
|
select_lex->having_fix_field= 0;
|
||||||
DBUG_RETURN(ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
}
|
}
|
||||||
select_lex->having_fix_field= 0;
|
select_lex->having_fix_field= 0;
|
||||||
item= new Item_cond_or(item,
|
item= new Item_cond_or(item,
|
||||||
@ -578,7 +578,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||||||
}
|
}
|
||||||
join->conds= and_items(join->conds, item);
|
join->conds= and_items(join->conds, item);
|
||||||
if (join->conds->fix_fields(thd, join->tables_list, &join->conds))
|
if (join->conds->fix_fields(thd, join->tables_list, &join->conds))
|
||||||
DBUG_RETURN(ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -592,7 +592,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||||||
if (join->having->fix_fields(thd, join->tables_list, &join->having))
|
if (join->having->fix_fields(thd, join->tables_list, &join->having))
|
||||||
{
|
{
|
||||||
select_lex->having_fix_field= 0;
|
select_lex->having_fix_field= 0;
|
||||||
DBUG_RETURN(ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
}
|
}
|
||||||
select_lex->having_fix_field= 0;
|
select_lex->having_fix_field= 0;
|
||||||
}
|
}
|
||||||
@ -610,11 +610,11 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
|
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
|
||||||
ER_SELECT_REDUCED, warn_buff);
|
ER_SELECT_REDUCED, warn_buff);
|
||||||
}
|
}
|
||||||
DBUG_RETURN(REDUCE);
|
DBUG_RETURN(RES_REDUCE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBUG_RETURN(OK);
|
DBUG_RETURN(RES_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
Item_subselect::trans_res
|
Item_subselect::trans_res
|
||||||
@ -640,7 +640,7 @@ Item_in_subselect::row_value_transformer(JOIN *join,
|
|||||||
if (!optimizer || optimizer->fix_left(thd, up->get_table_list(), 0))
|
if (!optimizer || optimizer->fix_left(thd, up->get_table_list(), 0))
|
||||||
{
|
{
|
||||||
thd->lex.current_select= current;
|
thd->lex.current_select= current;
|
||||||
DBUG_RETURN(ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
}
|
}
|
||||||
thd->lex.current_select= current;
|
thd->lex.current_select= current;
|
||||||
|
|
||||||
@ -679,7 +679,7 @@ Item_in_subselect::row_value_transformer(JOIN *join,
|
|||||||
if (join->having->fix_fields(thd, join->tables_list, &join->having))
|
if (join->having->fix_fields(thd, join->tables_list, &join->having))
|
||||||
{
|
{
|
||||||
select_lex->having_fix_field= 0;
|
select_lex->having_fix_field= 0;
|
||||||
DBUG_RETURN(ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
}
|
}
|
||||||
select_lex->having_fix_field= 0;
|
select_lex->having_fix_field= 0;
|
||||||
}
|
}
|
||||||
@ -687,9 +687,9 @@ Item_in_subselect::row_value_transformer(JOIN *join,
|
|||||||
{
|
{
|
||||||
join->conds= and_items(join->conds, item);
|
join->conds= and_items(join->conds, item);
|
||||||
if (join->conds->fix_fields(thd, join->tables_list, &join->having))
|
if (join->conds->fix_fields(thd, join->tables_list, &join->having))
|
||||||
DBUG_RETURN(ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
}
|
}
|
||||||
DBUG_RETURN(OK);
|
DBUG_RETURN(RES_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
Item_subselect::trans_res
|
Item_subselect::trans_res
|
||||||
@ -846,7 +846,7 @@ void subselect_union_engine::fix_length_and_dec(Item_cache **row)
|
|||||||
SELECT_LEX *sl= unit->first_select();
|
SELECT_LEX *sl= unit->first_select();
|
||||||
bool fake= 0;
|
bool fake= 0;
|
||||||
res_type= set_row(sl, item, row, &fake);
|
res_type= set_row(sl, item, row, &fake);
|
||||||
for (sl= sl->next_select(); sl; sl->next_select())
|
for (sl= sl->next_select(); sl; sl= sl->next_select())
|
||||||
{
|
{
|
||||||
List_iterator_fast<Item> li(sl->item_list);
|
List_iterator_fast<Item> li(sl->item_list);
|
||||||
Item *sel_item;
|
Item *sel_item;
|
||||||
|
@ -51,7 +51,7 @@ public:
|
|||||||
/* changed engine indicator */
|
/* changed engine indicator */
|
||||||
bool engine_changed;
|
bool engine_changed;
|
||||||
|
|
||||||
enum trans_res {OK, REDUCE, ERROR};
|
enum trans_res {RES_OK, RES_REDUCE, RES_ERROR};
|
||||||
enum subs_type {UNKNOWN_SUBS, SINGLEROW_SUBS,
|
enum subs_type {UNKNOWN_SUBS, SINGLEROW_SUBS,
|
||||||
EXISTS_SUBS, IN_SUBS, ALLANY_SUBS};
|
EXISTS_SUBS, IN_SUBS, ALLANY_SUBS};
|
||||||
|
|
||||||
|
@ -223,10 +223,9 @@ Item *Item_sum_sum::copy_or_same(THD* thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Item_sum_sum::reset()
|
void Item_sum_sum::clear()
|
||||||
{
|
{
|
||||||
null_value=1; sum=0.0;
|
null_value=1; sum=0.0;
|
||||||
return Item_sum_sum::add();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -251,10 +250,9 @@ Item *Item_sum_count::copy_or_same(THD* thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Item_sum_count::reset()
|
void Item_sum_count::clear()
|
||||||
{
|
{
|
||||||
count=0;
|
count= 0;
|
||||||
return add();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -286,10 +284,9 @@ Item *Item_sum_avg::copy_or_same(THD* thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Item_sum_avg::reset()
|
void Item_sum_avg::clear()
|
||||||
{
|
{
|
||||||
sum=0.0; count=0;
|
sum=0.0; count=0;
|
||||||
return Item_sum_avg::add();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -342,11 +339,10 @@ Item *Item_sum_variance::copy_or_same(THD* thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Item_sum_variance::reset()
|
void Item_sum_variance::clear()
|
||||||
{
|
{
|
||||||
sum=sum_sqr=0.0;
|
sum=sum_sqr=0.0;
|
||||||
count=0;
|
count=0;
|
||||||
return Item_sum_variance::add();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Item_sum_variance::add()
|
bool Item_sum_variance::add()
|
||||||
@ -592,10 +588,9 @@ longlong Item_sum_bit::val_int()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Item_sum_bit::reset()
|
void Item_sum_bit::clear()
|
||||||
{
|
{
|
||||||
bits=reset_bits;
|
bits= reset_bits;
|
||||||
return add();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Item *Item_sum_or::copy_or_same(THD* thd)
|
Item *Item_sum_or::copy_or_same(THD* thd)
|
||||||
@ -1280,7 +1275,7 @@ Item *Item_sum_count_distinct::copy_or_same(THD* thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Item_sum_count_distinct::reset()
|
void Item_sum_count_distinct::clear()
|
||||||
{
|
{
|
||||||
if (use_tree)
|
if (use_tree)
|
||||||
reset_tree(tree);
|
reset_tree(tree);
|
||||||
@ -1290,7 +1285,6 @@ bool Item_sum_count_distinct::reset()
|
|||||||
table->file->delete_all_rows();
|
table->file->delete_all_rows();
|
||||||
table->file->extra(HA_EXTRA_WRITE_CACHE);
|
table->file->extra(HA_EXTRA_WRITE_CACHE);
|
||||||
}
|
}
|
||||||
return add();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Item_sum_count_distinct::add()
|
bool Item_sum_count_distinct::add()
|
||||||
@ -1353,11 +1347,11 @@ longlong Item_sum_count_distinct::val_int()
|
|||||||
|
|
||||||
#ifdef HAVE_DLOPEN
|
#ifdef HAVE_DLOPEN
|
||||||
|
|
||||||
bool Item_udf_sum::reset()
|
void Item_udf_sum::clear()
|
||||||
{
|
{
|
||||||
DBUG_ENTER("Item_udf_sum::reset");
|
DBUG_ENTER("Item_udf_sum::clear");
|
||||||
udf.reset(&null_value);
|
udf.clear();
|
||||||
DBUG_RETURN(0);
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Item_udf_sum::add()
|
bool Item_udf_sum::add()
|
||||||
@ -1466,7 +1460,7 @@ int group_concat_key_cmp_with_distinct(void* arg, byte* key1,
|
|||||||
for (uint i= 0; i < item->arg_count_field; i++)
|
for (uint i= 0; i < item->arg_count_field; i++)
|
||||||
{
|
{
|
||||||
Item *field_item= item->args[i];
|
Item *field_item= item->args[i];
|
||||||
Field *field= field_item->tmp_table_field();
|
Field *field= field_item->real_item()->get_tmp_table_field();
|
||||||
if (field)
|
if (field)
|
||||||
{
|
{
|
||||||
uint offset= field->abs_offset;
|
uint offset= field->abs_offset;
|
||||||
@ -1497,7 +1491,7 @@ int group_concat_key_cmp_with_order(void* arg, byte* key1, byte* key2)
|
|||||||
{
|
{
|
||||||
ORDER *order_item= item->order[i];
|
ORDER *order_item= item->order[i];
|
||||||
Item *item= *order_item->item;
|
Item *item= *order_item->item;
|
||||||
Field *field= item->tmp_table_field();
|
Field *field= item->real_item()->get_tmp_table_field();
|
||||||
if (field)
|
if (field)
|
||||||
{
|
{
|
||||||
uint offset= field->abs_offset;
|
uint offset= field->abs_offset;
|
||||||
@ -1548,7 +1542,7 @@ int dump_leaf_key(byte* key, uint32 count __attribute__((unused)),
|
|||||||
Item *show_item= group_concat_item->args[i];
|
Item *show_item= group_concat_item->args[i];
|
||||||
if (!show_item->const_item())
|
if (!show_item->const_item())
|
||||||
{
|
{
|
||||||
Field *f= show_item->tmp_table_field();
|
Field *f= show_item->real_item()->get_tmp_table_field();
|
||||||
char *sv= f->ptr;
|
char *sv= f->ptr;
|
||||||
f->ptr= (char *)key + f->abs_offset;
|
f->ptr= (char *)key + f->abs_offset;
|
||||||
String *res= f->val_str(&tmp,&tmp2);
|
String *res= f->val_str(&tmp,&tmp2);
|
||||||
@ -1685,7 +1679,7 @@ Item *Item_func_group_concat::copy_or_same(THD* thd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Item_func_group_concat::reset()
|
void Item_func_group_concat::clear()
|
||||||
{
|
{
|
||||||
result.length(0);
|
result.length(0);
|
||||||
result.copy();
|
result.copy();
|
||||||
@ -1699,7 +1693,6 @@ bool Item_func_group_concat::reset()
|
|||||||
}
|
}
|
||||||
if (tree_mode)
|
if (tree_mode)
|
||||||
reset_tree(tree);
|
reset_tree(tree);
|
||||||
return add();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1716,7 +1709,7 @@ bool Item_func_group_concat::add()
|
|||||||
Item *show_item= args[i];
|
Item *show_item= args[i];
|
||||||
if (!show_item->const_item())
|
if (!show_item->const_item())
|
||||||
{
|
{
|
||||||
Field *f= show_item->tmp_table_field();
|
Field *f= show_item->real_item()->get_tmp_table_field();
|
||||||
if (!f->is_null())
|
if (!f->is_null())
|
||||||
{
|
{
|
||||||
record_is_null= FALSE;
|
record_is_null= FALSE;
|
||||||
|
@ -62,7 +62,8 @@ public:
|
|||||||
|
|
||||||
enum Type type() const { return SUM_FUNC_ITEM; }
|
enum Type type() const { return SUM_FUNC_ITEM; }
|
||||||
virtual enum Sumfunctype sum_func () const=0;
|
virtual enum Sumfunctype sum_func () const=0;
|
||||||
virtual bool reset()=0;
|
inline bool reset() { clear(); return add(); };
|
||||||
|
virtual void clear()= 0;
|
||||||
virtual bool add()=0;
|
virtual bool add()=0;
|
||||||
virtual void reset_field()=0;
|
virtual void reset_field()=0;
|
||||||
virtual void update_field(int offset)=0;
|
virtual void update_field(int offset)=0;
|
||||||
@ -124,7 +125,7 @@ class Item_sum_sum :public Item_sum_num
|
|||||||
Item_sum_sum(THD *thd, Item_sum_sum &item)
|
Item_sum_sum(THD *thd, Item_sum_sum &item)
|
||||||
:Item_sum_num(thd, item), sum(item.sum) {}
|
:Item_sum_num(thd, item), sum(item.sum) {}
|
||||||
enum Sumfunctype sum_func () const {return SUM_FUNC;}
|
enum Sumfunctype sum_func () const {return SUM_FUNC;}
|
||||||
bool reset();
|
void clear();
|
||||||
bool add();
|
bool add();
|
||||||
double val();
|
double val();
|
||||||
void reset_field();
|
void reset_field();
|
||||||
@ -151,7 +152,7 @@ class Item_sum_count :public Item_sum_int
|
|||||||
table_map used_tables() const { return used_table_cache; }
|
table_map used_tables() const { return used_table_cache; }
|
||||||
bool const_item() const { return !used_table_cache; }
|
bool const_item() const { return !used_table_cache; }
|
||||||
enum Sumfunctype sum_func () const { return COUNT_FUNC; }
|
enum Sumfunctype sum_func () const { return COUNT_FUNC; }
|
||||||
bool reset();
|
void clear();
|
||||||
void no_rows_in_result() { count=0; }
|
void no_rows_in_result() { count=0; }
|
||||||
bool add();
|
bool add();
|
||||||
void make_const(longlong count_arg) { count=count_arg; used_table_cache=0; }
|
void make_const(longlong count_arg) { count=count_arg; used_table_cache=0; }
|
||||||
@ -225,7 +226,7 @@ class Item_sum_count_distinct :public Item_sum_int
|
|||||||
|
|
||||||
table_map used_tables() const { return used_table_cache; }
|
table_map used_tables() const { return used_table_cache; }
|
||||||
enum Sumfunctype sum_func () const { return COUNT_DISTINCT_FUNC; }
|
enum Sumfunctype sum_func () const { return COUNT_DISTINCT_FUNC; }
|
||||||
bool reset();
|
void clear();
|
||||||
bool add();
|
bool add();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
void reset_field() { return ;} // Never called
|
void reset_field() { return ;} // Never called
|
||||||
@ -269,7 +270,7 @@ class Item_sum_avg :public Item_sum_num
|
|||||||
Item_sum_avg(THD *thd, Item_sum_avg &item)
|
Item_sum_avg(THD *thd, Item_sum_avg &item)
|
||||||
:Item_sum_num(thd, item), sum(item.sum), count(item.count) {}
|
:Item_sum_num(thd, item), sum(item.sum), count(item.count) {}
|
||||||
enum Sumfunctype sum_func () const {return AVG_FUNC;}
|
enum Sumfunctype sum_func () const {return AVG_FUNC;}
|
||||||
bool reset();
|
void clear();
|
||||||
bool add();
|
bool add();
|
||||||
double val();
|
double val();
|
||||||
void reset_field();
|
void reset_field();
|
||||||
@ -322,7 +323,7 @@ class Item_sum_variance : public Item_sum_num
|
|||||||
Item_sum_num(thd, item), sum(item.sum), sum_sqr(item.sum_sqr),
|
Item_sum_num(thd, item), sum(item.sum), sum_sqr(item.sum_sqr),
|
||||||
count(item.count) {}
|
count(item.count) {}
|
||||||
enum Sumfunctype sum_func () const { return VARIANCE_FUNC; }
|
enum Sumfunctype sum_func () const { return VARIANCE_FUNC; }
|
||||||
bool reset();
|
void clear();
|
||||||
bool add();
|
bool add();
|
||||||
double val();
|
double val();
|
||||||
void reset_field();
|
void reset_field();
|
||||||
@ -385,19 +386,18 @@ class Item_sum_hybrid :public Item_sum
|
|||||||
Item_sum_hybrid(THD *thd, Item_sum_hybrid &item):
|
Item_sum_hybrid(THD *thd, Item_sum_hybrid &item):
|
||||||
Item_sum(thd, item), value(item.value), tmp_value(item.tmp_value),
|
Item_sum(thd, item), value(item.value), tmp_value(item.tmp_value),
|
||||||
sum(item.sum), sum_int(item.sum_int), hybrid_type(item.hybrid_type),
|
sum(item.sum), sum_int(item.sum_int), hybrid_type(item.hybrid_type),
|
||||||
cmp_sign(item.cmp_sign), used_table_cache(used_table_cache),
|
hybrid_field_type(item.hybrid_field_type),cmp_sign(item.cmp_sign),
|
||||||
cmp_charset(item.cmp_charset) {}
|
used_table_cache(used_table_cache), cmp_charset(item.cmp_charset) {}
|
||||||
bool fix_fields(THD *, TABLE_LIST *, Item **);
|
bool fix_fields(THD *, TABLE_LIST *, Item **);
|
||||||
table_map used_tables() const { return used_table_cache; }
|
table_map used_tables() const { return used_table_cache; }
|
||||||
bool const_item() const { return !used_table_cache; }
|
bool const_item() const { return !used_table_cache; }
|
||||||
|
|
||||||
bool reset()
|
void clear()
|
||||||
{
|
{
|
||||||
sum=0.0;
|
sum=0.0;
|
||||||
sum_int=0;
|
sum_int=0;
|
||||||
value.length(0);
|
value.length(0);
|
||||||
null_value=1;
|
null_value=1;
|
||||||
return add();
|
|
||||||
}
|
}
|
||||||
double val();
|
double val();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
@ -451,7 +451,7 @@ class Item_sum_bit :public Item_sum_int
|
|||||||
Item_sum_bit(THD *thd, Item_sum_bit &item):
|
Item_sum_bit(THD *thd, Item_sum_bit &item):
|
||||||
Item_sum_int(thd, item), reset_bits(item.reset_bits), bits(item.bits) {}
|
Item_sum_int(thd, item), reset_bits(item.reset_bits), bits(item.bits) {}
|
||||||
enum Sumfunctype sum_func () const {return SUM_BIT_FUNC;}
|
enum Sumfunctype sum_func () const {return SUM_BIT_FUNC;}
|
||||||
bool reset();
|
void clear();
|
||||||
longlong val_int();
|
longlong val_int();
|
||||||
void reset_field();
|
void reset_field();
|
||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
@ -509,7 +509,7 @@ public:
|
|||||||
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
||||||
virtual bool have_field_update(void) const { return 0; }
|
virtual bool have_field_update(void) const { return 0; }
|
||||||
|
|
||||||
bool reset();
|
void clear();
|
||||||
bool add();
|
bool add();
|
||||||
void reset_field() {};
|
void reset_field() {};
|
||||||
void update_field(int offset_arg) {};
|
void update_field(int offset_arg) {};
|
||||||
@ -591,7 +591,7 @@ class Item_sum_udf_float :public Item_sum_num
|
|||||||
~Item_sum_udf_float() {}
|
~Item_sum_udf_float() {}
|
||||||
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
||||||
double val() { return 0.0; }
|
double val() { return 0.0; }
|
||||||
bool reset() { return 0; }
|
void clear() {}
|
||||||
bool add() { return 0; }
|
bool add() { return 0; }
|
||||||
void update_field(int offset) {}
|
void update_field(int offset) {}
|
||||||
};
|
};
|
||||||
@ -608,7 +608,7 @@ public:
|
|||||||
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
||||||
longlong val_int() { return 0; }
|
longlong val_int() { return 0; }
|
||||||
double val() { return 0; }
|
double val() { return 0; }
|
||||||
bool reset() { return 0; }
|
void clear() {}
|
||||||
bool add() { return 0; }
|
bool add() { return 0; }
|
||||||
void update_field(int offset) {}
|
void update_field(int offset) {}
|
||||||
};
|
};
|
||||||
@ -628,7 +628,7 @@ public:
|
|||||||
enum Item_result result_type () const { return STRING_RESULT; }
|
enum Item_result result_type () const { return STRING_RESULT; }
|
||||||
void fix_length_and_dec() { maybe_null=1; max_length=0; }
|
void fix_length_and_dec() { maybe_null=1; max_length=0; }
|
||||||
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
enum Sumfunctype sum_func () const { return UDF_SUM_FUNC; }
|
||||||
bool reset() { return 0; }
|
void clear() {}
|
||||||
bool add() { return 0; }
|
bool add() { return 0; }
|
||||||
void update_field(int offset) {}
|
void update_field(int offset) {}
|
||||||
};
|
};
|
||||||
@ -714,7 +714,7 @@ class Item_func_group_concat : public Item_sum
|
|||||||
const char *func_name() const { return "group_concat"; }
|
const char *func_name() const { return "group_concat"; }
|
||||||
enum Type type() const { return SUM_FUNC_ITEM; }
|
enum Type type() const { return SUM_FUNC_ITEM; }
|
||||||
virtual Item_result result_type () const { return STRING_RESULT; }
|
virtual Item_result result_type () const { return STRING_RESULT; }
|
||||||
bool reset();
|
void clear();
|
||||||
bool add();
|
bool add();
|
||||||
void reset_field();
|
void reset_field();
|
||||||
bool fix_fields(THD *, TABLE_LIST *, Item **);
|
bool fix_fields(THD *, TABLE_LIST *, Item **);
|
||||||
@ -733,4 +733,5 @@ class Item_func_group_concat : public Item_sum
|
|||||||
}
|
}
|
||||||
String* val_str(String* str);
|
String* val_str(String* str);
|
||||||
Item *copy_or_same(THD* thd);
|
Item *copy_or_same(THD* thd);
|
||||||
|
void no_rows_in_result() {}
|
||||||
};
|
};
|
||||||
|
@ -327,7 +327,6 @@ public:
|
|||||||
max_length=10*default_charset()->mbmaxlen;
|
max_length=10*default_charset()->mbmaxlen;
|
||||||
}
|
}
|
||||||
int save_in_field(Field *to, bool no_conversions);
|
int save_in_field(Field *to, bool no_conversions);
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_date(maybe_null, name, t_arg, default_charset()));
|
return (new Field_date(maybe_null, name, t_arg, default_charset()));
|
||||||
@ -342,7 +341,6 @@ public:
|
|||||||
Item_date_func(Item *a) :Item_str_func(a) {}
|
Item_date_func(Item *a) :Item_str_func(a) {}
|
||||||
Item_date_func(Item *a,Item *b) :Item_str_func(a,b) {}
|
Item_date_func(Item *a,Item *b) :Item_str_func(a,b) {}
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
|
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_datetime(maybe_null, name, t_arg, default_charset()));
|
return (new Field_datetime(maybe_null, name, t_arg, default_charset()));
|
||||||
@ -366,7 +364,6 @@ public:
|
|||||||
longlong val_int() { return value; }
|
longlong val_int() { return value; }
|
||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
void fix_length_and_dec();
|
void fix_length_and_dec();
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_time(maybe_null, name, t_arg, default_charset()));
|
return (new Field_time(maybe_null, name, t_arg, default_charset()));
|
||||||
@ -533,7 +530,6 @@ public:
|
|||||||
}
|
}
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_TIME; }
|
enum_field_types field_type() const { return MYSQL_TYPE_TIME; }
|
||||||
const char *func_name() const { return "sec_to_time"; }
|
const char *func_name() const { return "sec_to_time"; }
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_time(maybe_null, name, t_arg, default_charset()));
|
return (new Field_time(maybe_null, name, t_arg, default_charset()));
|
||||||
@ -634,7 +630,6 @@ public:
|
|||||||
bool get_date(TIME *ltime, bool fuzzy_date);
|
bool get_date(TIME *ltime, bool fuzzy_date);
|
||||||
const char *func_name() const { return "date"; }
|
const char *func_name() const { return "date"; }
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_DATE; }
|
enum_field_types field_type() const { return MYSQL_TYPE_DATE; }
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_date(maybe_null, name, t_arg, default_charset()));
|
return (new Field_date(maybe_null, name, t_arg, default_charset()));
|
||||||
@ -650,7 +645,6 @@ public:
|
|||||||
bool get_time(TIME *ltime);
|
bool get_time(TIME *ltime);
|
||||||
const char *func_name() const { return "time"; }
|
const char *func_name() const { return "time"; }
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_TIME; }
|
enum_field_types field_type() const { return MYSQL_TYPE_TIME; }
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_time(maybe_null, name, t_arg, default_charset()));
|
return (new Field_time(maybe_null, name, t_arg, default_charset()));
|
||||||
@ -665,7 +659,6 @@ public:
|
|||||||
String *val_str(String *str);
|
String *val_str(String *str);
|
||||||
const char *func_name() const { return "datetime"; }
|
const char *func_name() const { return "datetime"; }
|
||||||
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
|
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_datetime(maybe_null, name, t_arg, default_charset()));
|
return (new Field_datetime(maybe_null, name, t_arg, default_charset()));
|
||||||
@ -684,7 +677,6 @@ public:
|
|||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=8*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=8*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
}
|
}
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_date(maybe_null, name, t_arg, &my_charset_bin));
|
return (new Field_date(maybe_null, name, t_arg, &my_charset_bin));
|
||||||
@ -711,7 +703,6 @@ public:
|
|||||||
Change this when we support
|
Change this when we support
|
||||||
microseconds in TIME/DATETIME
|
microseconds in TIME/DATETIME
|
||||||
*/
|
*/
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
if (cached_field_type == MYSQL_TYPE_TIME)
|
if (cached_field_type == MYSQL_TYPE_TIME)
|
||||||
@ -735,7 +726,6 @@ public:
|
|||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=17*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=17*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
}
|
}
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_time(maybe_null, name, t_arg, &my_charset_bin));
|
return (new Field_time(maybe_null, name, t_arg, &my_charset_bin));
|
||||||
@ -755,7 +745,6 @@ public:
|
|||||||
decimals=0;
|
decimals=0;
|
||||||
max_length=8*MY_CHARSET_BIN_MB_MAXLEN;
|
max_length=8*MY_CHARSET_BIN_MB_MAXLEN;
|
||||||
}
|
}
|
||||||
Field *tmp_table_field() { return result_field; }
|
|
||||||
Field *tmp_table_field(TABLE *t_arg)
|
Field *tmp_table_field(TABLE *t_arg)
|
||||||
{
|
{
|
||||||
return (new Field_time(maybe_null, name, t_arg, &my_charset_bin));
|
return (new Field_time(maybe_null, name, t_arg, &my_charset_bin));
|
||||||
|
@ -41,7 +41,7 @@ public:
|
|||||||
:Item_sum_num(thd, item) {}
|
:Item_sum_num(thd, item) {}
|
||||||
double val() { return 0.0; }
|
double val() { return 0.0; }
|
||||||
enum Sumfunctype sum_func () const {return UNIQUE_USERS_FUNC;}
|
enum Sumfunctype sum_func () const {return UNIQUE_USERS_FUNC;}
|
||||||
bool reset() { return 0;}
|
void clear() {}
|
||||||
bool add() { return 0; }
|
bool add() { return 0; }
|
||||||
void reset_field() {}
|
void reset_field() {}
|
||||||
void update_field(int offset) {}
|
void update_field(int offset) {}
|
||||||
|
10
sql/lex.h
10
sql/lex.h
@ -249,6 +249,12 @@ static SYMBOL symbols[] = {
|
|||||||
{ "MASTER_PASSWORD", SYM(MASTER_PASSWORD_SYM),0,0},
|
{ "MASTER_PASSWORD", SYM(MASTER_PASSWORD_SYM),0,0},
|
||||||
{ "MASTER_PORT", SYM(MASTER_PORT_SYM),0,0},
|
{ "MASTER_PORT", SYM(MASTER_PORT_SYM),0,0},
|
||||||
{ "MASTER_SERVER_ID", SYM(MASTER_SERVER_ID_SYM),0,0},
|
{ "MASTER_SERVER_ID", SYM(MASTER_SERVER_ID_SYM),0,0},
|
||||||
|
{ "MASTER_SSL", SYM(MASTER_SSL_SYM),0,0},
|
||||||
|
{ "MASTER_SSL_CA", SYM(MASTER_SSL_CA_SYM),0,0},
|
||||||
|
{ "MASTER_SSL_CAPATH",SYM(MASTER_SSL_CAPATH_SYM),0,0},
|
||||||
|
{ "MASTER_SSL_CERT", SYM(MASTER_SSL_CERT_SYM),0,0},
|
||||||
|
{ "MASTER_SSL_CIPHER",SYM(MASTER_SSL_CIPHER_SYM),0,0},
|
||||||
|
{ "MASTER_SSL_KEY", SYM(MASTER_SSL_KEY_SYM),0,0},
|
||||||
{ "MASTER_USER", SYM(MASTER_USER_SYM),0,0},
|
{ "MASTER_USER", SYM(MASTER_USER_SYM),0,0},
|
||||||
{ "MAX_ROWS", SYM(MAX_ROWS),0,0},
|
{ "MAX_ROWS", SYM(MAX_ROWS),0,0},
|
||||||
{ "MAX_QUERIES_PER_HOUR", SYM(MAX_QUERIES_PER_HOUR), 0,0},
|
{ "MAX_QUERIES_PER_HOUR", SYM(MAX_QUERIES_PER_HOUR), 0,0},
|
||||||
@ -288,6 +294,7 @@ static SYMBOL symbols[] = {
|
|||||||
{ "NULL", SYM(NULL_SYM),0,0},
|
{ "NULL", SYM(NULL_SYM),0,0},
|
||||||
{ "NUMERIC", SYM(NUMERIC_SYM),0,0},
|
{ "NUMERIC", SYM(NUMERIC_SYM),0,0},
|
||||||
{ "OFFSET", SYM(OFFSET_SYM),0,0},
|
{ "OFFSET", SYM(OFFSET_SYM),0,0},
|
||||||
|
{ "OLD_PASSWORD", SYM(OLD_PASSWORD),0,0},
|
||||||
{ "ON", SYM(ON),0,0},
|
{ "ON", SYM(ON),0,0},
|
||||||
{ "OPEN", SYM(OPEN_SYM),0,0},
|
{ "OPEN", SYM(OPEN_SYM),0,0},
|
||||||
{ "OPTIMIZE", SYM(OPTIMIZE),0,0},
|
{ "OPTIMIZE", SYM(OPTIMIZE),0,0},
|
||||||
@ -473,9 +480,7 @@ static SYMBOL sql_functions[] = {
|
|||||||
{ "COUNT", SYM(COUNT_SYM),0,0},
|
{ "COUNT", SYM(COUNT_SYM),0,0},
|
||||||
{ "COS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cos)},
|
{ "COS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cos)},
|
||||||
{ "COT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cot)},
|
{ "COT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cot)},
|
||||||
#ifdef HAVE_COMPRESS
|
|
||||||
{ "CRC32", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_crc32)},
|
{ "CRC32", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_crc32)},
|
||||||
#endif
|
|
||||||
{ "CROSSES", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_crosses)},
|
{ "CROSSES", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_crosses)},
|
||||||
{ "CURDATE", SYM(CURDATE),0,0},
|
{ "CURDATE", SYM(CURDATE),0,0},
|
||||||
{ "CURTIME", SYM(CURTIME),0,0},
|
{ "CURTIME", SYM(CURTIME),0,0},
|
||||||
@ -590,7 +595,6 @@ static SYMBOL sql_functions[] = {
|
|||||||
{ "NUMPOINTS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_numpoints)},
|
{ "NUMPOINTS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_numpoints)},
|
||||||
{ "OCTET_LENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_length)},
|
{ "OCTET_LENGTH", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_length)},
|
||||||
{ "OCT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_oct)},
|
{ "OCT", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_oct)},
|
||||||
{ "OLD_PASSWORD", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_old_password)},
|
|
||||||
{ "ORD", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ord)},
|
{ "ORD", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_ord)},
|
||||||
{ "OVERLAPS", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_overlaps)},
|
{ "OVERLAPS", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_overlaps)},
|
||||||
{ "PERIOD_ADD", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_period_add)},
|
{ "PERIOD_ADD", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_period_add)},
|
||||||
|
@ -74,9 +74,6 @@ extern CHARSET_INFO *national_charset_info, *table_alias_charset;
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#define ACL_CACHE_SIZE 256
|
#define ACL_CACHE_SIZE 256
|
||||||
/* Password lengh for 4.1 version previous versions had 16 bytes password hash */
|
|
||||||
#define HASH_PASSWORD_LENGTH 45
|
|
||||||
#define HASH_OLD_PASSWORD_LENGTH 16
|
|
||||||
#define MAX_PASSWORD_LENGTH 32
|
#define MAX_PASSWORD_LENGTH 32
|
||||||
#define HOST_CACHE_SIZE 128
|
#define HOST_CACHE_SIZE 128
|
||||||
#define MAX_ACCEPT_RETRY 10 // Test accept this many times
|
#define MAX_ACCEPT_RETRY 10 // Test accept this many times
|
||||||
@ -411,6 +408,8 @@ bool check_global_access(THD *thd, ulong want_access);
|
|||||||
int mysql_backup_table(THD* thd, TABLE_LIST* table_list);
|
int mysql_backup_table(THD* thd, TABLE_LIST* table_list);
|
||||||
int mysql_restore_table(THD* thd, TABLE_LIST* table_list);
|
int mysql_restore_table(THD* thd, TABLE_LIST* table_list);
|
||||||
|
|
||||||
|
int mysql_checksum_table(THD* thd, TABLE_LIST* table_list,
|
||||||
|
HA_CHECK_OPT* check_opt);
|
||||||
int mysql_check_table(THD* thd, TABLE_LIST* table_list,
|
int mysql_check_table(THD* thd, TABLE_LIST* table_list,
|
||||||
HA_CHECK_OPT* check_opt);
|
HA_CHECK_OPT* check_opt);
|
||||||
int mysql_repair_table(THD* thd, TABLE_LIST* table_list,
|
int mysql_repair_table(THD* thd, TABLE_LIST* table_list,
|
||||||
@ -771,7 +770,7 @@ extern my_bool opt_safe_show_db, opt_local_infile, lower_case_table_names;
|
|||||||
extern my_bool opt_slave_compressed_protocol, use_temp_pool;
|
extern my_bool opt_slave_compressed_protocol, use_temp_pool;
|
||||||
extern my_bool opt_readonly;
|
extern my_bool opt_readonly;
|
||||||
extern my_bool opt_enable_named_pipe;
|
extern my_bool opt_enable_named_pipe;
|
||||||
extern my_bool opt_old_passwords, use_old_passwords;
|
extern my_bool opt_secure_auth;
|
||||||
extern char *shared_memory_base_name, *mysqld_unix_port;
|
extern char *shared_memory_base_name, *mysqld_unix_port;
|
||||||
extern bool opt_enable_shared_memory;
|
extern bool opt_enable_shared_memory;
|
||||||
|
|
||||||
|
@ -257,9 +257,10 @@ my_bool opt_local_infile, opt_external_locking, opt_slave_compressed_protocol;
|
|||||||
my_bool opt_safe_user_create = 0, opt_no_mix_types = 0;
|
my_bool opt_safe_user_create = 0, opt_no_mix_types = 0;
|
||||||
my_bool lower_case_table_names, opt_old_rpl_compat;
|
my_bool lower_case_table_names, opt_old_rpl_compat;
|
||||||
my_bool opt_show_slave_auth_info, opt_sql_bin_update = 0;
|
my_bool opt_show_slave_auth_info, opt_sql_bin_update = 0;
|
||||||
my_bool opt_log_slave_updates= 0, opt_old_passwords=0, use_old_passwords=0;
|
my_bool opt_log_slave_updates= 0;
|
||||||
my_bool opt_console= 0, opt_bdb, opt_innodb, opt_isam;
|
my_bool opt_console= 0, opt_bdb, opt_innodb, opt_isam;
|
||||||
my_bool opt_readonly, use_temp_pool, relay_log_purge;
|
my_bool opt_readonly, use_temp_pool, relay_log_purge;
|
||||||
|
my_bool opt_secure_auth= 0;
|
||||||
volatile bool mqh_used = 0;
|
volatile bool mqh_used = 0;
|
||||||
|
|
||||||
uint mysqld_port, test_flags, select_errors, dropping_tables, ha_open_options;
|
uint mysqld_port, test_flags, select_errors, dropping_tables, ha_open_options;
|
||||||
@ -362,15 +363,15 @@ pthread_t signal_thread;
|
|||||||
pthread_attr_t connection_attrib;
|
pthread_attr_t connection_attrib;
|
||||||
|
|
||||||
/* replication parameters, if master_host is not NULL, we are a slave */
|
/* replication parameters, if master_host is not NULL, we are a slave */
|
||||||
my_bool master_ssl;
|
|
||||||
uint master_port= MYSQL_PORT, master_connect_retry = 60;
|
uint master_port= MYSQL_PORT, master_connect_retry = 60;
|
||||||
uint report_port= MYSQL_PORT;
|
uint report_port= MYSQL_PORT;
|
||||||
ulong master_retry_count=0;
|
ulong master_retry_count=0;
|
||||||
char *master_user, *master_password, *master_host, *master_info_file;
|
char *master_user, *master_password, *master_host, *master_info_file;
|
||||||
char *relay_log_info_file, *master_ssl_key, *master_ssl_cert;
|
char *relay_log_info_file, *report_user, *report_password, *report_host;
|
||||||
char *master_ssl_capath, *master_ssl_cipher, *report_user;
|
|
||||||
char *report_password, *report_host;
|
|
||||||
char *opt_relay_logname = 0, *opt_relaylog_index_name=0;
|
char *opt_relay_logname = 0, *opt_relaylog_index_name=0;
|
||||||
|
my_bool master_ssl;
|
||||||
|
char *master_ssl_key, *master_ssl_cert;
|
||||||
|
char *master_ssl_ca, *master_ssl_capath, *master_ssl_cipher;
|
||||||
|
|
||||||
/* Static variables */
|
/* Static variables */
|
||||||
|
|
||||||
@ -2819,12 +2820,6 @@ static void create_new_thread(THD *thd)
|
|||||||
if (thread_count-delayed_insert_threads > max_used_connections)
|
if (thread_count-delayed_insert_threads > max_used_connections)
|
||||||
max_used_connections=thread_count-delayed_insert_threads;
|
max_used_connections=thread_count-delayed_insert_threads;
|
||||||
thd->thread_id=thread_id++;
|
thd->thread_id=thread_id++;
|
||||||
for (uint i=0; i < 8 ; i++) // Generate password teststring
|
|
||||||
thd->scramble[i]= (char) (my_rnd(&sql_rand)*94+33);
|
|
||||||
thd->scramble[8]=0;
|
|
||||||
// Back it up as old clients may need it
|
|
||||||
memcpy(thd->old_scramble,thd->scramble,9);
|
|
||||||
|
|
||||||
|
|
||||||
thd->real_id=pthread_self(); // Keep purify happy
|
thd->real_id=pthread_self(); // Keep purify happy
|
||||||
|
|
||||||
@ -3445,7 +3440,7 @@ enum options
|
|||||||
OPT_MASTER_RETRY_COUNT,
|
OPT_MASTER_RETRY_COUNT,
|
||||||
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_MASTER_SSL_CA,
|
||||||
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,
|
||||||
@ -3535,7 +3530,8 @@ enum options
|
|||||||
OPT_EXPIRE_LOGS_DAYS,
|
OPT_EXPIRE_LOGS_DAYS,
|
||||||
OPT_DEFAULT_WEEK_FORMAT,
|
OPT_DEFAULT_WEEK_FORMAT,
|
||||||
OPT_GROUP_CONCAT_MAX_LEN,
|
OPT_GROUP_CONCAT_MAX_LEN,
|
||||||
OPT_DEFAULT_COLLATION
|
OPT_DEFAULT_COLLATION,
|
||||||
|
OPT_SECURE_AUTH
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -3783,27 +3779,28 @@ thread is in the master's binlogs.",
|
|||||||
(gptr*) &master_info_file, (gptr*) &master_info_file, 0, GET_STR,
|
(gptr*) &master_info_file, (gptr*) &master_info_file, 0, GET_STR,
|
||||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"master-ssl", OPT_MASTER_SSL,
|
{"master-ssl", OPT_MASTER_SSL,
|
||||||
"Planned to enable the slave to connect to the master using SSL. Does nothing yet.",
|
"Enable the slave to connect to the master using SSL.",
|
||||||
(gptr*) &master_ssl, (gptr*) &master_ssl, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
(gptr*) &master_ssl, (gptr*) &master_ssl, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
||||||
0, 0},
|
0, 0},
|
||||||
{"master-ssl-key", OPT_MASTER_SSL_KEY,
|
{"master-ssl-key", OPT_MASTER_SSL_KEY,
|
||||||
"Master SSL keyfile name. Only applies if you have enabled master-ssl. Does \
|
"Master SSL keyfile name. Only applies if you have enabled master-ssl.",
|
||||||
nothing yet.",
|
|
||||||
(gptr*) &master_ssl_key, (gptr*) &master_ssl_key, 0, GET_STR, OPT_ARG,
|
(gptr*) &master_ssl_key, (gptr*) &master_ssl_key, 0, GET_STR, OPT_ARG,
|
||||||
0, 0, 0, 0, 0, 0},
|
0, 0, 0, 0, 0, 0},
|
||||||
{"master-ssl-cert", OPT_MASTER_SSL_CERT,
|
{"master-ssl-cert", OPT_MASTER_SSL_CERT,
|
||||||
"Master SSL certificate file name. Only applies if you have enabled \
|
"Master SSL certificate file name. Only applies if you have enabled \
|
||||||
master-ssl. Does nothing yet.",
|
master-ssl",
|
||||||
(gptr*) &master_ssl_cert, (gptr*) &master_ssl_cert, 0, GET_STR, OPT_ARG,
|
(gptr*) &master_ssl_cert, (gptr*) &master_ssl_cert, 0, GET_STR, OPT_ARG,
|
||||||
0, 0, 0, 0, 0, 0},
|
0, 0, 0, 0, 0, 0},
|
||||||
|
{"master-ssl-ca", OPT_MASTER_SSL_CA,
|
||||||
|
"Master SSL CA file. Only applies if you have enabled master-ssl.",
|
||||||
|
(gptr*) &master_ssl_ca, (gptr*) &master_ssl_ca, 0, GET_STR, OPT_ARG,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
{"master-ssl-capath", OPT_MASTER_SSL_CAPATH,
|
{"master-ssl-capath", OPT_MASTER_SSL_CAPATH,
|
||||||
"Master SSL CA path. Only applies if you have enabled master-ssl. \
|
"Master SSL CA path. Only applies if you have enabled master-ssl.",
|
||||||
Does nothing yet.",
|
|
||||||
(gptr*) &master_ssl_capath, (gptr*) &master_ssl_capath, 0, GET_STR, OPT_ARG,
|
(gptr*) &master_ssl_capath, (gptr*) &master_ssl_capath, 0, GET_STR, OPT_ARG,
|
||||||
0, 0, 0, 0, 0, 0},
|
0, 0, 0, 0, 0, 0},
|
||||||
{"master-ssl-cipher", OPT_MASTER_SSL_CIPHER,
|
{"master-ssl-cipher", OPT_MASTER_SSL_CIPHER,
|
||||||
"Master SSL cipher. Only applies if you have enabled master-ssl. \
|
"Master SSL cipher. Only applies if you have enabled master-ssl.",
|
||||||
Does nothing yet.",
|
|
||||||
(gptr*) &master_ssl_cipher, (gptr*) &master_ssl_capath, 0, GET_STR, OPT_ARG,
|
(gptr*) &master_ssl_cipher, (gptr*) &master_ssl_capath, 0, GET_STR, OPT_ARG,
|
||||||
0, 0, 0, 0, 0, 0},
|
0, 0, 0, 0, 0, 0},
|
||||||
{"myisam-recover", OPT_MYISAM_RECOVER,
|
{"myisam-recover", OPT_MYISAM_RECOVER,
|
||||||
@ -3844,9 +3841,10 @@ Does nothing yet.",
|
|||||||
(gptr*) &opt_no_mix_types, (gptr*) &opt_no_mix_types, 0, GET_BOOL, NO_ARG,
|
(gptr*) &opt_no_mix_types, (gptr*) &opt_no_mix_types, 0, GET_BOOL, NO_ARG,
|
||||||
0, 0, 0, 0, 0, 0},
|
0, 0, 0, 0, 0, 0},
|
||||||
#endif
|
#endif
|
||||||
{"old-protocol", 'o', "Use the old (3.20) protocol client/server protocol.",
|
{"old-passwords", OPT_OLD_PASSWORDS, "Use old password encryption method (needed for 4.0 and older clients).",
|
||||||
(gptr*) &protocol_version, (gptr*) &protocol_version, 0, GET_UINT, NO_ARG,
|
(gptr*) &global_system_variables.old_passwords,
|
||||||
PROTOCOL_VERSION, 0, 0, 0, 0, 0},
|
(gptr*) &max_system_variables.old_passwords, 0, GET_BOOL, NO_ARG,
|
||||||
|
0, 0, 0, 0, 0, 0},
|
||||||
{"old-rpl-compat", OPT_OLD_RPL_COMPAT,
|
{"old-rpl-compat", OPT_OLD_RPL_COMPAT,
|
||||||
"Use old LOAD DATA format in the binary log (don't save data in file).",
|
"Use old LOAD DATA format in the binary log (don't save data in file).",
|
||||||
(gptr*) &opt_old_rpl_compat, (gptr*) &opt_old_rpl_compat, 0, GET_BOOL,
|
(gptr*) &opt_old_rpl_compat, (gptr*) &opt_old_rpl_compat, 0, GET_BOOL,
|
||||||
@ -3913,8 +3911,6 @@ relay logs.",
|
|||||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
{"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 4.0 and older clients).",
|
|
||||||
(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...",
|
||||||
@ -3924,6 +3920,9 @@ relay logs.",
|
|||||||
"Don't allow new user creation by the user who has no write privileges to the mysql.user table.",
|
"Don't allow new user creation by the user who has no write privileges to the mysql.user table.",
|
||||||
(gptr*) &opt_safe_user_create, (gptr*) &opt_safe_user_create, 0, GET_BOOL,
|
(gptr*) &opt_safe_user_create, (gptr*) &opt_safe_user_create, 0, GET_BOOL,
|
||||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||||
|
{"secure-auth", OPT_SECURE_AUTH, "Disallow authentication for accounts that have old (pre-4.1) passwords.",
|
||||||
|
(gptr*) &opt_secure_auth, (gptr*) &opt_secure_auth, 0, GET_BOOL, NO_ARG,
|
||||||
|
my_bool(0), 0, 0, 0, 0, 0},
|
||||||
{"server-id", OPT_SERVER_ID,
|
{"server-id", OPT_SERVER_ID,
|
||||||
"Uniquely identifies the server instance in the community of replication partners.",
|
"Uniquely identifies the server instance in the community of replication partners.",
|
||||||
(gptr*) &server_id, (gptr*) &server_id, 0, GET_ULONG, REQUIRED_ARG, 0, 0, 0,
|
(gptr*) &server_id, (gptr*) &server_id, 0, GET_ULONG, REQUIRED_ARG, 0, 0, 0,
|
||||||
@ -4452,14 +4451,15 @@ struct show_var_st status_vars[]= {
|
|||||||
{"Bytes_received", (char*) &bytes_received, SHOW_LONG},
|
{"Bytes_received", (char*) &bytes_received, SHOW_LONG},
|
||||||
{"Bytes_sent", (char*) &bytes_sent, SHOW_LONG},
|
{"Bytes_sent", (char*) &bytes_sent, SHOW_LONG},
|
||||||
{"Com_admin_commands", (char*) &com_other, SHOW_LONG},
|
{"Com_admin_commands", (char*) &com_other, SHOW_LONG},
|
||||||
{"Com_alter_table", (char*) (com_stat+(uint) SQLCOM_ALTER_TABLE),SHOW_LONG},
|
|
||||||
{"Com_alter_db", (char*) (com_stat+(uint) SQLCOM_ALTER_DB),SHOW_LONG},
|
{"Com_alter_db", (char*) (com_stat+(uint) SQLCOM_ALTER_DB),SHOW_LONG},
|
||||||
|
{"Com_alter_table", (char*) (com_stat+(uint) SQLCOM_ALTER_TABLE),SHOW_LONG},
|
||||||
{"Com_analyze", (char*) (com_stat+(uint) SQLCOM_ANALYZE),SHOW_LONG},
|
{"Com_analyze", (char*) (com_stat+(uint) SQLCOM_ANALYZE),SHOW_LONG},
|
||||||
{"Com_backup_table", (char*) (com_stat+(uint) SQLCOM_BACKUP_TABLE),SHOW_LONG},
|
{"Com_backup_table", (char*) (com_stat+(uint) SQLCOM_BACKUP_TABLE),SHOW_LONG},
|
||||||
{"Com_begin", (char*) (com_stat+(uint) SQLCOM_BEGIN),SHOW_LONG},
|
{"Com_begin", (char*) (com_stat+(uint) SQLCOM_BEGIN),SHOW_LONG},
|
||||||
{"Com_change_db", (char*) (com_stat+(uint) SQLCOM_CHANGE_DB),SHOW_LONG},
|
{"Com_change_db", (char*) (com_stat+(uint) SQLCOM_CHANGE_DB),SHOW_LONG},
|
||||||
{"Com_change_master", (char*) (com_stat+(uint) SQLCOM_CHANGE_MASTER),SHOW_LONG},
|
{"Com_change_master", (char*) (com_stat+(uint) SQLCOM_CHANGE_MASTER),SHOW_LONG},
|
||||||
{"Com_check", (char*) (com_stat+(uint) SQLCOM_CHECK),SHOW_LONG},
|
{"Com_check", (char*) (com_stat+(uint) SQLCOM_CHECK),SHOW_LONG},
|
||||||
|
{"Com_checksum", (char*) (com_stat+(uint) SQLCOM_CHECKSUM),SHOW_LONG},
|
||||||
{"Com_commit", (char*) (com_stat+(uint) SQLCOM_COMMIT),SHOW_LONG},
|
{"Com_commit", (char*) (com_stat+(uint) SQLCOM_COMMIT),SHOW_LONG},
|
||||||
{"Com_create_db", (char*) (com_stat+(uint) SQLCOM_CREATE_DB),SHOW_LONG},
|
{"Com_create_db", (char*) (com_stat+(uint) SQLCOM_CREATE_DB),SHOW_LONG},
|
||||||
{"Com_create_function", (char*) (com_stat+(uint) SQLCOM_CREATE_FUNCTION),SHOW_LONG},
|
{"Com_create_function", (char*) (com_stat+(uint) SQLCOM_CREATE_FUNCTION),SHOW_LONG},
|
||||||
@ -4472,6 +4472,7 @@ struct show_var_st status_vars[]= {
|
|||||||
{"Com_drop_function", (char*) (com_stat+(uint) SQLCOM_DROP_FUNCTION),SHOW_LONG},
|
{"Com_drop_function", (char*) (com_stat+(uint) SQLCOM_DROP_FUNCTION),SHOW_LONG},
|
||||||
{"Com_drop_index", (char*) (com_stat+(uint) SQLCOM_DROP_INDEX),SHOW_LONG},
|
{"Com_drop_index", (char*) (com_stat+(uint) SQLCOM_DROP_INDEX),SHOW_LONG},
|
||||||
{"Com_drop_table", (char*) (com_stat+(uint) SQLCOM_DROP_TABLE),SHOW_LONG},
|
{"Com_drop_table", (char*) (com_stat+(uint) SQLCOM_DROP_TABLE),SHOW_LONG},
|
||||||
|
{"Com_drop_user", (char*) (com_stat+(uint) SQLCOM_DROP_USER),SHOW_LONG},
|
||||||
{"Com_flush", (char*) (com_stat+(uint) SQLCOM_FLUSH),SHOW_LONG},
|
{"Com_flush", (char*) (com_stat+(uint) SQLCOM_FLUSH),SHOW_LONG},
|
||||||
{"Com_grant", (char*) (com_stat+(uint) SQLCOM_GRANT),SHOW_LONG},
|
{"Com_grant", (char*) (com_stat+(uint) SQLCOM_GRANT),SHOW_LONG},
|
||||||
{"Com_ha_close", (char*) (com_stat+(uint) SQLCOM_HA_CLOSE),SHOW_LONG},
|
{"Com_ha_close", (char*) (com_stat+(uint) SQLCOM_HA_CLOSE),SHOW_LONG},
|
||||||
@ -4486,6 +4487,7 @@ struct show_var_st status_vars[]= {
|
|||||||
{"Com_load_master_table", (char*) (com_stat+(uint) SQLCOM_LOAD_MASTER_TABLE),SHOW_LONG},
|
{"Com_load_master_table", (char*) (com_stat+(uint) SQLCOM_LOAD_MASTER_TABLE),SHOW_LONG},
|
||||||
{"Com_lock_tables", (char*) (com_stat+(uint) SQLCOM_LOCK_TABLES),SHOW_LONG},
|
{"Com_lock_tables", (char*) (com_stat+(uint) SQLCOM_LOCK_TABLES),SHOW_LONG},
|
||||||
{"Com_optimize", (char*) (com_stat+(uint) SQLCOM_OPTIMIZE),SHOW_LONG},
|
{"Com_optimize", (char*) (com_stat+(uint) SQLCOM_OPTIMIZE),SHOW_LONG},
|
||||||
|
{"Com_preload_keys", (char*) (com_stat+(uint) SQLCOM_PRELOAD_KEYS),SHOW_LONG},
|
||||||
{"Com_purge", (char*) (com_stat+(uint) SQLCOM_PURGE),SHOW_LONG},
|
{"Com_purge", (char*) (com_stat+(uint) SQLCOM_PURGE),SHOW_LONG},
|
||||||
{"Com_purge_before_date", (char*) (com_stat+(uint) SQLCOM_PURGE_BEFORE),SHOW_LONG},
|
{"Com_purge_before_date", (char*) (com_stat+(uint) SQLCOM_PURGE_BEFORE),SHOW_LONG},
|
||||||
{"Com_rename_table", (char*) (com_stat+(uint) SQLCOM_RENAME_TABLE),SHOW_LONG},
|
{"Com_rename_table", (char*) (com_stat+(uint) SQLCOM_RENAME_TABLE),SHOW_LONG},
|
||||||
@ -4495,13 +4497,15 @@ struct show_var_st status_vars[]= {
|
|||||||
{"Com_reset", (char*) (com_stat+(uint) SQLCOM_RESET),SHOW_LONG},
|
{"Com_reset", (char*) (com_stat+(uint) SQLCOM_RESET),SHOW_LONG},
|
||||||
{"Com_restore_table", (char*) (com_stat+(uint) SQLCOM_RESTORE_TABLE),SHOW_LONG},
|
{"Com_restore_table", (char*) (com_stat+(uint) SQLCOM_RESTORE_TABLE),SHOW_LONG},
|
||||||
{"Com_revoke", (char*) (com_stat+(uint) SQLCOM_REVOKE),SHOW_LONG},
|
{"Com_revoke", (char*) (com_stat+(uint) SQLCOM_REVOKE),SHOW_LONG},
|
||||||
|
{"Com_revoke_all", (char*) (com_stat+(uint) SQLCOM_REVOKE_ALL),SHOW_LONG},
|
||||||
{"Com_rollback", (char*) (com_stat+(uint) SQLCOM_ROLLBACK),SHOW_LONG},
|
{"Com_rollback", (char*) (com_stat+(uint) SQLCOM_ROLLBACK),SHOW_LONG},
|
||||||
{"Com_savepoint", (char*) (com_stat+(uint) SQLCOM_SAVEPOINT),SHOW_LONG},
|
{"Com_savepoint", (char*) (com_stat+(uint) SQLCOM_SAVEPOINT),SHOW_LONG},
|
||||||
{"Com_select", (char*) (com_stat+(uint) SQLCOM_SELECT),SHOW_LONG},
|
{"Com_select", (char*) (com_stat+(uint) SQLCOM_SELECT),SHOW_LONG},
|
||||||
{"Com_set_option", (char*) (com_stat+(uint) SQLCOM_SET_OPTION),SHOW_LONG},
|
{"Com_set_option", (char*) (com_stat+(uint) SQLCOM_SET_OPTION),SHOW_LONG},
|
||||||
{"Com_show_binlog_events", (char*) (com_stat+(uint) SQLCOM_SHOW_BINLOG_EVENTS),SHOW_LONG},
|
|
||||||
{"Com_show_binlogs", (char*) (com_stat+(uint) SQLCOM_SHOW_BINLOGS),SHOW_LONG},
|
{"Com_show_binlogs", (char*) (com_stat+(uint) SQLCOM_SHOW_BINLOGS),SHOW_LONG},
|
||||||
|
{"Com_show_binlog_events", (char*) (com_stat+(uint) SQLCOM_SHOW_BINLOG_EVENTS),SHOW_LONG},
|
||||||
{"Com_show_charsets", (char*) (com_stat+(uint) SQLCOM_SHOW_CHARSETS),SHOW_LONG},
|
{"Com_show_charsets", (char*) (com_stat+(uint) SQLCOM_SHOW_CHARSETS),SHOW_LONG},
|
||||||
|
{"Com_show_collations", (char*) (com_stat+(uint) SQLCOM_SHOW_COLLATIONS),SHOW_LONG},
|
||||||
{"Com_show_column_types", (char*) (com_stat+(uint) SQLCOM_SHOW_COLUMN_TYPES),SHOW_LONG},
|
{"Com_show_column_types", (char*) (com_stat+(uint) SQLCOM_SHOW_COLUMN_TYPES),SHOW_LONG},
|
||||||
{"Com_show_create_table", (char*) (com_stat+(uint) SQLCOM_SHOW_CREATE),SHOW_LONG},
|
{"Com_show_create_table", (char*) (com_stat+(uint) SQLCOM_SHOW_CREATE),SHOW_LONG},
|
||||||
{"Com_show_create_db", (char*) (com_stat+(uint) SQLCOM_SHOW_CREATE_DB),SHOW_LONG},
|
{"Com_show_create_db", (char*) (com_stat+(uint) SQLCOM_SHOW_CREATE_DB),SHOW_LONG},
|
||||||
@ -4509,6 +4513,7 @@ struct show_var_st status_vars[]= {
|
|||||||
{"Com_show_errors", (char*) (com_stat+(uint) SQLCOM_SHOW_ERRORS),SHOW_LONG},
|
{"Com_show_errors", (char*) (com_stat+(uint) SQLCOM_SHOW_ERRORS),SHOW_LONG},
|
||||||
{"Com_show_fields", (char*) (com_stat+(uint) SQLCOM_SHOW_FIELDS),SHOW_LONG},
|
{"Com_show_fields", (char*) (com_stat+(uint) SQLCOM_SHOW_FIELDS),SHOW_LONG},
|
||||||
{"Com_show_grants", (char*) (com_stat+(uint) SQLCOM_SHOW_GRANTS),SHOW_LONG},
|
{"Com_show_grants", (char*) (com_stat+(uint) SQLCOM_SHOW_GRANTS),SHOW_LONG},
|
||||||
|
{"Com_show_innodb_status", (char*) (com_stat+(uint) SQLCOM_SHOW_INNODB_STATUS),SHOW_LONG},
|
||||||
{"Com_show_keys", (char*) (com_stat+(uint) SQLCOM_SHOW_KEYS),SHOW_LONG},
|
{"Com_show_keys", (char*) (com_stat+(uint) SQLCOM_SHOW_KEYS),SHOW_LONG},
|
||||||
{"Com_show_logs", (char*) (com_stat+(uint) SQLCOM_SHOW_LOGS),SHOW_LONG},
|
{"Com_show_logs", (char*) (com_stat+(uint) SQLCOM_SHOW_LOGS),SHOW_LONG},
|
||||||
{"Com_show_master_status", (char*) (com_stat+(uint) SQLCOM_SHOW_MASTER_STAT),SHOW_LONG},
|
{"Com_show_master_status", (char*) (com_stat+(uint) SQLCOM_SHOW_MASTER_STAT),SHOW_LONG},
|
||||||
@ -4519,7 +4524,6 @@ struct show_var_st status_vars[]= {
|
|||||||
{"Com_show_slave_hosts", (char*) (com_stat+(uint) SQLCOM_SHOW_SLAVE_HOSTS),SHOW_LONG},
|
{"Com_show_slave_hosts", (char*) (com_stat+(uint) SQLCOM_SHOW_SLAVE_HOSTS),SHOW_LONG},
|
||||||
{"Com_show_slave_status", (char*) (com_stat+(uint) SQLCOM_SHOW_SLAVE_STAT),SHOW_LONG},
|
{"Com_show_slave_status", (char*) (com_stat+(uint) SQLCOM_SHOW_SLAVE_STAT),SHOW_LONG},
|
||||||
{"Com_show_status", (char*) (com_stat+(uint) SQLCOM_SHOW_STATUS),SHOW_LONG},
|
{"Com_show_status", (char*) (com_stat+(uint) SQLCOM_SHOW_STATUS),SHOW_LONG},
|
||||||
{"Com_show_innodb_status", (char*) (com_stat+(uint) SQLCOM_SHOW_INNODB_STATUS),SHOW_LONG},
|
|
||||||
{"Com_show_tables", (char*) (com_stat+(uint) SQLCOM_SHOW_TABLES),SHOW_LONG},
|
{"Com_show_tables", (char*) (com_stat+(uint) SQLCOM_SHOW_TABLES),SHOW_LONG},
|
||||||
{"Com_show_table_types", (char*) (com_stat+(uint) SQLCOM_SHOW_TABLE_TYPES),SHOW_LONG},
|
{"Com_show_table_types", (char*) (com_stat+(uint) SQLCOM_SHOW_TABLE_TYPES),SHOW_LONG},
|
||||||
{"Com_show_variables", (char*) (com_stat+(uint) SQLCOM_SHOW_VARIABLES),SHOW_LONG},
|
{"Com_show_variables", (char*) (com_stat+(uint) SQLCOM_SHOW_VARIABLES),SHOW_LONG},
|
||||||
@ -4708,7 +4712,8 @@ static void mysql_init_variables(void)
|
|||||||
opt_log= opt_update_log= opt_bin_log= opt_slow_log= 0;
|
opt_log= opt_update_log= opt_bin_log= opt_slow_log= 0;
|
||||||
opt_disable_networking= opt_skip_show_db=0;
|
opt_disable_networking= opt_skip_show_db=0;
|
||||||
opt_logname= opt_update_logname= opt_binlog_index_name= opt_slow_logname=0;
|
opt_logname= opt_update_logname= opt_binlog_index_name= opt_slow_logname=0;
|
||||||
opt_bootstrap= opt_myisam_log= use_old_passwords= 0;
|
opt_secure_auth= 0;
|
||||||
|
opt_bootstrap= opt_myisam_log= 0;
|
||||||
mqh_used= 0;
|
mqh_used= 0;
|
||||||
segfaulted= kill_in_progress= 0;
|
segfaulted= kill_in_progress= 0;
|
||||||
cleanup_done= 0;
|
cleanup_done= 0;
|
||||||
@ -4787,8 +4792,9 @@ static void mysql_init_variables(void)
|
|||||||
master_user= (char*) "test";
|
master_user= (char*) "test";
|
||||||
master_password= master_host= 0;
|
master_password= master_host= 0;
|
||||||
master_info_file= (char*) "master.info",
|
master_info_file= (char*) "master.info",
|
||||||
relay_log_info_file= (char*) "relay-log.info",
|
relay_log_info_file= (char*) "relay-log.info";
|
||||||
master_ssl_key= master_ssl_cert= master_ssl_capath= master_ssl_cipher= 0;
|
master_ssl_key= master_ssl_cert= master_ssl_ca=
|
||||||
|
master_ssl_capath= master_ssl_cipher= 0;
|
||||||
report_user= report_password = report_host= 0; /* TO BE DELETED */
|
report_user= report_password = report_host= 0; /* TO BE DELETED */
|
||||||
opt_relay_logname= opt_relaylog_index_name= 0;
|
opt_relay_logname= opt_relaylog_index_name= 0;
|
||||||
|
|
||||||
@ -4811,6 +4817,7 @@ static void mysql_init_variables(void)
|
|||||||
max_system_variables.select_limit= (ulonglong) HA_POS_ERROR;
|
max_system_variables.select_limit= (ulonglong) HA_POS_ERROR;
|
||||||
global_system_variables.max_join_size= (ulonglong) HA_POS_ERROR;
|
global_system_variables.max_join_size= (ulonglong) HA_POS_ERROR;
|
||||||
max_system_variables.max_join_size= (ulonglong) HA_POS_ERROR;
|
max_system_variables.max_join_size= (ulonglong) HA_POS_ERROR;
|
||||||
|
global_system_variables.old_passwords= 0;
|
||||||
|
|
||||||
/* Variables that depends on compile options */
|
/* Variables that depends on compile options */
|
||||||
#ifndef DBUG_OFF
|
#ifndef DBUG_OFF
|
||||||
@ -4932,9 +4939,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
|||||||
case 'L':
|
case 'L':
|
||||||
strmake(language, argument, sizeof(language)-1);
|
strmake(language, argument, sizeof(language)-1);
|
||||||
break;
|
break;
|
||||||
case 'o':
|
|
||||||
protocol_version=PROTOCOL_VERSION-1;
|
|
||||||
break;
|
|
||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
case OPT_SLAVE_SKIP_ERRORS:
|
case OPT_SLAVE_SKIP_ERRORS:
|
||||||
init_slave_skip_errors(argument);
|
init_slave_skip_errors(argument);
|
||||||
|
936
sql/password.c
936
sql/password.c
File diff suppressed because it is too large
Load Diff
@ -349,10 +349,35 @@ send_eof(THD *thd, bool no_flush)
|
|||||||
}
|
}
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Please client to send scrambled_password in old format.
|
||||||
|
SYNOPSYS
|
||||||
|
send_old_password_request()
|
||||||
|
thd thread handle
|
||||||
|
|
||||||
|
RETURN VALUE
|
||||||
|
0 ok
|
||||||
|
!0 error
|
||||||
|
*/
|
||||||
|
|
||||||
|
bool send_old_password_request(THD *thd)
|
||||||
|
{
|
||||||
|
static char buff[1]= { (char) 254 };
|
||||||
|
NET *net= &thd->net;
|
||||||
|
return my_net_write(net, buff, 1) || net_flush(net);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* EMBEDDED_LIBRARY */
|
#endif /* EMBEDDED_LIBRARY */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Faster net_store_length when we know length is a 32 bit integer
|
Faster net_store_length when we know that length is less than 65536.
|
||||||
|
We keep a separate version for that range because it's widely used in
|
||||||
|
libmysql.
|
||||||
|
uint is used as agrument type because of MySQL type conventions:
|
||||||
|
uint for 0..65536
|
||||||
|
ulong for 0..4294967296
|
||||||
|
ulonglong for bigger numbers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
char *net_store_length(char *pkg, uint length)
|
char *net_store_length(char *pkg, uint length)
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user