mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge bk-internal:/home/bk/mysql-5.0
into serg.mylan:/usr/home/serg/Abk/mysql-5.0 BitKeeper/etc/ignore: auto-union configure.in: Auto merged dbug/dbug.c: Auto merged include/my_dbug.h: Auto merged include/my_sys.h: Auto merged sql/filesort.cc: Auto merged sql/ha_isam.cc: Auto merged sql/ha_isammrg.cc: Auto merged sql/ha_myisam.cc: Auto merged sql/ha_myisammrg.cc: Auto merged sql/sql_select.cc: Auto merged
This commit is contained in:
@@ -759,6 +759,7 @@ ndb/tools/ndb_drop_table
|
||||
ndb/tools/ndb_select_all
|
||||
ndb/tools/ndb_select_count
|
||||
ndb/tools/ndb_show_tables
|
||||
ndb/tools/ndb_test_platform
|
||||
ndb/tools/ndb_waiter
|
||||
pull.log
|
||||
regex/re
|
||||
|
@@ -156,6 +156,7 @@ nick@mysql.com
|
||||
nick@nick.leippe.com
|
||||
papa@gbichot.local
|
||||
patg@krsna.patg.net
|
||||
patg@patrick-galbraiths-computer.local
|
||||
paul@central.snake.net
|
||||
paul@ice.local
|
||||
paul@ice.snake.net
|
||||
@@ -203,6 +204,7 @@ tim@bitch.mysql.fi
|
||||
tim@black.box
|
||||
tim@hundin.mysql.fi
|
||||
tim@sand.box
|
||||
tim@siva.hindu.god
|
||||
tim@threads.polyesthetic.msg
|
||||
tim@white.box
|
||||
tim@work.mysql.com
|
||||
|
@@ -288,6 +288,10 @@ unless ($opt_skip_manual)
|
||||
system ("bk cat $opt_docdir/Docs/$file.texi > $target_dir/Docs/$file.texi") == 0
|
||||
or &abort("Could not update $file.texi in $target_dir/Docs/!");
|
||||
}
|
||||
system ("rm -f $target_dir/Docs/Images/Makefile*") == 0
|
||||
or &abort("Could not remove Makefiles in $target_dir/Docs/Images/!");
|
||||
system ("cp $opt_docdir/Docs/Images/*.* $target_dir/Docs/Images") == 0
|
||||
or &abort("Could not copy image files in $target_dir/Docs/Images/!");
|
||||
}
|
||||
|
||||
#
|
||||
|
@@ -9,7 +9,7 @@
|
||||
# If you know how to fix any of this more elegantly please mail
|
||||
# docs@mysql.com
|
||||
|
||||
TEXI2HTML_FLAGS = -iso -number
|
||||
TEXI2HTML_FLAGS = -iso -number -acc
|
||||
DVIPS = dvips
|
||||
MAKEINFO = @MAKEINFO@
|
||||
TEXINFO_TEX = Support/texinfo.tex
|
||||
@@ -24,6 +24,8 @@ BUILT_SOURCES = $(targets) manual_toc.html include.texi
|
||||
EXTRA_DIST = $(noinst_SCRIPTS) $(BUILT_SOURCES) mysqld_error.txt \
|
||||
INSTALL-BINARY reservedwords.texi internals.texi
|
||||
|
||||
SUBDIRS = Images
|
||||
|
||||
all: $(targets) txt_files
|
||||
|
||||
txt_files: ../INSTALL-SOURCE ../COPYING ../INSTALL-WIN-SOURCE ../EXCEPTIONS-CLIENT \
|
||||
|
@@ -1614,9 +1614,14 @@ AC_DEFUN([MYSQL_CHECK_NDB_OPTIONS], [
|
||||
--with-ndb-docs Include the NDB Cluster ndbapi and mgmapi documentation],
|
||||
[ndb_docs="$withval"],
|
||||
[ndb_docs=no])
|
||||
AC_ARG_WITH([ndb-port],
|
||||
[
|
||||
--with-ndb-port Port for NDB Cluster management server],
|
||||
[ndb_port="$withval"],
|
||||
[ndb_port="default"])
|
||||
AC_ARG_WITH([ndb-port-base],
|
||||
[
|
||||
--with-ndb-port-base Base port for NDB Cluster],
|
||||
--with-ndb-port-base Base port for NDB Cluster transporters],
|
||||
[ndb_port_base="$withval"],
|
||||
[ndb_port_base="default"])
|
||||
|
||||
|
@@ -229,7 +229,7 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname,
|
||||
|
||||
for (;;)
|
||||
{
|
||||
uint packet_len = my_net_read(net);
|
||||
ulong packet_len = my_net_read(net);
|
||||
if (packet_len == 0)
|
||||
{
|
||||
if (my_net_write(net, "", 0) || net_flush(net))
|
||||
@@ -251,7 +251,13 @@ int Load_log_processor::load_old_format_file(NET* net, const char*server_fname,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (my_write(file, (byte*) net->read_pos, packet_len,MYF(MY_WME|MY_NABP)))
|
||||
if (packet_len > UINT_MAX)
|
||||
{
|
||||
sql_print_error("Illegal length of packet read from net");
|
||||
return -1;
|
||||
}
|
||||
if (my_write(file, (byte*) net->read_pos,
|
||||
(uint) packet_len, MYF(MY_WME|MY_NABP)))
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -850,7 +856,15 @@ could be out of memory");
|
||||
*/
|
||||
int4store(buf, (uint32)start_position);
|
||||
int2store(buf + BIN_LOG_HEADER_SIZE, binlog_flags);
|
||||
logname_len = (uint) strlen(logname);
|
||||
|
||||
size_s tlen = strlen(logname);
|
||||
if (tlen > UINT_MAX)
|
||||
{
|
||||
fprintf(stderr,"Log name too long\n");
|
||||
error= 1;
|
||||
goto err;
|
||||
}
|
||||
logname_len = (uint) tlen;
|
||||
int4store(buf + 6, 0);
|
||||
memcpy(buf + 10, logname, logname_len);
|
||||
if (simple_command(mysql, COM_BINLOG_DUMP, buf, logname_len + 10, 1))
|
||||
|
@@ -37,7 +37,7 @@
|
||||
** 10 Jun 2003: SET NAMES and --no-set-names by Alexander Barkov
|
||||
*/
|
||||
|
||||
#define DUMP_VERSION "10.8"
|
||||
#define DUMP_VERSION "10.9"
|
||||
|
||||
#include <my_global.h>
|
||||
#include <my_sys.h>
|
||||
@@ -78,8 +78,8 @@ static my_bool verbose=0,tFlag=0,cFlag=0,dFlag=0,quick= 1, extended_insert= 1,
|
||||
lock_tables=1,ignore_errors=0,flush_logs=0,replace=0,
|
||||
ignore=0,opt_drop=1,opt_keywords=0,opt_lock=1,opt_compress=0,
|
||||
opt_delayed=0,create_options=1,opt_quoted=0,opt_databases=0,
|
||||
opt_alldbs=0,opt_create_db=0,opt_first_slave=0,opt_set_charset,
|
||||
opt_autocommit=0,opt_master_data,opt_disable_keys=1,opt_xml=0,
|
||||
opt_alldbs=0,opt_create_db=0,opt_lock_all_tables=0,opt_set_charset,
|
||||
opt_autocommit=0,opt_disable_keys=1,opt_xml=0,
|
||||
opt_delete_master_logs=0, tty_password=0,
|
||||
opt_single_transaction=0, opt_comments= 0, opt_compact= 0,
|
||||
opt_hex_blob=0;
|
||||
@@ -93,7 +93,9 @@ static char insert_pat[12 * 1024],*opt_password=0,*current_user=0,
|
||||
*err_ptr= 0;
|
||||
static char compatible_mode_normal_str[255];
|
||||
static ulong opt_compatible_mode= 0;
|
||||
static uint opt_mysql_port= 0, err_len= 0;
|
||||
#define MYSQL_OPT_MASTER_DATA_EFFECTIVE_SQL 1
|
||||
#define MYSQL_OPT_MASTER_DATA_COMMENTED_SQL 2
|
||||
static uint opt_mysql_port= 0, err_len= 0, opt_master_data;
|
||||
static my_string opt_mysql_unix_port=0;
|
||||
static int first_error=0;
|
||||
static DYNAMIC_STRING extended_row;
|
||||
@@ -150,6 +152,9 @@ static struct my_option my_long_options[] =
|
||||
{"character-sets-dir", OPT_CHARSETS_DIR,
|
||||
"Directory where character sets are.", (gptr*) &charsets_dir,
|
||||
(gptr*) &charsets_dir, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"comments", 'i', "Write additional information.",
|
||||
(gptr*) &opt_comments, (gptr*) &opt_comments, 0, GET_BOOL, NO_ARG,
|
||||
1, 0, 0, 0, 0, 0},
|
||||
{"compatible", OPT_COMPATIBLE,
|
||||
"Change the dump to be compatible with a given mode. By default tables are dumped in a format optimized for MySQL. Legal modes are: ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options, no_field_options. One can use several modes separated by commas. Note: Requires MySQL server version 4.1.0 or higher. This option is ignored with earlier server versions.",
|
||||
(gptr*) &opt_compatible_mode_str, (gptr*) &opt_compatible_mode_str, 0,
|
||||
@@ -185,8 +190,9 @@ static struct my_option my_long_options[] =
|
||||
(gptr*) &opt_delayed, (gptr*) &opt_delayed, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
||||
0, 0},
|
||||
{"delete-master-logs", OPT_DELETE_MASTER_LOGS,
|
||||
"Delete logs on master after backup. This automatically enables --first-slave.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
"Delete logs on master after backup. This automatically enables --master-data.",
|
||||
(gptr*) &opt_delete_master_logs, (gptr*) &opt_delete_master_logs, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"disable-keys", 'K',
|
||||
"'/*!40000 ALTER TABLE tb_name DISABLE KEYS */; and '/*!40000 ALTER TABLE tb_name ENABLE KEYS */; will be put in the output.", (gptr*) &opt_disable_keys,
|
||||
(gptr*) &opt_disable_keys, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
||||
@@ -205,13 +211,18 @@ static struct my_option my_long_options[] =
|
||||
(gptr*) &opt_enclosed, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0 ,0, 0},
|
||||
{"fields-escaped-by", OPT_ESC, "Fields in the i.file are escaped by ...",
|
||||
(gptr*) &escaped, (gptr*) &escaped, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"first-slave", 'x', "Locks all tables across all databases.",
|
||||
(gptr*) &opt_first_slave, (gptr*) &opt_first_slave, 0, GET_BOOL, NO_ARG,
|
||||
{"first-slave", 'x', "Deprecated, renamed to --lock-all-tables.",
|
||||
(gptr*) &opt_lock_all_tables, (gptr*) &opt_lock_all_tables, 0, GET_BOOL, NO_ARG,
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"flush-logs", 'F', "Flush logs file in server before starting dump. "
|
||||
"Note that if you dump many databases at once (using the option "
|
||||
"--databases= or --all-databases), the logs will be flushed for "
|
||||
"each database dumped.",
|
||||
"each database dumped. The exception is when using --lock-all-tables "
|
||||
"or --master-data: "
|
||||
"in this case the logs will be flushed only once, corresponding "
|
||||
"to the moment all tables are locked. So if you want your dump and "
|
||||
"the log flush to happen at the same exact moment you should use "
|
||||
"--lock-all-tables or --master-data with --flush-logs",
|
||||
(gptr*) &flush_logs, (gptr*) &flush_logs, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
|
||||
0, 0},
|
||||
{"force", 'f', "Continue even if we get an sql-error.",
|
||||
@@ -219,24 +230,45 @@ static struct my_option my_long_options[] =
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"help", '?', "Display this help message and exit.", 0, 0, 0, GET_NO_ARG,
|
||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"hex-blob", OPT_HEXBLOB, "Dump binary strings (BINARY, "
|
||||
"VARBINARY, BLOB) in hexadecimal format.",
|
||||
(gptr*) &opt_hex_blob, (gptr*) &opt_hex_blob, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"host", 'h', "Connect to host.", (gptr*) ¤t_host,
|
||||
(gptr*) ¤t_host, 0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"lines-terminated-by", OPT_LTB, "Lines in the i.file are terminated by ...",
|
||||
(gptr*) &lines_terminated, (gptr*) &lines_terminated, 0, GET_STR,
|
||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"lock-all-tables", 'x', "Locks all tables across all databases. This "
|
||||
"is achieved by taking a global read lock for the duration of the whole "
|
||||
"dump. Automatically turns --single-transaction and --lock-tables off.",
|
||||
(gptr*) &opt_lock_all_tables, (gptr*) &opt_lock_all_tables, 0, GET_BOOL, NO_ARG,
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"lock-tables", 'l', "Lock all tables for read.", (gptr*) &lock_tables,
|
||||
(gptr*) &lock_tables, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
|
||||
{"master-data", OPT_MASTER_DATA,
|
||||
"This causes the master position and filename to be appended to your output. This automatically enables --first-slave.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
"This causes the binary log position and filename to be appended to the "
|
||||
"output. If equal to 1, will print it as a CHANGE MASTER command; if equal"
|
||||
" to 2, that command will be prefixed with a comment symbol. "
|
||||
"This option will turn --lock-all-tables on, unless "
|
||||
"--single-transaction is specified too (in which case a "
|
||||
"global read lock is only taken a short time at the beginning of the dump "
|
||||
"- don't forget to read about --single-transaction below). In all cases "
|
||||
"any action on logs will happen at the exact moment of the dump."
|
||||
"Option automatically turns --lock-tables off.",
|
||||
(gptr*) &opt_master_data, (gptr*) &opt_master_data, 0,
|
||||
GET_UINT, REQUIRED_ARG, 0, 0, MYSQL_OPT_MASTER_DATA_COMMENTED_SQL, 0, 0, 0},
|
||||
{"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, "",
|
||||
(gptr*) &opt_max_allowed_packet, (gptr*) &opt_max_allowed_packet, 0,
|
||||
GET_ULONG, REQUIRED_ARG, 24*1024*1024, 4096,
|
||||
(longlong) 2L*1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0},
|
||||
{"net_buffer_length", OPT_NET_BUFFER_LENGTH, "",
|
||||
(gptr*) &opt_net_buffer_length, (gptr*) &opt_net_buffer_length, 0,
|
||||
GET_ULONG, REQUIRED_ARG, 1024*1024L-1025, 4096, 16*1024L*1024L,
|
||||
MALLOC_OVERHEAD-1024, 1024, 0},
|
||||
{"no-autocommit", OPT_AUTOCOMMIT,
|
||||
"Wrap tables with autocommit/commit statements.",
|
||||
(gptr*) &opt_autocommit, (gptr*) &opt_autocommit, 0, GET_BOOL, NO_ARG,
|
||||
0, 0, 0, 0, 0, 0},
|
||||
{"single-transaction", OPT_TRANSACTION,
|
||||
"Dump all tables in single transaction to get consistent snapshot. Mutually exclusive with --lock-tables.",
|
||||
(gptr*) &opt_single_transaction, (gptr*) &opt_single_transaction, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"no-create-db", 'n',
|
||||
"'CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;' will not be put in the output. The above line will be added otherwise, if --databases or --all-databases option was given.}.",
|
||||
(gptr*) &opt_create_db, (gptr*) &opt_create_db, 0, GET_BOOL, NO_ARG, 0, 0,
|
||||
@@ -248,13 +280,6 @@ static struct my_option my_long_options[] =
|
||||
{"no-set-names", 'N',
|
||||
"Deprecated. Use --skip-set-charset instead.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"set-charset", OPT_SET_CHARSET,
|
||||
"Add 'SET NAMES default_character_set' to the output. Enabled by default; suppress with --skip-set-charset.",
|
||||
(gptr*) &opt_set_charset, (gptr*) &opt_set_charset, 0, GET_BOOL, NO_ARG, 1,
|
||||
0, 0, 0, 0, 0},
|
||||
{"set-variable", 'O',
|
||||
"Change the value of a variable. Please note that this option is deprecated; you can set variables directly with --variable-name=value.",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"opt", OPT_OPTIMIZE,
|
||||
"Same as --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, and --disable-keys. Enabled by default, disable with --skip-opt.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
@@ -278,11 +303,31 @@ static struct my_option my_long_options[] =
|
||||
{"result-file", 'r',
|
||||
"Direct output to a given file. This option should be used in MSDOS, because it prevents new line '\\n' from being converted to '\\r\\n' (carriage return + line feed).",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"set-charset", OPT_SET_CHARSET,
|
||||
"Add 'SET NAMES default_character_set' to the output. Enabled by default; suppress with --skip-set-charset.",
|
||||
(gptr*) &opt_set_charset, (gptr*) &opt_set_charset, 0, GET_BOOL, NO_ARG, 1,
|
||||
0, 0, 0, 0, 0},
|
||||
{"set-variable", 'O',
|
||||
"Change the value of a variable. Please note that this option is deprecated; you can set variables directly with --variable-name=value.",
|
||||
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#ifdef HAVE_SMEM
|
||||
{"shared-memory-base-name", OPT_SHARED_MEMORY_BASE_NAME,
|
||||
"Base name of shared memory.", (gptr*) &shared_memory_base_name, (gptr*) &shared_memory_base_name,
|
||||
0, GET_STR_ALLOC, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#endif
|
||||
/*
|
||||
Note that the combination --single-transaction --master-data
|
||||
will give bullet-proof binlog position only if server >=4.1.3. That's the
|
||||
old "FLUSH TABLES WITH READ LOCK does not block commit" fixed bug.
|
||||
*/
|
||||
{"single-transaction", OPT_TRANSACTION,
|
||||
"Creates a consistent snapshot by dumping all tables in a single "
|
||||
"transaction. Works ONLY for tables stored in storage engines which "
|
||||
"support multiversioning (currently only InnoDB does); the dump is NOT "
|
||||
"guaranteed to be consistent for other storage engines. Option "
|
||||
"automatically turns off --lock-tables.",
|
||||
(gptr*) &opt_single_transaction, (gptr*) &opt_single_transaction, 0,
|
||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"skip-opt", OPT_SKIP_OPTIMIZATION,
|
||||
"Disable --opt. Disables --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, and --disable-keys.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
@@ -308,19 +353,6 @@ static struct my_option my_long_options[] =
|
||||
(gptr*) &where, (gptr*) &where, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"xml", 'X', "Dump a database as well formed XML.", 0, 0, 0, GET_NO_ARG,
|
||||
NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"max_allowed_packet", OPT_MAX_ALLOWED_PACKET, "",
|
||||
(gptr*) &opt_max_allowed_packet, (gptr*) &opt_max_allowed_packet, 0,
|
||||
GET_ULONG, REQUIRED_ARG, 24*1024*1024, 4096,
|
||||
(longlong) 2L*1024L*1024L*1024L, MALLOC_OVERHEAD, 1024, 0},
|
||||
{"net_buffer_length", OPT_NET_BUFFER_LENGTH, "",
|
||||
(gptr*) &opt_net_buffer_length, (gptr*) &opt_net_buffer_length, 0,
|
||||
GET_ULONG, REQUIRED_ARG, 1024*1024L-1025, 4096, 16*1024L*1024L,
|
||||
MALLOC_OVERHEAD-1024, 1024, 0},
|
||||
{"comments", 'i', "Write additional information.",
|
||||
(gptr*) &opt_comments, (gptr*) &opt_comments, 0, GET_BOOL, NO_ARG,
|
||||
1, 0, 0, 0, 0, 0},
|
||||
{"hex-blob", OPT_HEXBLOB, "Dump BLOBs in HEX.",
|
||||
(gptr*) &opt_hex_blob, (gptr*) &opt_hex_blob, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
@@ -476,14 +508,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
char *argument)
|
||||
{
|
||||
switch (optid) {
|
||||
case OPT_MASTER_DATA:
|
||||
opt_master_data=1;
|
||||
opt_first_slave=1;
|
||||
break;
|
||||
case OPT_DELETE_MASTER_LOGS:
|
||||
opt_delete_master_logs=1;
|
||||
opt_first_slave=1;
|
||||
break;
|
||||
case 'p':
|
||||
if (argument)
|
||||
{
|
||||
@@ -531,7 +555,6 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
|
||||
case (int) OPT_OPTIMIZE:
|
||||
extended_insert= opt_drop= opt_lock= quick= create_options=
|
||||
opt_disable_keys= lock_tables= opt_set_charset= 1;
|
||||
if (opt_single_transaction) lock_tables=0;
|
||||
break;
|
||||
case (int) OPT_SKIP_OPTIMIZATION:
|
||||
extended_insert= opt_drop= opt_lock= quick= create_options=
|
||||
@@ -627,7 +650,19 @@ static int get_options(int *argc, char ***argv)
|
||||
"%s: You must use option --tab with --fields-...\n", my_progname);
|
||||
return(1);
|
||||
}
|
||||
if (opt_single_transaction)
|
||||
|
||||
/* Ensure consistency of the set of binlog & locking options */
|
||||
if (opt_delete_master_logs && !opt_master_data)
|
||||
opt_master_data= MYSQL_OPT_MASTER_DATA_COMMENTED_SQL;
|
||||
if (opt_single_transaction && opt_lock_all_tables)
|
||||
{
|
||||
fprintf(stderr, "%s: You can't use --single-transaction and "
|
||||
"--lock-all-tables at the same time.\n", my_progname);
|
||||
return(1);
|
||||
}
|
||||
if (opt_master_data)
|
||||
opt_lock_all_tables= !opt_single_transaction;
|
||||
if (opt_single_transaction || opt_lock_all_tables)
|
||||
lock_tables= 0;
|
||||
if (enclosed && opt_enclosed)
|
||||
{
|
||||
@@ -674,6 +709,36 @@ static void DBerror(MYSQL *mysql, const char *when)
|
||||
} /* DBerror */
|
||||
|
||||
|
||||
/*
|
||||
Sends a query to server, optionally reads result, prints error message if
|
||||
some.
|
||||
|
||||
SYNOPSIS
|
||||
mysql_query_with_error_report()
|
||||
mysql_con connection to use
|
||||
res if non zero, result will be put there with mysql_store_result
|
||||
query query to send to server
|
||||
|
||||
RETURN VALUES
|
||||
0 query sending and (if res!=0) result reading went ok
|
||||
1 error
|
||||
*/
|
||||
|
||||
static int mysql_query_with_error_report(MYSQL *mysql_con, MYSQL_RES **res,
|
||||
const char *query)
|
||||
{
|
||||
if (mysql_query(mysql_con, query) ||
|
||||
(res && !((*res)= mysql_store_result(mysql_con))))
|
||||
{
|
||||
my_printf_error(0, "%s: Couldn't execute '%s': %s (%d)",
|
||||
MYF(0), my_progname, query,
|
||||
mysql_error(mysql_con), mysql_errno(mysql_con));
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static void safe_exit(int error)
|
||||
{
|
||||
if (!first_error)
|
||||
@@ -721,12 +786,15 @@ static int dbConnect(char *host, char *user,char *passwd)
|
||||
DBerror(&mysql_connection, "when trying to connect");
|
||||
return 1;
|
||||
}
|
||||
/*
|
||||
As we're going to set SQL_MODE, it would be lost on reconnect, so we
|
||||
cannot reconnect.
|
||||
*/
|
||||
sock->reconnect= 0;
|
||||
sprintf(buff, "/*!40100 SET @@SQL_MODE=\"%s\" */",
|
||||
compatible_mode_normal_str);
|
||||
if (mysql_query(sock, buff))
|
||||
if (mysql_query_with_error_report(sock, 0, buff))
|
||||
{
|
||||
fprintf(stderr, "%s: Can't set the compatible mode %s (error %s)\n",
|
||||
my_progname, compatible_mode_normal_str, mysql_error(sock));
|
||||
mysql_close(sock);
|
||||
safe_exit(EX_MYSQLERR);
|
||||
return 1;
|
||||
@@ -965,7 +1033,7 @@ static uint getTableStructure(char *table, char* db)
|
||||
|
||||
result_table= quote_name(table, table_buff, 1);
|
||||
opt_quoted_table= quote_name(table, table_buff2, 0);
|
||||
if (!opt_xml && !mysql_query(sock,insert_pat))
|
||||
if (!opt_xml && !mysql_query_with_error_report(sock, 0, insert_pat))
|
||||
{
|
||||
/* using SHOW CREATE statement */
|
||||
if (!tFlag)
|
||||
@@ -975,10 +1043,8 @@ static uint getTableStructure(char *table, char* db)
|
||||
MYSQL_FIELD *field;
|
||||
|
||||
sprintf(buff,"show create table %s", result_table);
|
||||
if (mysql_query(sock, buff))
|
||||
if (mysql_query_with_error_report(sock, 0, buff))
|
||||
{
|
||||
fprintf(stderr, "%s: Can't get CREATE TABLE for table %s (%s)\n",
|
||||
my_progname, result_table, mysql_error(sock));
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
@@ -1023,10 +1089,8 @@ static uint getTableStructure(char *table, char* db)
|
||||
mysql_free_result(tableRes);
|
||||
}
|
||||
sprintf(insert_pat,"show fields from %s", result_table);
|
||||
if (mysql_query(sock,insert_pat) || !(tableRes=mysql_store_result(sock)))
|
||||
if (mysql_query_with_error_report(sock, &tableRes, insert_pat))
|
||||
{
|
||||
fprintf(stderr, "%s: Can't get info about table: %s\nerror: %s\n",
|
||||
my_progname, result_table, mysql_error(sock));
|
||||
if (path)
|
||||
my_fclose(sql_file, MYF(MY_WME));
|
||||
safe_exit(EX_MYSQLERR);
|
||||
@@ -1066,10 +1130,8 @@ static uint getTableStructure(char *table, char* db)
|
||||
my_progname, mysql_error(sock));
|
||||
|
||||
sprintf(insert_pat,"show fields from %s", result_table);
|
||||
if (mysql_query(sock,insert_pat) || !(tableRes=mysql_store_result(sock)))
|
||||
if (mysql_query_with_error_report(sock, &tableRes, insert_pat))
|
||||
{
|
||||
fprintf(stderr, "%s: Can't get info about table: %s\nerror: %s\n",
|
||||
my_progname, result_table, mysql_error(sock));
|
||||
safe_exit(EX_MYSQLERR);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
@@ -1163,7 +1225,7 @@ static uint getTableStructure(char *table, char* db)
|
||||
char buff[20+FN_REFLEN];
|
||||
uint keynr,primary_key;
|
||||
sprintf(buff,"show keys from %s", result_table);
|
||||
if (mysql_query(sock, buff))
|
||||
if (mysql_query_with_error_report(sock, &tableRes, buff))
|
||||
{
|
||||
if (mysql_errno(sock) == ER_WRONG_OBJECT)
|
||||
{
|
||||
@@ -1179,7 +1241,6 @@ static uint getTableStructure(char *table, char* db)
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
tableRes=mysql_store_result(sock);
|
||||
/* Find first which key is primary key */
|
||||
keynr=0;
|
||||
primary_key=INT_MAX;
|
||||
@@ -1243,7 +1304,7 @@ static uint getTableStructure(char *table, char* db)
|
||||
char show_name_buff[FN_REFLEN];
|
||||
sprintf(buff,"show table status like %s",
|
||||
quote_for_like(table, show_name_buff));
|
||||
if (mysql_query(sock, buff))
|
||||
if (mysql_query_with_error_report(sock, &tableRes, buff))
|
||||
{
|
||||
if (mysql_errno(sock) != ER_PARSE_ERROR)
|
||||
{ /* If old MySQL version */
|
||||
@@ -1253,8 +1314,7 @@ static uint getTableStructure(char *table, char* db)
|
||||
result_table,mysql_error(sock));
|
||||
}
|
||||
}
|
||||
else if (!(tableRes=mysql_store_result(sock)) ||
|
||||
!(row=mysql_fetch_row(tableRes)))
|
||||
else if (!(row=mysql_fetch_row(tableRes)))
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Error: Couldn't read status information for table %s (%s)\n",
|
||||
@@ -1459,22 +1519,14 @@ static void dumpTable(uint numFields, char *table)
|
||||
fputs("\n", md_result_file);
|
||||
check_io(md_result_file);
|
||||
}
|
||||
if (mysql_query(sock, query))
|
||||
{
|
||||
if (mysql_query_with_error_report(sock, 0, query))
|
||||
DBerror(sock, "when retrieving data from server");
|
||||
error= EX_CONSCHECK;
|
||||
goto err;
|
||||
}
|
||||
if (quick)
|
||||
res=mysql_use_result(sock);
|
||||
else
|
||||
res=mysql_store_result(sock);
|
||||
if (!res)
|
||||
{
|
||||
DBerror(sock, "when retrieving data from server");
|
||||
error= EX_CONSCHECK;
|
||||
goto err;
|
||||
}
|
||||
if (verbose)
|
||||
fprintf(stderr, "-- Retrieving rows...\n");
|
||||
if (mysql_num_fields(res) != numFields)
|
||||
@@ -1648,16 +1700,12 @@ static void dumpTable(uint numFields, char *table)
|
||||
fputs("</field>\n", md_result_file);
|
||||
}
|
||||
else if (opt_hex_blob && is_blob)
|
||||
{ /* sakaik got this idea. */
|
||||
ulong counter;
|
||||
char xx[4];
|
||||
unsigned char *ptr= row[i];
|
||||
fputs("0x", md_result_file);
|
||||
for (counter = 0; counter < lengths[i]; counter++)
|
||||
{
|
||||
sprintf(xx, "%02X", ptr[counter]);
|
||||
fputs(xx, md_result_file);
|
||||
}
|
||||
/* sakaik got the idea to to provide blob's in hex notation. */
|
||||
unsigned char *ptr= row[i], *end= ptr+ lengths[i];
|
||||
fputs("0x", md_result_file);
|
||||
for (; ptr < end ; ptr++)
|
||||
fprintf(md_result_file, "%02X", *ptr);
|
||||
}
|
||||
else
|
||||
unescape(md_result_file, row[i], lengths[i]);
|
||||
@@ -1809,13 +1857,8 @@ static int dump_all_databases()
|
||||
MYSQL_RES *tableres;
|
||||
int result=0;
|
||||
|
||||
if (mysql_query(sock, "SHOW DATABASES") ||
|
||||
!(tableres = mysql_store_result(sock)))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't execute 'SHOW DATABASES': %s",
|
||||
MYF(0), mysql_error(sock));
|
||||
if (mysql_query_with_error_report(sock, &tableres, "SHOW DATABASES"))
|
||||
return 1;
|
||||
}
|
||||
while ((row = mysql_fetch_row(tableres)))
|
||||
{
|
||||
if (dump_all_tables_in_db(row[0]))
|
||||
@@ -1892,7 +1935,7 @@ static int init_dumping(char *database)
|
||||
sprintf(qbuf,"SHOW CREATE DATABASE WITH IF NOT EXISTS %s",
|
||||
qdatabase);
|
||||
|
||||
if (mysql_query(sock, qbuf) || !(dbinfo = mysql_store_result(sock)))
|
||||
if (mysql_query_with_error_report(sock, &dbinfo, qbuf))
|
||||
{
|
||||
/* Old server version, dump generic CREATE DATABASE */
|
||||
fprintf(md_result_file,
|
||||
@@ -1961,7 +2004,7 @@ static int dump_all_tables_in_db(char *database)
|
||||
check_io(md_result_file);
|
||||
}
|
||||
if (lock_tables)
|
||||
mysql_query(sock,"UNLOCK TABLES");
|
||||
mysql_query_with_error_report(sock, 0, "UNLOCK TABLES");
|
||||
return 0;
|
||||
} /* dump_all_tables_in_db */
|
||||
|
||||
@@ -2067,11 +2110,76 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
||||
check_io(md_result_file);
|
||||
}
|
||||
if (lock_tables)
|
||||
mysql_query(sock,"UNLOCK TABLES");
|
||||
mysql_query_with_error_report(sock, 0, "UNLOCK TABLES");
|
||||
return 0;
|
||||
} /* dump_selected_tables */
|
||||
|
||||
|
||||
static int do_show_master_status(MYSQL *mysql_con)
|
||||
{
|
||||
MYSQL_ROW row;
|
||||
MYSQL_RES *master;
|
||||
const char *comment_prefix=
|
||||
(opt_master_data == MYSQL_OPT_MASTER_DATA_COMMENTED_SQL) ? "-- " : "";
|
||||
if (mysql_query_with_error_report(mysql_con, &master, "SHOW MASTER STATUS"))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't execute 'SHOW MASTER STATUS': %s",
|
||||
MYF(0), mysql_error(mysql_con));
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
row = mysql_fetch_row(master);
|
||||
if (row && row[0] && row[1])
|
||||
{
|
||||
if (opt_comments)
|
||||
fprintf(md_result_file,
|
||||
"\n--\n-- Position to start replication or point-in-time "
|
||||
"recovery from\n--\n\n");
|
||||
fprintf(md_result_file,
|
||||
"%sCHANGE MASTER TO MASTER_LOG_FILE='%s', MASTER_LOG_POS=%s;\n",
|
||||
comment_prefix, row[0], row[1]);
|
||||
check_io(md_result_file);
|
||||
}
|
||||
mysql_free_result(master);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int do_flush_tables_read_lock(MYSQL *mysql_con)
|
||||
{
|
||||
return
|
||||
mysql_query_with_error_report(mysql_con, 0, "FLUSH TABLES WITH READ LOCK");
|
||||
}
|
||||
|
||||
|
||||
static int do_unlock_tables(MYSQL *mysql_con)
|
||||
{
|
||||
return mysql_query_with_error_report(mysql_con, 0, "UNLOCK TABLES");
|
||||
}
|
||||
|
||||
|
||||
static int do_reset_master(MYSQL *mysql_con)
|
||||
{
|
||||
return mysql_query_with_error_report(mysql_con, 0, "RESET MASTER");
|
||||
}
|
||||
|
||||
|
||||
static int start_transaction(MYSQL *mysql_con, my_bool consistent_read_now)
|
||||
{
|
||||
/*
|
||||
We use BEGIN for old servers. --single-transaction --master-data will fail
|
||||
on old servers, but that's ok as it was already silently broken (it didn't
|
||||
do a consistent read, so better tell people frankly, with the error).
|
||||
*/
|
||||
return (mysql_query_with_error_report(mysql_con, 0,
|
||||
consistent_read_now ?
|
||||
"START TRANSACTION "
|
||||
"WITH CONSISTENT SNAPSHOT" :
|
||||
"BEGIN"));
|
||||
}
|
||||
|
||||
|
||||
static ulong find_set(TYPELIB *lib, const char *x, uint length,
|
||||
char **err_pos, uint *err_len)
|
||||
@@ -2169,7 +2277,7 @@ static const char *check_if_ignore_table(const char *table_name)
|
||||
|
||||
sprintf(buff,"show table status like %s",
|
||||
quote_for_like(table_name, show_name_buff));
|
||||
if (mysql_query(sock, buff))
|
||||
if (mysql_query_with_error_report(sock, &res, buff))
|
||||
{
|
||||
if (mysql_errno(sock) != ER_PARSE_ERROR)
|
||||
{ /* If old MySQL version */
|
||||
@@ -2180,8 +2288,7 @@ static const char *check_if_ignore_table(const char *table_name)
|
||||
return 0; /* assume table is ok */
|
||||
}
|
||||
}
|
||||
if (!(res= mysql_store_result(sock)) ||
|
||||
!(row= mysql_fetch_row(res)))
|
||||
if (!(row= mysql_fetch_row(res)))
|
||||
{
|
||||
fprintf(stderr,
|
||||
"Error: Couldn't read status information for table %s (%s)\n",
|
||||
@@ -2299,8 +2406,6 @@ static my_bool getViewStructure(char *table, char* db)
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
MYSQL_ROW row;
|
||||
MYSQL_RES *master;
|
||||
compatible_mode_normal_str[0]= 0;
|
||||
|
||||
MY_INIT(argv[0]);
|
||||
@@ -2314,28 +2419,24 @@ int main(int argc, char **argv)
|
||||
if (!path)
|
||||
write_header(md_result_file, *argv);
|
||||
|
||||
if (opt_first_slave)
|
||||
if ((opt_lock_all_tables || opt_master_data) &&
|
||||
do_flush_tables_read_lock(sock))
|
||||
goto err;
|
||||
if (opt_single_transaction && start_transaction(sock, test(opt_master_data)))
|
||||
goto err;
|
||||
if (opt_delete_master_logs && do_reset_master(sock))
|
||||
goto err;
|
||||
if (opt_lock_all_tables || opt_master_data)
|
||||
{
|
||||
lock_tables=0; /* No other locks needed */
|
||||
if (mysql_query(sock, "FLUSH TABLES WITH READ LOCK"))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't execute 'FLUSH TABLES WITH READ LOCK': %s",
|
||||
MYF(0), mysql_error(sock));
|
||||
my_end(0);
|
||||
return(first_error);
|
||||
}
|
||||
}
|
||||
else if (opt_single_transaction)
|
||||
{
|
||||
/* There is no sense to start transaction if all tables are locked */
|
||||
if (mysql_query(sock, "BEGIN"))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't execute 'BEGIN': %s",
|
||||
MYF(0), mysql_error(sock));
|
||||
my_end(0);
|
||||
return(first_error);
|
||||
}
|
||||
if (flush_logs && mysql_refresh(sock, REFRESH_LOG))
|
||||
goto err;
|
||||
flush_logs= 0; /* not anymore; that would not be sensible */
|
||||
}
|
||||
if (opt_master_data && do_show_master_status(sock))
|
||||
goto err;
|
||||
if (opt_single_transaction && do_unlock_tables(sock)) // unlock but no commit!
|
||||
goto err;
|
||||
|
||||
if (opt_alldbs)
|
||||
dump_all_databases();
|
||||
else if (argc > 1 && !opt_databases)
|
||||
@@ -2348,57 +2449,16 @@ int main(int argc, char **argv)
|
||||
/* One or more databases, all tables */
|
||||
dump_databases(argv);
|
||||
}
|
||||
|
||||
if (opt_first_slave)
|
||||
{
|
||||
if (opt_delete_master_logs && mysql_query(sock, "FLUSH MASTER"))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't execute 'FLUSH MASTER': %s",
|
||||
MYF(0), mysql_error(sock));
|
||||
}
|
||||
if (opt_master_data)
|
||||
{
|
||||
if (mysql_query(sock, "SHOW MASTER STATUS") ||
|
||||
!(master = mysql_store_result(sock)))
|
||||
my_printf_error(0, "Error: Couldn't execute 'SHOW MASTER STATUS': %s",
|
||||
MYF(0), mysql_error(sock));
|
||||
else
|
||||
{
|
||||
row = mysql_fetch_row(master);
|
||||
if (row && row[0] && row[1])
|
||||
{
|
||||
if (opt_comments)
|
||||
fprintf(md_result_file,
|
||||
"\n--\n-- Position to start replication from\n--\n\n");
|
||||
fprintf(md_result_file,
|
||||
"CHANGE MASTER TO MASTER_LOG_FILE='%s', \
|
||||
MASTER_LOG_POS=%s ;\n",row[0],row[1]);
|
||||
check_io(md_result_file);
|
||||
}
|
||||
mysql_free_result(master);
|
||||
}
|
||||
}
|
||||
if (mysql_query(sock, "UNLOCK TABLES"))
|
||||
my_printf_error(0, "Error: Couldn't execute 'UNLOCK TABLES': %s",
|
||||
MYF(0), mysql_error(sock));
|
||||
}
|
||||
else if (opt_single_transaction) /* Just to make it beautiful enough */
|
||||
#ifdef HAVE_SMEM
|
||||
my_free(shared_memory_base_name,MYF(MY_ALLOW_ZERO_PTR));
|
||||
#endif
|
||||
{
|
||||
/*
|
||||
In case we were locking all tables, we did not start transaction
|
||||
so there is no need to commit it.
|
||||
No reason to explicitely COMMIT the transaction, neither to explicitely
|
||||
UNLOCK TABLES: these will be automatically be done by the server when we
|
||||
disconnect now. Saves some code here, some network trips, adds nothing to
|
||||
server.
|
||||
*/
|
||||
|
||||
/* This should just free locks as we did not change anything */
|
||||
if (mysql_query(sock, "COMMIT"))
|
||||
{
|
||||
my_printf_error(0, "Error: Couldn't execute 'COMMIT': %s",
|
||||
MYF(0), mysql_error(sock));
|
||||
}
|
||||
}
|
||||
err:
|
||||
dbDisconnect(current_host);
|
||||
if (!path)
|
||||
write_footer(md_result_file);
|
||||
|
@@ -3353,7 +3353,8 @@ static void init_var_hash(MYSQL *mysql)
|
||||
my_hash_insert(&var_hash, (byte*) v);
|
||||
v= var_init(0,"SERVER_VERSION", 0, mysql_get_server_info(mysql), 0);
|
||||
my_hash_insert(&var_hash, (byte*) v);
|
||||
|
||||
v= var_init(0,"DB", 2, db, 0);
|
||||
my_hash_insert(&var_hash, (byte*) v);
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
||||
|
13
configure.in
13
configure.in
@@ -480,7 +480,7 @@ if $PS p $$ 2> /dev/null | grep $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS p \$\$PID | grep mysqld > /dev/null"
|
||||
# Solaris
|
||||
elif $PS -p $$ 2> /dev/null | grep $0 > /dev/null
|
||||
elif $PS -fp $$ 2> /dev/null | grep $0 > /dev/null
|
||||
then
|
||||
FIND_PROC="$PS -p \$\$PID | grep mysqld > /dev/null"
|
||||
# BSD style
|
||||
@@ -3063,9 +3063,15 @@ AC_SUBST([NDB_DEFS])
|
||||
AC_SUBST([ndb_cxxflags_fix])
|
||||
|
||||
|
||||
if test X"$ndb_port" = Xdefault
|
||||
then
|
||||
ndb_port="1186"
|
||||
fi
|
||||
AC_SUBST([ndb_port])
|
||||
|
||||
if test X"$ndb_port_base" = Xdefault
|
||||
then
|
||||
ndb_port_base="2200"
|
||||
ndb_port_base="2202"
|
||||
fi
|
||||
AC_SUBST([ndb_port_base])
|
||||
|
||||
@@ -3104,7 +3110,6 @@ AC_CONFIG_FILES(ndb/Makefile ndb/include/Makefile dnl
|
||||
ndb/src/common/logger/Makefile dnl
|
||||
ndb/src/common/transporter/Makefile dnl
|
||||
ndb/src/common/mgmcommon/Makefile dnl
|
||||
ndb/src/common/editline/Makefile dnl
|
||||
ndb/src/kernel/Makefile dnl
|
||||
ndb/src/kernel/error/Makefile dnl
|
||||
ndb/src/kernel/blocks/Makefile dnl
|
||||
@@ -3156,7 +3161,7 @@ AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl
|
||||
dbug/Makefile scripts/Makefile dnl
|
||||
include/Makefile sql-bench/Makefile tools/Makefile dnl
|
||||
server-tools/Makefile server-tools/instance-manager/Makefile dnl
|
||||
tests/Makefile Docs/Makefile support-files/Makefile dnl
|
||||
tests/Makefile Docs/Makefile Docs/Images/Makefile support-files/Makefile dnl
|
||||
support-files/MacOSX/Makefile mysql-test/Makefile dnl
|
||||
netware/Makefile dnl
|
||||
include/mysql_version.h dnl
|
||||
|
54
dbug/dbug.c
54
dbug/dbug.c
@@ -226,14 +226,15 @@ static my_bool init_done = FALSE; /* Set to TRUE when initialization done */
|
||||
static struct state *stack=0;
|
||||
|
||||
typedef struct st_code_state {
|
||||
int lineno; /* Current debugger output line number */
|
||||
int level; /* Current function nesting level */
|
||||
const char *func; /* Name of current user function */
|
||||
const char *file; /* Name of current user file */
|
||||
char **framep; /* Pointer to current frame */
|
||||
int jmplevel; /* Remember nesting level at setjmp () */
|
||||
const char *jmpfunc; /* Remember current function for setjmp */
|
||||
const char *jmpfile; /* Remember current file for setjmp */
|
||||
int lineno; /* Current debugger output line number */
|
||||
int level; /* Current function nesting level */
|
||||
int disable_output; /* Set to it if output is disabled */
|
||||
int jmplevel; /* Remember nesting level at setjmp () */
|
||||
|
||||
/*
|
||||
* The following variables are used to hold the state information
|
||||
@@ -246,8 +247,8 @@ typedef struct st_code_state {
|
||||
*/
|
||||
|
||||
uint u_line; /* User source code line number */
|
||||
const char *u_keyword; /* Keyword for current macro */
|
||||
int locked; /* If locked with _db_lock_file */
|
||||
const char *u_keyword; /* Keyword for current macro */
|
||||
} CODE_STATE;
|
||||
|
||||
/* Parse a debug command string */
|
||||
@@ -369,8 +370,10 @@ static CODE_STATE *code_state(void)
|
||||
#define code_state() (&static_code_state)
|
||||
#define pthread_mutex_lock(A) {}
|
||||
#define pthread_mutex_unlock(A) {}
|
||||
static CODE_STATE static_code_state = { 0,0,"?func","?file",NULL,0,NULL,
|
||||
NULL,0,"?",0};
|
||||
static CODE_STATE static_code_state=
|
||||
{
|
||||
"?func", "?file", NULL, NullS, NullS, 0,0,0,0,0,0, NullS
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
@@ -727,9 +730,12 @@ char ***_sframep_ __attribute__((unused)))
|
||||
if (DoProfile ())
|
||||
{
|
||||
long stackused;
|
||||
if (*state->framep == NULL) {
|
||||
if (*state->framep == NULL)
|
||||
{
|
||||
stackused = 0;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
stackused = ((long)(*state->framep)) - ((long)(state->framep));
|
||||
stackused = stackused > 0 ? stackused : -stackused;
|
||||
}
|
||||
@@ -753,7 +759,7 @@ char ***_sframep_ __attribute__((unused)))
|
||||
dbug_flush (state); /* This does a unlock */
|
||||
}
|
||||
#ifdef SAFEMALLOC
|
||||
if (stack -> flags & SANITY_CHECK_ON)
|
||||
if (stack->flags & SANITY_CHECK_ON && !state->disable_output)
|
||||
if (_sanity(_file_,_line_)) /* Check of safemalloc */
|
||||
stack -> flags &= ~SANITY_CHECK_ON;
|
||||
#endif
|
||||
@@ -808,9 +814,11 @@ uint *_slevel_)
|
||||
else
|
||||
{
|
||||
#ifdef SAFEMALLOC
|
||||
if (stack -> flags & SANITY_CHECK_ON)
|
||||
if (stack->flags & SANITY_CHECK_ON && !state->disable_output)
|
||||
{
|
||||
if (_sanity(*_sfile_,_line_))
|
||||
stack->flags &= ~SANITY_CHECK_ON;
|
||||
}
|
||||
#endif
|
||||
#ifndef THREAD
|
||||
if (DoProfile ())
|
||||
@@ -953,7 +961,6 @@ uint length)
|
||||
int pos;
|
||||
char dbuff[90];
|
||||
CODE_STATE *state;
|
||||
/* Sasha: pre-my_thread_init() safety */
|
||||
if (!(state=code_state()))
|
||||
return;
|
||||
|
||||
@@ -993,6 +1000,25 @@ uint length)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Enable/Disable output for this thread
|
||||
|
||||
SYNOPSIS
|
||||
_db_output_()
|
||||
flag 1 = enable output, 0 = disable_output
|
||||
|
||||
*/
|
||||
|
||||
void _db_output_(uint flag)
|
||||
{
|
||||
CODE_STATE *state;
|
||||
if (!(state=code_state()))
|
||||
return;
|
||||
state->disable_output= !flag;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* FUNCTION
|
||||
*
|
||||
@@ -1158,7 +1184,7 @@ static BOOLEAN DoTrace (CODE_STATE *state)
|
||||
{
|
||||
reg2 BOOLEAN trace=FALSE;
|
||||
|
||||
if (TRACING &&
|
||||
if (TRACING && !state->disable_output &&
|
||||
state->level <= stack -> maxdepth &&
|
||||
InList (stack -> functions, state->func) &&
|
||||
InList (stack -> processes, _db_process_))
|
||||
@@ -1194,7 +1220,7 @@ static BOOLEAN DoProfile ()
|
||||
state=code_state();
|
||||
|
||||
profile = FALSE;
|
||||
if (PROFILING &&
|
||||
if (PROFILING && !state->disable_output &&
|
||||
state->level <= stack -> maxdepth &&
|
||||
InList (stack -> p_functions, state->func) &&
|
||||
InList (stack -> processes, _db_process_))
|
||||
@@ -1268,7 +1294,7 @@ const char *keyword)
|
||||
if (!(state=code_state()))
|
||||
return FALSE;
|
||||
result = FALSE;
|
||||
if (DEBUGGING &&
|
||||
if (DEBUGGING && !state->disable_output &&
|
||||
state->level <= stack -> maxdepth &&
|
||||
InList (stack -> functions, state->func) &&
|
||||
InList (stack -> keywords, keyword) &&
|
||||
|
@@ -39,6 +39,7 @@ extern void _db_pargs_(uint _line_,const char *keyword);
|
||||
extern void _db_doprnt_ _VARARGS((const char *format,...));
|
||||
extern void _db_dump_(uint _line_,const char *keyword,const char *memory,
|
||||
uint length);
|
||||
extern void _db_output_();
|
||||
extern void _db_lock_file();
|
||||
extern void _db_unlock_file();
|
||||
|
||||
@@ -67,6 +68,7 @@ extern void _db_unlock_file();
|
||||
#define DEBUGGER_ON _no_db_=0
|
||||
#define DBUG_LOCK_FILE { _db_lock_file(); }
|
||||
#define DBUG_UNLOCK_FILE { _db_unlock_file(); }
|
||||
#define DBUG_OUTPUT(A) { _db_output_(A); }
|
||||
#define DBUG_ASSERT(A) assert(A)
|
||||
#define DBUG_EXECUTE_IF(keyword,a1) \
|
||||
{if (_db_on_) {if (_db_strict_keyword_ (keyword)) { a1 }}}
|
||||
@@ -90,6 +92,7 @@ extern void _db_unlock_file();
|
||||
#define DEBUGGER_ON
|
||||
#define DBUG_LOCK_FILE
|
||||
#define DBUG_UNLOCK_FILE
|
||||
#define DBUG_OUTPUT(A)
|
||||
#define DBUG_ASSERT(A) {}
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
|
@@ -370,6 +370,12 @@ int __void__;
|
||||
#define LINT_INIT(var)
|
||||
#endif
|
||||
|
||||
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || defined(HAVE_purify)
|
||||
#define PURIFY_OR_LINT_INIT(var) var=0
|
||||
#else
|
||||
#define PURIFY_OR_LINT_INIT(var)
|
||||
#endif
|
||||
|
||||
/* Define some useful general macros */
|
||||
#if defined(__cplusplus) && defined(__GNUC__)
|
||||
#define max(a, b) ((a) >? (b))
|
||||
|
@@ -221,6 +221,7 @@ extern ulong my_cache_w_requests, my_cache_write, my_cache_r_requests,
|
||||
my_cache_read;
|
||||
extern ulong my_blocks_used, my_blocks_changed;
|
||||
extern ulong my_file_opened,my_stream_opened, my_tmp_file_created;
|
||||
extern uint mysys_usage_id;
|
||||
extern my_bool my_init_done;
|
||||
|
||||
/* Point to current my_message() */
|
||||
|
@@ -490,6 +490,8 @@ MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table,
|
||||
const char *wild);
|
||||
unsigned long STDCALL mysql_escape_string(char *to,const char *from,
|
||||
unsigned long from_length);
|
||||
unsigned long STDCALL mysql_hex_string(char *to,const char *from,
|
||||
unsigned long from_length);
|
||||
unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql,
|
||||
char *to,const char *from,
|
||||
unsigned long length);
|
||||
|
@@ -12,7 +12,7 @@
|
||||
|
||||
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 */
|
||||
Foundation, Inc., 59 Temple Placeo Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
/* Definefile for error messagenumbers */
|
||||
|
||||
@@ -387,4 +387,25 @@
|
||||
#define ER_VIEW_NONUPD_CHECK 1368
|
||||
#define ER_VIEW_CHECK_FAILED 1369
|
||||
#define ER_SP_ACCESS_DENIED_ERROR 1370
|
||||
#define ER_ERROR_MESSAGES 371
|
||||
#define ER_RELAY_LOG_FAIL 1371
|
||||
#define ER_PASSWD_LENGTH 1372
|
||||
#define ER_UNKNOWN_TARGET_BINLOG 1373
|
||||
#define ER_IO_ERR_LOG_INDEX_READ 1374
|
||||
#define ER_BINLOG_PURGE_PROHIBITED 1375
|
||||
#define ER_FSEEK_FAIL 1376
|
||||
#define ER_BINLOG_PURGE_FATAL_ERR 1377
|
||||
#define ER_LOG_IN_USE 1378
|
||||
#define ER_LOG_PURGE_UNKNOWN_ERR 1379
|
||||
#define ER_RELAY_LOG_INIT 1380
|
||||
#define ER_NO_BINARY_LOGGING 1381
|
||||
#define ER_RESERVED_SYNTAX 1382
|
||||
#define ER_WSAS_FAILED 1383
|
||||
#define ER_DIFF_GROUPS_PROC 1384
|
||||
#define ER_NO_GROUP_FOR_PROC 1385
|
||||
#define ER_ORDER_WITH_PROC 1386
|
||||
#define ER_LOGING_PROHIBIT_CHANGING_OF 1387
|
||||
#define ER_NO_FILE_MAPPING 1388
|
||||
#define ER_WRONG_MAGIC 1389
|
||||
#define ER_PS_MANY_PARAM 1390
|
||||
#define ER_KEY_PART_0 1391
|
||||
#define ER_ERROR_MESSAGES 392
|
||||
|
@@ -2266,8 +2266,8 @@ dict_foreign_add_to_cache(
|
||||
|
||||
/*************************************************************************
|
||||
Scans from pointer onwards. Stops if is at the start of a copy of
|
||||
'string' where characters are compared without case sensitivity. Stops
|
||||
also at '\0'. */
|
||||
'string' where characters are compared without case sensitivity, and
|
||||
only outside `` or "" quotes. Stops also at '\0'. */
|
||||
|
||||
const char*
|
||||
dict_scan_to(
|
||||
@@ -2276,33 +2276,36 @@ dict_scan_to(
|
||||
const char* ptr, /* in: scan from */
|
||||
const char* string) /* in: look for this */
|
||||
{
|
||||
ibool success;
|
||||
char quote = '\0';
|
||||
|
||||
for (; *ptr; ptr++) {
|
||||
if (*ptr == quote) {
|
||||
/* Closing quote character: do not look for
|
||||
starting quote or the keyword. */
|
||||
quote = '\0';
|
||||
} else if (quote) {
|
||||
/* Within quotes: do nothing. */
|
||||
} else if (*ptr == '`' || *ptr == '"') {
|
||||
/* Starting quote: remember the quote character. */
|
||||
quote = *ptr;
|
||||
} else {
|
||||
/* Outside quotes: look for the keyword. */
|
||||
ulint i;
|
||||
loop:
|
||||
if (*ptr == '\0') {
|
||||
return(ptr);
|
||||
for (i = 0; string[i]; i++) {
|
||||
if (toupper((ulint)(ptr[i]))
|
||||
!= toupper((ulint)(string[i]))) {
|
||||
goto nomatch;
|
||||
}
|
||||
}
|
||||
|
||||
success = TRUE;
|
||||
|
||||
for (i = 0; i < ut_strlen(string); i++) {
|
||||
if (toupper((ulint)(ptr[i])) != toupper((ulint)(string[i]))) {
|
||||
success = FALSE;
|
||||
|
||||
break;
|
||||
nomatch:
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
if (success) {
|
||||
|
||||
return(ptr);
|
||||
}
|
||||
|
||||
ptr++;
|
||||
|
||||
goto loop;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Accepts a specified string. Comparisons are case-insensitive. */
|
||||
|
||||
@@ -2877,13 +2880,13 @@ loop:
|
||||
|
||||
ut_a(success);
|
||||
|
||||
if (!isspace(*ptr)) {
|
||||
if (!isspace(*ptr) && *ptr != '"' && *ptr != '`') {
|
||||
goto loop;
|
||||
}
|
||||
|
||||
do {
|
||||
while (isspace(*ptr)) {
|
||||
ptr++;
|
||||
} while (isspace(*ptr));
|
||||
}
|
||||
|
||||
/* read constraint name unless got "CONSTRAINT FOREIGN" */
|
||||
if (ptr != ptr2) {
|
||||
|
@@ -342,13 +342,16 @@ dict_index_rec_get_sys_col(
|
||||
ut_ad(len == 7);
|
||||
|
||||
return(trx_read_roll_ptr(field));
|
||||
} else if ((type == DATA_ROW_ID) || (type == DATA_MIX_ID)) {
|
||||
} else if (type == DATA_TRX_ID) {
|
||||
|
||||
return(trx_read_trx_id(field));
|
||||
} else if (type == DATA_MIX_ID) {
|
||||
|
||||
return(mach_dulint_read_compressed(field));
|
||||
} else {
|
||||
ut_ad(type == DATA_TRX_ID);
|
||||
ut_a(type == DATA_ROW_ID);
|
||||
|
||||
return(trx_read_trx_id(field));
|
||||
return(mach_read_from_6(field));
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1069,30 +1069,6 @@ trx_purge(void)
|
||||
}
|
||||
}
|
||||
|
||||
/* Determine how much data manipulation language (DML) statements
|
||||
need to be delayed in order to reduce the lagging of the purge
|
||||
thread. */
|
||||
srv_dml_needed_delay = 0; /* in microseconds; default: no delay */
|
||||
|
||||
/* If we cannot advance the 'purge view' because of an old
|
||||
'consistent read view', then the DML statements cannot be delayed.
|
||||
Also, srv_max_purge_lag <= 0 means 'infinity'. */
|
||||
if (srv_max_purge_lag > 0
|
||||
&& !UT_LIST_GET_LAST(trx_sys->view_list)) {
|
||||
float ratio = (float) trx_sys->rseg_history_len
|
||||
/ srv_max_purge_lag;
|
||||
if (ratio > ULINT_MAX / 10000) {
|
||||
/* Avoid overflow: maximum delay is 4295 seconds */
|
||||
srv_dml_needed_delay = ULINT_MAX;
|
||||
} else if (ratio > 1) {
|
||||
/* If the history list length exceeds the
|
||||
innodb_max_purge_lag, the
|
||||
data manipulation statements are delayed
|
||||
by at least 5000 microseconds. */
|
||||
srv_dml_needed_delay = (ulint) ((ratio - .5) * 10000);
|
||||
}
|
||||
}
|
||||
|
||||
purge_sys->view = read_view_oldest_copy_or_open_new(NULL,
|
||||
purge_sys->heap);
|
||||
mutex_exit(&kernel_mutex);
|
||||
|
@@ -30,7 +30,7 @@ include $(srcdir)/Makefile.shared
|
||||
libmysqlclient_la_SOURCES = $(target_sources)
|
||||
libmysqlclient_la_LIBADD = $(target_libadd)
|
||||
libmysqlclient_la_LDFLAGS = $(target_ldflags)
|
||||
EXTRA_DIST = Makefile.shared
|
||||
EXTRA_DIST = Makefile.shared libmysql.def
|
||||
noinst_HEADERS = client_settings.h
|
||||
|
||||
# This is called from the toplevel makefile
|
||||
|
@@ -664,7 +664,7 @@ bool Protocol::send_fields(List<Item> *list, uint flags)
|
||||
|
||||
DBUG_RETURN(prepare_for_send(list));
|
||||
err:
|
||||
send_error(thd, ER_OUT_OF_RESOURCES); /* purecov: inspected */
|
||||
my_error(ER_OUT_OF_RESOURCES, MYF(0)); /* purecov: inspected */
|
||||
DBUG_RETURN(1); /* purecov: inspected */
|
||||
}
|
||||
|
||||
|
@@ -656,6 +656,15 @@ static int chk_index(MI_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
if (chk_index_down(param,info,&info->s->ft2_keyinfo,record,
|
||||
temp_buff,&tmp_keys,key_checksum,1))
|
||||
goto err;
|
||||
if (tmp_keys + subkeys)
|
||||
{
|
||||
mi_check_print_error(param,
|
||||
"Number of words in the 2nd level tree "
|
||||
"does not match the number in the header. "
|
||||
"Parent word in on the page %s, offset %u",
|
||||
llstr(page,llbuff), (uint) (old_keypos-buff));
|
||||
goto err;
|
||||
}
|
||||
(*keys)+=tmp_keys-1;
|
||||
continue;
|
||||
}
|
||||
|
@@ -372,6 +372,7 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
/* popular word. two-level tree. going down */
|
||||
my_off_t root=info->dupp_key_pos;
|
||||
keyinfo=&info->s->ft2_keyinfo;
|
||||
get_key_full_length_rdonly(off, key);
|
||||
key+=off;
|
||||
keypos-=keyinfo->keylength+nod_flag; /* we'll modify key entry 'in vivo' */
|
||||
error=_mi_ck_real_write_btree(info, keyinfo, key, 0,
|
||||
|
@@ -37,7 +37,7 @@ test_DATA = std_data/client-key.pem std_data/client-cert.pem std_data/cacert.pem
|
||||
CLEANFILES = $(test_SCRIPTS) $(test_DATA)
|
||||
|
||||
INCLUDES = -I$(srcdir)/../include -I../include -I..
|
||||
bin_PROGRAMS = mysql_test_run_new
|
||||
EXTRA_PROGRAMS = mysql_test_run_new
|
||||
noinst_HEADERS = my_manage.h
|
||||
mysql_test_run_new_SOURCES= mysql_test_run_new.c my_manage.c
|
||||
|
||||
@@ -48,6 +48,7 @@ dist-hook:
|
||||
$(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)/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
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(distdir)/std_data
|
||||
@@ -70,6 +71,7 @@ install-data-local:
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.dat $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.*001 $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/des_key_file $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/Moscow_leap $(DESTDIR)$(testdir)/std_data
|
||||
$(INSTALL_DATA) $(srcdir)/std_data/*.pem $(DESTDIR)$(testdir)/std_data
|
||||
|
||||
std_data/%.pem:
|
||||
|
File diff suppressed because one or more lines are too long
@@ -30,7 +30,8 @@
|
||||
#ifndef __WIN__
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
#include <fnmatch.h>
|
||||
#include <signal.h>
|
||||
#include <fnmatch.h> /* FIXME HAVE_FNMATCH_H or something */
|
||||
#else
|
||||
#include <direct.h>
|
||||
#include <stdlib.h>
|
||||
@@ -100,7 +101,7 @@ void init_args(arg_list_t *al)
|
||||
void add_arg(arg_list_t *al, const char *format, ...)
|
||||
{
|
||||
va_list ap;
|
||||
char temp[PATH_MAX];
|
||||
char temp[FN_REFLEN];
|
||||
|
||||
ASSERT(al != NULL);
|
||||
|
||||
@@ -230,10 +231,10 @@ int wait_for_server_start(char *bin_dir __attribute__((unused)),
|
||||
{
|
||||
arg_list_t al;
|
||||
int err= 0, i;
|
||||
char trash[PATH_MAX];
|
||||
char trash[FN_REFLEN];
|
||||
|
||||
/* mysqladmin file */
|
||||
snprintf(trash, PATH_MAX, "%s/trash.out",tmp_dir);
|
||||
snprintf(trash, FN_REFLEN, "%s/trash.out",tmp_dir);
|
||||
|
||||
/* args */
|
||||
init_args(&al);
|
||||
@@ -490,9 +491,9 @@ int stop_server(char *bin_dir __attribute__((unused)), char *mysqladmin_file,
|
||||
{
|
||||
arg_list_t al;
|
||||
int err= 0;
|
||||
char trash[PATH_MAX];
|
||||
char trash[FN_REFLEN];
|
||||
|
||||
snprintf(trash, PATH_MAX, "%s/trash.out",tmp_dir);
|
||||
snprintf(trash, FN_REFLEN, "%s/trash.out",tmp_dir);
|
||||
|
||||
/* args */
|
||||
init_args(&al);
|
||||
@@ -548,7 +549,7 @@ int stop_server(char *bin_dir __attribute__((unused)), char *mysqladmin_file,
|
||||
#ifndef __WIN__
|
||||
pid_t get_server_pid(char *pid_file)
|
||||
{
|
||||
char buf[PATH_MAX];
|
||||
char buf[FN_REFLEN];
|
||||
int fd, err;
|
||||
char *p;
|
||||
pid_t id= 0;
|
||||
@@ -556,7 +557,7 @@ pid_t get_server_pid(char *pid_file)
|
||||
/* discover id */
|
||||
fd= open(pid_file, O_RDONLY);
|
||||
|
||||
err= read(fd, buf, PATH_MAX);
|
||||
err= read(fd, buf, FN_REFLEN);
|
||||
|
||||
close(fd);
|
||||
|
||||
@@ -619,7 +620,7 @@ void del_tree(char *dir)
|
||||
#ifndef __WIN__
|
||||
DIR *parent= opendir(dir);
|
||||
struct dirent *entry;
|
||||
char temp[PATH_MAX];
|
||||
char temp[FN_REFLEN];
|
||||
|
||||
if (parent == NULL)
|
||||
{
|
||||
@@ -629,14 +630,27 @@ void del_tree(char *dir)
|
||||
while ((entry= readdir(parent)) != NULL)
|
||||
{
|
||||
/* create long name */
|
||||
snprintf(temp, PATH_MAX, "%s/%s", dir, entry->d_name);
|
||||
snprintf(temp, FN_REFLEN, "%s/%s", dir, entry->d_name);
|
||||
|
||||
if (entry->d_name[0] == '.')
|
||||
{
|
||||
/* Skip */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* FIXME missing test in acinclude.m4 */
|
||||
#ifndef STRUCT_DIRENT_HAS_D_TYPE
|
||||
struct stat st;
|
||||
|
||||
if (lstat(entry->d_name, &st) == -1)
|
||||
{
|
||||
/* FIXME error */
|
||||
return;
|
||||
}
|
||||
if (S_ISDIR(st.st_mode))
|
||||
#else
|
||||
if (S_ISDIR(entry->d_type))
|
||||
#endif
|
||||
{
|
||||
/* delete subdirectory */
|
||||
del_tree(temp);
|
||||
@@ -647,15 +661,16 @@ void del_tree(char *dir)
|
||||
remove(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* remove directory */
|
||||
rmdir(dir);
|
||||
#else
|
||||
struct _finddata_t parent;
|
||||
intptr_t handle;
|
||||
char temp[PATH_MAX];
|
||||
char mask[PATH_MAX];
|
||||
char temp[FN_REFLEN];
|
||||
char mask[FN_REFLEN];
|
||||
|
||||
snprintf(mask,MAX_PATH,"%s/*.*",dir);
|
||||
snprintf(mask,FN_REFLEN,"%s/*.*",dir);
|
||||
|
||||
if ((handle=_findfirst(mask,&parent)) == -1L)
|
||||
{
|
||||
@@ -665,7 +680,7 @@ void del_tree(char *dir)
|
||||
do
|
||||
{
|
||||
/* create long name */
|
||||
snprintf(temp, PATH_MAX, "%s/%s", dir, parent.name);
|
||||
snprintf(temp, FN_REFLEN, "%s/%s", dir, parent.name);
|
||||
if (parent.name[0] == '.')
|
||||
{
|
||||
/* Skip */
|
||||
@@ -700,11 +715,11 @@ int removef(const char *format, ...)
|
||||
{
|
||||
#ifdef __NETWARE__
|
||||
va_list ap;
|
||||
char path[PATH_MAX];
|
||||
char path[FN_REFLEN];
|
||||
|
||||
va_start(ap, format);
|
||||
|
||||
vsnprintf(path, PATH_MAX, format, ap);
|
||||
vsnprintf(path, FN_REFLEN, format, ap);
|
||||
|
||||
va_end(ap);
|
||||
return remove(path);
|
||||
@@ -712,15 +727,15 @@ int removef(const char *format, ...)
|
||||
#eldef __WIN__
|
||||
{
|
||||
va_list ap;
|
||||
char path[PATH_MAX];
|
||||
char path[FN_REFLEN];
|
||||
struct _finddata_t parent;
|
||||
intptr_t handle;
|
||||
char temp[PATH_MAX];
|
||||
char temp[FN_REFLEN];
|
||||
char *p;
|
||||
|
||||
va_start(ap, format);
|
||||
|
||||
vsnprintf(path, PATH_MAX, format, ap);
|
||||
vsnprintf(path, FN_REFLEN, format, ap);
|
||||
|
||||
va_end(ap);
|
||||
|
||||
@@ -739,7 +754,7 @@ int removef(const char *format, ...)
|
||||
{
|
||||
if (! (parent.attrib & _A_SUBDIR))
|
||||
{
|
||||
snprintf(temp, PATH_MAX, "%s/%s", path, parent.name);
|
||||
snprintf(temp, FN_REFLEN, "%s/%s", path, parent.name);
|
||||
remove(temp);
|
||||
}
|
||||
}while (_findnext(handle,&parent) == 0);
|
||||
@@ -749,14 +764,14 @@ int removef(const char *format, ...)
|
||||
#else
|
||||
DIR *parent;
|
||||
struct dirent *entry;
|
||||
char temp[PATH_MAX];
|
||||
char temp[FN_REFLEN];
|
||||
va_list ap;
|
||||
char path[PATH_MAX];
|
||||
char path[FN_REFLEN];
|
||||
char *p;
|
||||
/* Get path with mask */
|
||||
va_start(ap, format);
|
||||
|
||||
vsnprintf(path, PATH_MAX, format, ap);
|
||||
vsnprintf(path, FN_REFLEN, format, ap);
|
||||
|
||||
va_end(ap);
|
||||
|
||||
@@ -775,10 +790,21 @@ int removef(const char *format, ...)
|
||||
while ((entry= readdir(parent)) != NULL)
|
||||
{
|
||||
/* entry is not directory and entry matches with mask */
|
||||
#ifndef STRUCT_DIRENT_HAS_D_TYPE
|
||||
struct stat st;
|
||||
|
||||
if (lstat(entry->d_name, &st) == -1)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!S_ISDIR(st.st_mode) && !fnmatch(p, entry->d_name,0))
|
||||
#else
|
||||
if (!S_ISDIR(entry->d_type) && !fnmatch(p, entry->d_name,0))
|
||||
#endif
|
||||
{
|
||||
/* create long name */
|
||||
snprintf(temp, PATH_MAX, "%s/%s", path, entry->d_name);
|
||||
snprintf(temp, FN_REFLEN, "%s/%s", path, entry->d_name);
|
||||
/* Delete only files */
|
||||
remove(temp);
|
||||
}
|
||||
@@ -795,7 +821,7 @@ int removef(const char *format, ...)
|
||||
|
||||
void get_basedir(char *argv0, char *basedir)
|
||||
{
|
||||
char temp[PATH_MAX];
|
||||
char temp[FN_REFLEN];
|
||||
char *p;
|
||||
int position;
|
||||
|
||||
|
@@ -52,8 +52,6 @@ int my_vsnprintf_(char *to, size_t n, const char* value, ...);
|
||||
#define TRY_MAX 5
|
||||
|
||||
#ifdef __WIN__
|
||||
#define PATH_MAX _MAX_PATH
|
||||
#define NAME_MAX _MAX_FNAME
|
||||
#define kill(A,B) TerminateProcess((HANDLE)A,0)
|
||||
#define NOT_NEED_PID 0
|
||||
#define MASTER_PID 1
|
||||
|
@@ -227,7 +227,7 @@ DO_CLIENT_GDB=""
|
||||
SLEEP_TIME_AFTER_RESTART=1
|
||||
SLEEP_TIME_FOR_DELETE=10
|
||||
SLEEP_TIME_FOR_FIRST_MASTER=400 # Enough time to create innodb tables
|
||||
SLEEP_TIME_FOR_SECOND_MASTER=30
|
||||
SLEEP_TIME_FOR_SECOND_MASTER=400
|
||||
SLEEP_TIME_FOR_FIRST_SLAVE=400
|
||||
SLEEP_TIME_FOR_SECOND_SLAVE=30
|
||||
CHARACTER_SET=latin1
|
||||
@@ -457,6 +457,9 @@ SMALL_SERVER="--key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M"
|
||||
|
||||
export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MASTER_MYSOCK1
|
||||
|
||||
NDBCLUSTER_BASE_PORT=`expr $NDBCLUSTER_PORT + 2`
|
||||
NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --port-base=$NDBCLUSTER_BASE_PORT --data-dir=$MYSQL_TEST_DIR/var"
|
||||
|
||||
if [ x$SOURCE_DIST = x1 ] ; then
|
||||
MY_BASEDIR=$MYSQL_TEST_DIR
|
||||
else
|
||||
@@ -941,11 +944,11 @@ start_ndbcluster()
|
||||
echo "Starting ndbcluster"
|
||||
if [ "$DO_BENCH" = 1 ]
|
||||
then
|
||||
NDBCLUSTER_OPTS=""
|
||||
NDBCLUSTER_EXTRA_OPTS=""
|
||||
else
|
||||
NDBCLUSTER_OPTS="--small"
|
||||
NDBCLUSTER_EXTRA_OPTS="--small"
|
||||
fi
|
||||
./ndb/ndbcluster --port-base=$NDBCLUSTER_PORT $NDBCLUSTER_OPTS --diskless --initial --data-dir=$MYSQL_TEST_DIR/var || exit 1
|
||||
./ndb/ndbcluster $NDBCLUSTER_OPTS $NDBCLUSTER_EXTRA_OPTS --diskless --initial || exit 1
|
||||
NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT"
|
||||
else
|
||||
NDB_CONNECTSTRING="$USE_RUNNING_NDBCLUSTER"
|
||||
@@ -963,7 +966,7 @@ stop_ndbcluster()
|
||||
if [ -z "$USE_RUNNING_NDBCLUSTER" ]
|
||||
then
|
||||
# Kill any running ndbcluster stuff
|
||||
./ndb/ndbcluster --data-dir=$MYSQL_TEST_DIR/var --port-base=$NDBCLUSTER_PORT --stop
|
||||
./ndb/ndbcluster $NDBCLUSTER_OPTS --stop
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
@@ -73,25 +73,25 @@ const char *TEST_IGNORE= "[ignore]";
|
||||
******************************************************************************/
|
||||
|
||||
#ifdef __NETWARE__
|
||||
static char base_dir[PATH_MAX]= "sys:/mysql";
|
||||
static char base_dir[FN_REFLEN]= "sys:/mysql";
|
||||
#else
|
||||
static char base_dir[PATH_MAX]= "..";
|
||||
static char base_dir[FN_REFLEN]= "..";
|
||||
#endif
|
||||
static char db[PATH_MAX]= "test";
|
||||
static char user[PATH_MAX]= "root";
|
||||
static char password[PATH_MAX]= "";
|
||||
static char db[FN_LEN]= "test";
|
||||
static char user[FN_LEN]= "root";
|
||||
static char password[FN_LEN]= "";
|
||||
|
||||
int master_port= 9306;
|
||||
int slave_port= 9307;
|
||||
|
||||
#if !defined(__NETWARE__) && !defined(__WIN__)
|
||||
static char master_socket[PATH_MAX]= "./var/tmp/master.sock";
|
||||
static char slave_socket[PATH_MAX]= "./var/tmp/slave.sock";
|
||||
static char master_socket[FN_REFLEN]= "./var/tmp/master.sock";
|
||||
static char slave_socket[FN_REFLEN]= "./var/tmp/slave.sock";
|
||||
#endif
|
||||
|
||||
/* comma delimited list of tests to skip or empty string */
|
||||
#ifndef __WIN__
|
||||
static char skip_test[PATH_MAX]= " lowercase_table3 , system_mysql_db_fix ";
|
||||
static char skip_test[FN_REFLEN]= " lowercase_table3 , system_mysql_db_fix ";
|
||||
#else
|
||||
/*
|
||||
The most ignore testes contain the calls of system command
|
||||
@@ -110,7 +110,7 @@ static char skip_test[PATH_MAX]= " lowercase_table3 , system_mysql_db_fix ";
|
||||
mysqldump contains a command system
|
||||
rpl000001 makes non-exit loop...temporary skiped
|
||||
*/
|
||||
static char skip_test[PATH_MAX]=
|
||||
static char skip_test[FN_REFLEN]=
|
||||
" lowercase_table3 ,"
|
||||
" system_mysql_db_fix ,"
|
||||
" sp ,"
|
||||
@@ -123,44 +123,44 @@ static char skip_test[PATH_MAX]=
|
||||
" mysqldump ,"
|
||||
" rpl000001 ";
|
||||
#endif
|
||||
static char ignore_test[PATH_MAX]= "";
|
||||
static char ignore_test[FN_REFLEN]= "";
|
||||
|
||||
static char bin_dir[PATH_MAX];
|
||||
static char mysql_test_dir[PATH_MAX];
|
||||
static char test_dir[PATH_MAX];
|
||||
static char mysql_tmp_dir[PATH_MAX];
|
||||
static char result_dir[PATH_MAX];
|
||||
static char master_dir[PATH_MAX];
|
||||
static char slave_dir[PATH_MAX];
|
||||
static char lang_dir[PATH_MAX];
|
||||
static char char_dir[PATH_MAX];
|
||||
static char bin_dir[FN_REFLEN];
|
||||
static char mysql_test_dir[FN_REFLEN];
|
||||
static char test_dir[FN_REFLEN];
|
||||
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 lang_dir[FN_REFLEN];
|
||||
static char char_dir[FN_REFLEN];
|
||||
|
||||
static char mysqladmin_file[PATH_MAX];
|
||||
static char mysqld_file[PATH_MAX];
|
||||
static char mysqltest_file[PATH_MAX];
|
||||
static char mysqladmin_file[FN_REFLEN];
|
||||
static char mysqld_file[FN_REFLEN];
|
||||
static char mysqltest_file[FN_REFLEN];
|
||||
#ifndef __WIN__
|
||||
static char master_pid[PATH_MAX];
|
||||
static char slave_pid[PATH_MAX];
|
||||
static char sh_file[PATH_MAX]= "/bin/sh";
|
||||
static char master_pid[FN_REFLEN];
|
||||
static char slave_pid[FN_REFLEN];
|
||||
static char sh_file[FN_REFLEN]= "/bin/sh";
|
||||
#else
|
||||
static HANDLE master_pid;
|
||||
static HANDLE slave_pid;
|
||||
#endif
|
||||
|
||||
static char master_opt[PATH_MAX]= "";
|
||||
static char slave_opt[PATH_MAX]= "";
|
||||
static char master_opt[FN_REFLEN]= "";
|
||||
static char slave_opt[FN_REFLEN]= "";
|
||||
|
||||
static char slave_master_info[PATH_MAX]= "";
|
||||
static char slave_master_info[FN_REFLEN]= "";
|
||||
|
||||
static char master_init_script[PATH_MAX]= "";
|
||||
static char slave_init_script[PATH_MAX]= "";
|
||||
static char master_init_script[FN_REFLEN]= "";
|
||||
static char slave_init_script[FN_REFLEN]= "";
|
||||
|
||||
/* OpenSSL */
|
||||
static char ca_cert[PATH_MAX];
|
||||
static char server_cert[PATH_MAX];
|
||||
static char server_key[PATH_MAX];
|
||||
static char client_cert[PATH_MAX];
|
||||
static char client_key[PATH_MAX];
|
||||
static char ca_cert[FN_REFLEN];
|
||||
static char server_cert[FN_REFLEN];
|
||||
static char server_key[FN_REFLEN];
|
||||
static char client_cert[FN_REFLEN];
|
||||
static char client_key[FN_REFLEN];
|
||||
|
||||
int total_skip= 0;
|
||||
int total_pass= 0;
|
||||
@@ -254,18 +254,18 @@ void install_db(char *datadir)
|
||||
{
|
||||
arg_list_t al;
|
||||
int err;
|
||||
char input[PATH_MAX];
|
||||
char output[PATH_MAX];
|
||||
char error[PATH_MAX];
|
||||
char input[FN_REFLEN];
|
||||
char output[FN_REFLEN];
|
||||
char error[FN_REFLEN];
|
||||
|
||||
/* input file */
|
||||
#ifdef __NETWARE__
|
||||
snprintf(input, PATH_MAX, "%s/bin/init_db.sql", base_dir);
|
||||
snprintf(input, FN_REFLEN, "%s/bin/init_db.sql", base_dir);
|
||||
#else
|
||||
snprintf(input, PATH_MAX, "%s/mysql-test/init_db.sql", base_dir);
|
||||
snprintf(input, FN_REFLEN, "%s/mysql-test/init_db.sql", base_dir);
|
||||
#endif
|
||||
snprintf(output, PATH_MAX, "%s/install.out", datadir);
|
||||
snprintf(error, PATH_MAX, "%s/install.err", datadir);
|
||||
snprintf(output, FN_REFLEN, "%s/install.out", datadir);
|
||||
snprintf(error, FN_REFLEN, "%s/install.err", datadir);
|
||||
|
||||
/* args */
|
||||
init_args(&al);
|
||||
@@ -302,10 +302,10 @@ void install_db(char *datadir)
|
||||
|
||||
void mysql_install_db()
|
||||
{
|
||||
char temp[PATH_MAX];
|
||||
char temp[FN_REFLEN];
|
||||
|
||||
/* var directory */
|
||||
snprintf(temp, PATH_MAX, "%s/var", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var", mysql_test_dir);
|
||||
|
||||
/* clean up old direcotry */
|
||||
del_tree(temp);
|
||||
@@ -315,41 +315,41 @@ void mysql_install_db()
|
||||
mkdir(temp, S_IRWXU);
|
||||
/* create subdirectories */
|
||||
mlog("Creating test-suite folders...\n");
|
||||
snprintf(temp, PATH_MAX, "%s/var/run", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/run", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, PATH_MAX, "%s/var/tmp", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/tmp", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, PATH_MAX, "%s/var/master-data", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/master-data", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, PATH_MAX, "%s/var/master-data/mysql", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/master-data/mysql", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, PATH_MAX, "%s/var/master-data/test", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/master-data/test", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, PATH_MAX, "%s/var/slave-data", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave-data", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, PATH_MAX, "%s/var/slave-data/mysql", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave-data/mysql", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
snprintf(temp, PATH_MAX, "%s/var/slave-data/test", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave-data/test", mysql_test_dir);
|
||||
mkdir(temp, S_IRWXU);
|
||||
#else
|
||||
mkdir(temp);
|
||||
/* create subdirectories */
|
||||
mlog("Creating test-suite folders...\n");
|
||||
snprintf(temp, PATH_MAX, "%s/var/run", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/run", mysql_test_dir);
|
||||
mkdir(temp);
|
||||
snprintf(temp, PATH_MAX, "%s/var/tmp", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/tmp", mysql_test_dir);
|
||||
mkdir(temp);
|
||||
snprintf(temp, PATH_MAX, "%s/var/master-data", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/master-data", mysql_test_dir);
|
||||
mkdir(temp);
|
||||
snprintf(temp, PATH_MAX, "%s/var/master-data/mysql", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/master-data/mysql", mysql_test_dir);
|
||||
mkdir(temp);
|
||||
snprintf(temp, PATH_MAX, "%s/var/master-data/test", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/master-data/test", mysql_test_dir);
|
||||
mkdir(temp);
|
||||
snprintf(temp, PATH_MAX, "%s/var/slave-data", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave-data", mysql_test_dir);
|
||||
mkdir(temp);
|
||||
snprintf(temp, PATH_MAX, "%s/var/slave-data/mysql", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave-data/mysql", mysql_test_dir);
|
||||
mkdir(temp);
|
||||
snprintf(temp, PATH_MAX, "%s/var/slave-data/test", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/var/slave-data/test", mysql_test_dir);
|
||||
mkdir(temp);
|
||||
#endif
|
||||
|
||||
@@ -372,10 +372,10 @@ void start_master()
|
||||
{
|
||||
arg_list_t al;
|
||||
int err;
|
||||
char master_out[PATH_MAX];
|
||||
char master_err[PATH_MAX];
|
||||
/* char temp[PATH_MAX]; */
|
||||
char temp2[PATH_MAX];
|
||||
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 */
|
||||
removef("%s/log.*", master_dir);
|
||||
@@ -405,7 +405,7 @@ void start_master()
|
||||
FILE *fp;
|
||||
|
||||
/* create an empty index file */
|
||||
snprintf(temp, PATH_MAX, "%s/test/t1.MYI", master_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/test/t1.MYI", master_dir);
|
||||
fp= fopen(temp, "wb+");
|
||||
|
||||
fputs("1", fp);
|
||||
@@ -418,19 +418,19 @@ void start_master()
|
||||
}
|
||||
|
||||
/* redirection files */
|
||||
snprintf(master_out, PATH_MAX, "%s/var/run/master%u.out",
|
||||
snprintf(master_out, FN_REFLEN, "%s/var/run/master%u.out",
|
||||
mysql_test_dir, restarts);
|
||||
snprintf(master_err, PATH_MAX, "%s/var/run/master%u.err",
|
||||
snprintf(master_err, FN_REFLEN, "%s/var/run/master%u.err",
|
||||
mysql_test_dir, restarts);
|
||||
#ifndef __WIN__
|
||||
snprintf(temp2,PATH_MAX,"%s/var",mysql_test_dir);
|
||||
snprintf(temp2,FN_REFLEN,"%s/var",mysql_test_dir);
|
||||
mkdir(temp2,S_IRWXU);
|
||||
snprintf(temp2,PATH_MAX,"%s/var/log",mysql_test_dir);
|
||||
snprintf(temp2,FN_REFLEN,"%s/var/log",mysql_test_dir);
|
||||
mkdir(temp2,S_IRWXU);
|
||||
#else
|
||||
snprintf(temp2,PATH_MAX,"%s/var",mysql_test_dir);
|
||||
snprintf(temp2,FN_REFLEN,"%s/var",mysql_test_dir);
|
||||
mkdir(temp2);
|
||||
snprintf(temp2,PATH_MAX,"%s/var/log",mysql_test_dir);
|
||||
snprintf(temp2,FN_REFLEN,"%s/var/log",mysql_test_dir);
|
||||
mkdir(temp2);
|
||||
#endif
|
||||
/* args */
|
||||
@@ -539,8 +539,8 @@ void start_slave()
|
||||
{
|
||||
arg_list_t al;
|
||||
int err;
|
||||
char slave_out[PATH_MAX];
|
||||
char slave_err[PATH_MAX];
|
||||
char slave_out[FN_REFLEN];
|
||||
char slave_err[FN_REFLEN];
|
||||
|
||||
/* skip? */
|
||||
if (skip_slave) return;
|
||||
@@ -568,7 +568,7 @@ void start_slave()
|
||||
if (strinstr(slave_init_script, "rpl000016-slave.sh") != 0)
|
||||
{
|
||||
/* create empty master.info file */
|
||||
snprintf(temp, PATH_MAX, "%s/master.info", slave_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/master.info", slave_dir);
|
||||
close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO));
|
||||
}
|
||||
else if (strinstr(slave_init_script, "rpl000017-slave.sh") != 0)
|
||||
@@ -576,7 +576,7 @@ void start_slave()
|
||||
FILE *fp;
|
||||
|
||||
/* create a master.info file */
|
||||
snprintf(temp, PATH_MAX, "%s/master.info", slave_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/master.info", slave_dir);
|
||||
fp= fopen(temp, "wb+");
|
||||
|
||||
fputs("master-bin.000001\n", fp);
|
||||
@@ -593,7 +593,7 @@ void start_slave()
|
||||
else if (strinstr(slave_init_script, "rpl_rotate_logs-slave.sh") != 0)
|
||||
{
|
||||
/* create empty master.info file */
|
||||
snprintf(temp, PATH_MAX, "%s/master.info", slave_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/master.info", slave_dir);
|
||||
close(open(temp, O_WRONLY | O_CREAT,S_IRWXU|S_IRWXG|S_IRWXO));
|
||||
}
|
||||
#elif !defined(__WIN__)
|
||||
@@ -602,9 +602,9 @@ void start_slave()
|
||||
}
|
||||
|
||||
/* redirection files */
|
||||
snprintf(slave_out, PATH_MAX, "%s/var/run/slave%u.out",
|
||||
snprintf(slave_out, FN_REFLEN, "%s/var/run/slave%u.out",
|
||||
mysql_test_dir, restarts);
|
||||
snprintf(slave_err, PATH_MAX, "%s/var/run/slave%u.err",
|
||||
snprintf(slave_err, FN_REFLEN, "%s/var/run/slave%u.err",
|
||||
mysql_test_dir, restarts);
|
||||
|
||||
/* args */
|
||||
@@ -859,14 +859,14 @@ int read_option(char *opt_file, char *opt)
|
||||
{
|
||||
int fd, err;
|
||||
char *p;
|
||||
char buf[PATH_MAX];
|
||||
char buf[FN_REFLEN];
|
||||
|
||||
/* copy current option */
|
||||
strncpy(buf, opt, PATH_MAX);
|
||||
strncpy(buf, opt, FN_REFLEN);
|
||||
|
||||
/* open options file */
|
||||
fd= open(opt_file, O_RDONLY);
|
||||
err= read(fd, opt, PATH_MAX);
|
||||
err= read(fd, opt, FN_REFLEN);
|
||||
close(fd);
|
||||
|
||||
if (err > 0)
|
||||
@@ -890,7 +890,7 @@ int read_option(char *opt_file, char *opt)
|
||||
/* check for $MYSQL_TEST_DIR */
|
||||
if ((p= strstr(opt, "$MYSQL_TEST_DIR")) != NULL)
|
||||
{
|
||||
char temp[PATH_MAX];
|
||||
char temp[FN_REFLEN];
|
||||
|
||||
*p= 0;
|
||||
|
||||
@@ -925,7 +925,7 @@ int read_option(char *opt_file, char *opt)
|
||||
|
||||
void run_test(char *test)
|
||||
{
|
||||
char temp[PATH_MAX];
|
||||
char temp[FN_REFLEN];
|
||||
const char *rstr;
|
||||
int skip= FALSE, ignore=FALSE;
|
||||
int restart= FALSE;
|
||||
@@ -933,13 +933,13 @@ void run_test(char *test)
|
||||
struct stat info;
|
||||
|
||||
/* skip tests in the skip list */
|
||||
snprintf(temp, PATH_MAX, " %s ", test);
|
||||
snprintf(temp, FN_REFLEN, " %s ", test);
|
||||
skip= (strinstr(skip_test, temp) != 0);
|
||||
if (skip == FALSE)
|
||||
ignore= (strinstr(ignore_test, temp) != 0);
|
||||
|
||||
snprintf(master_init_script, PATH_MAX, "%s/%s-master.sh", test_dir, test);
|
||||
snprintf(slave_init_script, PATH_MAX, "%s/%s-slave.sh", test_dir, test);
|
||||
snprintf(master_init_script, FN_REFLEN, "%s/%s-master.sh", test_dir, test);
|
||||
snprintf(slave_init_script, FN_REFLEN, "%s/%s-slave.sh", test_dir, test);
|
||||
#ifdef __WIN__
|
||||
if (! stat(master_init_script, &info))
|
||||
skip= TRUE;
|
||||
@@ -957,14 +957,14 @@ void run_test(char *test)
|
||||
}
|
||||
else if (!skip) /* skip test? */
|
||||
{
|
||||
char test_file[PATH_MAX];
|
||||
char master_opt_file[PATH_MAX];
|
||||
char slave_opt_file[PATH_MAX];
|
||||
char slave_master_info_file[PATH_MAX];
|
||||
char result_file[PATH_MAX];
|
||||
char reject_file[PATH_MAX];
|
||||
char out_file[PATH_MAX];
|
||||
char err_file[PATH_MAX];
|
||||
char test_file[FN_REFLEN];
|
||||
char master_opt_file[FN_REFLEN];
|
||||
char slave_opt_file[FN_REFLEN];
|
||||
char slave_master_info_file[FN_REFLEN];
|
||||
char result_file[FN_REFLEN];
|
||||
char reject_file[FN_REFLEN];
|
||||
char out_file[FN_REFLEN];
|
||||
char err_file[FN_REFLEN];
|
||||
int err;
|
||||
arg_list_t al;
|
||||
#ifdef __WIN__
|
||||
@@ -981,20 +981,20 @@ void run_test(char *test)
|
||||
if (flag != skip_slave) restart= TRUE;
|
||||
|
||||
/* create files */
|
||||
snprintf(master_opt_file, PATH_MAX, "%s/%s-master.opt", test_dir, test);
|
||||
snprintf(slave_opt_file, PATH_MAX, "%s/%s-slave.opt", test_dir, test);
|
||||
snprintf(slave_master_info_file, PATH_MAX, "%s/%s.slave-mi",
|
||||
snprintf(master_opt_file, FN_REFLEN, "%s/%s-master.opt", test_dir, test);
|
||||
snprintf(slave_opt_file, FN_REFLEN, "%s/%s-slave.opt", test_dir, test);
|
||||
snprintf(slave_master_info_file, FN_REFLEN, "%s/%s.slave-mi",
|
||||
test_dir, test);
|
||||
snprintf(reject_file, PATH_MAX, "%s/%s%s",
|
||||
snprintf(reject_file, FN_REFLEN, "%s/%s%s",
|
||||
result_dir, test, REJECT_SUFFIX);
|
||||
snprintf(out_file, PATH_MAX, "%s/%s%s", result_dir, test, OUT_SUFFIX);
|
||||
snprintf(err_file, PATH_MAX, "%s/%s%s", result_dir, test, ERR_SUFFIX);
|
||||
snprintf(out_file, FN_REFLEN, "%s/%s%s", result_dir, test, OUT_SUFFIX);
|
||||
snprintf(err_file, FN_REFLEN, "%s/%s%s", result_dir, test, ERR_SUFFIX);
|
||||
|
||||
/* netware specific files */
|
||||
snprintf(test_file, PATH_MAX, "%s/%s%s", test_dir, test, NW_TEST_SUFFIX);
|
||||
snprintf(test_file, FN_REFLEN, "%s/%s%s", test_dir, test, NW_TEST_SUFFIX);
|
||||
if (stat(test_file, &info))
|
||||
{
|
||||
snprintf(test_file, PATH_MAX, "%s/%s%s", test_dir, test, TEST_SUFFIX);
|
||||
snprintf(test_file, FN_REFLEN, "%s/%s%s", test_dir, test, TEST_SUFFIX);
|
||||
if (access(test_file,0))
|
||||
{
|
||||
printf("Invalid test name %s, %s file not found\n",test,test_file);
|
||||
@@ -1002,11 +1002,11 @@ void run_test(char *test)
|
||||
}
|
||||
}
|
||||
|
||||
snprintf(result_file, PATH_MAX, "%s/%s%s",
|
||||
snprintf(result_file, FN_REFLEN, "%s/%s%s",
|
||||
result_dir, test, NW_RESULT_SUFFIX);
|
||||
if (stat(result_file, &info))
|
||||
{
|
||||
snprintf(result_file, PATH_MAX, "%s/%s%s",
|
||||
snprintf(result_file, FN_REFLEN, "%s/%s%s",
|
||||
result_dir, test, RESULT_SUFFIX);
|
||||
}
|
||||
|
||||
@@ -1248,8 +1248,8 @@ void die(const char *msg)
|
||||
|
||||
void setup(char *file __attribute__((unused)))
|
||||
{
|
||||
char temp[PATH_MAX];
|
||||
char file_path[PATH_MAX*2];
|
||||
char temp[FN_REFLEN];
|
||||
char file_path[FN_REFLEN*2];
|
||||
char *p;
|
||||
int position;
|
||||
|
||||
@@ -1257,14 +1257,14 @@ void setup(char *file __attribute__((unused)))
|
||||
#ifdef __WIN__
|
||||
_putenv( "TZ=GMT-3" );
|
||||
#else
|
||||
setenv("TZ", "GMT-3", TRUE);
|
||||
putenv((char *)"TZ=GMT-3");
|
||||
#endif
|
||||
/* find base dir */
|
||||
#ifdef __NETWARE__
|
||||
strcpy(temp, strlwr(file));
|
||||
while ((p= strchr(temp, '\\')) != NULL) *p= '/';
|
||||
#else
|
||||
getcwd(temp, PATH_MAX);
|
||||
getcwd(temp, FN_REFLEN);
|
||||
position= strlen(temp);
|
||||
temp[position]= '/';
|
||||
temp[position+1]= 0;
|
||||
@@ -1284,100 +1284,100 @@ void setup(char *file __attribute__((unused)))
|
||||
|
||||
#ifdef __NETWARE__
|
||||
/* setup paths */
|
||||
snprintf(bin_dir, PATH_MAX, "%s/bin", base_dir);
|
||||
snprintf(mysql_test_dir, PATH_MAX, "%s/mysql-test", base_dir);
|
||||
snprintf(test_dir, PATH_MAX, "%s/t", mysql_test_dir);
|
||||
snprintf(mysql_tmp_dir, PATH_MAX, "%s/var/tmp", mysql_test_dir);
|
||||
snprintf(result_dir, PATH_MAX, "%s/r", mysql_test_dir);
|
||||
snprintf(master_dir, PATH_MAX, "%s/var/master-data", mysql_test_dir);
|
||||
snprintf(slave_dir, PATH_MAX, "%s/var/slave-data", mysql_test_dir);
|
||||
snprintf(lang_dir, PATH_MAX, "%s/share/english", base_dir);
|
||||
snprintf(char_dir, PATH_MAX, "%s/share/charsets", base_dir);
|
||||
snprintf(bin_dir, FN_REFLEN, "%s/bin", base_dir);
|
||||
snprintf(mysql_test_dir, FN_REFLEN, "%s/mysql-test", base_dir);
|
||||
snprintf(test_dir, FN_REFLEN, "%s/t", mysql_test_dir);
|
||||
snprintf(mysql_tmp_dir, FN_REFLEN, "%s/var/tmp", mysql_test_dir);
|
||||
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(lang_dir, FN_REFLEN, "%s/share/english", base_dir);
|
||||
snprintf(char_dir, FN_REFLEN, "%s/share/charsets", base_dir);
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
use_openssl= TRUE;
|
||||
#endif /* HAVE_OPENSSL */
|
||||
|
||||
/* OpenSSL paths */
|
||||
snprintf(ca_cert, PATH_MAX, "%s/SSL/cacert.pem", base_dir);
|
||||
snprintf(server_cert, PATH_MAX, "%s/SSL/server-cert.pem", base_dir);
|
||||
snprintf(server_key, PATH_MAX, "%s/SSL/server-key.pem", base_dir);
|
||||
snprintf(client_cert, PATH_MAX, "%s/SSL/client-cert.pem", base_dir);
|
||||
snprintf(client_key, PATH_MAX, "%s/SSL/client-key.pem", base_dir);
|
||||
snprintf(ca_cert, FN_REFLEN, "%s/SSL/cacert.pem", base_dir);
|
||||
snprintf(server_cert, FN_REFLEN, "%s/SSL/server-cert.pem", base_dir);
|
||||
snprintf(server_key, FN_REFLEN, "%s/SSL/server-key.pem", base_dir);
|
||||
snprintf(client_cert, FN_REFLEN, "%s/SSL/client-cert.pem", base_dir);
|
||||
snprintf(client_key, FN_REFLEN, "%s/SSL/client-key.pem", base_dir);
|
||||
|
||||
/* setup files */
|
||||
snprintf(mysqld_file, PATH_MAX, "%s/mysqld", bin_dir);
|
||||
snprintf(mysqltest_file, PATH_MAX, "%s/mysqltest", bin_dir);
|
||||
snprintf(mysqladmin_file, PATH_MAX, "%s/mysqladmin", bin_dir);
|
||||
snprintf(master_pid, PATH_MAX, "%s/var/run/master.pid", mysql_test_dir);
|
||||
snprintf(slave_pid, PATH_MAX, "%s/var/run/slave.pid", mysql_test_dir);
|
||||
snprintf(mysqld_file, FN_REFLEN, "%s/mysqld", bin_dir);
|
||||
snprintf(mysqltest_file, FN_REFLEN, "%s/mysqltest", bin_dir);
|
||||
snprintf(mysqladmin_file, FN_REFLEN, "%s/mysqladmin", bin_dir);
|
||||
snprintf(master_pid, FN_REFLEN, "%s/var/run/master.pid", mysql_test_dir);
|
||||
snprintf(slave_pid, FN_REFLEN, "%s/var/run/slave.pid", mysql_test_dir);
|
||||
#elif __WIN__
|
||||
/* setup paths */
|
||||
#ifdef _DEBUG
|
||||
snprintf(bin_dir, PATH_MAX, "%s/client_debug", base_dir);
|
||||
snprintf(bin_dir, FN_REFLEN, "%s/client_debug", base_dir);
|
||||
#else
|
||||
snprintf(bin_dir, PATH_MAX, "%s/client_release", base_dir);
|
||||
snprintf(bin_dir, FN_REFLEN, "%s/client_release", base_dir);
|
||||
#endif
|
||||
snprintf(mysql_test_dir, PATH_MAX, "%s/mysql-test", base_dir);
|
||||
snprintf(test_dir, PATH_MAX, "%s/t", mysql_test_dir);
|
||||
snprintf(mysql_tmp_dir, PATH_MAX, "%s/var/tmp", mysql_test_dir);
|
||||
snprintf(result_dir, PATH_MAX, "%s/r", mysql_test_dir);
|
||||
snprintf(master_dir, PATH_MAX, "%s/var/master-data", mysql_test_dir);
|
||||
snprintf(slave_dir, PATH_MAX, "%s/var/slave-data", mysql_test_dir);
|
||||
snprintf(lang_dir, PATH_MAX, "%s/share/english", base_dir);
|
||||
snprintf(char_dir, PATH_MAX, "%s/share/charsets", base_dir);
|
||||
snprintf(mysql_test_dir, FN_REFLEN, "%s/mysql-test", base_dir);
|
||||
snprintf(test_dir, FN_REFLEN, "%s/t", mysql_test_dir);
|
||||
snprintf(mysql_tmp_dir, FN_REFLEN, "%s/var/tmp", mysql_test_dir);
|
||||
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(lang_dir, FN_REFLEN, "%s/share/english", base_dir);
|
||||
snprintf(char_dir, FN_REFLEN, "%s/share/charsets", base_dir);
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
use_openssl= TRUE;
|
||||
#endif /* HAVE_OPENSSL */
|
||||
|
||||
/* OpenSSL paths */
|
||||
snprintf(ca_cert, PATH_MAX, "%s/SSL/cacert.pem", base_dir);
|
||||
snprintf(server_cert, PATH_MAX, "%s/SSL/server-cert.pem", base_dir);
|
||||
snprintf(server_key, PATH_MAX, "%s/SSL/server-key.pem", base_dir);
|
||||
snprintf(client_cert, PATH_MAX, "%s/SSL/client-cert.pem", base_dir);
|
||||
snprintf(client_key, PATH_MAX, "%s/SSL/client-key.pem", base_dir);
|
||||
snprintf(ca_cert, FN_REFLEN, "%s/SSL/cacert.pem", base_dir);
|
||||
snprintf(server_cert, FN_REFLEN, "%s/SSL/server-cert.pem", base_dir);
|
||||
snprintf(server_key, FN_REFLEN, "%s/SSL/server-key.pem", base_dir);
|
||||
snprintf(client_cert, FN_REFLEN, "%s/SSL/client-cert.pem", base_dir);
|
||||
snprintf(client_key, FN_REFLEN, "%s/SSL/client-key.pem", base_dir);
|
||||
|
||||
/* setup files */
|
||||
snprintf(mysqld_file, PATH_MAX, "%s/mysqld.exe", bin_dir);
|
||||
snprintf(mysqltest_file, PATH_MAX, "%s/mysqltest.exe", bin_dir);
|
||||
snprintf(mysqladmin_file, PATH_MAX, "%s/mysqladmin.exe", bin_dir);
|
||||
snprintf(mysqld_file, FN_REFLEN, "%s/mysqld.exe", bin_dir);
|
||||
snprintf(mysqltest_file, FN_REFLEN, "%s/mysqltest.exe", bin_dir);
|
||||
snprintf(mysqladmin_file, FN_REFLEN, "%s/mysqladmin.exe", bin_dir);
|
||||
#else
|
||||
/* setup paths */
|
||||
snprintf(bin_dir, PATH_MAX, "%s/client", base_dir);
|
||||
snprintf(mysql_test_dir, PATH_MAX, "%s/mysql-test", base_dir);
|
||||
snprintf(test_dir, PATH_MAX, "%s/t", mysql_test_dir);
|
||||
snprintf(mysql_tmp_dir, PATH_MAX, "%s/var/tmp", mysql_test_dir);
|
||||
snprintf(result_dir, PATH_MAX, "%s/r", mysql_test_dir);
|
||||
snprintf(master_dir, PATH_MAX, "%s/var/master-data", mysql_test_dir);
|
||||
snprintf(slave_dir, PATH_MAX, "%s/var/slave-data", mysql_test_dir);
|
||||
snprintf(lang_dir, PATH_MAX, "%s/sql/share/english", base_dir);
|
||||
snprintf(char_dir, PATH_MAX, "%s/sql/share/charsets", base_dir);
|
||||
snprintf(bin_dir, FN_REFLEN, "%s/client", base_dir);
|
||||
snprintf(mysql_test_dir, FN_REFLEN, "%s/mysql-test", base_dir);
|
||||
snprintf(test_dir, FN_REFLEN, "%s/t", mysql_test_dir);
|
||||
snprintf(mysql_tmp_dir, FN_REFLEN, "%s/var/tmp", mysql_test_dir);
|
||||
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(lang_dir, FN_REFLEN, "%s/sql/share/english", base_dir);
|
||||
snprintf(char_dir, FN_REFLEN, "%s/sql/share/charsets", base_dir);
|
||||
|
||||
#ifdef HAVE_OPENSSL
|
||||
use_openssl= TRUE;
|
||||
#endif /* HAVE_OPENSSL */
|
||||
|
||||
/* OpenSSL paths */
|
||||
snprintf(ca_cert, PATH_MAX, "%s/SSL/cacert.pem", base_dir);
|
||||
snprintf(server_cert, PATH_MAX, "%s/SSL/server-cert.pem", base_dir);
|
||||
snprintf(server_key, PATH_MAX, "%s/SSL/server-key.pem", base_dir);
|
||||
snprintf(client_cert, PATH_MAX, "%s/SSL/client-cert.pem", base_dir);
|
||||
snprintf(client_key, PATH_MAX, "%s/SSL/client-key.pem", base_dir);
|
||||
snprintf(ca_cert, FN_REFLEN, "%s/SSL/cacert.pem", base_dir);
|
||||
snprintf(server_cert, FN_REFLEN, "%s/SSL/server-cert.pem", base_dir);
|
||||
snprintf(server_key, FN_REFLEN, "%s/SSL/server-key.pem", base_dir);
|
||||
snprintf(client_cert, FN_REFLEN, "%s/SSL/client-cert.pem", base_dir);
|
||||
snprintf(client_key, FN_REFLEN, "%s/SSL/client-key.pem", base_dir);
|
||||
|
||||
/* setup files */
|
||||
snprintf(mysqld_file, PATH_MAX, "%s/sql/mysqld", base_dir);
|
||||
snprintf(mysqltest_file, PATH_MAX, "%s/mysqltest", bin_dir);
|
||||
snprintf(mysqladmin_file, PATH_MAX, "%s/mysqladmin", bin_dir);
|
||||
snprintf(master_pid, PATH_MAX, "%s/var/run/master.pid", mysql_test_dir);
|
||||
snprintf(slave_pid, PATH_MAX, "%s/var/run/slave.pid", mysql_test_dir);
|
||||
snprintf(mysqld_file, FN_REFLEN, "%s/sql/mysqld", base_dir);
|
||||
snprintf(mysqltest_file, FN_REFLEN, "%s/mysqltest", bin_dir);
|
||||
snprintf(mysqladmin_file, FN_REFLEN, "%s/mysqladmin", bin_dir);
|
||||
snprintf(master_pid, FN_REFLEN, "%s/var/run/master.pid", mysql_test_dir);
|
||||
snprintf(slave_pid, FN_REFLEN, "%s/var/run/slave.pid", mysql_test_dir);
|
||||
|
||||
snprintf(master_socket,PATH_MAX, "%s/var/tmp/master.sock", mysql_test_dir);
|
||||
snprintf(slave_socket,PATH_MAX, "%s/var/tmp/slave.sock", mysql_test_dir);
|
||||
snprintf(master_socket,FN_REFLEN, "%s/var/tmp/master.sock", mysql_test_dir);
|
||||
snprintf(slave_socket,FN_REFLEN, "%s/var/tmp/slave.sock", mysql_test_dir);
|
||||
|
||||
#endif
|
||||
/* create log file */
|
||||
snprintf(temp, PATH_MAX, "%s/mysql-test-run.log", mysql_test_dir);
|
||||
snprintf(temp, FN_REFLEN, "%s/mysql-test-run.log", mysql_test_dir);
|
||||
if ((log_fd= fopen(temp, "w+")) == NULL)
|
||||
{
|
||||
log_errno("Unable to create log file.");
|
||||
@@ -1386,46 +1386,47 @@ void setup(char *file __attribute__((unused)))
|
||||
/* prepare skip test list */
|
||||
while ((p= strchr(skip_test, ',')) != NULL) *p= ' ';
|
||||
strcpy(temp, strlwr(skip_test));
|
||||
snprintf(skip_test, PATH_MAX, " %s ", temp);
|
||||
snprintf(skip_test, FN_REFLEN, " %s ", temp);
|
||||
|
||||
/* environment */
|
||||
#ifdef __NETWARE__
|
||||
setenv("MYSQL_TEST_DIR", mysql_test_dir, 1);
|
||||
snprintf(file_path, PATH_MAX*2,
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"%s/client/mysqldump --no-defaults -u root --port=%u",
|
||||
bin_dir, master_port);
|
||||
setenv("MYSQL_DUMP", file_path, 1);
|
||||
snprintf(file_path, PATH_MAX*2,
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"%s/client/mysqlbinlog --no-defaults --local-load=%s",
|
||||
bin_dir, mysql_tmp_dir);
|
||||
setenv("MYSQL_BINLOG", file_path, 1);
|
||||
#elif __WIN__
|
||||
snprintf(file_path,MAX_PATH,"MYSQL_TEST_DIR=%s",mysql_test_dir);
|
||||
snprintf(file_path,FN_REFLEN,"MYSQL_TEST_DIR=%s",mysql_test_dir);
|
||||
_putenv(file_path);
|
||||
snprintf(file_path, PATH_MAX*2,
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL_DUMP=%s/mysqldump.exe --no-defaults -u root --port=%u",
|
||||
bin_dir, master_port);
|
||||
_putenv(file_path);
|
||||
snprintf(file_path, PATH_MAX*2,
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL_BINLOG=%s/mysqlbinlog.exe --no-defaults --local-load=%s",
|
||||
bin_dir, mysql_tmp_dir);
|
||||
_putenv(file_path);
|
||||
#else
|
||||
setenv("MYSQL_TEST_DIR", mysql_test_dir, 1);
|
||||
snprintf(file_path, PATH_MAX*2,
|
||||
"%s/mysqldump --no-defaults -u root --port=%u --socket=%s",
|
||||
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);
|
||||
setenv("MYSQL_DUMP", file_path, 1);
|
||||
snprintf(file_path, PATH_MAX*2,
|
||||
"%s/mysqlbinlog --no-defaults --local-load=%s",
|
||||
putenv(file_path);
|
||||
snprintf(file_path, FN_REFLEN*2,
|
||||
"MYSQL_BINLOG=%s/mysqlbinlog --no-defaults --local-load=%s",
|
||||
bin_dir, mysql_tmp_dir);
|
||||
setenv("MYSQL_BINLOG", file_path, 1);
|
||||
putenv(file_path);
|
||||
#endif
|
||||
|
||||
#ifndef __WIN__
|
||||
setenv("MASTER_MYPORT", "9306", 1);
|
||||
setenv("SLAVE_MYPORT", "9307", 1);
|
||||
setenv("MYSQL_TCP_PORT", "3306", 1);
|
||||
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");
|
||||
@@ -1461,7 +1462,7 @@ int main(int argc, char **argv)
|
||||
temp= strdup(strchr(argv[1],'=') + 1);
|
||||
for (token=str_tok(temp, ","); token != NULL; token=str_tok(NULL, ","))
|
||||
{
|
||||
if (strlen(ignore_test) + strlen(token) + 2 <= PATH_MAX-1)
|
||||
if (strlen(ignore_test) + strlen(token) + 2 <= FN_REFLEN-1)
|
||||
sprintf(ignore_test+strlen(ignore_test), " %s ", token);
|
||||
else
|
||||
{
|
||||
@@ -1507,38 +1508,35 @@ int main(int argc, char **argv)
|
||||
{
|
||||
/* run all tests */
|
||||
#ifndef __WIN__
|
||||
struct dirent **namelist;
|
||||
int i,n;
|
||||
char test[NAME_MAX];
|
||||
char *p;
|
||||
struct dirent *entry;
|
||||
DIR *parent;
|
||||
char test[FN_LEN];
|
||||
int position;
|
||||
|
||||
n= scandir(test_dir, &namelist, 0, alphasort);
|
||||
if (n < 0)
|
||||
/* FIXME are we sure the list is sorted if using readdir()? */
|
||||
if ((parent= opendir(test_dir)) == NULL) /* Not thread safe */
|
||||
die("Unable to open tests directory.");
|
||||
else
|
||||
{
|
||||
for (i= 0; i < n; i++)
|
||||
while ((entry= readdir(parent)) != NULL) /* Not thread safe */
|
||||
{
|
||||
strcpy(test, strlwr(namelist[i]->d_name));
|
||||
strcpy(test, strlwr(entry->d_name));
|
||||
/* find the test suffix */
|
||||
if ((position= strinstr(test, TEST_SUFFIX)) != 0)
|
||||
{
|
||||
p= test + position - 1;
|
||||
/* null terminate at the suffix */
|
||||
*p= 0;
|
||||
*(test + position - 1)= '\0';
|
||||
/* run test */
|
||||
run_test(test);
|
||||
}
|
||||
free(namelist[n]);
|
||||
}
|
||||
free(namelist);
|
||||
closedir(parent);
|
||||
}
|
||||
#else
|
||||
struct _finddata_t dir;
|
||||
intptr_t handle;
|
||||
char test[NAME_MAX];
|
||||
char mask[PATH_MAX];
|
||||
char test[FN_LEN];
|
||||
char mask[FN_REFLEN];
|
||||
char *p;
|
||||
int position;
|
||||
char **names= 0;
|
||||
@@ -1549,7 +1547,7 @@ int main(int argc, char **argv)
|
||||
/* single test */
|
||||
single_test= FALSE;
|
||||
|
||||
snprintf(mask,MAX_PATH,"%s/*.test",test_dir);
|
||||
snprintf(mask,FN_REFLEN,"%s/*.test",test_dir);
|
||||
|
||||
if ((handle=_findfirst(mask,&dir)) == -1L)
|
||||
{
|
||||
@@ -1574,7 +1572,7 @@ int main(int argc, char **argv)
|
||||
*p= 0;
|
||||
|
||||
/* insert test */
|
||||
*names= malloc(PATH_MAX);
|
||||
*names= malloc(FN_REFLEN);
|
||||
strcpy(*names,test);
|
||||
names++;
|
||||
name_index++;
|
||||
|
@@ -13,6 +13,8 @@ SUFFIXES = .sh
|
||||
.sh:
|
||||
@RM@ -f $@ $@-t
|
||||
@SED@ \
|
||||
-e 's!@''ndb_port''@!$(ndb_port)!g' \
|
||||
-e 's!@''ndb_port_base''@!$(ndb_port_base)!g' \
|
||||
-e 's!@''ndbbindir''@!$(ndbbindir)!g' \
|
||||
-e 's!@''ndbtoolsdir''@!$(ndbtoolsdir)!g' \
|
||||
$< > $@-t
|
||||
|
@@ -5,7 +5,8 @@
|
||||
# This scripts starts the table handler ndbcluster
|
||||
|
||||
# configurable parameters, make sure to change in mysqlcluterd as well
|
||||
port_base="2200"
|
||||
port=@ndb_port@
|
||||
port_base=@ndb_port_base@
|
||||
fsdir=`pwd`
|
||||
# end configurable parameters
|
||||
|
||||
@@ -22,6 +23,7 @@ if [ -d ../sql ] ; then
|
||||
exec_ndb=$ndbtop/src/kernel/ndbd
|
||||
exec_mgmtsrvr=$ndbtop/src/mgmsrv/ndb_mgmd
|
||||
exec_waiter=$ndbtop/tools/ndb_waiter
|
||||
exec_test=$ndbtop/tools/ndb_test_platform
|
||||
exec_mgmtclient=$ndbtop/src/mgmclient/ndb_mgm
|
||||
else
|
||||
BINARY_DIST=1
|
||||
@@ -34,9 +36,15 @@ else
|
||||
exec_mgmtsrvr=$BASEDIR/bin/ndb_mgmd
|
||||
fi
|
||||
exec_waiter=$BASEDIR/bin/ndb_waiter
|
||||
exec_test=$BASEDIR/bin/ndb_test_platform
|
||||
exec_mgmtclient=$BASEDIR/bin/ndb_mgm
|
||||
fi
|
||||
|
||||
if $exec_test ; then :; else
|
||||
echo "ndb not correctly compiled to support this platform"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
pidfile=ndbcluster.pid
|
||||
cfgfile=Ndb.cfg
|
||||
stop_ndb=
|
||||
@@ -77,6 +85,9 @@ while test $# -gt 0; do
|
||||
--data-dir=*)
|
||||
fsdir=`echo "$1" | sed -e "s;--data-dir=;;"`
|
||||
;;
|
||||
--port=*)
|
||||
port=`echo "$1" | sed -e "s;--port=;;"`
|
||||
;;
|
||||
--port-base=*)
|
||||
port_base=`echo "$1" | sed -e "s;--port-base=;;"`
|
||||
;;
|
||||
@@ -87,7 +98,7 @@ while test $# -gt 0; do
|
||||
shift
|
||||
done
|
||||
|
||||
fs_ndb="$fsdir/ndbcluster-$port_base"
|
||||
fs_ndb="$fsdir/ndbcluster-$port"
|
||||
|
||||
NDB_HOME=
|
||||
if [ ! -x "$fsdir" ]; then
|
||||
@@ -113,7 +124,7 @@ exec_ndb="$exec_ndb --no-defaults"
|
||||
exec_waiter="$exec_waiter --no-defaults"
|
||||
|
||||
ndb_host="localhost"
|
||||
ndb_mgmd_port=$port_base
|
||||
ndb_mgmd_port=$port
|
||||
NDB_CONNECTSTRING="host=$ndb_host:$ndb_mgmd_port"
|
||||
export NDB_CONNECTSTRING
|
||||
|
||||
@@ -151,10 +162,6 @@ if [ -d "$fs_ndb" ]; then :; else
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# set som help variables
|
||||
|
||||
port_transporter=`expr $ndb_mgmd_port + 2`
|
||||
|
||||
# Start management server as deamon
|
||||
|
||||
# Edit file system path and ports in config file
|
||||
@@ -169,7 +176,7 @@ sed \
|
||||
-e s,"CHOOSE_HOSTNAME_".*,"$ndb_host",g \
|
||||
-e s,"CHOOSE_FILESYSTEM","$fs_ndb",g \
|
||||
-e s,"CHOOSE_PORT_MGM","$ndb_mgmd_port",g \
|
||||
-e s,"CHOOSE_PORT_TRANSPORTER","$port_transporter",g \
|
||||
-e s,"CHOOSE_PORT_TRANSPORTER","$port_base",g \
|
||||
< ndb/ndb_config_2_node.ini \
|
||||
> "$fs_ndb/config.ini"
|
||||
fi
|
||||
|
@@ -483,3 +483,13 @@ ERROR 42000: Incorrect table name 't1\\'
|
||||
rename table t1 to `t1\\`;
|
||||
ERROR 42000: Incorrect table name 't1\\'
|
||||
drop table t1;
|
||||
create table t1 (a text) character set koi8r;
|
||||
insert into t1 values (_koi8r'<27><><EFBFBD><EFBFBD>');
|
||||
select hex(a) from t1;
|
||||
hex(a)
|
||||
D4C5D3D4
|
||||
alter table t1 convert to character set cp1251;
|
||||
select hex(a) from t1;
|
||||
hex(a)
|
||||
F2E5F1F2
|
||||
drop table t1;
|
||||
|
15
mysql-test/r/consistent_snapshot.result
Normal file
15
mysql-test/r/consistent_snapshot.result
Normal file
@@ -0,0 +1,15 @@
|
||||
drop table if exists t1;
|
||||
create table t1 (a int) engine=innodb;
|
||||
start transaction with consistent snapshot;
|
||||
insert into t1 values(1);
|
||||
select * from t1;
|
||||
a
|
||||
commit;
|
||||
delete from t1;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
commit;
|
||||
drop table t1;
|
@@ -126,3 +126,43 @@ Field Type Null Key Default Extra
|
||||
a char(1)
|
||||
b enum('<27><>','<27><>') YES NULL
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1
|
||||
(
|
||||
a INTEGER NOT NULL,
|
||||
b VARCHAR(50) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (a),
|
||||
KEY b (b(10))
|
||||
) TYPE=InnoDB CHARACTER SET 'ujis' COLLATE 'ujis_japanese_ci';
|
||||
INSERT INTO t1 (a, b) VALUES (0, 'aaabbbcccddd');
|
||||
INSERT INTO t1 (a, b) VALUES (1, 'eeefffggghhh');
|
||||
INSERT INTO t1 (a, b) VALUES (2, 'iiijjjkkkl');
|
||||
SELECT t1.* FROM t1 WHERE b='aaabbbcccddd' ORDER BY a;
|
||||
a b
|
||||
0 aaabbbcccddd
|
||||
SELECT t1.* FROM t1 WHERE b='eeefffggghhh' ORDER BY a;
|
||||
a b
|
||||
1 eeefffggghhh
|
||||
SELECT t1.* FROM t1 WHERE b='iiijjjkkkl' ORDER BY a;
|
||||
a b
|
||||
2 iiijjjkkkl
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1
|
||||
(
|
||||
a INTEGER NOT NULL,
|
||||
b VARCHAR(50) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (a),
|
||||
KEY b (b(10))
|
||||
) TYPE=MyISAM CHARACTER SET 'ujis' COLLATE 'ujis_japanese_ci';
|
||||
INSERT INTO t1 (a, b) VALUES (0, 'aaabbbcccddd');
|
||||
INSERT INTO t1 (a, b) VALUES (1, 'eeefffggghhh');
|
||||
INSERT INTO t1 (a, b) VALUES (2, 'iiijjjkkkl');
|
||||
SELECT t1.* FROM t1 WHERE b='aaabbbcccddd' ORDER BY a;
|
||||
a b
|
||||
0 aaabbbcccddd
|
||||
SELECT t1.* FROM t1 WHERE b='eeefffggghhh' ORDER BY a;
|
||||
a b
|
||||
1 eeefffggghhh
|
||||
SELECT t1.* FROM t1 WHERE b='iiijjjkkkl' ORDER BY a;
|
||||
a b
|
||||
2 iiijjjkkkl
|
||||
DROP TABLE t1;
|
||||
|
@@ -201,6 +201,9 @@ hex(unhex("1")) hex(unhex("12")) hex(unhex("123")) hex(unhex("1234")) hex(unhex(
|
||||
select length(unhex(md5("abrakadabra")));
|
||||
length(unhex(md5("abrakadabra")))
|
||||
16
|
||||
select concat('a', quote(NULL));
|
||||
concat('a', quote(NULL))
|
||||
aNULL
|
||||
select reverse("");
|
||||
reverse("")
|
||||
|
||||
@@ -312,7 +315,7 @@ insert into t1 values ('one'),(NULL),('two'),('four');
|
||||
select a, quote(a), isnull(quote(a)), quote(a) is null, ifnull(quote(a), 'n') from t1;
|
||||
a quote(a) isnull(quote(a)) quote(a) is null ifnull(quote(a), 'n')
|
||||
one 'one' 0 0 'one'
|
||||
NULL NULL 1 1 n
|
||||
NULL NULL 0 0 NULL
|
||||
two 'two' 0 0 'two'
|
||||
four 'four' 0 0 'four'
|
||||
drop table t1;
|
||||
|
@@ -134,6 +134,31 @@ ERROR HY000: Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
|
||||
select 1;
|
||||
1
|
||||
1
|
||||
insert into mysql.user (host, user) values ('localhost', 'test11');
|
||||
insert into mysql.db (host, db, user, select_priv) values
|
||||
('localhost', 'a%', 'test11', 'Y'), ('localhost', 'ab%', 'test11', 'Y');
|
||||
alter table mysql.db order by db asc;
|
||||
flush privileges;
|
||||
show grants for test11@localhost;
|
||||
Grants for test11@localhost
|
||||
GRANT USAGE ON *.* TO 'test11'@'localhost'
|
||||
GRANT SELECT ON `ab%`.* TO 'test11'@'localhost'
|
||||
GRANT SELECT ON `a%`.* TO 'test11'@'localhost'
|
||||
alter table mysql.db order by db desc;
|
||||
flush privileges;
|
||||
show grants for test11@localhost;
|
||||
Grants for test11@localhost
|
||||
GRANT USAGE ON *.* TO 'test11'@'localhost'
|
||||
GRANT SELECT ON `ab%`.* TO 'test11'@'localhost'
|
||||
GRANT SELECT ON `a%`.* TO 'test11'@'localhost'
|
||||
delete from mysql.user where user='test11';
|
||||
delete from mysql.db where user='test11';
|
||||
create database mysqltest1;
|
||||
grant usage on mysqltest1.* to test6123 identified by 'magic123';
|
||||
select host,db,user,select_priv,insert_priv from mysql.db where db="mysqltest1";
|
||||
host db user select_priv insert_priv
|
||||
delete from mysql.user where user='test6123';
|
||||
drop database mysqltest1;
|
||||
create table t1 (a int);
|
||||
grant ALL PRIVILEGES on *.* to drop_user2@localhost with GRANT OPTION;
|
||||
show grants for drop_user2@localhost;
|
||||
@@ -229,25 +254,6 @@ GRANT SELECT (
|
||||
REVOKE SELECT (<28><><EFBFBD>) ON <20><>.<2E><><EFBFBD> FROM <20><><EFBFBD><EFBFBD>@localhost;
|
||||
DROP DATABASE <20><>;
|
||||
SET NAMES latin1;
|
||||
insert into mysql.user (host, user) values ('localhost', 'test11');
|
||||
insert into mysql.db (host, db, user, select_priv) values
|
||||
('localhost', 'a%', 'test11', 'Y'), ('localhost', 'ab%', 'test11', 'Y');
|
||||
alter table mysql.db order by db asc;
|
||||
flush privileges;
|
||||
show grants for test11@localhost;
|
||||
Grants for test11@localhost
|
||||
GRANT USAGE ON *.* TO 'test11'@'localhost'
|
||||
GRANT SELECT ON `ab%`.* TO 'test11'@'localhost'
|
||||
GRANT SELECT ON `a%`.* TO 'test11'@'localhost'
|
||||
alter table mysql.db order by db desc;
|
||||
flush privileges;
|
||||
show grants for test11@localhost;
|
||||
Grants for test11@localhost
|
||||
GRANT USAGE ON *.* TO 'test11'@'localhost'
|
||||
GRANT SELECT ON `ab%`.* TO 'test11'@'localhost'
|
||||
GRANT SELECT ON `a%`.* TO 'test11'@'localhost'
|
||||
delete from mysql.user where user='test11';
|
||||
delete from mysql.db where user='test11';
|
||||
USE test;
|
||||
CREATE TABLE t1 (a int );
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
|
2
mysql-test/r/have_moscow_leap_timezone.require
Normal file
2
mysql-test/r/have_moscow_leap_timezone.require
Normal file
@@ -0,0 +1,2 @@
|
||||
from_unixtime(1072904422)
|
||||
2004-01-01 00:00:00
|
@@ -1,4 +1,4 @@
|
||||
drop table if exists t1,t2;
|
||||
drop table if exists t1,t2,t3;
|
||||
create table t1 (a int);
|
||||
select count(a) as b from t1 where a=0 having b > 0;
|
||||
b
|
||||
@@ -128,3 +128,203 @@ id description c
|
||||
1 test 0
|
||||
2 test2 0
|
||||
drop table t1,t2,t3;
|
||||
create table t1 (col1 int, col2 varchar(5), col_t1 int);
|
||||
create table t2 (col1 int, col2 varchar(5), col_t2 int);
|
||||
create table t3 (col1 int, col2 varchar(5), col_t3 int);
|
||||
insert into t1 values(10,'hello',10);
|
||||
insert into t1 values(20,'hello',20);
|
||||
insert into t1 values(30,'hello',30);
|
||||
insert into t1 values(10,'bye',10);
|
||||
insert into t1 values(10,'sam',10);
|
||||
insert into t1 values(10,'bob',10);
|
||||
insert into t2 select * from t1;
|
||||
insert into t3 select * from t1;
|
||||
select count(*) from t1 group by col1 having col1 = 10;
|
||||
count(*)
|
||||
4
|
||||
select count(*) as count_col1 from t1 group by col1 having col1 = 10;
|
||||
count_col1
|
||||
4
|
||||
select count(*) as count_col1 from t1 as tmp1 group by col1 having col1 = 10;
|
||||
count_col1
|
||||
4
|
||||
select count(*) from t1 group by col2 having col2 = 'hello';
|
||||
count(*)
|
||||
3
|
||||
select count(*) from t1 group by col2 having col1 = 10;
|
||||
ERROR 42S22: Unknown column 'col1' in 'having clause'
|
||||
select col1 as count_col1 from t1 as tmp1 group by col1 having col1 = 10;
|
||||
count_col1
|
||||
10
|
||||
select col1 as count_col1 from t1 as tmp1 group by col1 having count_col1 = 10;
|
||||
count_col1
|
||||
10
|
||||
select col1 as count_col1 from t1 as tmp1 group by count_col1 having col1 = 10;
|
||||
count_col1
|
||||
10
|
||||
select col1 as count_col1 from t1 as tmp1 group by count_col1 having count_col1 = 10;
|
||||
count_col1
|
||||
10
|
||||
select col1 as count_col1,col2 from t1 as tmp1 group by col1,col2 having col1 = 10;
|
||||
count_col1 col2
|
||||
10 bob
|
||||
10 bye
|
||||
10 hello
|
||||
10 sam
|
||||
select col1 as count_col1,col2 from t1 as tmp1 group by col1,col2 having count_col1 = 10;
|
||||
count_col1 col2
|
||||
10 bob
|
||||
10 bye
|
||||
10 hello
|
||||
10 sam
|
||||
select col1 as count_col1,col2 from t1 as tmp1 group by col1,col2 having col2 = 'hello';
|
||||
count_col1 col2
|
||||
10 hello
|
||||
20 hello
|
||||
30 hello
|
||||
select col1 as count_col1,col2 as group_col2 from t1 as tmp1 group by col1,col2 having group_col2 = 'hello';
|
||||
count_col1 group_col2
|
||||
10 hello
|
||||
20 hello
|
||||
30 hello
|
||||
select sum(col1) as co12 from t1 group by col2 having col2 10;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '10' at line 1
|
||||
select sum(col1) as co2, count(col2) as cc from t1 group by col1 having col1 =10;
|
||||
co2 cc
|
||||
40 4
|
||||
select t2.col2 from t2 group by t2.col1, t2.col2 having t1.col1 <= 10;
|
||||
ERROR 42S22: Unknown column 't1.col1' in 'having clause'
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having t2.col1 <= 10);
|
||||
col1
|
||||
10
|
||||
20
|
||||
30
|
||||
10
|
||||
10
|
||||
10
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2
|
||||
having t2.col1 <=
|
||||
(select min(t3.col1) from t3));
|
||||
col1
|
||||
10
|
||||
20
|
||||
30
|
||||
10
|
||||
10
|
||||
10
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having t1.col1 <= 10);
|
||||
col1
|
||||
10
|
||||
10
|
||||
10
|
||||
10
|
||||
select t1.col1 as tmp_col from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having tmp_col <= 10);
|
||||
tmp_col
|
||||
10
|
||||
10
|
||||
10
|
||||
10
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having col_t1 <= 10);
|
||||
col1
|
||||
10
|
||||
10
|
||||
10
|
||||
10
|
||||
select sum(col1) from t1
|
||||
group by col_t1
|
||||
having (select col_t1 from t2 where col_t1 = col_t2 order by col_t2 limit 1);
|
||||
sum(col1)
|
||||
40
|
||||
20
|
||||
30
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having col_t1 <= 10)
|
||||
having col_t1 <= 20;
|
||||
ERROR 42S22: Unknown column 'col_t1' in 'having clause'
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having col_t1 <= 10)
|
||||
group by col_t1
|
||||
having col_t1 <= 20;
|
||||
col1
|
||||
10
|
||||
select col_t1, sum(col1) from t1
|
||||
group by col_t1
|
||||
having col_t1 > 10 and
|
||||
exists (select sum(t2.col1) from t2
|
||||
group by t2.col2 having t2.col2 > 'b');
|
||||
col_t1 sum(col1)
|
||||
20 20
|
||||
30 30
|
||||
select sum(col1) from t1
|
||||
group by col_t1
|
||||
having col_t1 in (select sum(t2.col1) from t2
|
||||
group by t2.col2, t2.col1 having t2.col1 = t1.col1);
|
||||
ERROR 42S22: Unknown column 't1.col1' in 'having clause'
|
||||
select sum(col1) from t1
|
||||
group by col_t1
|
||||
having col_t1 in (select sum(t2.col1) from t2
|
||||
group by t2.col2, t2.col1 having t2.col1 = col_t1);
|
||||
sum(col1)
|
||||
40
|
||||
20
|
||||
30
|
||||
select t1.col1, t2.col1 from t1, t2 where t1.col1 = t2.col1
|
||||
group by t1.col1, t2.col1 having col1 = 2;
|
||||
ERROR 23000: Column 'col1' in having clause is ambiguous
|
||||
select t1.col1*10+t2.col1 from t1,t2 where t1.col1=t2.col1
|
||||
group by t1.col1, t2.col1 having col1 = 2;
|
||||
ERROR 23000: Column 'col1' in having clause is ambiguous
|
||||
drop table t1, t2, t3;
|
||||
create table t1 (s1 int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
select count(*) from t1 group by s1 having s1 is null;
|
||||
count(*)
|
||||
select s1*0 as s1 from t1 group by s1 having s1 <> 0;
|
||||
s1
|
||||
0
|
||||
0
|
||||
0
|
||||
Warnings:
|
||||
Warning 1052 Column 's1' in having clause is ambiguous
|
||||
select s1*0 from t1 group by s1 having s1 = 0;
|
||||
s1*0
|
||||
select s1 from t1 group by 1 having 1 = 0;
|
||||
s1
|
||||
select count(s1) from t1 group by s1 having count(1+1)=2;
|
||||
count(s1)
|
||||
select count(s1) from t1 group by s1 having s1*0=0;
|
||||
count(s1)
|
||||
1
|
||||
1
|
||||
1
|
||||
select * from t1 a, t1 b group by a.s1 having s1 is null;
|
||||
ERROR 23000: Column 's1' in having clause is ambiguous
|
||||
drop table t1;
|
||||
create table t1 (s1 char character set latin1 collate latin1_german1_ci);
|
||||
insert into t1 values ('ü'),('y');
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 's1' at row 1
|
||||
select s1,count(s1) from t1
|
||||
group by s1 collate latin1_swedish_ci having s1 = 'y';
|
||||
s1 count(s1)
|
||||
y 1
|
||||
drop table t1;
|
||||
|
441
mysql-test/r/information_schema.result
Normal file
441
mysql-test/r/information_schema.result
Normal file
@@ -0,0 +1,441 @@
|
||||
grant all privileges on test.* to mysqltest_1@localhost;
|
||||
select * from information_schema.SCHEMATA where schema_name > 'm';
|
||||
CATALOG_NAME SCHEMA_NAME DEFAULT_CHARACTER_SET_NAME
|
||||
NULL mysql latin1
|
||||
NULL test latin1
|
||||
select schema_name from information_schema.schemata;
|
||||
schema_name
|
||||
mysql
|
||||
test
|
||||
show databases *;
|
||||
CATALOG_NAME SCHEMA_NAME DEFAULT_CHARACTER_SET_NAME
|
||||
NULL mysql latin1
|
||||
NULL test latin1
|
||||
show databases like 't%';
|
||||
Database (t%)
|
||||
test
|
||||
show databases;
|
||||
Database
|
||||
mysql
|
||||
test
|
||||
show databases * where schema_name like 't%';
|
||||
CATALOG_NAME SCHEMA_NAME DEFAULT_CHARACTER_SET_NAME
|
||||
NULL test latin1
|
||||
show databases * where schema_name = 't%';
|
||||
CATALOG_NAME SCHEMA_NAME DEFAULT_CHARACTER_SET_NAME
|
||||
create database testtets;
|
||||
create table testtets.t1(a int, b VARCHAR(30), KEY string_data (b));
|
||||
create table test.t2(a int);
|
||||
create table t3(a int, KEY a_data (a));
|
||||
create table testtets.t4(a int);
|
||||
create view v1 (c) as select table_name from information_schema.TABLES;
|
||||
select * from v1;
|
||||
c
|
||||
columns_priv
|
||||
db
|
||||
func
|
||||
help_category
|
||||
help_keyword
|
||||
help_relation
|
||||
help_topic
|
||||
host
|
||||
proc
|
||||
tables_priv
|
||||
time_zone
|
||||
time_zone_leap_second
|
||||
time_zone_name
|
||||
time_zone_transition
|
||||
time_zone_transition_type
|
||||
user
|
||||
t2
|
||||
t3
|
||||
v1
|
||||
t1
|
||||
t4
|
||||
select c,table_name from v1
|
||||
left join information_schema.TABLES v2 on (v1.c=v2.table_name)
|
||||
where v1.c like "t%";
|
||||
c table_name
|
||||
tables_priv tables_priv
|
||||
time_zone time_zone
|
||||
time_zone_leap_second time_zone_leap_second
|
||||
time_zone_name time_zone_name
|
||||
time_zone_transition time_zone_transition
|
||||
time_zone_transition_type time_zone_transition_type
|
||||
t2 t2
|
||||
t3 t3
|
||||
t1 t1
|
||||
t4 t4
|
||||
select c, v2.table_name from v1
|
||||
right join information_schema.TABLES v2 on (v1.c=v2.table_name)
|
||||
where v1.c like "t%";
|
||||
c table_name
|
||||
tables_priv tables_priv
|
||||
time_zone time_zone
|
||||
time_zone_leap_second time_zone_leap_second
|
||||
time_zone_name time_zone_name
|
||||
time_zone_transition time_zone_transition
|
||||
time_zone_transition_type time_zone_transition_type
|
||||
t2 t2
|
||||
t3 t3
|
||||
t1 t1
|
||||
t4 t4
|
||||
select table_name from information_schema.TABLES
|
||||
where table_schema = "testtets" and table_name like "t%";
|
||||
table_name
|
||||
t1
|
||||
t4
|
||||
select * from information_schema.STATISTICS where TABLE_SCHEMA = "testtets";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
|
||||
NULL testtets t1 1 testtets string_data 1 b A NULL NULL NULL YES BTREE
|
||||
show keys * where TABLE_SCHEMA Like "test%";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLUMN_NAME COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT
|
||||
NULL test t3 1 test a_data 1 a A NULL NULL NULL YES BTREE
|
||||
NULL testtets t1 1 testtets string_data 1 b A NULL NULL NULL YES BTREE
|
||||
show keys where INDEX_NAME = "a_data";
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
t3 1 a_data 1 a A NULL NULL NULL YES BTREE
|
||||
show tables like 't%';
|
||||
Tables_in_test (t%)
|
||||
t2
|
||||
t3
|
||||
show tables * from test where table_name like 't%';
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
|
||||
NULL test t2
|
||||
NULL test t3
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t2 MyISAM 9 Fixed 0 0 0 21474836479 1024 0 NULL # # NULL latin1_swedish_ci NULL
|
||||
t3 MyISAM 9 Fixed 0 0 0 21474836479 1024 0 NULL # # NULL latin1_swedish_ci NULL
|
||||
v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
|
||||
show full columns from t3 like "a%";
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
a int(11) NULL YES MUL NULL select,insert,update,references
|
||||
show full columns from mysql.db like "Insert%";
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
Insert_priv enum('N','Y') utf8_bin N select,insert,update,references
|
||||
show full columns from v1;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
c char(64) latin1_swedish_ci select,insert,update,references
|
||||
select * from information_schema.COLUMNS where table_name="t1"
|
||||
and column_name= "a";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME TYPE COLLATION_NAME IS_NULLABLE KEY COLUMN_DEFAULT EXTRA PRIVILEGES COMMENT
|
||||
NULL testtets t1 a 1 int 0 11 4 0 NULL int(11) NULL YES NULL select,insert,update,references
|
||||
show columns * where table_name = "t1";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME TYPE COLLATION_NAME IS_NULLABLE KEY COLUMN_DEFAULT EXTRA PRIVILEGES COMMENT
|
||||
NULL testtets t1 a 1 int 0 11 4 0 NULL int(11) NULL YES NULL
|
||||
NULL testtets t1 b 2 varchar 30 30 30 31 latin1 varchar(30) latin1_swedish_ci YES MUL NULL
|
||||
drop view v1;
|
||||
drop tables testtets.t4, testtets.t1, t2, t3;
|
||||
drop database testtets;
|
||||
select * from information_schema.CHARACTER_SETS
|
||||
where CHARACTER_SET_NAME like 'latin1%';
|
||||
CHARACTER_SET_NAME Description DEFAULT_COLLATE_NAME Maxlen
|
||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
||||
SHOW CHARACTER SET LIKE 'latin1%';
|
||||
Charset Description Default collation Maxlen
|
||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
||||
SHOW CHARACTER SET * LIKE 'latin1%';
|
||||
CHARACTER_SET_NAME Description DEFAULT_COLLATE_NAME Maxlen
|
||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
||||
SHOW CHARACTER SET WHERE CHARACTER_SET_NAME like 'latin1%';
|
||||
Charset Description Default collation Maxlen
|
||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
||||
SHOW CHARACTER SET CHARACTER_SET_NAME WHERE CHARACTER_SET_NAME like 'latin1%';
|
||||
CHARACTER_SET_NAME
|
||||
latin1
|
||||
SHOW CHARACTER SET * WHERE CHARACTER_SET_NAME like 'latin1%';
|
||||
CHARACTER_SET_NAME Description DEFAULT_COLLATE_NAME Maxlen
|
||||
latin1 ISO 8859-1 West European latin1_swedish_ci 1
|
||||
select * from information_schema.COLLATIONS
|
||||
where COLLATION_NAME like 'latin1%';
|
||||
COLLATION_NAME Charset Id Default Compiled Sortlen
|
||||
latin1_german1_ci latin1 5 0
|
||||
latin1_swedish_ci latin1 8 Yes Yes 1
|
||||
latin1_danish_ci latin1 15 0
|
||||
latin1_german2_ci latin1 31 Yes 2
|
||||
latin1_bin latin1 47 Yes 1
|
||||
latin1_general_ci latin1 48 0
|
||||
latin1_general_cs latin1 49 0
|
||||
latin1_spanish_ci latin1 94 0
|
||||
SHOW COLLATION LIKE 'latin1%';
|
||||
Collation Charset Id Default Compiled Sortlen
|
||||
latin1_german1_ci latin1 5 0
|
||||
latin1_swedish_ci latin1 8 Yes Yes 1
|
||||
latin1_danish_ci latin1 15 0
|
||||
latin1_german2_ci latin1 31 Yes 2
|
||||
latin1_bin latin1 47 Yes 1
|
||||
latin1_general_ci latin1 48 0
|
||||
latin1_general_cs latin1 49 0
|
||||
latin1_spanish_ci latin1 94 0
|
||||
SHOW COLLATION * LIKE 'latin1%';
|
||||
COLLATION_NAME Charset Id Default Compiled Sortlen
|
||||
latin1_german1_ci latin1 5 0
|
||||
latin1_swedish_ci latin1 8 Yes Yes 1
|
||||
latin1_danish_ci latin1 15 0
|
||||
latin1_german2_ci latin1 31 Yes 2
|
||||
latin1_bin latin1 47 Yes 1
|
||||
latin1_general_ci latin1 48 0
|
||||
latin1_general_cs latin1 49 0
|
||||
latin1_spanish_ci latin1 94 0
|
||||
SHOW COLLATION WHERE COLLATION_NAME like 'latin1%';
|
||||
Collation Charset Id Default Compiled Sortlen
|
||||
latin1_german1_ci latin1 5 0
|
||||
latin1_swedish_ci latin1 8 Yes Yes 1
|
||||
latin1_danish_ci latin1 15 0
|
||||
latin1_german2_ci latin1 31 Yes 2
|
||||
latin1_bin latin1 47 Yes 1
|
||||
latin1_general_ci latin1 48 0
|
||||
latin1_general_cs latin1 49 0
|
||||
latin1_spanish_ci latin1 94 0
|
||||
SHOW COLLATION COLLATION_NAME WHERE COLLATION_NAME like 'latin1%';
|
||||
COLLATION_NAME
|
||||
latin1_german1_ci
|
||||
latin1_swedish_ci
|
||||
latin1_danish_ci
|
||||
latin1_german2_ci
|
||||
latin1_bin
|
||||
latin1_general_ci
|
||||
latin1_general_cs
|
||||
latin1_spanish_ci
|
||||
SHOW COLLATION * WHERE COLLATION_NAME like 'latin1%';
|
||||
COLLATION_NAME Charset Id Default Compiled Sortlen
|
||||
latin1_german1_ci latin1 5 0
|
||||
latin1_swedish_ci latin1 8 Yes Yes 1
|
||||
latin1_danish_ci latin1 15 0
|
||||
latin1_german2_ci latin1 31 Yes 2
|
||||
latin1_bin latin1 47 Yes 1
|
||||
latin1_general_ci latin1 48 0
|
||||
latin1_general_cs latin1 49 0
|
||||
latin1_spanish_ci latin1 94 0
|
||||
select * from information_schema.COLLATION_CHARACTER_SET_APPLICABILITY
|
||||
where COLLATION_NAME like 'latin1%';
|
||||
COLLATION_NAME CHARACTER_SET_NAME
|
||||
latin1_german1_ci latin1
|
||||
latin1_swedish_ci latin1
|
||||
latin1_danish_ci latin1
|
||||
latin1_german2_ci latin1
|
||||
latin1_bin latin1
|
||||
latin1_general_ci latin1
|
||||
latin1_general_cs latin1
|
||||
latin1_spanish_ci latin1
|
||||
create function sub1(i int) returns int
|
||||
return i+1;
|
||||
create procedure sel2()
|
||||
begin
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
end|
|
||||
show procedure status;
|
||||
Db Name Type Definer Modified Created Security_type Comment
|
||||
test sel2 PROCEDURE root@localhost # # DEFINER
|
||||
show function status;
|
||||
Db Name Type Definer Modified Created Security_type Comment
|
||||
test sub1 FUNCTION root@localhost # # DEFINER
|
||||
select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
||||
information_schema.SCHEMATA b where
|
||||
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
|
||||
ROUTINE_NAME
|
||||
sel2
|
||||
sub1
|
||||
explain select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
||||
information_schema.SCHEMATA b where
|
||||
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE # ALL NULL NULL NULL NULL 2
|
||||
1 SIMPLE # ALL NULL NULL NULL NULL 2 Using where
|
||||
select a.ROUTINE_NAME, b.name from information_schema.ROUTINES a,
|
||||
mysql.proc b where a.ROUTINE_NAME = b.name;
|
||||
ROUTINE_NAME name
|
||||
sub1 sub1
|
||||
sel2 sel2
|
||||
select count(*) from information_schema.ROUTINES;
|
||||
count(*)
|
||||
2
|
||||
create view v0 (c) as select schema_name from information_schema.SCHEMATA;
|
||||
select * from v0;
|
||||
c
|
||||
mysql
|
||||
test
|
||||
explain select * from v0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 PRIMARY # ALL NULL NULL NULL NULL 2
|
||||
create view v1 (c) as select table_name from information_schema.TABLES
|
||||
where table_name="v1";
|
||||
select * from v1;
|
||||
c
|
||||
v1
|
||||
create view v2 (c) as select column_name from information_schema.COLUMNS
|
||||
where table_name="v2";
|
||||
select * from v2;
|
||||
c
|
||||
c
|
||||
create view v3 (c) as select CHARACTER_SET_NAME from information_schema.CHARACTER_SETS
|
||||
where CHARACTER_SET_NAME like "latin1%";
|
||||
select * from v3;
|
||||
c
|
||||
latin1
|
||||
create view v4 (c) as select COLLATION_NAME from information_schema.COLLATIONS
|
||||
where COLLATION_NAME like "latin1%";
|
||||
select * from v4;
|
||||
c
|
||||
latin1_german1_ci
|
||||
latin1_swedish_ci
|
||||
latin1_danish_ci
|
||||
latin1_german2_ci
|
||||
latin1_bin
|
||||
latin1_general_ci
|
||||
latin1_general_cs
|
||||
latin1_spanish_ci
|
||||
show keys from v4;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
select * from information_schema.VIEWS where TABLE_NAME like "v%";
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE
|
||||
NULL test v0 select `SCHEMATA`.`SCHEMA_NAME` AS `c` from `information_schema`.`SCHEMATA` NONE NO
|
||||
NULL test v1 select `TABLES`.`TABLE_NAME` AS `c` from `information_schema`.`TABLES` where (`TABLES`.`TABLE_NAME` = _latin1'v1') NONE NO
|
||||
NULL test v2 select `COLUMNS`.`COLUMN_NAME` AS `c` from `information_schema`.`COLUMNS` where (`COLUMNS`.`TABLE_NAME` = _latin1'v2') NONE NO
|
||||
NULL test v3 select `CHARACTER_SETS`.`CHARACTER_SET_NAME` AS `c` from `information_schema`.`CHARACTER_SETS` where (`CHARACTER_SETS`.`CHARACTER_SET_NAME` like _latin1'latin1%') NONE NO
|
||||
NULL test v4 select `COLLATIONS`.`COLLATION_NAME` AS `c` from `information_schema`.`COLLATIONS` where (`COLLATIONS`.`COLLATION_NAME` like _latin1'latin1%') NONE NO
|
||||
drop view v0, v1, v2, v3, v4;
|
||||
create table t1 (a int);
|
||||
grant select,update,insert on t1 to mysqltest_1@localhost;
|
||||
grant select (a), update (a),insert(a), references(a) on t1 to mysqltest_1@localhost;
|
||||
grant all on test.* to mysqltest_1@localhost with grant option;
|
||||
select * from information_schema.USER_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||
GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE
|
||||
'mysqltest_1'@'localhost' NULL USAGE NO
|
||||
select * from information_schema.SCHEMA_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA PRIVILEGE_TYPE IS_GRANTABLE
|
||||
'mysqltest_1'@'localhost' NULL test SELECT YES
|
||||
'mysqltest_1'@'localhost' NULL test INSERT YES
|
||||
'mysqltest_1'@'localhost' NULL test UPDATE YES
|
||||
'mysqltest_1'@'localhost' NULL test DELETE YES
|
||||
'mysqltest_1'@'localhost' NULL test CREATE YES
|
||||
'mysqltest_1'@'localhost' NULL test DROP YES
|
||||
'mysqltest_1'@'localhost' NULL test REFERENCES YES
|
||||
'mysqltest_1'@'localhost' NULL test INDEX YES
|
||||
'mysqltest_1'@'localhost' NULL test ALTER YES
|
||||
'mysqltest_1'@'localhost' NULL test CREATE TEMPORARY TABLES YES
|
||||
'mysqltest_1'@'localhost' NULL test LOCK TABLES YES
|
||||
'mysqltest_1'@'localhost' NULL test CREATE VIEW YES
|
||||
'mysqltest_1'@'localhost' NULL test SHOW VIEW YES
|
||||
select * from information_schema.TABLE_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||
'mysqltest_1'@'localhost' NULL test t1 SELECT NO
|
||||
'mysqltest_1'@'localhost' NULL test t1 INSERT NO
|
||||
'mysqltest_1'@'localhost' NULL test t1 UPDATE NO
|
||||
select * from information_schema.COLUMN_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||
'mysqltest_1'@'localhost' NULL test t1 a SELECT NO
|
||||
'mysqltest_1'@'localhost' NULL test t1 a INSERT NO
|
||||
'mysqltest_1'@'localhost' NULL test t1 a UPDATE NO
|
||||
'mysqltest_1'@'localhost' NULL test t1 a REFERENCES NO
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
delete from mysql.db where user='mysqltest_1';
|
||||
delete from mysql.tables_priv where user='mysqltest_1';
|
||||
delete from mysql.columns_priv where user='mysqltest_1';
|
||||
flush privileges;
|
||||
drop table t1;
|
||||
create table t1 (a int null, primary key(a));
|
||||
alter table t1 add constraint constraint_1 unique (a);
|
||||
alter table t1 add constraint unique key_1(a);
|
||||
alter table t1 add constraint constraint_2 unique key_2(a);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL default '0',
|
||||
PRIMARY KEY (`a`),
|
||||
UNIQUE KEY `constraint_1` (`a`),
|
||||
UNIQUE KEY `key_1` (`a`),
|
||||
UNIQUE KEY `key_2` (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from information_schema.TABLE_CONSTRAINTS where
|
||||
TABLE_SCHEMA= "test";
|
||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE CONSTRAINT_METHOD
|
||||
NULL test PRIMARY test t1 PRIMARY KEY NULL
|
||||
NULL test constraint_1 test t1 UNIQUE NULL
|
||||
NULL test key_1 test t1 UNIQUE NULL
|
||||
NULL test key_2 test t1 UNIQUE NULL
|
||||
select * from information_schema.KEY_COLUMN_USAGE where
|
||||
TABLE_SCHEMA= "test";
|
||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
|
||||
NULL test PRIMARY test t1 a 1 NULL NULL NULL
|
||||
NULL test constraint_1 test t1 a 1 NULL NULL NULL
|
||||
NULL test key_1 test t1 a 1 NULL NULL NULL
|
||||
NULL test key_2 test t1 a 1 NULL NULL NULL
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
|
||||
CREATE TABLE t2 (id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id),
|
||||
FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (t1_id) REFERENCES t1(id) ON UPDATE CASCADE) ENGINE=INNODB;
|
||||
select * from information_schema.TABLE_CONSTRAINTS where
|
||||
TABLE_SCHEMA= "test";
|
||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME CONSTRAINT_TYPE CONSTRAINT_METHOD
|
||||
NULL test PRIMARY test t1 PRIMARY KEY NULL
|
||||
NULL test PRIMARY test t2 PRIMARY KEY NULL
|
||||
NULL test t2_ibfk_1 test t2 FOREIGN KEY ON DELETE CASCADE
|
||||
NULL test t2_ibfk_2 test t2 FOREIGN KEY ON UPDATE CASCADE
|
||||
select * from information_schema.KEY_COLUMN_USAGE where
|
||||
TABLE_SCHEMA= "test";
|
||||
CONSTRAINT_CATALOG CONSTRAINT_SCHEMA CONSTRAINT_NAME TABLE_SCHEMA TABLE_NAME COLUMN_NAME ORDINAL_POSITION REFERENCED_TABLE_SCHEMA REFERENCED_TABLE_NAME REFERENCED_COLUMN_NAME
|
||||
NULL test PRIMARY test t1 id 1 NULL NULL NULL
|
||||
NULL test PRIMARY test t2 id 1 NULL NULL NULL
|
||||
NULL test t2_ibfk_1 test t2 t1_id 1 test t1 id
|
||||
NULL test t2_ibfk_2 test t2 t1_id 1 test t1 id
|
||||
select table_name from information_schema.TABLES where table_schema like "test%";
|
||||
table_name
|
||||
t1
|
||||
t2
|
||||
select table_name,column_name from information_schema.COLUMNS where table_schema like "test%";
|
||||
table_name column_name
|
||||
t1 id
|
||||
t2 id
|
||||
t2 t1_id
|
||||
select ROUTINE_NAME from information_schema.ROUTINES;
|
||||
ROUTINE_NAME
|
||||
sel2
|
||||
sub1
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
drop procedure sel2;
|
||||
drop function sub1;
|
||||
create table t1(a int);
|
||||
create view v1 (c) as select a from t1 with check option;
|
||||
create view v2 (c) as select a from t1 WITH LOCAL CHECK OPTION;
|
||||
create view v3 (c) as select a from t1 WITH CASCADED CHECK OPTION;
|
||||
select * from information_schema.views;
|
||||
TABLE_CATALOG TABLE_SCHEMA TABLE_NAME VIEW_DEFINITION CHECK_OPTION IS_UPDATABLE
|
||||
NULL test v1 select `test`.`t1`.`a` AS `c` from `test`.`t1` WITH CASCADED CHECK OPTION YES
|
||||
NULL test v2 select `test`.`t1`.`a` AS `c` from `test`.`t1` WITH LOCAL CHECK OPTION YES
|
||||
NULL test v3 select `test`.`t1`.`a` AS `c` from `test`.`t1` WITH CASCADED CHECK OPTION YES
|
||||
grant select (a) on test.t1 to joe@localhost with grant option;
|
||||
select * from INFORMATION_SCHEMA.COLUMN_PRIVILEGES;
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||
'joe'@'localhost' NULL test t1 a SELECT YES
|
||||
select * from INFORMATION_SCHEMA.TABLE_PRIVILEGES;
|
||||
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE
|
||||
'joe'@'localhost' NULL test t1 USAGE YES
|
||||
drop view v1, v2, v3;
|
||||
drop table t1;
|
||||
delete from mysql.user where user='joe';
|
||||
delete from mysql.db where user='joe';
|
||||
delete from mysql.tables_priv where user='joe';
|
||||
delete from mysql.columns_priv where user='joe';
|
||||
flush privileges;
|
||||
create procedure px5 ()
|
||||
begin
|
||||
declare v int;
|
||||
declare c cursor for select version from
|
||||
information_schema.tables;
|
||||
open c;
|
||||
fetch c into v;
|
||||
select v;
|
||||
close c;
|
||||
end;//
|
||||
call px5()//
|
||||
v
|
||||
9
|
||||
call px5()//
|
||||
v
|
||||
9
|
@@ -4,11 +4,11 @@ DROP DATABASE IF EXISTS `test_$1`;
|
||||
CREATE TABLE T1 (a int);
|
||||
INSERT INTO T1 VALUES (1);
|
||||
SHOW TABLES LIKE "T1";
|
||||
Tables_in_test (T1) table_type
|
||||
T1 BASE TABLE
|
||||
Tables_in_test (T1)
|
||||
T1
|
||||
SHOW TABLES LIKE "t1";
|
||||
Tables_in_test (t1) table_type
|
||||
T1 BASE TABLE
|
||||
Tables_in_test (t1)
|
||||
T1
|
||||
SHOW CREATE TABLE T1;
|
||||
Table Create Table
|
||||
T1 CREATE TABLE `T1` (
|
||||
@@ -16,37 +16,37 @@ T1 CREATE TABLE `T1` (
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
RENAME TABLE T1 TO T2;
|
||||
SHOW TABLES LIKE "T2";
|
||||
Tables_in_test (T2) table_type
|
||||
T2 BASE TABLE
|
||||
Tables_in_test (T2)
|
||||
T2
|
||||
SELECT * FROM t2;
|
||||
a
|
||||
1
|
||||
RENAME TABLE T2 TO t3;
|
||||
SHOW TABLES LIKE "T3";
|
||||
Tables_in_test (T3) table_type
|
||||
t3 BASE TABLE
|
||||
Tables_in_test (T3)
|
||||
t3
|
||||
RENAME TABLE T3 TO T1;
|
||||
SHOW TABLES LIKE "T1";
|
||||
Tables_in_test (T1) table_type
|
||||
T1 BASE TABLE
|
||||
Tables_in_test (T1)
|
||||
T1
|
||||
ALTER TABLE T1 add b int;
|
||||
SHOW TABLES LIKE "T1";
|
||||
Tables_in_test (T1) table_type
|
||||
T1 BASE TABLE
|
||||
Tables_in_test (T1)
|
||||
T1
|
||||
ALTER TABLE T1 RENAME T2;
|
||||
SHOW TABLES LIKE "T2";
|
||||
Tables_in_test (T2) table_type
|
||||
T2 BASE TABLE
|
||||
Tables_in_test (T2)
|
||||
T2
|
||||
LOCK TABLE T2 WRITE;
|
||||
ALTER TABLE T2 drop b;
|
||||
SHOW TABLES LIKE "T2";
|
||||
Tables_in_test (T2) table_type
|
||||
T2 BASE TABLE
|
||||
Tables_in_test (T2)
|
||||
T2
|
||||
UNLOCK TABLES;
|
||||
RENAME TABLE T2 TO T1;
|
||||
SHOW TABLES LIKE "T1";
|
||||
Tables_in_test (T1) table_type
|
||||
T1 BASE TABLE
|
||||
Tables_in_test (T1)
|
||||
T1
|
||||
SELECT * from T1;
|
||||
a
|
||||
1
|
||||
@@ -59,11 +59,11 @@ DROP DATABASE `test_$1`;
|
||||
CREATE TABLE T1 (a int) engine=innodb;
|
||||
INSERT INTO T1 VALUES (1);
|
||||
SHOW TABLES LIKE "T1";
|
||||
Tables_in_test (T1) table_type
|
||||
T1 BASE TABLE
|
||||
Tables_in_test (T1)
|
||||
T1
|
||||
SHOW TABLES LIKE "t1";
|
||||
Tables_in_test (t1) table_type
|
||||
T1 BASE TABLE
|
||||
Tables_in_test (t1)
|
||||
T1
|
||||
SHOW CREATE TABLE T1;
|
||||
Table Create Table
|
||||
T1 CREATE TABLE `T1` (
|
||||
@@ -71,37 +71,37 @@ T1 CREATE TABLE `T1` (
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
RENAME TABLE T1 TO T2;
|
||||
SHOW TABLES LIKE "T2";
|
||||
Tables_in_test (T2) table_type
|
||||
t2 BASE TABLE
|
||||
Tables_in_test (T2)
|
||||
t2
|
||||
SELECT * FROM t2;
|
||||
a
|
||||
1
|
||||
RENAME TABLE T2 TO t3;
|
||||
SHOW TABLES LIKE "T3";
|
||||
Tables_in_test (T3) table_type
|
||||
t3 BASE TABLE
|
||||
Tables_in_test (T3)
|
||||
t3
|
||||
RENAME TABLE T3 TO T1;
|
||||
SHOW TABLES LIKE "T1";
|
||||
Tables_in_test (T1) table_type
|
||||
t1 BASE TABLE
|
||||
Tables_in_test (T1)
|
||||
t1
|
||||
ALTER TABLE T1 add b int;
|
||||
SHOW TABLES LIKE "T1";
|
||||
Tables_in_test (T1) table_type
|
||||
t1 BASE TABLE
|
||||
Tables_in_test (T1)
|
||||
t1
|
||||
ALTER TABLE T1 RENAME T2;
|
||||
SHOW TABLES LIKE "T2";
|
||||
Tables_in_test (T2) table_type
|
||||
t2 BASE TABLE
|
||||
Tables_in_test (T2)
|
||||
t2
|
||||
LOCK TABLE T2 WRITE;
|
||||
ALTER TABLE T2 drop b;
|
||||
SHOW TABLES LIKE "T2";
|
||||
Tables_in_test (T2) table_type
|
||||
t2 BASE TABLE
|
||||
Tables_in_test (T2)
|
||||
t2
|
||||
UNLOCK TABLES;
|
||||
RENAME TABLE T2 TO T1;
|
||||
SHOW TABLES LIKE "T1";
|
||||
Tables_in_test (T1) table_type
|
||||
t1 BASE TABLE
|
||||
Tables_in_test (T1)
|
||||
t1
|
||||
SELECT * from T1;
|
||||
a
|
||||
1
|
||||
@@ -124,10 +124,10 @@ drop table T1;
|
||||
create table T1 (A int);
|
||||
alter table T1 add index (A);
|
||||
show tables like 'T1%';
|
||||
Tables_in_test (T1%) table_type
|
||||
T1 BASE TABLE
|
||||
Tables_in_test (T1%)
|
||||
T1
|
||||
alter table t1 add index (A);
|
||||
show tables like 't1%';
|
||||
Tables_in_test (t1%) table_type
|
||||
t1 BASE TABLE
|
||||
Tables_in_test (t1%)
|
||||
t1
|
||||
drop table t1;
|
||||
|
@@ -5,7 +5,7 @@ def 1 8 1 1 N 32769 0 8
|
||||
def 1.0 5 3 3 N 32769 1 8
|
||||
def -1 8 1 2 N 32769 0 8
|
||||
def hello 254 5 5 N 1 31 8
|
||||
def NULL 6 0 0 Y 32768 0 8
|
||||
def NULL 6 0 0 Y 32896 0 63
|
||||
1 1.0 -1 hello NULL
|
||||
1 1.0 -1 hello NULL
|
||||
create table t1 (a tinyint, b smallint, c mediumint, d int, e bigint, f float(3,2), g double(4,3), h decimal(5,4), i year, j date, k timestamp, l datetime, m enum('a','b'), n set('a','b'), o char(10));
|
||||
|
@@ -180,4 +180,25 @@ master-bin.000001 95 Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 157 Query 1 # use `test`; insert into t1 values(16)
|
||||
master-bin.000001 239 Query 1 # use `test`; insert into t1 values(18)
|
||||
master-bin.000001 321 Query 1 # use `test`; COMMIT
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
alter table t2 type=MyISAM;
|
||||
insert into t1 values (1);
|
||||
begin;
|
||||
select * from t1 for update;
|
||||
a
|
||||
1
|
||||
select (@before:=unix_timestamp())*0;
|
||||
(@before:=unix_timestamp())*0
|
||||
0
|
||||
begin;
|
||||
select * from t1 for update;
|
||||
insert into t2 values (20);
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
select (@after:=unix_timestamp())*0;
|
||||
(@after:=unix_timestamp())*0
|
||||
0
|
||||
select (@after-@before) >= 2;
|
||||
(@after-@before) >= 2
|
||||
1
|
||||
drop table t1,t2;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
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,t10;
|
||||
flush status;
|
||||
create table t1(
|
||||
id int not null primary key,
|
||||
@@ -363,3 +363,8 @@ a int NOT NULL PRIMARY KEY,
|
||||
b int
|
||||
) engine=ndb;
|
||||
insert t9 values(1, 2), (2,3), (3, 4), (4, 5);
|
||||
create table t10 (
|
||||
a int not null primary key,
|
||||
b blob
|
||||
) engine=ndb;
|
||||
insert into t10 values (1, 'kalle');
|
||||
|
@@ -8,3 +8,6 @@ show status like 'handler_discover%';
|
||||
Variable_name Value
|
||||
Handler_discover 1
|
||||
drop table t9;
|
||||
select * from t10;
|
||||
ERROR HY000: Got error 4263 'Invalid blob attributes or invalid blob parts table' from ndbcluster
|
||||
drop table t10;
|
||||
|
@@ -400,6 +400,13 @@ b attr1
|
||||
9413 9412
|
||||
drop table test.t1, t2;
|
||||
drop database mysqltest;
|
||||
drop database if exists ndbtest1;
|
||||
create database ndbtest1;
|
||||
use ndbtest1;
|
||||
create table t1(id int) engine=ndbcluster;
|
||||
drop database ndbtest1;
|
||||
drop database ndbtest1;
|
||||
ERROR HY000: Can't drop database 'ndbtest1'; database doesn't exist
|
||||
use test;
|
||||
create table t1 (a int primary key, b char(0));
|
||||
insert into t1 values (1,"");
|
||||
|
@@ -1,4 +1,4 @@
|
||||
drop table if exists t1;
|
||||
drop table if exists t1, test1, test2;
|
||||
CREATE TABLE t1 (
|
||||
a int unsigned NOT NULL PRIMARY KEY,
|
||||
b int unsigned not null,
|
||||
@@ -275,3 +275,38 @@ a b c
|
||||
1 1 1
|
||||
4 4 NULL
|
||||
drop table t1;
|
||||
CREATE TABLE test1 (
|
||||
SubscrID int(11) NOT NULL auto_increment,
|
||||
UsrID int(11) NOT NULL default '0',
|
||||
PRIMARY KEY (SubscrID),
|
||||
KEY idx_usrid (UsrID)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
|
||||
INSERT INTO test1 VALUES (2,224),(3,224),(1,224);
|
||||
CREATE TABLE test2 (
|
||||
SbclID int(11) NOT NULL auto_increment,
|
||||
SbcrID int(11) NOT NULL default '0',
|
||||
PRIMARY KEY (SbclID),
|
||||
KEY idx_sbcrid (SbcrID)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
|
||||
INSERT INTO test2 VALUES (3,2),(1,1),(2,1),(4,2);
|
||||
select * from test1 order by 1;
|
||||
SubscrID UsrID
|
||||
1 224
|
||||
2 224
|
||||
3 224
|
||||
select * from test2 order by 1;
|
||||
SbclID SbcrID
|
||||
1 1
|
||||
2 1
|
||||
3 2
|
||||
4 2
|
||||
SELECT s.SubscrID,l.SbclID FROM test1 s left JOIN test2 l ON
|
||||
l.SbcrID=s.SubscrID WHERE s.UsrID=224 order by 1, 2;
|
||||
SubscrID SbclID
|
||||
1 1
|
||||
1 2
|
||||
2 3
|
||||
2 4
|
||||
3 NULL
|
||||
drop table test1;
|
||||
drop table test2;
|
||||
|
@@ -184,3 +184,97 @@ select count(*) from t1 where i=2 or i is null;
|
||||
count(*)
|
||||
9
|
||||
drop table t1;
|
||||
set names latin2;
|
||||
create table t1 select
|
||||
null as c00,
|
||||
if(1, null, 'string') as c01,
|
||||
if(0, null, 'string') as c02,
|
||||
ifnull(null, 'string') as c03,
|
||||
ifnull('string', null) as c04,
|
||||
case when 0 then null else 'string' end as c05,
|
||||
case when 1 then null else 'string' end as c06,
|
||||
coalesce(null, 'string') as c07,
|
||||
coalesce('string', null) as c08,
|
||||
least('string',null) as c09,
|
||||
least(null, 'string') as c10,
|
||||
greatest('string',null) as c11,
|
||||
greatest(null, 'string') as c12,
|
||||
nullif('string', null) as c13,
|
||||
nullif(null, 'string') as c14,
|
||||
trim('string' from null) as c15,
|
||||
trim(null from 'string') as c16,
|
||||
substring_index('string', null, 1) as c17,
|
||||
substring_index(null, 'string', 1) as c18,
|
||||
elt(1, null, 'string') as c19,
|
||||
elt(1, 'string', null) as c20,
|
||||
concat('string', null) as c21,
|
||||
concat(null, 'string') as c22,
|
||||
concat_ws('sep', 'string', null) as c23,
|
||||
concat_ws('sep', null, 'string') as c24,
|
||||
concat_ws(null, 'string', 'string') as c25,
|
||||
make_set(3, 'string', null) as c26,
|
||||
make_set(3, null, 'string') as c27,
|
||||
export_set(3, null, 'off', 'sep') as c29,
|
||||
export_set(3, 'on', null, 'sep') as c30,
|
||||
export_set(3, 'on', 'off', null) as c31,
|
||||
replace(null, 'from', 'to') as c32,
|
||||
replace('str', null, 'to') as c33,
|
||||
replace('str', 'from', null) as c34,
|
||||
insert('str', 1, 2, null) as c35,
|
||||
insert(null, 1, 2, 'str') as c36,
|
||||
lpad('str', 10, null) as c37,
|
||||
rpad(null, 10, 'str') as c38;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c00` binary(0) default NULL,
|
||||
`c01` varchar(6) character set latin2 default NULL,
|
||||
`c02` varchar(6) character set latin2 default NULL,
|
||||
`c03` varchar(6) character set latin2 NOT NULL default '',
|
||||
`c04` varchar(6) character set latin2 default NULL,
|
||||
`c05` varchar(6) character set latin2 default NULL,
|
||||
`c06` varchar(6) character set latin2 default NULL,
|
||||
`c07` varchar(6) character set latin2 default NULL,
|
||||
`c08` varchar(6) character set latin2 default NULL,
|
||||
`c09` varchar(6) character set latin2 NOT NULL default '',
|
||||
`c10` varchar(6) character set latin2 NOT NULL default '',
|
||||
`c11` varchar(6) character set latin2 NOT NULL default '',
|
||||
`c12` varchar(6) character set latin2 NOT NULL default '',
|
||||
`c13` varchar(6) character set latin2 default NULL,
|
||||
`c14` char(0) character set latin2 default NULL,
|
||||
`c15` char(0) character set latin2 default NULL,
|
||||
`c16` varchar(6) character set latin2 default NULL,
|
||||
`c17` varchar(6) character set latin2 default NULL,
|
||||
`c18` char(0) character set latin2 default NULL,
|
||||
`c19` varchar(6) character set latin2 default NULL,
|
||||
`c20` varchar(6) character set latin2 default NULL,
|
||||
`c21` varchar(6) character set latin2 default NULL,
|
||||
`c22` varchar(6) character set latin2 default NULL,
|
||||
`c23` varchar(9) character set latin2 default NULL,
|
||||
`c24` varchar(9) character set latin2 default NULL,
|
||||
`c25` varchar(12) character set latin2 default NULL,
|
||||
`c26` varchar(7) character set latin2 default NULL,
|
||||
`c27` varchar(7) character set latin2 default NULL,
|
||||
`c29` longtext character set latin2,
|
||||
`c30` longtext character set latin2,
|
||||
`c31` varchar(192) character set latin2 default NULL,
|
||||
`c32` char(0) character set latin2 default NULL,
|
||||
`c33` char(3) character set latin2 default NULL,
|
||||
`c34` char(3) character set latin2 default NULL,
|
||||
`c35` char(3) character set latin2 default NULL,
|
||||
`c36` char(3) character set latin2 default NULL,
|
||||
`c37` varchar(10) character set latin2 default NULL,
|
||||
`c38` varchar(10) character set latin2 default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
select
|
||||
case 'str' when 'STR' then 'str' when null then 'null' end as c01,
|
||||
case 'str' when null then 'null' when 'STR' then 'str' end as c02,
|
||||
field(null, 'str1', 'str2') as c03,
|
||||
field('str1','STR1', null) as c04,
|
||||
field('str1', null, 'STR1') as c05,
|
||||
'string' in ('STRING', null) as c08,
|
||||
'string' in (null, 'STRING') as c09;
|
||||
c01 c02 c03 c04 c05 c08 c09
|
||||
str str 0 1 2 1 1
|
||||
set names latin1;
|
||||
|
@@ -1,4 +1,5 @@
|
||||
use test;
|
||||
drop table if exists t5, t6, t7, t8;
|
||||
drop database if exists mysqltest ;
|
||||
test_sequence
|
||||
------ basic tests ------
|
||||
drop table if exists t1, t9 ;
|
||||
@@ -553,7 +554,6 @@ execute stmt3;
|
||||
ERROR 42S01: Table 'new_t2' already exists
|
||||
rename table new_t2 to t2;
|
||||
drop table t2;
|
||||
drop table if exists t5, t6, t7, t8 ;
|
||||
prepare stmt1 from ' rename table t5 to t6, t7 to t8 ' ;
|
||||
create table t5 (a int) ;
|
||||
execute stmt1 ;
|
||||
@@ -805,21 +805,24 @@ test_sequence
|
||||
------ grant/revoke/drop affects a parallel session test ------
|
||||
show grants for second_user@localhost ;
|
||||
ERROR 42000: There is no such grant defined for user 'second_user' on host 'localhost'
|
||||
grant usage on test.* to second_user@localhost
|
||||
create database mysqltest;
|
||||
use mysqltest;
|
||||
use test;
|
||||
grant usage on mysqltest.* to second_user@localhost
|
||||
identified by 'looser' ;
|
||||
grant select on test.t9 to second_user@localhost
|
||||
grant select on mysqltest.t9 to second_user@localhost
|
||||
identified by 'looser' ;
|
||||
show grants for second_user@localhost ;
|
||||
Grants for second_user@localhost
|
||||
GRANT USAGE ON *.* TO 'second_user'@'localhost' IDENTIFIED BY PASSWORD '*13843FE600B19A81E32AF50D4A6FED25875FF1F3'
|
||||
GRANT SELECT ON `test`.`t9` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `mysqltest`.`t9` TO 'second_user'@'localhost'
|
||||
select current_user();
|
||||
current_user()
|
||||
second_user@localhost
|
||||
show grants for current_user();
|
||||
Grants for second_user@localhost
|
||||
GRANT USAGE ON *.* TO 'second_user'@'localhost' IDENTIFIED BY PASSWORD '*13843FE600B19A81E32AF50D4A6FED25875FF1F3'
|
||||
GRANT SELECT ON `test`.`t9` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `mysqltest`.`t9` TO 'second_user'@'localhost'
|
||||
prepare s_t9 from 'select c1 as my_col
|
||||
from t9 where c1= 1' ;
|
||||
execute s_t9 ;
|
||||
@@ -827,24 +830,24 @@ my_col
|
||||
1
|
||||
select a as my_col from t1;
|
||||
ERROR 42000: select command denied to user 'second_user'@'localhost' for table 't1'
|
||||
grant select on test.t1 to second_user@localhost
|
||||
grant select on mysqltest.t1 to second_user@localhost
|
||||
identified by 'looser' ;
|
||||
show grants for second_user@localhost ;
|
||||
Grants for second_user@localhost
|
||||
GRANT USAGE ON *.* TO 'second_user'@'localhost' IDENTIFIED BY PASSWORD '*13843FE600B19A81E32AF50D4A6FED25875FF1F3'
|
||||
GRANT SELECT ON `test`.`t1` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `test`.`t9` TO 'second_user'@'localhost'
|
||||
drop table t9 ;
|
||||
GRANT SELECT ON `mysqltest`.`t9` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `mysqltest`.`t1` TO 'second_user'@'localhost'
|
||||
drop table mysqltest.t9 ;
|
||||
show grants for second_user@localhost ;
|
||||
Grants for second_user@localhost
|
||||
GRANT USAGE ON *.* TO 'second_user'@'localhost' IDENTIFIED BY PASSWORD '*13843FE600B19A81E32AF50D4A6FED25875FF1F3'
|
||||
GRANT SELECT ON `test`.`t1` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `test`.`t9` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `mysqltest`.`t9` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `mysqltest`.`t1` TO 'second_user'@'localhost'
|
||||
show grants for second_user@localhost ;
|
||||
Grants for second_user@localhost
|
||||
GRANT USAGE ON *.* TO 'second_user'@'localhost' IDENTIFIED BY PASSWORD '*13843FE600B19A81E32AF50D4A6FED25875FF1F3'
|
||||
GRANT SELECT ON `test`.`t1` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `test`.`t9` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `mysqltest`.`t9` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `mysqltest`.`t1` TO 'second_user'@'localhost'
|
||||
prepare s_t1 from 'select a as my_col from t1' ;
|
||||
execute s_t1 ;
|
||||
my_col
|
||||
@@ -853,17 +856,17 @@ my_col
|
||||
3
|
||||
4
|
||||
execute s_t9 ;
|
||||
ERROR 42S02: Table 'test.t9' doesn't exist
|
||||
revoke all privileges on test.t1 from second_user@localhost
|
||||
ERROR 42S02: Table 'mysqltest.t9' doesn't exist
|
||||
revoke all privileges on mysqltest.t1 from second_user@localhost
|
||||
identified by 'looser' ;
|
||||
show grants for second_user@localhost ;
|
||||
Grants for second_user@localhost
|
||||
GRANT USAGE ON *.* TO 'second_user'@'localhost' IDENTIFIED BY PASSWORD '*13843FE600B19A81E32AF50D4A6FED25875FF1F3'
|
||||
GRANT SELECT ON `test`.`t9` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `mysqltest`.`t9` TO 'second_user'@'localhost'
|
||||
show grants for second_user@localhost ;
|
||||
Grants for second_user@localhost
|
||||
GRANT USAGE ON *.* TO 'second_user'@'localhost' IDENTIFIED BY PASSWORD '*13843FE600B19A81E32AF50D4A6FED25875FF1F3'
|
||||
GRANT SELECT ON `test`.`t9` TO 'second_user'@'localhost'
|
||||
GRANT SELECT ON `mysqltest`.`t9` TO 'second_user'@'localhost'
|
||||
execute s_t1 ;
|
||||
ERROR 42000: select command denied to user 'second_user'@'localhost' for table 't1'
|
||||
revoke all privileges, grant option from second_user@localhost ;
|
||||
@@ -874,4 +877,5 @@ drop user second_user@localhost ;
|
||||
commit ;
|
||||
show grants for second_user@localhost ;
|
||||
ERROR 42000: There is no such grant defined for user 'second_user' on host 'localhost'
|
||||
drop table t1 ;
|
||||
drop table t1,t9 ;
|
||||
drop database mysqltest;
|
||||
|
@@ -1789,7 +1789,7 @@ t5 CREATE TABLE `t5` (
|
||||
`param10` bigint(20) default NULL,
|
||||
`const11` int(4) default NULL,
|
||||
`param11` bigint(20) default NULL,
|
||||
`const12` char(0) default NULL,
|
||||
`const12` binary(0) default NULL,
|
||||
`param12` bigint(20) default NULL,
|
||||
`param13` double default NULL,
|
||||
`param14` longtext,
|
||||
@@ -1819,7 +1819,7 @@ def test t5 t5 const10 const10 3 10 9 N 32769 0 63
|
||||
def test t5 t5 param10 param10 8 20 9 Y 32768 0 63
|
||||
def test t5 t5 const11 const11 3 4 4 Y 32768 0 63
|
||||
def test t5 t5 param11 param11 8 20 4 Y 32768 0 63
|
||||
def test t5 t5 const12 const12 254 0 0 Y 0 0 8
|
||||
def test t5 t5 const12 const12 254 0 0 Y 128 0 63
|
||||
def test t5 t5 param12 param12 8 20 0 Y 32768 0 63
|
||||
def test t5 t5 param13 param13 5 20 0 Y 32768 31 63
|
||||
def test t5 t5 param14 param14 252 16777215 0 Y 16 0 8
|
||||
|
@@ -1772,7 +1772,7 @@ t5 CREATE TABLE `t5` (
|
||||
`param10` bigint(20) default NULL,
|
||||
`const11` int(4) default NULL,
|
||||
`param11` bigint(20) default NULL,
|
||||
`const12` char(0) default NULL,
|
||||
`const12` binary(0) default NULL,
|
||||
`param12` bigint(20) default NULL,
|
||||
`param13` double default NULL,
|
||||
`param14` longtext,
|
||||
@@ -1802,7 +1802,7 @@ def test t5 t5 const10 const10 3 10 9 N 32769 0 63
|
||||
def test t5 t5 param10 param10 8 20 9 Y 32768 0 63
|
||||
def test t5 t5 const11 const11 3 4 4 Y 32768 0 63
|
||||
def test t5 t5 param11 param11 8 20 4 Y 32768 0 63
|
||||
def test t5 t5 const12 const12 254 0 0 Y 0 0 8
|
||||
def test t5 t5 const12 const12 254 0 0 Y 128 0 63
|
||||
def test t5 t5 param12 param12 8 20 0 Y 32768 0 63
|
||||
def test t5 t5 param13 param13 5 20 0 Y 32768 31 63
|
||||
def test t5 t5 param14 param14 252 16777215 0 Y 16 0 8
|
||||
|
@@ -1773,7 +1773,7 @@ t5 CREATE TABLE `t5` (
|
||||
`param10` bigint(20) default NULL,
|
||||
`const11` int(4) default NULL,
|
||||
`param11` bigint(20) default NULL,
|
||||
`const12` char(0) default NULL,
|
||||
`const12` binary(0) default NULL,
|
||||
`param12` bigint(20) default NULL,
|
||||
`param13` double default NULL,
|
||||
`param14` longtext,
|
||||
@@ -1803,7 +1803,7 @@ def test t5 t5 const10 const10 3 10 9 N 32769 0 63
|
||||
def test t5 t5 param10 param10 8 20 9 Y 32768 0 63
|
||||
def test t5 t5 const11 const11 3 4 4 Y 32768 0 63
|
||||
def test t5 t5 param11 param11 8 20 4 Y 32768 0 63
|
||||
def test t5 t5 const12 const12 254 0 0 Y 0 0 8
|
||||
def test t5 t5 const12 const12 254 0 0 Y 128 0 63
|
||||
def test t5 t5 param12 param12 8 20 0 Y 32768 0 63
|
||||
def test t5 t5 param13 param13 5 20 0 Y 32768 31 63
|
||||
def test t5 t5 param14 param14 252 16777215 0 Y 16 0 8
|
||||
|
@@ -1712,7 +1712,7 @@ t5 CREATE TABLE `t5` (
|
||||
`param10` bigint(20) default NULL,
|
||||
`const11` int(4) default NULL,
|
||||
`param11` bigint(20) default NULL,
|
||||
`const12` char(0) default NULL,
|
||||
`const12` binary(0) default NULL,
|
||||
`param12` bigint(20) default NULL,
|
||||
`param13` double default NULL,
|
||||
`param14` longtext,
|
||||
@@ -1742,7 +1742,7 @@ def test t5 t5 const10 const10 3 10 9 N 32769 0 63
|
||||
def test t5 t5 param10 param10 8 20 9 Y 32768 0 63
|
||||
def test t5 t5 const11 const11 3 4 4 Y 32768 0 63
|
||||
def test t5 t5 param11 param11 8 20 4 Y 32768 0 63
|
||||
def test t5 t5 const12 const12 254 0 0 Y 0 0 8
|
||||
def test t5 t5 const12 const12 254 0 0 Y 128 0 63
|
||||
def test t5 t5 param12 param12 8 20 0 Y 32768 0 63
|
||||
def test t5 t5 param13 param13 5 20 0 Y 32768 31 63
|
||||
def test t5 t5 param14 param14 252 16777215 0 Y 16 0 8
|
||||
@@ -4721,7 +4721,7 @@ t5 CREATE TABLE `t5` (
|
||||
`param10` bigint(20) default NULL,
|
||||
`const11` int(4) default NULL,
|
||||
`param11` bigint(20) default NULL,
|
||||
`const12` char(0) default NULL,
|
||||
`const12` binary(0) default NULL,
|
||||
`param12` bigint(20) default NULL,
|
||||
`param13` double default NULL,
|
||||
`param14` longtext,
|
||||
@@ -4751,7 +4751,7 @@ def test t5 t5 const10 const10 3 10 9 N 32769 0 63
|
||||
def test t5 t5 param10 param10 8 20 9 Y 32768 0 63
|
||||
def test t5 t5 const11 const11 3 4 4 Y 32768 0 63
|
||||
def test t5 t5 param11 param11 8 20 4 Y 32768 0 63
|
||||
def test t5 t5 const12 const12 254 0 0 Y 0 0 8
|
||||
def test t5 t5 const12 const12 254 0 0 Y 128 0 63
|
||||
def test t5 t5 param12 param12 8 20 0 Y 32768 0 63
|
||||
def test t5 t5 param13 param13 5 20 0 Y 32768 31 63
|
||||
def test t5 t5 param14 param14 252 16777215 0 Y 16 0 8
|
||||
|
@@ -1772,7 +1772,7 @@ t5 CREATE TABLE `t5` (
|
||||
`param10` bigint(20) default NULL,
|
||||
`const11` int(4) default NULL,
|
||||
`param11` bigint(20) default NULL,
|
||||
`const12` char(0) default NULL,
|
||||
`const12` binary(0) default NULL,
|
||||
`param12` bigint(20) default NULL,
|
||||
`param13` double default NULL,
|
||||
`param14` longtext,
|
||||
@@ -1802,7 +1802,7 @@ def test t5 t5 const10 const10 3 10 9 N 32769 0 63
|
||||
def test t5 t5 param10 param10 8 20 9 Y 32768 0 63
|
||||
def test t5 t5 const11 const11 3 4 4 Y 32768 0 63
|
||||
def test t5 t5 param11 param11 8 20 4 Y 32768 0 63
|
||||
def test t5 t5 const12 const12 254 0 0 Y 0 0 8
|
||||
def test t5 t5 const12 const12 254 0 0 Y 128 0 63
|
||||
def test t5 t5 param12 param12 8 20 0 Y 32768 0 63
|
||||
def test t5 t5 param13 param13 5 20 0 Y 32768 31 63
|
||||
def test t5 t5 param14 param14 252 16777215 0 Y 16 0 8
|
||||
|
@@ -1749,7 +1749,7 @@ t5 CREATE TABLE `t5` (
|
||||
`param10` bigint(20) default NULL,
|
||||
`const11` int(4) default NULL,
|
||||
`param11` bigint(20) default NULL,
|
||||
`const12` char(0) default NULL,
|
||||
`const12` binary(0) default NULL,
|
||||
`param12` bigint(20) default NULL,
|
||||
`param13` double default NULL,
|
||||
`param14` longtext,
|
||||
@@ -1779,7 +1779,7 @@ def test t5 t5 const10 const10 3 10 9 N 32769 0 63
|
||||
def test t5 t5 param10 param10 8 20 9 Y 32768 0 63
|
||||
def test t5 t5 const11 const11 3 4 4 Y 32768 0 63
|
||||
def test t5 t5 param11 param11 8 20 4 Y 32768 0 63
|
||||
def test t5 t5 const12 const12 254 0 0 Y 0 0 8
|
||||
def test t5 t5 const12 const12 254 0 0 Y 128 0 63
|
||||
def test t5 t5 param12 param12 8 20 0 Y 32768 0 63
|
||||
def test t5 t5 param13 param13 5 20 0 Y 32768 31 63
|
||||
def test t5 t5 param14 param14 252 16777215 0 Y 16 0 8
|
||||
|
@@ -162,9 +162,9 @@ master-bin.000001 # Query 1 # use `mysqltest2`; drop database mysqltest2
|
||||
master-bin.000001 # Query 1 # SET ONE_SHOT CHARACTER_SET_CLIENT=8,COLLATION_CONNECTION=31,COLLATION_DATABASE=9,COLLATION_SERVER=64
|
||||
master-bin.000001 # Query 1 # drop database mysqltest3
|
||||
set global character_set_server=latin2;
|
||||
ERROR HY000: Binary logging and replication forbid changing the global server character set or collation
|
||||
ERROR HY000: Binary logging and replication forbid changing the global server character set, collation
|
||||
set global character_set_server=latin2;
|
||||
ERROR HY000: Binary logging and replication forbid changing the global server character set or collation
|
||||
ERROR HY000: Binary logging and replication forbid changing the global server character set, collation
|
||||
set one_shot @@character_set_server=latin5;
|
||||
set @@max_join_size=1000;
|
||||
select @@character_set_server;
|
||||
@@ -181,7 +181,7 @@ select @@character_set_server;
|
||||
@@character_set_server
|
||||
latin5
|
||||
set one_shot max_join_size=10;
|
||||
ERROR HY000: The SET ONE_SHOT syntax is reserved for purposes internal to the MySQL server
|
||||
ERROR HY000: The 'SET ONE_SHOT' syntax is reserved for purposes internal to the MySQL server
|
||||
set character_set_client=9999999;
|
||||
ERROR 42000: Unknown character set: '9999999'
|
||||
set collation_server=9999998;
|
||||
|
22
mysql-test/r/rpl_rewrite_db.result
Normal file
22
mysql-test/r/rpl_rewrite_db.result
Normal file
@@ -0,0 +1,22 @@
|
||||
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;
|
||||
drop database if exists mysqltest1;
|
||||
create database mysqltest1;
|
||||
use mysqltest1;
|
||||
create table t1 (a int);
|
||||
insert into t1 values(9);
|
||||
select * from mysqltest1.t1;
|
||||
a
|
||||
9
|
||||
show databases like 'mysqltest1';
|
||||
Database (mysqltest1)
|
||||
mysqltest1
|
||||
select * from test.t1;
|
||||
a
|
||||
9
|
||||
drop table t1;
|
||||
drop database mysqltest1;
|
@@ -1,7 +1,7 @@
|
||||
drop table if exists t1, t2, t3, t4;
|
||||
drop table if exists t1, t2, t3, t4;
|
||||
start slave;
|
||||
ERROR HY000: Could not initialize master info structure; more error messages can be found in the MySQL error log
|
||||
ERROR HY000: File 'TESTDIR/var/slave-data/master.info' not found (Errcode: 13)
|
||||
start slave;
|
||||
ERROR HY000: Could not initialize master info structure; more error messages can be found in the MySQL error log
|
||||
change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root';
|
||||
|
@@ -73,5 +73,5 @@ t
|
||||
2001-09-09 03:46:40
|
||||
1000000000
|
||||
set global time_zone='MET';
|
||||
ERROR HY000: Binary logging and replication forbid changing of the global server time zone
|
||||
ERROR HY000: Binary logging and replication forbid changing the global server time zone
|
||||
drop table t1, t2;
|
||||
|
@@ -30,7 +30,7 @@ db1_secret
|
||||
select * from db1_secret.t1;
|
||||
ERROR 42000: Access denied for user 'user1'@'localhost' to database 'db1_secret'
|
||||
create procedure db1_secret.dummy() begin end;
|
||||
ERROR 42000: Unknown database 'db1_secret'
|
||||
ERROR 42000: Access denied for user 'user1'@'localhost' to database 'db1_secret'
|
||||
drop procedure db1_secret.dummy;
|
||||
ERROR 42000: PROCEDURE db1_secret.dummy does not exist
|
||||
call db1_secret.stamp(3);
|
||||
@@ -40,7 +40,7 @@ db1_secret
|
||||
select * from db1_secret.t1;
|
||||
ERROR 42000: Access denied for user ''@'localhost' to database 'db1_secret'
|
||||
create procedure db1_secret.dummy() begin end;
|
||||
ERROR 42000: Unknown database 'db1_secret'
|
||||
ERROR 42000: Access denied for user ''@'localhost' to database 'db1_secret'
|
||||
drop procedure db1_secret.dummy;
|
||||
ERROR 42000: PROCEDURE db1_secret.dummy does not exist
|
||||
select * from t1;
|
||||
|
@@ -1746,10 +1746,20 @@ drop table if exists t3|
|
||||
create procedure bug4904()
|
||||
begin
|
||||
declare continue handler for sqlstate 'HY000' begin end;
|
||||
create table t2 as select * from t;
|
||||
create table t2 as select * from t3;
|
||||
end|
|
||||
call bug4904()|
|
||||
ERROR 42S02: Table 'test.t3' doesn't exist
|
||||
drop procedure bug4904|
|
||||
create table t3 (s1 char character set latin1, s2 char character set latin2)|
|
||||
create procedure bug4904 ()
|
||||
begin
|
||||
declare continue handler for sqlstate 'HY000' begin end;
|
||||
select s1 from t3 union select s2 from t3;
|
||||
end|
|
||||
call bug4904()|
|
||||
drop procedure bug4904|
|
||||
drop table t3|
|
||||
create procedure bug336(out y int)
|
||||
begin
|
||||
declare x int;
|
||||
|
41
mysql-test/r/timezone3.result
Normal file
41
mysql-test/r/timezone3.result
Normal file
@@ -0,0 +1,41 @@
|
||||
drop table if exists t1;
|
||||
create table t1 (i int, c varchar(20));
|
||||
insert into t1 values
|
||||
(unix_timestamp("2004-01-01 00:00:00"), "2004-01-01 00:00:00");
|
||||
insert into t1 values
|
||||
(unix_timestamp("2004-03-28 01:59:59"), "2004-03-28 01:59:59"),
|
||||
(unix_timestamp("2004-03-28 02:30:00"), "2004-03-28 02:30:00"),
|
||||
(unix_timestamp("2004-03-28 03:00:00"), "2004-03-28 03:00:00");
|
||||
insert into t1 values
|
||||
(unix_timestamp('2004-05-01 00:00:00'),'2004-05-01 00:00:00');
|
||||
insert into t1 values
|
||||
(unix_timestamp('2004-10-31 01:00:00'),'2004-10-31 01:00:00'),
|
||||
(unix_timestamp('2004-10-31 02:00:00'),'2004-10-31 02:00:00'),
|
||||
(unix_timestamp('2004-10-31 02:59:59'),'2004-10-31 02:59:59'),
|
||||
(unix_timestamp('2004-10-31 04:00:00'),'2004-10-31 04:00:00'),
|
||||
(unix_timestamp('2004-10-31 02:59:59'),'2004-10-31 02:59:59');
|
||||
insert into t1 values
|
||||
(unix_timestamp('1981-07-01 03:59:59'),'1981-07-01 03:59:59'),
|
||||
(unix_timestamp('1981-07-01 04:00:00'),'1981-07-01 04:00:00');
|
||||
select i, from_unixtime(i), c from t1;
|
||||
i from_unixtime(i) c
|
||||
1072904422 2004-01-01 00:00:00 2004-01-01 00:00:00
|
||||
1080428421 2004-03-28 01:59:59 2004-03-28 01:59:59
|
||||
1080428422 2004-03-28 03:00:00 2004-03-28 02:30:00
|
||||
1080428422 2004-03-28 03:00:00 2004-03-28 03:00:00
|
||||
1083355222 2004-05-01 00:00:00 2004-05-01 00:00:00
|
||||
1099170022 2004-10-31 01:00:00 2004-10-31 01:00:00
|
||||
1099177222 2004-10-31 02:00:00 2004-10-31 02:00:00
|
||||
1099180821 2004-10-31 02:59:59 2004-10-31 02:59:59
|
||||
1099184422 2004-10-31 04:00:00 2004-10-31 04:00:00
|
||||
1099180821 2004-10-31 02:59:59 2004-10-31 02:59:59
|
||||
362793608 1981-07-01 03:59:59 1981-07-01 03:59:59
|
||||
362793610 1981-07-01 04:00:00 1981-07-01 04:00:00
|
||||
drop table t1;
|
||||
create table t1 (ts timestamp);
|
||||
insert into t1 values (19730101235900), (20040101235900);
|
||||
select * from t1;
|
||||
ts
|
||||
1973-01-01 23:59:00
|
||||
2004-01-01 23:59:00
|
||||
drop table t1;
|
@@ -174,3 +174,15 @@ create trigger tx1 before insert on t1 for each row set new.x1col = 'x';
|
||||
insert into t1 values ('y');
|
||||
drop trigger t1.tx1;
|
||||
drop table t1;
|
||||
create table t1 (i int) engine=myisam;
|
||||
insert into t1 values (1), (2);
|
||||
create trigger trg1 before delete on t1 for each row set @del_before:= @del_before + old.i;
|
||||
create trigger trg2 after delete on t1 for each row set @del_after:= @del_after + old.i;
|
||||
set @del_before:=0, @del_after:= 0;
|
||||
delete from t1;
|
||||
select @del_before, @del_after;
|
||||
@del_before @del_after
|
||||
3 3
|
||||
drop trigger t1.trg1;
|
||||
drop trigger t1.trg2;
|
||||
drop table t1;
|
||||
|
@@ -1221,11 +1221,11 @@ ERROR 42000: FUNCTION test.x1 does not exist
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 MyISAM 9 Fixed 0 0 0 21474836479 1024 0 NULL # # NULL latin1_swedish_ci NULL
|
||||
v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
|
||||
v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL FUNCTION test.x1 does not exist
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 MyISAM 9 Fixed 0 0 0 21474836479 1024 0 NULL # # NULL latin1_swedish_ci NULL
|
||||
v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL view
|
||||
v1 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL # # NULL NULL NULL NULL FUNCTION test.x1 does not exist
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
create view v1 as select 99999999999999999999999999999999999999999999999999999 as col1;
|
||||
|
BIN
mysql-test/std_data/Moscow_leap
Normal file
BIN
mysql-test/std_data/Moscow_leap
Normal file
Binary file not shown.
@@ -324,3 +324,15 @@ alter table t1 rename to `t1\\`;
|
||||
rename table t1 to `t1\\`;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #6479 ALTER TABLE ... changing charset fails for TEXT columns
|
||||
#
|
||||
# The column's character set was changed but the actual data was not
|
||||
# modified. In other words, the values were reinterpreted
|
||||
# as UTF8 instead of being converted.
|
||||
create table t1 (a text) character set koi8r;
|
||||
insert into t1 values (_koi8r'<27><><EFBFBD><EFBFBD>');
|
||||
select hex(a) from t1;
|
||||
alter table t1 convert to character set cp1251;
|
||||
select hex(a) from t1;
|
||||
drop table t1;
|
||||
|
@@ -1,2 +1,2 @@
|
||||
--disable_result_log
|
||||
--exec $TESTS_BINDIR/client_test --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent
|
||||
--exec $TESTS_BINDIR/client_test --no-defaults --testcase --user=root --socket=$MASTER_MYSOCK --port=$MYSQL_TCP_PORT --silent
|
||||
|
@@ -49,7 +49,7 @@ flush privileges;
|
||||
#show tables;
|
||||
connect (con1,localhost,test,gambling2,mysql);
|
||||
set password="";
|
||||
--error 1105
|
||||
--error 1372
|
||||
set password='gambling3';
|
||||
set password=old_password('gambling3');
|
||||
show tables;
|
||||
|
41
mysql-test/t/consistent_snapshot.test
Normal file
41
mysql-test/t/consistent_snapshot.test
Normal file
@@ -0,0 +1,41 @@
|
||||
-- source include/have_innodb.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
|
||||
### Test 1:
|
||||
### - While a consistent snapshot transaction is executed,
|
||||
### no external inserts should be visible to the transaction.
|
||||
|
||||
connection con1;
|
||||
create table t1 (a int) engine=innodb;
|
||||
start transaction with consistent snapshot;
|
||||
|
||||
connection con2;
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con1;
|
||||
select * from t1; # if consistent snapshot was set as expected, we
|
||||
# should see nothing.
|
||||
commit;
|
||||
|
||||
### Test 2:
|
||||
### - For any non-consistent snapshot transaction, external
|
||||
### committed inserts should be visible to the transaction.
|
||||
|
||||
delete from t1;
|
||||
start transaction; # Now we omit WITH CONSISTENT SNAPSHOT
|
||||
|
||||
connection con2;
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con1;
|
||||
select * from t1; # if consistent snapshot was not set, as expected, we
|
||||
# should see 1.
|
||||
commit;
|
||||
|
||||
drop table t1;
|
@@ -83,3 +83,39 @@ CREATE TABLE t1 (
|
||||
SHOW CREATE TABLE t1;
|
||||
SHOW COLUMNS FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #6345 Unexpected behaviour with partial indices
|
||||
#
|
||||
--disable_warnings
|
||||
CREATE TABLE t1
|
||||
(
|
||||
a INTEGER NOT NULL,
|
||||
b VARCHAR(50) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (a),
|
||||
KEY b (b(10))
|
||||
) TYPE=InnoDB CHARACTER SET 'ujis' COLLATE 'ujis_japanese_ci';
|
||||
--enable_warnings
|
||||
INSERT INTO t1 (a, b) VALUES (0, 'aaabbbcccddd');
|
||||
INSERT INTO t1 (a, b) VALUES (1, 'eeefffggghhh');
|
||||
INSERT INTO t1 (a, b) VALUES (2, 'iiijjjkkkl');
|
||||
SELECT t1.* FROM t1 WHERE b='aaabbbcccddd' ORDER BY a;
|
||||
SELECT t1.* FROM t1 WHERE b='eeefffggghhh' ORDER BY a;
|
||||
SELECT t1.* FROM t1 WHERE b='iiijjjkkkl' ORDER BY a;
|
||||
DROP TABLE t1;
|
||||
--disable_warnings
|
||||
CREATE TABLE t1
|
||||
(
|
||||
a INTEGER NOT NULL,
|
||||
b VARCHAR(50) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (a),
|
||||
KEY b (b(10))
|
||||
) TYPE=MyISAM CHARACTER SET 'ujis' COLLATE 'ujis_japanese_ci';
|
||||
--enable_warnings
|
||||
INSERT INTO t1 (a, b) VALUES (0, 'aaabbbcccddd');
|
||||
INSERT INTO t1 (a, b) VALUES (1, 'eeefffggghhh');
|
||||
INSERT INTO t1 (a, b) VALUES (2, 'iiijjjkkkl');
|
||||
SELECT t1.* FROM t1 WHERE b='aaabbbcccddd' ORDER BY a;
|
||||
SELECT t1.* FROM t1 WHERE b='eeefffggghhh' ORDER BY a;
|
||||
SELECT t1.* FROM t1 WHERE b='iiijjjkkkl' ORDER BY a;
|
||||
DROP TABLE t1;
|
||||
|
@@ -82,6 +82,12 @@ select unhex(hex("foobar")), hex(unhex("1234567890ABCDEF")), unhex("345678"), un
|
||||
select hex(unhex("1")), hex(unhex("12")), hex(unhex("123")), hex(unhex("1234")), hex(unhex("12345")), hex(unhex("123456"));
|
||||
select length(unhex(md5("abrakadabra")));
|
||||
|
||||
#
|
||||
# Bug #6564: QUOTE(NULL
|
||||
#
|
||||
|
||||
select concat('a', quote(NULL));
|
||||
|
||||
#
|
||||
# Wrong usage of functions
|
||||
#
|
||||
|
@@ -97,6 +97,30 @@ drop table t1;
|
||||
GRANT FILE on mysqltest.* to mysqltest_1@localhost;
|
||||
select 1; -- To test that the previous command didn't cause problems
|
||||
|
||||
#
|
||||
# Bug #4898: User privileges depending on ORDER BY Settings of table db
|
||||
#
|
||||
insert into mysql.user (host, user) values ('localhost', 'test11');
|
||||
insert into mysql.db (host, db, user, select_priv) values
|
||||
('localhost', 'a%', 'test11', 'Y'), ('localhost', 'ab%', 'test11', 'Y');
|
||||
alter table mysql.db order by db asc;
|
||||
flush privileges;
|
||||
show grants for test11@localhost;
|
||||
alter table mysql.db order by db desc;
|
||||
flush privileges;
|
||||
show grants for test11@localhost;
|
||||
delete from mysql.user where user='test11';
|
||||
delete from mysql.db where user='test11';
|
||||
|
||||
#
|
||||
# Bug#6123: GRANT USAGE inserts useless Db row
|
||||
#
|
||||
create database mysqltest1;
|
||||
grant usage on mysqltest1.* to test6123 identified by 'magic123';
|
||||
select host,db,user,select_priv,insert_priv from mysql.db where db="mysqltest1";
|
||||
delete from mysql.user where user='test6123';
|
||||
drop database mysqltest1;
|
||||
|
||||
#
|
||||
# Test for 'drop user', 'revoke privileges, grant'
|
||||
#
|
||||
@@ -174,21 +198,6 @@ REVOKE SELECT (
|
||||
DROP DATABASE <20><>;
|
||||
SET NAMES latin1;
|
||||
|
||||
#
|
||||
# Bug #4898: User privileges depending on ORDER BY Settings of table db
|
||||
#
|
||||
insert into mysql.user (host, user) values ('localhost', 'test11');
|
||||
insert into mysql.db (host, db, user, select_priv) values
|
||||
('localhost', 'a%', 'test11', 'Y'), ('localhost', 'ab%', 'test11', 'Y');
|
||||
alter table mysql.db order by db asc;
|
||||
flush privileges;
|
||||
show grants for test11@localhost;
|
||||
alter table mysql.db order by db desc;
|
||||
flush privileges;
|
||||
show grants for test11@localhost;
|
||||
delete from mysql.user where user='test11';
|
||||
delete from mysql.db where user='test11';
|
||||
|
||||
#
|
||||
# Bug #5831: REVOKE ALL PRIVILEGES, GRANT OPTION does not revoke everything
|
||||
#
|
||||
|
@@ -2,7 +2,7 @@
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
drop table if exists t1,t2,t3;
|
||||
--enable_warnings
|
||||
|
||||
create table t1 (a int);
|
||||
@@ -122,3 +122,196 @@ from t1 a left join t3 b on a.id=b.order_id
|
||||
group by a.id, a.description
|
||||
having (a.description is not null) and (c=0);
|
||||
drop table t1,t2,t3;
|
||||
|
||||
|
||||
#
|
||||
# Tests for WL#1972 CORRECT EVALUATION OF COLUMN REFERENCES IN THE HAVING CLAUSE
|
||||
# Per the SAP VERI tests and WL#1972, MySQL must ensure that HAVING can
|
||||
# correctly evaluate column references from the GROUP BY clause, even if the
|
||||
# same references are not also found in the select list.
|
||||
#
|
||||
|
||||
# set global sql_mode='ansi';
|
||||
# set session sql_mode='ansi';
|
||||
|
||||
create table t1 (col1 int, col2 varchar(5), col_t1 int);
|
||||
create table t2 (col1 int, col2 varchar(5), col_t2 int);
|
||||
create table t3 (col1 int, col2 varchar(5), col_t3 int);
|
||||
|
||||
insert into t1 values(10,'hello',10);
|
||||
insert into t1 values(20,'hello',20);
|
||||
insert into t1 values(30,'hello',30);
|
||||
insert into t1 values(10,'bye',10);
|
||||
insert into t1 values(10,'sam',10);
|
||||
insert into t1 values(10,'bob',10);
|
||||
|
||||
insert into t2 select * from t1;
|
||||
insert into t3 select * from t1;
|
||||
|
||||
select count(*) from t1 group by col1 having col1 = 10;
|
||||
select count(*) as count_col1 from t1 group by col1 having col1 = 10;
|
||||
select count(*) as count_col1 from t1 as tmp1 group by col1 having col1 = 10;
|
||||
select count(*) from t1 group by col2 having col2 = 'hello';
|
||||
--error 1054
|
||||
select count(*) from t1 group by col2 having col1 = 10;
|
||||
select col1 as count_col1 from t1 as tmp1 group by col1 having col1 = 10;
|
||||
select col1 as count_col1 from t1 as tmp1 group by col1 having count_col1 = 10;
|
||||
select col1 as count_col1 from t1 as tmp1 group by count_col1 having col1 = 10;
|
||||
# ANSI: should return SQLSTATE 42000 Syntax error or access violation
|
||||
# MySQL: returns 10 - because of GROUP BY name resolution
|
||||
select col1 as count_col1 from t1 as tmp1 group by count_col1 having count_col1 = 10;
|
||||
# ANSI: should return SQLSTATE 42000 Syntax error or access violation
|
||||
# MySQL: returns 10 - because of GROUP BY name resolution
|
||||
select col1 as count_col1,col2 from t1 as tmp1 group by col1,col2 having col1 = 10;
|
||||
select col1 as count_col1,col2 from t1 as tmp1 group by col1,col2 having count_col1 = 10;
|
||||
select col1 as count_col1,col2 from t1 as tmp1 group by col1,col2 having col2 = 'hello';
|
||||
select col1 as count_col1,col2 as group_col2 from t1 as tmp1 group by col1,col2 having group_col2 = 'hello';
|
||||
--error 1064
|
||||
select sum(col1) as co12 from t1 group by col2 having col2 10;
|
||||
select sum(col1) as co2, count(col2) as cc from t1 group by col1 having col1 =10;
|
||||
--error 1054
|
||||
select t2.col2 from t2 group by t2.col1, t2.col2 having t1.col1 <= 10;
|
||||
|
||||
|
||||
#
|
||||
# queries with nested sub-queries
|
||||
#
|
||||
|
||||
# the having column is resolved in the same query
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having t2.col1 <= 10);
|
||||
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2
|
||||
having t2.col1 <=
|
||||
(select min(t3.col1) from t3));
|
||||
|
||||
# the having column is resolved in the SELECT clause of the outer query -
|
||||
# works in ANSI
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having t1.col1 <= 10);
|
||||
|
||||
# the having column is resolved in the SELECT clause of the outer query -
|
||||
# error in ANSI, works with MySQL extension
|
||||
select t1.col1 as tmp_col from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having tmp_col <= 10);
|
||||
|
||||
# the having column is resolved in the FROM clause of the outer query -
|
||||
# works in ANSI
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having col_t1 <= 10);
|
||||
|
||||
# Item_field must be resolved in the same way as Item_ref
|
||||
select sum(col1) from t1
|
||||
group by col_t1
|
||||
having (select col_t1 from t2 where col_t1 = col_t2 order by col_t2 limit 1);
|
||||
|
||||
# nested queries with HAVING, inner having column resolved in outer FROM clause
|
||||
# the outer having column is not referenced in GROUP BY which results in an error
|
||||
--error 1054
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having col_t1 <= 10)
|
||||
having col_t1 <= 20;
|
||||
|
||||
# both having columns are resolved in the GROUP clause of the outer query
|
||||
select t1.col1 from t1
|
||||
where t1.col2 in
|
||||
(select t2.col2 from t2
|
||||
group by t2.col1, t2.col2 having col_t1 <= 10)
|
||||
group by col_t1
|
||||
having col_t1 <= 20;
|
||||
|
||||
|
||||
#
|
||||
# nested HAVING clauses
|
||||
#
|
||||
|
||||
# non-correlated subqueries
|
||||
select col_t1, sum(col1) from t1
|
||||
group by col_t1
|
||||
having col_t1 > 10 and
|
||||
exists (select sum(t2.col1) from t2
|
||||
group by t2.col2 having t2.col2 > 'b');
|
||||
|
||||
# correlated subqueries - inner having column 't1.col2' resolves to
|
||||
# the outer FROM clause, which cannot be used because the outer query
|
||||
# is grouped
|
||||
--error 1054
|
||||
select sum(col1) from t1
|
||||
group by col_t1
|
||||
having col_t1 in (select sum(t2.col1) from t2
|
||||
group by t2.col2, t2.col1 having t2.col1 = t1.col1);
|
||||
|
||||
# correlated subqueries - inner having column 'col_t1' resolves to
|
||||
# the outer GROUP clause
|
||||
select sum(col1) from t1
|
||||
group by col_t1
|
||||
having col_t1 in (select sum(t2.col1) from t2
|
||||
group by t2.col2, t2.col1 having t2.col1 = col_t1);
|
||||
|
||||
#
|
||||
# queries with joins and ambiguous column names
|
||||
#
|
||||
--error 1052
|
||||
select t1.col1, t2.col1 from t1, t2 where t1.col1 = t2.col1
|
||||
group by t1.col1, t2.col1 having col1 = 2;
|
||||
|
||||
--error 1052
|
||||
select t1.col1*10+t2.col1 from t1,t2 where t1.col1=t2.col1
|
||||
group by t1.col1, t2.col1 having col1 = 2;
|
||||
|
||||
drop table t1, t2, t3;
|
||||
|
||||
# More queries to test ANSI compatibility
|
||||
create table t1 (s1 int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
|
||||
select count(*) from t1 group by s1 having s1 is null;
|
||||
|
||||
select s1*0 as s1 from t1 group by s1 having s1 <> 0;
|
||||
# ANSI requires: 3 rows
|
||||
# MySQL returns: 0 rows - because of GROUP BY name resolution
|
||||
|
||||
select s1*0 from t1 group by s1 having s1 = 0;
|
||||
|
||||
select s1 from t1 group by 1 having 1 = 0;
|
||||
|
||||
select count(s1) from t1 group by s1 having count(1+1)=2;
|
||||
# ANSI requires: 3 rows
|
||||
# MySQL returns: 0 rows - because of GROUP BY name resolution
|
||||
|
||||
select count(s1) from t1 group by s1 having s1*0=0;
|
||||
|
||||
-- error 1052
|
||||
select * from t1 a, t1 b group by a.s1 having s1 is null;
|
||||
# ANSI requires: 0 rows
|
||||
# MySQL returns:
|
||||
# "ERROR 1052 (23000): Column 's1' in having clause is ambiguous"
|
||||
# I think the column is ambiguous in ANSI too.
|
||||
# It is the same as:
|
||||
# select a.s1, b.s1 from t1 a, t1 b group by a.s1 having s1 is null;
|
||||
# currently we first check SELECT, thus s1 is ambiguous.
|
||||
|
||||
drop table t1;
|
||||
|
||||
create table t1 (s1 char character set latin1 collate latin1_german1_ci);
|
||||
insert into t1 values ('ü'),('y');
|
||||
|
||||
select s1,count(s1) from t1
|
||||
group by s1 collate latin1_swedish_ci having s1 = 'y';
|
||||
# ANSI requires: 1 row, with count(s1) = 2
|
||||
# MySQL returns: 1 row, with count(s1) = 1
|
||||
|
||||
drop table t1;
|
||||
|
224
mysql-test/t/information_schema.test
Normal file
224
mysql-test/t/information_schema.test
Normal file
@@ -0,0 +1,224 @@
|
||||
|
||||
# Test for information_schema.schemata &
|
||||
# show databases
|
||||
|
||||
grant all privileges on test.* to mysqltest_1@localhost;
|
||||
|
||||
select * from information_schema.SCHEMATA where schema_name > 'm';
|
||||
select schema_name from information_schema.schemata;
|
||||
show databases *;
|
||||
show databases like 't%';
|
||||
show databases;
|
||||
show databases * where schema_name like 't%';
|
||||
show databases * where schema_name = 't%';
|
||||
|
||||
# Test for information_schema.tables &
|
||||
# show tables
|
||||
|
||||
create database testtets;
|
||||
create table testtets.t1(a int, b VARCHAR(30), KEY string_data (b));
|
||||
create table test.t2(a int);
|
||||
create table t3(a int, KEY a_data (a));
|
||||
create table testtets.t4(a int);
|
||||
create view v1 (c) as select table_name from information_schema.TABLES;
|
||||
select * from v1;
|
||||
select c,table_name from v1
|
||||
left join information_schema.TABLES v2 on (v1.c=v2.table_name)
|
||||
where v1.c like "t%";
|
||||
|
||||
select c, v2.table_name from v1
|
||||
right join information_schema.TABLES v2 on (v1.c=v2.table_name)
|
||||
where v1.c like "t%";
|
||||
|
||||
select table_name from information_schema.TABLES
|
||||
where table_schema = "testtets" and table_name like "t%";
|
||||
|
||||
select * from information_schema.STATISTICS where TABLE_SCHEMA = "testtets";
|
||||
show keys * where TABLE_SCHEMA Like "test%";
|
||||
show keys where INDEX_NAME = "a_data";
|
||||
|
||||
show tables like 't%';
|
||||
--replace_column 15 # 16 #
|
||||
show tables * from test where table_name like 't%';
|
||||
--replace_column 12 # 13 #
|
||||
show table status;
|
||||
show full columns from t3 like "a%";
|
||||
show full columns from mysql.db like "Insert%";
|
||||
show full columns from v1;
|
||||
select * from information_schema.COLUMNS where table_name="t1"
|
||||
and column_name= "a";
|
||||
show columns * where table_name = "t1";
|
||||
|
||||
drop view v1;
|
||||
drop tables testtets.t4, testtets.t1, t2, t3;
|
||||
drop database testtets;
|
||||
|
||||
# Test for information_schema.CHARACTER_SETS &
|
||||
# SHOW CHARACTER SET
|
||||
|
||||
select * from information_schema.CHARACTER_SETS
|
||||
where CHARACTER_SET_NAME like 'latin1%';
|
||||
SHOW CHARACTER SET LIKE 'latin1%';
|
||||
SHOW CHARACTER SET * LIKE 'latin1%';
|
||||
SHOW CHARACTER SET WHERE CHARACTER_SET_NAME like 'latin1%';
|
||||
SHOW CHARACTER SET CHARACTER_SET_NAME WHERE CHARACTER_SET_NAME like 'latin1%';
|
||||
SHOW CHARACTER SET * WHERE CHARACTER_SET_NAME like 'latin1%';
|
||||
|
||||
# Test for information_schema.COLLATIONS &
|
||||
# SHOW COLLATION
|
||||
|
||||
select * from information_schema.COLLATIONS
|
||||
where COLLATION_NAME like 'latin1%';
|
||||
SHOW COLLATION LIKE 'latin1%';
|
||||
SHOW COLLATION * LIKE 'latin1%';
|
||||
SHOW COLLATION WHERE COLLATION_NAME like 'latin1%';
|
||||
SHOW COLLATION COLLATION_NAME WHERE COLLATION_NAME like 'latin1%';
|
||||
SHOW COLLATION * WHERE COLLATION_NAME like 'latin1%';
|
||||
|
||||
select * from information_schema.COLLATION_CHARACTER_SET_APPLICABILITY
|
||||
where COLLATION_NAME like 'latin1%';
|
||||
|
||||
# Test for information_schema.ROUTINES &
|
||||
#
|
||||
|
||||
create function sub1(i int) returns int
|
||||
return i+1;
|
||||
delimiter |;
|
||||
create procedure sel2()
|
||||
begin
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
--replace_column 5 # 6 #
|
||||
show procedure status;
|
||||
--replace_column 5 # 6 #
|
||||
show function status;
|
||||
select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
||||
information_schema.SCHEMATA b where
|
||||
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
|
||||
--replace_column 3 #
|
||||
explain select a.ROUTINE_NAME from information_schema.ROUTINES a,
|
||||
information_schema.SCHEMATA b where
|
||||
a.ROUTINE_SCHEMA = b.SCHEMA_NAME;
|
||||
|
||||
select a.ROUTINE_NAME, b.name from information_schema.ROUTINES a,
|
||||
mysql.proc b where a.ROUTINE_NAME = b.name;
|
||||
select count(*) from information_schema.ROUTINES;
|
||||
|
||||
#
|
||||
# Test for views
|
||||
#
|
||||
create view v0 (c) as select schema_name from information_schema.SCHEMATA;
|
||||
select * from v0;
|
||||
--replace_column 3 #
|
||||
explain select * from v0;
|
||||
create view v1 (c) as select table_name from information_schema.TABLES
|
||||
where table_name="v1";
|
||||
select * from v1;
|
||||
create view v2 (c) as select column_name from information_schema.COLUMNS
|
||||
where table_name="v2";
|
||||
select * from v2;
|
||||
create view v3 (c) as select CHARACTER_SET_NAME from information_schema.CHARACTER_SETS
|
||||
where CHARACTER_SET_NAME like "latin1%";
|
||||
select * from v3;
|
||||
create view v4 (c) as select COLLATION_NAME from information_schema.COLLATIONS
|
||||
where COLLATION_NAME like "latin1%";
|
||||
select * from v4;
|
||||
show keys from v4;
|
||||
select * from information_schema.VIEWS where TABLE_NAME like "v%";
|
||||
drop view v0, v1, v2, v3, v4;
|
||||
|
||||
#
|
||||
# Test for privileges tables
|
||||
#
|
||||
create table t1 (a int);
|
||||
grant select,update,insert on t1 to mysqltest_1@localhost;
|
||||
grant select (a), update (a),insert(a), references(a) on t1 to mysqltest_1@localhost;
|
||||
grant all on test.* to mysqltest_1@localhost with grant option;
|
||||
select * from information_schema.USER_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||
select * from information_schema.SCHEMA_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||
select * from information_schema.TABLE_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||
select * from information_schema.COLUMN_PRIVILEGES where grantee like '%mysqltest_1%';
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
delete from mysql.db where user='mysqltest_1';
|
||||
delete from mysql.tables_priv where user='mysqltest_1';
|
||||
delete from mysql.columns_priv where user='mysqltest_1';
|
||||
flush privileges;
|
||||
drop table t1;
|
||||
|
||||
|
||||
#
|
||||
# Test for KEY_COLUMN_USAGE & TABLE_CONSTRAINTS tables
|
||||
#
|
||||
|
||||
create table t1 (a int null, primary key(a));
|
||||
alter table t1 add constraint constraint_1 unique (a);
|
||||
alter table t1 add constraint unique key_1(a);
|
||||
alter table t1 add constraint constraint_2 unique key_2(a);
|
||||
show create table t1;
|
||||
select * from information_schema.TABLE_CONSTRAINTS where
|
||||
TABLE_SCHEMA= "test";
|
||||
select * from information_schema.KEY_COLUMN_USAGE where
|
||||
TABLE_SCHEMA= "test";
|
||||
drop table t1;
|
||||
|
||||
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
|
||||
CREATE TABLE t2 (id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id),
|
||||
FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (t1_id) REFERENCES t1(id) ON UPDATE CASCADE) ENGINE=INNODB;
|
||||
select * from information_schema.TABLE_CONSTRAINTS where
|
||||
TABLE_SCHEMA= "test";
|
||||
select * from information_schema.KEY_COLUMN_USAGE where
|
||||
TABLE_SCHEMA= "test";
|
||||
|
||||
connect (user1,localhost,mysqltest_1,,);
|
||||
connection user1;
|
||||
select table_name from information_schema.TABLES where table_schema like "test%";
|
||||
select table_name,column_name from information_schema.COLUMNS where table_schema like "test%";
|
||||
select ROUTINE_NAME from information_schema.ROUTINES;
|
||||
disconnect user1;
|
||||
connection default;
|
||||
delete from mysql.user where user='mysqltest_1';
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
drop procedure sel2;
|
||||
drop function sub1;
|
||||
|
||||
create table t1(a int);
|
||||
create view v1 (c) as select a from t1 with check option;
|
||||
create view v2 (c) as select a from t1 WITH LOCAL CHECK OPTION;
|
||||
create view v3 (c) as select a from t1 WITH CASCADED CHECK OPTION;
|
||||
select * from information_schema.views;
|
||||
grant select (a) on test.t1 to joe@localhost with grant option;
|
||||
select * from INFORMATION_SCHEMA.COLUMN_PRIVILEGES;
|
||||
select * from INFORMATION_SCHEMA.TABLE_PRIVILEGES;
|
||||
drop view v1, v2, v3;
|
||||
drop table t1;
|
||||
delete from mysql.user where user='joe';
|
||||
delete from mysql.db where user='joe';
|
||||
delete from mysql.tables_priv where user='joe';
|
||||
delete from mysql.columns_priv where user='joe';
|
||||
flush privileges;
|
||||
|
||||
delimiter //;
|
||||
create procedure px5 ()
|
||||
begin
|
||||
declare v int;
|
||||
declare c cursor for select version from
|
||||
information_schema.tables;
|
||||
open c;
|
||||
fetch c into v;
|
||||
select v;
|
||||
close c;
|
||||
end;//
|
||||
|
||||
call px5()//
|
||||
call px5()//
|
||||
delimiter ;//
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -299,5 +299,5 @@ drop table t1;
|
||||
# create dedicated error code for this and
|
||||
# and change my_printf_error() to my_error
|
||||
|
||||
--error 1105
|
||||
--error 1391
|
||||
create table t1 (c char(10), index (c(0)));
|
||||
|
1
mysql-test/t/mix_innodb_myisam_binlog-master.opt
Normal file
1
mysql-test/t/mix_innodb_myisam_binlog-master.opt
Normal file
@@ -0,0 +1 @@
|
||||
--loose-innodb_lock_wait_timeout=2
|
@@ -184,4 +184,36 @@ select a from t1 order by a; # check that savepoints work :)
|
||||
--replace_column 5 #
|
||||
show binlog events from 95;
|
||||
|
||||
# Test for BUG#5714, where a MyISAM update in the transaction used to
|
||||
# release row-level locks in InnoDB
|
||||
|
||||
connect (con3,localhost,root,,);
|
||||
|
||||
connection con3;
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
--disable_warnings
|
||||
alter table t2 type=MyISAM;
|
||||
--enable_warnings
|
||||
insert into t1 values (1);
|
||||
begin;
|
||||
select * from t1 for update;
|
||||
|
||||
connection con2;
|
||||
select (@before:=unix_timestamp())*0; # always give repeatable output
|
||||
begin;
|
||||
send select * from t1 for update;
|
||||
|
||||
connection con3;
|
||||
insert into t2 values (20);
|
||||
|
||||
connection con2;
|
||||
--error 1205
|
||||
reap;
|
||||
select (@after:=unix_timestamp())*0; # always give repeatable output
|
||||
# verify that innodb_lock_wait_timeout was exceeded. When there was
|
||||
# the bug, the reap would return immediately after the insert into t2.
|
||||
select (@after-@before) >= 2;
|
||||
|
||||
# cleanup
|
||||
drop table t1,t2;
|
||||
|
@@ -1,7 +1,7 @@
|
||||
-- source include/have_ndb.inc
|
||||
|
||||
--disable_warnings
|
||||
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,t10;
|
||||
--enable_warnings
|
||||
|
||||
################################################
|
||||
@@ -472,5 +472,11 @@ system rm var/master-data/test/t9.frm ;
|
||||
# MySQL Server will have been restarted because it has a
|
||||
# ndb_autodiscover2-master.opt file.
|
||||
|
||||
create table t10 (
|
||||
a int not null primary key,
|
||||
b blob
|
||||
) engine=ndb;
|
||||
|
||||
insert into t10 values (1, 'kalle');
|
||||
|
||||
--exec $NDB_TOOLS_DIR/ndb_drop_table -d test `$NDB_TOOLS_DIR/ndb_show_tables | grep BLOB` > /dev/null 2>&1 || true
|
||||
|
@@ -13,4 +13,7 @@ show status like 'handler_discover%';
|
||||
|
||||
drop table t9;
|
||||
|
||||
--error 1296
|
||||
select * from t10;
|
||||
drop table t10;
|
||||
|
||||
|
@@ -360,6 +360,21 @@ select b,test.t1.attr1 from test.t1, t2 where test.t1.pk1 < a;
|
||||
drop table test.t1, t2;
|
||||
drop database mysqltest;
|
||||
|
||||
#
|
||||
# BUG#6031 - DROP DATABASE doesn't drop database on first try
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop database if exists ndbtest1;
|
||||
--enable_warnings
|
||||
|
||||
create database ndbtest1;
|
||||
use ndbtest1;
|
||||
create table t1(id int) engine=ndbcluster;
|
||||
drop database ndbtest1;
|
||||
--error 1008
|
||||
drop database ndbtest1;
|
||||
|
||||
#
|
||||
# test support of char(0)
|
||||
#
|
||||
|
@@ -1,7 +1,7 @@
|
||||
-- source include/have_ndb.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop table if exists t1, test1, test2;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
@@ -146,3 +146,29 @@ select * from t1 use index (bc) where b IS NULL and c = 2 order by a;
|
||||
select * from t1 use index (bc) where b < 4 order by a;
|
||||
select * from t1 use index (bc) where b IS NOT NULL order by a;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #6435
|
||||
CREATE TABLE test1 (
|
||||
SubscrID int(11) NOT NULL auto_increment,
|
||||
UsrID int(11) NOT NULL default '0',
|
||||
PRIMARY KEY (SubscrID),
|
||||
KEY idx_usrid (UsrID)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
|
||||
|
||||
INSERT INTO test1 VALUES (2,224),(3,224),(1,224);
|
||||
|
||||
CREATE TABLE test2 (
|
||||
SbclID int(11) NOT NULL auto_increment,
|
||||
SbcrID int(11) NOT NULL default '0',
|
||||
PRIMARY KEY (SbclID),
|
||||
KEY idx_sbcrid (SbcrID)
|
||||
) ENGINE=ndbcluster DEFAULT CHARSET=latin1;
|
||||
|
||||
INSERT INTO test2 VALUES (3,2),(1,1),(2,1),(4,2);
|
||||
select * from test1 order by 1;
|
||||
select * from test2 order by 1;
|
||||
SELECT s.SubscrID,l.SbclID FROM test1 s left JOIN test2 l ON
|
||||
l.SbcrID=s.SubscrID WHERE s.UsrID=224 order by 1, 2;
|
||||
drop table test1;
|
||||
drop table test2;
|
||||
|
@@ -122,3 +122,70 @@ explain select * from t1 where i=2 or i is null;
|
||||
select count(*) from t1 where i=2 or i is null;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# NULL has its own type BINARY(0) by default.
|
||||
# But NULL should be weaker than a constant
|
||||
# when mixing charsets/collations
|
||||
#
|
||||
set names latin2;
|
||||
# Check that result type is taken from a non-null string
|
||||
create table t1 select
|
||||
null as c00,
|
||||
if(1, null, 'string') as c01,
|
||||
if(0, null, 'string') as c02,
|
||||
ifnull(null, 'string') as c03,
|
||||
ifnull('string', null) as c04,
|
||||
case when 0 then null else 'string' end as c05,
|
||||
case when 1 then null else 'string' end as c06,
|
||||
coalesce(null, 'string') as c07,
|
||||
coalesce('string', null) as c08,
|
||||
least('string',null) as c09,
|
||||
least(null, 'string') as c10,
|
||||
greatest('string',null) as c11,
|
||||
greatest(null, 'string') as c12,
|
||||
nullif('string', null) as c13,
|
||||
nullif(null, 'string') as c14,
|
||||
trim('string' from null) as c15,
|
||||
trim(null from 'string') as c16,
|
||||
substring_index('string', null, 1) as c17,
|
||||
substring_index(null, 'string', 1) as c18,
|
||||
elt(1, null, 'string') as c19,
|
||||
elt(1, 'string', null) as c20,
|
||||
concat('string', null) as c21,
|
||||
concat(null, 'string') as c22,
|
||||
concat_ws('sep', 'string', null) as c23,
|
||||
concat_ws('sep', null, 'string') as c24,
|
||||
concat_ws(null, 'string', 'string') as c25,
|
||||
make_set(3, 'string', null) as c26,
|
||||
make_set(3, null, 'string') as c27,
|
||||
export_set(3, null, 'off', 'sep') as c29,
|
||||
export_set(3, 'on', null, 'sep') as c30,
|
||||
export_set(3, 'on', 'off', null) as c31,
|
||||
replace(null, 'from', 'to') as c32,
|
||||
replace('str', null, 'to') as c33,
|
||||
replace('str', 'from', null) as c34,
|
||||
insert('str', 1, 2, null) as c35,
|
||||
insert(null, 1, 2, 'str') as c36,
|
||||
lpad('str', 10, null) as c37,
|
||||
rpad(null, 10, 'str') as c38;
|
||||
|
||||
show create table t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Check that comparison is done according to
|
||||
# non-null string collation, i.e. case insensitively,
|
||||
# rather than according to NULL's collation, i.e. case sensitively
|
||||
#
|
||||
-- in field
|
||||
select
|
||||
case 'str' when 'STR' then 'str' when null then 'null' end as c01,
|
||||
case 'str' when null then 'null' when 'STR' then 'str' end as c02,
|
||||
field(null, 'str1', 'str2') as c03,
|
||||
field('str1','STR1', null) as c04,
|
||||
field('str1', null, 'STR1') as c05,
|
||||
'string' in ('STRING', null) as c08,
|
||||
'string' in (null, 'STRING') as c09;
|
||||
|
||||
# Restore charset to the default value.
|
||||
set names latin1;
|
||||
|
@@ -8,7 +8,11 @@
|
||||
# NOTE: PLEASE SEE THE DETAILED DESCRIPTION AT THE BOTTOM OF THIS FILE
|
||||
# BEFORE ADDING NEW TEST CASES HERE !!!
|
||||
|
||||
use test;
|
||||
--disable_warnings
|
||||
drop table if exists t5, t6, t7, t8;
|
||||
drop database if exists mysqltest ;
|
||||
--enable_warnings
|
||||
|
||||
--disable_query_log
|
||||
select '------ basic tests ------' as test_sequence ;
|
||||
--enable_query_log
|
||||
@@ -585,12 +589,9 @@ rename table new_t2 to t2;
|
||||
drop table t2;
|
||||
## RENAME more than on TABLE within one statement
|
||||
# cases derived from client_test.c: test_rename()
|
||||
--disable_warnings
|
||||
drop table if exists t5, t6, t7, t8 ;
|
||||
--enable_warnings
|
||||
prepare stmt1 from ' rename table t5 to t6, t7 to t8 ' ;
|
||||
create table t5 (a int) ;
|
||||
# rename must fail, tc does not exist
|
||||
# rename must fail, t7 does not exist
|
||||
--error 1017
|
||||
execute stmt1 ;
|
||||
create table t7 (a int) ;
|
||||
@@ -859,15 +860,23 @@ select '------ grant/revoke/drop affects a parallel session test ------'
|
||||
--error 1141
|
||||
show grants for second_user@localhost ;
|
||||
## create a new user account by using GRANT statements on t9
|
||||
grant usage on test.* to second_user@localhost
|
||||
create database mysqltest;
|
||||
# create the tables (t1 and t9) used in many tests
|
||||
use mysqltest;
|
||||
--disable_query_log
|
||||
--source include/ps_create.inc
|
||||
--source include/ps_renew.inc
|
||||
--enable_query_log
|
||||
eval use $DB;
|
||||
grant usage on mysqltest.* to second_user@localhost
|
||||
identified by 'looser' ;
|
||||
grant select on test.t9 to second_user@localhost
|
||||
grant select on mysqltest.t9 to second_user@localhost
|
||||
identified by 'looser' ;
|
||||
show grants for second_user@localhost ;
|
||||
|
||||
|
||||
#### establish a second session to the new user account
|
||||
connect (con3,localhost,second_user,looser,test);
|
||||
connect (con3,localhost,second_user,looser,mysqltest);
|
||||
## switch to the second session
|
||||
connection con3;
|
||||
# Who am I ?
|
||||
@@ -885,10 +894,10 @@ select a as my_col from t1;
|
||||
#### give access rights to t1 and drop table t9
|
||||
## switch back to the first session
|
||||
connection default;
|
||||
grant select on test.t1 to second_user@localhost
|
||||
grant select on mysqltest.t1 to second_user@localhost
|
||||
identified by 'looser' ;
|
||||
show grants for second_user@localhost ;
|
||||
drop table t9 ;
|
||||
drop table mysqltest.t9 ;
|
||||
show grants for second_user@localhost ;
|
||||
|
||||
|
||||
@@ -907,7 +916,7 @@ execute s_t9 ;
|
||||
#### revoke the access rights to t1
|
||||
## switch back to the first session
|
||||
connection default;
|
||||
revoke all privileges on test.t1 from second_user@localhost
|
||||
revoke all privileges on mysqltest.t1 from second_user@localhost
|
||||
identified by 'looser' ;
|
||||
show grants for second_user@localhost ;
|
||||
|
||||
@@ -932,8 +941,8 @@ commit ;
|
||||
--error 1141
|
||||
show grants for second_user@localhost ;
|
||||
|
||||
|
||||
drop table t1 ;
|
||||
drop table t1,t9 ;
|
||||
drop database mysqltest;
|
||||
|
||||
|
||||
##### RULES OF THUMB TO PRESERVE THE SYSTEMATICS OF THE PS TEST CASES #####
|
||||
|
@@ -112,10 +112,10 @@ sync_slave_with_master;
|
||||
|
||||
# Check that we can't change global.collation_server
|
||||
|
||||
error 1105;
|
||||
error 1387;
|
||||
set global character_set_server=latin2;
|
||||
connection master;
|
||||
error 1105;
|
||||
error 1387;
|
||||
set global character_set_server=latin2;
|
||||
|
||||
# Check that SET ONE_SHOT is really one shot
|
||||
@@ -129,7 +129,7 @@ select @@character_set_server;
|
||||
select @@character_set_server;
|
||||
|
||||
# ONE_SHOT on not charset/collation stuff is not allowed
|
||||
error 1105;
|
||||
error 1382;
|
||||
set one_shot max_join_size=10;
|
||||
|
||||
# Test of wrong character set numbers;
|
||||
|
1
mysql-test/t/rpl_rewrite_db-slave.opt
Normal file
1
mysql-test/t/rpl_rewrite_db-slave.opt
Normal file
@@ -0,0 +1 @@
|
||||
"--replicate-rewrite-db=mysqltest1->test"
|
19
mysql-test/t/rpl_rewrite_db.test
Normal file
19
mysql-test/t/rpl_rewrite_db.test
Normal file
@@ -0,0 +1,19 @@
|
||||
source include/master-slave.inc;
|
||||
--disable_warnings
|
||||
drop database if exists mysqltest1;
|
||||
--enable_warnings
|
||||
create database mysqltest1;
|
||||
|
||||
use mysqltest1;
|
||||
create table t1 (a int);
|
||||
insert into t1 values(9);
|
||||
select * from mysqltest1.t1;
|
||||
sync_slave_with_master;
|
||||
show databases like 'mysqltest1'; # should be empty
|
||||
select * from test.t1;
|
||||
# cleanup
|
||||
connection master;
|
||||
drop table t1;
|
||||
drop database mysqltest1;
|
||||
sync_slave_with_master;
|
||||
|
@@ -23,7 +23,8 @@ drop table if exists t1, t2, t3, t4;
|
||||
|
||||
# START SLAVE will fail because it can't read the file (mode 000)
|
||||
# (system error 13)
|
||||
--error 1201
|
||||
--replace_result $MYSQL_TEST_DIR TESTDIR
|
||||
--error 1105
|
||||
start slave;
|
||||
system chmod 600 var/slave-data/master.info;
|
||||
# It will fail again because the file is empty so the slave cannot get valuable
|
||||
|
@@ -76,7 +76,7 @@ select * from t2;
|
||||
# replication
|
||||
#
|
||||
connection master;
|
||||
--error 1105
|
||||
--error 1387
|
||||
set global time_zone='MET';
|
||||
|
||||
# Clean up
|
||||
|
@@ -58,7 +58,7 @@ select db1_secret.db();
|
||||
select * from db1_secret.t1;
|
||||
|
||||
# ...and not this
|
||||
--error 1049
|
||||
--error 1044
|
||||
create procedure db1_secret.dummy() begin end;
|
||||
--error 1305
|
||||
drop procedure db1_secret.dummy;
|
||||
@@ -78,7 +78,7 @@ select db1_secret.db();
|
||||
select * from db1_secret.t1;
|
||||
|
||||
# ...and not this
|
||||
--error 1049
|
||||
--error 1044
|
||||
create procedure db1_secret.dummy() begin end;
|
||||
--error 1305
|
||||
drop procedure db1_secret.dummy;
|
||||
|
@@ -1870,12 +1870,27 @@ create procedure bug4904()
|
||||
begin
|
||||
declare continue handler for sqlstate 'HY000' begin end;
|
||||
|
||||
create table t2 as select * from t;
|
||||
create table t2 as select * from t3;
|
||||
end|
|
||||
|
||||
-- error 1146
|
||||
call bug4904()|
|
||||
|
||||
drop procedure bug4904|
|
||||
|
||||
create table t3 (s1 char character set latin1, s2 char character set latin2)|
|
||||
|
||||
create procedure bug4904 ()
|
||||
begin
|
||||
declare continue handler for sqlstate 'HY000' begin end;
|
||||
|
||||
select s1 from t3 union select s2 from t3;
|
||||
end|
|
||||
|
||||
call bug4904()|
|
||||
|
||||
drop procedure bug4904|
|
||||
drop table t3|
|
||||
|
||||
#
|
||||
# BUG#336
|
||||
|
1
mysql-test/t/timezone3-master.opt
Normal file
1
mysql-test/t/timezone3-master.opt
Normal file
@@ -0,0 +1 @@
|
||||
--timezone=:$MYSQL_TEST_DIR/std_data/Moscow_leap
|
59
mysql-test/t/timezone3.test
Normal file
59
mysql-test/t/timezone3.test
Normal file
@@ -0,0 +1,59 @@
|
||||
#
|
||||
# Test of handling time zone with leap seconds.
|
||||
#
|
||||
# This test should be run with TZ=:$MYSQL_TEST_DIR/std_data/Moscow_leap
|
||||
# This implies that this test should be run only on systems that interpret
|
||||
# characters after colon in TZ variable as path to zoneinfo file.
|
||||
#
|
||||
# Check that we have successfully set time zone with leap seconds.
|
||||
--require r/have_moscow_leap_timezone.require
|
||||
disable_query_log;
|
||||
select from_unixtime(1072904422);
|
||||
enable_query_log;
|
||||
|
||||
# Initial clean-up
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Let us check behavior of conversion from broken-down representation
|
||||
# to time_t representation, for normal, non-existent and ambigious dates
|
||||
# (This check is similar to the one in timezone2.test in 4.1)
|
||||
#
|
||||
create table t1 (i int, c varchar(20));
|
||||
# Normal value without DST
|
||||
insert into t1 values
|
||||
(unix_timestamp("2004-01-01 00:00:00"), "2004-01-01 00:00:00");
|
||||
# Values around and in spring time-gap
|
||||
insert into t1 values
|
||||
(unix_timestamp("2004-03-28 01:59:59"), "2004-03-28 01:59:59"),
|
||||
(unix_timestamp("2004-03-28 02:30:00"), "2004-03-28 02:30:00"),
|
||||
(unix_timestamp("2004-03-28 03:00:00"), "2004-03-28 03:00:00");
|
||||
# Normal value with DST
|
||||
insert into t1 values
|
||||
(unix_timestamp('2004-05-01 00:00:00'),'2004-05-01 00:00:00');
|
||||
# Ambiguos values (also check for determenism)
|
||||
insert into t1 values
|
||||
(unix_timestamp('2004-10-31 01:00:00'),'2004-10-31 01:00:00'),
|
||||
(unix_timestamp('2004-10-31 02:00:00'),'2004-10-31 02:00:00'),
|
||||
(unix_timestamp('2004-10-31 02:59:59'),'2004-10-31 02:59:59'),
|
||||
(unix_timestamp('2004-10-31 04:00:00'),'2004-10-31 04:00:00'),
|
||||
(unix_timestamp('2004-10-31 02:59:59'),'2004-10-31 02:59:59');
|
||||
# Test of leap
|
||||
insert into t1 values
|
||||
(unix_timestamp('1981-07-01 03:59:59'),'1981-07-01 03:59:59'),
|
||||
(unix_timestamp('1981-07-01 04:00:00'),'1981-07-01 04:00:00');
|
||||
|
||||
select i, from_unixtime(i), c from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test for bug #6387 "Queried timestamp values do not match the
|
||||
# inserted". my_gmt_sec() function was not working properly if we
|
||||
# had time zone with leap seconds
|
||||
#
|
||||
create table t1 (ts timestamp);
|
||||
insert into t1 values (19730101235900), (20040101235900);
|
||||
select * from t1;
|
||||
drop table t1;
|
@@ -207,3 +207,20 @@ create trigger tx1 before insert on t1 for each row set new.x1col = 'x';
|
||||
insert into t1 values ('y');
|
||||
drop trigger t1.tx1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test for bug #5890 "Triggers fail for DELETE without WHERE".
|
||||
# If we are going to delete all rows in table but DELETE triggers exist
|
||||
# we should perform row-by-row deletion instead of using optimized
|
||||
# delete_all_rows() method.
|
||||
#
|
||||
create table t1 (i int) engine=myisam;
|
||||
insert into t1 values (1), (2);
|
||||
create trigger trg1 before delete on t1 for each row set @del_before:= @del_before + old.i;
|
||||
create trigger trg2 after delete on t1 for each row set @del_after:= @del_after + old.i;
|
||||
set @del_before:=0, @del_after:= 0;
|
||||
delete from t1;
|
||||
select @del_before, @del_after;
|
||||
drop trigger t1.trg1;
|
||||
drop trigger t1.trg2;
|
||||
drop table t1;
|
||||
|
112
mysys/default.c
112
mysys/default.c
@@ -37,6 +37,9 @@
|
||||
#include "m_string.h"
|
||||
#include "m_ctype.h"
|
||||
#include <my_dir.h>
|
||||
#ifdef __WIN__
|
||||
#include <winbase.h>
|
||||
#endif
|
||||
|
||||
char *defaults_extra_file=0;
|
||||
|
||||
@@ -60,10 +63,10 @@ DATADIR,
|
||||
NullS,
|
||||
};
|
||||
|
||||
#define default_ext ".cnf" /* extension for config file */
|
||||
#ifdef __WIN__
|
||||
#include <winbase.h>
|
||||
#define windows_ext ".ini"
|
||||
static const char *f_extensions[]= { ".ini", ".cnf", 0 };
|
||||
#else
|
||||
static const char *f_extensions[]= { ".cnf", 0 };
|
||||
#endif
|
||||
|
||||
/*
|
||||
@@ -81,8 +84,11 @@ struct handle_option_ctx
|
||||
};
|
||||
|
||||
static int search_default_file(Process_option_func func, void *func_ctx,
|
||||
const char *dir, const char *config_file,
|
||||
const char *ext);
|
||||
const char *dir, const char *config_file);
|
||||
static int search_default_file_with_ext(Process_option_func func,
|
||||
void *func_ctx,
|
||||
const char *dir, const char *ext,
|
||||
const char *config_file);
|
||||
|
||||
static char *remove_end_comment(char *ptr);
|
||||
|
||||
@@ -137,8 +143,8 @@ static int search_files(const char *conf_file, int *argc, char ***argv,
|
||||
|
||||
if (forced_default_file)
|
||||
{
|
||||
if ((error= search_default_file(func, func_ctx, "",
|
||||
forced_default_file, "")) < 0)
|
||||
if ((error= search_default_file_with_ext(func, func_ctx, "", "",
|
||||
forced_default_file)) < 0)
|
||||
goto err;
|
||||
if (error > 0)
|
||||
{
|
||||
@@ -149,8 +155,7 @@ static int search_files(const char *conf_file, int *argc, char ***argv,
|
||||
}
|
||||
else if (dirname_length(conf_file))
|
||||
{
|
||||
if ((error= search_default_file(func, func_ctx, NullS, conf_file,
|
||||
default_ext)) < 0)
|
||||
if ((error= search_default_file(func, func_ctx, NullS, conf_file)) < 0)
|
||||
goto err;
|
||||
}
|
||||
else
|
||||
@@ -158,28 +163,30 @@ static int search_files(const char *conf_file, int *argc, char ***argv,
|
||||
#ifdef __WIN__
|
||||
char system_dir[FN_REFLEN];
|
||||
GetWindowsDirectory(system_dir,sizeof(system_dir));
|
||||
if ((search_default_file(func, func_ctx, system_dir, conf_file,
|
||||
windows_ext)))
|
||||
if ((search_default_file(func, func_ctx, system_dir, conf_file)))
|
||||
goto err;
|
||||
#endif
|
||||
#if defined(__EMX__) || defined(OS2)
|
||||
if (getenv("ETC") &&
|
||||
(search_default_file(func, func_ctx, getenv("ETC"), conf_file,
|
||||
default_ext)) < 0)
|
||||
{
|
||||
const char *etc;
|
||||
if ((etc= getenv("ETC")) &&
|
||||
(search_default_file(func, func_ctx, etc, conf_file)) < 0)
|
||||
goto err;
|
||||
}
|
||||
#endif
|
||||
for (dirs= default_directories ; *dirs; dirs++)
|
||||
{
|
||||
if (**dirs)
|
||||
{
|
||||
if (search_default_file(func, func_ctx, *dirs, conf_file, default_ext) < 0)
|
||||
if (search_default_file(func, func_ctx, *dirs, conf_file) < 0)
|
||||
goto err;
|
||||
}
|
||||
else if (defaults_extra_file)
|
||||
{
|
||||
if (search_default_file(func, func_ctx, NullS, defaults_extra_file,
|
||||
default_ext) < 0)
|
||||
if (search_default_file(func, func_ctx, NullS,
|
||||
defaults_extra_file) < 0)
|
||||
goto err; /* Fatal error */
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -226,6 +233,7 @@ int process_default_option_files(const char *conf_file,
|
||||
return search_files(conf_file, &argc, NULL, &args_used, func, func_ctx);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
The option handler for load_defaults.
|
||||
|
||||
@@ -238,10 +246,10 @@ int process_default_option_files(const char *conf_file,
|
||||
prepared to be used in argv (has -- prefix)
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
This handler checks whether a group is one of the listed and adds an option
|
||||
to the array if yes. Some other handler can record, for instance, all groups
|
||||
and their options, not knowing in advance the names and amount of groups.
|
||||
to the array if yes. Some other handler can record, for instance, all
|
||||
groups and their options, not knowing in advance the names and amount of
|
||||
groups.
|
||||
|
||||
RETURN
|
||||
0 - ok
|
||||
@@ -252,8 +260,8 @@ static int handle_default_option(void *in_ctx, const char *group_name,
|
||||
const char *option)
|
||||
{
|
||||
char *tmp;
|
||||
struct handle_option_ctx *ctx;
|
||||
ctx= (struct handle_option_ctx *) in_ctx;
|
||||
struct handle_option_ctx *ctx= (struct handle_option_ctx *) in_ctx;
|
||||
|
||||
if (find_type((char *)group_name, ctx->group, 3))
|
||||
{
|
||||
if (!(tmp= alloc_root(ctx->alloc, (uint) strlen(option) + 1)))
|
||||
@@ -405,18 +413,37 @@ void free_defaults(char **argv)
|
||||
}
|
||||
|
||||
|
||||
static int search_default_file(Process_option_func opt_handler,
|
||||
void *handler_ctx,
|
||||
const char *dir,
|
||||
const char *config_file)
|
||||
{
|
||||
char **ext;
|
||||
|
||||
for (ext= (char**) f_extensions; *ext; *ext++)
|
||||
{
|
||||
int error;
|
||||
if ((error= search_default_file_with_ext(opt_handler, handler_ctx,
|
||||
dir, *ext,
|
||||
config_file)) < 0)
|
||||
return error;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Open a configuration file (if exists) and read given options from it
|
||||
|
||||
SYNOPSIS
|
||||
search_default_file()
|
||||
search_default_file_with_ext()
|
||||
opt_handler Option handler function. It is used to process
|
||||
every separate option.
|
||||
handler_ctx Pointer to the structure to store actual
|
||||
parameters of the function.
|
||||
dir directory to read
|
||||
config_file Name of configuration file
|
||||
ext Extension for configuration file
|
||||
config_file Name of configuration file
|
||||
group groups to read
|
||||
|
||||
RETURN
|
||||
@@ -425,9 +452,11 @@ void free_defaults(char **argv)
|
||||
1 File not found (Warning)
|
||||
*/
|
||||
|
||||
static int search_default_file(Process_option_func opt_handler, void *handler_ctx,
|
||||
const char *dir, const char *config_file,
|
||||
const char *ext)
|
||||
static int search_default_file_with_ext(Process_option_func opt_handler,
|
||||
void *handler_ctx,
|
||||
const char *dir,
|
||||
const char *ext,
|
||||
const char *config_file)
|
||||
{
|
||||
char name[FN_REFLEN+10], buff[4096], curr_gr[4096], *ptr, *end;
|
||||
char *value, option[4096];
|
||||
@@ -618,10 +647,11 @@ static char *remove_end_comment(char *ptr)
|
||||
void print_defaults(const char *conf_file, const char **groups)
|
||||
{
|
||||
#ifdef __WIN__
|
||||
bool have_ext=fn_ext(conf_file)[0] != 0;
|
||||
my_bool have_ext= fn_ext(conf_file)[0] != 0;
|
||||
#endif
|
||||
char name[FN_REFLEN];
|
||||
char name[FN_REFLEN], **ext;
|
||||
const char **dirs;
|
||||
|
||||
puts("\nDefault options are read from the following files in the given order:");
|
||||
|
||||
if (dirname_length(conf_file))
|
||||
@@ -630,13 +660,28 @@ void print_defaults(const char *conf_file, const char **groups)
|
||||
{
|
||||
#ifdef __WIN__
|
||||
GetWindowsDirectory(name,sizeof(name));
|
||||
printf("%s\\%s%s ",name,conf_file,have_ext ? "" : windows_ext);
|
||||
if (!have_ext)
|
||||
{
|
||||
for (ext= (char**) f_extensions; *ext; *ext++)
|
||||
printf("%s\\%s%s ", name, conf_file, *ext);
|
||||
}
|
||||
else
|
||||
printf("%s\\%s ", name, conf_file);
|
||||
#endif
|
||||
#if defined(__EMX__) || defined(OS2)
|
||||
if (getenv("ETC"))
|
||||
printf("%s\\%s%s ", getenv("ETC"), conf_file, default_ext);
|
||||
{
|
||||
const char *etc;
|
||||
|
||||
if ((etc= getenv("ETC")))
|
||||
{
|
||||
for (ext= (char**) f_extensions; *ext; *ext++)
|
||||
printf("%s\\%s%s ", etc, conf_file, *ext);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
for (dirs=default_directories ; *dirs; dirs++)
|
||||
{
|
||||
for (ext= (char**) f_extensions; *ext; *ext++)
|
||||
{
|
||||
const char *pos;
|
||||
char *end;
|
||||
@@ -649,9 +694,10 @@ void print_defaults(const char *conf_file, const char **groups)
|
||||
end= convert_dirname(name, pos, NullS);
|
||||
if (name[0] == FN_HOMELIB) /* Add . to filenames in home */
|
||||
*end++='.';
|
||||
strxmov(end,conf_file,default_ext," ",NullS);
|
||||
strxmov(end, conf_file, *ext, " ", NullS);
|
||||
fputs(name,stdout);
|
||||
}
|
||||
}
|
||||
puts("");
|
||||
}
|
||||
fputs("The following groups are read:",stdout);
|
||||
|
113
mysys/my_error.c
113
mysys/my_error.c
@@ -22,6 +22,15 @@
|
||||
|
||||
/* Define some external variables for error handling */
|
||||
|
||||
/*
|
||||
WARNING!
|
||||
my_error family functions have to be used according following rules:
|
||||
- if message have not parameters use my_message(ER_CODE, ER(ER_CODE), MYF(N))
|
||||
- if message registered use my_error(ER_CODE, MYF(N), ...).
|
||||
- With some special text of errror message use:
|
||||
my_printf_error(ER_CODE, format, MYF(N), ...)
|
||||
*/
|
||||
|
||||
const char ** NEAR my_errmsg[MAXMAPS]={0,0,0,0};
|
||||
char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
||||
|
||||
@@ -43,105 +52,20 @@ char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
||||
|
||||
int my_error(int nr, myf MyFlags, ...)
|
||||
{
|
||||
va_list ap;
|
||||
uint olen, plen;
|
||||
reg1 const char *tpos;
|
||||
reg2 char *endpos;
|
||||
char * par;
|
||||
const char *format;
|
||||
va_list args;
|
||||
char ebuff[ERRMSGSIZE + 20];
|
||||
int prec_chars; /* output precision */
|
||||
my_bool prec_supplied;
|
||||
DBUG_ENTER("my_error");
|
||||
LINT_INIT(prec_chars); /* protected by prec_supplied */
|
||||
|
||||
va_start(ap,MyFlags);
|
||||
DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d", nr, MyFlags, errno));
|
||||
|
||||
if (nr / ERRMOD == GLOB && my_errmsg[GLOB] == 0)
|
||||
init_glob_errs();
|
||||
format= my_errmsg[nr / ERRMOD][nr % ERRMOD];
|
||||
|
||||
olen=(uint) strlen(tpos=my_errmsg[nr / ERRMOD][nr % ERRMOD]);
|
||||
endpos=ebuff;
|
||||
|
||||
while (*tpos)
|
||||
{
|
||||
if (tpos[0] != '%')
|
||||
{
|
||||
*endpos++= *tpos++; /* Copy ordinary char */
|
||||
continue;
|
||||
}
|
||||
if (*++tpos == '%') /* test if %% */
|
||||
{
|
||||
olen--;
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
Skip size/precision flags to be compatible with printf.
|
||||
The only size/precision flag supported is "%.*s".
|
||||
If "%.*u" or "%.*d" are encountered, the precision number is read
|
||||
from the variable argument list but its value is ignored.
|
||||
*/
|
||||
prec_supplied= 0;
|
||||
if (*tpos== '.')
|
||||
{
|
||||
tpos++;
|
||||
olen--;
|
||||
if (*tpos == '*')
|
||||
{
|
||||
tpos++;
|
||||
olen--;
|
||||
prec_chars= va_arg(ap, int); /* get length parameter */
|
||||
prec_supplied= 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (!prec_supplied)
|
||||
{
|
||||
while (my_isdigit(&my_charset_latin1, *tpos) || *tpos == '.' ||
|
||||
*tpos == '-')
|
||||
tpos++;
|
||||
|
||||
if (*tpos == 'l') /* Skip 'l' argument */
|
||||
tpos++;
|
||||
}
|
||||
|
||||
if (*tpos == 's') /* String parameter */
|
||||
{
|
||||
par= va_arg(ap, char *);
|
||||
plen= (uint) strlen(par);
|
||||
if (prec_supplied && prec_chars > 0)
|
||||
plen= min((uint)prec_chars, plen);
|
||||
if (olen + plen < ERRMSGSIZE+2) /* Replace if possible */
|
||||
{
|
||||
strmake(endpos, par, plen);
|
||||
endpos+= plen;
|
||||
tpos++;
|
||||
olen+= plen-2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (*tpos == 'd' || *tpos == 'u') /* Integer parameter */
|
||||
{
|
||||
register int iarg;
|
||||
iarg= va_arg(ap, int);
|
||||
if (*tpos == 'd')
|
||||
plen= (uint) (int10_to_str((long) iarg, endpos, -10) - endpos);
|
||||
else
|
||||
plen= (uint) (int10_to_str((long) (uint) iarg, endpos, 10) - endpos);
|
||||
if (olen + plen < ERRMSGSIZE+2) /* Replace parameter if possible */
|
||||
{
|
||||
endpos+= plen;
|
||||
tpos++;
|
||||
olen+= plen-2;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
*endpos++= '%'; /* % used as % or unknown code */
|
||||
}
|
||||
*endpos= '\0'; /* End of errmessage */
|
||||
va_end(ap);
|
||||
va_start(args,MyFlags);
|
||||
(void) my_vsnprintf (ebuff, sizeof(ebuff), format, args);
|
||||
va_end(args);
|
||||
DBUG_RETURN((*error_handler_hook)(nr, ebuff, MyFlags));
|
||||
}
|
||||
|
||||
@@ -160,11 +84,14 @@ int my_printf_error(uint error, const char *format, myf MyFlags, ...)
|
||||
{
|
||||
va_list args;
|
||||
char ebuff[ERRMSGSIZE+20];
|
||||
DBUG_ENTER("my_printf_error");
|
||||
DBUG_PRINT("my", ("nr: %d MyFlags: %d errno: %d Format: %s",
|
||||
error, MyFlags, errno, format));
|
||||
|
||||
va_start(args,MyFlags);
|
||||
(void) vsprintf (ebuff,format,args);
|
||||
(void) my_vsnprintf (ebuff, sizeof(ebuff), format, args);
|
||||
va_end(args);
|
||||
return (*error_handler_hook)(error, ebuff, MyFlags);
|
||||
DBUG_RETURN((*error_handler_hook)(error, ebuff, MyFlags));
|
||||
}
|
||||
|
||||
/*
|
||||
|
@@ -42,8 +42,8 @@ static void netware_init();
|
||||
#define netware_init()
|
||||
#endif
|
||||
|
||||
|
||||
my_bool my_init_done= 0;
|
||||
uint mysys_usage_id= 0; /* Incremented for each my_init() */
|
||||
|
||||
static ulong atoi_octal(const char *str)
|
||||
{
|
||||
@@ -74,6 +74,9 @@ my_bool my_init(void)
|
||||
if (my_init_done)
|
||||
return 0;
|
||||
my_init_done=1;
|
||||
mysys_usage_id++;
|
||||
my_umask= 0660; /* Default umask for new files */
|
||||
my_umask_dir= 0700; /* Default umask for new directories */
|
||||
#if defined(THREAD) && defined(SAFE_MUTEX)
|
||||
safe_mutex_global_init(); /* Must be called early */
|
||||
#endif
|
||||
|
@@ -733,6 +733,7 @@ extern "C" {
|
||||
int param, unsigned long long * value);
|
||||
int ndb_mgm_get_string_parameter(const ndb_mgm_configuration_iterator*,
|
||||
int param, const char ** value);
|
||||
int ndb_mgm_purge_stale_sessions(NdbMgmHandle handle, char **);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@@ -21,11 +21,11 @@
|
||||
#ifndef NDB_TYPES_H
|
||||
#define NDB_TYPES_H
|
||||
|
||||
typedef char Int8;
|
||||
typedef signed char Int8;
|
||||
typedef unsigned char Uint8;
|
||||
typedef short Int16;
|
||||
typedef signed short Int16;
|
||||
typedef unsigned short Uint16;
|
||||
typedef int Int32;
|
||||
typedef signed int Int32;
|
||||
typedef unsigned int Uint32;
|
||||
|
||||
typedef unsigned int UintR;
|
||||
@@ -45,10 +45,10 @@ typedef uintptr_t UintPtr;
|
||||
|
||||
#if defined(WIN32) || defined(NDB_WIN32)
|
||||
typedef unsigned __int64 Uint64;
|
||||
typedef __int64 Int64;
|
||||
typedef signed __int64 Int64;
|
||||
#else
|
||||
typedef unsigned long long Uint64;
|
||||
typedef long long Int64;
|
||||
typedef signed long long Int64;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@@ -486,6 +486,18 @@ public:
|
||||
*/
|
||||
const Column* getColumn(const char * name) const;
|
||||
|
||||
/**
|
||||
* Get column definition via index in table.
|
||||
* @return null if none existing name
|
||||
*/
|
||||
Column* getColumn(const int attributeId);
|
||||
|
||||
/**
|
||||
* Get column definition via name.
|
||||
* @return null if none existing name
|
||||
*/
|
||||
Column* getColumn(const char * name);
|
||||
|
||||
/**
|
||||
* Get column definition via index in table.
|
||||
* @return null if none existing name
|
||||
|
@@ -104,6 +104,11 @@ public:
|
||||
*/
|
||||
static void bitXOR(unsigned size, Uint32 data[], const Uint32 data2[]);
|
||||
|
||||
/**
|
||||
* bitXORC - Bitwise (x ^ ~y) into first operand.
|
||||
*/
|
||||
static void bitXORC(unsigned size, Uint32 data[], const Uint32 data2[]);
|
||||
|
||||
/**
|
||||
* contains - Check if all bits set in data2 are set in data
|
||||
*/
|
||||
@@ -261,6 +266,14 @@ BitmaskImpl::bitXOR(unsigned size, Uint32 data[], const Uint32 data2[])
|
||||
}
|
||||
}
|
||||
|
||||
inline void
|
||||
BitmaskImpl::bitXORC(unsigned size, Uint32 data[], const Uint32 data2[])
|
||||
{
|
||||
for (unsigned i = 0; i < size; i++) {
|
||||
data[i] ^= ~data2[i];
|
||||
}
|
||||
}
|
||||
|
||||
inline bool
|
||||
BitmaskImpl::contains(unsigned size, Uint32 data[], const Uint32 data2[])
|
||||
{
|
||||
@@ -451,6 +464,12 @@ public:
|
||||
static void bitXOR(Uint32 data[], const Uint32 data2[]);
|
||||
BitmaskPOD<size>& bitXOR(const BitmaskPOD<size>& mask2);
|
||||
|
||||
/**
|
||||
* bitXORC - Bitwise (x ^ ~y) into first operand.
|
||||
*/
|
||||
static void bitXORC(Uint32 data[], const Uint32 data2[]);
|
||||
BitmaskPOD<size>& bitXORC(const BitmaskPOD<size>& mask2);
|
||||
|
||||
/**
|
||||
* contains - Check if all bits set in data2 (that) are also set in data (this)
|
||||
*/
|
||||
@@ -712,6 +731,21 @@ BitmaskPOD<size>::bitXOR(const BitmaskPOD<size>& mask2)
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <unsigned size>
|
||||
inline void
|
||||
BitmaskPOD<size>::bitXORC(Uint32 data[], const Uint32 data2[])
|
||||
{
|
||||
BitmaskImpl::bitXORC(size,data, data2);
|
||||
}
|
||||
|
||||
template <unsigned size>
|
||||
inline BitmaskPOD<size>&
|
||||
BitmaskPOD<size>::bitXORC(const BitmaskPOD<size>& mask2)
|
||||
{
|
||||
BitmaskPOD<size>::bitXORC(rep.data, mask2.rep.data);
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <unsigned size>
|
||||
char *
|
||||
BitmaskPOD<size>::getText(const Uint32 data[], char* buf)
|
||||
|
@@ -37,7 +37,7 @@ public:
|
||||
public:
|
||||
virtual ~Session() {}
|
||||
virtual void runSession(){}
|
||||
virtual void stopSession(){}
|
||||
virtual void stopSession(){ m_stop = true; }
|
||||
protected:
|
||||
friend class SocketServer;
|
||||
friend void* sessionThread_C(void*);
|
||||
@@ -98,6 +98,8 @@ public:
|
||||
*/
|
||||
void stopSessions(bool wait = false);
|
||||
|
||||
void foreachSession(void (*f)(SocketServer::Session*, void*), void *data);
|
||||
|
||||
private:
|
||||
struct SessionInstance {
|
||||
Service * m_service;
|
||||
|
@@ -1,4 +1,4 @@
|
||||
SUBDIRS = portlib debugger util logger transporter mgmcommon editline
|
||||
SUBDIRS = portlib debugger util logger transporter mgmcommon
|
||||
|
||||
noinst_LTLIBRARIES = libcommon.la
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user