1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

merge with 5.1

This commit is contained in:
Sergei Golubchik
2010-09-11 20:43:48 +02:00
448 changed files with 9732 additions and 3460 deletions

View File

@ -83,6 +83,3 @@ EXTRA_DIST = FINISH.sh \
compile-solaris-x86-32-debug-forte \ compile-solaris-x86-32-debug-forte \
compile-solaris-x86-forte-32 \ compile-solaris-x86-forte-32 \
util.sh util.sh
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -98,22 +98,19 @@ SSL_LIBRARY=--with-ssl
if [ "x$warning_mode" != "xpedantic" ]; then if [ "x$warning_mode" != "xpedantic" ]; then
# Both C and C++ warnings # Both C and C++ warnings
warnings="-Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W" warnings="-Wall -Wextra -Wunused -Wwrite-strings"
warnings="$warnings -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare"
warnings="$warnings -Wwrite-strings -Wunused-function -Wunused-label -Wunused-value -Wunused-variable"
# For more warnings, uncomment the following line # For more warnings, uncomment the following line
# warnings="$global_warnings -Wshadow" # warnings="$warnings -Wshadow"
# C warnings # C warnings
c_warnings="$warnings -Wunused-parameter" c_warnings="$warnings"
# C++ warnings # C++ warnings
cxx_warnings="$warnings" cxx_warnings="$warnings -Wno-unused-parameter"
# cxx_warnings="$cxx_warnings -Woverloaded-virtual -Wsign-promo" # cxx_warnings="$cxx_warnings -Woverloaded-virtual -Wsign-promo"
cxx_warnings="$cxx_warnings -Wreorder"
cxx_warnings="$cxx_warnings -Wctor-dtor-privacy -Wnon-virtual-dtor" cxx_warnings="$cxx_warnings -Wctor-dtor-privacy -Wnon-virtual-dtor"
# Added unless --with-debug=full # Added unless --with-debug=full
debug_extra_cflags="-O0 -g3 -gdwarf-2" #1 -Wuninitialized" debug_extra_cflags="-O0 -g3 -gdwarf-2"
else else
warnings="-W -Wall -ansi -pedantic -Wno-long-long -Wno-unused -D_POSIX_SOURCE" warnings="-W -Wall -ansi -pedantic -Wno-long-long -Wno-unused -D_POSIX_SOURCE"
c_warnings="$warnings" c_warnings="$warnings"

View File

@ -181,14 +181,17 @@ check_cpu () {
cc=$CC cc=$CC
fi fi
cc_ver=`$cc --version | sed 1q` # check if compiler is gcc and dump its version
cc_verno=`echo $cc_ver | sed -e 's/^.*(GCC)//g; s/[^0-9. ]//g; s/^ *//g; s/ .*//g'` cc_verno=`$cc -dumpversion 2>/dev/null`
set -- `echo $cc_verno | tr '.' ' '` if test "x$?" = "x0" ; then
cc_major=$1 set -- `echo $cc_verno | tr '.' ' '`
cc_minor=$2 cc_ver="GCC"
cc_patch=$3 cc_major=$1
cc_comp=`expr $cc_major '*' 100 '+' $cc_minor` cc_minor=$2
cc_patch=$3
cc_comp=`expr $cc_major '*' 100 '+' $cc_minor`
fi
case "$cc_ver--$cc_verno" in case "$cc_ver--$cc_verno" in
*GCC*) *GCC*)
# different gcc backends (and versions) have different CPU flags # different gcc backends (and versions) have different CPU flags
@ -229,7 +232,7 @@ check_cpu () {
fi fi
while [ "$cpu_arg" ] ; do while [ "$cpu_arg" ] ; do
printf "testing $cpu_arg ... " >&2 printf "testing $cpu_arg ... " >&2
# compile check # compile check
eval "$cc -c $check_cpu_cflags __test.c" 2>/dev/null eval "$cc -c $check_cpu_cflags __test.c" 2>/dev/null
if test "x$?" = "x0" ; then if test "x$?" = "x0" ; then
@ -243,5 +246,5 @@ check_cpu () {
done done
rm __test.* rm __test.*
} }
check_cpu check_cpu

View File

@ -37,6 +37,3 @@ uninstall-local:
@RM@ -f $(DESTDIR)$(infodir)/mysql.info ; \ @RM@ -f $(DESTDIR)$(infodir)/mysql.info ; \
@RM@ -f $(DESTDIR)$(pkgdatadir)/ChangeLog ; \ @RM@ -f $(DESTDIR)$(pkgdatadir)/ChangeLog ; \
fi fi
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -325,7 +325,7 @@ abi_check_all: $(TEST_PREPROCESSOR_HEADER)
do_abi_check: do_abi_check:
set -ex; \ set -ex; \
for file in $(abi_headers); do \ for file in $(abi_headers); do \
@CC@ -E -nostdinc -dI \ @CC@ -E -nostdinc -dI -DMYSQL_ABI_CHECK \
-I$(top_srcdir)/include \ -I$(top_srcdir)/include \
-I$(top_srcdir)/include/mysql \ -I$(top_srcdir)/include/mysql \
-I$(top_srcdir)/sql \ -I$(top_srcdir)/sql \
@ -341,6 +341,3 @@ do_abi_check:
@DIFF@ -w $$file.pp $(top_builddir)/abi_check.out; \ @DIFF@ -w $$file.pp $(top_builddir)/abi_check.out; \
@RM@ $(top_builddir)/abi_check.out; \ @RM@ $(top_builddir)/abi_check.out; \
done done
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -123,6 +123,3 @@ link_sources:
rm -f $(srcdir)/my_user.c; \ rm -f $(srcdir)/my_user.c; \
@LN_CP_F@ $(top_srcdir)/sql-common/my_user.c my_user.c; @LN_CP_F@ $(top_srcdir)/sql-common/my_user.c my_user.c;
echo timestamp > link_sources; echo timestamp > link_sources;
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -3663,7 +3663,7 @@ xmlencode_print(const char *src, uint length)
tee_fputs("NULL", PAGER); tee_fputs("NULL", PAGER);
else else
{ {
for (const char *p = src; length; *p++, length--) for (const char *p = src; length; p++, length--)
{ {
const char *t; const char *t;
if ((t = array_value(xmlmeta, *p))) if ((t = array_value(xmlmeta, *p)))
@ -4833,7 +4833,7 @@ static const char *construct_prompt()
struct tm *t = localtime(&lclock); struct tm *t = localtime(&lclock);
/* parse thru the settings for the prompt */ /* parse thru the settings for the prompt */
for (char *c = current_prompt; *c ; *c++) for (char *c = current_prompt; *c ; c++)
{ {
if (*c != PROMPT_CHAR) if (*c != PROMPT_CHAR)
processed_prompt.append(*c); processed_prompt.append(*c);

View File

@ -1,4 +1,5 @@
/* Copyright (C) 2000 MySQL AB /* Copyright (C) 2000 MySQL AB
Copyright (C) 2010 Monty Program Ab
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -17,7 +18,7 @@
#include <sslopt-vars.h> #include <sslopt-vars.h>
#include "../scripts/mysql_fix_privilege_tables_sql.c" #include "../scripts/mysql_fix_privilege_tables_sql.c"
#define VER "1.1" #define VER "1.2"
#ifdef HAVE_SYS_WAIT_H #ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h> #include <sys/wait.h>
@ -34,8 +35,9 @@
static char mysql_path[FN_REFLEN]; static char mysql_path[FN_REFLEN];
static char mysqlcheck_path[FN_REFLEN]; static char mysqlcheck_path[FN_REFLEN];
static my_bool opt_force, opt_verbose, debug_info_flag, debug_check_flag; static my_bool opt_force, debug_info_flag, debug_check_flag, opt_silent;
static uint my_end_arg= 0; static my_bool opt_not_used; /* For compatiblity */
static uint my_end_arg= 0, opt_verbose;
static char *opt_user= (char*)"root"; static char *opt_user= (char*)"root";
static DYNAMIC_STRING ds_args; static DYNAMIC_STRING ds_args;
@ -62,12 +64,14 @@ static struct my_option my_long_options[]=
{ {
{"help", '?', "Display this help message and exit.", 0, 0, 0, GET_NO_ARG, {"help", '?', "Display this help message and exit.", 0, 0, 0, GET_NO_ARG,
NO_ARG, 0, 0, 0, 0, 0, 0}, NO_ARG, 0, 0, 0, 0, 0, 0},
{"basedir", 'b', "Not used by mysql_upgrade. Only for backward compatibility.", {"basedir", 'b',
"Not used by mysql_upgrade. Only for backward compatibility.",
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"character-sets-dir", OPT_CHARSETS_DIR, {"character-sets-dir", OPT_CHARSETS_DIR,
"Directory for character set files.", 0, "Not used by mysql_upgrade. Only for backward compatibility.",
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0 },
{"compress", OPT_COMPRESS, "Use compression in server/client protocol.", {"compress", OPT_COMPRESS,
"Not used by mysql_upgrade. Only for backward compatibility.",
&not_used, &not_used, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, &not_used, &not_used, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"datadir", 'd', {"datadir", 'd',
"Not used by mysql_upgrade. Only for backward compatibility.", "Not used by mysql_upgrade. Only for backward compatibility.",
@ -80,18 +84,17 @@ static struct my_option my_long_options[]=
&default_dbug_option, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, &default_dbug_option, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
#endif #endif
{"debug-check", OPT_DEBUG_CHECK, "Check memory and open file usage at exit.", {"debug-check", OPT_DEBUG_CHECK, "Check memory and open file usage at exit.",
&debug_check_flag, &debug_check_flag, 0, &debug_check_flag, &debug_check_flag,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"debug-info", 'T', "Print some debug info at exit.", &debug_info_flag, {"debug-info", 'T', "Print some debug info at exit.", &debug_info_flag,
&debug_info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, &debug_info_flag, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"default-character-set", OPT_DEFAULT_CHARSET, {"default-character-set", OPT_DEFAULT_CHARSET,
"Set the default character set.", 0, "Not used by mysql_upgrade. Only for backward compatibility.",
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"force", 'f', "Force execution of mysqlcheck even if mysql_upgrade " {"force", 'f', "Force execution of mysqlcheck even if mysql_upgrade "
"has already been executed for the current version of MySQL.", "has already been executed for the current version of MySQL.",
&opt_force, &opt_force, 0, &opt_force, &opt_force, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"host", 'h', "Connect to host.", 0,
{"host",'h', "Connect to host.", 0,
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"password", 'p', {"password", 'p',
"Password to use when connecting to server. If password is not given," "Password to use when connecting to server. If password is not given,"
@ -116,6 +119,8 @@ static struct my_option my_long_options[]=
"Base name of shared memory.", 0, "Base name of shared memory.", 0,
0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#endif #endif
{"silent", 's', "Print less information", &opt_silent,
&opt_silent, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"socket", 'S', "The socket file to use for connection.", {"socket", 'S', "The socket file to use for connection.",
0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, 0, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
#include <sslopt-longopts.h> #include <sslopt-longopts.h>
@ -124,8 +129,7 @@ static struct my_option my_long_options[]=
{"user", 'u', "User for login if not current user.", &opt_user, {"user", 'u', "User for login if not current user.", &opt_user,
&opt_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, &opt_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"verbose", 'v', "Display more output about the process.", {"verbose", 'v', "Display more output about the process.",
&opt_verbose, &opt_verbose, 0, &opt_not_used, &opt_not_used, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
{"write-binlog", OPT_WRITE_BINLOG, {"write-binlog", OPT_WRITE_BINLOG,
"All commands including mysqlcheck are binlogged. Enabled by default;" "All commands including mysqlcheck are binlogged. Enabled by default;"
"use --skip-write-binlog when commands should not be sent to replication slaves.", "use --skip-write-binlog when commands should not be sent to replication slaves.",
@ -173,7 +177,7 @@ static void verbose(const char *fmt, ...)
{ {
va_list args; va_list args;
if (!opt_verbose) if (opt_silent)
return; return;
/* Print the verbose message */ /* Print the verbose message */
@ -266,6 +270,18 @@ get_one_option(int optid, const struct my_option *opt,
/* FALLTHROUGH */ /* FALLTHROUGH */
case 'v': /* --verbose */ case 'v': /* --verbose */
opt_verbose++;
if (argument == disabled_my_option)
{
opt_verbose= 0;
opt_silent= 1;
}
add_option= 0;
break;
case 's':
opt_verbose= 0;
add_option= 0;
break;
case 'f': /* --force */ case 'f': /* --force */
add_option= FALSE; add_option= FALSE;
break; break;
@ -426,7 +442,8 @@ static void find_tool(char *tool_executable_name, const char *tool_name,
len, self_name, FN_LIBCHAR, tool_name); len, self_name, FN_LIBCHAR, tool_name);
} }
verbose("Looking for '%s' as: %s", tool_name, tool_executable_name); if (opt_verbose)
verbose("Looking for '%s' as: %s", tool_name, tool_executable_name);
/* /*
Make sure it can be executed Make sure it can be executed
@ -496,7 +513,7 @@ static int run_query(const char *query, DYNAMIC_STRING *ds_res,
"--database=mysql", "--database=mysql",
"--batch", /* Turns off pager etc. */ "--batch", /* Turns off pager etc. */
force ? "--force": "--skip-force", force ? "--force": "--skip-force",
ds_res ? "--silent": "", ds_res || opt_silent ? "--silent": "",
"<", "<",
query_file_path, query_file_path,
"2>&1", "2>&1",
@ -649,6 +666,8 @@ static void create_mysql_upgrade_info_file(void)
static void print_conn_args(const char *tool_name) static void print_conn_args(const char *tool_name)
{ {
if (opt_verbose < 2)
return;
if (conn_args.str[0]) if (conn_args.str[0])
verbose("Running '%s' with connection arguments: %s", tool_name, verbose("Running '%s' with connection arguments: %s", tool_name,
conn_args.str); conn_args.str);
@ -664,6 +683,7 @@ static void print_conn_args(const char *tool_name)
static int run_mysqlcheck_upgrade(void) static int run_mysqlcheck_upgrade(void)
{ {
verbose("Phase 2/3: Checking and upgrading tables");
print_conn_args("mysqlcheck"); print_conn_args("mysqlcheck");
return run_tool(mysqlcheck_path, return run_tool(mysqlcheck_path,
NULL, /* Send output from mysqlcheck directly to screen */ NULL, /* Send output from mysqlcheck directly to screen */
@ -672,6 +692,8 @@ static int run_mysqlcheck_upgrade(void)
"--check-upgrade", "--check-upgrade",
"--all-databases", "--all-databases",
"--auto-repair", "--auto-repair",
!opt_silent || opt_verbose ? "--verbose": "",
opt_silent ? "--silent": "",
opt_write_binlog ? "--write-binlog" : "--skip-write-binlog", opt_write_binlog ? "--write-binlog" : "--skip-write-binlog",
NULL); NULL);
} }
@ -679,6 +701,7 @@ static int run_mysqlcheck_upgrade(void)
static int run_mysqlcheck_fixnames(void) static int run_mysqlcheck_fixnames(void)
{ {
verbose("Phase 1/3: Fixing table and database names");
print_conn_args("mysqlcheck"); print_conn_args("mysqlcheck");
return run_tool(mysqlcheck_path, return run_tool(mysqlcheck_path,
NULL, /* Send output from mysqlcheck directly to screen */ NULL, /* Send output from mysqlcheck directly to screen */
@ -687,6 +710,8 @@ static int run_mysqlcheck_fixnames(void)
"--all-databases", "--all-databases",
"--fix-db-names", "--fix-db-names",
"--fix-table-names", "--fix-table-names",
opt_verbose ? "--verbose": "",
opt_silent ? "--silent": "",
opt_write_binlog ? "--write-binlog" : "--skip-write-binlog", opt_write_binlog ? "--write-binlog" : "--skip-write-binlog",
NULL); NULL);
} }
@ -756,7 +781,7 @@ static int run_sql_fix_privilege_tables(void)
if (init_dynamic_string(&ds_result, "", 512, 512)) if (init_dynamic_string(&ds_result, "", 512, 512))
die("Out of memory"); die("Out of memory");
verbose("Running 'mysql_fix_privilege_tables'..."); verbose("Phase 3/3: Running 'mysql_fix_privilege_tables'...");
run_query(mysql_fix_privilege_tables, run_query(mysql_fix_privilege_tables,
&ds_result, /* Collect result */ &ds_result, /* Collect result */
TRUE); TRUE);

View File

@ -1,4 +1,5 @@
/* Copyright (C) 2000 MySQL AB /* Copyright (C) 2000 MySQL AB & Jani Tolonen
Copyright (C) 2010 Monty Program Ab
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
@ -15,7 +16,7 @@
/* By Jani Tolonen, 2001-04-20, MySQL Development Team */ /* By Jani Tolonen, 2001-04-20, MySQL Development Team */
#define CHECK_VERSION "2.5.0" #define CHECK_VERSION "2.6.0"
#include "client_priv.h" #include "client_priv.h"
#include <m_ctype.h> #include <m_ctype.h>
@ -222,24 +223,26 @@ static void usage(void)
{ {
print_version(); print_version();
puts("By Jani Tolonen, 2001-04-20, MySQL Development Team.\n"); puts("By Jani Tolonen, 2001-04-20, MySQL Development Team.\n");
puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,\n"); puts("This software comes with ABSOLUTELY NO WARRANTY. This is free software,");
puts("and you are welcome to modify and redistribute it under the GPL license.\n"); puts("and you are welcome to modify and redistribute it under the GPL license.\n");
printf("Usage: %s [OPTIONS] database [tables]\n", my_progname);
printf("OR %s [OPTIONS] --databases DB1 [DB2 DB3...]\n",
my_progname);
printf("OR %s [OPTIONS] --all-databases\n\n", my_progname);
puts("This program can be used to CHECK (-c, -m, -C), REPAIR (-r), ANALYZE (-a),"); puts("This program can be used to CHECK (-c, -m, -C), REPAIR (-r), ANALYZE (-a),");
puts("or OPTIMIZE (-o) tables. Some of the options (like -e or -q) can be"); puts("or OPTIMIZE (-o) tables. Some of the options (like -e or -q) can be");
puts("used at the same time. Not all options are supported by all storage engines."); puts("used at the same time. Not all options are supported by all storage engines.");
puts("Please consult the MySQL manual for latest information about the"); puts("The options -c, -r, -a, and -o are exclusive to each other, which");
puts("above. The options -c, -r, -a, and -o are exclusive to each other, which");
puts("means that the last option will be used, if several was specified.\n"); puts("means that the last option will be used, if several was specified.\n");
puts("The option -c will be used by default, if none was specified. You"); puts("The option -c (--check) will be used by default, if none was specified.");
puts("can change the default behavior by making a symbolic link, or"); puts("You can change the default behavior by making a symbolic link, or");
puts("copying this file somewhere with another name, the alternatives are:"); puts("copying this file somewhere with another name, the alternatives are:");
puts("mysqlrepair: The default option will be -r"); puts("mysqlrepair: The default option will be -r");
puts("mysqlanalyze: The default option will be -a"); puts("mysqlanalyze: The default option will be -a");
puts("mysqloptimize: The default option will be -o\n"); puts("mysqloptimize: The default option will be -o\n");
printf("Usage: %s [OPTIONS] database [tables]\n", my_progname); puts("Please consult the MariaDB/MySQL knowledgebase at");
printf("OR %s [OPTIONS] --databases DB1 [DB2 DB3...]\n", puts("http://kb.askmonty.org/v/mysqlcheck for latest information about");
my_progname); puts("this program.");
printf("OR %s [OPTIONS] --all-databases\n", my_progname);
print_defaults("my", load_default_groups); print_defaults("my", load_default_groups);
my_print_help(my_long_options); my_print_help(my_long_options);
my_print_variables(my_long_options); my_print_variables(my_long_options);
@ -416,6 +419,8 @@ static int process_all_databases()
MYF(0), mysql_error(sock)); MYF(0), mysql_error(sock));
return 1; return 1;
} }
if (verbose)
printf("Processing databases\n");
while ((row = mysql_fetch_row(tableres))) while ((row = mysql_fetch_row(tableres)))
{ {
if (process_one_db(row[0])) if (process_one_db(row[0]))
@ -429,6 +434,8 @@ static int process_all_databases()
static int process_databases(char **db_names) static int process_databases(char **db_names)
{ {
int result = 0; int result = 0;
if (verbose)
printf("Processing databases\n");
for ( ; *db_names ; db_names++) for ( ; *db_names ; db_names++)
{ {
if (process_one_db(*db_names)) if (process_one_db(*db_names))
@ -521,6 +528,7 @@ static int process_all_tables_in_db(char *database)
MYSQL_RES *res; MYSQL_RES *res;
MYSQL_ROW row; MYSQL_ROW row;
uint num_columns; uint num_columns;
my_bool system_database= 0;
LINT_INIT(res); LINT_INIT(res);
if (use_db(database)) if (use_db(database))
@ -534,6 +542,9 @@ static int process_all_tables_in_db(char *database)
return 1; return 1;
} }
if (!strcmp(database, "mysql") || !strcmp(database, "MYSQL"))
system_database= 1;
num_columns= mysql_num_fields(res); num_columns= mysql_num_fields(res);
if (opt_all_in_1 && what_to_do != DO_UPGRADE) if (opt_all_in_1 && what_to_do != DO_UPGRADE)
@ -576,6 +587,10 @@ static int process_all_tables_in_db(char *database)
/* Skip views if we don't perform renaming. */ /* Skip views if we don't perform renaming. */
if ((what_to_do != DO_UPGRADE) && (num_columns == 2) && (strcmp(row[1], "VIEW") == 0)) if ((what_to_do != DO_UPGRADE) && (num_columns == 2) && (strcmp(row[1], "VIEW") == 0))
continue; continue;
if (system_database &&
(!strcmp(row[0], "general_log") ||
!strcmp(row[0], "slow_log")))
continue; /* Skip logging tables */
handle_request_for_tables(row[0], fixed_name_length(row[0])); handle_request_for_tables(row[0], fixed_name_length(row[0]));
} }
@ -624,6 +639,8 @@ static int fix_database_storage_name(const char *name)
static int process_one_db(char *database) static int process_one_db(char *database)
{ {
if (verbose)
puts(database);
if (what_to_do == DO_UPGRADE) if (what_to_do == DO_UPGRADE)
{ {
int rc= 0; int rc= 0;
@ -731,7 +748,7 @@ static void print_result()
{ {
MYSQL_RES *res; MYSQL_RES *res;
MYSQL_ROW row; MYSQL_ROW row;
char prev[NAME_LEN*2+2]; char prev[(NAME_LEN+9)*2+2];
uint i; uint i;
my_bool found_error=0; my_bool found_error=0;
@ -761,7 +778,15 @@ static void print_result()
printf("%-50s %s", row[0], row[3]); printf("%-50s %s", row[0], row[3]);
else if (!status && changed) else if (!status && changed)
{ {
printf("%s\n%-9s: %s", row[0], row[2], row[3]); /*
If the error message includes REPAIR TABLE, we assume it means
we have to run upgrade on it. In this case we write a nicer message
than "Please do "REPAIR TABLE""...
*/
if (!strcmp(row[2],"error") && strinstr(row[3],"REPAIR TABLE") != 0)
printf("%-50s %s", row[0], "Needs upgrade");
else
printf("%s\n%-9s: %s", row[0], row[2], row[3]);
if (strcmp(row[2],"note")) if (strcmp(row[2],"note"))
found_error=1; found_error=1;
} }
@ -780,7 +805,7 @@ static void print_result()
static int dbConnect(char *host, char *user, char *passwd) static int dbConnect(char *host, char *user, char *passwd)
{ {
DBUG_ENTER("dbConnect"); DBUG_ENTER("dbConnect");
if (verbose) if (verbose > 1)
{ {
fprintf(stderr, "# Connecting to %s...\n", host ? host : "localhost"); fprintf(stderr, "# Connecting to %s...\n", host ? host : "localhost");
} }
@ -813,7 +838,7 @@ static int dbConnect(char *host, char *user, char *passwd)
static void dbDisconnect(char *host) static void dbDisconnect(char *host)
{ {
if (verbose) if (verbose > 1)
fprintf(stderr, "# Disconnecting from %s...\n", host ? host : "localhost"); fprintf(stderr, "# Disconnecting from %s...\n", host ? host : "localhost");
mysql_close(sock); mysql_close(sock);
} /* dbDisconnect */ } /* dbDisconnect */

View File

@ -669,8 +669,7 @@ list_fields(MYSQL *mysql,const char *db,const char *table,
char query[1024],*end; char query[1024],*end;
MYSQL_RES *result; MYSQL_RES *result;
MYSQL_ROW row; MYSQL_ROW row;
ulong rows; ulong UNINIT_VAR(rows);
LINT_INIT(rows);
if (mysql_select_db(mysql,db)) if (mysql_select_db(mysql,db))
{ {

View File

@ -5828,7 +5828,7 @@ int read_command(struct st_command** command_ptr)
(struct st_command*) my_malloc(sizeof(*command), (struct st_command*) my_malloc(sizeof(*command),
MYF(MY_WME|MY_ZEROFILL))) || MYF(MY_WME|MY_ZEROFILL))) ||
insert_dynamic(&q_lines, (uchar*) &command)) insert_dynamic(&q_lines, (uchar*) &command))
die(NullS); die("Out of memory");
command->type= Q_UNKNOWN; command->type= Q_UNKNOWN;
read_command_buf[0]= 0; read_command_buf[0]= 0;
@ -6325,7 +6325,7 @@ void init_win_path_patterns()
} }
if (insert_dynamic(&patterns, (uchar*) &p)) if (insert_dynamic(&patterns, (uchar*) &p))
die(NullS); die("Out of memory");
DBUG_PRINT("info", ("p: %s", p)); DBUG_PRINT("info", ("p: %s", p));
while (*p) while (*p)
@ -9405,8 +9405,7 @@ REPLACE *init_replace(char * *from, char * *to,uint count,
for (i=1 ; i <= found_sets ; i++) for (i=1 ; i <= found_sets ; i++)
{ {
pos=from[found_set[i-1].table_offset]; pos=from[found_set[i-1].table_offset];
rep_str[i].found= !bcmp((const uchar*) pos, rep_str[i].found= !memcmp(pos, "\\^", 3) ? 2 : 1;
(const uchar*) "\\^", 3) ? 2 : 1;
rep_str[i].replace_string=to_array[found_set[i-1].table_offset]; rep_str[i].replace_string=to_array[found_set[i-1].table_offset];
rep_str[i].to_offset=found_set[i-1].found_offset-start_at_word(pos); rep_str[i].to_offset=found_set[i-1].found_offset-start_at_word(pos);
rep_str[i].from_offset=found_set[i-1].found_offset-replace_len(pos)+ rep_str[i].from_offset=found_set[i-1].found_offset-replace_len(pos)+
@ -9534,8 +9533,8 @@ void copy_bits(REP_SET *to,REP_SET *from)
int cmp_bits(REP_SET *set1,REP_SET *set2) int cmp_bits(REP_SET *set1,REP_SET *set2)
{ {
return bcmp((uchar*) set1->bits,(uchar*) set2->bits, return memcmp(set1->bits, set2->bits,
sizeof(uint) * set1->size_of_bits); sizeof(uint) * set1->size_of_bits);
} }
@ -9604,17 +9603,15 @@ int find_found(FOUND_SET *found_set,uint table_offset, int found_offset)
uint start_at_word(char * pos) uint start_at_word(char * pos)
{ {
return (((!bcmp((const uchar*) pos, (const uchar*) "\\b",2) && pos[2]) || return (((!memcmp(pos, "\\b",2) && pos[2]) ||
!bcmp((const uchar*) pos, (const uchar*) "\\^", 2)) ? 1 : 0); !memcmp(pos, "\\^", 2)) ? 1 : 0);
} }
uint end_of_word(char * pos) uint end_of_word(char * pos)
{ {
char * end=strend(pos); char * end=strend(pos);
return ((end > pos+2 && !bcmp((const uchar*) end-2, return ((end > pos+2 && !memcmp(end-2, "\\b", 2)) ||
(const uchar*) "\\b", 2)) || (end >= pos+2 && !memcmp(end-2, "\\$",2))) ? 1 : 0;
(end >= pos+2 && !bcmp((const uchar*) end-2,
(const uchar*) "\\$",2))) ? 1 : 0;
} }
/**************************************************************************** /****************************************************************************

View File

@ -19,6 +19,3 @@
SUBDIRS= @readline_basedir@ SUBDIRS= @readline_basedir@
DIST_SUBDIRS= libedit readline DIST_SUBDIRS= libedit readline
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -31,7 +31,7 @@ noinst_HEADERS = readline.h chardefs.h keymaps.h \
EXTRA_DIST= emacs_keymap.c vi_keymap.c EXTRA_DIST= emacs_keymap.c vi_keymap.c
DEFS = -DMYSQL_CLIENT_NO_THREADS -DHAVE_CONFIG_H -DNO_KILL_INTR DEFS = -DMYSQL_CLIENT_NO_THREADS -DHAVE_CONFIG_H -DNO_KILL_INTR -D_GNU_SOURCE=1
# Don't update the files from bitkeeper # Don't update the files from bitkeeper
%::SCCS/s.% %::SCCS/s.%

View File

@ -318,7 +318,9 @@ _rl_input_available ()
return (_kbhit ()); return (_kbhit ());
#endif #endif
#if !defined (HAVE_SELECT)
return 0; return 0;
#endif
} }
int int

View File

@ -0,0 +1,64 @@
#
# Control aspects of the development environment which are
# specific to MySQL maintainers and developers.
#
AC_DEFUN([MY_MAINTAINER_MODE], [
AC_MSG_CHECKING([whether to enable the maintainer-specific development environment])
AC_ARG_ENABLE([mysql-maintainer-mode],
[AS_HELP_STRING([--enable-mysql-maintainer-mode],
[Enable a MySQL maintainer-specific development environment])],
[USE_MYSQL_MAINTAINER_MODE=$enableval],
[USE_MYSQL_MAINTAINER_MODE=no])
AC_MSG_RESULT([$USE_MYSQL_MAINTAINER_MODE])
])
# Set warning options required under maintainer mode.
AC_DEFUN([MY_MAINTAINER_MODE_WARNINGS], [
# Setup GCC warning options.
AS_IF([test "$GCC" = "yes"], [
C_WARNINGS="-Wall -Wextra -Wunused -Wwrite-strings -Werror"
CXX_WARNINGS="${C_WARNINGS} -Wno-unused-parameter"
])
# Test whether the warning options work.
# Test C options
AS_IF([test -n "$C_WARNINGS"], [
save_CFLAGS="$CFLAGS"
AC_MSG_CHECKING([whether to use C warning options ${C_WARNINGS}])
AC_LANG_PUSH(C)
CFLAGS="$CFLAGS ${C_WARNINGS}"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [myac_c_warning_flags=yes],
[myac_c_warning_flags=no])
AC_LANG_POP()
AC_MSG_RESULT([$myac_c_warning_flags])
CFLAGS="$save_CFLAGS"
])
# Test C++ options
AS_IF([test -n "$CXX_WARNINGS"], [
save_CXXFLAGS="$CXXFLAGS"
AC_MSG_CHECKING([whether to use C++ warning options ${CXX_WARNINGS}])
AC_LANG_PUSH(C++)
CXXFLAGS="$CXXFLAGS ${CXX_WARNINGS}"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [myac_cxx_warning_flags=yes],
[myac_cxx_warning_flags=no])
AC_LANG_POP()
AC_MSG_RESULT([$myac_cxx_warning_flags])
CXXFLAGS="$save_CXXFLAGS"
])
# Set compile flag variables.
AS_IF([test "$myac_c_warning_flags" = "yes"], [
AM_CFLAGS="${AM_CFLAGS} ${C_WARNINGS}"
AC_SUBST([AM_CFLAGS])])
AS_IF([test "$myac_cxx_warning_flags" = "yes"], [
AM_CXXFLAGS="${AM_CXXFLAGS} ${CXX_WARNINGS}"
AC_SUBST([AM_CXXFLAGS])])
])
# Set compiler flags required under maintainer mode.
AC_DEFUN([MY_MAINTAINER_MODE_SETUP], [
AS_IF([test "$USE_MYSQL_MAINTAINER_MODE" = "yes"],
[MY_MAINTAINER_MODE_WARNINGS])
])

View File

@ -11,13 +11,7 @@ dnl internals@lists.mysql.com in advance of pushing the change.
dnl dnl
dnl When changing the major version number please also check the switch dnl When changing the major version number please also check the switch
dnl statement in mysqlbinlog::check_master_version(). You may also need dnl statement in mysqlbinlog::check_master_version(). You may also need
dnl to update version.c in ndb. AC_INIT([MariaDB Server], [5.2.2-MariaDB-gamma], [], [mysql])
dnl
dnl When merging new MariaDB releases, update the version number to match the
dnl MariaDB version number.
dnl
dnl Note: the following line must be parseable by win/configure.js:GetVersion()
AC_INIT([MariaDB Server], [5.2.1-MariaDB-beta], [], [mysql])
AC_CONFIG_SRCDIR([sql/mysqld.cc]) AC_CONFIG_SRCDIR([sql/mysqld.cc])
AC_CANONICAL_SYSTEM AC_CANONICAL_SYSTEM
@ -70,6 +64,7 @@ MYSQL_TCP_PORT_DEFAULT=3306
MYSQL_UNIX_ADDR_DEFAULT="/tmp/mysql.sock" MYSQL_UNIX_ADDR_DEFAULT="/tmp/mysql.sock"
dnl Include m4 dnl Include m4
sinclude(config/ac-macros/maintainer.m4)
sinclude(config/ac-macros/alloca.m4) sinclude(config/ac-macros/alloca.m4)
sinclude(config/ac-macros/check_cpu.m4) sinclude(config/ac-macros/check_cpu.m4)
sinclude(config/ac-macros/character_sets.m4) sinclude(config/ac-macros/character_sets.m4)
@ -108,6 +103,8 @@ AC_SUBST(SHARED_LIB_MAJOR_VERSION)
AC_SUBST(SHARED_LIB_VERSION) AC_SUBST(SHARED_LIB_VERSION)
AC_SUBST(AVAILABLE_LANGUAGES) AC_SUBST(AVAILABLE_LANGUAGES)
# Whether the maintainer mode should be enabled.
MY_MAINTAINER_MODE
# Canonicalize the configuration name. # Canonicalize the configuration name.
@ -2907,7 +2904,13 @@ do
done done
AC_SUBST(sql_union_dirs) AC_SUBST(sql_union_dirs)
# Some useful subst #
# Setup maintainer mode options by the end to not disturb
# system and other checks.
#
MY_MAINTAINER_MODE_SETUP
# Some usefull subst
AC_SUBST(CC) AC_SUBST(CC)
AC_SUBST(GXX) AC_SUBST(GXX)
@ -2932,7 +2935,8 @@ fi
AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl
unittest/Makefile unittest/mytap/Makefile unittest/mytap/t/Makefile dnl unittest/Makefile unittest/mytap/Makefile unittest/mytap/t/Makefile dnl
unittest/mysys/Makefile unittest/examples/Makefile dnl unittest/mysys/Makefile unittest/strings/Makefile dnl
unittest/examples/Makefile dnl
strings/Makefile regex/Makefile storage/Makefile dnl strings/Makefile regex/Makefile storage/Makefile dnl
man/Makefile BUILD/Makefile vio/Makefile dnl man/Makefile BUILD/Makefile vio/Makefile dnl
libmysql/Makefile libmysql_r/Makefile client/Makefile dnl libmysql/Makefile libmysql_r/Makefile client/Makefile dnl

View File

@ -65,6 +65,3 @@ output5.r: factorial
# a hack to have executable in builddir, not in srcdir # a hack to have executable in builddir, not in srcdir
tests-t: tests-t.pl tests-t: tests-t.pl
cp -f $(srcdir)/tests-t.pl ./tests-t cp -f $(srcdir)/tests-t.pl ./tests-t
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -1,6 +1,5 @@
#!/usr/bin/perl #!/usr/bin/perl
die <<EEE unless @ARGV; die <<EEE unless @ARGV;
Usage: $0 func1 [func2 [ ...] ] Usage: $0 func1 [func2 [ ...] ]
@ -11,16 +10,16 @@ DBUG_ENTER() and DBUG_POP(); right before DBUG_RETURN in every such a function.
EEE EEE
$re=join('|', @ARGV); $re=join('|', @ARGV);
$skip='';
while(<STDIN>) { while(<STDIN>) {
print unless $skip; ($thd) = /^(T@\d+)/;
print unless $skip{$thd};
next unless /^(?:.*: )*((?:\| )*)([<>])($re)\n/o; next unless /^(?:.*: )*((?:\| )*)([<>])($re)\n/o;
if ($2 eq '>') { if ($2 eq '>') {
$skip=$1.$3 unless $skip; $skip{$thd}=$1.$3 unless $skip{$thd};
next; next;
} }
next if $skip ne $1.$3; next if $skip{$thd} ne $1.$3;
$skip=''; delete $skip{$thd};
print; print;
} }

View File

@ -55,6 +55,3 @@ EXTRA_DIST = CMakeLists.txt
perror.o: perror.c perror.o: perror.c
$(COMPILE) @ndbcluster_includes@ $(LM_CFLAGS) -c $< $(COMPILE) @ndbcluster_includes@ $(LM_CFLAGS) -c $<
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -640,9 +640,9 @@ static struct message *find_message(struct errors *err, const char *lang,
static ha_checksum checksum_format_specifier(const char* msg) static ha_checksum checksum_format_specifier(const char* msg)
{ {
ha_checksum chksum= 0; ha_checksum chksum= 0;
const char* p= msg; const uchar* p= (const uchar*) msg;
const char* start= 0; const uchar* start= NULL;
int num_format_specifiers= 0; uint32 num_format_specifiers= 0;
while (*p) while (*p)
{ {
@ -832,7 +832,6 @@ static struct message *parse_message_string(struct message *new_message,
static struct errors *parse_error_string(char *str, int er_count) static struct errors *parse_error_string(char *str, int er_count)
{ {
struct errors *new_error; struct errors *new_error;
char *start;
DBUG_ENTER("parse_error_string"); DBUG_ENTER("parse_error_string");
DBUG_PRINT("enter", ("str: %s", str)); DBUG_PRINT("enter", ("str: %s", str));
@ -843,7 +842,6 @@ static struct errors *parse_error_string(char *str, int er_count)
DBUG_RETURN(0); /* OOM: Fatal error */ DBUG_RETURN(0); /* OOM: Fatal error */
/* getting the error name */ /* getting the error name */
start= str;
str= skip_delimiters(str); str= skip_delimiters(str);
if (!(new_error->er_name= get_word(&str))) if (!(new_error->er_name= get_word(&str)))

View File

@ -649,7 +649,7 @@ static REPLACE *init_replace(char * *from, char * *to,uint count,
for (i=1 ; i <= found_sets ; i++) for (i=1 ; i <= found_sets ; i++)
{ {
pos=from[found_set[i-1].table_offset]; pos=from[found_set[i-1].table_offset];
rep_str[i].found= (my_bool) (!bcmp(pos,"\\^",3) ? 2 : 1); rep_str[i].found= (my_bool) (!memcmp(pos,"\\^",3) ? 2 : 1);
rep_str[i].replace_string=to_array[found_set[i-1].table_offset]; rep_str[i].replace_string=to_array[found_set[i-1].table_offset];
rep_str[i].to_offset=found_set[i-1].found_offset-start_at_word(pos); rep_str[i].to_offset=found_set[i-1].found_offset-start_at_word(pos);
rep_str[i].from_offset=found_set[i-1].found_offset-replace_len(pos)+ rep_str[i].from_offset=found_set[i-1].found_offset-replace_len(pos)+
@ -777,8 +777,8 @@ static void copy_bits(REP_SET *to,REP_SET *from)
static int cmp_bits(REP_SET *set1,REP_SET *set2) static int cmp_bits(REP_SET *set1,REP_SET *set2)
{ {
return bcmp((uchar*) set1->bits,(uchar*) set2->bits, return memcmp(set1->bits, set2->bits,
sizeof(uint) * set1->size_of_bits); sizeof(uint) * set1->size_of_bits);
} }
@ -850,14 +850,14 @@ static short find_found(FOUND_SET *found_set,uint table_offset,
static uint start_at_word(char * pos) static uint start_at_word(char * pos)
{ {
return (((!bcmp(pos,"\\b",2) && pos[2]) || !bcmp(pos,"\\^",2)) ? 1 : 0); return (((!memcmp(pos,"\\b",2) && pos[2]) || !memcmp(pos,"\\^",2)) ? 1 : 0);
} }
static uint end_of_word(char * pos) static uint end_of_word(char * pos)
{ {
char * end=strend(pos); char * end=strend(pos);
return ((end > pos+2 && !bcmp(end-2,"\\b",2)) || return ((end > pos+2 && !memcmp(end-2,"\\b",2)) ||
(end >= pos+2 && !bcmp(end-2,"\\$",2))) ? (end >= pos+2 && !memcmp(end-2,"\\$",2))) ?
1 : 0; 1 : 0;
} }

View File

@ -884,21 +884,19 @@ void Alert::Process(input_buffer& input, SSL& ssl)
else else
hmac(ssl, verify, data, aSz, alert, true); hmac(ssl, verify, data, aSz, alert, true);
// read mac and fill // read mac and skip fill
int digestSz = ssl.getCrypto().get_digest().get_digestSize(); int digestSz = ssl.getCrypto().get_digest().get_digestSize();
opaque mac[SHA_LEN]; opaque mac[SHA_LEN];
input.read(mac, digestSz); input.read(mac, digestSz);
if (ssl.getSecurity().get_parms().cipher_type_ == block) { if (ssl.getSecurity().get_parms().cipher_type_ == block) {
int ivExtra = 0; int ivExtra = 0;
opaque fill;
if (ssl.isTLSv1_1()) if (ssl.isTLSv1_1())
ivExtra = ssl.getCrypto().get_cipher().get_blockSize(); ivExtra = ssl.getCrypto().get_cipher().get_blockSize();
int padSz = ssl.getSecurity().get_parms().encrypt_size_ - ivExtra - int padSz = ssl.getSecurity().get_parms().encrypt_size_ - ivExtra -
aSz - digestSz; aSz - digestSz;
for (int i = 0; i < padSz; i++) input.set_current(input.get_current() + padSz);
fill = input[AUTO];
} }
// verify // verify
@ -981,17 +979,17 @@ output_buffer& operator<<(output_buffer& output, const Data& data)
void Data::Process(input_buffer& input, SSL& ssl) void Data::Process(input_buffer& input, SSL& ssl)
{ {
int msgSz = ssl.getSecurity().get_parms().encrypt_size_; int msgSz = ssl.getSecurity().get_parms().encrypt_size_;
int pad = 0, padByte = 0; int pad = 0, padSz = 0;
int ivExtra = 0; int ivExtra = 0;
if (ssl.getSecurity().get_parms().cipher_type_ == block) { if (ssl.getSecurity().get_parms().cipher_type_ == block) {
if (ssl.isTLSv1_1()) // IV if (ssl.isTLSv1_1()) // IV
ivExtra = ssl.getCrypto().get_cipher().get_blockSize(); ivExtra = ssl.getCrypto().get_cipher().get_blockSize();
pad = *(input.get_buffer() + input.get_current() + msgSz -ivExtra - 1); pad = *(input.get_buffer() + input.get_current() + msgSz -ivExtra - 1);
padByte = 1; padSz = 1;
} }
int digestSz = ssl.getCrypto().get_digest().get_digestSize(); int digestSz = ssl.getCrypto().get_digest().get_digestSize();
int dataSz = msgSz - ivExtra - digestSz - pad - padByte; int dataSz = msgSz - ivExtra - digestSz - pad - padSz;
opaque verify[SHA_LEN]; opaque verify[SHA_LEN];
const byte* rawData = input.get_buffer() + input.get_current(); const byte* rawData = input.get_buffer() + input.get_current();
@ -1020,14 +1018,10 @@ void Data::Process(input_buffer& input, SSL& ssl)
hmac(ssl, verify, rawData, dataSz, application_data, true); hmac(ssl, verify, rawData, dataSz, application_data, true);
} }
// read mac and fill // read mac and skip fill
opaque mac[SHA_LEN]; opaque mac[SHA_LEN];
opaque fill;
input.read(mac, digestSz); input.read(mac, digestSz);
for (int i = 0; i < pad; i++) input.set_current(input.get_current() + pad + padSz);
fill = input[AUTO];
if (padByte)
fill = input[AUTO];
// verify // verify
if (dataSz) { if (dataSz) {
@ -2072,11 +2066,9 @@ void Finished::Process(input_buffer& input, SSL& ssl)
if (ssl.isTLSv1_1()) if (ssl.isTLSv1_1())
ivExtra = ssl.getCrypto().get_cipher().get_blockSize(); ivExtra = ssl.getCrypto().get_cipher().get_blockSize();
opaque fill;
int padSz = ssl.getSecurity().get_parms().encrypt_size_ - ivExtra - int padSz = ssl.getSecurity().get_parms().encrypt_size_ - ivExtra -
HANDSHAKE_HEADER - finishedSz - digestSz; HANDSHAKE_HEADER - finishedSz - digestSz;
for (int i = 0; i < padSz; i++) input.set_current(input.get_current() + padSz);
fill = input[AUTO];
// verify mac // verify mac
if (memcmp(mac, verifyMAC, digestSz)) { if (memcmp(mac, verifyMAC, digestSz)) {

View File

@ -51,7 +51,7 @@ public:
enum { BLOCK_SIZE = BLOWFISH_BLOCK_SIZE, ROUNDS = 16 }; enum { BLOCK_SIZE = BLOWFISH_BLOCK_SIZE, ROUNDS = 16 };
Blowfish(CipherDir DIR, Mode MODE) Blowfish(CipherDir DIR, Mode MODE)
: Mode_BASE(BLOCK_SIZE, DIR, MODE) {} : Mode_BASE(BLOCK_SIZE, DIR, MODE), sbox_(pbox_ + ROUNDS + 2) {}
#ifdef DO_BLOWFISH_ASM #ifdef DO_BLOWFISH_ASM
void Process(byte*, const byte*, word32); void Process(byte*, const byte*, word32);
@ -62,8 +62,8 @@ private:
static const word32 p_init_[ROUNDS + 2]; static const word32 p_init_[ROUNDS + 2];
static const word32 s_init_[4 * 256]; static const word32 s_init_[4 * 256];
word32 pbox_[ROUNDS + 2]; word32 pbox_[ROUNDS + 2 + 4 * 256];
word32 sbox_[4 * 256]; word32* sbox_;
void crypt_block(const word32 in[2], word32 out[2]) const; void crypt_block(const word32 in[2], word32 out[2]) const;
void AsmProcess(const byte* in, byte* out) const; void AsmProcess(const byte* in, byte* out) const;

View File

@ -35,10 +35,7 @@
// Handler for pure virtual functions // Handler for pure virtual functions
namespace __Crun { namespace __Crun {
static void pure_error(void) void pure_error(void);
{
assert("Pure virtual method called." == "Aborted");
}
} // namespace __Crun } // namespace __Crun
#endif // __sun #endif // __sun
@ -54,16 +51,7 @@ extern "C" {
#else #else
#include "kernelc.hpp" #include "kernelc.hpp"
#endif #endif
int __cxa_pure_virtual () __attribute__ ((weak));
/* Disallow inline __cxa_pure_virtual() */
static int __cxa_pure_virtual() __attribute__((noinline, used));
static int __cxa_pure_virtual()
{
// oops, pure virtual called!
assert("Pure virtual method called." == "Aborted");
return 0;
}
} // extern "C" } // extern "C"
#endif // __GNUC__ > 2 #endif // __GNUC__ > 2

View File

@ -185,10 +185,10 @@ Integer AbstractGroup::CascadeScalarMultiply(const Element &x,
struct WindowSlider struct WindowSlider
{ {
WindowSlider(const Integer &exp, bool fastNegate, WindowSlider(const Integer &expIn, bool fastNegateIn,
unsigned int windowSizeIn=0) unsigned int windowSizeIn=0)
: exp(exp), windowModulus(Integer::One()), windowSize(windowSizeIn), : exp(expIn), windowModulus(Integer::One()), windowSize(windowSizeIn),
windowBegin(0), fastNegate(fastNegate), firstTime(true), windowBegin(0), fastNegate(fastNegateIn), firstTime(true),
finished(false) finished(false)
{ {
if (windowSize == 0) if (windowSize == 0)

View File

@ -185,7 +185,7 @@ void Base64Decoder::Decode()
{ {
word32 bytes = coded_.size(); word32 bytes = coded_.size();
word32 plainSz = bytes - ((bytes + (pemLineSz - 1)) / pemLineSz); word32 plainSz = bytes - ((bytes + (pemLineSz - 1)) / pemLineSz);
plainSz = (plainSz * 3 + 3) / 4; plainSz = ((plainSz * 3) / 4) + 3;
decoded_.New(plainSz); decoded_.New(plainSz);
word32 i = 0; word32 i = 0;

View File

@ -283,21 +283,23 @@ DWord() {}
word GetHighHalfAsBorrow() const {return 0-halfs_.high;} word GetHighHalfAsBorrow() const {return 0-halfs_.high;}
private: private:
struct dword_struct
{
#ifdef LITTLE_ENDIAN_ORDER
word low;
word high;
#else
word high;
word low;
#endif
};
union union
{ {
#ifdef TAOCRYPT_NATIVE_DWORD_AVAILABLE #ifdef TAOCRYPT_NATIVE_DWORD_AVAILABLE
dword whole_; dword whole_;
#endif #endif
struct struct dword_struct halfs_;
{
#ifdef LITTLE_ENDIAN_ORDER
word low;
word high;
#else
word high;
word low;
#endif
} halfs_;
}; };
}; };
@ -1214,20 +1216,24 @@ public:
#define AS1(x) #x ";" #define AS1(x) #x ";"
#define AS2(x, y) #x ", " #y ";" #define AS2(x, y) #x ", " #y ";"
#define AddPrologue \ #define AddPrologue \
word res; \
__asm__ __volatile__ \ __asm__ __volatile__ \
( \ ( \
"push %%ebx;" /* save this manually, in case of -fPIC */ \ "push %%ebx;" /* save this manually, in case of -fPIC */ \
"mov %2, %%ebx;" \ "mov %3, %%ebx;" \
".intel_syntax noprefix;" \ ".intel_syntax noprefix;" \
"push ebp;" "push ebp;"
#define AddEpilogue \ #define AddEpilogue \
"pop ebp;" \ "pop ebp;" \
".att_syntax prefix;" \ ".att_syntax prefix;" \
"pop %%ebx;" \ "pop %%ebx;" \
: \ "mov %%eax, %0;" \
: "=g" (res) \
: "c" (C), "d" (A), "m" (B), "S" (N) \ : "c" (C), "d" (A), "m" (B), "S" (N) \
: "%edi", "memory", "cc" \ : "%edi", "memory", "cc" \
); ); \
return res;
#define MulPrologue \ #define MulPrologue \
__asm__ __volatile__ \ __asm__ __volatile__ \
( \ ( \

View File

@ -84,12 +84,23 @@ namespace STL = STL_NAMESPACE;
} }
#if defined(__ICC) || defined(__INTEL_COMPILER) #ifdef __sun
// Handler for pure virtual functions
namespace __Crun {
void pure_error() {
assert(!"Aborted: pure virtual method called.");
}
}
#endif
#if defined(__ICC) || defined(__INTEL_COMPILER) || (__GNUC__ > 2)
extern "C" { extern "C" {
int __cxa_pure_virtual() { int __cxa_pure_virtual() {
assert("Pure virtual method called." == "Aborted"); assert(!"Aborted: pure virtual method called.");
return 0; return 0;
} }
@ -176,7 +187,6 @@ word Crop(word value, unsigned int size)
#endif #endif
#endif #endif
bool HaveCpuId() bool HaveCpuId()
{ {
#ifdef _MSC_VER #ifdef _MSC_VER

View File

@ -160,6 +160,11 @@ inline void err_sys(const char* msg)
} }
extern "C" {
static int PasswordCallBack(char*, int, int, void*);
}
static int PasswordCallBack(char* passwd, int sz, int rw, void* userdata) static int PasswordCallBack(char* passwd, int sz, int rw, void* userdata)
{ {
strncpy(passwd, "12345678", sz); strncpy(passwd, "12345678", sz);

View File

@ -43,8 +43,9 @@ noinst_HEADERS = config-win.h config-netware.h lf.h my_bit.h \
my_vle.h my_user.h my_atomic.h atomic/nolock.h \ my_vle.h my_user.h my_atomic.h atomic/nolock.h \
atomic/rwlock.h atomic/x86-gcc.h atomic/generic-msvc.h \ atomic/rwlock.h atomic/x86-gcc.h atomic/generic-msvc.h \
atomic/gcc_builtins.h my_libwrap.h my_stacktrace.h \ atomic/gcc_builtins.h my_libwrap.h my_stacktrace.h \
wqueue.h waiting_threads.h wqueue.h waiting_threads.h my_compiler.h
EXTRA_DIST = mysql.h.pp mysql/plugin_auth.h.pp mysql/client_plugin.h.pp
EXTRA_DIST = mysql.h.pp mysql/plugin_auth.h.pp mysql/client_plugin.h.pp
# Remove built files and the symlinked directories # Remove built files and the symlinked directories
CLEANFILES = $(BUILT_SOURCES) readline openssl CLEANFILES = $(BUILT_SOURCES) readline openssl
@ -71,6 +72,3 @@ my_config.h: config.h
# generated by configure from the .h.in files # generated by configure from the .h.in files
dist-hook: dist-hook:
$(RM) -f $(distdir)/mysql_version.h $(distdir)/my_config.h $(RM) -f $(distdir)/mysql_version.h $(distdir)/my_config.h
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -33,10 +33,6 @@
/* need by my_vsnprintf */ /* need by my_vsnprintf */
#include <stdarg.h> #include <stdarg.h>
#ifdef _AIX
#undef HAVE_BCMP
#endif
/* This is needed for the definitions of bzero... on solaris */ /* This is needed for the definitions of bzero... on solaris */
#if defined(HAVE_STRINGS_H) #if defined(HAVE_STRINGS_H)
#include <strings.h> #include <strings.h>
@ -114,7 +110,7 @@ extern void bfill(uchar *dst,size_t len,pchar fill);
#endif #endif
#if !defined(bzero) && !defined(HAVE_BZERO) #if !defined(bzero) && !defined(HAVE_BZERO)
extern void bzero(uchar * dst,size_t len); extern void bzero(void * dst,size_t len);
#endif #endif
#if !defined(bcmp) && !defined(HAVE_BCMP) #if !defined(bcmp) && !defined(HAVE_BCMP)

View File

@ -161,22 +161,6 @@ static inline my_bool bitmap_cmp(const MY_BITMAP *map1, const MY_BITMAP *map2)
#define bitmap_set_all(MAP) \ #define bitmap_set_all(MAP) \
(memset((MAP)->bitmap, 0xFF, 4*no_words_in_map((MAP)))) (memset((MAP)->bitmap, 0xFF, 4*no_words_in_map((MAP))))
/**
check, set and clear a bit of interest of an integer.
If the bit is out of range @retval -1. Otherwise
bit_is_set @return 0 or 1 reflecting the bit is set or not;
bit_do_set @return 1 (bit is set 1)
bit_do_clear @return 0 (bit is cleared to 0)
*/
#define bit_is_set(I,B) (sizeof(I) * CHAR_BIT > (B) ? \
(((I) & (ULL(1) << (B))) == 0 ? 0 : 1) : -1)
#define bit_do_set(I,B) (sizeof(I) * CHAR_BIT > (B) ? \
((I) |= (ULL(1) << (B)), 1) : -1)
#define bit_do_clear(I,B) (sizeof(I) * CHAR_BIT > (B) ? \
((I) &= ~(ULL(1) << (B)), 0) : -1)
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

129
include/my_compiler.h Normal file
View File

@ -0,0 +1,129 @@
#ifndef MY_COMPILER_INCLUDED
#define MY_COMPILER_INCLUDED
/* Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
/**
Header for compiler-dependent features.
Intended to contain a set of reusable wrappers for preprocessor
macros, attributes, pragmas, and any other features that are
specific to a target compiler.
*/
#include <my_global.h> /* stddef.h offsetof */
/**
Compiler-dependent internal convenience macros.
*/
/* GNU C/C++ */
#if defined __GNUC__
/* Any after 2.95... */
# define MY_ALIGN_EXT
/* Microsoft Visual C++ */
#elif defined _MSC_VER
# define MY_ALIGNOF(type) __alignof(type)
# define MY_ALIGNED(n) __declspec(align(n))
/* Oracle Solaris Studio */
#elif defined(__SUNPRO_C) || defined(__SUNPRO_CC)
# if __SUNPRO_C >= 0x590
# define MY_ALIGN_EXT
# endif
/* IBM XL C/C++ */
#elif defined __xlC__
# if __xlC__ >= 0x0600
# define MY_ALIGN_EXT
# endif
/* HP aCC */
#elif defined(__HP_aCC) || defined(__HP_cc)
# if (__HP_aCC >= 60000) || (__HP_cc >= 60000)
# define MY_ALIGN_EXT
# endif
#endif
#ifdef MY_ALIGN_EXT
/** Specifies the minimum alignment of a type. */
# define MY_ALIGNOF(type) __alignof__(type)
/** Determine the alignment requirement of a type. */
# define MY_ALIGNED(n) __attribute__((__aligned__((n))))
#endif
/**
Generic compiler-dependent features.
*/
#ifndef MY_ALIGNOF
# ifdef __cplusplus
template<typename type> struct my_alignof_helper { char m1; type m2; };
/* Invalid for non-POD types, but most compilers give the right answer. */
# define MY_ALIGNOF(type) offsetof(my_alignof_helper<type>, m2)
# else
# define MY_ALIGNOF(type) offsetof(struct { char m1; type m2; }, m2)
# endif
#endif
/**
C++ Type Traits
*/
#ifdef __cplusplus
/**
Opaque storage with a particular alignment.
*/
# if defined(MY_ALIGNED)
/* Partial specialization used due to MSVC++. */
template<size_t alignment> struct my_alignment_imp;
template<> struct MY_ALIGNED(1) my_alignment_imp<1> {};
template<> struct MY_ALIGNED(2) my_alignment_imp<2> {};
template<> struct MY_ALIGNED(4) my_alignment_imp<4> {};
template<> struct MY_ALIGNED(8) my_alignment_imp<8> {};
template<> struct MY_ALIGNED(16) my_alignment_imp<16> {};
/* ... expand as necessary. */
# else
template<size_t alignment>
struct my_alignment_imp { double m1; };
# endif
/**
A POD type with a given size and alignment.
@remark If the compiler does not support a alignment attribute
(MY_ALIGN macro), the default alignment of a double is
used instead.
@tparam size The minimum size.
@tparam alignment The desired alignment: 1, 2, 4, 8 or 16.
*/
template <size_t size, size_t alignment>
struct my_aligned_storage
{
union
{
char data[size];
my_alignment_imp<alignment> align;
};
};
#endif /* __cplusplus */
#include <my_attribute.h>
#endif /* MY_COMPILER_INCLUDED */

View File

@ -567,20 +567,19 @@ int __void__;
#endif #endif
#endif /* DONT_DEFINE_VOID */ #endif /* DONT_DEFINE_VOID */
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) /*
#define LINT_INIT(var) var=0 /* No uninitialize-warning */ Deprecated workaround for false-positive uninitialized variables
warnings. Those should be silenced using tool-specific heuristics.
Enabled by default for g++ due to the bug referenced below.
*/
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || \
(defined(__GNUC__) && defined(__cplusplus))
#define LINT_INIT(var) var= 0
#else #else
#define LINT_INIT(var) #define LINT_INIT(var)
#endif #endif
#include <my_valgrind.h>
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || defined(HAVE_valgrind)
#define VALGRIND_OR_LINT_INIT(var) var=0
#else
#define VALGRIND_OR_LINT_INIT(var)
#endif
#ifdef _WIN32 #ifdef _WIN32
#define SO_EXT ".dll" #define SO_EXT ".dll"
#elif defined(__APPLE__) #elif defined(__APPLE__)
@ -589,19 +588,22 @@ int __void__;
#define SO_EXT ".so" #define SO_EXT ".so"
#endif #endif
/* /*
Suppress uninitialized variable warning without generating code. Suppress uninitialized variable warning without generating code.
The _cplusplus is a temporary workaround for C++ code pending a fix The _cplusplus is a temporary workaround for C++ code pending a fix
for a g++ bug (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34772). for a g++ bug (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34772).
*/ */
#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || defined(__cplusplus) || \ #if defined(_lint) || defined(FORCE_INIT_OF_VARS) || \
!defined(__GNUC__) defined(__cplusplus) || !defined(__GNUC__)
#define UNINIT_VAR(x) x= 0 #define UNINIT_VAR(x) x= 0
#else #else
/* GCC specific self-initialization which inhibits the warning. */
#define UNINIT_VAR(x) x= x #define UNINIT_VAR(x) x= x
#endif #endif
#include <my_valgrind.h>
/* Define some useful general macros */ /* Define some useful general macros */
#if !defined(max) #if !defined(max)
#define max(a, b) ((a) > (b) ? (a) : (b)) #define max(a, b) ((a) > (b) ? (a) : (b))
@ -617,12 +619,12 @@ typedef unsigned short ushort;
#define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1) #define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1)
#define sgn(a) (((a) < 0) ? -1 : ((a) > 0) ? 1 : 0) #define sgn(a) (((a) < 0) ? -1 : ((a) > 0) ? 1 : 0)
#define swap_variables(t, a, b) { t swap_dummy; swap_dummy= a; a= b; b= swap_dummy; } #define swap_variables(t, a, b) { t dummy; dummy= a; a= b; b= dummy; }
#define test(a) ((a) ? 1 : 0) #define test(a) ((a) ? 1 : 0)
#define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0) #define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0)
#define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0) #define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0)
#define test_all_bits(a,b) (((a) & (b)) == (b))
#define set_bits(type, bit_count) (sizeof(type)*8 <= (bit_count) ? ~(type) 0 : ((((type) 1) << (bit_count)) - (type) 1)) #define set_bits(type, bit_count) (sizeof(type)*8 <= (bit_count) ? ~(type) 0 : ((((type) 1) << (bit_count)) - (type) 1))
#define test_all_bits(a,b) (((a) & (b)) == (b))
#define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0]))) #define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0])))
/* Define some general constants */ /* Define some general constants */
@ -643,7 +645,7 @@ typedef unsigned short ushort;
#define my_const_cast(A) (A) #define my_const_cast(A) (A)
#endif #endif
#include <my_attribute.h> #include <my_compiler.h>
/* /*
Wen using the embedded library, users might run into link problems, Wen using the embedded library, users might run into link problems,
@ -679,7 +681,7 @@ C_MODE_END
# endif # endif
#endif #endif
typedef char my_bool; /* Small bool */ typedef char my_bool; /* Small bool; Needed by my_dbug.h */
#include <my_dbug.h> #include <my_dbug.h>
#define MIN_ARRAY_SIZE 0 /* Zero or One. Gcc allows zero*/ #define MIN_ARRAY_SIZE 0 /* Zero or One. Gcc allows zero*/
@ -958,13 +960,11 @@ typedef long long my_ptrdiff_t;
#define ALIGN_MAX_UNIT (sizeof(double)) #define ALIGN_MAX_UNIT (sizeof(double))
/* Size to make adressable obj. */ /* Size to make adressable obj. */
#define ALIGN_PTR(A, t) ((t*) MY_ALIGN((A), sizeof(double))) #define ALIGN_PTR(A, t) ((t*) MY_ALIGN((A), sizeof(double)))
/* Offset of field f in structure t */
#define OFFSET(t, f) ((size_t)(char *)&((t *)0)->f) #define OFFSET(t, f) ((size_t)(char *)&((t *)0)->f)
#define ADD_TO_PTR(ptr,size,type) (type) ((uchar*) (ptr)+size) #define ADD_TO_PTR(ptr,size,type) (type) ((uchar*) (ptr)+size)
#define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((uchar*) (A) - (uchar*) (B)) #define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((uchar*) (A) - (uchar*) (B))
#define MY_DIV_UP(A, B) (((A) + (B) - 1) / (B))
#define MY_ALIGNED_BYTE_ARRAY(N, S, T) T N[MY_DIV_UP(S, sizeof(T))]
/* /*
Custom version of standard offsetof() macro which can be used to get Custom version of standard offsetof() macro which can be used to get
offsets of members in class for non-POD types (according to the current offsets of members in class for non-POD types (according to the current

View File

@ -276,13 +276,14 @@ int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
we want to make sure that no such flags are set. we want to make sure that no such flags are set.
*/ */
#if defined(HAVE_SIGACTION) && !defined(my_sigset) #if defined(HAVE_SIGACTION) && !defined(my_sigset)
#define my_sigset(A,B) do { struct sigaction l_s; sigset_t l_set; int l_rc; \ #define my_sigset(A,B) do { struct sigaction l_s; sigset_t l_set; \
IF_DBUG(int l_rc); \
DBUG_ASSERT((A) != 0); \ DBUG_ASSERT((A) != 0); \
sigemptyset(&l_set); \ sigemptyset(&l_set); \
l_s.sa_handler = (B); \ l_s.sa_handler = (B); \
l_s.sa_mask = l_set; \ l_s.sa_mask = l_set; \
l_s.sa_flags = 0; \ l_s.sa_flags = 0; \
l_rc= sigaction((A), &l_s, (struct sigaction *) NULL);\ IF_DBUG(l_rc=) sigaction((A), &l_s, NULL); \
DBUG_ASSERT(l_rc == 0); \ DBUG_ASSERT(l_rc == 0); \
} while (0) } while (0)
#elif defined(HAVE_SIGSET) && !defined(my_sigset) #elif defined(HAVE_SIGSET) && !defined(my_sigset)
@ -757,7 +758,7 @@ extern uint thd_lib_detected;
The implementation is guaranteed to be thread safe, on all platforms. The implementation is guaranteed to be thread safe, on all platforms.
Note that the calling code should *not* assume the counter is protected Note that the calling code should *not* assume the counter is protected
by the mutex given, as the implementation of these helpers may change by the mutex given, as the implementation of these helpers may change
to use my_atomic operations instead. to use atomic operations instead.
*/ */
/* /*

View File

@ -44,7 +44,9 @@ extern "C" {
#endif #endif
#ifndef _global_h /* If not standard header */ #ifndef _global_h /* If not standard header */
#ifndef MYSQL_ABI_CHECK
#include <sys/types.h> #include <sys/types.h>
#endif
#ifdef __LCC__ #ifdef __LCC__
#include <winsock2.h> /* For windows */ #include <winsock2.h> /* For windows */
#endif #endif

View File

@ -1,4 +1,3 @@
#include <sys/types.h>
typedef char my_bool; typedef char my_bool;
typedef int my_socket; typedef int my_socket;
#include "mysql_version.h" #include "mysql_version.h"

View File

@ -27,6 +27,10 @@
#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN) #define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN)
#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN) #define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN)
#define MYSQL50_TABLE_NAME_PREFIX "#mysql50#"
#define MYSQL50_TABLE_NAME_PREFIX_LENGTH (sizeof(MYSQL50_TABLE_NAME_PREFIX)-1)
#define SAFE_NAME_LEN (NAME_LEN + MYSQL50_TABLE_NAME_PREFIX_LENGTH)
#define SERVER_VERSION_LENGTH 60 #define SERVER_VERSION_LENGTH 60
#define SQLSTATE_LENGTH 5 #define SQLSTATE_LENGTH 5
#define LIST_PROCESS_HOST_LEN 64 #define LIST_PROCESS_HOST_LEN 64

View File

@ -62,10 +62,12 @@ extern const char * NEAR globerrs[]; /* my_error_messages is here */
#define EE_UNKNOWN_COLLATION 28 #define EE_UNKNOWN_COLLATION 28
#define EE_FILENOTFOUND 29 #define EE_FILENOTFOUND 29
#define EE_FILE_NOT_CLOSED 30 #define EE_FILE_NOT_CLOSED 30
#define EE_CANT_CHMOD 31 #define EE_CHANGE_OWNERSHIP 31
#define EE_CANT_SEEK 32 #define EE_CHANGE_PERMISSIONS 32
#define EE_CANT_COPY_OWNERSHIP 33 #define EE_CANT_CHMOD 33
#define EE_ERROR_LAST 33 /* Copy last error nr */ #define EE_CANT_SEEK 34
#define EE_CANT_COPY_OWNERSHIP 35
#define EE_ERROR_LAST 35 /* Copy last error nr */
/* Add error numbers before EE_ERROR_LAST and change it accordingly. */ /* Add error numbers before EE_ERROR_LAST and change it accordingly. */
/* exit codes for all MySQL programs */ /* exit codes for all MySQL programs */

View File

@ -111,6 +111,3 @@ do-lib-dist:
echo ' $$(AR) r $$@ $$?' >>$$dir/Makefile; \ echo ' $$(AR) r $$@ $$?' >>$$dir/Makefile; \
gtar cvzf $$dir.tar.gz $$dir; \ gtar cvzf $$dir.tar.gz $$dir; \
cd $$dir; gmake cd $$dir; gmake
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -4373,6 +4373,7 @@ static my_bool setup_one_fetch_function(MYSQL_BIND *param, MYSQL_FIELD *field)
case MYSQL_TYPE_TIME: case MYSQL_TYPE_TIME:
field->max_length= 15; /* 19:23:48.123456 */ field->max_length= 15; /* 19:23:48.123456 */
param->skip_result= skip_result_with_length; param->skip_result= skip_result_with_length;
break;
case MYSQL_TYPE_DATE: case MYSQL_TYPE_DATE:
field->max_length= 10; /* 2003-11-11 */ field->max_length= 10; /* 2003-11-11 */
param->skip_result= skip_result_with_length; param->skip_result= skip_result_with_length;

View File

@ -42,6 +42,3 @@ link_sources:
done; \ done; \
done done
echo timestamp > link_sources echo timestamp > link_sources
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -232,6 +232,3 @@ link_sources:
clean-local: clean-local:
rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlstoragesources) $(storagesources) | sed "s;\.lo;.c;g"`; \ rm -f `echo $(sqlsources) $(libmysqlsources) $(sqlstoragesources) $(storagesources) | sed "s;\.lo;.c;g"`; \
rm -f client_settings.h rm -f client_settings.h
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -42,7 +42,8 @@ LDADD = @CLIENT_EXTRA_LDFLAGS@ ../libmysqld.a @LIBDL@ $(CXXLDFLAGS) \
mysqltest_embedded_LINK = $(CXXLINK) mysqltest_embedded_LINK = $(CXXLINK)
nodist_mysqltest_embedded_SOURCES = mysqltest.cc nodist_mysqltest_embedded_SOURCES = mysqltest.cc
mysqltest_embedded_LDADD = $(LDADD) $(top_builddir)/regex/libregex.a mysqltest_embedded_LDADD = $(LDADD) $(top_builddir)/regex/libregex.a \
@MYSQLD_EXTRA_LDFLAGS@
nodist_mysql_SOURCES = mysql.cc readline.cc completion_hash.cc \ nodist_mysql_SOURCES = mysql.cc readline.cc completion_hash.cc \
my_readline.h sql_string.h completion_hash.h my_readline.h sql_string.h completion_hash.h

View File

@ -24,6 +24,3 @@ EXTRA_DIST = $(man1_MANS) $(man8_MANS)
# "make_win_*" are not needed in Unix binary packages, # "make_win_*" are not needed in Unix binary packages,
install-data-hook: install-data-hook:
rm -f $(DESTDIR)$(mandir)/man1/make_win_* rm -f $(DESTDIR)$(mandir)/man1/make_win_*
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -84,6 +84,10 @@ TEST_DIRS = t r include std_data std_data/parts collections \
suite/binlog suite/binlog/t suite/binlog/r suite/binlog/std_data \ suite/binlog suite/binlog/t suite/binlog/r suite/binlog/std_data \
suite/bugs suite/bugs/data suite/bugs/t suite/bugs/r \ suite/bugs suite/bugs/data suite/bugs/t suite/bugs/r \
suite/federated \ suite/federated \
suite/pbxt/t suite/pbxt/r suite/pbxt \
suite/vcol suite/vcol/t suite/vcol/r suite/vcol/inc \
suite/oqgraph suite/oqgraph/t suite/oqgraph/r suite/oqgraph/include \
suite/percona \
suite/funcs_1 suite/funcs_1/bitdata \ suite/funcs_1 suite/funcs_1/bitdata \
suite/funcs_1/include suite/funcs_1/lib suite/funcs_1/r \ suite/funcs_1/include suite/funcs_1/lib suite/funcs_1/r \
suite/funcs_1/t suite/funcs_1/views suite/funcs_1/cursors \ suite/funcs_1/t suite/funcs_1/views suite/funcs_1/cursors \
@ -102,12 +106,9 @@ TEST_DIRS = t r include std_data std_data/parts collections \
suite/ndb suite/ndb/t suite/ndb/r \ suite/ndb suite/ndb/t suite/ndb/r \
suite/rpl_ndb suite/rpl_ndb/t suite/rpl_ndb/r \ suite/rpl_ndb suite/rpl_ndb/t suite/rpl_ndb/r \
suite/parts suite/parts/t suite/parts/r suite/parts/inc \ suite/parts suite/parts/t suite/parts/r suite/parts/inc \
suite/pbxt/t suite/pbxt/r suite/pbxt \
suite/innodb suite/innodb/t suite/innodb/r suite/innodb/include \ suite/innodb suite/innodb/t suite/innodb/r suite/innodb/include \
suite/vcol suite/vcol/t suite/vcol/r suite/vcol/inc \ suite/innodb_plugin suite/innodb_plugin/t suite/innodb_plugin/r \
suite/oqgraph suite/oqgraph/t suite/oqgraph/r suite/oqgraph/include \ suite/innodb_plugin/include \
suite/innodb_plugin suite/innodb_plugin/t suite/innodb_plugin/r suite/innodb_plugin/include \
suite/percona \
suite/engines suite/engines/funcs suite/engines/iuds suite/engines/rr_trx \ suite/engines suite/engines/funcs suite/engines/iuds suite/engines/rr_trx \
suite/engines/funcs/r suite/engines/funcs/t suite/engines/iuds/r \ suite/engines/funcs/r suite/engines/funcs/t suite/engines/iuds/r \
suite/engines/iuds/t suite/engines/rr_trx/include suite/engines/rr_trx/r \ suite/engines/iuds/t suite/engines/rr_trx/include suite/engines/rr_trx/r \
@ -148,6 +149,3 @@ mtr:
mysql-test-run: mysql-test-run:
$(RM) -f mysql-test-run $(RM) -f mysql-test-run
$(LN_S) mysql-test-run.pl mysql-test-run $(LN_S) mysql-test-run.pl mysql-test-run
# Don't update the files from bitkeeper
%::SCCS/s.%

View File

@ -20,11 +20,18 @@ subdirectories under the suitedir or directly in the suitedir
(that is suitedir/t/*.test or suitedir/*.test, same for *.result)) (that is suitedir/t/*.test or suitedir/*.test, same for *.result))
========================== ==========================
A suite can contain a suite.opt file - at the same location where .test A suite can contain a suite.opt file - at the same location where .test files
files are. As usual, the .opt file can use $-substitutions for the are or in the suite directory. As usual, the .opt file can use $-substitutions
environment variables. for the environment variables.
Usually, using my.cnf template (see below) is preferrable. Usually, using my.cnf template (see below) is preferrable.
But command line options (.opt files and combinations file) get special
treatment - they can have special options that affect mtr behavior. cnf
files cannot. Special options are
--timezone, --plugin-load, --result-file, --config-file-template,
--default-time-zone, --force-restart
========================== ==========================
A suite can have suite.pm file in the suitedir. It must declare a A suite can have suite.pm file in the suitedir. It must declare a
package that inherits from My::Suite. package that inherits from My::Suite.
@ -108,8 +115,8 @@ Most probably a suite my.cnf will need to start from
!include include/default_my.cnf !include include/default_my.cnf
and then modify the configuration as necessary. and then modify the configuration as necessary.
==========================
==========================
A suite can have combinations file in the suitedir. It uses my.cnf syntax A suite can have combinations file in the suitedir. It uses my.cnf syntax
but it cannot use @-substitutions. Instead, it can use $-substitutions for but it cannot use @-substitutions. Instead, it can use $-substitutions for
the environment variables. Because the combination options will not be the environment variables. Because the combination options will not be

View File

@ -725,9 +725,9 @@ call p_verify_status_increment(4, 4, 4, 4);
alter table t3 add column (b int); alter table t3 add column (b int);
call p_verify_status_increment(2, 0, 2, 0); call p_verify_status_increment(2, 0, 2, 0);
alter table t3 rename t4; alter table t3 rename t4;
call p_verify_status_increment(2, 2, 2, 2); call p_verify_status_increment(1, 0, 1, 0);
rename table t4 to t3; rename table t4 to t3;
call p_verify_status_increment(2, 2, 2, 2); call p_verify_status_increment(1, 0, 1, 0);
truncate table t3; truncate table t3;
call p_verify_status_increment(4, 4, 4, 4); call p_verify_status_increment(4, 4, 4, 4);
create view v1 as select * from t2; create view v1 as select * from t2;

View File

@ -64,17 +64,13 @@ let $_diff_table=$diff_table_2;
let $_diff_i=2; let $_diff_i=2;
while ($_diff_i) { while ($_diff_i) {
# Parse out any leading "master:" or "slave:" from the table # Parse out any leading "master:" or "slave:" from the table specification
# specification and connect the appropriate server. # and connect the appropriate server.
let $_diff_conn_master=`SELECT SUBSTR('$_diff_table', 1, 7) = 'master:'`; let $_pos= `SELECT LOCATE(':', '$_diff_table')`;
if ($_diff_conn_master) { let $_diff_conn=`SELECT SUBSTR('$_diff_table', 1, $_pos-1)`;
let $_diff_table=`SELECT SUBSTR('$_diff_table', 8)`; if (`SELECT 'XX$_diff_conn' <> 'XX'`) {
connection master; let $_diff_table=`SELECT SUBSTR('$_diff_table', $_pos+1)`;
} connection $_diff_conn;
let $_diff_conn_slave=`SELECT SUBSTR('$_diff_table', 1, 6) = 'slave:'`;
if ($_diff_conn_slave) {
let $_diff_table=`SELECT SUBSTR('$_diff_table', 7)`;
connection slave;
} }
# Sanity-check the input. # Sanity-check the input.

View File

@ -1,4 +1,5 @@
--disable_query_log if (!`SELECT count(*) FROM information_schema.engines WHERE
--require r/true.require (support = 'YES' OR support = 'DEFAULT') AND
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'archive'; engine = 'archive'`){
--enable_query_log skip Need archive engine;
}

View File

@ -0,0 +1,2 @@
--loose-archive
--plugin-load=$HA_ARCHIVE_SO

View File

@ -0,0 +1,2 @@
--loose-blackhole
--plugin-load=$HA_BLACKHOLE_SO

View File

@ -1 +1,2 @@
--loose-innodb --loose-innodb
--plugin-load=$HA_XTRADB_SO

View File

@ -1,4 +1,5 @@
disable_query_log; if (!`SELECT count(*) FROM information_schema.engines WHERE
--require r/true.require (support = 'YES' OR support = 'DEFAULT') AND
select (support = 'YES' or support = 'DEFAULT') as `TRUE` from information_schema.engines where engine = 'pbxt'; engine = 'pbxt'`){
enable_query_log; skip Need PBXT engine;
}

View File

@ -0,0 +1 @@
FLUSH QUERY_RESPONSE_TIME;

View File

@ -0,0 +1,7 @@
SELECT c.count,
(SELECT SUM(a.count) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as a WHERE a.count != 0) as query_count,
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as b WHERE b.count != 0) as not_zero_region_count,
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME) as region_count
FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME as c WHERE c.count > 0;
SELECT COUNT(*) as region_count FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;
SELECT time FROM INFORMATION_SCHEMA.QUERY_RESPONSE_TIME;

View File

@ -0,0 +1,19 @@
SELECT SLEEP(0.31);
SELECT SLEEP(0.32);
SELECT SLEEP(0.33);
SELECT SLEEP(0.34);
SELECT SLEEP(0.35);
SELECT SLEEP(0.36);
SELECT SLEEP(0.37);
SELECT SLEEP(0.38);
SELECT SLEEP(0.39);
SELECT SLEEP(0.40);
SELECT SLEEP(1.1);
SELECT SLEEP(1.2);
SELECT SLEEP(1.3);
SELECT SLEEP(1.5);
SELECT SLEEP(1.4);
SELECT SLEEP(0.5);
SELECT SLEEP(2.1);
SELECT SLEEP(2.3);
SELECT SLEEP(2.5);

View File

@ -0,0 +1,35 @@
# #############################################################################
# Check whether the given table is consistent between different master and
# slaves
#
# Usage:
# --let $diff_table= test.t1
# --let $diff_server_list= master, slave, slave2
# --source include/rpl_diff_tables.inc
# #############################################################################
if (`SELECT "XX$diff_table" = "XX"`)
{
--die diff_table is null.
}
--let $_servers= master, slave
if (`SELECT "XX$diff_server_list" <> "XX"`)
{
--let $_servers= $diff_server_list
}
--let $_master= `SELECT SUBSTRING_INDEX('$_servers', ',', 1)`
--let $_servers= `SELECT LTRIM(SUBSTRING('$_servers', LENGTH('$_master') + 2))`
connection $_master;
while (`SELECT "XX$_servers" <> "XX"`)
{
--let $_slave= `SELECT SUBSTRING_INDEX('$_servers', ',', 1)`
--let $_servers= `SELECT LTRIM(SUBSTRING('$_servers', LENGTH('$_slave') + 2))`
--sync_slave_with_master $_slave
--let $diff_table_1= $_master:$diff_table
--let $diff_table_2= $_slave:$diff_table
--source include/diff_tables.inc
connection $_slave;
}

View File

@ -606,7 +606,7 @@ sub new_config {
# add auto-options # add auto-options
$config->insert('OPT', 'port' => sub { fix_port($self, $config) }); $config->insert('OPT', 'port' => sub { fix_port($self, $config) });
$config->insert('OPT', 'vardir' => sub { shift->{ARGS}->{vardir} }); $config->insert('OPT', 'vardir' => sub { $self->{ARGS}->{vardir} });
{ {
# Run pre rules # Run pre rules

View File

@ -160,7 +160,7 @@ int main(int argc, char* const argv[] )
signal(SIGCHLD, handle_signal); signal(SIGCHLD, handle_signal);
signal(SIGABRT, handle_abort); signal(SIGABRT, handle_abort);
sprintf(safe_process_name, "safe_process[%d]", (int) own_pid); sprintf(safe_process_name, "safe_process[%ld]", (long) own_pid);
message("Started"); message("Started");

View File

@ -325,12 +325,8 @@ sub collect_one_suite
} }
# Read suite.opt file # Read suite.opt file
my $suite_opt_file= "$testdir/suite.opt"; my $suite_opts= [ opts_from_file("$testdir/suite.opt") ];
my $suite_opts= []; $suite_opts = [ opts_from_file("$suitedir/suite.opt") ] unless @$suite_opts;
if ( -f $suite_opt_file )
{
$suite_opts= opts_from_file($suite_opt_file);
}
if ( @$opt_cases ) if ( @$opt_cases )
{ {
@ -618,67 +614,81 @@ sub optimize_cases {
# Read options from the given opt file and append them as an array # Read options from the given opt file and append them as an array
# to $tinfo->{$opt_name} # to $tinfo->{$opt_name}
# #
sub process_opts_file { sub process_opts {
my ($tinfo, $opt_file, $opt_name)= @_; my ($tinfo, $opt_name)= @_;
if ( -f $opt_file ) my @opts= @{$tinfo->{$opt_name}};
$tinfo->{$opt_name} = [];
my @plugins;
my %seen;
foreach my $opt (@opts)
{ {
my $opts= opts_from_file($opt_file); my $value;
foreach my $opt ( @$opts ) # The opt file is used both to send special options to the mysqld
# as well as pass special test case specific options to this
# script
$value= mtr_match_prefix($opt, "--timezone=");
if ( defined $value )
{ {
my $value; $tinfo->{'timezone'}= $value;
next;
# The opt file is used both to send special options to the mysqld
# as well as pass special test case specific options to this
# script
$value= mtr_match_prefix($opt, "--timezone=");
if ( defined $value )
{
$tinfo->{'timezone'}= $value;
next;
}
$value= mtr_match_prefix($opt, "--result-file=");
if ( defined $value )
{
# Specifies the file mysqltest should compare
# output against
$tinfo->{'result_file'}= "r/$value.result";
next;
}
$value= mtr_match_prefix($opt, "--config-file-template=");
if ( defined $value)
{
# Specifies the configuration file to use for this test
$tinfo->{'template_path'}= dirname($tinfo->{path})."/$value";
next;
}
# If we set default time zone, remove the one we have
$value= mtr_match_prefix($opt, "--default-time-zone=");
if ( defined $value )
{
# Set timezone for this test case to something different
$tinfo->{'timezone'}= "GMT-8";
# Fallthrough, add the --default-time-zone option
}
# The --restart option forces a restart even if no special
# option is set. If the options are the same as next testcase
# there is no need to restart after the testcase
# has completed
if ( $opt eq "--force-restart" )
{
$tinfo->{'force_restart'}= 1;
next;
}
# Ok, this was a real option, add it
push(@{$tinfo->{$opt_name}}, $opt);
} }
$value= mtr_match_prefix($opt, "--plugin-load=");
if (defined $value)
{
push @plugins, $value unless $seen{$value};
$seen{$value}=1;
next;
}
$value= mtr_match_prefix($opt, "--result-file=");
if ( defined $value )
{
# Specifies the file mysqltest should compare
# output against
$tinfo->{'result_file'}= "r/$value.result";
next;
}
$value= mtr_match_prefix($opt, "--config-file-template=");
if ( defined $value)
{
# Specifies the configuration file to use for this test
$tinfo->{'template_path'}= dirname($tinfo->{path})."/$value";
next;
}
# If we set default time zone, remove the one we have
$value= mtr_match_prefix($opt, "--default-time-zone=");
if ( defined $value )
{
# Set timezone for this test case to something different
$tinfo->{'timezone'}= "GMT-8";
# Fallthrough, add the --default-time-zone option
}
# The --restart option forces a restart even if no special
# option is set. If the options are the same as next testcase
# there is no need to restart after the testcase
# has completed
if ( $opt eq "--force-restart" )
{
$tinfo->{'force_restart'}= 1;
next;
}
# Ok, this was a real option, add it
push(@{$tinfo->{$opt_name}}, $opt);
}
if (@plugins) {
my $sep = (IS_WINDOWS) ? ';' : ':';
push @{$tinfo->{$opt_name}}, "--plugin-load=" . join($sep, @plugins);
} }
} }
@ -1019,15 +1029,17 @@ sub collect_one_test_case {
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
for (@source_files) { for (@source_files) {
s/\.\w+$//; s/\.\w+$//;
process_opts_file($tinfo, "$_.opt", 'master_opt'); push @{$tinfo->{master_opt}}, opts_from_file("$_.opt");
process_opts_file($tinfo, "$_.opt", 'slave_opt'); push @{$tinfo->{slave_opt}}, opts_from_file("$_.opt");
process_opts_file($tinfo, "$_-master.opt", 'master_opt'); push @{$tinfo->{master_opt}}, opts_from_file("$_-master.opt");
process_opts_file($tinfo, "$_-slave.opt", 'slave_opt'); push @{$tinfo->{slave_opt}}, opts_from_file("$_-slave.opt");
} }
push(@{$tinfo->{'master_opt'}}, @::opt_extra_mysqld_opt); push(@{$tinfo->{'master_opt'}}, @::opt_extra_mysqld_opt);
push(@{$tinfo->{'slave_opt'}}, @::opt_extra_mysqld_opt); push(@{$tinfo->{'slave_opt'}}, @::opt_extra_mysqld_opt);
process_opts($tinfo, 'master_opt');
process_opts($tinfo, 'slave_opt');
return $tinfo; return $tinfo;
} }
@ -1114,6 +1126,8 @@ sub opts_from_file ($) {
my $file= shift; my $file= shift;
local $_; local $_;
return () unless -f $file;
open(FILE,"<",$file) or mtr_error("can't open file \"$file\": $!"); open(FILE,"<",$file) or mtr_error("can't open file \"$file\": $!");
my @args; my @args;
while ( <FILE> ) while ( <FILE> )
@ -1154,7 +1168,7 @@ sub opts_from_file ($) {
} }
} }
close FILE; close FILE;
return \@args; return @args;
} }
sub print_testcases { sub print_testcases {

View File

@ -2959,7 +2959,7 @@ sub run_benchmarks ($) {
if ( ! $benchmark ) if ( ! $benchmark )
{ {
mtr_add_arg($args, "--log"); mtr_add_arg($args, "--general-log");
mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", ""); mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", "");
# FIXME check result code?! # FIXME check result code?!
} }

View File

@ -3561,8 +3561,9 @@ sub timezone {
my ($tinfo)= @_; my ($tinfo)= @_;
local $_ = $tinfo->{timezone}; local $_ = $tinfo->{timezone};
return 'DEFAULT' unless defined $_; return 'DEFAULT' unless defined $_;
s/\$\{(\w+)\}/envsubst($1)/ge; no warnings 'uninitialized';
s/\$(\w+)/envsubst($1)/ge; s/\$\{(\w+)\}/$ENV{$1}/ge;
s/\$(\w+)/$ENV{$1}/ge;
$_; $_;
} }
@ -4224,6 +4225,7 @@ sub extract_warning_lines ($) {
qr/slave SQL thread aborted/, qr/slave SQL thread aborted/,
qr/unknown option '--loose[-_]/, qr/unknown option '--loose[-_]/,
qr/unknown variable 'loose[-_]/, qr/unknown variable 'loose[-_]/,
qr/Invalid .*old.* table or database name/,
qr/Now setting lower_case_table_names to [02]/, qr/Now setting lower_case_table_names to [02]/,
qr/Setting lower_case_table_names=2/, qr/Setting lower_case_table_names=2/,
qr/You have forced lower_case_table_names to 0/, qr/You have forced lower_case_table_names to 0/,
@ -5068,18 +5070,6 @@ sub started { return grep(defined $_, map($_->{proc}, @_)); }
sub stopped { return grep(!defined $_, map($_->{proc}, @_)); } sub stopped { return grep(!defined $_, map($_->{proc}, @_)); }
sub envsubst {
my $string= shift;
if ( ! defined $ENV{$string} )
{
mtr_error(".opt file references '$string' which is not set");
}
return $ENV{$string};
}
sub get_extra_opts { sub get_extra_opts {
my ($mysqld, $tinfo)= @_; my ($mysqld, $tinfo)= @_;
@ -5090,8 +5080,9 @@ sub get_extra_opts {
# Expand environment variables # Expand environment variables
foreach my $opt ( @$opts ) foreach my $opt ( @$opts )
{ {
$opt =~ s/\$\{(\w+)\}/envsubst($1)/ge; no warnings 'uninitialized';
$opt =~ s/\$(\w+)/envsubst($1)/ge; $opt =~ s/\$\{(\w+)\}/$ENV{$1}/ge;
$opt =~ s/\$(\w+)/$ENV{$1}/ge;
} }
return $opts; return $opts;
} }
@ -5843,7 +5834,7 @@ sub time_format($) {
my $num_tests; my $num_tests;
sub xterm_stat { sub xterm_stat {
if (-t STDOUT and $ENV{TERM} =~ /xterm/) { if (-t STDOUT and defined $ENV{TERM} and $ENV{TERM} =~ /xterm/) {
my ($left) = @_; my ($left) = @_;
# 2.5 -> best by test # 2.5 -> best by test

View File

@ -12725,8 +12725,7 @@ INSERT INTO t1 (col1, col2) VALUES (1, "value");
ERROR HY000: Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it! ERROR HY000: Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it!
REPAIR TABLE t1; REPAIR TABLE t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 repair Error Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it! test.t1 repair status OK
test.t1 repair error Corrupt
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#48757 - missing .ARZ file causes server crash # BUG#48757 - missing .ARZ file causes server crash
@ -12756,3 +12755,12 @@ a
1 1
2 2
DROP TABLE t1; DROP TABLE t1;
select * from t1;
ERROR HY000: Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it!
repair table t1;
Table Op Msg_type Msg_text
test.t1 repair status OK
select sum(length(a)),sum(b) from t1;
sum(length(a)) sum(b)
8670 187
drop table t1;

View File

@ -841,11 +841,11 @@ call p_verify_status_increment(2, 0, 2, 0);
SUCCESS SUCCESS
alter table t3 rename t4; alter table t3 rename t4;
call p_verify_status_increment(2, 2, 2, 2); call p_verify_status_increment(1, 0, 1, 0);
SUCCESS SUCCESS
rename table t4 to t3; rename table t4 to t3;
call p_verify_status_increment(2, 2, 2, 2); call p_verify_status_increment(1, 0, 1, 0);
SUCCESS SUCCESS
truncate table t3; truncate table t3;

View File

@ -115,9 +115,14 @@ create table `#mysql50#abc``def` ( id int );
create table `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (a int); create table `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (a int);
ERROR 42000: Incorrect table name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ERROR 42000: Incorrect table name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
create table `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (a int); create table `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (a int);
create table `#mysql50#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (a int); create table `#mysql50#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1234` (a int);
create table `#mysql50#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa` (a int); create table `#mysql50#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa12345` (a int);
ERROR 42000: Incorrect table name '#mysql50#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ERROR 42000: Incorrect table name '#mysql50#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa12345'
show tables;
Tables_in_mysqltestbug26703
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1234
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
#mysql50#abc`def
use test; use test;
drop database mysqltestbug26703; drop database mysqltestbug26703;
End of 5.1 tests End of 5.1 tests

View File

@ -995,6 +995,7 @@ SELECT 1 FROM
1 1
1 1
DROP TABLE t1; DROP TABLE t1;
End of 5.0 tests
# #
# Bug #52397: another crash with explain extended and group_concat # Bug #52397: another crash with explain extended and group_concat
# #
@ -1010,4 +1011,22 @@ id select_type table type possible_keys key key_len ref rows filtered Extra
Warnings: Warnings:
Note 1003 select 1 AS `1` from (select group_concat(`test`.`t1`.`a` order by `test`.`t1`.`a` ASC separator ',') AS `GROUP_CONCAT(t1.a ORDER BY t1.a ASC)` from `test`.`t1` `t2` join `test`.`t1` group by `test`.`t1`.`a`) `d` Note 1003 select 1 AS `1` from (select group_concat(`test`.`t1`.`a` order by `test`.`t1`.`a` ASC separator ',') AS `GROUP_CONCAT(t1.a ORDER BY t1.a ASC)` from `test`.`t1` `t2` join `test`.`t1` group by `test`.`t1`.`a`) `d`
DROP TABLE t1; DROP TABLE t1;
End of 5.0 tests #
# Bug #54476: crash when group_concat and 'with rollup' in prepared statements
#
CREATE TABLE t1 (a INT);
INSERT INTO t1 VALUES (1), (2);
PREPARE stmt FROM "SELECT GROUP_CONCAT(t1.a ORDER BY t1.a) FROM t1 JOIN t1 t2 GROUP BY t1.a WITH ROLLUP";
EXECUTE stmt;
GROUP_CONCAT(t1.a ORDER BY t1.a)
1,1
2,2
1,1,2,2
EXECUTE stmt;
GROUP_CONCAT(t1.a ORDER BY t1.a)
1,1
2,2
1,1,2,2
DEALLOCATE PREPARE stmt;
DROP TABLE t1;
End of 5.1 tests

View File

@ -243,4 +243,19 @@ End of 5.0 tests
select connection_id() > 0; select connection_id() > 0;
connection_id() > 0 connection_id() > 0
1 1
#
# Bug #54461: crash with longblob and union or update with subquery
#
CREATE TABLE t1 (a INT, b LONGBLOB);
INSERT INTO t1 VALUES (1, '2'), (2, '3'), (3, '2');
SELECT DISTINCT LEAST(a, (SELECT b FROM t1 LIMIT 1)) FROM t1 UNION SELECT 1;
LEAST(a, (SELECT b FROM t1 LIMIT 1))
1
2
SELECT DISTINCT GREATEST(a, (SELECT b FROM t1 LIMIT 1)) FROM t1 UNION SELECT 1;
GREATEST(a, (SELECT b FROM t1 LIMIT 1))
2
3
1
DROP TABLE t1;
End of tests End of tests

View File

@ -1425,7 +1425,7 @@ ERROR 42S02: Table 'db1.../db2/tb2' doesn't exist
SELECT * FROM `../db2`.tb2; SELECT * FROM `../db2`.tb2;
ERROR 42000: SELECT command denied to user 'testbug'@'localhost' for table 'tb2' ERROR 42000: SELECT command denied to user 'testbug'@'localhost' for table 'tb2'
SELECT * FROM `#mysql50#/../db2/tb2`; SELECT * FROM `#mysql50#/../db2/tb2`;
ERROR 42S02: Table 'db1.#mysql50#/../db2/tb2' doesn't exist ERROR 42000: Incorrect table name '#mysql50#/../db2/tb2'
DROP USER 'testbug'@localhost; DROP USER 'testbug'@localhost;
DROP TABLE db2.t1; DROP TABLE db2.t1;
DROP DATABASE db1; DROP DATABASE db1;

View File

@ -1827,4 +1827,39 @@ min(t2.key_col)+1
NULL NULL
drop table t1,t2; drop table t1,t2;
# #
# Bug#55188: GROUP BY, GROUP_CONCAT and TEXT - inconsistent results
#
CREATE TABLE t1 (a text, b varchar(10));
INSERT INTO t1 VALUES (repeat('1', 1300),'one'), (repeat('1', 1300),'two');
EXPLAIN
SELECT SUBSTRING(a,1,10), LENGTH(a), GROUP_CONCAT(b) FROM t1 GROUP BY a;
id 1
select_type SIMPLE
table t1
type ALL
possible_keys NULL
key NULL
key_len NULL
ref NULL
rows 2
Extra Using filesort
SELECT SUBSTRING(a,1,10), LENGTH(a), GROUP_CONCAT(b) FROM t1 GROUP BY a;
SUBSTRING(a,1,10) LENGTH(a) GROUP_CONCAT(b)
1111111111 1300 one,two
EXPLAIN
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
id 1
select_type SIMPLE
table t1
type ALL
possible_keys NULL
key NULL
key_len NULL
ref NULL
rows 2
Extra Using temporary; Using filesort
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
SUBSTRING(a,1,10) LENGTH(a)
1111111111 1300
DROP TABLE t1;
# End of 5.1 tests # End of 5.1 tests

View File

@ -470,10 +470,9 @@ WHERE table2.f1 = 2
GROUP BY table1.f1, table2.f2 GROUP BY table1.f1, table2.f2
HAVING (table2.f2 = 8 AND table1.f1 >= 6); HAVING (table2.f2 = 8 AND table1.f1 >= 6);
id select_type table type possible_keys key key_len ref rows filtered Extra id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE table2 const PRIMARY PRIMARY 4 const 1 100.00 Using filesort 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible HAVING noticed after reading const tables
1 SIMPLE table1 ALL NULL NULL NULL NULL 4 100.00 Using where
Warnings: Warnings:
Note 1003 select `test`.`table1`.`f1` AS `f1`,'7' AS `f2` from `test`.`t1` `table1` join `test`.`t1` `table2` where ((`test`.`table1`.`f3` = '9')) group by `test`.`table1`.`f1`,'7' having (('7' = 8) and (`test`.`table1`.`f1` >= 6)) Note 1003 select `test`.`table1`.`f1` AS `f1`,'7' AS `f2` from `test`.`t1` `table1` join `test`.`t1` `table2` where ((`test`.`table1`.`f3` = '9')) group by `test`.`table1`.`f1`,'7' having 0
EXPLAIN EXTENDED EXPLAIN EXTENDED
SELECT table1.f1, table2.f2 SELECT table1.f1, table2.f2
FROM t1 AS table1 FROM t1 AS table1
@ -482,10 +481,9 @@ WHERE table2.f1 = 2
GROUP BY table1.f1, table2.f2 GROUP BY table1.f1, table2.f2
HAVING (table2.f2 = 8); HAVING (table2.f2 = 8);
id select_type table type possible_keys key key_len ref rows filtered Extra id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE table2 const PRIMARY PRIMARY 4 const 1 100.00 Using filesort 1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible HAVING noticed after reading const tables
1 SIMPLE table1 ALL NULL NULL NULL NULL 4 100.00 Using where
Warnings: Warnings:
Note 1003 select `test`.`table1`.`f1` AS `f1`,'7' AS `f2` from `test`.`t1` `table1` join `test`.`t1` `table2` where ((`test`.`table1`.`f3` = '9')) group by `test`.`table1`.`f1`,'7' having ('7' = 8) Note 1003 select `test`.`table1`.`f1` AS `f1`,'7' AS `f2` from `test`.`t1` `table1` join `test`.`t1` `table2` where ((`test`.`table1`.`f3` = '9')) group by `test`.`table1`.`f1`,'7' having 0
DROP TABLE t1; DROP TABLE t1;
# #
# Bug#52336 Segfault / crash in 5.1 copy_fields (param=0x9872980) at sql_select.cc:15355 # Bug#52336 Segfault / crash in 5.1 copy_fields (param=0x9872980) at sql_select.cc:15355
@ -532,3 +530,19 @@ MAX(t2.f2)
NULL NULL
DROP TABLE t1,t2; DROP TABLE t1,t2;
End of 5.0 tests End of 5.0 tests
#
# Bug#54416 MAX from JOIN with HAVING returning NULL with 5.1 and Empty set
#
CREATE TABLE t1 (f1 INT(11), f2 VARCHAR(1), PRIMARY KEY (f1));
INSERT INTO t1 VALUES (1,'f');
CREATE TABLE t2 (f1 INT(11), f2 VARCHAR(1));
INSERT INTO t2 VALUES (2,'m');
INSERT INTO t2 VALUES (3,'m');
INSERT INTO t2 VALUES (11,NULL);
INSERT INTO t2 VALUES (12,'k');
SELECT MAX(t1.f1) field1
FROM t1 JOIN t2 ON t2.f2 LIKE 'x'
HAVING field1 < 7;
field1
DROP TABLE t1,t2;
End of 5.1 tests

View File

@ -68,6 +68,7 @@ INNODB_LOCKS
INNODB_LOCK_WAITS INNODB_LOCK_WAITS
INNODB_RSEG INNODB_RSEG
INNODB_SYS_INDEXES INNODB_SYS_INDEXES
INNODB_SYS_STATS
INNODB_SYS_TABLES INNODB_SYS_TABLES
INNODB_TABLE_STATS INNODB_TABLE_STATS
INNODB_TRX INNODB_TRX
@ -871,7 +872,6 @@ COLUMNS TABLE_NAME select
COLUMN_PRIVILEGES TABLE_NAME select COLUMN_PRIVILEGES TABLE_NAME select
FILES TABLE_NAME select FILES TABLE_NAME select
INDEX_STATISTICS TABLE_NAME select INDEX_STATISTICS TABLE_NAME select
INNODB_BUFFER_POOL_PAGES_INDEX table_name select
INNODB_INDEX_STATS table_name select INNODB_INDEX_STATS table_name select
INNODB_TABLE_STATS table_name select INNODB_TABLE_STATS table_name select
KEY_COLUMN_USAGE TABLE_NAME select KEY_COLUMN_USAGE TABLE_NAME select
@ -1664,4 +1664,21 @@ WHERE INFORMATION_SCHEMA.COLUMNS.TABLE_NAME = 'variables';
COLUMN_DEFAULT TABLE_NAME COLUMN_DEFAULT TABLE_NAME
NULL variables NULL variables
DROP TABLE variables; DROP TABLE variables;
#
# Bug #53814: NUMERIC_PRECISION for unsigned bigint field is 19,
# should be 20
#
CREATE TABLE ubig (a BIGINT, b BIGINT UNSIGNED);
SELECT TABLE_NAME, COLUMN_NAME, NUMERIC_PRECISION
FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='ubig';
TABLE_NAME COLUMN_NAME NUMERIC_PRECISION
ubig a 19
ubig b 20
INSERT INTO ubig VALUES (0xFFFFFFFFFFFFFFFF,0xFFFFFFFFFFFFFFFF);
Warnings:
Warning 1264 Out of range value for column 'a' at row 1
SELECT length(CAST(b AS CHAR)) FROM ubig;
length(CAST(b AS CHAR))
20
DROP TABLE ubig;
End of 5.1 tests. End of 5.1 tests.

View File

@ -44,13 +44,14 @@ XTRADB_ADMIN_COMMAND
INNODB_TRX INNODB_TRX
INNODB_SYS_TABLES INNODB_SYS_TABLES
INNODB_LOCK_WAITS INNODB_LOCK_WAITS
INNODB_CMPMEM_RESET INNODB_SYS_STATS
INNODB_LOCKS INNODB_LOCKS
INNODB_CMPMEM INNODB_CMPMEM
INNODB_TABLE_STATS INNODB_TABLE_STATS
INNODB_SYS_INDEXES INNODB_SYS_INDEXES
INNODB_CMP_RESET INNODB_CMP_RESET
INNODB_BUFFER_POOL_PAGES_BLOB INNODB_BUFFER_POOL_PAGES_BLOB
INNODB_CMPMEM_RESET
INNODB_INDEX_STATS INNODB_INDEX_STATS
SELECT t.table_name, c1.column_name SELECT t.table_name, c1.column_name
FROM information_schema.tables t FROM information_schema.tables t
@ -105,18 +106,19 @@ PBXT_STATISTICS ID
INNODB_CMP page_size INNODB_CMP page_size
INNODB_RSEG rseg_id INNODB_RSEG rseg_id
XTRADB_ENHANCEMENTS name XTRADB_ENHANCEMENTS name
INNODB_BUFFER_POOL_PAGES_INDEX schema_name INNODB_BUFFER_POOL_PAGES_INDEX index_id
XTRADB_ADMIN_COMMAND result_message XTRADB_ADMIN_COMMAND result_message
INNODB_TRX trx_id INNODB_TRX trx_id
INNODB_SYS_TABLES SCHEMA INNODB_SYS_TABLES SCHEMA
INNODB_LOCK_WAITS requesting_trx_id INNODB_LOCK_WAITS requesting_trx_id
INNODB_CMPMEM_RESET page_size INNODB_SYS_STATS INDEX_ID
INNODB_LOCKS lock_id INNODB_LOCKS lock_id
INNODB_CMPMEM page_size INNODB_CMPMEM page_size
INNODB_TABLE_STATS table_schema INNODB_TABLE_STATS table_schema
INNODB_SYS_INDEXES TABLE_ID INNODB_SYS_INDEXES TABLE_ID
INNODB_CMP_RESET page_size INNODB_CMP_RESET page_size
INNODB_BUFFER_POOL_PAGES_BLOB space_id INNODB_BUFFER_POOL_PAGES_BLOB space_id
INNODB_CMPMEM_RESET page_size
INNODB_INDEX_STATS table_schema INNODB_INDEX_STATS table_schema
SELECT t.table_name, c1.column_name SELECT t.table_name, c1.column_name
FROM information_schema.tables t FROM information_schema.tables t
@ -171,18 +173,19 @@ PBXT_STATISTICS ID
INNODB_CMP page_size INNODB_CMP page_size
INNODB_RSEG rseg_id INNODB_RSEG rseg_id
XTRADB_ENHANCEMENTS name XTRADB_ENHANCEMENTS name
INNODB_BUFFER_POOL_PAGES_INDEX schema_name INNODB_BUFFER_POOL_PAGES_INDEX index_id
XTRADB_ADMIN_COMMAND result_message XTRADB_ADMIN_COMMAND result_message
INNODB_TRX trx_id INNODB_TRX trx_id
INNODB_SYS_TABLES SCHEMA INNODB_SYS_TABLES SCHEMA
INNODB_LOCK_WAITS requesting_trx_id INNODB_LOCK_WAITS requesting_trx_id
INNODB_CMPMEM_RESET page_size INNODB_SYS_STATS INDEX_ID
INNODB_LOCKS lock_id INNODB_LOCKS lock_id
INNODB_CMPMEM page_size INNODB_CMPMEM page_size
INNODB_TABLE_STATS table_schema INNODB_TABLE_STATS table_schema
INNODB_SYS_INDEXES TABLE_ID INNODB_SYS_INDEXES TABLE_ID
INNODB_CMP_RESET page_size INNODB_CMP_RESET page_size
INNODB_BUFFER_POOL_PAGES_BLOB space_id INNODB_BUFFER_POOL_PAGES_BLOB space_id
INNODB_CMPMEM_RESET page_size
INNODB_INDEX_STATS table_schema INNODB_INDEX_STATS table_schema
select 1 as f1 from information_schema.tables where "CHARACTER_SETS"= select 1 as f1 from information_schema.tables where "CHARACTER_SETS"=
(select cast(table_name as char) from information_schema.tables (select cast(table_name as char) from information_schema.tables
@ -229,6 +232,7 @@ INNODB_LOCKS information_schema.INNODB_LOCKS 1
INNODB_LOCK_WAITS information_schema.INNODB_LOCK_WAITS 1 INNODB_LOCK_WAITS information_schema.INNODB_LOCK_WAITS 1
INNODB_RSEG information_schema.INNODB_RSEG 1 INNODB_RSEG information_schema.INNODB_RSEG 1
INNODB_SYS_INDEXES information_schema.INNODB_SYS_INDEXES 1 INNODB_SYS_INDEXES information_schema.INNODB_SYS_INDEXES 1
INNODB_SYS_STATS information_schema.INNODB_SYS_STATS 1
INNODB_SYS_TABLES information_schema.INNODB_SYS_TABLES 1 INNODB_SYS_TABLES information_schema.INNODB_SYS_TABLES 1
INNODB_TABLE_STATS information_schema.INNODB_TABLE_STATS 1 INNODB_TABLE_STATS information_schema.INNODB_TABLE_STATS 1
INNODB_TRX information_schema.INNODB_TRX 1 INNODB_TRX information_schema.INNODB_TRX 1
@ -302,13 +306,14 @@ Database: information_schema
| INNODB_TRX | | INNODB_TRX |
| INNODB_SYS_TABLES | | INNODB_SYS_TABLES |
| INNODB_LOCK_WAITS | | INNODB_LOCK_WAITS |
| INNODB_CMPMEM_RESET | | INNODB_SYS_STATS |
| INNODB_LOCKS | | INNODB_LOCKS |
| INNODB_CMPMEM | | INNODB_CMPMEM |
| INNODB_TABLE_STATS | | INNODB_TABLE_STATS |
| INNODB_SYS_INDEXES | | INNODB_SYS_INDEXES |
| INNODB_CMP_RESET | | INNODB_CMP_RESET |
| INNODB_BUFFER_POOL_PAGES_BLOB | | INNODB_BUFFER_POOL_PAGES_BLOB |
| INNODB_CMPMEM_RESET |
| INNODB_INDEX_STATS | | INNODB_INDEX_STATS |
+---------------------------------------+ +---------------------------------------+
Database: INFORMATION_SCHEMA Database: INFORMATION_SCHEMA
@ -358,13 +363,14 @@ Database: INFORMATION_SCHEMA
| INNODB_TRX | | INNODB_TRX |
| INNODB_SYS_TABLES | | INNODB_SYS_TABLES |
| INNODB_LOCK_WAITS | | INNODB_LOCK_WAITS |
| INNODB_CMPMEM_RESET | | INNODB_SYS_STATS |
| INNODB_LOCKS | | INNODB_LOCKS |
| INNODB_CMPMEM | | INNODB_CMPMEM |
| INNODB_TABLE_STATS | | INNODB_TABLE_STATS |
| INNODB_SYS_INDEXES | | INNODB_SYS_INDEXES |
| INNODB_CMP_RESET | | INNODB_CMP_RESET |
| INNODB_BUFFER_POOL_PAGES_BLOB | | INNODB_BUFFER_POOL_PAGES_BLOB |
| INNODB_CMPMEM_RESET |
| INNODB_INDEX_STATS | | INNODB_INDEX_STATS |
+---------------------------------------+ +---------------------------------------+
Wildcard: inf_rmation_schema Wildcard: inf_rmation_schema
@ -375,5 +381,5 @@ Wildcard: inf_rmation_schema
+--------------------+ +--------------------+
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA; SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') AND table_name<>'ndb_binlog_index' AND table_name<>'ndb_apply_status' GROUP BY TABLE_SCHEMA;
table_schema count(*) table_schema count(*)
information_schema 51 information_schema 52
mysql 22 mysql 22

View File

@ -503,4 +503,33 @@ DROP TABLE t1;
CREATE TABLE t1 (id INT NOT NULL); CREATE TABLE t1 (id INT NOT NULL);
LOAD DATA LOCAL INFILE 'tb.txt' INTO TABLE t1; LOAD DATA LOCAL INFILE 'tb.txt' INTO TABLE t1;
DROP TABLE t1; DROP TABLE t1;
#
# Bug #51876 : crash/memory underrun when loading data with ucs2
# and reverse() function
#
# Problem # 1 (original report): wrong parsing of ucs2 data
SELECT '00' UNION SELECT '10' INTO OUTFILE 'tmpp.txt';
CREATE TABLE t1(a INT);
LOAD DATA INFILE 'tmpp.txt' INTO TABLE t1 CHARACTER SET ucs2
(@b) SET a=REVERSE(@b);
Warnings:
Warning 1366 Incorrect integer value: '00' for column 'a' at row 1
Warning 1366 Incorrect integer value: '10' for column 'a' at row 2
# should return 2 zeroes (as the value is truncated)
SELECT * FROM t1;
a
0
0
DROP TABLE t1;
# Problem # 2 : if you write and read ucs2 data to a file they're lost
SELECT '00' UNION SELECT '10' INTO OUTFILE 'tmpp2.txt' CHARACTER SET ucs2;
CREATE TABLE t1(a INT);
LOAD DATA INFILE 'tmpp2.txt' INTO TABLE t1 CHARACTER SET ucs2
(@b) SET a=REVERSE(@b);
# should return 0 and 1 (10 reversed)
SELECT * FROM t1;
a
0
1
DROP TABLE t1;
End of 5.1 tests End of 5.1 tests

View File

@ -11,15 +11,18 @@ Table Op Msg_type Msg_text
test.bug49823 repair status OK test.bug49823 repair status OK
RENAME TABLE general_log TO renamed_general_log; RENAME TABLE general_log TO renamed_general_log;
RENAME TABLE test.bug49823 TO general_log; RENAME TABLE test.bug49823 TO general_log;
Phase 1/3: Fixing table and database names
Phase 2/3: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK mtr.global_suppressions OK
mtr.test_suppressions OK mtr.test_suppressions OK
mysql
mysql.columns_priv OK mysql.columns_priv OK
mysql.db OK mysql.db OK
mysql.event OK mysql.event OK
mysql.func OK mysql.func OK
mysql.general_log
Error : You can't use locks with log tables.
status : OK
mysql.help_category OK mysql.help_category OK
mysql.help_keyword OK mysql.help_keyword OK
mysql.help_relation OK mysql.help_relation OK
@ -31,9 +34,6 @@ mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.renamed_general_log OK mysql.renamed_general_log OK
mysql.servers OK mysql.servers OK
mysql.slow_log
Error : You can't use locks with log tables.
status : OK
mysql.tables_priv OK mysql.tables_priv OK
mysql.time_zone OK mysql.time_zone OK
mysql.time_zone_leap_second OK mysql.time_zone_leap_second OK
@ -41,6 +41,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.user OK mysql.user OK
test
Phase 3/3: Running 'mysql_fix_privilege_tables'...
OK
DROP TABLE general_log; DROP TABLE general_log;
RENAME TABLE renamed_general_log TO general_log; RENAME TABLE renamed_general_log TO general_log;
SET GLOBAL general_log = @saved_general_log; SET GLOBAL general_log = @saved_general_log;

View File

@ -56,6 +56,7 @@ CREATE DATABASE `TEST_$1`;
SHOW DATABASES LIKE "TEST%"; SHOW DATABASES LIKE "TEST%";
Database (TEST%) Database (TEST%)
TEST_$1 TEST_$1
test
DROP DATABASE `test_$1`; DROP DATABASE `test_$1`;
CREATE TABLE T1 (a int) engine=innodb; CREATE TABLE T1 (a int) engine=innodb;
INSERT INTO T1 VALUES (1); INSERT INTO T1 VALUES (1);
@ -171,6 +172,6 @@ create table myUC (i int);
select TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLES select TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLES
where TABLE_SCHEMA ='mysqltest_LC2'; where TABLE_SCHEMA ='mysqltest_LC2';
TABLE_SCHEMA TABLE_NAME TABLE_SCHEMA TABLE_NAME
mysqltest_LC2 myUC mysqltest_lc2 myUC
use test; use test;
drop database mysqltest_LC2; drop database mysqltest_LC2;

View File

@ -148,3 +148,20 @@ a
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
End of 5.0 tests. End of 5.0 tests.
#
# Bug #53095: SELECT column_name FROM INFORMATION_SCHEMA.STATISTICS
# returns nothing
#
CREATE TABLE `ttt` (
`f1` char(3) NOT NULL,
PRIMARY KEY (`f1`)
) ENGINE=myisam DEFAULT CHARSET=latin1;
SELECT count(COLUMN_NAME) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME =
'TTT';
count(COLUMN_NAME)
1
SELECT count(*) FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 'TTT';
count(*)
1
DROP TABLE `ttt`;
End of 5.0 tests.

View File

@ -1,3 +1,5 @@
SET @old_general_log= @@global.general_log; SET @old_general_log= @@global.general_log;
SET @old_slow_query_log= @@global.slow_query_log;
ok ok
SET @@global.general_log= @old_general_log; SET @@global.general_log= @old_general_log;
SET @@global.slow_query_log= @old_slow_query_log;

View File

@ -1,13 +1,16 @@
Run mysql_upgrade once Run mysql_upgrade once
Phase 1/3: Fixing table and database names
Phase 2/3: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK mtr.global_suppressions OK
mtr.test_suppressions OK mtr.test_suppressions OK
mysql
mysql.columns_priv OK mysql.columns_priv OK
mysql.db OK mysql.db OK
mysql.event OK mysql.event OK
mysql.func OK mysql.func OK
mysql.general_log
Error : You can't use locks with log tables.
status : OK
mysql.help_category OK mysql.help_category OK
mysql.help_keyword OK mysql.help_keyword OK
mysql.help_relation OK mysql.help_relation OK
@ -18,9 +21,6 @@ mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log
Error : You can't use locks with log tables.
status : OK
mysql.tables_priv OK mysql.tables_priv OK
mysql.time_zone OK mysql.time_zone OK
mysql.time_zone_leap_second OK mysql.time_zone_leap_second OK
@ -28,18 +28,24 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.user OK mysql.user OK
test
Phase 3/3: Running 'mysql_fix_privilege_tables'...
OK
Run it again - should say already completed Run it again - should say already completed
This installation of MySQL is already upgraded to VERSION, use --force if you still need to run mysql_upgrade This installation of MySQL is already upgraded to VERSION, use --force if you still need to run mysql_upgrade
Force should run it regardless of wether it's been run before Force should run it regardless of wether it's been run before
Phase 1/3: Fixing table and database names
Phase 2/3: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK mtr.global_suppressions OK
mtr.test_suppressions OK mtr.test_suppressions OK
mysql
mysql.columns_priv OK mysql.columns_priv OK
mysql.db OK mysql.db OK
mysql.event OK mysql.event OK
mysql.func OK mysql.func OK
mysql.general_log
Error : You can't use locks with log tables.
status : OK
mysql.help_category OK mysql.help_category OK
mysql.help_keyword OK mysql.help_keyword OK
mysql.help_relation OK mysql.help_relation OK
@ -50,9 +56,6 @@ mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log
Error : You can't use locks with log tables.
status : OK
mysql.tables_priv OK mysql.tables_priv OK
mysql.time_zone OK mysql.time_zone OK
mysql.time_zone_leap_second OK mysql.time_zone_leap_second OK
@ -60,18 +63,24 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.user OK mysql.user OK
test
Phase 3/3: Running 'mysql_fix_privilege_tables'...
OK
CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila'; CREATE USER mysqltest1@'%' IDENTIFIED by 'sakila';
GRANT ALL ON *.* TO mysqltest1@'%'; GRANT ALL ON *.* TO mysqltest1@'%';
Run mysql_upgrade with password protected account Run mysql_upgrade with password protected account
Phase 1/3: Fixing table and database names
Phase 2/3: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK mtr.global_suppressions OK
mtr.test_suppressions OK mtr.test_suppressions OK
mysql
mysql.columns_priv OK mysql.columns_priv OK
mysql.db OK mysql.db OK
mysql.event OK mysql.event OK
mysql.func OK mysql.func OK
mysql.general_log
Error : You can't use locks with log tables.
status : OK
mysql.help_category OK mysql.help_category OK
mysql.help_keyword OK mysql.help_keyword OK
mysql.help_relation OK mysql.help_relation OK
@ -82,9 +91,6 @@ mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log
Error : You can't use locks with log tables.
status : OK
mysql.tables_priv OK mysql.tables_priv OK
mysql.time_zone OK mysql.time_zone OK
mysql.time_zone_leap_second OK mysql.time_zone_leap_second OK
@ -92,20 +98,27 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.user OK mysql.user OK
test
Phase 3/3: Running 'mysql_fix_privilege_tables'...
OK
DROP USER mysqltest1@'%'; DROP USER mysqltest1@'%';
Run mysql_upgrade with a non existing server socket Run mysql_upgrade with a non existing server socket
Phase 1/3: Fixing table and database names
mysqlcheck: Got error: 2005: Unknown MySQL server host 'not_existing_host' (errno) when trying to connect mysqlcheck: Got error: 2005: Unknown MySQL server host 'not_existing_host' (errno) when trying to connect
FATAL ERROR: Upgrade failed FATAL ERROR: Upgrade failed
set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE'; set GLOBAL sql_mode='STRICT_ALL_TABLES,ANSI_QUOTES,NO_ZERO_DATE';
Phase 1/3: Fixing table and database names
Phase 2/3: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK mtr.global_suppressions OK
mtr.test_suppressions OK mtr.test_suppressions OK
mysql
mysql.columns_priv OK mysql.columns_priv OK
mysql.db OK mysql.db OK
mysql.event OK mysql.event OK
mysql.func OK mysql.func OK
mysql.general_log
Error : You can't use locks with log tables.
status : OK
mysql.help_category OK mysql.help_category OK
mysql.help_keyword OK mysql.help_keyword OK
mysql.help_relation OK mysql.help_relation OK
@ -116,9 +129,6 @@ mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log
Error : You can't use locks with log tables.
status : OK
mysql.tables_priv OK mysql.tables_priv OK
mysql.time_zone OK mysql.time_zone OK
mysql.time_zone_leap_second OK mysql.time_zone_leap_second OK
@ -126,6 +136,9 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.user OK mysql.user OK
test
Phase 3/3: Running 'mysql_fix_privilege_tables'...
OK
set GLOBAL sql_mode=default; set GLOBAL sql_mode=default;
# #
# Bug #41569 mysql_upgrade (ver 5.1) add 3 fields to mysql.proc table # Bug #41569 mysql_upgrade (ver 5.1) add 3 fields to mysql.proc table
@ -135,15 +148,18 @@ CREATE PROCEDURE testproc() BEGIN END;
UPDATE mysql.proc SET character_set_client = NULL WHERE name LIKE 'testproc'; UPDATE mysql.proc SET character_set_client = NULL WHERE name LIKE 'testproc';
UPDATE mysql.proc SET collation_connection = NULL WHERE name LIKE 'testproc'; UPDATE mysql.proc SET collation_connection = NULL WHERE name LIKE 'testproc';
UPDATE mysql.proc SET db_collation = NULL WHERE name LIKE 'testproc'; UPDATE mysql.proc SET db_collation = NULL WHERE name LIKE 'testproc';
Phase 1/3: Fixing table and database names
Phase 2/3: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK mtr.global_suppressions OK
mtr.test_suppressions OK mtr.test_suppressions OK
mysql
mysql.columns_priv OK mysql.columns_priv OK
mysql.db OK mysql.db OK
mysql.event OK mysql.event OK
mysql.func OK mysql.func OK
mysql.general_log
Error : You can't use locks with log tables.
status : OK
mysql.help_category OK mysql.help_category OK
mysql.help_keyword OK mysql.help_keyword OK
mysql.help_relation OK mysql.help_relation OK
@ -154,9 +170,6 @@ mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log
Error : You can't use locks with log tables.
status : OK
mysql.tables_priv OK mysql.tables_priv OK
mysql.time_zone OK mysql.time_zone OK
mysql.time_zone_leap_second OK mysql.time_zone_leap_second OK
@ -164,8 +177,56 @@ mysql.time_zone_name OK
mysql.time_zone_transition OK mysql.time_zone_transition OK
mysql.time_zone_transition_type OK mysql.time_zone_transition_type OK
mysql.user OK mysql.user OK
test
Phase 3/3: Running 'mysql_fix_privilege_tables'...
OK
CALL testproc(); CALL testproc();
DROP PROCEDURE testproc; DROP PROCEDURE testproc;
WARNING: NULL values of the 'character_set_client' column ('mysql.proc' table) have been updated with a default value (latin1). Please verify if necessary. WARNING: NULL values of the 'character_set_client' column ('mysql.proc' table) have been updated with a default value (latin1). Please verify if necessary.
WARNING: NULL values of the 'collation_connection' column ('mysql.proc' table) have been updated with a default value (latin1_swedish_ci). Please verify if necessary. WARNING: NULL values of the 'collation_connection' column ('mysql.proc' table) have been updated with a default value (latin1_swedish_ci). Please verify if necessary.
WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been updated with default values. Please verify if necessary. WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been updated with default values. Please verify if necessary.
#
# Bug #53613: mysql_upgrade incorrectly revokes
# TRIGGER privilege on given table
#
GRANT USAGE ON *.* TO 'user3'@'%';
GRANT ALL PRIVILEGES ON `roelt`.`test2` TO 'user3'@'%';
Run mysql_upgrade with all privileges on a user
Phase 1/3: Fixing table and database names
Phase 2/3: Checking and upgrading tables
Processing databases
information_schema
mtr
mtr.global_suppressions OK
mtr.test_suppressions OK
mysql
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.servers OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
test
Phase 3/3: Running 'mysql_fix_privilege_tables'...
OK
SHOW GRANTS FOR 'user3'@'%';
Grants for user3@%
GRANT USAGE ON *.* TO 'user3'@'%'
GRANT ALL PRIVILEGES ON `roelt`.`test2` TO 'user3'@'%'
DROP USER 'user3'@'%';
End of 5.1 tests

View File

@ -7,8 +7,6 @@ mysql.columns_priv OK
mysql.db OK mysql.db OK
mysql.event OK mysql.event OK
mysql.func OK mysql.func OK
mysql.general_log
note : The storage engine for the table doesn't support optimize
mysql.help_category OK mysql.help_category OK
mysql.help_keyword OK mysql.help_keyword OK
mysql.help_relation OK mysql.help_relation OK
@ -19,8 +17,6 @@ mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log
note : The storage engine for the table doesn't support optimize
mysql.tables_priv OK mysql.tables_priv OK
mysql.time_zone OK mysql.time_zone OK
mysql.time_zone_leap_second OK mysql.time_zone_leap_second OK
@ -32,8 +28,6 @@ mysql.columns_priv OK
mysql.db OK mysql.db OK
mysql.event OK mysql.event OK
mysql.func OK mysql.func OK
mysql.general_log
note : The storage engine for the table doesn't support optimize
mysql.help_category OK mysql.help_category OK
mysql.help_keyword OK mysql.help_keyword OK
mysql.help_relation OK mysql.help_relation OK
@ -44,8 +38,6 @@ mysql.plugin OK
mysql.proc OK mysql.proc OK
mysql.procs_priv OK mysql.procs_priv OK
mysql.servers OK mysql.servers OK
mysql.slow_log
note : The storage engine for the table doesn't support optimize
mysql.tables_priv OK mysql.tables_priv OK
mysql.time_zone OK mysql.time_zone OK
mysql.time_zone_leap_second OK mysql.time_zone_leap_second OK

View File

@ -1,47 +1,47 @@
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
FLUSH TABLES; FLUSH TABLES;
SELECT * FROM t1; SELECT * FROM t1;
ERROR 42000: Unknown table engine 'partition' ERROR 42000: Unknown table engine 'partition'
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
ERROR 42000: Unknown table engine 'partition' ERROR 42000: Unknown table engine 'partition'
ANALYZE TABLE t1; ANALYZE TABLE t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 analyze Error Unknown table engine 'partition' test.t1 analyze Error Unknown table engine 'partition'
test.t1 analyze error Corrupt test.t1 analyze error Corrupt
CHECK TABLE t1; CHECK TABLE t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check Error Unknown table engine 'partition' test.t1 check Error Unknown table engine 'partition'
test.t1 check error Corrupt test.t1 check error Corrupt
OPTIMIZE TABLE t1; OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 optimize Error Unknown table engine 'partition' test.t1 optimize Error Unknown table engine 'partition'
test.t1 optimize error Corrupt test.t1 optimize error Corrupt
REPAIR TABLE t1; REPAIR TABLE t1;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 repair Error Unknown table engine 'partition' test.t1 repair Error Unknown table engine 'partition'
test.t1 repair error Corrupt test.t1 repair error Corrupt
ALTER TABLE t1 REPAIR PARTITION ALL; ALTER TABLE t1 REPAIR PARTITION ALL;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 repair Error Unknown table engine 'partition' test.t1 repair Error Unknown table engine 'partition'
test.t1 repair error Corrupt test.t1 repair error Corrupt
ALTER TABLE t1 CHECK PARTITION ALL; ALTER TABLE t1 CHECK PARTITION ALL;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 check Error Unknown table engine 'partition' test.t1 check Error Unknown table engine 'partition'
test.t1 check error Corrupt test.t1 check error Corrupt
ALTER TABLE t1 OPTIMIZE PARTITION ALL; ALTER TABLE t1 OPTIMIZE PARTITION ALL;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 optimize Error Unknown table engine 'partition' test.t1 optimize Error Unknown table engine 'partition'
test.t1 optimize error Corrupt test.t1 optimize error Corrupt
ALTER TABLE t1 ANALYZE PARTITION ALL; ALTER TABLE t1 ANALYZE PARTITION ALL;
Table Op Msg_type Msg_text Table Op Msg_type Msg_text
test.t1 analyze Error Unknown table engine 'partition' test.t1 analyze Error Unknown table engine 'partition'
test.t1 analyze error Corrupt test.t1 analyze error Corrupt
ALTER TABLE t1 REBUILD PARTITION ALL; ALTER TABLE t1 REBUILD PARTITION ALL;
ERROR 42000: Unknown table engine 'partition' ERROR 42000: Unknown table engine 'partition'
ALTER TABLE t1 ENGINE Memory; ALTER TABLE t1 ENGINE Memory;
ERROR 42000: Unknown table engine 'partition' ERROR 42000: Unknown table engine 'partition'
ALTER TABLE t1 ADD (new INT); ALTER TABLE t1 ADD (new INT);
ERROR 42000: Unknown table engine 'partition' ERROR 42000: Unknown table engine 'partition'
DROP TABLE t1; DROP TABLE t1;
CREATE TABLE t1 ( CREATE TABLE t1 (
firstname VARCHAR(25) NOT NULL, firstname VARCHAR(25) NOT NULL,

View File

@ -977,7 +977,7 @@ NULL test t1 c NULL NO int NULL NULL int(11) PRI select,insert,update,reference
---------------------------------------------------------------- ----------------------------------------------------------------
SHOW TABLES LIKE 't1'; SHOW TABLES LIKE 't1';
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def TABLE_NAMES TABLE_NAME Tables_in_test (t1) 253 192 2 N 1 0 33 def TABLE_NAMES TABLE_NAME Tables_in_test (t1) 253 219 2 N 1 0 33
Tables_in_test (t1) Tables_in_test (t1)
t1 t1
---------------------------------------------------------------- ----------------------------------------------------------------

View File

@ -527,3 +527,17 @@ ERROR HY000: You are using safe update mode and you tried to update a table with
SET SESSION sql_safe_updates = DEFAULT; SET SESSION sql_safe_updates = DEFAULT;
DROP TABLE t1; DROP TABLE t1;
DROP VIEW v1; DROP VIEW v1;
#
# Bug#54734 assert in Diagnostics_area::set_ok_status
#
DROP TABLE IF EXISTS t1, not_exists;
DROP FUNCTION IF EXISTS f1;
DROP VIEW IF EXISTS v1;
CREATE TABLE t1 (PRIMARY KEY(pk)) AS SELECT 1 AS pk;
CREATE FUNCTION f1() RETURNS INTEGER RETURN (SELECT 1 FROM not_exists);
CREATE VIEW v1 AS SELECT pk FROM t1 WHERE f1() = 13;
UPDATE v1 SET pk = 7 WHERE pk > 0;
ERROR HY000: View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
DROP VIEW v1;
DROP FUNCTION f1;
DROP TABLE t1;

View File

@ -139,4 +139,12 @@ USE `#mysql50#.`;
ERROR 42000: Incorrect database name '#mysql50#.' ERROR 42000: Incorrect database name '#mysql50#.'
USE `#mysql50#../blablabla`; USE `#mysql50#../blablabla`;
ERROR 42000: Incorrect database name '#mysql50#../blablabla' ERROR 42000: Incorrect database name '#mysql50#../blablabla'
show full tables;
Tables_in_test Table_type
#mysql50#ltoriaeinnovacionendesarrolloempres?9120761097220077376?cio_com BASE TABLE
rename table `#mysql50#ltoriaeinnovacionendesarrolloempres?9120761097220077376?cio_com` to `ltoriaeinnovacionendesarrolloempres?9120761097220077376?cio_com`;
show full tables;
Tables_in_test Table_type
ltoriaeinnovacionendesarrolloempres?9120761097220077376?cio_com BASE TABLE
drop table `ltoriaeinnovacionendesarrolloempres?9120761097220077376?cio_com`;
# End of 5.1 tests # End of 5.1 tests

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,125 +1,51 @@
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 1048579 (0x100003)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB
Validity
Not Before: Jan 29 12:01:53 2010 GMT
Not After : Jan 28 12:01:53 2015 GMT
Subject: C=SE, ST=Uppsala, O=MySQL AB, CN=server
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (8192 bit)
Modulus:
00:ca:aa:1d:c4:11:ec:91:f0:c7:ff:5f:90:92:fc:
40:0c:5e:b7:3d:00:c5:20:d5:0f:89:31:07:d7:41:
4c:8b:60:80:aa:38:14:de:93:6b:9c:74:88:41:68:
b5:02:41:01:2d:86:a2:7a:95:53:5e:7b:67:2f:6c:
1e:29:51:f9:44:fd:4a:80:be:b2:23:a1:3e:1b:38:
cf:88:c4:71:ee:f8:6b:41:c5:2d:c0:c3:52:ac:59:
7d:81:34:19:95:32:b8:9a:51:b6:41:36:d4:c4:a1:
ae:84:e6:38:b9:e8:bf:96:be:19:7a:6b:77:4d:e0:
de:e6:b3:b6:6b:bc:3d:dd:68:bc:4b:c4:eb:f5:36:
93:ed:56:a2:15:50:8a:10:e8:d6:22:ed:6c:b1:cd:
c3:18:c9:f6:0a:e1:de:61:65:62:d6:14:41:8c:b5:
fb:14:68:c1:cf:12:5d:41:21:9d:57:11:43:7d:bb:
43:2c:21:bb:c3:44:7d:a8:cf:1f:c3:71:75:b5:47:
c2:7d:ce:38:3c:73:64:9e:15:d8:a7:27:cf:bd:40:
c8:45:08:e3:c8:39:a8:0b:8e:c2:5b:7b:f1:47:91:
12:91:cc:e1:00:e0:94:5b:bd:32:e4:0c:8d:c3:be:
cc:76:32:52:12:69:b0:18:e0:b0:c2:76:34:5a:5f:
79:d9:f6:81:9d:02:0a:61:69:1c:33:ce:49:fa:76:
03:1e:07:5b:27:0b:bf:34:9e:34:96:b8:03:9b:50:
3a:6a:2f:17:7a:14:cf:65:63:00:37:52:a8:73:ce:
4b:14:40:f4:d2:9a:56:54:33:b8:77:2e:42:5b:8f:
ec:1f:18:f4:ad:ab:8a:4a:8d:6d:70:25:f3:58:e7:
cb:66:51:14:7d:16:f4:eb:6d:56:76:76:51:6e:d6:
1d:da:d3:8d:c0:64:5a:67:4e:af:e2:bf:33:d1:b8:
f6:2a:fc:57:87:a7:35:5e:80:c9:ac:fc:87:c9:71:
17:91:bf:b7:4d:a3:ed:3c:1b:27:f4:66:a0:f9:46:
03:27:cc:ea:80:f6:4b:40:f6:41:94:cd:bd:0a:b3:
ef:26:be:de:6f:69:ae:0f:3f:1c:55:63:33:90:9b:
ed:ca:5a:12:4d:de:4b:06:c2:a2:92:b0:42:3d:31:
af:a4:15:12:15:f8:8a:e9:88:8d:cf:fd:85:66:50:
6f:11:f1:9f:48:f3:b5:ba:9d:86:68:24:a2:5d:a8:
7c:54:42:fa:d8:b5:c5:f2:dd:0e:0f:d0:68:e4:54:
7e:c5:b9:a0:9b:65:2d:77:f4:8f:b9:30:0a:d5:86:
5c:ed:c9:7c:d1:da:9d:0d:63:50:ee:e5:1e:92:63:
cc:a2:0c:e8:4a:96:02:4d:dc:8f:df:7c:8f:08:18:
a8:30:88:d7:af:89:ad:fc:57:4b:10:f9:f1:cb:48:
e8:b6:3b:c8:3f:fc:c2:d3:d1:4a:10:3c:1b:6b:64:
dc:e5:65:1e:5b:b2:da:b1:e2:24:97:8f:ee:c0:4b:
8e:18:83:7c:17:a6:3c:45:b3:60:06:23:f2:2f:18:
13:9e:17:8a:c6:72:79:8c:4d:04:f3:9d:ea:e0:25:
d3:33:8c:1e:11:47:63:1f:a5:45:3f:bd:85:b3:fe:
a5:68:ee:48:b7:0c:a4:c9:7f:72:d0:75:66:9b:6a:
f9:a0:50:f3:a8:59:6d:a3:dd:38:4f:70:2b:bb:ff:
92:2e:71:ab:ef:e9:00:ed:0d:d1:b4:6f:f0:8e:b2:
09:fb:4d:61:0d:d9:10:d5:54:11:cd:03:94:84:fd:
a8:68:e4:45:6e:1e:6a:1e:2f:85:a1:6d:f5:b6:c0:
f1:ee:f7:36:e9:fe:c2:f7:ad:cc:13:46:5b:88:42:
f0:2d:1f:b5:0e:7e:b5:2b:e4:8d:ab:b9:87:30:6a:
3d:12:f4:ad:f3:1c:ac:cc:1a:48:29:2a:96:7b:80:
00:0b:6e:59:87:bf:a3:ca:70:99:1b:1c:fd:72:3d:
b2:d3:94:4a:cf:55:75:be:1f:40:ec:55:35:48:2d:
55:f0:00:da:3c:b0:60:ba:11:32:66:54:0b:be:06:
a4:5e:b7:c9:59:bb:4d:f4:92:06:26:48:6e:c2:12:
d4:7c:f0:20:b8:a2:e1:bc:6a:b6:19:0e:37:47:55:
c9:f2:49:0d:96:75:a2:84:64:bf:34:fc:be:b2:41:
e4:f5:88:eb:e1:b7:26:a5:e5:41:c2:20:0c:f6:e2:
a8:a5:e7:76:54:a5:fb:4b:80:05:7d:18:85:7a:ba:
bc:b7:ad:c0:2f:60:85:cc:15:12:1c:2f:0a:9e:f3:
7c:40:cf:f4:3e:23:d2:95:ca:d0:06:58:52:f0:84:
d8:0f:3d:eb:ff:12:68:94:79:8f:be:40:29:5f:98:
c8:90:6c:05:2f:99:8c:2a:63:78:1f:23:b1:29:c5:
e7:49:c9:b2:92:0f:53:0b:d5:71:28:17:c2:19:bf:
60:bf:7c:87:a8:ab:c1:f4:0a:c1:b8:d2:68:ee:c1:
ce:a7:13:13:17:6d:24:5d:a2:37:a6:d7:7d:48:8b:
2b:74:2d:40:2e:ca:19:d5:b6:3e:6c:42:71:fa:cf:
85:87:f9:de:80:73:8b:89:f4:70:f0:d8:d7:ff:40:
41:9c:c7:15:6d:9b:6e:4c:b5:52:02:99:79:32:73:
ca:26:a0:ac:31:6f:c4:b0:f5:da:bb:c2:1f:e0:9f:
44:ba:25:f7:9f
Exponent: 65537 (0x10001)
Signature Algorithm: md5WithRSAEncryption
08:75:dc:b9:3f:aa:b6:7e:81:7a:39:d1:ee:ed:44:b6:ce:1b:
37:c4:4c:19:d0:66:e6:eb:b5:4f:2a:ef:95:58:64:21:55:01:
12:30:ac:8a:95:d1:06:de:29:46:a4:f1:7d:7f:b0:1e:d2:4e:
fb:f6:fa:9a:74:be:85:62:db:0b:82:90:58:62:c5:5f:f1:80:
02:9f:c5:fb:f3:6b:b0:b4:3b:04:b1:e5:53:c2:d0:00:a1:1a:
9d:65:60:6f:73:98:67:e0:9c:c8:12:94:79:59:bf:43:7b:f5:
77:c8:8f:df:b1:cd:11:1c:01:19:99:c2:22:42:f7:41:ae:b4:
b8:1a
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
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
sc0RHAEZmcIiQvdBrrS4Gg== UsZdIB0n2+KA0xwEdGPdkGCfNPBtOg557DkcyEvsIZ9ELp4Pp2XzWRhyFGasJZc4
YwgD/3K2rpOPZoMkBKeKqV19j41OfLKGBVyuaqzitbu9+KT4RU1ibr2a+UuFCwdT
oqyN7bfWXjcjXOMkxCsOmLfKmqQxs7TEOVrYPTdYjamDxLy/e5g5FgoCxGY8iil0
+YFLZyH6eEx/Os9DlG/M3O1MeRD9U97CdsphbDVZIDyWw5xeX8qQHJe0KSprAgiG
TLhTZHeyrKujQCQS1oFFmNy4gSqXt0j1/6/9T80j6HeyjiiYEaEQK9YLTAjRoA7W
VN8wtHI5F3RlNOVQEJks/bjdlpLL3VhaWtfewGh/mXRGcow84cgcsejMexmhreHm
JfTUl9+X1IFFxGq2/606A9ROQ7kN/s4rXu7/TiMODXI/kZijoWd2SCc7Z0YWoNo7
IRKkmZtrsflJbObEuK2Jk59uqzSxyQOBId8qtbPo8qJJyHGV5GCp34g4x67BxJBo
h1iyVMamBAS5Ip1ejghuROrB8Hit8NhAZApXju62btJeXLX+mQayXb/wC/IXNJJD
83tXiLfZgs6GzLAq7+KW/64sZSvj87CPiNtxkvjchAvyr+fhbBXCrf4rlOjJE6SH
Je2/Jon7uqijncARGLBeYUT0Aa6k1slpXuSKxDNt7EIkP21kDZ5/OJ0Y1u587KVB
dEhuDgNf2/8ij7gAQBwBoZMe1DrwddrxgLLBlyHpAZetNYFZNT+Cs/OlpqI0Jm59
kK9pX0BY4AGOd23XM3K/uLawdmf67kkftim7aVaqXFHPiWsJVtlzmidKvNSmbmZe
dOmMXp6PBoqcdusFVUS7vjd3KAes5wUX/CaTyOOPRu0LMSnpwEnaL76IC9x4Jd6d
7QqY/OFTjpPH8nP57LwouiT6MgSUCWGaOkPuBJ9w9sENSbbINpgJJ42iAe2kE+R7
qEIvf/2ETCTseeQUqm2nWiSPLkNagEh6kojmEoKrGyrv3YjrSXSOY1a70tDVy43+
ueQDQzNZm3Q7inpke2ZKvWyY0LQmLzP2te+tnNBcdLyKJx7emPRTuMUlEdK7cLbt
V3Sy9IKtyAXqqd66fPFj4NhJygyncj8M6CSqhG5L0GhDbkA8UJ8yK/gfKm3h5xe2
utULK5VMtAhQt6cVahO59A9t/OI17y45bmlIgdlEQISzVFe9ZbIUJW44zBfPx74k
/w8pMRr8gEuRqpL2WdJiKGG6lhMHLVFo
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -1,99 +1,99 @@
-----BEGIN RSA PRIVATE KEY----- -----BEGIN RSA PRIVATE KEY-----
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
-----END RSA PRIVATE KEY----- -----END RSA PRIVATE KEY-----

View File

@ -2,4 +2,6 @@
# For both statement and row based bin logs 9/19/2005 [jbm] # For both statement and row based bin logs 9/19/2005 [jbm]
-- source include/have_binlog_format_row.inc -- source include/have_binlog_format_row.inc
-- source extra/binlog_tests/binlog.test let collation=utf8_unicode_ci;
--source include/have_collation.inc
--source extra/binlog_tests/binlog.test

View File

@ -1,5 +1,7 @@
-- source include/not_embedded.inc -- source include/not_embedded.inc
-- source include/have_binlog_format_mixed.inc -- source include/have_binlog_format_mixed.inc
let collation=utf8_unicode_ci;
--source include/have_collation.inc
--disable_warnings --disable_warnings
drop table if exists t1; drop table if exists t1;

View File

@ -1 +0,0 @@
--loose-innodb

View File

@ -1 +0,0 @@
--loose-innodb

View File

@ -3,10 +3,8 @@
[mysqld.1] [mysqld.1]
log-bin= master-bin log-bin= master-bin
loose-federated
[mysqld.2] [mysqld.2]
loose-federated
[ENV] [ENV]
MASTER_MYPORT= @mysqld.1.port MASTER_MYPORT= @mysqld.1.port

View File

@ -0,0 +1,2 @@
--federated
--plugin-load=$HA_FEDERATEDX_SO

View File

@ -328,7 +328,7 @@ ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_
SELECT table_schema,table_name FROM information_schema.tables SELECT table_schema,table_name FROM information_schema.tables
WHERE table_schema = 'information_schema' AND table_name = 'tables'; WHERE table_schema = 'information_schema' AND table_name = 'tables';
table_schema table_name table_schema table_name
information_schema tables information_schema TABLES
SELECT * FROM information_schema.table_privileges SELECT * FROM information_schema.table_privileges
WHERE table_schema = 'information_schema'; WHERE table_schema = 'information_schema';
GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE GRANTEE TABLE_CATALOG TABLE_SCHEMA TABLE_NAME PRIVILEGE_TYPE IS_GRANTABLE

View File

@ -450,9 +450,9 @@ NULL test tb1 f27 27 NULL YES int NULL NULL 10 0 NULL NULL int(10) unsigned zero
NULL test tb1 f28 28 NULL YES int NULL NULL 10 0 NULL NULL int(10) unsigned zerofill select,insert,update,references NULL test tb1 f28 28 NULL YES int NULL NULL 10 0 NULL NULL int(10) unsigned zerofill select,insert,update,references
NULL test tb1 f29 29 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(20) select,insert,update,references NULL test tb1 f29 29 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(20) select,insert,update,references
NULL test tb1 f3 3 NULL YES char 0 0 NULL NULL latin1 latin1_swedish_ci char(0) select,insert,update,references NULL test tb1 f3 3 NULL YES char 0 0 NULL NULL latin1 latin1_swedish_ci char(0) select,insert,update,references
NULL test tb1 f30 30 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(20) unsigned select,insert,update,references NULL test tb1 f30 30 NULL YES bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references
NULL test tb1 f31 31 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(20) unsigned zerofill select,insert,update,references NULL test tb1 f31 31 NULL YES bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned zerofill select,insert,update,references
NULL test tb1 f32 32 NULL YES bigint NULL NULL 19 0 NULL NULL bigint(20) unsigned zerofill select,insert,update,references NULL test tb1 f32 32 NULL YES bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned zerofill select,insert,update,references
NULL test tb1 f33 33 NULL YES decimal NULL NULL 10 0 NULL NULL decimal(10,0) select,insert,update,references NULL test tb1 f33 33 NULL YES decimal NULL NULL 10 0 NULL NULL decimal(10,0) select,insert,update,references
NULL test tb1 f34 34 NULL YES decimal NULL NULL 10 0 NULL NULL decimal(10,0) unsigned select,insert,update,references NULL test tb1 f34 34 NULL YES decimal NULL NULL 10 0 NULL NULL decimal(10,0) unsigned select,insert,update,references
NULL test tb1 f35 35 NULL YES decimal NULL NULL 10 0 NULL NULL decimal(10,0) unsigned zerofill select,insert,update,references NULL test tb1 f35 35 NULL YES decimal NULL NULL 10 0 NULL NULL decimal(10,0) unsigned zerofill select,insert,update,references
@ -565,9 +565,9 @@ NULL test tb3 f143 26 99999 NO int NULL NULL 10 0 NULL NULL int(10) unsigned s
NULL test tb3 f144 27 0000099999 NO int NULL NULL 10 0 NULL NULL int(10) unsigned zerofill select,insert,update,references NULL test tb3 f144 27 0000099999 NO int NULL NULL 10 0 NULL NULL int(10) unsigned zerofill select,insert,update,references
NULL test tb3 f145 28 0000099999 NO int NULL NULL 10 0 NULL NULL int(10) unsigned zerofill select,insert,update,references NULL test tb3 f145 28 0000099999 NO int NULL NULL 10 0 NULL NULL int(10) unsigned zerofill select,insert,update,references
NULL test tb3 f146 29 999999 NO bigint NULL NULL 19 0 NULL NULL bigint(20) select,insert,update,references NULL test tb3 f146 29 999999 NO bigint NULL NULL 19 0 NULL NULL bigint(20) select,insert,update,references
NULL test tb3 f147 30 999999 NO bigint NULL NULL 19 0 NULL NULL bigint(20) unsigned select,insert,update,references NULL test tb3 f147 30 999999 NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned select,insert,update,references
NULL test tb3 f148 31 00000000000000999999 NO bigint NULL NULL 19 0 NULL NULL bigint(20) unsigned zerofill select,insert,update,references NULL test tb3 f148 31 00000000000000999999 NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned zerofill select,insert,update,references
NULL test tb3 f149 32 00000000000000999999 NO bigint NULL NULL 19 0 NULL NULL bigint(20) unsigned zerofill select,insert,update,references NULL test tb3 f149 32 00000000000000999999 NO bigint NULL NULL 20 0 NULL NULL bigint(20) unsigned zerofill select,insert,update,references
NULL test tb3 f150 33 1000 NO decimal NULL NULL 10 0 NULL NULL decimal(10,0) select,insert,update,references NULL test tb3 f150 33 1000 NO decimal NULL NULL 10 0 NULL NULL decimal(10,0) select,insert,update,references
NULL test tb3 f151 34 999 NO decimal NULL NULL 10 0 NULL NULL decimal(10,0) unsigned select,insert,update,references NULL test tb3 f151 34 999 NO decimal NULL NULL 10 0 NULL NULL decimal(10,0) unsigned select,insert,update,references
NULL test tb3 f152 35 0000001000 NO decimal NULL NULL 10 0 NULL NULL decimal(10,0) unsigned zerofill select,insert,update,references NULL test tb3 f152 35 0000001000 NO decimal NULL NULL 10 0 NULL NULL decimal(10,0) unsigned zerofill select,insert,update,references

Some files were not shown because too many files have changed in this diff Show More