mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge mysql.com:/home/jonas/src/mysql-5.0
into mysql.com:/home/jonas/src/mysql-5.0-ndb mysql-test/mysql-test-run.sh: Auto merged ndb/src/kernel/vm/FastScheduler.cpp: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/mysqld.cc: Auto merged
This commit is contained in:
@ -47,7 +47,7 @@ dist-hook:
|
||||
$(distdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/t/*.test $(srcdir)/t/*.opt $(srcdir)/t/*.sh $(srcdir)/t/*.slave-mi $(distdir)/t
|
||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(distdir)/include
|
||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.require $(distdir)/r
|
||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.result.es $(srcdir)/r/*.require $(distdir)/r
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/Moscow_leap $(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
|
||||
@ -65,7 +65,7 @@ install-data-local:
|
||||
$(INSTALL_DATA) $(srcdir)/t/*.opt $(DESTDIR)$(testdir)/t
|
||||
$(INSTALL_DATA) $(srcdir)/t/*.sh $(DESTDIR)$(testdir)/t
|
||||
$(INSTALL_DATA) $(srcdir)/t/*.slave-mi $(DESTDIR)$(testdir)/t
|
||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(DESTDIR)$(testdir)/r
|
||||
$(INSTALL_DATA) $(srcdir)/r/*.result $(srcdir)/r/*.result.es $(DESTDIR)$(testdir)/r
|
||||
$(INSTALL_DATA) $(srcdir)/r/*.require $(DESTDIR)$(testdir)/r
|
||||
$(INSTALL_DATA) $(srcdir)/include/*.inc $(DESTDIR)$(testdir)/include
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
|
||||
|
@ -96,6 +96,8 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
"PRIMARY KEY Host (Host,Db,User),"
|
||||
"KEY User (User))"
|
||||
"engine=MyISAM "
|
||||
"CHARACTER SET utf8 COLLATE utf8_bin "
|
||||
"comment='Database privileges';\n");
|
||||
|
||||
if (test)
|
||||
@ -126,10 +128,12 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
"Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL,"
|
||||
"PRIMARY KEY Host (Host,Db))"
|
||||
"comment='Host privileges;"
|
||||
" Merged with database privileges';\n");
|
||||
"engine=MyISAM "
|
||||
"CHARACTER SET utf8 COLLATE utf8_bin "
|
||||
"comment='Host privileges; Merged with database privileges';\n");
|
||||
}
|
||||
|
||||
|
||||
if (test_sys_file(mdata,"mysql/user.frm"))
|
||||
{
|
||||
#ifdef __WIN__
|
||||
@ -184,7 +188,10 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"max_updates int(11) unsigned DEFAULT 0 NOT NULL,"
|
||||
"max_connections int(11) unsigned DEFAULT 0 NOT NULL,"
|
||||
"PRIMARY KEY Host (Host,User)"
|
||||
") comment='Users and global privileges';\n");
|
||||
") engine=MyISAM "
|
||||
"CHARACTER SET utf8 COLLATE utf8_bin "
|
||||
"comment='Users and global privileges';\n");
|
||||
|
||||
|
||||
if (test)
|
||||
{
|
||||
@ -238,7 +245,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"dl char(128) DEFAULT '' NOT NULL,"
|
||||
"type enum ('function','aggregate') NOT NULL,"
|
||||
"PRIMARY KEY (name)"
|
||||
") comment='User defined functions';\n");
|
||||
") engine=MyISAM "
|
||||
"CHARACTER SET utf8 COLLATE utf8_bin "
|
||||
"comment='User defined functions';\n");
|
||||
}
|
||||
|
||||
if (test_sys_file(mdata,"mysql/tables_priv.frm"))
|
||||
@ -258,7 +267,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
" DEFAULT '' NOT NULL,"
|
||||
"PRIMARY KEY (Host,Db,User,Table_name),"
|
||||
"KEY Grantor (Grantor)"
|
||||
") comment='Table privileges';\n");
|
||||
") engine=MyISAM "
|
||||
"CHARACTER SET utf8 COLLATE utf8_bin "
|
||||
"comment='Table privileges';\n");
|
||||
}
|
||||
|
||||
if (test_sys_file(mdata,"mysql/columns_priv.frm"))
|
||||
@ -274,7 +285,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"Column_priv set('Select','Insert','Update','References')"
|
||||
" DEFAULT '' NOT NULL,"
|
||||
"PRIMARY KEY (Host,Db,User,Table_name,Column_name)"
|
||||
") comment='Column privileges';\n");
|
||||
") engine=MyISAM "
|
||||
"CHARACTER SET utf8 COLLATE utf8_bin "
|
||||
"comment='Column privileges';\n");
|
||||
}
|
||||
|
||||
if (test_sys_file(mdata,"mysql/help_topic.frm"))
|
||||
@ -289,7 +302,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"url varchar(128) not null,"
|
||||
"primary key (help_topic_id),"
|
||||
"unique index (name)"
|
||||
") comment='help topics';\n");
|
||||
") engine=MyISAM "
|
||||
"CHARACTER SET utf8 "
|
||||
"comment='help topics';\n");
|
||||
}
|
||||
|
||||
if (test_sys_file(mdata,"mysql/help_category.frm"))
|
||||
@ -302,7 +317,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"url varchar(128) not null,"
|
||||
"primary key (help_category_id),"
|
||||
"unique index (name)"
|
||||
") comment='help categories';\n");
|
||||
") engine=MyISAM "
|
||||
"CHARACTER SET utf8 "
|
||||
"comment='help categories';\n");
|
||||
}
|
||||
|
||||
if (test_sys_file(mdata,"mysql/help_keyword.frm"))
|
||||
@ -313,7 +330,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"name varchar(64) not null,"
|
||||
"primary key (help_keyword_id),"
|
||||
"unique index (name)"
|
||||
") comment='help keywords';\n");
|
||||
") engine=MyISAM "
|
||||
"CHARACTER SET utf8 "
|
||||
"comment='help keywords';\n");
|
||||
}
|
||||
|
||||
if (test_sys_file(mdata,"mysql/help_relation.frm"))
|
||||
@ -323,7 +342,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"help_topic_id int unsigned not null references help_topic,"
|
||||
"help_keyword_id int unsigned not null references help_keyword,"
|
||||
"primary key (help_keyword_id, help_topic_id)"
|
||||
") comment='keyword-topic relation';\n");
|
||||
") engine=MyISAM "
|
||||
"CHARACTER SET utf8 "
|
||||
"comment='keyword-topic relation';\n");
|
||||
}
|
||||
|
||||
if (test_sys_file(mdata,"mysql/time_zone_name.frm"))
|
||||
@ -333,7 +354,7 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"Name char(64) NOT NULL,"
|
||||
"Time_zone_id int unsigned NOT NULL,"
|
||||
"PRIMARY KEY Name (Name)"
|
||||
") DEFAULT CHARACTER SET latin1 "
|
||||
") engine=MyISAM CHARACTER SET utf8 "
|
||||
"comment='Time zone names';\n");
|
||||
|
||||
if (test)
|
||||
@ -341,7 +362,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
fprintf(out,
|
||||
"INSERT INTO time_zone_name (Name, Time_Zone_id) VALUES"
|
||||
"('MET', 1), ('UTC', 2), ('Universal', 2), "
|
||||
"('Europe/Moscow',3), ('leap/Europe/Moscow',4);\n");
|
||||
"('Europe/Moscow',3), ('leap/Europe/Moscow',4),"
|
||||
"('Japan', 5);\n");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -353,13 +376,13 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"Time_zone_id int unsigned NOT NULL auto_increment,"
|
||||
"Use_leap_seconds enum('Y','N') DEFAULT 'N' NOT NULL,"
|
||||
"PRIMARY KEY TzId (Time_zone_id)"
|
||||
") DEFAULT CHARACTER SET latin1 "
|
||||
") engine=MyISAM CHARACTER SET utf8 "
|
||||
"comment='Time zones';\n");
|
||||
|
||||
if (test)
|
||||
{
|
||||
fprintf(out,"INSERT INTO time_zone (Time_zone_id, Use_leap_seconds)"
|
||||
"VALUES (1,'N'), (2,'N'), (3,'N'), (4,'Y');\n");
|
||||
"VALUES (1,'N'), (2,'N'), (3,'N'), (4,'Y'), (5,'N');\n");
|
||||
}
|
||||
}
|
||||
|
||||
@ -371,7 +394,7 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"Transition_time bigint signed NOT NULL,"
|
||||
"Transition_type_id int unsigned NOT NULL,"
|
||||
"PRIMARY KEY TzIdTranTime (Time_zone_id, Transition_time)"
|
||||
") DEFAULT CHARACTER SET latin1 "
|
||||
") engine=MyISAM CHARACTER SET utf8 "
|
||||
"comment='Time zone transitions';\n");
|
||||
|
||||
if (test)
|
||||
@ -576,7 +599,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
",(4, 2045689222, 8) ,(4, 2058390022, 9)"
|
||||
",(4, 2077138822, 8) ,(4, 2090444422, 9)"
|
||||
",(4, 2108588422, 8) ,(4, 2121894022, 9)"
|
||||
",(4, 2140038022, 8);\n");
|
||||
",(4, 2140038022, 8), (5, -1009875600, 1);\n");
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -590,7 +615,7 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"Is_DST tinyint unsigned DEFAULT 0 NOT NULL,"
|
||||
"Abbreviation char(8) DEFAULT '' NOT NULL,"
|
||||
"PRIMARY KEY TzIdTrTId (Time_zone_id, Transition_type_id)"
|
||||
") DEFAULT CHARACTER SET latin1 "
|
||||
") engine=MyISAM CHARACTER SET utf8 "
|
||||
"comment='Time zone transition types';\n");
|
||||
|
||||
if (test)
|
||||
@ -612,7 +637,9 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
",(4, 4, 10800, 0, 'MSK') ,(4, 5, 14400, 1, 'MSD')"
|
||||
",(4, 6, 18000, 1, 'MSD') ,(4, 7, 7200, 0, 'EET')"
|
||||
",(4, 8, 10800, 0, 'MSK') ,(4, 9, 14400, 1, 'MSD')"
|
||||
",(4, 10, 10800, 1, 'EEST') ,(4, 11, 7200, 0, 'EET');\n");
|
||||
",(4, 10, 10800, 1, 'EEST') ,(4, 11, 7200, 0, 'EET')"
|
||||
",(5, 0, 32400, 0, 'CJT') ,(5, 1, 32400, 0, 'JST');\n");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -623,7 +650,7 @@ bool create_system_files(const char *mdata,const char *output_file, bool test)
|
||||
"Transition_time bigint signed NOT NULL,"
|
||||
"Correction int signed NOT NULL,"
|
||||
"PRIMARY KEY TranTime (Transition_time)"
|
||||
") DEFAULT CHARACTER SET latin1 "
|
||||
") engine=MyISAM CHARACTER SET utf8 "
|
||||
"comment='Leap seconds information for time zones';\n");
|
||||
|
||||
if (test)
|
||||
|
@ -122,7 +122,7 @@ void add_arg(arg_list_t *al, const char *format, ...)
|
||||
al->argv[al->argc]= malloc(strlen(temp)+1);
|
||||
ASSERT(al->argv[al->argc] != NULL);
|
||||
strcpy(al->argv[al->argc], temp);
|
||||
|
||||
|
||||
++(al->argc);
|
||||
}
|
||||
else
|
||||
@ -644,7 +644,7 @@ void del_tree(char *dir)
|
||||
if (lstat(entry->d_name, &st) == -1)
|
||||
{
|
||||
/* FIXME error */
|
||||
return;
|
||||
return;
|
||||
}
|
||||
if (S_ISDIR(st.st_mode))
|
||||
#else
|
||||
@ -800,9 +800,12 @@ int removef(const char *format, ...)
|
||||
#ifndef STRUCT_DIRENT_HAS_D_TYPE
|
||||
struct stat st;
|
||||
|
||||
if (lstat(entry->d_name, &st) == -1)
|
||||
/* create long name */
|
||||
snprintf(temp, FN_REFLEN, "%s/%s", path, entry->d_name);
|
||||
|
||||
if (lstat(temp, &st) == -1)
|
||||
{
|
||||
return 1;
|
||||
return 1; /* Error couldn't lstat file */
|
||||
}
|
||||
|
||||
if (!S_ISDIR(st.st_mode) && !fnmatch(p, entry->d_name,0))
|
||||
|
@ -441,7 +441,7 @@ while test $# -gt 0; do
|
||||
STRACE_CLIENT=1
|
||||
;;
|
||||
--debug)
|
||||
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT \
|
||||
EXTRA_MASTER_MYSQLD_TRACE=" \
|
||||
--debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/master.trace"
|
||||
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT \
|
||||
--debug=d:t:i:A,$MYSQL_TEST_DIR/var/log/slave.trace"
|
||||
@ -1149,6 +1149,10 @@ start_master()
|
||||
this_master_myport=$MASTER_MYPORT
|
||||
NOT_FIRST_MASTER_EXTRA_OPTS=""
|
||||
fi
|
||||
if [ -n "$EXTRA_MASTER_MYSQLD_TRACE" ]
|
||||
then
|
||||
CURR_MASTER_MYSQLD_TRACE="$EXTRA_MASTER_MYSQLD_TRACE$1"
|
||||
fi
|
||||
if [ -z "$DO_BENCH" ]
|
||||
then
|
||||
master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin$1 \
|
||||
@ -1172,7 +1176,7 @@ start_master()
|
||||
$MASTER_40_ARGS \
|
||||
$SMALL_SERVER \
|
||||
$EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT \
|
||||
$NOT_FIRST_MASTER_EXTRA_OPTS"
|
||||
$NOT_FIRST_MASTER_EXTRA_OPTS $CURR_MASTER_MYSQLD_TRACE"
|
||||
else
|
||||
master_args="--no-defaults --log-bin=$MYSQL_TEST_DIR/var/log/master-bin$1 \
|
||||
--server-id=$id --rpl-recovery-rank=1 \
|
||||
|
@ -132,7 +132,13 @@ static char skip_test[FN_REFLEN]=
|
||||
" repair ,"
|
||||
" rpl_trunc_binlog ,"
|
||||
" mysqldump ,"
|
||||
" rpl000001 ";
|
||||
" rpl000001 ,"
|
||||
|
||||
" derived ,"
|
||||
" group_by ,"
|
||||
" select ,"
|
||||
" rpl000015 ,"
|
||||
" subselect ";
|
||||
#endif
|
||||
static char ignore_test[FN_REFLEN]= "";
|
||||
|
||||
@ -143,6 +149,8 @@ static char mysql_tmp_dir[FN_REFLEN];
|
||||
static char result_dir[FN_REFLEN];
|
||||
static char master_dir[FN_REFLEN];
|
||||
static char slave_dir[FN_REFLEN];
|
||||
static char slave1_dir[FN_REFLEN];
|
||||
static char slave2_dir[FN_REFLEN];
|
||||
static char lang_dir[FN_REFLEN];
|
||||
static char char_dir[FN_REFLEN];
|
||||
|
||||
@ -190,6 +198,8 @@ int restarts= 0;
|
||||
|
||||
FILE *log_fd= NULL;
|
||||
|
||||
static char argument[FN_REFLEN];
|
||||
|
||||
/******************************************************************************
|
||||
|
||||
functions
|
||||
@ -221,7 +231,7 @@ void log_info(const char *, ...);
|
||||
void log_error(const char *, ...);
|
||||
void log_errno(const char *, ...);
|
||||
void die(const char *);
|
||||
char *str_tok(char *string, const char *delim);
|
||||
char *str_tok(char* dest, char *string, const char *delim);
|
||||
#ifndef __WIN__
|
||||
void run_init_script(const char *script_name);
|
||||
#endif
|
||||
@ -289,11 +299,15 @@ void install_db(char *datadir)
|
||||
add_arg(&al, "--basedir=%s", base_dir);
|
||||
add_arg(&al, "--datadir=%s", datadir);
|
||||
add_arg(&al, "--skip-innodb");
|
||||
add_arg(&al, "--skip-ndbcluster");
|
||||
add_arg(&al, "--skip-bdb");
|
||||
#ifndef __NETWARE__
|
||||
add_arg(&al, "--character-sets-dir=%s", char_dir);
|
||||
add_arg(&al, "--language=%s", lang_dir);
|
||||
#endif
|
||||
// added
|
||||
add_arg(&al, "--default-character-set=latin1");
|
||||
add_arg(&al, "--innodb_data_file_path=ibdata1:50M");
|
||||
|
||||
/* spawn */
|
||||
if ((err= spawn(mysqld_file, &al, TRUE, input, output, error, NULL)) != 0)
|
||||
@ -335,12 +349,27 @@ void mysql_install_db()
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/master-data/test", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave-data", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave-data/mysql", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave-data/test", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave1-data", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave1-data/mysql", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave1-data/test", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave2-data", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave2-data/mysql", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave2-data/test", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
#else
|
||||
mkdir(temp);
|
||||
/* create subdirectories */
|
||||
@ -368,6 +397,8 @@ void mysql_install_db()
|
||||
install_db(master_dir);
|
||||
mlog("Creating test databases for slave... \n");
|
||||
install_db(slave_dir);
|
||||
install_db(slave1_dir);
|
||||
install_db(slave2_dir);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
@ -384,7 +415,6 @@ void start_master()
|
||||
int err;
|
||||
char master_out[FN_REFLEN];
|
||||
char master_err[FN_REFLEN];
|
||||
/* char temp[FN_REFLEN]; */
|
||||
char temp2[FN_REFLEN];
|
||||
|
||||
/* remove old berkeley db log files that can confuse the server */
|
||||
@ -463,6 +493,11 @@ void start_master()
|
||||
add_arg(&al, "--character-sets-dir=%s", char_dir);
|
||||
add_arg(&al, "--tmpdir=%s", mysql_tmp_dir);
|
||||
add_arg(&al, "--language=%s", lang_dir);
|
||||
|
||||
add_arg(&al, "--rpl-recovery-rank=1");
|
||||
add_arg(&al, "--init-rpl-role=master");
|
||||
add_arg(&al, "--default-character-set=latin1");
|
||||
// add_arg(&al, "--innodb_data_file_path=ibdata1:50M");
|
||||
#ifdef DEBUG /* only for debug builds */
|
||||
add_arg(&al, "--debug");
|
||||
#endif
|
||||
@ -491,13 +526,13 @@ void start_master()
|
||||
{
|
||||
char *p;
|
||||
|
||||
p= (char *)str_tok(master_opt, " \t");
|
||||
p= (char *)str_tok(argument, master_opt, " \t");
|
||||
if (!strstr(master_opt, "timezone"))
|
||||
{
|
||||
while (p)
|
||||
{
|
||||
add_arg(&al, "%s", p);
|
||||
p= (char *)str_tok(NULL, " \t");
|
||||
p= (char *)str_tok(argument, NULL, " \t");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -624,10 +659,10 @@ void start_slave()
|
||||
add_arg(&al, "--log-bin=slave-bin");
|
||||
add_arg(&al, "--relay_log=slave-relay-bin");
|
||||
add_arg(&al, "--basedir=%s", base_dir);
|
||||
add_arg(&al, "--port=%u", slave_port);
|
||||
#if !defined(__NETWARE__) && !defined(__WIN__)
|
||||
add_arg(&al, "--socket=%s",slave_socket);
|
||||
#endif
|
||||
add_arg(&al, "--port=%u", slave_port);
|
||||
add_arg(&al, "--datadir=%s", slave_dir);
|
||||
#ifndef __WIN__
|
||||
add_arg(&al, "--pid-file=%s", slave_pid);
|
||||
@ -651,10 +686,15 @@ void start_slave()
|
||||
add_arg(&al, "--master-retry-count=10");
|
||||
add_arg(&al, "-O");
|
||||
add_arg(&al, "slave_net_timeout=10");
|
||||
add_arg(&al, "--log-slave-updates");
|
||||
add_arg(&al, "--log=%s/var/log/slave.log", mysql_test_dir);
|
||||
add_arg(&al, "--default-character-set=latin1");
|
||||
add_arg(&al, "--skip-ndbcluster");
|
||||
|
||||
#ifdef DEBUG /* only for debug builds */
|
||||
add_arg(&al, "--debug");
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
if (use_openssl)
|
||||
{
|
||||
add_arg(&al, "--ssl-ca=%s", ca_cert);
|
||||
@ -667,12 +707,12 @@ void start_slave()
|
||||
{
|
||||
char *p;
|
||||
|
||||
p= (char *)str_tok(slave_master_info, " \t");
|
||||
p= (char *)str_tok(argument, slave_master_info, " \t");
|
||||
|
||||
while (p)
|
||||
{
|
||||
add_arg(&al, "%s", p);
|
||||
p= (char *)str_tok(NULL, " \t");
|
||||
p= (char *)str_tok(argument, NULL, " \t");
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -700,13 +740,13 @@ void start_slave()
|
||||
{
|
||||
char *p;
|
||||
|
||||
p= (char *)str_tok(slave_opt, " \t");
|
||||
p= (char *)str_tok(argument, slave_opt, " \t");
|
||||
|
||||
while (p)
|
||||
{
|
||||
add_arg(&al, "%s", p);
|
||||
p= (char *)str_tok(NULL, " \t");
|
||||
}
|
||||
p= (char *)str_tok(argument, NULL, " \t");
|
||||
}
|
||||
}
|
||||
|
||||
/* remove the pid file if it exists */
|
||||
@ -753,9 +793,12 @@ void start_slave()
|
||||
|
||||
void mysql_start()
|
||||
{
|
||||
/* log_info("Starting the MySQL server(s): %u", ++restarts); */
|
||||
|
||||
|
||||
printf("loading master...\r");
|
||||
start_master();
|
||||
|
||||
printf("loading slave...\r");
|
||||
start_slave();
|
||||
|
||||
/* activate the test screen */
|
||||
@ -853,6 +896,7 @@ void mysql_restart()
|
||||
mysql_stop();
|
||||
|
||||
mlog(DASH);
|
||||
sleep(1);
|
||||
|
||||
mysql_start();
|
||||
}
|
||||
@ -912,7 +956,7 @@ int read_option(char *opt_file, char *opt)
|
||||
if ((p= strstr(opt, "\\\\")) != NULL)
|
||||
{
|
||||
/* bmove is guranteed to work byte by byte */
|
||||
bmove(p, p+1, strlen(p+1));
|
||||
bmove(p, p+1, strlen(p)+1);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -977,14 +1021,6 @@ void run_test(char *test)
|
||||
char err_file[FN_REFLEN];
|
||||
int err;
|
||||
arg_list_t al;
|
||||
#ifdef __WIN__
|
||||
/* Clean test database */
|
||||
removef("%s/test/*.*", master_dir);
|
||||
removef("%s/test/*.*", slave_dir);
|
||||
removef("%s/mysqltest/*.*", master_dir);
|
||||
removef("%s/mysqltest/*.*", slave_dir);
|
||||
|
||||
#endif
|
||||
/* skip slave? */
|
||||
flag= skip_slave;
|
||||
skip_slave= (strncmp(test, "rpl", 3) != 0);
|
||||
@ -1045,9 +1081,6 @@ void run_test(char *test)
|
||||
if (!master_running) mysql_start();
|
||||
else if (restart) mysql_restart();
|
||||
|
||||
/* let the system stabalize */
|
||||
sleep(1);
|
||||
|
||||
/* show test */
|
||||
mlog("%-46s ", test);
|
||||
|
||||
@ -1066,10 +1099,12 @@ void run_test(char *test)
|
||||
add_arg(&al, "--silent");
|
||||
add_arg(&al, "--basedir=%s/", mysql_test_dir);
|
||||
add_arg(&al, "--host=127.0.0.1");
|
||||
add_arg(&al, "--skip-safemalloc");
|
||||
add_arg(&al, "-v");
|
||||
add_arg(&al, "-R");
|
||||
add_arg(&al, "%s", result_file);
|
||||
|
||||
|
||||
|
||||
if (use_openssl)
|
||||
{
|
||||
add_arg(&al, "--ssl-ca=%s", ca_cert);
|
||||
@ -1079,7 +1114,6 @@ void run_test(char *test)
|
||||
|
||||
/* spawn */
|
||||
err= spawn(mysqltest_file, &al, TRUE, test_file, out_file, err_file, NULL);
|
||||
|
||||
/* free args */
|
||||
free_args(&al);
|
||||
|
||||
@ -1259,7 +1293,9 @@ void die(const char *msg)
|
||||
void setup(char *file __attribute__((unused)))
|
||||
{
|
||||
char temp[FN_REFLEN];
|
||||
#if defined(__WIN__) || defined(__NETWARE__)
|
||||
char file_path[FN_REFLEN*2];
|
||||
#endif
|
||||
char *p;
|
||||
int position;
|
||||
|
||||
@ -1349,7 +1385,11 @@ void setup(char *file __attribute__((unused)))
|
||||
snprintf(client_key, FN_REFLEN, "%s/SSL/client-key.pem", base_dir);
|
||||
|
||||
/* setup files */
|
||||
#ifdef _DEBUG
|
||||
snprintf(mysqld_file, FN_REFLEN, "%s/mysqld-debug.exe", bin_dir);
|
||||
#else
|
||||
snprintf(mysqld_file, FN_REFLEN, "%s/mysqld.exe", bin_dir);
|
||||
#endif
|
||||
snprintf(mysqltest_file, FN_REFLEN, "%s/mysqltest.exe", bin_dir);
|
||||
snprintf(mysqladmin_file, FN_REFLEN, "%s/mysqladmin.exe", bin_dir);
|
||||
#else
|
||||
@ -1361,6 +1401,8 @@ void setup(char *file __attribute__((unused)))
|
||||
snprintf(result_dir, FN_REFLEN, "%s/r", mysql_test_dir);
|
||||
snprintf(master_dir, FN_REFLEN, "%s/var/master-data", mysql_test_dir);
|
||||
snprintf(slave_dir, FN_REFLEN, "%s/var/slave-data", mysql_test_dir);
|
||||
snprintf(slave1_dir, FN_REFLEN, "%s/var/slave1-data", mysql_test_dir);
|
||||
snprintf(slave2_dir, FN_REFLEN, "%s/var/slave2-data", mysql_test_dir);
|
||||
snprintf(lang_dir, FN_REFLEN, "%s/sql/share/english", base_dir);
|
||||
snprintf(char_dir, FN_REFLEN, "%s/sql/share/charsets", base_dir);
|
||||
|
||||
@ -1413,30 +1455,147 @@ void setup(char *file __attribute__((unused)))
|
||||
snprintf(file_path,FN_REFLEN,"MYSQL_TEST_DIR=%s",mysql_test_dir);
|
||||
_putenv(file_path);
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL_DUMP=%s/mysqldump.exe --no-defaults -u root --port=%u",
|
||||
"MYSQL_DUMP=%s/mysqldump.exe --no-defaults -uroot --port=%u",
|
||||
bin_dir, master_port);
|
||||
_putenv(file_path);
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL_BINLOG=%s/mysqlbinlog.exe --no-defaults --local-load=%s",
|
||||
"MYSQL_BINLOG=%s/mysqlbinlog.exe --no-defaults --local-load=%s",
|
||||
bin_dir, mysql_tmp_dir);
|
||||
_putenv(file_path);
|
||||
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"TESTS_BINDIR=%s/tests", base_dir);
|
||||
_putenv(file_path);
|
||||
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"CHARSETSDIR=%s/sql/share/charsets", base_dir);
|
||||
_putenv(file_path);
|
||||
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL=%s/mysql --port=%u ",
|
||||
bin_dir, master_port);
|
||||
_putenv(file_path);
|
||||
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL_FIX_SYSTEM_TABLES=%s/scripts/mysql_fix_privilege_tables --no-defaults "
|
||||
"--host=localhost --port=%u "
|
||||
"--basedir=%s --bindir=%s --verbose",
|
||||
base_dir,master_port, base_dir, bin_dir);
|
||||
_putenv(file_path);
|
||||
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"NDB_TOOLS_DIR=%s/ndb/tools", base_dir);
|
||||
_putenv(file_path);
|
||||
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"CLIENT_BINDIR=%s", bin_dir);
|
||||
_putenv(file_path);
|
||||
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL_CLIENT_TEST=%s/tests/mysql_client_test --no-defaults --testcase "
|
||||
"--user=root --port=%u --silent",
|
||||
base_dir, master_port);
|
||||
_putenv(file_path);
|
||||
|
||||
#else
|
||||
snprintf(file_path,FN_REFLEN,"MYSQL_TEST_DIR=%s",mysql_test_dir);
|
||||
putenv(file_path);
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL_DUMP=%s/mysqldump --no-defaults -u root --port=%u --socket=%s",
|
||||
bin_dir, master_port, master_socket);
|
||||
putenv(file_path);
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL_BINLOG=%s/mysqlbinlog --no-defaults --local-load=%s",
|
||||
bin_dir, mysql_tmp_dir);
|
||||
putenv(file_path);
|
||||
{
|
||||
static char env_MYSQL_TEST_DIR[FN_REFLEN*2];
|
||||
static char env_MYSQL_DUMP[FN_REFLEN*2];
|
||||
static char env_MYSQL_BINLOG[FN_REFLEN*2];
|
||||
static char env_MASTER_MYSOCK[FN_REFLEN*2];
|
||||
static char env_TESTS_BINDIR[FN_REFLEN*2];
|
||||
static char env_CHARSETSDIR[FN_REFLEN*2];
|
||||
static char env_MYSQL[FN_REFLEN*2];
|
||||
static char env_MYSQL_FIX_SYSTEM_TABLES[FN_REFLEN*2];
|
||||
static char env_CLIENT_BINDIR[FN_REFLEN*2];
|
||||
static char env_MYSQL_CLIENT_TEST[FN_REFLEN*2];
|
||||
static char env_NDB_TOOLS_DIR[FN_REFLEN*2];
|
||||
static char env_NDB_MGM[FN_REFLEN*2];
|
||||
static char env_NDB_BACKUP_DIR[FN_REFLEN*2];
|
||||
static char env_NDB_TOOLS_OUTPUT[FN_REFLEN*2];
|
||||
|
||||
snprintf(env_MYSQL_TEST_DIR,FN_REFLEN*2,
|
||||
"MYSQL_TEST_DIR=%s",mysql_test_dir);
|
||||
putenv(env_MYSQL_TEST_DIR);
|
||||
|
||||
snprintf(env_MYSQL_DUMP, FN_REFLEN*2,"MYSQL_DUMP=%s/mysqldump --no-defaults "
|
||||
"-uroot --port=%u --socket=%s ",
|
||||
bin_dir, master_port, master_socket);
|
||||
putenv(env_MYSQL_DUMP);
|
||||
|
||||
snprintf(env_MYSQL_BINLOG, FN_REFLEN*2,
|
||||
"MYSQL_BINLOG=%s/mysqlbinlog --no-defaults --local-load=%s -uroot ",
|
||||
bin_dir, mysql_tmp_dir);
|
||||
putenv(env_MYSQL_BINLOG);
|
||||
|
||||
snprintf(env_MASTER_MYSOCK, FN_REFLEN*2,
|
||||
"MASTER_MYSOCK=%s", master_socket);
|
||||
putenv(env_MASTER_MYSOCK);
|
||||
|
||||
snprintf(env_TESTS_BINDIR, FN_REFLEN*2,
|
||||
"TESTS_BINDIR=%s/tests", base_dir);
|
||||
putenv(env_TESTS_BINDIR);
|
||||
|
||||
snprintf(env_CHARSETSDIR, FN_REFLEN*2,
|
||||
"CHARSETSDIR=%s/sql/share/charsets", base_dir);
|
||||
putenv(env_CHARSETSDIR);
|
||||
|
||||
snprintf(env_MYSQL, FN_REFLEN*2,
|
||||
"MYSQL=%s/mysql --port=%u --socket=%s -uroot ",
|
||||
bin_dir, master_port, master_socket);
|
||||
putenv(env_MYSQL);
|
||||
|
||||
snprintf(env_MYSQL_FIX_SYSTEM_TABLES, FN_REFLEN*2,
|
||||
"MYSQL_FIX_SYSTEM_TABLES=%s/scripts/mysql_fix_privilege_tables --no-defaults "
|
||||
"--host=localhost --port=%u --socket=%s "
|
||||
"--basedir=%s --bindir=%s --verbose -uroot ",
|
||||
base_dir,master_port, master_socket, base_dir, bin_dir);
|
||||
putenv(env_MYSQL_FIX_SYSTEM_TABLES);
|
||||
|
||||
|
||||
snprintf(env_CLIENT_BINDIR, FN_REFLEN*2,
|
||||
"CLIENT_BINDIR=%s", bin_dir);
|
||||
putenv(env_CLIENT_BINDIR);
|
||||
|
||||
snprintf(env_MYSQL_CLIENT_TEST, FN_REFLEN*2,
|
||||
"MYSQL_CLIENT_TEST=%s/tests/mysql_client_test --no-defaults --testcase "
|
||||
"--user=root --socket=%s --port=%u --silent",
|
||||
base_dir, master_socket, master_port);
|
||||
putenv(env_MYSQL_CLIENT_TEST);
|
||||
|
||||
// NDB
|
||||
|
||||
snprintf(env_NDB_TOOLS_DIR, FN_REFLEN*2,
|
||||
"NDB_TOOLS_DIR=%s/ndb/tools", base_dir);
|
||||
putenv(env_NDB_TOOLS_DIR);
|
||||
|
||||
snprintf(env_NDB_MGM, FN_REFLEN*2,
|
||||
"NDB_MGM=%s/ndb/src/mgmclient/ndb_mgm", base_dir);
|
||||
putenv(env_NDB_MGM);
|
||||
|
||||
//NDBCLUSTER_PORT=9350
|
||||
snprintf(env_NDB_BACKUP_DIR, FN_REFLEN*2,
|
||||
"NDB_BACKUP_DIR=%s/var/ndbcluster-%i", mysql_test_dir, 9350);
|
||||
putenv(env_NDB_BACKUP_DIR);
|
||||
|
||||
snprintf(env_NDB_TOOLS_OUTPUT, FN_REFLEN*2,
|
||||
"NDB_TOOLS_OUTPUT=%s/var/log/ndb_tools.log", mysql_test_dir);
|
||||
putenv(env_NDB_TOOLS_OUTPUT);
|
||||
|
||||
putenv((char *)"NDB_STATUS_OK=1");
|
||||
|
||||
// NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm"
|
||||
// NDB_BACKUP_DIR=$MYSQL_TEST_DIR/var/ndbcluster-$NDBCLUSTER_PORT
|
||||
// NDB_TOOLS_OUTPUT=$MYSQL_TEST_DIR/var/log/ndb_tools.log
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef __WIN__
|
||||
putenv((char *)"MASTER_MYPORT=9306");
|
||||
putenv((char *)"SLAVE_MYPORT=9307");
|
||||
putenv((char *)"MYSQL_TCP_PORT=3306");
|
||||
|
||||
#else
|
||||
_putenv("MASTER_MYPORT=9306");
|
||||
_putenv("SLAVE_MYPORT=9307");
|
||||
@ -1468,8 +1627,13 @@ int main(int argc, char **argv)
|
||||
char **testes= 0;
|
||||
int name_index;
|
||||
int index;
|
||||
char var_dir[FN_REFLEN];
|
||||
/* setup */
|
||||
setup(argv[0]);
|
||||
|
||||
/* delete all file in var */
|
||||
snprintf(var_dir,FN_REFLEN,"%s/var",mysql_test_dir);
|
||||
del_tree(var_dir);
|
||||
|
||||
/*
|
||||
The --ignore option is comma saperated list of test cases to skip and
|
||||
@ -1484,7 +1648,8 @@ int main(int argc, char **argv)
|
||||
{
|
||||
char *temp, *token;
|
||||
temp= strdup(strchr(argv[1],'=') + 1);
|
||||
for (token=str_tok(temp, ","); token != NULL; token=str_tok(NULL, ","))
|
||||
for (token=str_tok(argument, temp, ","); token != NULL;
|
||||
token=str_tok(argument, NULL, ","))
|
||||
{
|
||||
if (strlen(ignore_test) + strlen(token) + 2 <= FN_REFLEN-1)
|
||||
sprintf(ignore_test+strlen(ignore_test), " %s ", token);
|
||||
@ -1508,7 +1673,7 @@ int main(int argc, char **argv)
|
||||
|
||||
/* install test databases */
|
||||
mysql_install_db();
|
||||
|
||||
|
||||
mlog("Starting Tests...\n");
|
||||
|
||||
mlog("\n");
|
||||
@ -1671,105 +1836,70 @@ Arguments:
|
||||
Output:
|
||||
return the null terminated token of NULL.
|
||||
*/
|
||||
|
||||
char *str_tok(char *string, const char *delim)
|
||||
char *str_tok(char* dest, char *string, const char *delim)
|
||||
{
|
||||
char *token; /* current token received from strtok */
|
||||
char *qt_token; /* token delimeted by the matching pair of quote */
|
||||
/*
|
||||
if there are any quote chars found in the token then this variable
|
||||
will hold the concatenated string to return to the caller
|
||||
*/
|
||||
char *ptr_token=NULL;
|
||||
/* pointer to the quote character in the token from strtok */
|
||||
char *ptr_quote=NULL;
|
||||
char *token;
|
||||
char *ptr_end_token= NULL;
|
||||
char *ptr_quote= NULL;
|
||||
char *ptr_token= NULL;
|
||||
int count_quotes= 0;
|
||||
|
||||
/* See if the delimeter contains any quote character */
|
||||
*dest = '\0';
|
||||
if (strchr(delim,'\'') || strchr(delim,'\"'))
|
||||
return NULL;
|
||||
|
||||
/* repeate till we are getting some token from strtok */
|
||||
while ((token= (char*)strtok(string, delim) ) != NULL)
|
||||
token= (char*)strtok(string, delim);
|
||||
if (token)
|
||||
{
|
||||
/*
|
||||
make the input string NULL so that next time onward strtok can
|
||||
be called with NULL input string.
|
||||
*/
|
||||
string= NULL;
|
||||
/* We don't need to remove any quote character for Windows version */
|
||||
/* double quote is found */
|
||||
if (strchr(token,'\"'))
|
||||
{
|
||||
do
|
||||
{
|
||||
if (count_quotes & 1)
|
||||
{
|
||||
if (*dest == '\0')
|
||||
sprintf(dest,"%s", ptr_token);
|
||||
else
|
||||
sprintf(dest,"%s %s", dest, ptr_token);
|
||||
ptr_token= (char*)strtok(NULL, delim);
|
||||
if (!ptr_token)
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr_token= token;
|
||||
}
|
||||
if (ptr_quote = strchr(ptr_token,'\"'))
|
||||
{
|
||||
ptr_end_token= ptr_token + strlen(ptr_token);
|
||||
do
|
||||
{
|
||||
#ifndef __WIN__
|
||||
/* check if the current token contain double quote character*/
|
||||
if ((ptr_quote= (char*)strchr(token,'\"')) != NULL)
|
||||
{
|
||||
/*
|
||||
get the matching the matching double quote in the remaining
|
||||
input string
|
||||
*/
|
||||
qt_token= (char*)strtok(NULL,"\"");
|
||||
}
|
||||
/* check if the current token contain single quote character*/
|
||||
else if ((ptr_quote= (char*)strchr(token,'\'')) != NULL)
|
||||
{
|
||||
/*
|
||||
get the matching the matching single quote in the remaining
|
||||
input string
|
||||
*/
|
||||
qt_token= (char*)strtok(NULL,"\'");
|
||||
}
|
||||
bmove(ptr_quote, ptr_quote+1, ptr_end_token - ptr_quote);
|
||||
#endif
|
||||
/*
|
||||
if the current token does not contains any quote character then
|
||||
return to the caller.
|
||||
*/
|
||||
if (ptr_quote == NULL)
|
||||
{
|
||||
/*
|
||||
if there is any earlier token i.e. ptr_token then append the
|
||||
current token in it and return it else return the current
|
||||
token directly
|
||||
*/
|
||||
return ptr_token ? strcat(ptr_token,token) : token;
|
||||
}
|
||||
|
||||
/*
|
||||
remove the quote character i.e. make NULL so that the token will
|
||||
be devided in two part and later both part can be concatenated
|
||||
and hence quote will be removed
|
||||
*/
|
||||
*ptr_quote= 0;
|
||||
|
||||
/* check if ptr_token has been initialized or not */
|
||||
if (ptr_token == NULL)
|
||||
{
|
||||
/* initialize the ptr_token with current token */
|
||||
ptr_token= token;
|
||||
/* copy entire string between matching pair of quote*/
|
||||
sprintf(ptr_token+strlen(ptr_token),"%s %s", ptr_quote+1, qt_token);
|
||||
count_quotes++;
|
||||
} while (ptr_quote != NULL && (ptr_quote = strchr(ptr_quote+1,'\"')));
|
||||
}
|
||||
/* there are unpair quotes we have to search next quote*/
|
||||
} while (count_quotes & 1);
|
||||
if (ptr_token != NULL)
|
||||
{
|
||||
if (*dest == '\0')
|
||||
sprintf(dest,"%s", ptr_token);
|
||||
else
|
||||
sprintf(dest,"%s %s",dest,ptr_token);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
copy the current token and entire string between matching pair
|
||||
of quote
|
||||
*/
|
||||
if (qt_token == NULL)
|
||||
{
|
||||
sprintf(ptr_token+strlen(ptr_token),"%s%s", token, ptr_quote+1);
|
||||
}
|
||||
else
|
||||
{
|
||||
sprintf(ptr_token+strlen(ptr_token),"%s%s %s", token, ptr_quote+1,
|
||||
qt_token );
|
||||
}
|
||||
sprintf(dest,"%s",token);
|
||||
}
|
||||
}
|
||||
|
||||
/* return the concatenated token */
|
||||
return ptr_token;
|
||||
return token ? dest : NULL;
|
||||
}
|
||||
|
||||
#ifndef __WIN__
|
||||
|
||||
/*
|
||||
Synopsis:
|
||||
This function run scripts files on Linux and Netware
|
||||
|
@ -655,9 +655,9 @@ insert into t1 (a,b) values (1,2),(1,3),(2,5);
|
||||
select a, 0.1*0+1 r2, sum(1) r1 from t1 where a = 1 group by a having r1>1 and r2=1;
|
||||
a r2 r1
|
||||
1 1.0 2
|
||||
select a, rand()*0+1 r2, sum(1) r1 from t1 where a = 1 group by a having r1>1 and r2=1;
|
||||
select a, round(rand(100)*10) r2, sum(1) r1 from t1 where a = 1 group by a having r1>1 and r2<=2;
|
||||
a r2 r1
|
||||
1 1 2
|
||||
1 2 2
|
||||
select a,sum(b) from t1 where a=1 group by c;
|
||||
a sum(b)
|
||||
1 5
|
||||
|
@ -355,3 +355,13 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ref a a 44 const,const 6 Using where
|
||||
1 SIMPLE t1 ref heap_idx heap_idx 22 const 7 Using where
|
||||
drop table t1, t2, t3;
|
||||
create temporary table t1 ( a int, index (a) ) engine=memory;
|
||||
insert into t1 values (1),(2),(3),(4),(5);
|
||||
select a from t1 where a in (1,3);
|
||||
a
|
||||
1
|
||||
3
|
||||
explain select a from t1 where a in (1,3);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 5 NULL 2 Using where
|
||||
drop table t1;
|
||||
|
@ -2666,7 +2666,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 127
|
||||
@ -2717,7 +2716,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -128
|
||||
|
@ -2649,7 +2649,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 127
|
||||
@ -2700,7 +2699,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -128
|
||||
|
@ -2650,7 +2650,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 127
|
||||
@ -2701,7 +2700,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -128
|
||||
|
@ -2586,7 +2586,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 127
|
||||
@ -2637,7 +2636,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -128
|
||||
@ -5597,7 +5595,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 127
|
||||
@ -5648,7 +5645,6 @@ Warning 1264 Out of range value adjusted for column 'c4' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c5' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c6' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c7' at row 1
|
||||
Note 1265 Data truncated for column 'c12' at row 1
|
||||
Warning 1264 Out of range value adjusted for column 'c12' at row 1
|
||||
execute my_select ;
|
||||
c1 -128
|
||||
|
@ -1433,7 +1433,7 @@ Note 1003 (select `test`.`t1`.`s1` AS `s1` from `test`.`t1`)
|
||||
s1
|
||||
tttt
|
||||
drop table t1;
|
||||
create table t1 (s1 char(5) not null, index s1(s1));
|
||||
create table t1 (s1 char(5), index s1(s1));
|
||||
create table t2 (s1 char(5), index s1(s1));
|
||||
insert into t1 values ('a1'),('a2'),('a3');
|
||||
insert into t2 values ('a1'),('a2');
|
||||
@ -1459,25 +1459,25 @@ a2 1
|
||||
a3 1
|
||||
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2) from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL s1 5 NULL 3 Using index
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL)))) AS `s1 NOT IN (SELECT s1 FROM t2)` from `test`.`t1`
|
||||
explain extended select s1, s1 = ANY (SELECT s1 FROM t2) from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL s1 5 NULL 3 Using index
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL))) AS `s1 = ANY (SELECT s1 FROM t2)` from `test`.`t1`
|
||||
explain extended select s1, s1 <> ALL (SELECT s1 FROM t2) from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL s1 5 NULL 3 Using index
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL)))) AS `s1 <> ALL (SELECT s1 FROM t2)` from `test`.`t1`
|
||||
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2') from t1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY t1 index NULL s1 5 NULL 3 Using index
|
||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 1 Using index; Using where
|
||||
Warnings:
|
||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL where (`test`.`t2`.`s1` < _latin1'a2'))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from `test`.`t1`
|
||||
@ -2133,34 +2133,6 @@ SELECT DISTINCT Continent AS c FROM t1 WHERE Code <> SOME ( SELECT Code FROM t1
|
||||
c
|
||||
Oceania
|
||||
drop table t1;
|
||||
CREATE TABLE t1 ( f1 BIGINT );
|
||||
INSERT INTO t1 SET f1= NULL;
|
||||
INSERT INTO t1 SET f1= 1;
|
||||
CREATE TABLE t2 ( f1 BIGINT );
|
||||
SELECT f1 FROM t1
|
||||
WHERE f1 <> ALL ( SELECT f1 FROM t2 );
|
||||
f1
|
||||
NULL
|
||||
1
|
||||
INSERT INTO t2 VALUES (1), (2);
|
||||
SELECT f1 FROM t1
|
||||
WHERE f1 <> ALL ( SELECT f1 FROM t2 WHERE f1 > 2 );
|
||||
f1
|
||||
NULL
|
||||
1
|
||||
SELECT f1 FROM t1
|
||||
WHERE f1 <> ALL ( SELECT f1 FROM t2 WHERE f1 > 2
|
||||
UNION
|
||||
SELECT f1 FROM t2 WHERE f1 > 3);
|
||||
f1
|
||||
NULL
|
||||
1
|
||||
SELECT f1 FROM t1
|
||||
WHERE f1 <> ALL ( SELECT SUM(f1) AS sf1 FROM t2 HAVING sf1 > 10000);
|
||||
f1
|
||||
NULL
|
||||
1
|
||||
drop table t1,t2;
|
||||
create table t1 (a1 int);
|
||||
create table t2 (b1 int);
|
||||
select * from t1 where a2 > any(select b1 from t2);
|
||||
|
@ -113,8 +113,8 @@ select @a:=0;
|
||||
select @a, @a:=@a+count(*), count(*), @a from t1 group by i;
|
||||
@a @a:=@a+count(*) count(*) @a
|
||||
0 1 1 0
|
||||
0 3 2 0
|
||||
0 6 3 0
|
||||
0 2 2 0
|
||||
0 3 3 0
|
||||
select @a:=0;
|
||||
@a:=0
|
||||
0
|
||||
|
@ -480,7 +480,8 @@ drop table t1;
|
||||
create table t1 (a integer, b integer, c integer);
|
||||
insert into t1 (a,b) values (1,2),(1,3),(2,5);
|
||||
select a, 0.1*0+1 r2, sum(1) r1 from t1 where a = 1 group by a having r1>1 and r2=1;
|
||||
select a, rand()*0+1 r2, sum(1) r1 from t1 where a = 1 group by a having r1>1 and r2=1;
|
||||
# rand(100)*10 will be < 2 only for the first row (of 6)
|
||||
select a, round(rand(100)*10) r2, sum(1) r1 from t1 where a = 1 group by a having r1>1 and r2<=2;
|
||||
select a,sum(b) from t1 where a=1 group by c;
|
||||
select a*sum(b) from t1 where a=1 group by c;
|
||||
select sum(a)*sum(b) from t1 where a=1 group by c;
|
||||
|
@ -251,3 +251,9 @@ explain select * from t1 ignore key(btree_idx), t3 where t1.name='matt' and t3.a
|
||||
|
||||
drop table t1, t2, t3;
|
||||
|
||||
# Fix for BUG#8371: wrong rec_per_key value for hash index on temporary table
|
||||
create temporary table t1 ( a int, index (a) ) engine=memory;
|
||||
insert into t1 values (1),(2),(3),(4),(5);
|
||||
select a from t1 where a in (1,3);
|
||||
explain select a from t1 where a in (1,3);
|
||||
drop table t1;
|
||||
|
@ -329,7 +329,7 @@ prepare stmt4 from ' show engine bdb logs ';
|
||||
execute stmt4;
|
||||
--enable_result_log
|
||||
prepare stmt4 from ' show full processlist ';
|
||||
--replace_column 1 number 6 time
|
||||
--replace_column 1 number 6 time 3 localhost
|
||||
execute stmt4;
|
||||
prepare stmt4 from ' show grants for user ';
|
||||
--error 1295
|
||||
|
@ -894,7 +894,7 @@ drop table t1;
|
||||
#
|
||||
# IN optimisation test results
|
||||
#
|
||||
create table t1 (s1 char(5) not null, index s1(s1));
|
||||
create table t1 (s1 char(5), index s1(s1));
|
||||
create table t2 (s1 char(5), index s1(s1));
|
||||
insert into t1 values ('a1'),('a2'),('a3');
|
||||
insert into t2 values ('a1'),('a2');
|
||||
@ -1392,34 +1392,6 @@ INSERT INTO t1 VALUES ('UMI','United States Minor Outlying Islands','Oceania','M
|
||||
SELECT DISTINCT Continent AS c FROM t1 WHERE Code <> SOME ( SELECT Code FROM t1 WHERE Continent = c AND Population < 200);
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test cases for bug #7351:
|
||||
# quantified predicate with subquery returning empty result set
|
||||
#
|
||||
|
||||
CREATE TABLE t1 ( f1 BIGINT );
|
||||
INSERT INTO t1 SET f1= NULL;
|
||||
INSERT INTO t1 SET f1= 1;
|
||||
CREATE TABLE t2 ( f1 BIGINT );
|
||||
|
||||
SELECT f1 FROM t1
|
||||
WHERE f1 <> ALL ( SELECT f1 FROM t2 );
|
||||
|
||||
INSERT INTO t2 VALUES (1), (2);
|
||||
|
||||
SELECT f1 FROM t1
|
||||
WHERE f1 <> ALL ( SELECT f1 FROM t2 WHERE f1 > 2 );
|
||||
|
||||
SELECT f1 FROM t1
|
||||
WHERE f1 <> ALL ( SELECT f1 FROM t2 WHERE f1 > 2
|
||||
UNION
|
||||
SELECT f1 FROM t2 WHERE f1 > 3);
|
||||
|
||||
SELECT f1 FROM t1
|
||||
WHERE f1 <> ALL ( SELECT SUM(f1) AS sf1 FROM t2 HAVING sf1 > 10000);
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# Test for BUG#7885: Server crash when 'any' subselect compared to
|
||||
# non-existant field.
|
||||
|
Reference in New Issue
Block a user