mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge mysql.com:/extern/mysql/bk/mysql-5.0
into mysql.com:/extern/mysql/work/bug14834/mysql-5.0
This commit is contained in:
@@ -1269,3 +1269,6 @@ vio/viotest.cpp
|
||||
zlib/*.ds?
|
||||
zlib/*.vcproj
|
||||
libmysqld/ha_blackhole.cc
|
||||
client/my_user.c
|
||||
libmysqld/my_user.c
|
||||
sql/my_user.c
|
||||
|
@@ -21,27 +21,46 @@ EXTRA_DIST = FINISH.sh \
|
||||
SETUP.sh \
|
||||
autorun.sh \
|
||||
check-cpu \
|
||||
cleanup \
|
||||
compile-alpha \
|
||||
compile-alpha-ccc \
|
||||
compile-alpha-cxx \
|
||||
compile-alpha-debug \
|
||||
compile-amd64-debug-max \
|
||||
compile-amd64-max \
|
||||
compile-darwin-mwcc \
|
||||
compile-dist \
|
||||
compile-hpux11-parisc2-aCC \
|
||||
compile-ia64-debug-max \
|
||||
compile-irix-mips64-mipspro \
|
||||
compile-pentium \
|
||||
compile-pentium-debug \
|
||||
compile-pentium-debug-max \
|
||||
compile-pentium-debug-max-no-embedded \
|
||||
compile-pentium-debug-max-no-ndb \
|
||||
compile-pentium-debug-no-bdb \
|
||||
compile-pentium-debug-openssl \
|
||||
compile-pentium-debug-yassl \
|
||||
compile-pentium-gcov \
|
||||
compile-pentium-gprof \
|
||||
compile-pentium-icc \
|
||||
compile-pentium-icc-valgrind-max \
|
||||
compile-pentium-icc-yassl \
|
||||
compile-pentium-max \
|
||||
compile-pentium-myodbc \
|
||||
compile-pentium-mysqlfs-debug \
|
||||
compile-pentium-pgcc \
|
||||
compile-pentium-valgrind-max \
|
||||
compile-pentium64-debug \
|
||||
compile-pentium64-debug-max \
|
||||
compile-pentium64-valgrind-max \
|
||||
compile-ppc \
|
||||
compile-ppc-debug \
|
||||
compile-ppc-debug-max \
|
||||
compile-ppc-debug-max-no-ndb \
|
||||
compile-ppc-max \
|
||||
compile-solaris-sparc \
|
||||
compile-solaris-sparc-debug \
|
||||
compile-irix-mips64-mipspro \
|
||||
compile-hpux11-parisc2-aCC \
|
||||
compile-solaris-sparc-forte \
|
||||
compile-solaris-sparc-purify
|
||||
|
||||
|
@@ -45,22 +45,22 @@ CLEAN_FILES: $(TXT_FILES)
|
||||
GT = $(srcdir)/Support/generate-text-files.pl
|
||||
|
||||
../INSTALL-SOURCE: mysql.info $(GT)
|
||||
perl -w $(GT) $< "installing-source" "windows-source-build" > $@
|
||||
perl -w $(GT) mysql.info "installing-source" "windows-source-build" > $@
|
||||
|
||||
../INSTALL-WIN-SOURCE: mysql.info $(GT)
|
||||
perl -w $(GT) $< "windows-source-build" "post-installation" > $@
|
||||
perl -w $(GT) mysql.info "windows-source-build" "post-installation" > $@
|
||||
|
||||
# We put the description for the binary installation here so that
|
||||
# people who download source wont have to see it. It is moved up to
|
||||
# the toplevel by the script that makes the binary tar files.
|
||||
INSTALL-BINARY: mysql.info $(GT)
|
||||
perl -w $(GT) $< "installing-binary" "installing-source" > $@
|
||||
perl -w $(GT) mysql.info "installing-binary" "installing-source" > $@
|
||||
|
||||
../EXCEPTIONS-CLIENT: mysql.info $(GT)
|
||||
perl -w $(GT) $< "mysql-floss-license-exception" "function-index" > $@
|
||||
perl -w $(GT) mysql.info "mysql-floss-license-exception" "function-index" > $@
|
||||
|
||||
../support-files/MacOSX/ReadMe.txt: mysql.info $(GT)
|
||||
perl -w $(GT) $< "mac-os-x-installation" "netware-installation" > $@
|
||||
perl -w $(GT) mysql.info "mac-os-x-installation" "netware-installation" > $@
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
@@ -226,6 +226,33 @@
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="my_user.c">
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="classic|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
|
@@ -3744,6 +3744,81 @@
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="my_user.c">
|
||||
<FileConfiguration
|
||||
Name="classic nt|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Max|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Max nt|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="nt|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="pro nt|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="pro|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="classic|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32">
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\myisammrg\myrg_rnext_same.c">
|
||||
<FileConfiguration
|
||||
|
@@ -46,7 +46,7 @@ mysqltestmanager_pwgen_SOURCES = mysqlmanager-pwgen.c
|
||||
mysqltestmanagerc_SOURCES= mysqlmanagerc.c $(yassl_dummy_link_fix)
|
||||
mysqlcheck_SOURCES= mysqlcheck.c $(yassl_dummy_link_fix)
|
||||
mysqlshow_SOURCES= mysqlshow.c $(yassl_dummy_link_fix)
|
||||
mysqldump_SOURCES= mysqldump.c $(yassl_dummy_link_fix)
|
||||
mysqldump_SOURCES= mysqldump.c my_user.c $(yassl_dummy_link_fix)
|
||||
mysqlimport_SOURCES= mysqlimport.c $(yassl_dummy_link_fix)
|
||||
sql_src=log_event.h mysql_priv.h log_event.cc my_decimal.h my_decimal.cc
|
||||
strings_src=decimal.c
|
||||
@@ -62,7 +62,10 @@ link_sources:
|
||||
for f in $(strings_src) ; do \
|
||||
rm -f $(srcdir)/$$f; \
|
||||
@LN_CP_F@ $(top_srcdir)/strings/$$f $$f; \
|
||||
done;
|
||||
done; \
|
||||
rm -f $(srcdir)/my_user.c; \
|
||||
@LN_CP_F@ $(top_srcdir)/sql-common/my_user.c my_user.c;
|
||||
|
||||
|
||||
# Don't update the files from bitkeeper
|
||||
%::SCCS/s.%
|
||||
|
@@ -259,7 +259,7 @@ static COMMANDS commands[] = {
|
||||
{ "quit", 'q', com_quit, 0, "Quit mysql." },
|
||||
{ "rehash", '#', com_rehash, 0, "Rebuild completion hash." },
|
||||
{ "source", '.', com_source, 1,
|
||||
"Execute a SQL script file. Takes a file name as an argument."},
|
||||
"Execute an SQL script file. Takes a file name as an argument."},
|
||||
{ "status", 's', com_status, 0, "Get status information from the server."},
|
||||
#ifdef USE_POPEN
|
||||
{ "system", '!', com_shell, 1, "Execute a system shell command."},
|
||||
|
@@ -569,6 +569,7 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
||||
return -1;
|
||||
}
|
||||
mysql_close(mysql); /* Close connection to avoid error messages */
|
||||
argc=1; /* force SHUTDOWN to be the last command */
|
||||
if (got_pidfile)
|
||||
{
|
||||
if (opt_verbose)
|
||||
|
@@ -1266,12 +1266,13 @@ at offset %lu ; this could be a log format error or read error",
|
||||
}
|
||||
else if (buf[4] == ROTATE_EVENT)
|
||||
{
|
||||
Log_event *ev;
|
||||
my_b_seek(file, tmp_pos); /* seek back to event's start */
|
||||
if (!Log_event::read_log_event(file, *description_event))
|
||||
if (!(ev= Log_event::read_log_event(file, *description_event)))
|
||||
/* EOF can't be hit here normally, so it's a real error */
|
||||
die("Could not read a Rotate_log_event event \
|
||||
at offset %lu ; this could be a log format error or read error",
|
||||
tmp_pos);
|
||||
die("Could not read a Rotate_log_event event at offset %lu ;"
|
||||
" this could be a log format error or read error", tmp_pos);
|
||||
delete ev;
|
||||
}
|
||||
else
|
||||
break;
|
||||
|
@@ -41,6 +41,7 @@
|
||||
|
||||
#include <my_global.h>
|
||||
#include <my_sys.h>
|
||||
#include <my_user.h>
|
||||
#include <m_string.h>
|
||||
#include <m_ctype.h>
|
||||
#include <hash.h>
|
||||
@@ -1306,7 +1307,7 @@ static uint dump_routines_for_db(char *db)
|
||||
fprintf(sql_file, "DELIMITER ;\n");
|
||||
|
||||
if (lock_tables)
|
||||
mysql_query_with_error_report(sock, 0, "UNLOCK TABLES");
|
||||
VOID(mysql_query_with_error_report(sock, 0, "UNLOCK TABLES"));
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
@@ -1840,9 +1841,37 @@ static void dump_triggers_for_table (char *table, char *db)
|
||||
DELIMITER ;;\n");
|
||||
while ((row= mysql_fetch_row(result)))
|
||||
{
|
||||
fprintf(sql_file, "/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n\
|
||||
/*!50003 CREATE TRIGGER %s %s %s ON %s FOR EACH ROW%s%s */;;\n\n",
|
||||
row[6], /* sql_mode */
|
||||
fprintf(sql_file,
|
||||
"/*!50003 SET SESSION SQL_MODE=\"%s\" */;;\n"
|
||||
"/*!50003 CREATE */ ",
|
||||
row[6] /* sql_mode */);
|
||||
|
||||
if (mysql_num_fields(result) > 7)
|
||||
{
|
||||
/*
|
||||
mysqldump can be run against the server, that does not support definer
|
||||
in triggers (there is no DEFINER column in SHOW TRIGGERS output). So,
|
||||
we should check if we have this column before accessing it.
|
||||
*/
|
||||
|
||||
uint user_name_len;
|
||||
char user_name_str[USERNAME_LENGTH + 1];
|
||||
char quoted_user_name_str[USERNAME_LENGTH * 2 + 3];
|
||||
uint host_name_len;
|
||||
char host_name_str[HOSTNAME_LENGTH + 1];
|
||||
char quoted_host_name_str[HOSTNAME_LENGTH * 2 + 3];
|
||||
|
||||
parse_user(row[7], strlen(row[7]), user_name_str, &user_name_len,
|
||||
host_name_str, &host_name_len);
|
||||
|
||||
fprintf(sql_file,
|
||||
"/*!50017 DEFINER=%s@%s */ ",
|
||||
quote_name(user_name_str, quoted_user_name_str, FALSE),
|
||||
quote_name(host_name_str, quoted_host_name_str, FALSE));
|
||||
}
|
||||
|
||||
fprintf(sql_file,
|
||||
"/*!50003 TRIGGER %s %s %s ON %s FOR EACH ROW%s%s */;;\n\n",
|
||||
quote_name(row[0], name_buff, 0), /* Trigger */
|
||||
row[4], /* Timing */
|
||||
row[1], /* Event */
|
||||
@@ -2095,7 +2124,10 @@ static void dump_table(char *table, char *db)
|
||||
else
|
||||
res=mysql_store_result(sock);
|
||||
if (!res)
|
||||
{
|
||||
DB_error(sock, "when retrieving data from server");
|
||||
goto err;
|
||||
}
|
||||
if (verbose)
|
||||
fprintf(stderr, "-- Retrieving rows...\n");
|
||||
if (mysql_num_fields(res) != num_fields)
|
||||
@@ -2625,7 +2657,7 @@ static int dump_all_tables_in_db(char *database)
|
||||
check_io(md_result_file);
|
||||
}
|
||||
if (lock_tables)
|
||||
mysql_query_with_error_report(sock, 0, "UNLOCK TABLES");
|
||||
VOID(mysql_query_with_error_report(sock, 0, "UNLOCK TABLES"));
|
||||
return 0;
|
||||
} /* dump_all_tables_in_db */
|
||||
|
||||
@@ -2680,7 +2712,7 @@ static my_bool dump_all_views_in_db(char *database)
|
||||
check_io(md_result_file);
|
||||
}
|
||||
if (lock_tables)
|
||||
mysql_query(sock,"UNLOCK TABLES");
|
||||
VOID(mysql_query_with_error_report(sock, 0, "UNLOCK TABLES"));
|
||||
return 0;
|
||||
} /* dump_all_tables_in_db */
|
||||
|
||||
@@ -2839,7 +2871,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
|
||||
check_io(md_result_file);
|
||||
}
|
||||
if (lock_tables)
|
||||
mysql_query_with_error_report(sock, 0, "UNLOCK TABLES");
|
||||
VOID(mysql_query_with_error_report(sock, 0, "UNLOCK TABLES"));
|
||||
DBUG_RETURN(0);
|
||||
} /* dump_selected_tables */
|
||||
|
||||
|
1983
client/mysqltest.c
1983
client/mysqltest.c
File diff suppressed because it is too large
Load Diff
@@ -676,8 +676,8 @@ history_load(History *h, const char *fname)
|
||||
(void) strunvis(ptr, line);
|
||||
line[sz] = c;
|
||||
if (HENTER(h, &ev, ptr) == -1) {
|
||||
h_free((ptr_t)ptr);
|
||||
return -1;
|
||||
i = -1;
|
||||
goto oomem;
|
||||
}
|
||||
}
|
||||
oomem:
|
||||
|
@@ -30,7 +30,9 @@ AC_DEFUN([MYSQL_CHECK_YASSL], [
|
||||
;;
|
||||
esac
|
||||
AC_SUBST([yassl_taocrypt_extra_cxxflags])
|
||||
|
||||
# Link extra/yassl/include/openssl subdir to include/
|
||||
yassl_h_ln_cmd="\$(LN) -s \$(top_srcdir)/extra/yassl/include/openssl openssl"
|
||||
AC_SUBST(yassl_h_ln_cmd)
|
||||
else
|
||||
yassl_dir=""
|
||||
AC_MSG_RESULT(no)
|
||||
|
@@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
|
||||
AC_CANONICAL_SYSTEM
|
||||
# The Docs Makefile.am parses this line!
|
||||
# remember to also change ndb version below and update version.c in ndb
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.18)
|
||||
AM_INIT_AUTOMAKE(mysql, 5.0.19)
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
|
||||
PROTOCOL_VERSION=10
|
||||
@@ -18,7 +18,7 @@ SHARED_LIB_VERSION=15:0:0
|
||||
# ndb version
|
||||
NDB_VERSION_MAJOR=5
|
||||
NDB_VERSION_MINOR=0
|
||||
NDB_VERSION_BUILD=18
|
||||
NDB_VERSION_BUILD=19
|
||||
NDB_VERSION_STATUS=""
|
||||
|
||||
# Set all version vars based on $VERSION. How do we do this more elegant ?
|
||||
|
@@ -876,9 +876,10 @@ static void usage(void)
|
||||
{
|
||||
DBUG_ENTER("usage");
|
||||
print_version();
|
||||
printf("This software comes with ABSOLUTELY NO WARRANTY. This is free "
|
||||
"software,\nand you are welcome to modify and redistribute it under "
|
||||
"the GPL license\nUsage:\n");
|
||||
printf("This software comes with ABSOLUTELY NO WARRANTY. "
|
||||
"This is free software,\n"
|
||||
"and you are welcome to modify and redistribute it under the GPL license.\n"
|
||||
"Usage:\n");
|
||||
my_print_help(my_long_options);
|
||||
my_print_variables(my_long_options);
|
||||
DBUG_VOID_RETURN;
|
||||
|
@@ -656,7 +656,11 @@ DoProcessReply(SSL& ssl, mySTL::auto_ptr<input_buffer> buffered)
|
||||
{
|
||||
ssl.getSocket().wait(); // wait for input if blocking
|
||||
uint ready = ssl.getSocket().get_ready();
|
||||
if (!ready) return buffered;
|
||||
if (!ready) {
|
||||
// Nothing to receive after blocking wait => error
|
||||
ssl.SetError(receive_error);
|
||||
return buffered= null_buffer;
|
||||
}
|
||||
|
||||
// add buffered data if its there
|
||||
uint buffSz = buffered.get() ? buffered.get()->get_size() : 0;
|
||||
|
@@ -30,10 +30,11 @@ noinst_HEADERS = config-win.h config-os2.h config-netware.h \
|
||||
my_nosys.h my_alarm.h queues.h rijndael.h sha1.h \
|
||||
my_aes.h my_tree.h hash.h thr_alarm.h \
|
||||
thr_lock.h t_ctype.h violite.h md5.h base64.h \
|
||||
mysql_version.h.in my_handler.h my_time.h decimal.h
|
||||
mysql_version.h.in my_handler.h my_time.h decimal.h \
|
||||
my_user.h
|
||||
|
||||
# mysql_version.h are generated
|
||||
CLEANFILES = mysql_version.h my_config.h readline
|
||||
CLEANFILES = mysql_version.h my_config.h readline openssl
|
||||
|
||||
# Some include files that may be moved and patched by configure
|
||||
DISTCLEANFILES = sched.h $(CLEANFILES)
|
||||
@@ -41,6 +42,7 @@ DISTCLEANFILES = sched.h $(CLEANFILES)
|
||||
link_sources:
|
||||
-$(RM) -fr readline
|
||||
@readline_h_ln_cmd@
|
||||
@yassl_h_ln_cmd@
|
||||
|
||||
my_config.h: ../config.h
|
||||
$(CP) ../config.h my_config.h
|
||||
|
@@ -72,9 +72,10 @@ extern "C" {
|
||||
#undef HAVE_CRYPT
|
||||
#endif /* HAVE_OPENSSL */
|
||||
|
||||
/* Configure can't detect this because it uses AC_TRY_RUN */
|
||||
/* Netware has an ancient zlib */
|
||||
#undef HAVE_COMPRESS
|
||||
#define HAVE_COMPRESS
|
||||
#undef HAVE_ARCHIVE_DB
|
||||
|
||||
/* include the old function apis */
|
||||
#define USE_OLD_FUNCTIONS 1
|
||||
@@ -94,6 +95,9 @@ extern "C" {
|
||||
/* On NetWare, stack grows towards lower address*/
|
||||
#define STACK_DIRECTION -1
|
||||
|
||||
/* On NetWare, we need to set stack size for threads, otherwise default 16K is used */
|
||||
#define NW_THD_STACKSIZE 65536
|
||||
|
||||
/* On NetWare, to fix the problem with the deletion of open files */
|
||||
#define CANT_DELETE_OPEN_FILES 1
|
||||
|
||||
|
@@ -22,6 +22,11 @@ functions */
|
||||
#define _WIN32_WINNT 0x0500
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && _MSC_VER >= 1400
|
||||
/* Avoid endless warnings about sprintf() etc. being unsafe. */
|
||||
#define _CRT_SECURE_NO_DEPRECATE 1
|
||||
#endif
|
||||
|
||||
#include <sys/locking.h>
|
||||
#include <windows.h>
|
||||
#include <math.h> /* Because of rint() */
|
||||
@@ -61,6 +66,10 @@ functions */
|
||||
#define __WIN__ /* To make it easier in VC++ */
|
||||
#endif
|
||||
|
||||
#ifndef MAX_INDEXES
|
||||
#define MAX_INDEXES 64
|
||||
#endif
|
||||
|
||||
/* File and lock constants */
|
||||
#define O_SHARE 0x1000 /* Open file in sharing mode */
|
||||
#ifdef __BORLANDC__
|
||||
@@ -99,11 +108,17 @@ functions */
|
||||
#undef _REENTRANT /* Crashes something for win32 */
|
||||
#undef SAFE_MUTEX /* Can't be used on windows */
|
||||
|
||||
#define LONGLONG_MIN ((__int64) 0x8000000000000000)
|
||||
#define LONGLONG_MAX ((__int64) 0x7FFFFFFFFFFFFFFF)
|
||||
#define ULONGLONG_MAX ((unsigned __int64) 0xFFFFFFFFFFFFFFFF)
|
||||
#if defined(_MSC_VER) && _MSC_VER >= 1310
|
||||
#define LL(A) A##ll
|
||||
#define ULL(A) A##ull
|
||||
#else
|
||||
#define LL(A) ((__int64) A)
|
||||
#define ULL(A) ((unsigned __int64) A)
|
||||
#endif
|
||||
|
||||
#define LONGLONG_MIN LL(0x8000000000000000)
|
||||
#define LONGLONG_MAX LL(0x7FFFFFFFFFFFFFFF)
|
||||
#define ULONGLONG_MAX ULL(0xFFFFFFFFFFFFFFFF)
|
||||
|
||||
/* Type information */
|
||||
|
||||
@@ -324,6 +339,7 @@ inline double ulonglong2double(ulonglong value)
|
||||
#define SPRINTF_RETURNS_INT
|
||||
#define HAVE_SETFILEPOINTER
|
||||
#define HAVE_VIO_READ_BUFF
|
||||
#define HAVE_STRNLEN
|
||||
|
||||
#ifndef __NT__
|
||||
#undef FILE_SHARE_DELETE
|
||||
|
@@ -33,7 +33,7 @@ typedef void (*hash_free_key)(void *);
|
||||
|
||||
typedef struct st_hash {
|
||||
uint key_offset,key_length; /* Length of key if const length */
|
||||
uint records,blength,current_record;
|
||||
uint records, blength;
|
||||
uint flags;
|
||||
DYNAMIC_ARRAY array; /* Place for hash_keys */
|
||||
hash_get_key get_key;
|
||||
@@ -41,6 +41,9 @@ typedef struct st_hash {
|
||||
CHARSET_INFO *charset;
|
||||
} HASH;
|
||||
|
||||
/* A search iterator state */
|
||||
typedef uint HASH_SEARCH_STATE;
|
||||
|
||||
#define hash_init(A,B,C,D,E,F,G,H) _hash_init(A,B,C,D,E,F,G, H CALLER_INFO)
|
||||
my_bool _hash_init(HASH *hash, CHARSET_INFO *charset,
|
||||
uint default_array_elements, uint key_offset,
|
||||
@@ -49,12 +52,15 @@ my_bool _hash_init(HASH *hash, CHARSET_INFO *charset,
|
||||
void hash_free(HASH *tree);
|
||||
void my_hash_reset(HASH *hash);
|
||||
byte *hash_element(HASH *hash,uint idx);
|
||||
gptr hash_search(HASH *info,const byte *key,uint length);
|
||||
gptr hash_next(HASH *info,const byte *key,uint length);
|
||||
gptr hash_search(const HASH *info, const byte *key, uint length);
|
||||
gptr hash_first(const HASH *info, const byte *key, uint length,
|
||||
HASH_SEARCH_STATE *state);
|
||||
gptr hash_next(const HASH *info, const byte *key, uint length,
|
||||
HASH_SEARCH_STATE *state);
|
||||
my_bool my_hash_insert(HASH *info,const byte *data);
|
||||
my_bool hash_delete(HASH *hash,byte *record);
|
||||
my_bool hash_update(HASH *hash,byte *record,byte *old_key,uint old_key_length);
|
||||
void hash_replace(HASH *hash, uint idx, byte *new_row);
|
||||
void hash_replace(HASH *hash, HASH_SEARCH_STATE *state, byte *new_row);
|
||||
my_bool hash_check(HASH *hash); /* Only in debug library */
|
||||
|
||||
#define hash_clear(H) bzero((char*) (H),sizeof(*(H)))
|
||||
|
@@ -404,7 +404,8 @@ enum ha_base_keytype {
|
||||
enum en_fieldtype {
|
||||
FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE,
|
||||
FIELD_SKIP_ZERO,FIELD_BLOB,FIELD_CONSTANT,FIELD_INTERVALL,FIELD_ZERO,
|
||||
FIELD_VARCHAR,FIELD_CHECK
|
||||
FIELD_VARCHAR,FIELD_CHECK,
|
||||
FIELD_enum_val_count
|
||||
};
|
||||
|
||||
enum data_file_type {
|
||||
|
@@ -862,6 +862,7 @@ typedef off_t os_off_t;
|
||||
#define SOCKET_EAGAIN WSAEINPROGRESS
|
||||
#define SOCKET_ETIMEDOUT WSAETIMEDOUT
|
||||
#define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK
|
||||
#define SOCKET_EADDRINUSE WSAEADDRINUSE
|
||||
#define SOCKET_ENFILE ENFILE
|
||||
#define SOCKET_EMFILE EMFILE
|
||||
#elif defined(OS2)
|
||||
@@ -870,6 +871,7 @@ typedef off_t os_off_t;
|
||||
#define SOCKET_EAGAIN SOCEINPROGRESS
|
||||
#define SOCKET_ETIMEDOUT SOCKET_EINTR
|
||||
#define SOCKET_EWOULDBLOCK SOCEWOULDBLOCK
|
||||
#define SOCKET_EADDRINUSE SOCEADDRINUSE
|
||||
#define SOCKET_ENFILE SOCENFILE
|
||||
#define SOCKET_EMFILE SOCEMFILE
|
||||
#define closesocket(A) soclose(A)
|
||||
@@ -880,6 +882,7 @@ typedef off_t os_off_t;
|
||||
#define SOCKET_EAGAIN EAGAIN
|
||||
#define SOCKET_ETIMEDOUT SOCKET_EINTR
|
||||
#define SOCKET_EWOULDBLOCK EWOULDBLOCK
|
||||
#define SOCKET_EADDRINUSE EADDRINUSE
|
||||
#define SOCKET_ENFILE ENFILE
|
||||
#define SOCKET_EMFILE EMFILE
|
||||
#endif
|
||||
|
35
include/my_user.h
Normal file
35
include/my_user.h
Normal file
@@ -0,0 +1,35 @@
|
||||
/* Copyright (C) 2005 MySQL AB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
/*
|
||||
This is a header for libraries containing functions used in both server and
|
||||
only some of clients (but not in libmysql)...
|
||||
*/
|
||||
|
||||
#ifndef _my_user_h_
|
||||
#define _my_user_h_
|
||||
|
||||
#include <my_global.h>
|
||||
|
||||
C_MODE_START
|
||||
|
||||
void parse_user(const char *user_id_str, uint user_id_len,
|
||||
char *user_name_str, uint *user_name_len,
|
||||
char *host_name_str, uint *host_name_len);
|
||||
|
||||
C_MODE_END
|
||||
|
||||
#endif /* _my_user_h_ */
|
@@ -27,6 +27,14 @@
|
||||
#define SERVER_VERSION_LENGTH 60
|
||||
#define SQLSTATE_LENGTH 5
|
||||
|
||||
/*
|
||||
USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain
|
||||
username and hostname parts of the user identifier with trailing zero in
|
||||
MySQL standard format:
|
||||
user_name_part@host_name_part\0
|
||||
*/
|
||||
#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2
|
||||
|
||||
#define LOCAL_HOST "localhost"
|
||||
#define LOCAL_HOST_NAMEDPIPE "."
|
||||
|
||||
|
@@ -60,8 +60,8 @@ typedef struct SHA1_CONTEXT
|
||||
|
||||
C_MODE_START
|
||||
|
||||
int sha1_reset( SHA1_CONTEXT* );
|
||||
int sha1_input( SHA1_CONTEXT*, const uint8 *, unsigned int );
|
||||
int sha1_result( SHA1_CONTEXT* , uint8 Message_Digest[SHA1_HASH_SIZE] );
|
||||
int mysql_sha1_reset(SHA1_CONTEXT*);
|
||||
int mysql_sha1_input(SHA1_CONTEXT*, const uint8 *, unsigned int);
|
||||
int mysql_sha1_result(SHA1_CONTEXT* , uint8 Message_Digest[SHA1_HASH_SIZE]);
|
||||
|
||||
C_MODE_END
|
||||
|
@@ -13,6 +13,7 @@ Created 1/16/1996 Heikki Tuuri
|
||||
|
||||
extern ulint data_mysql_default_charset_coll;
|
||||
#define DATA_MYSQL_LATIN1_SWEDISH_CHARSET_COLL 8
|
||||
#define DATA_MYSQL_BINARY_CHARSET_COLL 63
|
||||
|
||||
/* SQL data type struct */
|
||||
typedef struct dtype_struct dtype_t;
|
||||
@@ -311,7 +312,7 @@ dtype_get_pad_char(
|
||||
/*===============*/
|
||||
/* out: padding character code, or
|
||||
ULINT_UNDEFINED if no padding specified */
|
||||
dtype_t* type); /* in: type */
|
||||
const dtype_t* type); /* in: type */
|
||||
/***************************************************************************
|
||||
Returns the size of a fixed size data type, 0 if not a fixed size type. */
|
||||
UNIV_INLINE
|
||||
|
@@ -188,26 +188,35 @@ dtype_get_pad_char(
|
||||
/*===============*/
|
||||
/* out: padding character code, or
|
||||
ULINT_UNDEFINED if no padding specified */
|
||||
dtype_t* type) /* in: type */
|
||||
const dtype_t* type) /* in: type */
|
||||
{
|
||||
if (type->mtype == DATA_CHAR
|
||||
|| type->mtype == DATA_VARCHAR
|
||||
|| type->mtype == DATA_BINARY
|
||||
|| type->mtype == DATA_FIXBINARY
|
||||
|| type->mtype == DATA_MYSQL
|
||||
|| type->mtype == DATA_VARMYSQL
|
||||
|| (type->mtype == DATA_BLOB
|
||||
&& (type->prtype & DATA_BINARY_TYPE) == 0)) {
|
||||
|
||||
switch (type->mtype) {
|
||||
case DATA_FIXBINARY:
|
||||
case DATA_BINARY:
|
||||
if (UNIV_UNLIKELY(dtype_get_charset_coll(type->prtype)
|
||||
== DATA_MYSQL_BINARY_CHARSET_COLL)) {
|
||||
/* Starting from 5.0.18, do not pad
|
||||
VARBINARY or BINARY columns. */
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
/* Fall through */
|
||||
case DATA_CHAR:
|
||||
case DATA_VARCHAR:
|
||||
case DATA_MYSQL:
|
||||
case DATA_VARMYSQL:
|
||||
/* Space is the padding character for all char and binary
|
||||
strings, and starting from 5.0.3, also for TEXT strings. */
|
||||
|
||||
return((ulint)' ');
|
||||
return(0x20);
|
||||
case DATA_BLOB:
|
||||
if ((type->prtype & DATA_BINARY_TYPE) == 0) {
|
||||
return(0x20);
|
||||
}
|
||||
|
||||
/* Fall through */
|
||||
default:
|
||||
/* No padding specified */
|
||||
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@@ -64,14 +64,6 @@ lock_clust_rec_some_has_impl(
|
||||
dict_index_t* index, /* in: clustered index */
|
||||
const ulint* offsets);/* in: rec_get_offsets(rec, index) */
|
||||
/*****************************************************************
|
||||
Resets the lock bits for a single record. Releases transactions
|
||||
waiting for lock requests here. */
|
||||
|
||||
void
|
||||
lock_rec_reset_and_release_wait(
|
||||
/*============================*/
|
||||
rec_t* rec); /* in: record whose locks bits should be reset */
|
||||
/*****************************************************************
|
||||
Makes a record to inherit the locks of another record as gap type
|
||||
locks, but does not reset the lock bits of the other record. Also
|
||||
waiting lock requests on rec are inherited as GRANTED gap locks. */
|
||||
@@ -427,6 +419,18 @@ lock_is_on_table(
|
||||
/*=============*/
|
||||
/* out: TRUE if there are lock(s) */
|
||||
dict_table_t* table); /* in: database table in dictionary cache */
|
||||
/*****************************************************************
|
||||
Removes a granted record lock of a transaction from the queue and grants
|
||||
locks to other transactions waiting in the queue if they now are entitled
|
||||
to a lock. */
|
||||
|
||||
void
|
||||
lock_rec_unlock(
|
||||
/*============*/
|
||||
trx_t* trx, /* in: transaction that has set a record
|
||||
lock */
|
||||
rec_t* rec, /* in: record */
|
||||
ulint lock_mode); /* in: LOCK_S or LOCK_X */
|
||||
/*************************************************************************
|
||||
Releases a table lock.
|
||||
Releases possible other transactions waiting for this lock. */
|
||||
|
@@ -91,9 +91,10 @@ log. */
|
||||
#define OS_FILE_NOT_FOUND 71
|
||||
#define OS_FILE_DISK_FULL 72
|
||||
#define OS_FILE_ALREADY_EXISTS 73
|
||||
#define OS_FILE_AIO_RESOURCES_RESERVED 74 /* wait for OS aio resources
|
||||
#define OS_FILE_PATH_ERROR 74
|
||||
#define OS_FILE_AIO_RESOURCES_RESERVED 75 /* wait for OS aio resources
|
||||
to become available again */
|
||||
#define OS_FILE_ERROR_NOT_SPECIFIED 75
|
||||
#define OS_FILE_ERROR_NOT_SPECIFIED 76
|
||||
|
||||
/* Types for aio operations */
|
||||
#define OS_FILE_READ 10
|
||||
|
@@ -250,7 +250,8 @@ trx_register_new_rec_lock() to store the information which new record locks
|
||||
really were set. This function removes a newly set lock under prebuilt->pcur,
|
||||
and also under prebuilt->clust_pcur. Currently, this is only used and tested
|
||||
in the case of an UPDATE or a DELETE statement, where the row lock is of the
|
||||
LOCK_X type.
|
||||
LOCK_X or LOCK_S type.
|
||||
|
||||
Thus, this implements a 'mini-rollback' that releases the latest record
|
||||
locks we set. */
|
||||
|
||||
|
@@ -2392,7 +2392,7 @@ lock_rec_free_all_from_discard_page(
|
||||
/*****************************************************************
|
||||
Resets the lock bits for a single record. Releases transactions waiting for
|
||||
lock requests here. */
|
||||
|
||||
static
|
||||
void
|
||||
lock_rec_reset_and_release_wait(
|
||||
/*============================*/
|
||||
@@ -3760,6 +3760,75 @@ lock_table_dequeue(
|
||||
|
||||
/*=========================== LOCK RELEASE ==============================*/
|
||||
|
||||
/*****************************************************************
|
||||
Removes a granted record lock of a transaction from the queue and grants
|
||||
locks to other transactions waiting in the queue if they now are entitled
|
||||
to a lock. */
|
||||
|
||||
void
|
||||
lock_rec_unlock(
|
||||
/*============*/
|
||||
trx_t* trx, /* in: transaction that has set a record
|
||||
lock */
|
||||
rec_t* rec, /* in: record */
|
||||
ulint lock_mode) /* in: LOCK_S or LOCK_X */
|
||||
{
|
||||
lock_t* lock;
|
||||
lock_t* release_lock = NULL;
|
||||
ulint heap_no;
|
||||
|
||||
ut_ad(trx && rec);
|
||||
|
||||
mutex_enter(&kernel_mutex);
|
||||
|
||||
heap_no = rec_get_heap_no(rec, page_rec_is_comp(rec));
|
||||
|
||||
lock = lock_rec_get_first(rec);
|
||||
|
||||
/* Find the last lock with the same lock_mode and transaction
|
||||
from the record. */
|
||||
|
||||
while (lock != NULL) {
|
||||
if (lock->trx == trx && lock_get_mode(lock) == lock_mode) {
|
||||
release_lock = lock;
|
||||
ut_a(!lock_get_wait(lock));
|
||||
}
|
||||
|
||||
lock = lock_rec_get_next(rec, lock);
|
||||
}
|
||||
|
||||
/* If a record lock is found, release the record lock */
|
||||
|
||||
if (UNIV_LIKELY(release_lock != NULL)) {
|
||||
lock_rec_reset_nth_bit(release_lock, heap_no);
|
||||
} else {
|
||||
mutex_exit(&kernel_mutex);
|
||||
ut_print_timestamp(stderr);
|
||||
fprintf(stderr,
|
||||
" InnoDB: Error: unlock row could not find a %lu mode lock on the record\n",
|
||||
(ulong)lock_mode);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
/* Check if we can now grant waiting lock requests */
|
||||
|
||||
lock = lock_rec_get_first(rec);
|
||||
|
||||
while (lock != NULL) {
|
||||
if (lock_get_wait(lock)
|
||||
&& !lock_rec_has_to_wait_in_queue(lock)) {
|
||||
|
||||
/* Grant the lock */
|
||||
lock_grant(lock);
|
||||
}
|
||||
|
||||
lock = lock_rec_get_next(rec, lock);
|
||||
}
|
||||
|
||||
mutex_exit(&kernel_mutex);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Releases a table lock.
|
||||
Releases possible other transactions waiting for this lock. */
|
||||
|
@@ -160,13 +160,10 @@ time_t os_last_printout;
|
||||
|
||||
ibool os_has_said_disk_full = FALSE;
|
||||
|
||||
/* The mutex protecting the following counts of pending pread and pwrite
|
||||
operations */
|
||||
/* The mutex protecting the following counts of pending I/O operations */
|
||||
static os_mutex_t os_file_count_mutex;
|
||||
ulint os_file_n_pending_preads = 0;
|
||||
ulint os_file_n_pending_pwrites = 0;
|
||||
|
||||
/* These are not protected by any mutex */
|
||||
ulint os_n_pending_writes = 0;
|
||||
ulint os_n_pending_reads = 0;
|
||||
|
||||
@@ -314,6 +311,8 @@ os_file_get_last_error(
|
||||
return(OS_FILE_NOT_FOUND);
|
||||
} else if (err == EEXIST) {
|
||||
return(OS_FILE_ALREADY_EXISTS);
|
||||
} else if (err == EXDEV || err == ENOTDIR || err == EISDIR) {
|
||||
return(OS_FILE_PATH_ERROR);
|
||||
} else {
|
||||
return(100 + err);
|
||||
}
|
||||
@@ -363,7 +362,8 @@ os_file_handle_error(
|
||||
|
||||
return(TRUE);
|
||||
|
||||
} else if (err == OS_FILE_ALREADY_EXISTS) {
|
||||
} else if (err == OS_FILE_ALREADY_EXISTS
|
||||
|| err == OS_FILE_PATH_ERROR) {
|
||||
|
||||
return(FALSE);
|
||||
} else {
|
||||
@@ -467,7 +467,8 @@ os_file_handle_error_no_exit(
|
||||
|
||||
return(TRUE);
|
||||
|
||||
} else if (err == OS_FILE_ALREADY_EXISTS) {
|
||||
} else if (err == OS_FILE_ALREADY_EXISTS
|
||||
|| err == OS_FILE_PATH_ERROR) {
|
||||
|
||||
return(FALSE);
|
||||
} else {
|
||||
@@ -1905,12 +1906,14 @@ os_file_pread(
|
||||
#if defined(HAVE_PREAD) && !defined(HAVE_BROKEN_PREAD)
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_file_n_pending_preads++;
|
||||
os_n_pending_reads++;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
n_bytes = pread(file, buf, (ssize_t)n, offs);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_file_n_pending_preads--;
|
||||
os_n_pending_reads--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
return(n_bytes);
|
||||
@@ -1920,6 +1923,10 @@ os_file_pread(
|
||||
ssize_t ret;
|
||||
ulint i;
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_reads++;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
/* Protect the seek / read operation with a mutex */
|
||||
i = ((ulint) file) % OS_FILE_N_SEEK_MUTEXES;
|
||||
|
||||
@@ -1928,15 +1935,17 @@ os_file_pread(
|
||||
ret_offset = lseek(file, offs, SEEK_SET);
|
||||
|
||||
if (ret_offset < 0) {
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
return(-1);
|
||||
ret = -1;
|
||||
} else {
|
||||
ret = read(file, buf, (ssize_t)n);
|
||||
}
|
||||
|
||||
ret = read(file, buf, (ssize_t)n);
|
||||
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_reads--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
return(ret);
|
||||
}
|
||||
#endif
|
||||
@@ -1981,12 +1990,14 @@ os_file_pwrite(
|
||||
#if defined(HAVE_PWRITE) && !defined(HAVE_BROKEN_PREAD)
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_file_n_pending_pwrites++;
|
||||
os_n_pending_writes++;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
ret = pwrite(file, buf, (ssize_t)n, offs);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_file_n_pending_pwrites--;
|
||||
os_n_pending_writes--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
# ifdef UNIV_DO_FLUSH
|
||||
@@ -2008,6 +2019,10 @@ os_file_pwrite(
|
||||
off_t ret_offset;
|
||||
ulint i;
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_writes++;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
/* Protect the seek / write operation with a mutex */
|
||||
i = ((ulint) file) % OS_FILE_N_SEEK_MUTEXES;
|
||||
|
||||
@@ -2016,9 +2031,9 @@ os_file_pwrite(
|
||||
ret_offset = lseek(file, offs, SEEK_SET);
|
||||
|
||||
if (ret_offset < 0) {
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
ret = -1;
|
||||
|
||||
return(-1);
|
||||
goto func_exit;
|
||||
}
|
||||
|
||||
ret = write(file, buf, (ssize_t)n);
|
||||
@@ -2036,8 +2051,13 @@ os_file_pwrite(
|
||||
}
|
||||
# endif /* UNIV_DO_FLUSH */
|
||||
|
||||
func_exit:
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_writes--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
return(ret);
|
||||
}
|
||||
#endif
|
||||
@@ -2082,6 +2102,10 @@ try_again:
|
||||
low = (DWORD) offset;
|
||||
high = (DWORD) offset_high;
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_reads++;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
/* Protect the seek / read operation with a mutex */
|
||||
i = ((ulint) file) % OS_FILE_N_SEEK_MUTEXES;
|
||||
|
||||
@@ -2093,17 +2117,21 @@ try_again:
|
||||
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_reads--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
goto error_handling;
|
||||
}
|
||||
|
||||
os_n_pending_reads++;
|
||||
|
||||
ret = ReadFile(file, buf, (DWORD) n, &len, NULL);
|
||||
|
||||
os_n_pending_reads--;
|
||||
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_reads--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
if (ret && len == n) {
|
||||
return(TRUE);
|
||||
}
|
||||
@@ -2114,12 +2142,8 @@ try_again:
|
||||
os_bytes_read_since_printout += n;
|
||||
|
||||
try_again:
|
||||
os_n_pending_reads++;
|
||||
|
||||
ret = os_file_pread(file, buf, n, offset, offset_high);
|
||||
|
||||
os_n_pending_reads--;
|
||||
|
||||
if ((ulint)ret == n) {
|
||||
|
||||
return(TRUE);
|
||||
@@ -2193,6 +2217,10 @@ try_again:
|
||||
low = (DWORD) offset;
|
||||
high = (DWORD) offset_high;
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_reads++;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
/* Protect the seek / read operation with a mutex */
|
||||
i = ((ulint) file) % OS_FILE_N_SEEK_MUTEXES;
|
||||
|
||||
@@ -2204,17 +2232,21 @@ try_again:
|
||||
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_reads--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
goto error_handling;
|
||||
}
|
||||
|
||||
os_n_pending_reads++;
|
||||
|
||||
ret = ReadFile(file, buf, (DWORD) n, &len, NULL);
|
||||
|
||||
os_n_pending_reads--;
|
||||
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_reads--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
if (ret && len == n) {
|
||||
return(TRUE);
|
||||
}
|
||||
@@ -2225,12 +2257,8 @@ try_again:
|
||||
os_bytes_read_since_printout += n;
|
||||
|
||||
try_again:
|
||||
os_n_pending_reads++;
|
||||
|
||||
ret = os_file_pread(file, buf, n, offset, offset_high);
|
||||
|
||||
os_n_pending_reads--;
|
||||
|
||||
if ((ulint)ret == n) {
|
||||
|
||||
return(TRUE);
|
||||
@@ -2310,6 +2338,10 @@ retry:
|
||||
low = (DWORD) offset;
|
||||
high = (DWORD) offset_high;
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_writes++;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
/* Protect the seek / write operation with a mutex */
|
||||
i = ((ulint) file) % OS_FILE_N_SEEK_MUTEXES;
|
||||
|
||||
@@ -2321,6 +2353,10 @@ retry:
|
||||
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_writes--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
ut_print_timestamp(stderr);
|
||||
|
||||
fprintf(stderr,
|
||||
@@ -2335,12 +2371,8 @@ retry:
|
||||
return(FALSE);
|
||||
}
|
||||
|
||||
os_n_pending_writes++;
|
||||
|
||||
ret = WriteFile(file, buf, (DWORD) n, &len, NULL);
|
||||
|
||||
os_n_pending_writes--;
|
||||
|
||||
/* Always do fsync to reduce the probability that when the OS crashes,
|
||||
a database page is only partially physically written to disk. */
|
||||
|
||||
@@ -2352,6 +2384,10 @@ retry:
|
||||
|
||||
os_mutex_exit(os_file_seek_mutexes[i]);
|
||||
|
||||
os_mutex_enter(os_file_count_mutex);
|
||||
os_n_pending_writes--;
|
||||
os_mutex_exit(os_file_count_mutex);
|
||||
|
||||
if (ret && len == n) {
|
||||
|
||||
return(TRUE);
|
||||
@@ -2402,12 +2438,8 @@ retry:
|
||||
#else
|
||||
ssize_t ret;
|
||||
|
||||
os_n_pending_writes++;
|
||||
|
||||
ret = os_file_pwrite(file, buf, n, offset, offset_high);
|
||||
|
||||
os_n_pending_writes--;
|
||||
|
||||
if ((ulint)ret == n) {
|
||||
|
||||
return(TRUE);
|
||||
|
@@ -147,6 +147,15 @@ os_thread_create(
|
||||
"InnoDB: Error: pthread_attr_setstacksize returned %d\n", ret);
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
#ifdef __NETWARE__
|
||||
ret = pthread_attr_setstacksize(&attr,
|
||||
(size_t) NW_THD_STACKSIZE);
|
||||
if (ret) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: pthread_attr_setstacksize returned %d\n", ret);
|
||||
exit(1);
|
||||
}
|
||||
#endif
|
||||
os_mutex_enter(os_sync_mutex);
|
||||
os_thread_count++;
|
||||
|
@@ -549,6 +549,15 @@ row_ins_cascade_calc_update_vec(
|
||||
default:
|
||||
ut_error;
|
||||
case 1:
|
||||
if (UNIV_UNLIKELY(
|
||||
dtype_get_charset_coll(
|
||||
dtype_get_prtype(type))
|
||||
== DATA_MYSQL_BINARY_CHARSET_COLL)) {
|
||||
/* Do not pad BINARY
|
||||
columns. */
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
|
||||
/* space=0x20 */
|
||||
memset(pad_start, 0x20,
|
||||
pad_end - pad_start);
|
||||
|
@@ -1436,7 +1436,8 @@ trx_register_new_rec_lock() to store the information which new record locks
|
||||
really were set. This function removes a newly set lock under prebuilt->pcur,
|
||||
and also under prebuilt->clust_pcur. Currently, this is only used and tested
|
||||
in the case of an UPDATE or a DELETE statement, where the row lock is of the
|
||||
LOCK_X type.
|
||||
LOCK_X or LOCK_S type.
|
||||
|
||||
Thus, this implements a 'mini-rollback' that releases the latest record
|
||||
locks we set. */
|
||||
|
||||
@@ -1474,7 +1475,14 @@ row_unlock_for_mysql(
|
||||
|
||||
index = btr_pcur_get_btr_cur(pcur)->index;
|
||||
|
||||
if (index != NULL && trx_new_rec_locks_contain(trx, index)) {
|
||||
if (UNIV_UNLIKELY(index == NULL)) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: Index is not set for persistent cursor.\n");
|
||||
ut_print_buf(stderr, (const byte*)pcur, sizeof(btr_pcur_t));
|
||||
ut_error;
|
||||
}
|
||||
|
||||
if (trx_new_rec_locks_contain(trx, index)) {
|
||||
|
||||
mtr_start(&mtr);
|
||||
|
||||
@@ -1486,11 +1494,7 @@ row_unlock_for_mysql(
|
||||
|
||||
rec = btr_pcur_get_rec(pcur);
|
||||
|
||||
mutex_enter(&kernel_mutex);
|
||||
|
||||
lock_rec_reset_and_release_wait(rec);
|
||||
|
||||
mutex_exit(&kernel_mutex);
|
||||
lock_rec_unlock(trx, rec, prebuilt->select_lock_type);
|
||||
|
||||
mtr_commit(&mtr);
|
||||
|
||||
@@ -1520,11 +1524,7 @@ row_unlock_for_mysql(
|
||||
|
||||
rec = btr_pcur_get_rec(clust_pcur);
|
||||
|
||||
mutex_enter(&kernel_mutex);
|
||||
|
||||
lock_rec_reset_and_release_wait(rec);
|
||||
|
||||
mutex_exit(&kernel_mutex);
|
||||
lock_rec_unlock(trx, rec, prebuilt->select_lock_type);
|
||||
|
||||
mtr_commit(&mtr);
|
||||
}
|
||||
|
@@ -2771,8 +2771,8 @@ row_sel_get_clust_rec_for_mysql(
|
||||
func_exit:
|
||||
*out_rec = clust_rec;
|
||||
|
||||
if (prebuilt->select_lock_type == LOCK_X) {
|
||||
/* We may use the cursor in update: store its position */
|
||||
if (prebuilt->select_lock_type != LOCK_NONE) {
|
||||
/* We may use the cursor in unlock: store its position */
|
||||
|
||||
btr_pcur_store_position(prebuilt->clust_pcur, mtr);
|
||||
}
|
||||
@@ -3972,12 +3972,12 @@ got_row:
|
||||
/* We have an optimization to save CPU time: if this is a consistent
|
||||
read on a unique condition on the clustered index, then we do not
|
||||
store the pcur position, because any fetch next or prev will anyway
|
||||
return 'end of file'. An exception is the MySQL HANDLER command
|
||||
where the user can move the cursor with PREV or NEXT even after
|
||||
a unique search. */
|
||||
return 'end of file'. Exceptions are locking reads and the MySQL
|
||||
HANDLER command where the user can move the cursor with PREV or NEXT
|
||||
even after a unique search. */
|
||||
|
||||
if (!unique_search_from_clust_index
|
||||
|| prebuilt->select_lock_type == LOCK_X
|
||||
|| prebuilt->select_lock_type != LOCK_NONE
|
||||
|| prebuilt->used_in_HANDLER) {
|
||||
|
||||
/* Inside an update always store the cursor position */
|
||||
|
@@ -794,7 +794,8 @@ trx_commit_off_kernel(
|
||||
in trx sys header if MySQL binlogging is on or the database
|
||||
server is a MySQL replication slave */
|
||||
|
||||
if (trx->mysql_log_file_name) {
|
||||
if (trx->mysql_log_file_name
|
||||
&& trx->mysql_log_file_name[0] != '\0') {
|
||||
trx_sys_update_mysql_binlog_offset(
|
||||
trx->mysql_log_file_name,
|
||||
trx->mysql_log_offset,
|
||||
|
@@ -818,7 +818,7 @@ my_bool handle_local_infile(MYSQL *mysql, const char *net_filename)
|
||||
if ((*options->local_infile_init)(&li_ptr, net_filename,
|
||||
options->local_infile_userdata))
|
||||
{
|
||||
my_net_write(net,"",0); /* Server needs one packet */
|
||||
VOID(my_net_write(net,"",0)); /* Server needs one packet */
|
||||
net_flush(net);
|
||||
strmov(net->sqlstate, unknown_sqlstate);
|
||||
net->last_errno= (*options->local_infile_error)(li_ptr,
|
||||
|
@@ -22,7 +22,7 @@
|
||||
|
||||
target = libmysqlclient_r.la
|
||||
target_defs = -DDONT_USE_RAID -DMYSQL_CLIENT @LIB_EXTRA_CCFLAGS@
|
||||
LIBS = @LIBS@ @ZLIB_LIBS@ @openssl_libs@ @yassl_libs@
|
||||
LIBS = @LIBS@ @ZLIB_LIBS@ @openssl_libs@
|
||||
|
||||
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
|
||||
$(openssl_includes) $(yassl_includes) @ZLIB_INCLUDES@
|
||||
@@ -32,7 +32,7 @@ include $(top_srcdir)/libmysql/Makefile.shared
|
||||
libmysql_dir = $(top_srcdir)/libmysql
|
||||
|
||||
libmysqlclient_r_la_SOURCES = $(target_sources)
|
||||
libmysqlclient_r_la_LIBADD = $(target_libadd)
|
||||
libmysqlclient_r_la_LIBADD = $(target_libadd) $(yassl_libs_with_path)
|
||||
libmysqlclient_r_la_LDFLAGS = $(target_ldflags)
|
||||
|
||||
# This is called from the toplevel makefile
|
||||
|
@@ -63,7 +63,7 @@ sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
|
||||
spatial.cc gstream.cc sql_help.cc tztime.cc sql_cursor.cc \
|
||||
sp_head.cc sp_pcontext.cc sp.cc sp_cache.cc sp_rcontext.cc \
|
||||
parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \
|
||||
ha_blackhole.cc ha_archive.cc
|
||||
ha_blackhole.cc ha_archive.cc my_user.c
|
||||
|
||||
libmysqld_int_a_SOURCES= $(libmysqld_sources) $(libmysqlsources) $(sqlsources) $(sqlexamplessources)
|
||||
libmysqld_a_SOURCES=
|
||||
|
@@ -72,7 +72,6 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
||||
}
|
||||
LINT_INIT(dfile);
|
||||
LINT_INIT(file);
|
||||
pthread_mutex_lock(&THR_LOCK_myisam);
|
||||
errpos=0;
|
||||
options=0;
|
||||
bzero((byte*) &share,sizeof(share));
|
||||
@@ -542,6 +541,8 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
||||
if (! (flags & HA_DONT_TOUCH_DATA))
|
||||
share.state.create_time= (long) time((time_t*) 0);
|
||||
|
||||
pthread_mutex_lock(&THR_LOCK_myisam);
|
||||
|
||||
if (ci->index_file_name)
|
||||
{
|
||||
fn_format(filename, ci->index_file_name,"",MI_NAME_IEXT,4);
|
||||
|
@@ -170,7 +170,7 @@ static int _mi_ck_real_delete(register MI_INFO *info, MI_KEYDEF *keyinfo,
|
||||
goto err;
|
||||
}
|
||||
if ((error=d_search(info,keyinfo,
|
||||
(keyinfo->flag & HA_FULLTEXT ? SEARCH_FIND
|
||||
(keyinfo->flag & HA_FULLTEXT ? SEARCH_FIND | SEARCH_UPDATE
|
||||
: SEARCH_SAME),
|
||||
key,key_length,old_root,root_buff)) >0)
|
||||
{
|
||||
@@ -276,7 +276,8 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
||||
if (subkeys == -1)
|
||||
{
|
||||
/* the last entry in sub-tree */
|
||||
_mi_dispose(info, keyinfo, root,DFLT_INIT_HITS);
|
||||
if (_mi_dispose(info, keyinfo, root,DFLT_INIT_HITS))
|
||||
DBUG_RETURN(-1);
|
||||
/* fall through to normal delete */
|
||||
}
|
||||
else
|
||||
|
@@ -1159,7 +1159,7 @@ static int compare_huff_elements(void *not_used __attribute__((unused)),
|
||||
static void check_counts(HUFF_COUNTS *huff_counts, uint trees,
|
||||
my_off_t records)
|
||||
{
|
||||
uint space_fields,fill_zero_fields,field_count[(int) FIELD_VARCHAR+1];
|
||||
uint space_fields,fill_zero_fields,field_count[(int) FIELD_enum_val_count];
|
||||
my_off_t old_length,new_length,length;
|
||||
DBUG_ENTER("check_counts");
|
||||
|
||||
|
@@ -376,7 +376,10 @@ pthread_handler_t thr_find_all_keys(void *arg)
|
||||
{
|
||||
if (my_init_dynamic_array(&info->buffpek, sizeof(BUFFPEK),
|
||||
maxbuffer, maxbuffer/2))
|
||||
{
|
||||
my_free((gptr) sort_keys,MYF(0));
|
||||
sort_keys= (uchar **) NULL; /* for err: label */
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
4
mysql-test/include/have_euckr.inc
Normal file
4
mysql-test/include/have_euckr.inc
Normal file
@@ -0,0 +1,4 @@
|
||||
-- require r/have_euckr.require
|
||||
disable_query_log;
|
||||
show collation like "euckr_korean_ci";
|
||||
enable_query_log;
|
4
mysql-test/include/have_gb2312.inc
Normal file
4
mysql-test/include/have_gb2312.inc
Normal file
@@ -0,0 +1,4 @@
|
||||
-- require r/have_gb2312.require
|
||||
disable_query_log;
|
||||
show collation like "gb2312_chinese_ci";
|
||||
enable_query_log;
|
@@ -9,8 +9,8 @@ disable_query_log;
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
flush tables;
|
||||
@r/have_ndb.require show variables like "have_ndbcluster";
|
||||
# @r/server_id.require show variables like "server_id";
|
||||
--require r/have_ndb.require
|
||||
show variables like "have_ndbcluster";
|
||||
enable_query_log;
|
||||
|
||||
# Check that server2 has NDB support
|
||||
@@ -20,8 +20,8 @@ disable_query_log;
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
flush tables;
|
||||
@r/have_ndb.require show variables like "have_ndbcluster";
|
||||
# @r/server_id1.require show variables like "server_id";
|
||||
--require r/have_ndb.require
|
||||
show variables like "have_ndbcluster";
|
||||
enable_query_log;
|
||||
|
||||
# Set the default connection to 'server1'
|
||||
|
@@ -8,7 +8,8 @@ connection slave;
|
||||
--disable_warnings
|
||||
stop slave;
|
||||
--enable_warnings
|
||||
@r/slave-stopped.result show status like 'Slave_running';
|
||||
--require r/slave-stopped.result
|
||||
show status like 'Slave_running';
|
||||
connection master;
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
@@ -21,7 +22,8 @@ reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
--enable_warnings
|
||||
start slave;
|
||||
@r/slave-running.result show status like 'Slave_running';
|
||||
--require r/slave-running.result
|
||||
show status like 'Slave_running';
|
||||
|
||||
# Set the default connection to 'master'
|
||||
connection master;
|
||||
|
@@ -52,7 +52,6 @@ execute stmt1;
|
||||
|
||||
##### parameter used for keyword like SELECT (must fail)
|
||||
set @arg00='SELECT' ;
|
||||
# mysqltest gives no output for the next statement, Why ??
|
||||
--error 1064
|
||||
@arg00 a from t1 where a=1;
|
||||
--error 1064
|
||||
|
@@ -890,7 +890,14 @@ sub mtr_exit ($) {
|
||||
# cluck("Called mtr_exit()");
|
||||
mtr_timer_stop_all($::glob_timers);
|
||||
local $SIG{HUP} = 'IGNORE';
|
||||
kill('HUP', -$$);
|
||||
# ToDo: Signalling -$$ will only work if we are the process group
|
||||
# leader (in fact on QNX it will signal our session group leader,
|
||||
# which might be Do-compile or Pushbuild, causing tests to be
|
||||
# aborted). So we only do it if we are the group leader. We might
|
||||
# set ourselves as the group leader at startup (with
|
||||
# POSIX::setpgrp(0,0)), but then care must be needed to always do
|
||||
# proper child process cleanup.
|
||||
kill('HUP', -$$) if $$ == getpgrp();
|
||||
sleep 2;
|
||||
exit($code);
|
||||
}
|
||||
|
@@ -145,6 +145,14 @@ sub run_stress_test ()
|
||||
mtr_add_arg($args, "--stress-init-file=%", $::opt_stress_init_file);
|
||||
}
|
||||
|
||||
if ( !$::opt_stress_loop_count && !$::opt_stress_test_count &&
|
||||
!$::opt_stress_test_duration )
|
||||
{
|
||||
#Limit stress testing with 20 loops in case when any limit parameter
|
||||
#was specified
|
||||
$::opt_stress_test_count=20;
|
||||
}
|
||||
|
||||
if ( $::opt_stress_loop_count )
|
||||
{
|
||||
mtr_add_arg($args, "--loop-count=%s", $::opt_stress_loop_count);
|
||||
|
@@ -152,6 +152,7 @@ our $path_client_bindir;
|
||||
our $path_language;
|
||||
our $path_timefile;
|
||||
our $path_manager_log; # Used by mysqldadmin
|
||||
our $path_mysqltest_log;
|
||||
our $path_slave_load_tmpdir; # What is this?!
|
||||
our $path_my_basedir;
|
||||
our $opt_vardir; # A path but set directly on cmd line
|
||||
@@ -193,6 +194,9 @@ our $opt_ssl;
|
||||
our $opt_skip_ssl;
|
||||
our $opt_ssl_supported;
|
||||
our $opt_ps_protocol;
|
||||
our $opt_sp_protocol;
|
||||
our $opt_cursor_protocol;
|
||||
our $opt_view_protocol;
|
||||
|
||||
our $opt_current_test;
|
||||
our $opt_ddd;
|
||||
@@ -268,6 +272,7 @@ our $opt_user;
|
||||
our $opt_user_test;
|
||||
|
||||
our $opt_valgrind;
|
||||
our $opt_valgrind_mysqld;
|
||||
our $opt_valgrind_mysqltest;
|
||||
our $opt_valgrind_all;
|
||||
our $opt_valgrind_options;
|
||||
@@ -276,9 +281,9 @@ our $opt_stress= "";
|
||||
our $opt_stress_suite= "main";
|
||||
our $opt_stress_mode= "random";
|
||||
our $opt_stress_threads= 5;
|
||||
our $opt_stress_test_count= 20;
|
||||
our $opt_stress_loop_count= "";
|
||||
our $opt_stress_test_duration= "";
|
||||
our $opt_stress_test_count= 0;
|
||||
our $opt_stress_loop_count= 0;
|
||||
our $opt_stress_test_duration= 0;
|
||||
our $opt_stress_init_file= "";
|
||||
our $opt_stress_test_file= "";
|
||||
|
||||
@@ -509,6 +514,9 @@ sub command_line_setup () {
|
||||
# Control what engine/variation to run
|
||||
'embedded-server' => \$opt_embedded_server,
|
||||
'ps-protocol' => \$opt_ps_protocol,
|
||||
'sp-protocol' => \$opt_sp_protocol,
|
||||
'view-protocol' => \$opt_view_protocol,
|
||||
'cursor-protocol' => \$opt_cursor_protocol,
|
||||
'ssl|with-openssl' => \$opt_ssl,
|
||||
'skip-ssl' => \$opt_skip_ssl,
|
||||
'compress' => \$opt_compress,
|
||||
@@ -762,6 +770,7 @@ sub command_line_setup () {
|
||||
# "somestring" option is name/path of valgrind executable
|
||||
|
||||
# Take executable path from any of them, if any
|
||||
$opt_valgrind_mysqld= $opt_valgrind;
|
||||
$opt_valgrind= $opt_valgrind_mysqltest if $opt_valgrind_mysqltest;
|
||||
$opt_valgrind= $opt_valgrind_all if $opt_valgrind_all;
|
||||
|
||||
@@ -804,6 +813,12 @@ sub command_line_setup () {
|
||||
}
|
||||
}
|
||||
|
||||
# On QNX, /tmp/dir/master.sock and /tmp/dir//master.sock seem to be
|
||||
# considered different, so avoid the extra slash (/) in the socket
|
||||
# paths.
|
||||
my $sockdir = $opt_tmpdir;
|
||||
$sockdir =~ s|/+$||;
|
||||
|
||||
# Put this into a hash, will be a C struct
|
||||
|
||||
$master->[0]=
|
||||
@@ -812,7 +827,7 @@ sub command_line_setup () {
|
||||
path_myerr => "$opt_vardir/log/master.err",
|
||||
path_mylog => "$opt_vardir/log/master.log",
|
||||
path_mypid => "$opt_vardir/run/master.pid",
|
||||
path_mysock => "$opt_tmpdir/master.sock",
|
||||
path_mysock => "$sockdir/master.sock",
|
||||
path_myport => $opt_master_myport,
|
||||
start_timeout => 400, # enough time create innodb tables
|
||||
|
||||
@@ -825,7 +840,7 @@ sub command_line_setup () {
|
||||
path_myerr => "$opt_vardir/log/master1.err",
|
||||
path_mylog => "$opt_vardir/log/master1.log",
|
||||
path_mypid => "$opt_vardir/run/master1.pid",
|
||||
path_mysock => "$opt_tmpdir/master1.sock",
|
||||
path_mysock => "$sockdir/master1.sock",
|
||||
path_myport => $opt_master_myport + 1,
|
||||
start_timeout => 400, # enough time create innodb tables
|
||||
};
|
||||
@@ -836,7 +851,7 @@ sub command_line_setup () {
|
||||
path_myerr => "$opt_vardir/log/slave.err",
|
||||
path_mylog => "$opt_vardir/log/slave.log",
|
||||
path_mypid => "$opt_vardir/run/slave.pid",
|
||||
path_mysock => "$opt_tmpdir/slave.sock",
|
||||
path_mysock => "$sockdir/slave.sock",
|
||||
path_myport => $opt_slave_myport,
|
||||
start_timeout => 400,
|
||||
};
|
||||
@@ -847,7 +862,7 @@ sub command_line_setup () {
|
||||
path_myerr => "$opt_vardir/log/slave1.err",
|
||||
path_mylog => "$opt_vardir/log/slave1.log",
|
||||
path_mypid => "$opt_vardir/run/slave1.pid",
|
||||
path_mysock => "$opt_tmpdir/slave1.sock",
|
||||
path_mysock => "$sockdir/slave1.sock",
|
||||
path_myport => $opt_slave_myport + 1,
|
||||
start_timeout => 300,
|
||||
};
|
||||
@@ -858,7 +873,7 @@ sub command_line_setup () {
|
||||
path_myerr => "$opt_vardir/log/slave2.err",
|
||||
path_mylog => "$opt_vardir/log/slave2.log",
|
||||
path_mypid => "$opt_vardir/run/slave2.pid",
|
||||
path_mysock => "$opt_tmpdir/slave2.sock",
|
||||
path_mysock => "$sockdir/slave2.sock",
|
||||
path_myport => $opt_slave_myport + 2,
|
||||
start_timeout => 300,
|
||||
};
|
||||
@@ -868,7 +883,7 @@ sub command_line_setup () {
|
||||
path_err => "$opt_vardir/log/im.err",
|
||||
path_log => "$opt_vardir/log/im.log",
|
||||
path_pid => "$opt_vardir/run/im.pid",
|
||||
path_sock => "$opt_tmpdir/im.sock",
|
||||
path_sock => "$sockdir/im.sock",
|
||||
port => $im_port,
|
||||
start_timeout => $master->[0]->{'start_timeout'},
|
||||
admin_login => 'im_admin',
|
||||
@@ -883,7 +898,7 @@ sub command_line_setup () {
|
||||
server_id => 1,
|
||||
port => $im_mysqld1_port,
|
||||
path_datadir => "$opt_vardir/im_mysqld_1.data",
|
||||
path_sock => "$opt_tmpdir/mysqld_1.sock",
|
||||
path_sock => "$sockdir/mysqld_1.sock",
|
||||
path_pid => "$opt_vardir/run/mysqld_1.pid",
|
||||
};
|
||||
|
||||
@@ -892,7 +907,7 @@ sub command_line_setup () {
|
||||
server_id => 2,
|
||||
port => $im_mysqld2_port,
|
||||
path_datadir => "$opt_vardir/im_mysqld_2.data",
|
||||
path_sock => "$opt_tmpdir/mysqld_2.sock",
|
||||
path_sock => "$sockdir/mysqld_2.sock",
|
||||
path_pid => "$opt_vardir/run/mysqld_2.pid",
|
||||
nonguarded => 1,
|
||||
};
|
||||
@@ -905,6 +920,7 @@ sub command_line_setup () {
|
||||
}
|
||||
|
||||
$path_timefile= "$opt_vardir/log/mysqltest-time";
|
||||
$path_mysqltest_log= "$opt_vardir/log/mysqltest.log";
|
||||
}
|
||||
|
||||
|
||||
@@ -922,11 +938,14 @@ sub executable_setup () {
|
||||
{
|
||||
$path_client_bindir= mtr_path_exists("$glob_basedir/client_release",
|
||||
"$glob_basedir/bin");
|
||||
$exe_mysqld= mtr_exe_exists ("$path_client_bindir/mysqld-nt",
|
||||
$exe_mysqld= mtr_exe_exists ("$path_client_bindir/mysqld-max",
|
||||
"$path_client_bindir/mysqld-nt",
|
||||
"$path_client_bindir/mysqld",
|
||||
"$path_client_bindir/mysqld-debug",);
|
||||
$path_language= mtr_path_exists("$glob_basedir/share/english/");
|
||||
$path_charsetsdir= mtr_path_exists("$glob_basedir/share/charsets");
|
||||
$exe_my_print_defaults=
|
||||
mtr_exe_exists("$path_client_bindir/my_print_defaults");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -937,6 +956,8 @@ sub executable_setup () {
|
||||
|
||||
$exe_im= mtr_exe_exists(
|
||||
"$glob_basedir/server-tools/instance-manager/mysqlmanager");
|
||||
$exe_my_print_defaults=
|
||||
mtr_exe_exists("$glob_basedir/extra/my_print_defaults");
|
||||
}
|
||||
|
||||
if ( $glob_use_embedded_server )
|
||||
@@ -948,8 +969,20 @@ sub executable_setup () {
|
||||
"/usr/bin/false");
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( $opt_valgrind_mysqltest )
|
||||
{
|
||||
# client/mysqltest might be a libtool .sh script, so look for real exe
|
||||
# to avoid valgrinding bash ;)
|
||||
$exe_mysqltest=
|
||||
mtr_exe_exists("$path_client_bindir/.libs/lt-mysqltest",
|
||||
"$path_client_bindir/.libs/mysqltest",
|
||||
"$path_client_bindir/mysqltest");
|
||||
}
|
||||
else
|
||||
{
|
||||
$exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest");
|
||||
}
|
||||
$exe_mysql_client_test=
|
||||
mtr_exe_exists("$glob_basedir/tests/mysql_client_test",
|
||||
"/usr/bin/false");
|
||||
@@ -963,8 +996,6 @@ sub executable_setup () {
|
||||
$exe_mysql= mtr_exe_exists("$path_client_bindir/mysql");
|
||||
$exe_mysql_fix_system_tables=
|
||||
mtr_script_exists("$glob_basedir/scripts/mysql_fix_privilege_tables");
|
||||
$exe_my_print_defaults=
|
||||
mtr_script_exists("$glob_basedir/extra/my_print_defaults");
|
||||
$path_ndb_tools_dir= mtr_path_exists("$glob_basedir/ndb/tools");
|
||||
$exe_ndb_mgm= "$glob_basedir/ndb/src/mgmclient/ndb_mgm";
|
||||
}
|
||||
@@ -982,7 +1013,7 @@ sub executable_setup () {
|
||||
mtr_script_exists("$path_client_bindir/mysql_fix_privilege_tables",
|
||||
"$glob_basedir/scripts/mysql_fix_privilege_tables");
|
||||
$exe_my_print_defaults=
|
||||
mtr_script_exists("$path_client_bindir/my_print_defaults");
|
||||
mtr_exe_exists("$path_client_bindir/my_print_defaults");
|
||||
|
||||
$path_language= mtr_path_exists("$glob_basedir/share/mysql/english/",
|
||||
"$glob_basedir/share/english/");
|
||||
@@ -1880,6 +1911,11 @@ sub run_testcase ($) {
|
||||
}
|
||||
report_failure_and_restart($tinfo);
|
||||
}
|
||||
# Save info from this testcase run to mysqltest.log
|
||||
mtr_tofile($path_mysqltest_log,"CURRENT TEST $tname\n");
|
||||
my $testcase_log= mtr_fromfile($path_timefile);
|
||||
mtr_tofile($path_mysqltest_log,
|
||||
$testcase_log);
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
@@ -2040,7 +2076,7 @@ sub mysqld_arguments ($$$$$) {
|
||||
mtr_add_arg($args, "%s--language=%s", $prefix, $path_language);
|
||||
mtr_add_arg($args, "%s--tmpdir=$opt_tmpdir", $prefix);
|
||||
|
||||
if ( defined $opt_valgrind )
|
||||
if ( defined $opt_valgrind_mysqld )
|
||||
{
|
||||
mtr_add_arg($args, "%s--skip-safemalloc", $prefix);
|
||||
mtr_add_arg($args, "%s--skip-bdb", $prefix);
|
||||
@@ -2266,7 +2302,7 @@ sub mysqld_start ($$$$) {
|
||||
|
||||
mtr_init_args(\$args);
|
||||
|
||||
if ( defined $opt_valgrind )
|
||||
if ( defined $opt_valgrind_mysqld )
|
||||
{
|
||||
valgrind_arguments($args, \$exe);
|
||||
}
|
||||
@@ -2597,6 +2633,21 @@ sub run_mysqltest ($) {
|
||||
mtr_add_arg($args, "--ps-protocol");
|
||||
}
|
||||
|
||||
if ( $opt_sp_protocol )
|
||||
{
|
||||
mtr_add_arg($args, "--sp-protocol");
|
||||
}
|
||||
|
||||
if ( $opt_view_protocol )
|
||||
{
|
||||
mtr_add_arg($args, "--view-protocol");
|
||||
}
|
||||
|
||||
if ( $opt_cursor_protocol )
|
||||
{
|
||||
mtr_add_arg($args, "--cursor-protocol");
|
||||
}
|
||||
|
||||
if ( $opt_strace_client )
|
||||
{
|
||||
$exe= "strace"; # FIXME there are ktrace, ....
|
||||
@@ -2705,6 +2756,7 @@ sub valgrind_arguments {
|
||||
mtr_add_arg($args, split(' ', $opt_valgrind_options));
|
||||
}
|
||||
|
||||
|
||||
mtr_add_arg($args, $$exe);
|
||||
|
||||
$$exe= $opt_valgrind || "valgrind";
|
||||
@@ -2728,6 +2780,10 @@ Options to control what engine/variation to run
|
||||
|
||||
embedded-server Use the embedded server, i.e. no mysqld daemons
|
||||
ps-protocol Use the binary protocol between client and server
|
||||
cursor-protocol Use the cursor protocol between client and server
|
||||
(implies --ps-protocol)
|
||||
view-protocol Create a view to execute all non updating queries
|
||||
sp-protocol Create a stored procedure to execute all queries
|
||||
compress Use the compressed protocol between client and server
|
||||
ssl Use ssl protocol between client and server
|
||||
skip-ssl Dont start sterver with support for ssl connections
|
||||
@@ -2780,9 +2836,8 @@ Options for coverage, profiling etc
|
||||
|
||||
gcov FIXME
|
||||
gprof FIXME
|
||||
valgrind[=EXE] Run the "mysqltest" executable as well as the "mysqld"
|
||||
server using valgrind, optionally specifying the
|
||||
executable path/name
|
||||
valgrind[=EXE] Run the "mysqld" server using valgrind, optionally
|
||||
specifying the executable path/name
|
||||
valgrind-mysqltest[=EXE] In addition, run the "mysqltest" executable with valgrind
|
||||
valgrind-all[=EXE] Adds verbose flag, and --show-reachable to valgrind
|
||||
valgrind-options=ARGS Extra options to give valgrind
|
||||
|
@@ -110,6 +110,20 @@ wait_for_pid()
|
||||
#$WAIT_PID pid $SLEEP_TIME_FOR_DELETE
|
||||
}
|
||||
|
||||
# Check that valgrind is installed
|
||||
find_valgrind()
|
||||
{
|
||||
FIND_VALGRIND=`which valgrind` # this will print an error if not found
|
||||
# Give good warning to the user and stop
|
||||
if [ -z "$FIND_VALGRIND" ] ; then
|
||||
$ECHO "You need to have the 'valgrind' program in your PATH to run mysql-test-run with option --valgrind. Valgrind's home page is http://valgrind.kde.org ."
|
||||
exit 1
|
||||
fi
|
||||
# >=2.1.2 requires the --tool option, some versions write to stdout, some to stderr
|
||||
valgrind --help 2>&1 | grep "\-\-tool" > /dev/null && FIND_VALGRIND="$FIND_VALGRIND --tool=memcheck"
|
||||
FIND_VALGRIND="$FIND_VALGRIND --alignment=8 --leak-check=yes --num-callers=16 --suppressions=$CWD/valgrind.supp"
|
||||
}
|
||||
|
||||
# No paths below as we can't be sure where the program is!
|
||||
|
||||
SED=sed
|
||||
@@ -255,7 +269,6 @@ DO_GDB=""
|
||||
MANUAL_GDB=""
|
||||
DO_DDD=""
|
||||
DO_CLIENT_GDB=""
|
||||
DO_VALGRIND_MYSQL_TEST=""
|
||||
SLEEP_TIME_AFTER_RESTART=1
|
||||
SLEEP_TIME_FOR_DELETE=10
|
||||
SLEEP_TIME_FOR_FIRST_MASTER=400 # Enough time to create innodb tables
|
||||
@@ -279,7 +292,7 @@ DO_STRESS=""
|
||||
STRESS_SUITE="main"
|
||||
STRESS_MODE="random"
|
||||
STRESS_THREADS=5
|
||||
STRESS_TEST_COUNT=20
|
||||
STRESS_TEST_COUNT=""
|
||||
STRESS_LOOP_COUNT=""
|
||||
STRESS_TEST_DURATION=""
|
||||
STRESS_INIT_FILE=""
|
||||
@@ -470,15 +483,8 @@ while test $# -gt 0; do
|
||||
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --gdb"
|
||||
;;
|
||||
--valgrind | --valgrind-all)
|
||||
VALGRIND=`which valgrind` # this will print an error if not found
|
||||
# Give good warning to the user and stop
|
||||
if [ -z "$VALGRIND" ] ; then
|
||||
$ECHO "You need to have the 'valgrind' program in your PATH to run mysql-test-run with option --valgrind. Valgrind's home page is http://valgrind.kde.org ."
|
||||
exit 1
|
||||
fi
|
||||
# >=2.1.2 requires the --tool option, some versions write to stdout, some to stderr
|
||||
valgrind --help 2>&1 | grep "\-\-tool" > /dev/null && VALGRIND="$VALGRIND --tool=memcheck"
|
||||
VALGRIND="$VALGRIND --alignment=8 --leak-check=yes --num-callers=16 --suppressions=$CWD/valgrind.supp"
|
||||
find_valgrind;
|
||||
VALGRIND=$FIND_VALGRIND
|
||||
EXTRA_MASTER_MYSQLD_OPT="$EXTRA_MASTER_MYSQLD_OPT --skip-safemalloc --skip-bdb"
|
||||
EXTRA_SLAVE_MYSQLD_OPT="$EXTRA_SLAVE_MYSQLD_OPT --skip-safemalloc --skip-bdb"
|
||||
SLEEP_TIME_AFTER_RESTART=10
|
||||
@@ -493,8 +499,13 @@ while test $# -gt 0; do
|
||||
TMP=`$ECHO "$1" | $SED -e "s;--valgrind-options=;;"`
|
||||
VALGRIND="$VALGRIND $TMP"
|
||||
;;
|
||||
--valgrind-mysqltest)
|
||||
DO_VALGRIND_MYSQL_TEST=1
|
||||
--valgrind-mysqltest | --valgrind-mysqltest-all)
|
||||
find_valgrind;
|
||||
VALGRIND_MYSQLTEST=$FIND_VALGRIND
|
||||
if test "$1" = "--valgrind-mysqltest-all"
|
||||
then
|
||||
VALGRIND_MYSQLTEST="$VALGRIND_MYSQLTEST -v --show-reachable=yes"
|
||||
fi
|
||||
;;
|
||||
--skip-ndbcluster | --skip-ndb)
|
||||
USE_NDBCLUSTER=""
|
||||
@@ -599,7 +610,7 @@ DASH72=`$ECHO '-------------------------------------------------------'|$CUT -c
|
||||
if [ x$SOURCE_DIST = x1 ] ; then
|
||||
if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
|
||||
if [ -f "$BASEDIR/libmysqld/examples/mysqltest_embedded" ] ; then
|
||||
MYSQL_TEST="$VALGRIND $BASEDIR/libmysqld/examples/mysqltest_embedded"
|
||||
MYSQL_TEST="$BASEDIR/libmysqld/examples/mysqltest_embedded"
|
||||
else
|
||||
echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2
|
||||
exit 1
|
||||
@@ -733,7 +744,7 @@ else
|
||||
fi
|
||||
if [ "x$USE_EMBEDDED_SERVER" = "x1" ] ; then
|
||||
if [ -f "$CLIENT_BINDIR/mysqltest_embedded" ] ; then
|
||||
MYSQL_TEST="$VALGRIND $CLIENT_BINDIR/mysqltest_embedded"
|
||||
MYSQL_TEST="$CLIENT_BINDIR/mysqltest_embedded"
|
||||
else
|
||||
echo "Fatal error: Cannot find embedded server 'mysqltest_embedded'" 1>&2
|
||||
exit 1
|
||||
@@ -744,7 +755,7 @@ else
|
||||
MYSQL_CLIENT_TEST="$CLIENT_BINDIR/mysql_client_test_embedded"
|
||||
fi
|
||||
else
|
||||
MYSQL_TEST="$VALGRIND_MYSQLTEST $CLIENT_BINDIR/mysqltest"
|
||||
MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
|
||||
MYSQL_CLIENT_TEST="$CLIENT_BINDIR/mysql_client_test"
|
||||
fi
|
||||
fi
|
||||
@@ -759,10 +770,6 @@ then
|
||||
SLAVE_MYSQLD=$MYSQLD
|
||||
fi
|
||||
|
||||
if [ x$DO_VALGRIND_MYSQL_TEST = x1 ] ; then
|
||||
MYSQL_TEST="$VALGRIND $MYSQL_TEST"
|
||||
fi
|
||||
|
||||
# If we should run all tests cases, we will use a local server for that
|
||||
|
||||
if [ -z "$1" -a -z "$DO_STRESS" ]
|
||||
@@ -819,7 +826,10 @@ if [ x$USE_TIMER = x1 ] ; then
|
||||
fi
|
||||
MYSQL_TEST_BIN=$MYSQL_TEST
|
||||
MYSQL_TEST="$MYSQL_TEST $MYSQL_TEST_ARGS"
|
||||
|
||||
# Export MYSQL_TEST variable for use from .test files
|
||||
export MYSQL_TEST
|
||||
|
||||
GDB_CLIENT_INIT=$MYSQL_TMP_DIR/gdbinit.client
|
||||
GDB_MASTER_INIT=$MYSQL_TMP_DIR/gdbinit.master
|
||||
GDB_SLAVE_INIT=$MYSQL_TMP_DIR/gdbinit.slave
|
||||
@@ -829,6 +839,7 @@ GPROF_DIR=$MYSQL_TMP_DIR/gprof
|
||||
GPROF_MASTER=$GPROF_DIR/master.gprof
|
||||
GPROF_SLAVE=$GPROF_DIR/slave.gprof
|
||||
TIMEFILE="$MYSQL_TEST_DIR/var/log/mysqltest-time"
|
||||
MYSQLTEST_LOG="$MYSQL_TEST_DIR/var/log/mysqltest.log"
|
||||
if [ -n "$DO_CLIENT_GDB" -o -n "$DO_GDB" ] ; then
|
||||
XTERM=`which xterm`
|
||||
fi
|
||||
@@ -991,6 +1002,18 @@ report_stats () {
|
||||
echo "WARNING: Got errors/warnings while running tests. Please examine"
|
||||
echo "$MY_LOG_DIR/warnings for details."
|
||||
fi
|
||||
|
||||
fi # USE_RUNNING_SERVER
|
||||
|
||||
# Check valgrind errors from mysqltest
|
||||
if [ ! -z "$VALGRIND_MYSQLTEST" ]
|
||||
then
|
||||
if $GREP "ERROR SUMMARY" $MYSQLTEST_LOG | $GREP -v "0 errors" > /dev/null
|
||||
then
|
||||
$ECHO "Valgrind detected errors!"
|
||||
$GREP "ERROR SUMMARY" $MYSQLTEST_LOG | $GREP -v "0 errors"
|
||||
$ECHO "See $MYSQLTEST_LOG"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -1261,6 +1284,7 @@ start_master()
|
||||
--server-id=$id \
|
||||
--basedir=$MY_BASEDIR \
|
||||
--port=$this_master_myport \
|
||||
--port-open-timeout=380 \
|
||||
--local-infile \
|
||||
--exit-info=256 \
|
||||
--core \
|
||||
@@ -1285,6 +1309,7 @@ start_master()
|
||||
--server-id=$id --rpl-recovery-rank=1 \
|
||||
--basedir=$MY_BASEDIR --init-rpl-role=master \
|
||||
--port=$this_master_myport \
|
||||
--port-open-timeout=380 \
|
||||
--local-infile \
|
||||
--datadir=$MASTER_MYDDIR$1 \
|
||||
--pid-file=$MASTER_MYPID$1 \
|
||||
@@ -1417,6 +1442,7 @@ start_slave()
|
||||
--datadir=$slave_datadir \
|
||||
--pid-file=$slave_pid \
|
||||
--port=$slave_port \
|
||||
--port-open-timeout=380 \
|
||||
--socket=$slave_sock \
|
||||
--character-sets-dir=$CHARSETSDIR \
|
||||
--default-character-set=$CHARACTER_SET \
|
||||
@@ -1767,13 +1793,17 @@ run_testcase ()
|
||||
$RM -f r/$tname.*reject
|
||||
mysql_test_args="-R $result_file $EXTRA_MYSQL_TEST_OPT"
|
||||
if [ -z "$DO_CLIENT_GDB" ] ; then
|
||||
`$MYSQL_TEST $mysql_test_args < $tf 2> $TIMEFILE`;
|
||||
`$VALGRIND_MYSQLTEST $MYSQL_TEST $mysql_test_args < $tf 2> $TIMEFILE`;
|
||||
else
|
||||
do_gdb_test "$mysql_test_args" "$tf"
|
||||
fi
|
||||
|
||||
res=$?
|
||||
|
||||
# Save the testcase log to mysqltest log file
|
||||
echo "CURRENT_TEST: $tname" >> $MYSQLTEST_LOG
|
||||
cat $TIMEFILE >> $MYSQLTEST_LOG
|
||||
|
||||
pname=`$ECHO "$tname "|$CUT -c 1-24`
|
||||
RES="$pname"
|
||||
|
||||
@@ -1906,7 +1936,7 @@ run_stress_test()
|
||||
--stress-basedir=$STRESS_BASEDIR \
|
||||
--server-logs-dir=$STRESS_BASEDIR \
|
||||
--stress-mode=$STRESS_MODE \
|
||||
--mysqltest=$BASEDIR/client/mysqltest \
|
||||
--mysqltest=$CLIENT_BINDIR/mysqltest \
|
||||
--threads=$STRESS_THREADS \
|
||||
--verbose \
|
||||
--cleanup \
|
||||
@@ -1917,6 +1947,14 @@ run_stress_test()
|
||||
STRESS_TEST_ARGS="$STRESS_TEST_ARGS --stress-init-file=$STRESS_INIT_FILE"
|
||||
fi
|
||||
|
||||
if [ -z "$STRESS_LOOP_COUNT" -a -z "$STRESS_TEST_COUNT" -a
|
||||
-z "$STRESS_TEST_DURATION" ] ; then
|
||||
|
||||
#Limit stress testing with 20 loops in case when any limit parameter
|
||||
#was specified
|
||||
STRESS_TEST_COUNT=20
|
||||
fi
|
||||
|
||||
if [ -n "$STRESS_LOOP_COUNT" ] ; then
|
||||
STRESS_TEST_ARGS="$STRESS_TEST_ARGS --loop-count=$STRESS_LOOP_COUNT"
|
||||
fi
|
||||
|
@@ -562,3 +562,7 @@ desc t1;
|
||||
Field Type Null Key Default Extra
|
||||
mycol int(10) NO 0
|
||||
drop table t1;
|
||||
create table t1 (t varchar(255) default null, key t (t(80)))
|
||||
engine=myisam default charset=latin1;
|
||||
alter table t1 change t t text;
|
||||
drop table t1;
|
||||
|
@@ -1923,4 +1923,9 @@ d varchar(255) character set utf8,
|
||||
e varchar(255) character set utf8,
|
||||
key (a,b,c,d,e)) engine=bdb;
|
||||
ERROR 42000: Specified key was too long; max key length is 3072 bytes
|
||||
set autocommit=0;
|
||||
create table t1 (a int) engine=bdb;
|
||||
commit;
|
||||
alter table t1 add primary key(a);
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
@@ -259,21 +259,6 @@ select * from t1;
|
||||
0 1 2
|
||||
0 0 1
|
||||
drop table t1;
|
||||
create table t1 select 1,2,3;
|
||||
create table if not exists t1 select 1,2;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
create table if not exists t1 select 1,2,3,4;
|
||||
ERROR 21S01: Column count doesn't match value count at row 1
|
||||
create table if not exists t1 select 1;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
1 2 3
|
||||
1 2 3
|
||||
0 1 2
|
||||
0 0 1
|
||||
drop table t1;
|
||||
create table t1 (a int not null, b int, primary key (a));
|
||||
insert into t1 values (1,1);
|
||||
create table if not exists t1 select 2;
|
||||
@@ -287,7 +272,6 @@ a b
|
||||
create table if not exists t1 select 3 as 'a',4 as 'b';
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
Warning 1364 Field 'a' doesn't have a default value
|
||||
create table if not exists t1 select 3 as 'a',3 as 'b';
|
||||
ERROR 23000: Duplicate entry '3' for key 1
|
||||
select * from t1;
|
||||
@@ -614,6 +598,11 @@ DESC t2;
|
||||
Field Type Null Key Default Extra
|
||||
f2 varchar(171) YES NULL
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t12913 (f1 ENUM ('a','b')) AS SELECT 'a' AS f1;
|
||||
SELECT * FROM t12913;
|
||||
f1
|
||||
a
|
||||
DROP TABLE t12913;
|
||||
create database mysqltest;
|
||||
use mysqltest;
|
||||
drop database mysqltest;
|
||||
@@ -645,8 +634,6 @@ create table t1 (
|
||||
a varchar(112) charset utf8 collate utf8_bin not null,
|
||||
primary key (a)
|
||||
) select 'test' as a ;
|
||||
Warnings:
|
||||
Warning 1364 Field 'a' doesn't have a default value
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
@@ -662,9 +649,6 @@ create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin not null,
|
||||
b int not null, primary key (a)
|
||||
) select a, 1 as b from t2 ;
|
||||
Warnings:
|
||||
Warning 1364 Field 'a' doesn't have a default value
|
||||
Warning 1364 Field 'b' doesn't have a default value
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
@@ -676,12 +660,37 @@ drop table t1;
|
||||
create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin not null,
|
||||
b int not null, primary key (a)
|
||||
) select 'a' as a , 1 as b from t2 ;
|
||||
) select a, 1 as c from t2 ;
|
||||
Warnings:
|
||||
Warning 1364 Field 'a' doesn't have a default value
|
||||
Warning 1364 Field 'b' doesn't have a default value
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`b` int(11) NOT NULL,
|
||||
`a` varchar(12) character set utf8 collate utf8_bin NOT NULL,
|
||||
`c` bigint(1) NOT NULL default '0',
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin not null,
|
||||
b int null, primary key (a)
|
||||
) select a, 1 as c from t2 ;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`b` int(11) default NULL,
|
||||
`a` varchar(12) character set utf8 collate utf8_bin NOT NULL,
|
||||
`c` bigint(1) NOT NULL default '0',
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin not null,
|
||||
b int not null, primary key (a)
|
||||
) select 'a' as a , 1 as b from t2 ;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(12) character set utf8 collate utf8_bin NOT NULL,
|
||||
`b` int(11) NOT NULL,
|
||||
@@ -692,8 +701,6 @@ create table t1 (
|
||||
a varchar(12) charset utf8 collate utf8_bin,
|
||||
b int not null, primary key (a)
|
||||
) select 'a' as a , 1 as b from t2 ;
|
||||
Warnings:
|
||||
Warning 1364 Field 'b' doesn't have a default value
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
@@ -712,8 +719,6 @@ a1 varchar(12) charset utf8 collate utf8_bin not null,
|
||||
a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int,
|
||||
primary key (a1)
|
||||
) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1 ;
|
||||
Warnings:
|
||||
Warning 1364 Field 'a1' doesn't have a default value
|
||||
drop table t2;
|
||||
create table t2 (
|
||||
a1 varchar(12) charset utf8 collate utf8_bin,
|
||||
@@ -729,8 +734,6 @@ a1 varchar(12) charset utf8 collate utf8_bin not null,
|
||||
a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int,
|
||||
primary key (a1)
|
||||
) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1 ;
|
||||
Warnings:
|
||||
Warning 1364 Field 'a1' doesn't have a default value
|
||||
drop table t2;
|
||||
create table t2 ( a int default 3, b int default 3)
|
||||
select a1,a2 from t1;
|
||||
|
167
mysql-test/r/ctype_euckr.result
Normal file
167
mysql-test/r/ctype_euckr.result
Normal file
@@ -0,0 +1,167 @@
|
||||
drop table if exists t1;
|
||||
SET @test_character_set= 'euckr';
|
||||
SET @test_collation= 'euckr_korean_ci';
|
||||
SET @safe_character_set_server= @@character_set_server;
|
||||
SET @safe_collation_server= @@collation_server;
|
||||
SET character_set_server= @test_character_set;
|
||||
SET collation_server= @test_collation;
|
||||
CREATE DATABASE d1;
|
||||
USE d1;
|
||||
CREATE TABLE t1 (c CHAR(10), KEY(c));
|
||||
SHOW FULL COLUMNS FROM t1;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
c char(10) euckr_korean_ci YES MUL NULL
|
||||
INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa');
|
||||
SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%';
|
||||
want3results
|
||||
aaa
|
||||
aaaa
|
||||
aaaaa
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2)));
|
||||
SHOW FULL COLUMNS FROM t1;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
c1 varchar(15) euckr_korean_ci YES MUL NULL
|
||||
INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab');
|
||||
SELECT c1 as want3results from t1 where c1 like 'l%';
|
||||
want3results
|
||||
location
|
||||
loberge
|
||||
lotre
|
||||
SELECT c1 as want3results from t1 where c1 like 'lo%';
|
||||
want3results
|
||||
location
|
||||
loberge
|
||||
lotre
|
||||
SELECT c1 as want1result from t1 where c1 like 'loc%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'loca%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'locat%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'locati%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'locatio%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'location%';
|
||||
want1result
|
||||
location
|
||||
DROP TABLE t1;
|
||||
DROP DATABASE d1;
|
||||
USE test;
|
||||
SET character_set_server= @safe_character_set_server;
|
||||
SET collation_server= @safe_collation_server;
|
||||
SET NAMES euckr;
|
||||
SET collation_connection='euckr_korean_ci';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
insert into t1 values ('a'), ('a '), ('a\t');
|
||||
select collation(a),hex(a) from t1 order by a;
|
||||
collation(a) hex(a)
|
||||
euckr_korean_ci 6109
|
||||
euckr_korean_ci 61
|
||||
euckr_korean_ci 6120
|
||||
drop table t1;
|
||||
create table t1 engine=innodb select repeat('a',50) as c1;
|
||||
alter table t1 add index(c1(5));
|
||||
insert into t1 values ('abcdefg'),('abcde100'),('abcde110'),('abcde111');
|
||||
select collation(c1) from t1 limit 1;
|
||||
collation(c1)
|
||||
euckr_korean_ci
|
||||
select c1 from t1 where c1 like 'abcdef%' order by c1;
|
||||
c1
|
||||
abcdefg
|
||||
select c1 from t1 where c1 like 'abcde1%' order by c1;
|
||||
c1
|
||||
abcde100
|
||||
abcde110
|
||||
abcde111
|
||||
select c1 from t1 where c1 like 'abcde11%' order by c1;
|
||||
c1
|
||||
abcde110
|
||||
abcde111
|
||||
select c1 from t1 where c1 like 'abcde111%' order by c1;
|
||||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
euckr_korean_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET collation_connection='euckr_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
insert into t1 values ('a'), ('a '), ('a\t');
|
||||
select collation(a),hex(a) from t1 order by a;
|
||||
collation(a) hex(a)
|
||||
euckr_bin 6109
|
||||
euckr_bin 61
|
||||
euckr_bin 6120
|
||||
drop table t1;
|
||||
create table t1 engine=innodb select repeat('a',50) as c1;
|
||||
alter table t1 add index(c1(5));
|
||||
insert into t1 values ('abcdefg'),('abcde100'),('abcde110'),('abcde111');
|
||||
select collation(c1) from t1 limit 1;
|
||||
collation(c1)
|
||||
euckr_bin
|
||||
select c1 from t1 where c1 like 'abcdef%' order by c1;
|
||||
c1
|
||||
abcdefg
|
||||
select c1 from t1 where c1 like 'abcde1%' order by c1;
|
||||
c1
|
||||
abcde100
|
||||
abcde110
|
||||
abcde111
|
||||
select c1 from t1 where c1 like 'abcde11%' order by c1;
|
||||
c1
|
||||
abcde110
|
||||
abcde111
|
||||
select c1 from t1 where c1 like 'abcde111%' order by c1;
|
||||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
euckr_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET NAMES euckr;
|
||||
CREATE TABLE t1 (a text) character set euckr;
|
||||
INSERT INTO t1 VALUES (0xA2E6),(0xFEF7);
|
||||
SELECT hex(a) FROM t1 ORDER BY a;
|
||||
hex(a)
|
||||
A2E6
|
||||
FEF7
|
||||
DROP TABLE t1;
|
167
mysql-test/r/ctype_gb2312.result
Normal file
167
mysql-test/r/ctype_gb2312.result
Normal file
@@ -0,0 +1,167 @@
|
||||
drop table if exists t1;
|
||||
SET @test_character_set= 'gb2312';
|
||||
SET @test_collation= 'gb2312_chinese_ci';
|
||||
SET @safe_character_set_server= @@character_set_server;
|
||||
SET @safe_collation_server= @@collation_server;
|
||||
SET character_set_server= @test_character_set;
|
||||
SET collation_server= @test_collation;
|
||||
CREATE DATABASE d1;
|
||||
USE d1;
|
||||
CREATE TABLE t1 (c CHAR(10), KEY(c));
|
||||
SHOW FULL COLUMNS FROM t1;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
c char(10) gb2312_chinese_ci YES MUL NULL
|
||||
INSERT INTO t1 VALUES ('aaa'),('aaaa'),('aaaaa');
|
||||
SELECT c as want3results FROM t1 WHERE c LIKE 'aaa%';
|
||||
want3results
|
||||
aaa
|
||||
aaaa
|
||||
aaaaa
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (c1 varchar(15), KEY c1 (c1(2)));
|
||||
SHOW FULL COLUMNS FROM t1;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
c1 varchar(15) gb2312_chinese_ci YES MUL NULL
|
||||
INSERT INTO t1 VALUES ('location'),('loberge'),('lotre'),('boabab');
|
||||
SELECT c1 as want3results from t1 where c1 like 'l%';
|
||||
want3results
|
||||
location
|
||||
loberge
|
||||
lotre
|
||||
SELECT c1 as want3results from t1 where c1 like 'lo%';
|
||||
want3results
|
||||
location
|
||||
loberge
|
||||
lotre
|
||||
SELECT c1 as want1result from t1 where c1 like 'loc%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'loca%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'locat%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'locati%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'locatio%';
|
||||
want1result
|
||||
location
|
||||
SELECT c1 as want1result from t1 where c1 like 'location%';
|
||||
want1result
|
||||
location
|
||||
DROP TABLE t1;
|
||||
DROP DATABASE d1;
|
||||
USE test;
|
||||
SET character_set_server= @safe_character_set_server;
|
||||
SET collation_server= @safe_collation_server;
|
||||
SET NAMES gb2312;
|
||||
SET collation_connection='gb2312_chinese_ci';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
insert into t1 values ('a'), ('a '), ('a\t');
|
||||
select collation(a),hex(a) from t1 order by a;
|
||||
collation(a) hex(a)
|
||||
gb2312_chinese_ci 6109
|
||||
gb2312_chinese_ci 61
|
||||
gb2312_chinese_ci 6120
|
||||
drop table t1;
|
||||
create table t1 engine=innodb select repeat('a',50) as c1;
|
||||
alter table t1 add index(c1(5));
|
||||
insert into t1 values ('abcdefg'),('abcde100'),('abcde110'),('abcde111');
|
||||
select collation(c1) from t1 limit 1;
|
||||
collation(c1)
|
||||
gb2312_chinese_ci
|
||||
select c1 from t1 where c1 like 'abcdef%' order by c1;
|
||||
c1
|
||||
abcdefg
|
||||
select c1 from t1 where c1 like 'abcde1%' order by c1;
|
||||
c1
|
||||
abcde100
|
||||
abcde110
|
||||
abcde111
|
||||
select c1 from t1 where c1 like 'abcde11%' order by c1;
|
||||
c1
|
||||
abcde110
|
||||
abcde111
|
||||
select c1 from t1 where c1 like 'abcde111%' order by c1;
|
||||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
gb2312_chinese_ci
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET collation_connection='gb2312_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
insert into t1 values ('a'), ('a '), ('a\t');
|
||||
select collation(a),hex(a) from t1 order by a;
|
||||
collation(a) hex(a)
|
||||
gb2312_bin 6109
|
||||
gb2312_bin 61
|
||||
gb2312_bin 6120
|
||||
drop table t1;
|
||||
create table t1 engine=innodb select repeat('a',50) as c1;
|
||||
alter table t1 add index(c1(5));
|
||||
insert into t1 values ('abcdefg'),('abcde100'),('abcde110'),('abcde111');
|
||||
select collation(c1) from t1 limit 1;
|
||||
collation(c1)
|
||||
gb2312_bin
|
||||
select c1 from t1 where c1 like 'abcdef%' order by c1;
|
||||
c1
|
||||
abcdefg
|
||||
select c1 from t1 where c1 like 'abcde1%' order by c1;
|
||||
c1
|
||||
abcde100
|
||||
abcde110
|
||||
abcde111
|
||||
select c1 from t1 where c1 like 'abcde11%' order by c1;
|
||||
c1
|
||||
abcde110
|
||||
abcde111
|
||||
select c1 from t1 where c1 like 'abcde111%' order by c1;
|
||||
c1
|
||||
abcde111
|
||||
drop table t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
gb2312_bin
|
||||
create table t1 ROW_FORMAT=DYNAMIC select repeat('a',50) as c1 ;
|
||||
insert into t1 values('abcdef');
|
||||
insert into t1 values('_bcdef');
|
||||
insert into t1 values('a_cdef');
|
||||
insert into t1 values('ab_def');
|
||||
insert into t1 values('abc_ef');
|
||||
insert into t1 values('abcd_f');
|
||||
insert into t1 values('abcde_');
|
||||
select c1 as c1u from t1 where c1 like 'ab\_def';
|
||||
c1u
|
||||
ab_def
|
||||
select c1 as c2h from t1 where c1 like 'ab#_def' escape '#';
|
||||
c2h
|
||||
ab_def
|
||||
drop table t1;
|
||||
SET NAMES gb2312;
|
||||
CREATE TABLE t1 (a text) character set gb2312;
|
||||
INSERT INTO t1 VALUES (0xA2A1),(0xD7FE);
|
||||
SELECT hex(a) FROM t1 ORDER BY a;
|
||||
hex(a)
|
||||
A2A1
|
||||
D7FE
|
||||
DROP TABLE t1;
|
@@ -2015,6 +2015,112 @@ Z,z,Ź,ź,Ż,ż,Ž,ž
|
||||
ǁ
|
||||
ǂ
|
||||
ǃ
|
||||
select group_concat(c1 order by c1) from t1 group by c1 collate utf8_hungarian_ci;
|
||||
group_concat(c1 order by c1)
|
||||
÷
|
||||
×
|
||||
A,a,À,Á,Â,Ã,Ä,Å,à,á,â,ã,ä,å,Ā,ā,Ă,ă,Ą,ą,Ǎ,ǎ,Ǟ,ǟ,Ǡ,ǡ,Ǻ,ǻ
|
||||
AA,Aa,aA,aa
|
||||
Æ,æ,Ǣ,ǣ,Ǽ,ǽ
|
||||
B,b
|
||||
ƀ
|
||||
Ɓ
|
||||
Ƃ,ƃ
|
||||
C,c,Ç,ç,Ć,ć,Ĉ,ĉ,Ċ,ċ,Č,č
|
||||
CH,Ch,cH,ch
|
||||
Ƈ,ƈ
|
||||
D,d,Ď,ď
|
||||
DZ,Dz,dZ,dz,DŽ,Dž,dž,DZ,Dz,dz
|
||||
Đ,đ
|
||||
Ɖ
|
||||
Ɗ
|
||||
Ƌ,ƌ
|
||||
Ð,ð
|
||||
E,e,È,É,Ê,Ë,è,é,ê,ë,Ē,ē,Ĕ,ĕ,Ė,ė,Ę,ę,Ě,ě
|
||||
Ǝ,ǝ
|
||||
Ə
|
||||
Ɛ
|
||||
F,f
|
||||
Ƒ,ƒ
|
||||
G,g,Ĝ,ĝ,Ğ,ğ,Ġ,ġ,Ģ,ģ,Ǧ,ǧ,Ǵ,ǵ
|
||||
Ǥ,ǥ
|
||||
Ɠ
|
||||
Ɣ
|
||||
Ƣ,ƣ
|
||||
H,h,Ĥ,ĥ
|
||||
ƕ,Ƕ
|
||||
Ħ,ħ
|
||||
I,i,Ì,Í,Î,Ï,ì,í,î,ï,Ĩ,ĩ,Ī,ī,Ĭ,ĭ,Į,į,İ,Ǐ,ǐ
|
||||
IJ,Ij,iJ,ij,IJ,ij
|
||||
ı
|
||||
Ɨ
|
||||
Ɩ
|
||||
J,j,Ĵ,ĵ,ǰ
|
||||
K,k,Ķ,ķ,Ǩ,ǩ
|
||||
Ƙ,ƙ
|
||||
L,l,Ĺ,ĺ,Ļ,ļ,Ľ,ľ
|
||||
Ŀ,ŀ
|
||||
LJ,Lj,lJ,lj,LJ,Lj,lj
|
||||
LL,Ll,lL,ll
|
||||
Ł,ł
|
||||
ƚ
|
||||
ƛ
|
||||
M,m
|
||||
N,n,Ñ,ñ,Ń,ń,Ņ,ņ,Ň,ň,Ǹ,ǹ
|
||||
NJ,Nj,nJ,nj,NJ,Nj,nj
|
||||
Ɲ
|
||||
ƞ
|
||||
Ŋ,ŋ
|
||||
O,o,Ò,Ó,Ô,Õ,ò,ó,ô,õ,Ō,ō,Ŏ,ŏ,Ơ,ơ,Ǒ,ǒ,Ǫ,ǫ,Ǭ,ǭ
|
||||
OE,Oe,oE,oe,Œ,œ
|
||||
Ö,ö,Ő,ő
|
||||
Ø,ø,Ǿ,ǿ
|
||||
Ɔ
|
||||
Ɵ
|
||||
P,p
|
||||
Ƥ,ƥ
|
||||
Q,q
|
||||
ĸ
|
||||
R,r,Ŕ,ŕ,Ŗ,ŗ,Ř,ř
|
||||
RR,Rr,rR,rr
|
||||
Ʀ
|
||||
S,s,Ś,ś,Ŝ,ŝ,Ş,ş,Š,š,ſ
|
||||
SS,Ss,sS,ss,ß
|
||||
Ʃ
|
||||
ƪ
|
||||
T,t,Ţ,ţ,Ť,ť
|
||||
ƾ
|
||||
Ŧ,ŧ
|
||||
ƫ
|
||||
Ƭ,ƭ
|
||||
Ʈ
|
||||
U,u,Ù,Ú,Û,ù,ú,û,Ũ,ũ,Ū,ū,Ŭ,ŭ,Ů,ů,Ų,ų,Ư,ư,Ǔ,ǔ,Ǖ,ǖ,Ǘ,ǘ,Ǚ,ǚ,Ǜ,ǜ
|
||||
Ü,ü,Ű,ű
|
||||
Ɯ
|
||||
Ʊ
|
||||
V,v
|
||||
Ʋ
|
||||
W,w,Ŵ,ŵ
|
||||
X,x
|
||||
Y,y,Ý,ý,ÿ,Ŷ,ŷ,Ÿ
|
||||
Ƴ,ƴ
|
||||
Z,z,Ź,ź,Ż,ż,Ž,ž
|
||||
ƍ
|
||||
Ƶ,ƶ
|
||||
Ʒ,Ǯ,ǯ
|
||||
Ƹ,ƹ
|
||||
ƺ
|
||||
Þ,þ
|
||||
ƿ,Ƿ
|
||||
ƻ
|
||||
Ƨ,ƨ
|
||||
Ƽ,ƽ
|
||||
Ƅ,ƅ
|
||||
ʼn
|
||||
ǀ
|
||||
ǁ
|
||||
ǂ
|
||||
ǃ
|
||||
drop table t1;
|
||||
SET NAMES utf8;
|
||||
CREATE TABLE t1 (c varchar(255) NOT NULL COLLATE utf8_general_ci, INDEX (c));
|
||||
|
@@ -685,6 +685,13 @@ hex(a)
|
||||
005B
|
||||
803D
|
||||
drop table t1;
|
||||
create table t1(f1 varchar(5) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL) engine=InnoDB;
|
||||
insert into t1 values('a');
|
||||
create index t1f1 on t1(f1);
|
||||
select f1 from t1 where f1 like 'a%';
|
||||
f1
|
||||
a
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a varchar(64) character set ucs2, b decimal(10,3));
|
||||
INSERT INTO t1 VALUES ("1.1", 0), ("2.1", 0);
|
||||
update t1 set b=a;
|
||||
|
@@ -1058,6 +1058,14 @@ char(a)
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (t TINYTEXT CHARACTER SET utf8);
|
||||
INSERT INTO t1 VALUES(REPEAT('a', 100));
|
||||
CREATE TEMPORARY TABLE t2 SELECT COALESCE(t) AS bug FROM t1;
|
||||
SELECT LENGTH(bug) FROM t2;
|
||||
LENGTH(bug)
|
||||
100
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(id varchar(20) NOT NULL) DEFAULT CHARSET=utf8;
|
||||
INSERT INTO t1 VALUES ('xxx'), ('aa'), ('yyy'), ('aa');
|
||||
SELECT id FROM t1;
|
||||
|
@@ -437,3 +437,11 @@ SELECT a FROM t1 WHERE MATCH a AGAINST('testword\'\'' IN BOOLEAN MODE);
|
||||
a
|
||||
testword''
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a VARCHAR(10000), FULLTEXT(a));
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(10000) default NULL,
|
||||
FULLTEXT KEY `a` (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
|
@@ -215,3 +215,24 @@ select count(*) from t1 where match a against ('aaazzz' in boolean mode);
|
||||
count(*)
|
||||
262
|
||||
drop table t1;
|
||||
set names utf8;
|
||||
create table t1(a text,fulltext(a)) collate=utf8_swedish_ci;
|
||||
insert into t1 values('test test '),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test'),
|
||||
('test'),('test'),('test'),('test'),('test'),('test'),('test'),('test');
|
||||
delete from t1 limit 1;
|
||||
drop table t1;
|
||||
set names latin1;
|
||||
|
@@ -865,6 +865,7 @@ select 1, min(a) from t1m where 1=99;
|
||||
1 NULL
|
||||
select 1, min(1) from t1m where a=99;
|
||||
1 min(1)
|
||||
1 NULL
|
||||
select 1, min(1) from t1m where 1=99;
|
||||
1 min(1)
|
||||
1 NULL
|
||||
@@ -876,6 +877,7 @@ select 1, max(a) from t1m where 1=99;
|
||||
1 NULL
|
||||
select 1, max(1) from t1m where a=99;
|
||||
1 max(1)
|
||||
1 NULL
|
||||
select 1, max(1) from t1m where 1=99;
|
||||
1 max(1)
|
||||
1 NULL
|
||||
|
@@ -615,3 +615,12 @@ show grants for root@localhost;
|
||||
Grants for root@localhost
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
|
||||
set names latin1;
|
||||
create user mysqltest_7@;
|
||||
set password for mysqltest_7@ = password('systpass');
|
||||
show grants for mysqltest_7@;
|
||||
Grants for mysqltest_7@
|
||||
GRANT USAGE ON *.* TO 'mysqltest_7'@'' IDENTIFIED BY PASSWORD '*2FB071A056F9BB745219D9C876814231DAF46517'
|
||||
drop user mysqltest_7@;
|
||||
flush privileges;
|
||||
show grants for mysqltest_7@;
|
||||
ERROR 42000: There is no such grant defined for user 'mysqltest_7' on host ''
|
||||
|
@@ -107,6 +107,17 @@ delete from mysql.columns_priv where user like 'mysqltest\_%';
|
||||
flush privileges;
|
||||
drop database mysqltest;
|
||||
use test;
|
||||
create user mysqltest_1@host1;
|
||||
create user mysqltest_2@host2;
|
||||
create user mysqltest_3@host3;
|
||||
create user mysqltest_4@host4;
|
||||
create user mysqltest_5@host5;
|
||||
create user mysqltest_6@host6;
|
||||
create user mysqltest_7@host7;
|
||||
flush privileges;
|
||||
drop user mysqltest_3@host3;
|
||||
drop user mysqltest_1@host1, mysqltest_2@host2, mysqltest_4@host4,
|
||||
mysqltest_5@host5, mysqltest_6@host6, mysqltest_7@host7;
|
||||
set sql_mode='maxdb';
|
||||
drop table if exists t1, t2;
|
||||
create table t1(c1 int);
|
||||
|
@@ -1,4 +1,4 @@
|
||||
drop table if exists t1;
|
||||
drop table if exists t1,t3,t4,t5;
|
||||
create table t1 (a int, b char(10), key a(a), key b(a,b));
|
||||
insert into t1 values
|
||||
(17,"ddd"),(18,"eee"),(19,"fff"),(19,"yyy"),
|
||||
|
2
mysql-test/r/have_euckr.require
Normal file
2
mysql-test/r/have_euckr.require
Normal file
@@ -0,0 +1,2 @@
|
||||
Collation Charset Id Default Compiled Sortlen
|
||||
euckr_korean_ci euckr 19 Yes Yes 1
|
2
mysql-test/r/have_gb2312.require
Normal file
2
mysql-test/r/have_gb2312.require
Normal file
@@ -0,0 +1,2 @@
|
||||
Collation Charset Id Default Compiled Sortlen
|
||||
gb2312_chinese_ci gb2312 24 Yes Yes 1
|
@@ -128,6 +128,19 @@ id description c
|
||||
1 test 0
|
||||
2 test2 0
|
||||
drop table t1,t2,t3;
|
||||
CREATE TABLE t1 (a int);
|
||||
INSERT INTO t1 VALUES (3), (4), (1), (3), (1);
|
||||
SELECT SUM(a) FROM t1 GROUP BY a HAVING SUM(a)>0;
|
||||
SUM(a)
|
||||
2
|
||||
6
|
||||
4
|
||||
SELECT SUM(a) FROM t1 GROUP BY a HAVING SUM(a);
|
||||
SUM(a)
|
||||
2
|
||||
6
|
||||
4
|
||||
DROP TABLE t1;
|
||||
create table t1 (col1 int, col2 varchar(5), col_t1 int);
|
||||
create table t2 (col1 int, col2 varchar(5), col_t2 int);
|
||||
create table t3 (col1 int, col2 varchar(5), col_t3 int);
|
||||
|
@@ -384,3 +384,21 @@ max(A.key1 + B.key1 + A.key2 + B.key2 + A.key3 + B.key3 + A.key4 + B.key4 + A.ke
|
||||
8186
|
||||
set join_buffer_size= @save_join_buffer_size;
|
||||
drop table t0, t1, t2, t3, t4;
|
||||
CREATE TABLE t1 (
|
||||
cola char(3) not null, colb char(3) not null, filler char(200),
|
||||
key(cola), key(colb)
|
||||
);
|
||||
INSERT INTO t1 VALUES ('foo','bar', 'ZZ'),('fuz','baz', 'ZZ');
|
||||
OPTIMIZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
8704
|
||||
explain select * from t1 WHERE cola = 'foo' AND colb = 'bar';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index_merge cola,colb cola,colb 3,3 NULL 24 Using intersect(cola,colb); Using where
|
||||
explain select * from t1 force index(cola,colb) WHERE cola = 'foo' AND colb = 'bar';
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index_merge cola,colb cola,colb 3,3 NULL 24 Using intersect(cola,colb); Using where
|
||||
drop table t1;
|
||||
|
@@ -816,40 +816,34 @@ end if;
|
||||
end|
|
||||
show triggers;
|
||||
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||
trg1 INSERT t1
|
||||
begin
|
||||
trg1 INSERT t1 begin
|
||||
if new.j > 10 then
|
||||
set new.j := 10;
|
||||
end if;
|
||||
end BEFORE NULL root@localhost
|
||||
trg2 UPDATE t1
|
||||
begin
|
||||
trg2 UPDATE t1 begin
|
||||
if old.i % 2 = 0 then
|
||||
set new.j := -1;
|
||||
end if;
|
||||
end BEFORE NULL root@localhost
|
||||
trg3 UPDATE t1
|
||||
begin
|
||||
trg3 UPDATE t1 begin
|
||||
if new.j = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
end AFTER NULL root@localhost
|
||||
select * from information_schema.triggers;
|
||||
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER
|
||||
NULL test trg1 INSERT NULL test t1 0 NULL
|
||||
begin
|
||||
NULL test trg1 INSERT NULL test t1 0 NULL begin
|
||||
if new.j > 10 then
|
||||
set new.j := 10;
|
||||
end if;
|
||||
end ROW BEFORE NULL NULL OLD NEW NULL root@localhost
|
||||
NULL test trg2 UPDATE NULL test t1 0 NULL
|
||||
begin
|
||||
NULL test trg2 UPDATE NULL test t1 0 NULL begin
|
||||
if old.i % 2 = 0 then
|
||||
set new.j := -1;
|
||||
end if;
|
||||
end ROW BEFORE NULL NULL OLD NEW NULL root@localhost
|
||||
NULL test trg3 UPDATE NULL test t1 0 NULL
|
||||
begin
|
||||
NULL test trg3 UPDATE NULL test t1 0 NULL begin
|
||||
if new.j = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
@@ -1056,3 +1050,37 @@ where table_name="v1";
|
||||
table_type
|
||||
VIEW
|
||||
drop view v1;
|
||||
create temporary table t1(f1 int, index(f1));
|
||||
show columns from t1;
|
||||
Field Type Null Key Default Extra
|
||||
f1 int(11) YES MUL NULL
|
||||
describe t1;
|
||||
Field Type Null Key Default Extra
|
||||
f1 int(11) YES MUL NULL
|
||||
show indexes from t1;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
t1 1 f1 1 f1 A NULL NULL NULL YES BTREE
|
||||
drop table t1;
|
||||
create table t1(f1 binary(32), f2 varbinary(64));
|
||||
select character_maximum_length, character_octet_length
|
||||
from information_schema.columns where table_name='t1';
|
||||
character_maximum_length character_octet_length
|
||||
32 32
|
||||
64 64
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (f1 BIGINT, f2 VARCHAR(20), f3 BIGINT);
|
||||
INSERT INTO t1 SET f1 = 1, f2 = 'Schoenenbourg', f3 = 1;
|
||||
CREATE FUNCTION func2() RETURNS BIGINT RETURN 1;
|
||||
CREATE FUNCTION func1() RETURNS BIGINT
|
||||
BEGIN
|
||||
RETURN ( SELECT COUNT(*) FROM INFORMATION_SCHEMA.VIEWS);
|
||||
END//
|
||||
CREATE VIEW v1 AS SELECT 1 FROM t1
|
||||
WHERE f3 = (SELECT func2 ());
|
||||
SELECT func1();
|
||||
func1()
|
||||
1
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
DROP FUNCTION func1;
|
||||
DROP FUNCTION func2;
|
||||
|
1
mysql-test/r/init_file.result
Normal file
1
mysql-test/r/init_file.result
Normal file
@@ -0,0 +1 @@
|
||||
ok
|
@@ -2718,6 +2718,32 @@ insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
|
||||
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
1 61626364656667 61626364656667 boo
|
||||
4 D0B1 D0B1 eight
|
||||
4 5B 5B five
|
||||
4 E880BD E880BD four
|
||||
4 E880BDD0B1E880BD E880BDD0B1E880BD seven
|
||||
4 E880BDE880BD E880BDE880BD six
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
4 05630563 05630563 email
|
||||
4 0563 0563 email
|
||||
4 05612020 05612020 email
|
||||
4 01FC 01FC email
|
||||
4 0120 0120 email
|
||||
4 00640065 00640065 email
|
||||
4 00E400E50068 00E400E50068 email
|
||||
4 0000E400 0000E400 email
|
||||
4 0000563001FC0563 0000563001FC0563 email
|
||||
1 0061006200630064006500660067 0061006200630064006500660067 one
|
||||
3 0071007200730074007500760077 0071007200730074007500760077 three
|
||||
2 0069006A006B0069006C006D006E 0069006A006B0069006C006D006E two
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
create table t1 (
|
||||
@@ -2746,6 +2772,32 @@ insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
|
||||
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
1 61626364656667 61626364656667 boo
|
||||
4 D0B1 D0B1 eight
|
||||
4 5B 5B five
|
||||
4 E880BD E880BD four
|
||||
4 E880BDD0B1E880BD E880BDD0B1E880BD seven
|
||||
4 E880BDE880BD E880BDE880BD six
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
4 05630563 05630563 email
|
||||
4 0563 0563 email
|
||||
4 05612020 05612020 email
|
||||
4 01FC 01FC email
|
||||
4 0120 0120 email
|
||||
4 00640065 00640065 email
|
||||
4 00E400E50068 00E400E50068 email
|
||||
4 0000E400 0000E400 email
|
||||
4 0000563001FC0563 0000563001FC0563 email
|
||||
1 0061006200630064006500660067 0061006200630064006500660067 one
|
||||
3 0071007200730074007500760077 0071007200730074007500760077 three
|
||||
2 0069006A006B0069006C006D006E 0069006A006B0069006C006D006E two
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
create table t1 (
|
||||
@@ -2774,6 +2826,32 @@ insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05630563,_ucs2 0x05630563,'eleven');
|
||||
insert into t2 values (4,_ucs2 0x0563001fc0563,_ucs2 0x0563001fc0563,'point');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
1 61626364656667 61626364656667 boo
|
||||
4 D0B1 D0B1 eight
|
||||
4 5B 5B five
|
||||
4 E880BD E880BD four
|
||||
4 E880BDD0B1E880BD E880BDD0B1E880BD seven
|
||||
4 E880BDE880BD E880BDE880BD six
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
4 0120 0120 email
|
||||
4 01FC 01FC email
|
||||
4 0563 0563 email
|
||||
4 0000563001FC0563 0000563001FC0563 email
|
||||
4 0000E400 0000E400 email
|
||||
4 00640065 00640065 email
|
||||
4 00E400E50068 00E400E50068 email
|
||||
4 05612020 05612020 email
|
||||
4 05630563 05630563 email
|
||||
1 0061006200630064006500660067 0061006200630064006500660067 one
|
||||
3 0071007200730074007500760077 0071007200730074007500760077 three
|
||||
2 0069006A006B0069006C006D006E 0069006A006B0069006C006D006E two
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
create table t1 (
|
||||
@@ -2798,6 +2876,28 @@ insert into t2 values (4,_ucs2 0x01fc,_ucs2 0x01fc,'seven');
|
||||
insert into t2 values (4,_ucs2 0x0120,_ucs2 0x0120,'eight');
|
||||
insert into t2 values (4,_ucs2 0x0563,_ucs2 0x0563,'ten');
|
||||
insert into t2 values (4,_ucs2 0x05612020,_ucs2 0x05612020,'taken');
|
||||
update t1 set filler = 'boo' where a = 1;
|
||||
update t2 set filler ='email' where a = 4;
|
||||
select a,hex(b),hex(c),filler from t1 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
1 61626364656667 61626364656667 boo
|
||||
4 D0B1 D0B1 eight
|
||||
4 5B 5B five
|
||||
4 E880BD E880BD four
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
select a,hex(b),hex(c),filler from t2 order by filler;
|
||||
a hex(b) hex(c) filler
|
||||
4 0000E400 0000E400 email
|
||||
4 00640065 00640065 email
|
||||
4 00E400E50068 00E400E50068 email
|
||||
4 0120 0120 email
|
||||
4 01FC 01FC email
|
||||
4 05612020 05612020 email
|
||||
4 0563 0563 email
|
||||
1 61626364656667 61626364656667 one
|
||||
3 71727374757677 71727374757677 three
|
||||
2 696A6B696C6D6E 696A6B696C6D6E two
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
commit;
|
||||
@@ -2833,19 +2933,6 @@ rename table t3 to t1;
|
||||
ERROR HY000: Error on rename of './test/t3' to './test/t1' (errno: 150)
|
||||
set foreign_key_checks=1;
|
||||
drop table t2,t3;
|
||||
create table t1 (a varchar(255) character set utf8,
|
||||
b varchar(255) character set utf8,
|
||||
c varchar(255) character set utf8,
|
||||
d varchar(255) character set utf8,
|
||||
key (a,b,c,d)) engine=innodb;
|
||||
drop table t1;
|
||||
create table t1 (a varchar(255) character set utf8,
|
||||
b varchar(255) character set utf8,
|
||||
c varchar(255) character set utf8,
|
||||
d varchar(255) character set utf8,
|
||||
e varchar(255) character set utf8,
|
||||
key (a,b,c,d,e)) engine=innodb;
|
||||
ERROR 42000: Specified key was too long; max key length is 3072 bytes
|
||||
create table t1(a int primary key) row_format=redundant engine=innodb;
|
||||
create table t2(a int primary key,constraint foreign key(a)references t1(a)) row_format=compact engine=innodb;
|
||||
create table t3(a int primary key) row_format=compact engine=innodb;
|
||||
@@ -2875,4 +2962,221 @@ truncate t4;
|
||||
truncate t1;
|
||||
truncate t3;
|
||||
drop table t4,t3,t2,t1;
|
||||
End of 5.0 tests
|
||||
create table t1 (a varchar(255) character set utf8,
|
||||
b varchar(255) character set utf8,
|
||||
c varchar(255) character set utf8,
|
||||
d varchar(255) character set utf8,
|
||||
key (a,b,c,d)) engine=innodb;
|
||||
drop table t1;
|
||||
create table t1 (a varchar(255) character set utf8,
|
||||
b varchar(255) character set utf8,
|
||||
c varchar(255) character set utf8,
|
||||
d varchar(255) character set utf8,
|
||||
e varchar(255) character set utf8,
|
||||
key (a,b,c,d,e)) engine=innodb;
|
||||
ERROR 42000: Specified key was too long; max key length is 3072 bytes
|
||||
create table t1 (s1 varbinary(2),primary key (s1)) engine=innodb;
|
||||
create table t2 (s1 binary(2),primary key (s1)) engine=innodb;
|
||||
create table t3 (s1 varchar(2) binary,primary key (s1)) engine=innodb;
|
||||
create table t4 (s1 char(2) binary,primary key (s1)) engine=innodb;
|
||||
insert into t1 values (0x41),(0x4120),(0x4100);
|
||||
insert into t2 values (0x41),(0x4120),(0x4100);
|
||||
ERROR 23000: Duplicate entry 'A' for key 1
|
||||
insert into t2 values (0x41),(0x4120);
|
||||
insert into t3 values (0x41),(0x4120),(0x4100);
|
||||
ERROR 23000: Duplicate entry 'A ' for key 1
|
||||
insert into t3 values (0x41),(0x4100);
|
||||
insert into t4 values (0x41),(0x4120),(0x4100);
|
||||
ERROR 23000: Duplicate entry 'A' for key 1
|
||||
insert into t4 values (0x41),(0x4100);
|
||||
select hex(s1) from t1;
|
||||
hex(s1)
|
||||
41
|
||||
4100
|
||||
4120
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
4100
|
||||
4120
|
||||
select hex(s1) from t3;
|
||||
hex(s1)
|
||||
4100
|
||||
41
|
||||
select hex(s1) from t4;
|
||||
hex(s1)
|
||||
4100
|
||||
41
|
||||
drop table t1,t2,t3,t4;
|
||||
create table t1 (a int primary key,s1 varbinary(3) not null unique) engine=innodb;
|
||||
create table t2 (s1 binary(2) not null, constraint c foreign key(s1) references t1(s1) on update cascade) engine=innodb;
|
||||
insert into t1 values(1,0x4100),(2,0x41),(3,0x4120),(4,0x42);
|
||||
insert into t2 values(0x42);
|
||||
ERROR 23000: Cannot add or update a child row: a foreign key constraint fails (`test/t2`, CONSTRAINT `c` FOREIGN KEY (`s1`) REFERENCES `t1` (`s1`) ON UPDATE CASCADE)
|
||||
insert into t2 values(0x41);
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
4100
|
||||
update t1 set s1=0x123456 where a=2;
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
4100
|
||||
update t1 set s1=0x12 where a=1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test/t2`, CONSTRAINT `c` FOREIGN KEY (`s1`) REFERENCES `t1` (`s1`) ON UPDATE CASCADE)
|
||||
update t1 set s1=0x12345678 where a=1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test/t2`, CONSTRAINT `c` FOREIGN KEY (`s1`) REFERENCES `t1` (`s1`) ON UPDATE CASCADE)
|
||||
update t1 set s1=0x123457 where a=1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test/t2`, CONSTRAINT `c` FOREIGN KEY (`s1`) REFERENCES `t1` (`s1`) ON UPDATE CASCADE)
|
||||
update t1 set s1=0x1220 where a=1;
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
1220
|
||||
update t1 set s1=0x1200 where a=1;
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
1200
|
||||
update t1 set s1=0x4200 where a=1;
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
4200
|
||||
delete from t1 where a=1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test/t2`, CONSTRAINT `c` FOREIGN KEY (`s1`) REFERENCES `t1` (`s1`) ON UPDATE CASCADE)
|
||||
delete from t1 where a=2;
|
||||
update t2 set s1=0x4120;
|
||||
delete from t1;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test/t2`, CONSTRAINT `c` FOREIGN KEY (`s1`) REFERENCES `t1` (`s1`) ON UPDATE CASCADE)
|
||||
delete from t1 where a!=3;
|
||||
select a,hex(s1) from t1;
|
||||
a hex(s1)
|
||||
3 4120
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
4120
|
||||
drop table t2,t1;
|
||||
create table t1 (a int primary key,s1 varchar(2) binary not null unique) engine=innodb;
|
||||
create table t2 (s1 char(2) binary not null, constraint c foreign key(s1) references t1(s1) on update cascade) engine=innodb;
|
||||
insert into t1 values(1,0x4100),(2,0x41);
|
||||
insert into t2 values(0x41);
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
41
|
||||
update t1 set s1=0x1234 where a=1;
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
41
|
||||
update t1 set s1=0x12 where a=2;
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
12
|
||||
delete from t1 where a=1;
|
||||
delete from t1 where a=2;
|
||||
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails (`test/t2`, CONSTRAINT `c` FOREIGN KEY (`s1`) REFERENCES `t1` (`s1`) ON UPDATE CASCADE)
|
||||
select a,hex(s1) from t1;
|
||||
a hex(s1)
|
||||
2 12
|
||||
select hex(s1) from t2;
|
||||
hex(s1)
|
||||
12
|
||||
drop table t2,t1;
|
||||
CREATE TABLE t1 (
|
||||
ind enum('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE t2 (
|
||||
ind enum('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=ucs2;
|
||||
INSERT INTO t1 VALUES ('1', ''),('2', '');
|
||||
INSERT INTO t2 VALUES ('1', ''),('2', '');
|
||||
SELECT hex(ind),hex(string1) FROM t1 ORDER BY string1;
|
||||
hex(ind) hex(string1)
|
||||
31
|
||||
32
|
||||
SELECT hex(ind),hex(string1) FROM t2 ORDER BY string1;
|
||||
hex(ind) hex(string1)
|
||||
0031
|
||||
0032
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 (
|
||||
ind set('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE t2 (
|
||||
ind set('0','1','2') NOT NULL default '0',
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=ucs2;
|
||||
INSERT INTO t1 VALUES ('1', ''),('2', '');
|
||||
INSERT INTO t2 VALUES ('1', ''),('2', '');
|
||||
SELECT hex(ind),hex(string1) FROM t1 ORDER BY string1;
|
||||
hex(ind) hex(string1)
|
||||
31
|
||||
32
|
||||
SELECT hex(ind),hex(string1) FROM t2 ORDER BY string1;
|
||||
hex(ind) hex(string1)
|
||||
0031
|
||||
0032
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 (
|
||||
ind bit not null,
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE t2 (
|
||||
ind bit not null,
|
||||
string1 varchar(250) NOT NULL,
|
||||
PRIMARY KEY (ind)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=ucs2;
|
||||
insert into t1 values(0,''),(1,'');
|
||||
insert into t2 values(0,''),(1,'');
|
||||
select hex(ind),hex(string1) from t1 order by string1;
|
||||
hex(ind) hex(string1)
|
||||
0
|
||||
1
|
||||
select hex(ind),hex(string1) from t2 order by string1;
|
||||
hex(ind) hex(string1)
|
||||
0
|
||||
1
|
||||
drop table t1,t2;
|
||||
create table t2 (
|
||||
a int, b char(10), filler char(10), primary key(a, b(2))
|
||||
) character set utf8 engine = innodb;
|
||||
insert into t2 values (1,'abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','two');
|
||||
insert into t2 values (3, 'qrstuvw','three');
|
||||
update t2 set a=5, filler='booo' where a=1;
|
||||
drop table t2;
|
||||
create table t2 (
|
||||
a int, b char(10), filler char(10), primary key(a, b(2))
|
||||
) character set ucs2 engine = innodb;
|
||||
insert into t2 values (1,'abcdefg','one');
|
||||
insert into t2 values (2,'ijkilmn','two');
|
||||
insert into t2 values (3, 'qrstuvw','three');
|
||||
update t2 set a=5, filler='booo' where a=1;
|
||||
drop table t2;
|
||||
create table t1(a int not null, b char(110),primary key(a,b(100))) engine=innodb default charset=utf8;
|
||||
insert into t1 values(1,'abcdefg'),(2,'defghijk');
|
||||
insert into t1 values(6,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1);
|
||||
insert into t1 values(7,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2);
|
||||
select a,hex(b) from t1 order by b;
|
||||
a hex(b)
|
||||
1 61626364656667
|
||||
2 6465666768696A6B
|
||||
6 D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1
|
||||
7 D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2
|
||||
update t1 set b = 'three' where a = 6;
|
||||
drop table t1;
|
||||
create table t1(a int not null, b text(110),primary key(a,b(100))) engine=innodb default charset=utf8;
|
||||
insert into t1 values(1,'abcdefg'),(2,'defghijk');
|
||||
insert into t1 values(6,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1);
|
||||
insert into t1 values(7,_utf8 0xD0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2);
|
||||
select a,hex(b) from t1 order by b;
|
||||
a hex(b)
|
||||
1 61626364656667
|
||||
2 6465666768696A6B
|
||||
6 D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1
|
||||
7 D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B1D0B2
|
||||
update t1 set b = 'three' where a = 6;
|
||||
drop table t1;
|
||||
|
48
mysql-test/r/innodb_unsafe_binlog.result
Normal file
48
mysql-test/r/innodb_unsafe_binlog.result
Normal file
@@ -0,0 +1,48 @@
|
||||
drop table if exists t1,t2;
|
||||
create table t1 (id int not null, f_id int not null, f int not null,
|
||||
primary key(f_id, id)) engine=innodb;
|
||||
create table t2 (id int not null,s_id int not null,s varchar(200),
|
||||
primary key(id)) engine=innodb;
|
||||
INSERT INTO t1 VALUES (8, 1, 3);
|
||||
INSERT INTO t1 VALUES (1, 2, 1);
|
||||
INSERT INTO t2 VALUES (1, 0, '');
|
||||
INSERT INTO t2 VALUES (8, 1, '');
|
||||
commit;
|
||||
DELETE ml.* FROM t1 AS ml LEFT JOIN t2 AS mm ON (mm.id=ml.id)
|
||||
WHERE mm.id IS NULL;
|
||||
select ml.* from t1 as ml left join t2 as mm on (mm.id=ml.id)
|
||||
where mm.id is null lock in share mode;
|
||||
id f_id f
|
||||
drop table t1,t2;
|
||||
create table t1 (id int not null, f_id int not null, f int not null,
|
||||
primary key(id),key(f_id)) engine=innodb;
|
||||
create table t2 (id int not null,s_id int not null,s varchar(200),
|
||||
primary key(id),key(s_id)) engine=innodb;
|
||||
INSERT INTO t1 VALUES (8, 1, 3);
|
||||
INSERT INTO t1 VALUES (1, 2, 1);
|
||||
INSERT INTO t2 VALUES (1, 0, '');
|
||||
INSERT INTO t2 VALUES (8, 1, '');
|
||||
commit;
|
||||
delete ml.* from t1 as ml left join t2 as mm on (mm.s_id=ml.f_id) where mm.s is null;
|
||||
select ml.* from t1 as ml left join t2 as mm on (mm.s_id=ml.f_id) where mm.s is null lock in share mode;
|
||||
id f_id f
|
||||
drop table t1,t2;
|
||||
create table t1(a int not null, b int, primary key(a)) engine=innodb;
|
||||
insert into t1 values(1,1),(2,2),(3,1),(4,2),(5,1),(6,2);
|
||||
commit;
|
||||
set autocommit = 0;
|
||||
select * from t1 lock in share mode;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
3 1
|
||||
4 2
|
||||
5 1
|
||||
6 2
|
||||
update t1 set b = 5 where b = 1;
|
||||
set autocommit = 0;
|
||||
select * from t1 where a = 2 and b = 2 for update;
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
commit;
|
||||
commit;
|
||||
drop table t1;
|
@@ -960,7 +960,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 Using where
|
||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t5 ALL idx_b NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t8 ALL NULL NULL NULL NULL 2 Using where
|
||||
@@ -1009,7 +1009,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 Using where
|
||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t5 ALL idx_b NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t8 ref idx_b idx_b 5 test.t5.b 2 Using where
|
||||
@@ -1059,7 +1059,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t3 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t4 ref idx_b idx_b 5 test.t2.b 2 Using where
|
||||
1 SIMPLE t5 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t5 ALL idx_b NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t7 ALL NULL NULL NULL NULL 2 Using where
|
||||
1 SIMPLE t6 ALL NULL NULL NULL NULL 3 Using where
|
||||
1 SIMPLE t8 ref idx_b idx_b 5 test.t5.b 2 Using where
|
||||
@@ -1467,3 +1467,17 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t6 ref a a 5 test.t4.b X
|
||||
1 SIMPLE t5 ref a a 5 test.t3.b X
|
||||
drop table t0, t1, t2, t3, t4, t5, t6, t7;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t2 (a int, filler char(100), key(a));
|
||||
insert into t2 select A.a + 10*B.a, '' from t1 A, t1 B;
|
||||
create table t3 like t2;
|
||||
insert into t3 select * from t2;
|
||||
explain select * from t1 left join
|
||||
(t2 left join t3 on (t2.a = t3.a))
|
||||
on (t1.a = t2.a);
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 10
|
||||
1 SIMPLE t2 ref a a 5 test.t1.a 1
|
||||
1 SIMPLE t3 ref a a 5 test.t2.a 1
|
||||
drop table t1, t2, t3;
|
||||
|
@@ -5,8 +5,6 @@ select ((@id := kill_id) - kill_id) from t1;
|
||||
((@id := kill_id) - kill_id)
|
||||
0
|
||||
kill @id;
|
||||
select 1;
|
||||
Got one of the listed errors
|
||||
select ((@id := kill_id) - kill_id) from t1;
|
||||
((@id := kill_id) - kill_id)
|
||||
0
|
||||
|
@@ -719,3 +719,52 @@ SELECT b FROM t2;
|
||||
b
|
||||
3
|
||||
DROP TABLE t1, t2;
|
||||
create table t1(a int);
|
||||
create table t2(a int);
|
||||
insert into t1 values (1);
|
||||
insert into t2 values (2);
|
||||
create table t3 (a int) engine=merge union=(t1, t2) insert_method=first;
|
||||
select * from t3;
|
||||
a
|
||||
1
|
||||
2
|
||||
insert t2 select * from t2;
|
||||
select * from t2;
|
||||
a
|
||||
2
|
||||
2
|
||||
insert t3 select * from t1;
|
||||
select * from t3;
|
||||
a
|
||||
1
|
||||
1
|
||||
2
|
||||
2
|
||||
insert t1 select * from t3;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
2
|
||||
2
|
||||
select * from t2;
|
||||
a
|
||||
2
|
||||
2
|
||||
select * from t3;
|
||||
a
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
2
|
||||
2
|
||||
2
|
||||
2
|
||||
check table t1, t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
test.t2 check status OK
|
||||
drop table t1, t2, t3;
|
||||
|
1
mysql-test/r/mysql_client_test.result
Normal file
1
mysql-test/r/mysql_client_test.result
Normal file
@@ -0,0 +1 @@
|
||||
ok
|
@@ -1937,8 +1937,7 @@ end|
|
||||
set sql_mode=default|
|
||||
show triggers like "t1";
|
||||
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||
trg1 INSERT t1
|
||||
begin
|
||||
trg1 INSERT t1 begin
|
||||
if new.a > 10 then
|
||||
set new.a := 10;
|
||||
set new.a := 11;
|
||||
@@ -1947,8 +1946,7 @@ end BEFORE 0000-00-00 00:00:00 root@localhost
|
||||
trg2 UPDATE t1 begin
|
||||
if old.a % 2 = 0 then set new.b := 12; end if;
|
||||
end BEFORE 0000-00-00 00:00:00 root@localhost
|
||||
trg3 UPDATE t1
|
||||
begin
|
||||
trg3 UPDATE t1 begin
|
||||
if new.a = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
@@ -1986,8 +1984,7 @@ UNLOCK TABLES;
|
||||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER ;;
|
||||
/*!50003 SET SESSION SQL_MODE="" */;;
|
||||
/*!50003 CREATE TRIGGER `trg1` BEFORE INSERT ON `t1` FOR EACH ROW
|
||||
begin
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `trg1` BEFORE INSERT ON `t1` FOR EACH ROW begin
|
||||
if new.a > 10 then
|
||||
set new.a := 10;
|
||||
set new.a := 11;
|
||||
@@ -1995,13 +1992,12 @@ end if;
|
||||
end */;;
|
||||
|
||||
/*!50003 SET SESSION SQL_MODE="" */;;
|
||||
/*!50003 CREATE TRIGGER `trg2` BEFORE UPDATE ON `t1` FOR EACH ROW begin
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `trg2` BEFORE UPDATE ON `t1` FOR EACH ROW begin
|
||||
if old.a % 2 = 0 then set new.b := 12; end if;
|
||||
end */;;
|
||||
|
||||
/*!50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER" */;;
|
||||
/*!50003 CREATE TRIGGER `trg3` AFTER UPDATE ON `t1` FOR EACH ROW
|
||||
begin
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `trg3` AFTER UPDATE ON `t1` FOR EACH ROW begin
|
||||
if new.a = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
@@ -2023,8 +2019,7 @@ UNLOCK TABLES;
|
||||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER ;;
|
||||
/*!50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER" */;;
|
||||
/*!50003 CREATE TRIGGER `trg4` BEFORE INSERT ON `t2` FOR EACH ROW
|
||||
begin
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `trg4` BEFORE INSERT ON `t2` FOR EACH ROW begin
|
||||
if new.a > 10 then
|
||||
set @fired:= "No";
|
||||
end if;
|
||||
@@ -2096,8 +2091,7 @@ t1
|
||||
t2
|
||||
show triggers;
|
||||
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||
trg1 INSERT t1
|
||||
begin
|
||||
trg1 INSERT t1 begin
|
||||
if new.a > 10 then
|
||||
set new.a := 10;
|
||||
set new.a := 11;
|
||||
@@ -2106,14 +2100,12 @@ end BEFORE # root@localhost
|
||||
trg2 UPDATE t1 begin
|
||||
if old.a % 2 = 0 then set new.b := 12; end if;
|
||||
end BEFORE # root@localhost
|
||||
trg3 UPDATE t1
|
||||
begin
|
||||
trg3 UPDATE t1 begin
|
||||
if new.a = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
end AFTER # STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER root@localhost
|
||||
trg4 INSERT t2
|
||||
begin
|
||||
trg4 INSERT t2 begin
|
||||
if new.a > 10 then
|
||||
set @fired:= "No";
|
||||
end if;
|
||||
@@ -2376,7 +2368,7 @@ UNLOCK TABLES;
|
||||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER ;;
|
||||
/*!50003 SET SESSION SQL_MODE="" */;;
|
||||
/*!50003 CREATE TRIGGER `test trig` BEFORE INSERT ON `t1 test` FOR EACH ROW BEGIN
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `test trig` BEFORE INSERT ON `t1 test` FOR EACH ROW BEGIN
|
||||
INSERT INTO `t2 test` SET a2 = NEW.a1; END */;;
|
||||
|
||||
DELIMITER ;
|
||||
@@ -2532,7 +2524,7 @@ UNLOCK TABLES;
|
||||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER ;;
|
||||
/*!50003 SET SESSION SQL_MODE="IGNORE_SPACE" */;;
|
||||
/*!50003 CREATE TRIGGER `tr1` BEFORE INSERT ON `t1` FOR EACH ROW BEGIN
|
||||
/*!50003 CREATE */ /*!50017 DEFINER=`root`@`localhost` */ /*!50003 TRIGGER `tr1` BEFORE INSERT ON `t1` FOR EACH ROW BEGIN
|
||||
SET new.a = 0;
|
||||
END */;;
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
DROP TABLE IF EXISTS t1,t2,test1,test2;
|
||||
CREATE TABLE t1 (a int);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
CREATE TABLE t2 (a int, b int);
|
||||
|
@@ -16,7 +16,7 @@ otto
|
||||
mysqltest: At line 1: query 'select otto from (select 1 as otto) as t1' succeeded - should have failed with sqlstate 42S22...
|
||||
select friedrich from (select 1 as otto) as t1;
|
||||
ERROR 42S22: Unknown column 'friedrich' in 'field list'
|
||||
mysqltest: At line 1: query 'select friedrich from (select 1 as otto) as t1' failed with wrong sqlstate 42S22 instead of 00000...
|
||||
mysqltest: At line 1: query 'select friedrich from (select 1 as otto) as t1' failed with wrong sqlstate 42S22: 'Unknown column 'friedrich' in 'field list'', instead of 00000...
|
||||
select otto from (select 1 as otto) as t1;
|
||||
otto
|
||||
1
|
||||
@@ -133,7 +133,7 @@ ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
select 1146 as "after_!errno_masked_error" ;
|
||||
after_!errno_masked_error
|
||||
1146
|
||||
mysqltest: At line 1: query 'select 3 from t1' failed with wrong errno 1146 instead of 1000...
|
||||
mysqltest: At line 1: query 'select 3 from t1' failed with wrong errno 1146: 'Table 'test.t1' doesn't exist', instead of 1000...
|
||||
garbage ;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'garbage' at line 1
|
||||
select 1064 as "after_--enable_abort_on_error" ;
|
||||
@@ -141,7 +141,7 @@ after_--enable_abort_on_error
|
||||
1064
|
||||
select 3 from t1 ;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
mysqltest: At line 1: query 'select 3 from t1' failed with wrong errno 1146 instead of 1064...
|
||||
mysqltest: At line 1: query 'select 3 from t1' failed with wrong errno 1146: 'Table 'test.t1' doesn't exist', instead of 1064...
|
||||
hello
|
||||
hello
|
||||
;;;;;;;;
|
||||
@@ -149,6 +149,9 @@ hello
|
||||
mysqltest: At line 1: End of line junk detected: "6"
|
||||
mysqltest: At line 1: End of line junk detected: "6"
|
||||
mysqltest: At line 1: Missing delimiter
|
||||
mysqltest: At line 1: End of line junk detected: "sleep 7
|
||||
# Another comment
|
||||
"
|
||||
mysqltest: At line 1: Extra delimiter ";" found
|
||||
mysqltest: At line 1: Extra delimiter ";" found
|
||||
MySQL
|
||||
@@ -301,6 +304,7 @@ mysqltest: At line 1: End of line junk detected: "1000"
|
||||
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
||||
mysqltest: At line 1: Missing arguments to system, nothing to do!
|
||||
mysqltest: At line 1: system command 'false' failed
|
||||
system command 'NonExistsinfComamdn 2> /dev/null' failed
|
||||
test
|
||||
test2
|
||||
test3
|
||||
@@ -328,6 +332,7 @@ mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_re
|
||||
mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a;'
|
||||
mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a'
|
||||
mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a '
|
||||
OK
|
||||
mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a b c'
|
||||
mysqltest: At line 1: Wrong number of arguments to replace_result in 'replace_result a b c '
|
||||
select "a" as col1, "c" as col2;
|
||||
@@ -350,12 +355,14 @@ mysqltest: At line 1: Missing connection user
|
||||
mysqltest: At line 1: Missing connection user
|
||||
mysqltest: At line 1: Missing connection password
|
||||
mysqltest: At line 1: Missing connection db
|
||||
mysqltest: At line 1: Could not open connection 'con2': Unknown database 'illegal_db'
|
||||
mysqltest: At line 1: Could not open connection 'con2': 1049 Unknown database 'illegal_db'
|
||||
mysqltest: At line 1: Illegal argument for port: 'illegal_port'
|
||||
mysqltest: At line 1: Illegal option to connect: SMTP
|
||||
OK
|
||||
mysqltest: In included file "./var/tmp/con.sql": At line 7: Connection limit exhausted - increase MAX_CONS in mysqltest.c
|
||||
mysqltest: In included file "./var/tmp/con.sql": At line 3: connection 'test_con1' not found in connection pool
|
||||
mysqltest: In included file "./var/tmp/con.sql": At line 2: Connection test_con1 already exists
|
||||
connect(localhost,root,,test,MASTER_PORT,MASTER_SOCKET);
|
||||
Output from mysqltest-x.inc
|
||||
Output from mysqltest-x.inc
|
||||
Output from mysqltest-x.inc
|
||||
@@ -391,12 +398,20 @@ root@localhost
|
||||
--------------------------------------------------------------------------------
|
||||
this will be executed
|
||||
this will be executed
|
||||
mysqltest: Result length mismatch
|
||||
mysqltest: The test didn't produce any output
|
||||
Failing multi statement query
|
||||
mysqltest: At line 3: query 'create table t1 (a int primary key);
|
||||
insert into t1 values (1);
|
||||
select 'select-me';
|
||||
insertz 'error query'' failed: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insertz 'error query'' at line 1
|
||||
drop table t1;
|
||||
mysqltest: At line 3: query 'create table t1 (a int primary key);
|
||||
insert into t1 values (1);
|
||||
select 'select-me';
|
||||
insertz 'error query'' failed: 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insertz 'error query'' at line 1
|
||||
drop table t1;
|
||||
Multi statement using expected error
|
||||
create table t1 (a int primary key);
|
||||
insert into t1 values (1);
|
||||
select 'select-me';
|
||||
@@ -405,11 +420,4 @@ select-me
|
||||
select-me
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insertz error query' at line 1
|
||||
drop table t1;
|
||||
create table t1 (a int primary key);
|
||||
insert into t1 values (1);
|
||||
select 'select-me';
|
||||
insertz error query||||
|
||||
select-me
|
||||
select-me
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'insertz error query' at line 1
|
||||
drop table t1;
|
||||
|
@@ -208,3 +208,9 @@ b bit(9),
|
||||
key(b)
|
||||
) engine=ndbcluster;
|
||||
ERROR HY000: Can't create table './test/t1.frm' (errno: 743)
|
||||
create table t1 (
|
||||
pk1 int primary key,
|
||||
b bit(32) not null
|
||||
) engine=ndbcluster;
|
||||
insert into t1 values (1,1);
|
||||
drop table t1;
|
||||
|
@@ -825,6 +825,40 @@ execute stmt;
|
||||
drop table t1;
|
||||
set names default;
|
||||
deallocate prepare stmt;
|
||||
create table t1 (
|
||||
word_id mediumint(8) unsigned not null default '0',
|
||||
formatted varchar(20) not null default ''
|
||||
);
|
||||
insert into t1 values
|
||||
(80,'pendant'), (475,'pretendants'), (989,'tendances'),
|
||||
(1019,'cependant'),(1022,'abondance'),(1205,'independants'),
|
||||
(13,'lessiver'),(25,'lambiner'),(46,'situer'),(71,'terminer'),
|
||||
(82,'decrocher');
|
||||
select count(*) from t1 where formatted like '%NDAN%';
|
||||
count(*)
|
||||
6
|
||||
select count(*) from t1 where formatted like '%ER';
|
||||
count(*)
|
||||
5
|
||||
prepare stmt from "select count(*) from t1 where formatted like ?";
|
||||
set @like="%NDAN%";
|
||||
execute stmt using @like;
|
||||
count(*)
|
||||
6
|
||||
set @like="%ER";
|
||||
execute stmt using @like;
|
||||
count(*)
|
||||
5
|
||||
set @like="%NDAN%";
|
||||
execute stmt using @like;
|
||||
count(*)
|
||||
6
|
||||
set @like="%ER";
|
||||
execute stmt using @like;
|
||||
count(*)
|
||||
5
|
||||
deallocate prepare stmt;
|
||||
drop table t1;
|
||||
create table t1 (id int);
|
||||
prepare ins_call from "insert into t1 (id) values (1)";
|
||||
execute ins_call;
|
||||
|
@@ -85,6 +85,8 @@ c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
9 9 9 9 9 9 9 9 9 9 9.0000 9.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 0 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext two tuesday
|
||||
set @arg00='SELECT' ;
|
||||
@arg00 a from t1 where a=1;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@arg00 a from t1 where a=1' at line 1
|
||||
prepare stmt1 from ' ? a from t1 where a=1 ';
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? a from t1 where a=1' at line 1
|
||||
set @arg00=1 ;
|
||||
|
@@ -85,6 +85,8 @@ c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
9 9 9 9 9 9 9 9 9 9 9.0000 9.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 0 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext two tuesday
|
||||
set @arg00='SELECT' ;
|
||||
@arg00 a from t1 where a=1;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@arg00 a from t1 where a=1' at line 1
|
||||
prepare stmt1 from ' ? a from t1 where a=1 ';
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? a from t1 where a=1' at line 1
|
||||
set @arg00=1 ;
|
||||
|
@@ -86,6 +86,8 @@ c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
9 9 9 9 9 9 9 9 9 9 9.0000 9.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 0 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext two tuesday
|
||||
set @arg00='SELECT' ;
|
||||
@arg00 a from t1 where a=1;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@arg00 a from t1 where a=1' at line 1
|
||||
prepare stmt1 from ' ? a from t1 where a=1 ';
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? a from t1 where a=1' at line 1
|
||||
set @arg00=1 ;
|
||||
|
@@ -128,6 +128,8 @@ c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
9 9 9 9 9 9 9 9 9 9 9.0000 9.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 0 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext two tuesday
|
||||
set @arg00='SELECT' ;
|
||||
@arg00 a from t1 where a=1;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@arg00 a from t1 where a=1' at line 1
|
||||
prepare stmt1 from ' ? a from t1 where a=1 ';
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? a from t1 where a=1' at line 1
|
||||
set @arg00=1 ;
|
||||
@@ -3140,6 +3142,8 @@ c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
9 9 9 9 9 9 9 9 9 9 9.0000 9.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 0 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext two tuesday
|
||||
set @arg00='SELECT' ;
|
||||
@arg00 a from t1 where a=1;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@arg00 a from t1 where a=1' at line 1
|
||||
prepare stmt1 from ' ? a from t1 where a=1 ';
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? a from t1 where a=1' at line 1
|
||||
set @arg00=1 ;
|
||||
|
@@ -85,6 +85,8 @@ c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
9 9 9 9 9 9 9 9 9 9 9.0000 9.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 0 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext two tuesday
|
||||
set @arg00='SELECT' ;
|
||||
@arg00 a from t1 where a=1;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@arg00 a from t1 where a=1' at line 1
|
||||
prepare stmt1 from ' ? a from t1 where a=1 ';
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? a from t1 where a=1' at line 1
|
||||
set @arg00=1 ;
|
||||
|
@@ -85,6 +85,8 @@ c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 c16 c17 c18 c19 c20 c21 c22 c
|
||||
1 1 1 1 1 1 1 1 1 1 1.0000 1.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 1 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext one monday
|
||||
9 9 9 9 9 9 9 9 9 9 9.0000 9.0000 2004-02-29 2004-02-29 11:11:11 2004-02-29 11:11:11 11:11:11 2004 1 0 a 123456789a 123456789a123456789b123456789c tinyblob tinytext blob text mediumblob mediumtext longblob longtext two tuesday
|
||||
set @arg00='SELECT' ;
|
||||
@arg00 a from t1 where a=1;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@arg00 a from t1 where a=1' at line 1
|
||||
prepare stmt1 from ' ? a from t1 where a=1 ';
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? a from t1 where a=1' at line 1
|
||||
set @arg00=1 ;
|
||||
|
@@ -50,7 +50,7 @@ select (@id := id) - id from t2;
|
||||
0
|
||||
kill @id;
|
||||
drop table t2;
|
||||
ERROR 08S01: Server shutdown in progress
|
||||
Got one of the listed errors
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
select count(*) from t1;
|
||||
|
28
mysql-test/r/rpl_ignore_revoke.result
Normal file
28
mysql-test/r/rpl_ignore_revoke.result
Normal file
@@ -0,0 +1,28 @@
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
grant select on *.* to 'user_foo'@'%' identified by 'user_foopass';
|
||||
revoke select on *.* from 'user_foo'@'%';
|
||||
select select_priv from mysql.user where user='user_foo' /* master:must be N */;
|
||||
select_priv
|
||||
N
|
||||
grant select on *.* to 'user_foo'@'%' identified by 'user_foopass';
|
||||
revoke select on *.* from 'user_foo'@'%';
|
||||
select select_priv from mysql.user where user='user_foo' /* slave:must be N */;
|
||||
select_priv
|
||||
N
|
||||
grant select on *.* to 'user_foo'@'%' identified by 'user_foopass';
|
||||
select select_priv from mysql.user where user='user_foo' /* slave:must be Y */;
|
||||
select_priv
|
||||
Y
|
||||
revoke select on *.* from 'user_foo';
|
||||
select select_priv from mysql.user where user='user_foo' /* master:must be N */;
|
||||
select_priv
|
||||
N
|
||||
select select_priv from mysql.user where user='user_foo' /* slave:must get Y */;
|
||||
select_priv
|
||||
Y
|
||||
revoke select on *.* FROM 'user_foo';
|
@@ -57,6 +57,9 @@ insert into t1 values (15);
|
||||
grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1;
|
||||
grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1;
|
||||
grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1;
|
||||
SELECT 1;
|
||||
1
|
||||
1
|
||||
create procedure foo4()
|
||||
deterministic
|
||||
begin
|
||||
|
@@ -3337,6 +3337,30 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 const PRIMARY PRIMARY 4 const 1 Using index
|
||||
1 SIMPLE t3 const PRIMARY PRIMARY 8 const,const 1
|
||||
DROP TABLE t1,t2,t3;
|
||||
create table t1 (f1 int);
|
||||
insert into t1 values(1),(2);
|
||||
create table t2 (f2 int, f3 int, key(f2));
|
||||
insert into t2 values(1,1),(2,2);
|
||||
create table t3 (f4 int not null);
|
||||
insert into t3 values (2),(2),(2);
|
||||
select f1,(select count(*) from t2,t3 where f2=f1 and f3=f4) as count from t1;
|
||||
f1 count
|
||||
1 0
|
||||
2 3
|
||||
drop table t1,t2,t3;
|
||||
create table t1 (f1 int unique);
|
||||
create table t2 (f2 int unique);
|
||||
create table t3 (f3 int unique);
|
||||
insert into t1 values(1),(2);
|
||||
insert into t2 values(1),(2);
|
||||
insert into t3 values(1),(NULL);
|
||||
select * from t3 where f3 is null;
|
||||
f3
|
||||
NULL
|
||||
select t2.f2 from t1 left join t2 on f1=f2 join t3 on f1=f3 where f1=1;
|
||||
f2
|
||||
1
|
||||
drop table t1,t2,t3;
|
||||
create table t1(f1 char, f2 char not null);
|
||||
insert into t1 values(null,'a');
|
||||
create table t2 (f2 char not null);
|
||||
@@ -3345,3 +3369,5 @@ select * from t1 left join t2 on f1=t2.f2 where t1.f2='a';
|
||||
f1 f2 f2
|
||||
NULL a NULL
|
||||
drop table t1,t2;
|
||||
select * from (select * left join t on f1=f2) tt;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'on f1=f2) tt' at line 1
|
||||
|
@@ -49,7 +49,7 @@ Pos Instruction
|
||||
9 set err@1 1
|
||||
10 hreturn 5
|
||||
11 cfetch c@0 n@4
|
||||
12 jump_if_not 15 isnull(n@4)
|
||||
12 jump_if_not 15(17) isnull(n@4)
|
||||
13 set nulls@2 (nulls@2 + 1)
|
||||
14 jump 17
|
||||
15 set count@3 (count@3 + 1)
|
||||
|
@@ -535,7 +535,7 @@ fetch c into v;
|
||||
end|
|
||||
delete from t1|
|
||||
call bug7299()|
|
||||
ERROR 02000: No data to FETCH
|
||||
ERROR 02000: No data - zero rows fetched, selected, or processed
|
||||
drop procedure bug7299|
|
||||
create procedure bug9073()
|
||||
begin
|
||||
|
@@ -522,7 +522,7 @@ delete from t1|
|
||||
create table t3 ( s char(16), d int)|
|
||||
call into_test4()|
|
||||
Warnings:
|
||||
Warning 1329 No data to FETCH
|
||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||
select * from t3|
|
||||
s d
|
||||
into4 NULL
|
||||
@@ -918,6 +918,11 @@ drop function if exists f5|
|
||||
drop function if exists f6|
|
||||
drop function if exists f7|
|
||||
drop function if exists f8|
|
||||
drop function if exists f9|
|
||||
drop function if exists f10|
|
||||
drop function if exists f11|
|
||||
drop function if exists f12_1|
|
||||
drop function if exists f12_2|
|
||||
drop view if exists v0|
|
||||
drop view if exists v1|
|
||||
drop view if exists v2|
|
||||
@@ -1097,6 +1102,62 @@ ERROR HY000: Table 't1' was not locked with LOCK TABLES
|
||||
select f4()|
|
||||
ERROR HY000: Table 't2' was not locked with LOCK TABLES
|
||||
unlock tables|
|
||||
create function f9() returns int
|
||||
begin
|
||||
declare a, b int;
|
||||
drop temporary table if exists t3;
|
||||
create temporary table t3 (id int);
|
||||
insert into t3 values (1), (2), (3);
|
||||
set a:= (select count(*) from t3);
|
||||
set b:= (select count(*) from t3 t3_alias);
|
||||
return a + b;
|
||||
end|
|
||||
select f9()|
|
||||
f9()
|
||||
6
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't3'
|
||||
select f9() from t1 limit 1|
|
||||
f9()
|
||||
6
|
||||
create function f10() returns int
|
||||
begin
|
||||
drop temporary table if exists t3;
|
||||
create temporary table t3 (id int);
|
||||
insert into t3 select id from t4;
|
||||
return (select count(*) from t3);
|
||||
end|
|
||||
select f10()|
|
||||
ERROR 42S02: Table 'test.t4' doesn't exist
|
||||
create table t4 as select 1 as id|
|
||||
select f10()|
|
||||
f10()
|
||||
1
|
||||
create function f11() returns int
|
||||
begin
|
||||
drop temporary table if exists t3;
|
||||
create temporary table t3 (id int);
|
||||
insert into t3 values (1), (2), (3);
|
||||
return (select count(*) from t3 as a, t3 as b);
|
||||
end|
|
||||
select f11()|
|
||||
ERROR HY000: Can't reopen table: 'a'
|
||||
select f11() from t1|
|
||||
ERROR HY000: Can't reopen table: 'a'
|
||||
create function f12_1() returns int
|
||||
begin
|
||||
drop temporary table if exists t3;
|
||||
create temporary table t3 (id int);
|
||||
insert into t3 values (1), (2), (3);
|
||||
return f12_2();
|
||||
end|
|
||||
create function f12_2() returns int
|
||||
return (select count(*) from t3)|
|
||||
drop temporary table t3|
|
||||
select f12_1()|
|
||||
ERROR 42S02: Table 'test.t3' doesn't exist
|
||||
select f12_1() from t1 limit 1|
|
||||
ERROR 42S02: Table 'test.t3' doesn't exist
|
||||
drop function f0|
|
||||
drop function f1|
|
||||
drop function f2|
|
||||
@@ -1106,11 +1167,17 @@ drop function f5|
|
||||
drop function f6|
|
||||
drop function f7|
|
||||
drop function f8|
|
||||
drop function f9|
|
||||
drop function f10|
|
||||
drop function f11|
|
||||
drop function f12_1|
|
||||
drop function f12_2|
|
||||
drop view v0|
|
||||
drop view v1|
|
||||
drop view v2|
|
||||
delete from t1 |
|
||||
delete from t2 |
|
||||
drop table t4|
|
||||
drop table if exists fac|
|
||||
create table fac (n int unsigned not null primary key, f bigint unsigned)|
|
||||
drop procedure if exists ifac|
|
||||
@@ -1720,10 +1787,10 @@ end|
|
||||
call bug1863(10)|
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'temp_t1'
|
||||
Warning 1329 No data to FETCH
|
||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||
call bug1863(10)|
|
||||
Warnings:
|
||||
Warning 1329 No data to FETCH
|
||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||
select * from t4|
|
||||
f1 rc t3
|
||||
2 0 NULL
|
||||
@@ -2017,10 +2084,10 @@ end|
|
||||
call bug4579_1()|
|
||||
call bug4579_1()|
|
||||
Warnings:
|
||||
Warning 1329 No data to FETCH
|
||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||
call bug4579_1()|
|
||||
Warnings:
|
||||
Warning 1329 No data to FETCH
|
||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||
drop procedure bug4579_1|
|
||||
drop procedure bug4579_2|
|
||||
drop table t3|
|
||||
@@ -2499,7 +2566,7 @@ call bug7743("OneWord")|
|
||||
var
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1329 No data to FETCH
|
||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||
call bug7743("anotherword")|
|
||||
var
|
||||
2
|
||||
@@ -2507,7 +2574,7 @@ call bug7743("AnotherWord")|
|
||||
var
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1329 No data to FETCH
|
||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||
drop procedure bug7743|
|
||||
drop table t4|
|
||||
delete from t3|
|
||||
@@ -3557,8 +3624,6 @@ drop procedure if exists bug7049_1|
|
||||
drop procedure if exists bug7049_2|
|
||||
drop procedure if exists bug7049_3|
|
||||
drop procedure if exists bug7049_4|
|
||||
drop procedure if exists bug7049_5|
|
||||
drop procedure if exists bug7049_6|
|
||||
drop function if exists bug7049_1|
|
||||
drop function if exists bug7049_2|
|
||||
create table t3 ( x int unique )|
|
||||
@@ -3583,18 +3648,6 @@ select 'Caught it' as 'Result';
|
||||
call bug7049_3();
|
||||
select 'Missed it' as 'Result';
|
||||
end|
|
||||
create procedure bug7049_5()
|
||||
begin
|
||||
declare x decimal(2,1);
|
||||
set x = 'zap';
|
||||
end|
|
||||
create procedure bug7049_6()
|
||||
begin
|
||||
declare exit handler for sqlwarning
|
||||
select 'Caught it' as 'Result';
|
||||
call bug7049_5();
|
||||
select 'Missed it' as 'Result';
|
||||
end|
|
||||
create function bug7049_1()
|
||||
returns int
|
||||
begin
|
||||
@@ -3624,9 +3677,6 @@ Caught it
|
||||
select * from t3|
|
||||
x
|
||||
42
|
||||
call bug7049_6()|
|
||||
Result
|
||||
Caught it
|
||||
select bug7049_2()|
|
||||
bug7049_2()
|
||||
1
|
||||
@@ -3635,8 +3685,6 @@ drop procedure bug7049_1|
|
||||
drop procedure bug7049_2|
|
||||
drop procedure bug7049_3|
|
||||
drop procedure bug7049_4|
|
||||
drop procedure bug7049_5|
|
||||
drop procedure bug7049_6|
|
||||
drop function bug7049_1|
|
||||
drop function bug7049_2|
|
||||
drop function if exists bug13941|
|
||||
@@ -4320,4 +4368,143 @@ id county
|
||||
2 NULL
|
||||
drop table t3|
|
||||
drop procedure bug15441|
|
||||
drop procedure if exists bug14498_1|
|
||||
drop procedure if exists bug14498_2|
|
||||
drop procedure if exists bug14498_3|
|
||||
drop procedure if exists bug14498_4|
|
||||
drop procedure if exists bug14498_5|
|
||||
create procedure bug14498_1()
|
||||
begin
|
||||
declare continue handler for sqlexception select 'error' as 'Handler';
|
||||
if v then
|
||||
select 'yes' as 'v';
|
||||
else
|
||||
select 'no' as 'v';
|
||||
end if;
|
||||
select 'done' as 'End';
|
||||
end|
|
||||
create procedure bug14498_2()
|
||||
begin
|
||||
declare continue handler for sqlexception select 'error' as 'Handler';
|
||||
while v do
|
||||
select 'yes' as 'v';
|
||||
end while;
|
||||
select 'done' as 'End';
|
||||
end|
|
||||
create procedure bug14498_3()
|
||||
begin
|
||||
declare continue handler for sqlexception select 'error' as 'Handler';
|
||||
repeat
|
||||
select 'maybe' as 'v';
|
||||
until v end repeat;
|
||||
select 'done' as 'End';
|
||||
end|
|
||||
create procedure bug14498_4()
|
||||
begin
|
||||
declare continue handler for sqlexception select 'error' as 'Handler';
|
||||
case v
|
||||
when 1 then
|
||||
select '1' as 'v';
|
||||
when 2 then
|
||||
select '2' as 'v';
|
||||
else
|
||||
select '?' as 'v';
|
||||
end case;
|
||||
select 'done' as 'End';
|
||||
end|
|
||||
create procedure bug14498_5()
|
||||
begin
|
||||
declare continue handler for sqlexception select 'error' as 'Handler';
|
||||
case
|
||||
when v = 1 then
|
||||
select '1' as 'v';
|
||||
when v = 2 then
|
||||
select '2' as 'v';
|
||||
else
|
||||
select '?' as 'v';
|
||||
end case;
|
||||
select 'done' as 'End';
|
||||
end|
|
||||
call bug14498_1()|
|
||||
Handler
|
||||
error
|
||||
End
|
||||
done
|
||||
call bug14498_2()|
|
||||
Handler
|
||||
error
|
||||
End
|
||||
done
|
||||
call bug14498_3()|
|
||||
v
|
||||
maybe
|
||||
Handler
|
||||
error
|
||||
End
|
||||
done
|
||||
call bug14498_5()|
|
||||
Handler
|
||||
error
|
||||
End
|
||||
done
|
||||
drop procedure bug14498_1|
|
||||
drop procedure bug14498_2|
|
||||
drop procedure bug14498_3|
|
||||
drop procedure bug14498_4|
|
||||
drop procedure bug14498_5|
|
||||
drop table if exists t3|
|
||||
drop procedure if exists bug15231_1|
|
||||
drop procedure if exists bug15231_2|
|
||||
drop procedure if exists bug15231_3|
|
||||
drop procedure if exists bug15231_4|
|
||||
create table t3 (id int not null)|
|
||||
create procedure bug15231_1()
|
||||
begin
|
||||
declare xid integer;
|
||||
declare xdone integer default 0;
|
||||
declare continue handler for not found set xdone = 1;
|
||||
set xid=null;
|
||||
call bug15231_2(xid);
|
||||
select xid, xdone;
|
||||
end|
|
||||
create procedure bug15231_2(inout ioid integer)
|
||||
begin
|
||||
select "Before NOT FOUND condition is triggered" as '1';
|
||||
select id into ioid from t3 where id=ioid;
|
||||
select "After NOT FOUND condtition is triggered" as '2';
|
||||
if ioid is null then
|
||||
set ioid=1;
|
||||
end if;
|
||||
end|
|
||||
create procedure bug15231_3()
|
||||
begin
|
||||
declare exit handler for sqlwarning
|
||||
select 'Caught it (wrong)' as 'Result';
|
||||
call bug15231_4();
|
||||
end|
|
||||
create procedure bug15231_4()
|
||||
begin
|
||||
declare x decimal(2,1);
|
||||
set x = 'zap';
|
||||
select 'Missed it (correct)' as 'Result';
|
||||
end|
|
||||
call bug15231_1()|
|
||||
1
|
||||
Before NOT FOUND condition is triggered
|
||||
2
|
||||
After NOT FOUND condtition is triggered
|
||||
xid xdone
|
||||
1 0
|
||||
Warnings:
|
||||
Warning 1329 No data - zero rows fetched, selected, or processed
|
||||
call bug15231_3()|
|
||||
Result
|
||||
Missed it (correct)
|
||||
Warnings:
|
||||
Warning 1366 Incorrect decimal value: 'zap' for column 'x' at row 1
|
||||
drop table if exists t3|
|
||||
drop procedure if exists bug15231_1|
|
||||
drop procedure if exists bug15231_2|
|
||||
drop procedure if exists bug15231_3|
|
||||
drop procedure if exists bug15231_4|
|
||||
drop table t1,t2;
|
||||
|
@@ -34,7 +34,5 @@ Warning 1454 No definer attribute for trigger 'mysqltest_db1'.'wl2818_trg1'. The
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS ORDER BY trigger_name;
|
||||
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER
|
||||
NULL mysqltest_db1 wl2818_trg1 INSERT NULL mysqltest_db1 t1 0 NULL
|
||||
INSERT INTO t2 VALUES(CURRENT_USER()) ROW BEFORE NULL NULL OLD NEW NULL
|
||||
NULL mysqltest_db1 wl2818_trg2 INSERT NULL mysqltest_db1 t1 0 NULL
|
||||
INSERT INTO t2 VALUES(CURRENT_USER()) ROW AFTER NULL NULL OLD NEW NULL mysqltest_dfn@localhost
|
||||
NULL mysqltest_db1 wl2818_trg1 INSERT NULL mysqltest_db1 t1 0 NULL INSERT INTO t2 VALUES(CURRENT_USER()) ROW BEFORE NULL NULL OLD NEW NULL
|
||||
NULL mysqltest_db1 wl2818_trg2 INSERT NULL mysqltest_db1 t1 0 NULL INSERT INTO t2 VALUES(CURRENT_USER()) ROW AFTER NULL NULL OLD NEW NULL mysqltest_dfn@localhost
|
||||
|
@@ -185,10 +185,8 @@ INSERT INTO t1 VALUES(6);
|
||||
ERROR 42000: Access denied; you need the SUPER privilege for this operation
|
||||
SHOW TRIGGERS;
|
||||
Trigger Event Table Statement Timing Created sql_mode Definer
|
||||
trg1 INSERT t1
|
||||
SET @new_sum = 0 BEFORE NULL mysqltest_inv@localhost
|
||||
trg2 INSERT t1
|
||||
SET @new_sum = 0 AFTER NULL mysqltest_nonexs@localhost
|
||||
trg1 INSERT t1 SET @new_sum = 0 BEFORE NULL mysqltest_inv@localhost
|
||||
trg2 INSERT t1 SET @new_sum = 0 AFTER NULL mysqltest_nonexs@localhost
|
||||
DROP TRIGGER trg1;
|
||||
DROP TRIGGER trg2;
|
||||
CREATE TRIGGER trg1 BEFORE INSERT ON t1
|
||||
@@ -219,16 +217,11 @@ Warning 1454 No definer attribute for trigger 'mysqltest_db1'.'trg1'. The trigge
|
||||
|
||||
SELECT * FROM INFORMATION_SCHEMA.TRIGGERS ORDER BY trigger_name;
|
||||
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER
|
||||
NULL mysqltest_db1 trg1 INSERT NULL mysqltest_db1 t1 0 NULL
|
||||
SET @a = 1 ROW BEFORE NULL NULL OLD NEW NULL
|
||||
NULL mysqltest_db1 trg2 INSERT NULL mysqltest_db1 t1 0 NULL
|
||||
SET @a = 2 ROW AFTER NULL NULL OLD NEW NULL @
|
||||
NULL mysqltest_db1 trg3 UPDATE NULL mysqltest_db1 t1 0 NULL
|
||||
SET @a = 3 ROW BEFORE NULL NULL OLD NEW NULL @abc@def@@
|
||||
NULL mysqltest_db1 trg4 UPDATE NULL mysqltest_db1 t1 0 NULL
|
||||
SET @a = 4 ROW AFTER NULL NULL OLD NEW NULL @hostname
|
||||
NULL mysqltest_db1 trg5 DELETE NULL mysqltest_db1 t1 0 NULL
|
||||
SET @a = 5 ROW BEFORE NULL NULL OLD NEW NULL @abcdef@@@hostname
|
||||
NULL mysqltest_db1 trg1 INSERT NULL mysqltest_db1 t1 0 NULL SET @a = 1 ROW BEFORE NULL NULL OLD NEW NULL
|
||||
NULL mysqltest_db1 trg2 INSERT NULL mysqltest_db1 t1 0 NULL SET @a = 2 ROW AFTER NULL NULL OLD NEW NULL @
|
||||
NULL mysqltest_db1 trg3 UPDATE NULL mysqltest_db1 t1 0 NULL SET @a = 3 ROW BEFORE NULL NULL OLD NEW NULL @abc@def@@
|
||||
NULL mysqltest_db1 trg4 UPDATE NULL mysqltest_db1 t1 0 NULL SET @a = 4 ROW AFTER NULL NULL OLD NEW NULL @hostname
|
||||
NULL mysqltest_db1 trg5 DELETE NULL mysqltest_db1 t1 0 NULL SET @a = 5 ROW BEFORE NULL NULL OLD NEW NULL @abcdef@@@hostname
|
||||
|
||||
---> connection: default
|
||||
DROP USER mysqltest_dfn@localhost;
|
||||
|
@@ -767,8 +767,7 @@ deallocate prepare stmt1;
|
||||
drop procedure p1;
|
||||
drop table t1, t2, t3;
|
||||
create table t1 (a int);
|
||||
drop procedure if exists p2;
|
||||
CREATE PROCEDURE `p2`()
|
||||
CREATE PROCEDURE `p1`()
|
||||
begin
|
||||
insert into t1 values (1);
|
||||
end//
|
||||
@@ -777,6 +776,12 @@ begin
|
||||
declare done int default 0;
|
||||
set done= not done;
|
||||
end//
|
||||
CALL p2();
|
||||
drop procedure p2;
|
||||
CALL p1();
|
||||
drop procedure p1;
|
||||
drop table t1;
|
||||
create trigger t1_bi before insert on test.t1 for each row set @a:=0;
|
||||
ERROR 3D000: No database selected
|
||||
create trigger test.t1_bi before insert on t1 for each row set @a:=0;
|
||||
ERROR 3D000: No database selected
|
||||
drop trigger t1_bi;
|
||||
ERROR 3D000: No database selected
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user