mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 19:41:47 +01:00
Merge joreland@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/jonas/src/mysql-5.0
This commit is contained in:
commit
9734792c93
296 changed files with 8308 additions and 7432 deletions
|
@ -742,6 +742,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.",
|
||||
"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. 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];
|
||||
{
|
||||
/* 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 (counter = 0; counter < lengths[i]; counter++)
|
||||
{
|
||||
sprintf(xx, "%02X", ptr[counter]);
|
||||
fputs(xx, 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.
|
||||
*/
|
||||
|
||||
/* 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));
|
||||
}
|
||||
}
|
||||
/*
|
||||
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.
|
||||
*/
|
||||
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
|
||||
|
@ -3065,9 +3065,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])
|
||||
|
||||
|
@ -3106,7 +3112,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
|
||||
|
@ -3158,7 +3163,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
|
||||
|
|
56
dbug/dbug.c
56
dbug/dbug.c
|
@ -227,14 +227,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
|
||||
|
@ -247,8 +248,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 */
|
||||
|
@ -370,8 +371,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
|
||||
|
||||
|
||||
|
@ -728,9 +731,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;
|
||||
}
|
||||
|
@ -744,7 +750,7 @@ char ***_sframep_ __attribute__((unused)))
|
|||
(void) fflush (_db_pfp_);
|
||||
}
|
||||
#endif
|
||||
if (DoTrace (state))
|
||||
if (DoTrace(state))
|
||||
{
|
||||
if (!state->locked)
|
||||
pthread_mutex_lock(&THR_LOCK_dbug);
|
||||
|
@ -754,7 +760,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
|
||||
|
@ -809,9 +815,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 ())
|
||||
|
@ -954,7 +962,6 @@ uint length)
|
|||
int pos;
|
||||
char dbuff[90];
|
||||
CODE_STATE *state;
|
||||
/* Sasha: pre-my_thread_init() safety */
|
||||
if (!(state=code_state()))
|
||||
return;
|
||||
|
||||
|
@ -994,6 +1001,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
|
||||
*
|
||||
|
@ -1159,7 +1185,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_))
|
||||
|
@ -1195,7 +1221,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_))
|
||||
|
@ -1242,7 +1268,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) &&
|
||||
|
|
|
@ -38,6 +38,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();
|
||||
|
||||
|
@ -66,6 +67,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)
|
||||
#else /* No debugger */
|
||||
|
||||
|
@ -86,6 +88,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,31 +2276,34 @@ dict_scan_to(
|
|||
const char* ptr, /* in: scan from */
|
||||
const char* string) /* in: look for this */
|
||||
{
|
||||
ibool success;
|
||||
ulint i;
|
||||
loop:
|
||||
if (*ptr == '\0') {
|
||||
return(ptr);
|
||||
}
|
||||
|
||||
success = TRUE;
|
||||
|
||||
for (i = 0; i < ut_strlen(string); i++) {
|
||||
if (toupper((ulint)(ptr[i])) != toupper((ulint)(string[i]))) {
|
||||
success = FALSE;
|
||||
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;
|
||||
for (i = 0; string[i]; i++) {
|
||||
if (toupper((ulint)(ptr[i]))
|
||||
!= toupper((ulint)(string[i]))) {
|
||||
goto nomatch;
|
||||
}
|
||||
}
|
||||
break;
|
||||
nomatch:
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
if (success) {
|
||||
|
||||
return(ptr);
|
||||
}
|
||||
|
||||
ptr++;
|
||||
|
||||
goto loop;
|
||||
return(ptr);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
@ -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,22 +630,36 @@ 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
|
||||
if (S_ISDIR(entry->d_type))
|
||||
{
|
||||
/* delete subdirectory */
|
||||
del_tree(temp);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* remove file */
|
||||
remove(temp);
|
||||
/* 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);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* remove file */
|
||||
remove(temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* remove directory */
|
||||
|
@ -652,10 +667,10 @@ void del_tree(char *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'ÔÅÓÔ');
|
||||
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('あ','い') 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 (ËÏÌ) ON ÂÄ.ÔÁÂ FROM ÀÚÅÒ@localhost;
|
||||
DROP DATABASE ÂÄ;
|
||||
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
|
402
mysql-test/r/information_schema.result
Normal file
402
mysql-test/r/information_schema.result
Normal file
|
@ -0,0 +1,402 @@
|
|||
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_swedish_ci
|
||||
NULL test latin1_swedish_ci
|
||||
select schema_name from information_schema.schemata;
|
||||
schema_name
|
||||
mysql
|
||||
test
|
||||
show databases *;
|
||||
CATALOG_NAME SCHEMA_NAME DEFAULT_CHARACTER_SET_NAME
|
||||
NULL mysql latin1_swedish_ci
|
||||
NULL test latin1_swedish_ci
|
||||
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_swedish_ci
|
||||
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 PRIVILIGES 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 PRIVILIGES 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 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 NULL
|
||||
NULL test PRIMARY test t2 PRIMARY NULL
|
||||
NULL test t2_ibfk_1 test t2 FOREIGN ON DELETE CASCADE
|
||||
NULL test t2_ibfk_2 test t2 FOREIGN 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;
|
|
@ -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;
|
||||
|
|
|
@ -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,"");
|
||||
|
|
|
@ -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'ÔÅÓÔ');
|
||||
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 ÂÄ;
|
||||
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
|
||||
#
|
||||
|
|
188
mysql-test/t/information_schema.test
Normal file
188
mysql-test/t/information_schema.test
Normal file
|
@ -0,0 +1,188 @@
|
|||
|
||||
# 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;
|
||||
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
#
|
||||
|
|
|
@ -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;
|
||||
|
|
152
mysys/default.c
152
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,22 +233,23 @@ 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.
|
||||
|
||||
SYNOPSIS
|
||||
handle_deault_option()
|
||||
in_ctx Handler context. In this case it is a
|
||||
handle_deault_option()
|
||||
in_ctx Handler context. In this case it is a
|
||||
handle_option_ctx structure.
|
||||
group_name The name of the group the option belongs to.
|
||||
option The very option to be processed. It is already
|
||||
group_name The name of the group the option belongs to.
|
||||
option The very option to be processed. It is already
|
||||
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.
|
||||
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.
|
||||
|
||||
RETURN
|
||||
0 - ok
|
||||
|
@ -249,12 +257,12 @@ int process_default_option_files(const char *conf_file,
|
|||
*/
|
||||
|
||||
static int handle_default_option(void *in_ctx, const char *group_name,
|
||||
const char *option)
|
||||
const char *option)
|
||||
{
|
||||
char *tmp;
|
||||
struct handle_option_ctx *ctx;
|
||||
ctx= (struct handle_option_ctx *) in_ctx;
|
||||
if(find_type((char *)group_name, ctx->group, 3))
|
||||
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)))
|
||||
return 1;
|
||||
|
@ -299,7 +307,7 @@ static int handle_default_option(void *in_ctx, const char *group_name,
|
|||
|
||||
|
||||
int load_defaults(const char *conf_file, const char **groups,
|
||||
int *argc, char ***argv)
|
||||
int *argc, char ***argv)
|
||||
{
|
||||
DYNAMIC_ARRAY args;
|
||||
TYPELIB group;
|
||||
|
@ -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,27 +660,43 @@ 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++)
|
||||
{
|
||||
const char *pos;
|
||||
char *end;
|
||||
if (**dirs)
|
||||
pos= *dirs;
|
||||
else if (defaults_extra_file)
|
||||
pos= defaults_extra_file;
|
||||
else
|
||||
continue;
|
||||
end=convert_dirname(name, pos, NullS);
|
||||
if (name[0] == FN_HOMELIB) /* Add . to filenames in home */
|
||||
*end++='.';
|
||||
strxmov(end,conf_file,default_ext," ",NullS);
|
||||
fputs(name,stdout);
|
||||
for (ext= (char**) f_extensions; *ext; *ext++)
|
||||
{
|
||||
const char *pos;
|
||||
char *end;
|
||||
if (**dirs)
|
||||
pos= *dirs;
|
||||
else if (defaults_extra_file)
|
||||
pos= defaults_extra_file;
|
||||
else
|
||||
continue;
|
||||
end= convert_dirname(name, pos, NullS);
|
||||
if (name[0] == FN_HOMELIB) /* Add . to filenames in home */
|
||||
*end++='.';
|
||||
strxmov(end, conf_file, *ext, " ", NullS);
|
||||
fputs(name,stdout);
|
||||
}
|
||||
}
|
||||
puts("");
|
||||
}
|
||||
|
|
117
mysys/my_error.c
117
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];
|
||||
|
||||
|
@ -41,107 +50,22 @@ char NEAR errbuff[NRERRBUFFS][ERRMSGSIZE];
|
|||
the length value is ignored.
|
||||
*/
|
||||
|
||||
int my_error(int nr,myf MyFlags, ...)
|
||||
int my_error(int nr, myf MyFlags, ...)
|
||||
{
|
||||
va_list ap;
|
||||
uint olen, plen;
|
||||
reg1 const char *tpos;
|
||||
reg2 char *endpos;
|
||||
char * par;
|
||||
char ebuff[ERRMSGSIZE+20];
|
||||
int prec_chars; /* output precision */
|
||||
my_bool prec_supplied;
|
||||
const char *format;
|
||||
va_list args;
|
||||
char ebuff[ERRMSGSIZE + 20];
|
||||
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;
|
||||
my_bool my_init_done= 0;
|
||||
uint mysys_usage_id= 0; /* Incremented for each my_init() */
|
||||
|
||||
static ulong atoi_octal(const char *str)
|
||||
{
|
||||
|
@ -51,7 +51,7 @@ static ulong atoi_octal(const char *str)
|
|||
while (*str && my_isspace(&my_charset_latin1, *str))
|
||||
str++;
|
||||
str2int(str,
|
||||
(*str == '0' ? 8 : 10), /* Octalt or decimalt */
|
||||
(*str == '0' ? 8 : 10), /* Octalt or decimalt */
|
||||
0, INT_MAX, &tmp);
|
||||
return (ulong) tmp;
|
||||
}
|
||||
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
include .defs.mk
|
||||
|
||||
LIB_DIRS := \
|
||||
portlib \
|
||||
debugger \
|
||||
util \
|
||||
logger
|
||||
|
||||
ifneq ($(USE_EDITLINE), N)
|
||||
LIB_DIRS += editline
|
||||
endif
|
||||
|
||||
DIRS := transporter mgmcommon
|
||||
|
||||
include $(NDB_TOP)/Epilogue.mk
|
|
@ -1,11 +0,0 @@
|
|||
include .defs.mk
|
||||
|
||||
TYPE := kernel
|
||||
DIRS := signaldata
|
||||
|
||||
PIC_ARCHIVE := Y
|
||||
ARCHIVE_TARGET := trace
|
||||
|
||||
SOURCES = SignalLoggerManager.cpp DebuggerNames.cpp BlockNames.cpp LogLevel.cpp EventLogger.cpp GrepError.cpp
|
||||
|
||||
include $(NDB_TOP)/Epilogue.mk
|
|
@ -1,33 +0,0 @@
|
|||
include .defs.mk
|
||||
|
||||
TYPE := ndbapi
|
||||
|
||||
PIC_ARCHIVE := Y
|
||||
ARCHIVE_TARGET := signaldataprint
|
||||
|
||||
SOURCES = TcKeyReq.cpp TcKeyConf.cpp TcKeyRef.cpp \
|
||||
TcRollbackRep.cpp \
|
||||
TupKey.cpp TupCommit.cpp LqhKey.cpp \
|
||||
FsOpenReq.cpp FsCloseReq.cpp FsRef.cpp FsConf.cpp FsReadWriteReq.cpp\
|
||||
SignalDataPrint.cpp SignalNames.cpp \
|
||||
ContinueB.cpp DihContinueB.cpp NdbfsContinueB.cpp \
|
||||
CloseComReqConf.cpp PackedSignal.cpp PrepFailReqRef.cpp \
|
||||
GCPSave.cpp DictTabInfo.cpp \
|
||||
AlterTable.cpp AlterTab.cpp \
|
||||
CreateTrig.cpp AlterTrig.cpp DropTrig.cpp \
|
||||
FireTrigOrd.cpp TrigAttrInfo.cpp \
|
||||
CreateIndx.cpp AlterIndx.cpp DropIndx.cpp TcIndx.cpp \
|
||||
IndxKeyInfo.cpp IndxAttrInfo.cpp \
|
||||
FsAppendReq.cpp ScanTab.cpp \
|
||||
BackupImpl.cpp BackupSignalData.cpp \
|
||||
UtilSequence.cpp UtilPrepare.cpp UtilDelete.cpp UtilExecute.cpp \
|
||||
LqhFrag.cpp DropTab.cpp PrepDropTab.cpp LCP.cpp MasterLCP.cpp \
|
||||
CopyGCI.cpp SystemError.cpp StartRec.cpp NFCompleteRep.cpp \
|
||||
FailRep.cpp DisconnectRep.cpp SignalDroppedRep.cpp \
|
||||
SumaImpl.cpp NdbSttor.cpp CreateFragmentation.cpp \
|
||||
CntrStart.cpp ReadNodesConf.cpp \
|
||||
UtilLock.cpp TuxMaint.cpp TupAccess.cpp AccLock.cpp \
|
||||
LqhTrans.cpp
|
||||
|
||||
include $(NDB_TOP)/Epilogue.mk
|
||||
|
|
@ -16,65 +16,9 @@
|
|||
|
||||
|
||||
|
||||
#include "GlobalSignalNumbers.h"
|
||||
#include "signaldata/SignalDataPrint.hpp"
|
||||
#include "signaldata/TcKeyReq.hpp"
|
||||
#include "signaldata/TcKeyConf.hpp"
|
||||
#include "signaldata/TcKeyRef.hpp"
|
||||
#include "signaldata/LqhKey.hpp"
|
||||
#include "signaldata/TupKey.hpp"
|
||||
#include "signaldata/TupCommit.hpp"
|
||||
#include "signaldata/FsOpenReq.hpp"
|
||||
#include "signaldata/FsCloseReq.hpp"
|
||||
#include "signaldata/FsReadWriteReq.hpp"
|
||||
#include "signaldata/FsRef.hpp"
|
||||
#include "signaldata/FsConf.hpp"
|
||||
#include "signaldata/CloseComReqConf.hpp"
|
||||
#include "signaldata/PackedSignal.hpp"
|
||||
#include "signaldata/PrepFailReqRef.hpp"
|
||||
#include "signaldata/DictTabInfo.hpp"
|
||||
#include "signaldata/AlterTable.hpp"
|
||||
#include "signaldata/AlterTab.hpp"
|
||||
#include "signaldata/CreateTrig.hpp"
|
||||
#include "signaldata/AlterTrig.hpp"
|
||||
#include "signaldata/DropTrig.hpp"
|
||||
#include "signaldata/FireTrigOrd.hpp"
|
||||
#include "signaldata/TrigAttrInfo.hpp"
|
||||
#include "signaldata/CreateIndx.hpp"
|
||||
#include "signaldata/AlterIndx.hpp"
|
||||
#include "signaldata/DropIndx.hpp"
|
||||
#include "signaldata/TcIndx.hpp"
|
||||
#include "signaldata/IndxKeyInfo.hpp"
|
||||
#include "signaldata/IndxAttrInfo.hpp"
|
||||
#include <signaldata/FsAppendReq.hpp>
|
||||
#include <signaldata/BackupSignalData.hpp>
|
||||
#include <signaldata/BackupImpl.hpp>
|
||||
#include <signaldata/UtilSequence.hpp>
|
||||
#include <signaldata/UtilPrepare.hpp>
|
||||
#include <signaldata/UtilExecute.hpp>
|
||||
#include <signaldata/ScanTab.hpp>
|
||||
#include <signaldata/ScanFrag.hpp>
|
||||
#include <signaldata/LqhFrag.hpp>
|
||||
#include <signaldata/LqhTransConf.hpp>
|
||||
#include <signaldata/DropTab.hpp>
|
||||
#include <signaldata/PrepDropTab.hpp>
|
||||
#include <signaldata/LCP.hpp>
|
||||
#include <signaldata/MasterLCP.hpp>
|
||||
#include <signaldata/CopyGCIReq.hpp>
|
||||
#include <signaldata/SystemError.hpp>
|
||||
#include <signaldata/StartRec.hpp>
|
||||
#include <signaldata/NFCompleteRep.hpp>
|
||||
#include <signaldata/SignalDroppedRep.hpp>
|
||||
#include <signaldata/FailRep.hpp>
|
||||
#include <signaldata/DisconnectRep.hpp>
|
||||
#include <signaldata/SumaImpl.hpp>
|
||||
#include <signaldata/NdbSttor.hpp>
|
||||
#include <signaldata/CreateFragmentation.hpp>
|
||||
#include <signaldata/UtilLock.hpp>
|
||||
#include <signaldata/CntrStart.hpp>
|
||||
#include <signaldata/ReadNodesConf.hpp>
|
||||
#include <signaldata/TuxMaint.hpp>
|
||||
#include <signaldata/AccLock.hpp>
|
||||
#include <GlobalSignalNumbers.h>
|
||||
#include <signaldata/SignalData.hpp>
|
||||
#include <signaldata/SignalDataPrint.hpp>
|
||||
|
||||
/**
|
||||
* This is the register
|
||||
|
@ -254,6 +198,8 @@ SignalDataPrintFunctions[] = {
|
|||
,{ 0, 0 }
|
||||
};
|
||||
|
||||
#include <Bitmask.hpp>
|
||||
|
||||
template struct BitmaskPOD<1>;
|
||||
template struct BitmaskPOD<2>;
|
||||
template struct BitmaskPOD<4>;
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
File Name Description
|
||||
--------------------------------------------------------
|
||||
README Release notes and copyright
|
||||
MANIFEST This shipping list
|
||||
Make.os9 OS-9 makefile
|
||||
Makefile Unix makefile
|
||||
complete.c Filename completion routines
|
||||
editline.3 Manual page for editline library
|
||||
editline.c Line-editing routines
|
||||
editline_internal.h Internal library header file
|
||||
os9.h OS-9-specific declarations
|
||||
sysos9.c OS-9-specific routines
|
||||
sysunix.c Unix-specific routines
|
||||
testit.c Test driver
|
||||
unix.h Unix-specific declarations
|
|
@ -1,10 +0,0 @@
|
|||
|
||||
noinst_LIBRARIES = libeditline.a
|
||||
|
||||
libeditline_a_SOURCES = complete.c editline.c sysunix.c
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/ndb/include
|
||||
DEFS = -DANSI_ARROWS -DHAVE_TCGETATTR -DSYS_UNIX
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
|
@ -1,18 +0,0 @@
|
|||
include .defs.mk
|
||||
|
||||
TYPE :=
|
||||
|
||||
ARCHIVE_TARGET := editline
|
||||
|
||||
CFLAGS += -DANSI_ARROWS -DHAVE_TCGETATTR -DSYS_UNIX
|
||||
|
||||
ifeq ($(NDB_OS), WIN32)
|
||||
SOURCES = editline_win32.c
|
||||
else
|
||||
SOURCES = complete.c editline.c sysunix.c
|
||||
endif
|
||||
|
||||
DIRS := test
|
||||
|
||||
include $(NDB_TOP)/Epilogue.mk
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
--
|
||||
NOTE: This version has been modified by Ericsson/Alzato. Please
|
||||
see the cvs changelog for more details.
|
||||
--
|
||||
|
||||
$Revision: 1.2 $
|
||||
|
||||
This is a line-editing library. It can be linked into almost any
|
||||
program to provide command-line editing and recall.
|
||||
|
||||
It is call-compatible with the FSF readline library, but it is a
|
||||
fraction of the size (and offers fewer features). It does not use
|
||||
standard I/O. It is distributed under a "C News-like" copyright.
|
||||
|
||||
Configuration is done in the Makefile. Type "make testit" to get
|
||||
a small slow shell for testing.
|
||||
|
||||
This contains some changes since the posting to comp.sources.misc:
|
||||
- Bugfix for completion on absolute pathnames.
|
||||
- Better handling of M-n versus showing raw 8bit chars.
|
||||
- Better signal handling.
|
||||
- Now supports termios/termio/sgttyb ioctl's.
|
||||
- Add M-m command to toggle how 8bit data is displayed.
|
||||
The following changes, made since the last public release, come from
|
||||
J.G. Vons <vons@cesar.crbca1.sinet.slb.com>:
|
||||
- History-searching no longer redraws the line wrong
|
||||
- Added ESC-ESC as synonym for ESC-?
|
||||
- SIGQUIT (normally ^\) now sends a signal, not indicating EOF.
|
||||
- Fixed some typo's and unclear wording in the manpage.
|
||||
- Fixed completion when all entries shared a common prefix.
|
||||
- Fixed some meta-char line-redrawing bugs.
|
||||
|
||||
Enjoy,
|
||||
Rich $alz
|
||||
<rsalz@osf.org>
|
||||
|
||||
Copyright 1992,1993 Simmule Turner and Rich Salz. All rights reserved.
|
||||
|
||||
This software is not subject to any license of the American Telephone
|
||||
and Telegraph Company or of the Regents of the University of California.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose on
|
||||
any computer system, and to alter it and redistribute it freely, subject
|
||||
to the following restrictions:
|
||||
1. The authors are not responsible for the consequences of use of this
|
||||
software, no matter how awful, even if they arise from flaws in it.
|
||||
2. The origin of this software must not be misrepresented, either by
|
||||
explicit claim or by omission. Since few users ever read sources,
|
||||
credits must appear in the documentation.
|
||||
3. Altered versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software. Since few users
|
||||
ever read sources, credits must appear in the documentation.
|
||||
4. This notice may not be removed or altered.
|
|
@ -1,195 +0,0 @@
|
|||
/* -*- c-basic-offset: 4; -*-
|
||||
** $Revision: 1.8 $
|
||||
**
|
||||
** History and file completion functions for editline library.
|
||||
*/
|
||||
#include "editline_internal.h"
|
||||
|
||||
|
||||
/*
|
||||
** strcmp-like sorting predicate for qsort.
|
||||
*/
|
||||
static int
|
||||
compare(const void *p1, const void *p2)
|
||||
{
|
||||
const char **v1;
|
||||
const char **v2;
|
||||
|
||||
v1 = (const char **)p1;
|
||||
v2 = (const char **)p2;
|
||||
return strcmp(*v1, *v2);
|
||||
}
|
||||
|
||||
/*
|
||||
** Fill in *avp with an array of names that match file, up to its length.
|
||||
** Ignore . and .. .
|
||||
*/
|
||||
static int
|
||||
FindMatches(char *dir, char *file, char ***avp)
|
||||
{
|
||||
char **av;
|
||||
char **new;
|
||||
char *p;
|
||||
DIR *dp;
|
||||
struct dirent *ep;
|
||||
size_t ac;
|
||||
size_t len;
|
||||
|
||||
if ((dp = opendir(dir)) == NULL)
|
||||
return 0;
|
||||
|
||||
av = NULL;
|
||||
ac = 0;
|
||||
len = strlen(file);
|
||||
while ((ep = readdir(dp)) != NULL) {
|
||||
p = ep->d_name;
|
||||
if (p[0] == '.' && (p[1] == '\0' || (p[1] == '.' && p[2] == '\0')))
|
||||
continue;
|
||||
if (len && strncmp(p, file, len) != 0)
|
||||
continue;
|
||||
|
||||
if ((ac % MEM_INC) == 0) {
|
||||
if ((new = malloc(sizeof(char*) * (ac + MEM_INC))) == NULL)
|
||||
break;
|
||||
if (ac) {
|
||||
memcpy(new, av, ac * sizeof (char **));
|
||||
free(av);
|
||||
}
|
||||
*avp = av = new;
|
||||
}
|
||||
|
||||
if ((av[ac] = strdup(p)) == NULL) {
|
||||
if (ac == 0)
|
||||
free(av);
|
||||
break;
|
||||
}
|
||||
ac++;
|
||||
}
|
||||
|
||||
/* Clean up and return. */
|
||||
(void)closedir(dp);
|
||||
if (ac)
|
||||
qsort(av, ac, sizeof (char **), compare);
|
||||
return ac;
|
||||
}
|
||||
|
||||
/*
|
||||
** Split a pathname into allocated directory and trailing filename parts.
|
||||
*/
|
||||
static int
|
||||
SplitPath(char *path, char **dirpart, char ** filepart)
|
||||
{
|
||||
static char DOT[] = ".";
|
||||
char *dpart;
|
||||
char *fpart;
|
||||
|
||||
if ((fpart = strrchr(path, '/')) == NULL) {
|
||||
if ((dpart = strdup(DOT)) == NULL)
|
||||
return -1;
|
||||
if ((fpart = strdup(path)) == NULL) {
|
||||
free(dpart);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if ((dpart = strdup(path)) == NULL)
|
||||
return -1;
|
||||
dpart[fpart - path + 1] = '\0';
|
||||
if ((fpart = strdup(++fpart)) == NULL) {
|
||||
free(dpart);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
*dirpart = dpart;
|
||||
*filepart = fpart;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
** Attempt to complete the pathname, returning an allocated copy.
|
||||
** Fill in *unique if we completed it, or set it to 0 if ambiguous.
|
||||
*/
|
||||
char *
|
||||
rl_complete(char *pathname,int *unique)
|
||||
{
|
||||
char **av;
|
||||
char *dir;
|
||||
char *file;
|
||||
char *new;
|
||||
char *p;
|
||||
size_t ac;
|
||||
size_t end;
|
||||
size_t i;
|
||||
size_t j;
|
||||
size_t len;
|
||||
size_t new_len;
|
||||
size_t p_len;
|
||||
|
||||
if (SplitPath(pathname, &dir, &file) < 0)
|
||||
return NULL;
|
||||
if ((ac = FindMatches(dir, file, &av)) == 0) {
|
||||
free(dir);
|
||||
free(file);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
p = NULL;
|
||||
len = strlen(file);
|
||||
if (ac == 1) {
|
||||
/* Exactly one match -- finish it off. */
|
||||
*unique = 1;
|
||||
j = strlen(av[0]) - len + 2;
|
||||
p_len = sizeof(char) * (j + 1);
|
||||
if ((p = malloc(p_len)) != NULL) {
|
||||
memcpy(p, av[0] + len, j);
|
||||
new_len = sizeof(char) * (strlen(dir) + strlen(av[0]) + 2);
|
||||
new = malloc(new_len);
|
||||
if(new != NULL) {
|
||||
snprintf(new, new_len, "%s/%s", dir, av[0]);
|
||||
rl_add_slash(new, p, p_len);
|
||||
free(new);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* Find largest matching substring. */
|
||||
for (*unique = 0, i = len, end = strlen(av[0]); i < end; i++)
|
||||
for (j = 1; j < ac; j++)
|
||||
if (av[0][i] != av[j][i])
|
||||
goto breakout;
|
||||
breakout:
|
||||
if (i > len) {
|
||||
j = i - len + 1;
|
||||
if ((p = malloc(sizeof(char) * j)) != NULL) {
|
||||
memcpy(p, av[0] + len, j);
|
||||
p[j - 1] = '\0';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Clean up and return. */
|
||||
free(dir);
|
||||
free(file);
|
||||
for (i = 0; i < ac; i++)
|
||||
free(av[i]);
|
||||
free(av);
|
||||
return p;
|
||||
}
|
||||
|
||||
/*
|
||||
** Return all possible completions.
|
||||
*/
|
||||
int
|
||||
rl_list_possib(char *pathname, char ***avp)
|
||||
{
|
||||
char *dir;
|
||||
char *file;
|
||||
int ac;
|
||||
|
||||
if (SplitPath(pathname, &dir, &file) < 0)
|
||||
return 0;
|
||||
ac = FindMatches(dir, file, avp);
|
||||
free(dir);
|
||||
free(file);
|
||||
return ac;
|
||||
}
|
|
@ -1,178 +0,0 @@
|
|||
.\" $Revision: 1.1 $
|
||||
.TH EDITLINE 3
|
||||
.SH NAME
|
||||
editline \- command-line editing library with history
|
||||
.SH SYNOPSIS
|
||||
.nf
|
||||
.B "char *"
|
||||
.B "readline(prompt)"
|
||||
.B " char *prompt;"
|
||||
|
||||
.B "void"
|
||||
.B "add_history(line)"
|
||||
.B " char *line;"
|
||||
.fi
|
||||
.SH DESCRIPTION
|
||||
.I Editline
|
||||
is a library that provides an line-editing interface with text recall.
|
||||
It is intended to be compatible with the
|
||||
.I readline
|
||||
library provided by the Free Software Foundation, but much smaller.
|
||||
The bulk of this manual page describes the user interface.
|
||||
.PP
|
||||
The
|
||||
.I readline
|
||||
routine returns a line of text with the trailing newline removed.
|
||||
The data is returned in a buffer allocated with
|
||||
.IR malloc (3),
|
||||
so the space should be released with
|
||||
.IR free (3)
|
||||
when the calling program is done with it.
|
||||
Before accepting input from the user, the specified
|
||||
.I prompt
|
||||
is displayed on the terminal.
|
||||
.PP
|
||||
The
|
||||
.I add_history
|
||||
routine makes a copy of the specified
|
||||
.I line
|
||||
and adds it to the internal history list.
|
||||
.SS "User Interface"
|
||||
A program that uses this library provides a simple emacs-like editing
|
||||
interface to its users.
|
||||
A line may be edited before it is sent to the calling program by typing either
|
||||
control characters or escape sequences.
|
||||
A control character, shown as a caret followed by a letter, is typed by
|
||||
holding down the ``control'' key while the letter is typed.
|
||||
For example, ``^A'' is a control-A.
|
||||
An escape sequence is entered by typing the ``escape'' key followed by one or
|
||||
more characters.
|
||||
The escape key is abbreviated as ``ESC''.
|
||||
Note that unlike control keys, case matters in escape sequences; ``ESC\ F''
|
||||
is not the same as ``ESC\ f''.
|
||||
.PP
|
||||
An editing command may be typed anywhere on the line, not just at the
|
||||
beginning.
|
||||
In addition, a return may also be typed anywhere on the line, not just at
|
||||
the end.
|
||||
.PP
|
||||
Most editing commands may be given a repeat count,
|
||||
.IR n ,
|
||||
where
|
||||
.I n
|
||||
is a number.
|
||||
To enter a repeat count, type the escape key, the number, and then
|
||||
the command to execute.
|
||||
For example, ``ESC\ 4\ ^f'' moves forward four characters.
|
||||
If a command may be given a repeat count then the text ``[n]'' is given at the
|
||||
end of its description.
|
||||
.PP
|
||||
The following control characters are accepted:
|
||||
.RS
|
||||
.nf
|
||||
.ta \w'ESC DEL 'u
|
||||
^A Move to the beginning of the line
|
||||
^B Move left (backwards) [n]
|
||||
^D Delete character [n]
|
||||
^E Move to end of line
|
||||
^F Move right (forwards) [n]
|
||||
^G Ring the bell
|
||||
^H Delete character before cursor (backspace key) [n]
|
||||
^I Complete filename (tab key); see below
|
||||
^J Done with line (return key)
|
||||
^K Kill to end of line (or column [n])
|
||||
^L Redisplay line
|
||||
^M Done with line (alternate return key)
|
||||
^N Get next line from history [n]
|
||||
^P Get previous line from history [n]
|
||||
^R Search backward (forward if [n]) through history for text;
|
||||
\& prefixing the string with a caret (^) forces it to
|
||||
\& match only at the beginning of a history line
|
||||
^T Transpose characters
|
||||
^V Insert next character, even if it is an edit command
|
||||
^W Wipe to the mark
|
||||
^X^X Exchange current location and mark
|
||||
^Y Yank back last killed text
|
||||
^[ Start an escape sequence (escape key)
|
||||
^]c Move forward to next character ``c''
|
||||
^? Delete character before cursor (delete key) [n]
|
||||
.fi
|
||||
.RE
|
||||
.PP
|
||||
The following escape sequences are provided.
|
||||
.RS
|
||||
.nf
|
||||
.ta \w'ESC DEL 'u
|
||||
ESC\ ^H Delete previous word (backspace key) [n]
|
||||
ESC\ DEL Delete previous word (delete key) [n]
|
||||
ESC\ ESC Show possible completions; see below
|
||||
ESC\ SP Set the mark (space key); see ^X^X and ^Y above
|
||||
ESC\ . Get the last (or [n]'th) word from previous line
|
||||
ESC\ ? Show possible completions; see below
|
||||
ESC\ < Move to start of history
|
||||
ESC\ > Move to end of history
|
||||
ESC\ b Move backward a word [n]
|
||||
ESC\ d Delete word under cursor [n]
|
||||
ESC\ f Move forward a word [n]
|
||||
ESC\ l Make word lowercase [n]
|
||||
ESC\ m Toggle if 8bit chars display as themselves or with
|
||||
\& an ``M\-'' prefix
|
||||
ESC\ u Make word uppercase [n]
|
||||
ESC\ y Yank back last killed text
|
||||
ESC\ w Make area up to mark yankable
|
||||
ESC\ nn Set repeat count to the number nn
|
||||
ESC\ C Read from environment variable ``_C_'', where C is
|
||||
\& an uppercase letter
|
||||
.fi
|
||||
.RE
|
||||
.PP
|
||||
The
|
||||
.I editline
|
||||
library has a small macro facility.
|
||||
If you type the escape key followed by an uppercase letter,
|
||||
.IR C ,
|
||||
then the contents of the environment variable
|
||||
.I _C_
|
||||
are read in as if you had typed them at the keyboard.
|
||||
For example, if the variable
|
||||
.I _L_
|
||||
contains the following:
|
||||
.RS
|
||||
^A^Kecho '^V^[[H^V^[[2J'^M
|
||||
.RE
|
||||
Then typing ``ESC L'' will move to the beginning of the line, kill the
|
||||
entire line, enter the echo command needed to clear the terminal (if your
|
||||
terminal is like a VT-100), and send the line back to the shell.
|
||||
.PP
|
||||
The
|
||||
.I editline
|
||||
library also does filename completion.
|
||||
Suppose the root directory has the following files in it:
|
||||
.RS
|
||||
.nf
|
||||
.ta \w'core 'u
|
||||
bin vmunix
|
||||
core vmunix.old
|
||||
.fi
|
||||
.RE
|
||||
If you type ``rm\ /v'' and then the tab key.
|
||||
.I Editline
|
||||
will then finish off as much of the name as possible by adding ``munix''.
|
||||
Because the name is not unique, it will then beep.
|
||||
If you type the escape key followed by either a question mark or another
|
||||
escape, it will display the two choices.
|
||||
If you then type a period and a tab, the library will finish off the filename
|
||||
for you:
|
||||
.RS
|
||||
.nf
|
||||
.RI "rm /v[TAB]" munix ".[TAB]" old
|
||||
.fi
|
||||
.RE
|
||||
The tab key is shown by ``[TAB]'' and the automatically-entered text
|
||||
is shown in italics.
|
||||
.SH "BUGS AND LIMITATIONS"
|
||||
Cannot handle lines more than 80 columns.
|
||||
.SH AUTHORS
|
||||
Simmule R. Turner <uunet.uu.net!capitol!sysgo!simmy>
|
||||
and Rich $alz <rsalz@osf.org>.
|
||||
Original manual page by DaviD W. Sanderson <dws@ssec.wisc.edu>.
|
File diff suppressed because it is too large
Load diff
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue