mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 02:30:06 +01:00
merge of mysql-5.5 into mysql-5.5-wl1054
This commit is contained in:
commit
dc0b8f7ada
503 changed files with 25265 additions and 6911 deletions
.bzrignoreMakefile.amREADME
client
cmake
config/ac-macros
configure.inextra/yassl/taocrypt/src
include
CMakeLists.txtMakefile.am
atomic
m_ctype.hmy_pthread.hmyisam.hmysql
plugin.hplugin_audit.h.ppplugin_ftparser.h.pp
service_versions.hthr_lock.hviolite.hpsi
service_thd_wait.hservice_thread_scheduler.hservices.hlibmysqld
libservices
mysql-test
CMakeLists.txt
collections
extra
binlog_tests
rpl_tests
include
check_no_concurrent_insert.inccommit.incctype_filesort2.incctype_numconv.incdeadlock.inchandler.inchave_thread_concurrency.incmix1.incmysqlhotcopy.incnot_blackhole.inc
mysql-test-run.plr
auto_increment.resultcase.resultcommit_1innodb.resultcreate.resultctype_binary.resultctype_cp1251.resultctype_cp932_binlog_stm.resultctype_latin1.resultctype_ucs.resultctype_utf16.resultctype_utf16_def.resultctype_utf32.resultctype_utf8.resultctype_utf8mb4.resultdelayed.resultdelete.resultendspace.resultevents_trans.resultflush.resultfunc_gconcat.resultfunc_group.resultfunc_if.resultfunc_misc.resultfunc_str.resultfunc_time.resultgroup_by.resulthandler_read_last.resultinformation_schema_inno.resultinsert.resultinsert_select.resultjoin.resultjoin_outer.resultlocale.resultmdl_sync.resultmerge.resultmysql_client_test.resultmysql_not_windows.resultmysqlbinlog.resultmysqlbinlog_row.resultmysqld--help-notwin.resultmysqld--help-win.resultnot_partition.resultnull_key.resultpartition.resultpartition_disabled.resultpartition_innodb.resultpartition_not_blackhole.resultpartition_range.result
|
@ -997,6 +997,7 @@ libmysqld/.deps/sql_cursor.Po
|
|||
libmysqld/.deps/sql_db.Po
|
||||
libmysqld/.deps/sql_delete.Po
|
||||
libmysqld/.deps/sql_truncate.Po
|
||||
libmysqld/.deps/sql_reload.Po
|
||||
libmysqld/.deps/datadict.Po
|
||||
libmysqld/.deps/sql_derived.Po
|
||||
libmysqld/.deps/sql_do.Po
|
||||
|
@ -1175,6 +1176,7 @@ libmysqld/sql_cursor.h
|
|||
libmysqld/sql_db.cc
|
||||
libmysqld/sql_delete.cc
|
||||
libmysqld/sql_truncate.cc
|
||||
libmysqld/sql_reload.cc
|
||||
libmysqld/datadict.cc
|
||||
libmysqld/sql_derived.cc
|
||||
libmysqld/sql_do.cc
|
||||
|
@ -2067,6 +2069,7 @@ sql/.deps/sql_cursor.Po
|
|||
sql/.deps/sql_db.Po
|
||||
sql/.deps/sql_delete.Po
|
||||
sql/.deps/sql_truncate.Po
|
||||
sql/.deps/sql_reload.Po
|
||||
sql/.deps/datadict.Po
|
||||
sql/.deps/sql_derived.Po
|
||||
sql/.deps/sql_do.Po
|
||||
|
|
|
@ -264,7 +264,8 @@ test-full-qa:
|
|||
# Headers which need to be checked for abi/api compatibility.
|
||||
#
|
||||
|
||||
API_PREPROCESSOR_HEADER = $(top_srcdir)/include/mysql/plugin.h \
|
||||
API_PREPROCESSOR_HEADER = $(top_srcdir)/include/mysql/plugin_audit.h \
|
||||
$(top_srcdir)/include/mysql/plugin_ftparser.h \
|
||||
$(top_srcdir)/include/mysql.h \
|
||||
$(top_srcdir)/include/mysql/psi/psi_abi_v1.h \
|
||||
$(top_srcdir)/include/mysql/psi/psi_abi_v2.h \
|
||||
|
|
2
README
2
README
|
@ -1,4 +1,4 @@
|
|||
This is a release of MySQL, a dual-license SQL database server.
|
||||
This is a release of MySQL, a dual-license SQL DBMS.
|
||||
MySQL is brought to you by the MySQL team at Oracle Corporation.
|
||||
|
||||
************************************************************
|
||||
|
|
|
@ -64,7 +64,10 @@ MYSQL_ADD_EXECUTABLE(mysqlslap mysqlslap.c)
|
|||
SET_SOURCE_FILES_PROPERTIES(mysqlslap.c PROPERTIES COMPILE_FLAGS "-DTHREADS")
|
||||
TARGET_LINK_LIBRARIES(mysqlslap mysqlclient)
|
||||
|
||||
ADD_EXECUTABLE(echo echo.c)
|
||||
# "WIN32" also covers 64 bit. "echo" is used in some files below "mysql-test/".
|
||||
IF(WIN32)
|
||||
MYSQL_ADD_EXECUTABLE(echo echo.c)
|
||||
ENDIF(WIN32)
|
||||
|
||||
SET_TARGET_PROPERTIES (mysqlcheck mysqldump mysqlimport mysql_upgrade mysqlshow mysqlslap
|
||||
PROPERTIES HAS_CXX TRUE)
|
||||
|
|
|
@ -93,6 +93,7 @@ extern "C" {
|
|||
#else
|
||||
#include <readline/readline.h>
|
||||
#define HAVE_READLINE
|
||||
#define USE_POPEN
|
||||
#endif
|
||||
//int vidattr(long unsigned int attrs); // Was missing in sun curses
|
||||
}
|
||||
|
@ -108,10 +109,6 @@ extern "C" {
|
|||
#define cmp_database(cs,A,B) strcmp((A),(B))
|
||||
#endif
|
||||
|
||||
#if !defined(__WIN__) && !defined(THREAD)
|
||||
#define USE_POPEN
|
||||
#endif
|
||||
|
||||
#include "completion_hash.h"
|
||||
|
||||
#define PROMPT_CHAR '\\'
|
||||
|
|
|
@ -6244,8 +6244,10 @@ get_one_option(int optid, const struct my_option *opt, char *argument)
|
|||
print_version();
|
||||
exit(0);
|
||||
case OPT_MYSQL_PROTOCOL:
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
opt_protocol= find_type_or_exit(argument, &sql_protocol_typelib,
|
||||
opt->name);
|
||||
#endif
|
||||
break;
|
||||
case '?':
|
||||
usage();
|
||||
|
|
|
@ -31,9 +31,12 @@
|
|||
** String functions
|
||||
*****************************************************************************/
|
||||
|
||||
bool String::real_alloc(uint32 arg_length)
|
||||
bool String::real_alloc(uint32 length)
|
||||
{
|
||||
arg_length=ALIGN_SIZE(arg_length+1);
|
||||
uint32 arg_length= ALIGN_SIZE(length + 1);
|
||||
DBUG_ASSERT(arg_length > length);
|
||||
if (arg_length <= length)
|
||||
return TRUE; /* Overflow */
|
||||
str_length=0;
|
||||
if (Alloced_length < arg_length)
|
||||
{
|
||||
|
@ -56,6 +59,9 @@ bool String::real_alloc(uint32 arg_length)
|
|||
bool String::realloc(uint32 alloc_length)
|
||||
{
|
||||
uint32 len=ALIGN_SIZE(alloc_length+1);
|
||||
DBUG_ASSERT(len > alloc_length);
|
||||
if (len <= alloc_length)
|
||||
return TRUE; /* Overflow */
|
||||
if (Alloced_length < len)
|
||||
{
|
||||
char *new_ptr;
|
||||
|
|
|
@ -15,7 +15,8 @@
|
|||
|
||||
#
|
||||
# Headers which need to be checked for abi/api compatibility are in
|
||||
# API_PREPROCESSOR_HEADER.
|
||||
# API_PREPROCESSOR_HEADER. plugin.h is tested implicitly via
|
||||
# plugin_audit.h and plugin_ftparser.h.
|
||||
#
|
||||
# We use gcc specific preprocessing command and sed/diff, so it will
|
||||
# only be run on Unix and only if gcc is used.
|
||||
|
@ -27,7 +28,8 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|||
SET(COMPILER ${CMAKE_C_COMPILER})
|
||||
ENDIF()
|
||||
SET(API_PREPROCESSOR_HEADER
|
||||
${CMAKE_SOURCE_DIR}/include/mysql/plugin.h
|
||||
${CMAKE_SOURCE_DIR}/include/mysql/plugin_audit.h
|
||||
${CMAKE_SOURCE_DIR}/include/mysql/plugin_ftparser.h
|
||||
${CMAKE_SOURCE_DIR}/include/mysql.h
|
||||
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v1.h
|
||||
${CMAKE_SOURCE_DIR}/include/mysql/psi/psi_abi_v2.h
|
||||
|
@ -38,18 +40,18 @@ IF(CMAKE_COMPILER_IS_GNUCC AND CMAKE_SYSTEM_NAME MATCHES "Linux")
|
|||
-DCOMPILER=${COMPILER}
|
||||
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
|
||||
-DBINARY_DIR=${CMAKE_BINARY_DIR}
|
||||
"-DDMYSQL_ABI_CHECK -DABI_HEADERS=${API_PREPROCESSOR_HEADER}"
|
||||
"-DABI_HEADERS=${API_PREPROCESSOR_HEADER}"
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/do_abi_check.cmake
|
||||
VERBATIM
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(abi_check_all
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-DCMAKE_C_COMPILER=${COMPILER}
|
||||
-DCMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}
|
||||
-DCMAKE_BINARY_DIR=${CMAKE_BINARY_DIR}
|
||||
"-DMYSQL_ABI_CHECK -DABI_HEADERS=${API_PREPROCESSOR_HEADER}"
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/scripts/do_abi_check.cmake
|
||||
-DCOMPILER=${COMPILER}
|
||||
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
|
||||
-DBINARY_DIR=${CMAKE_BINARY_DIR}
|
||||
"-DABI_HEADERS=${API_PREPROCESSOR_HEADER}"
|
||||
-P ${CMAKE_SOURCE_DIR}/cmake/do_abi_check.cmake
|
||||
VERBATIM
|
||||
)
|
||||
ENDIF()
|
||||
|
|
|
@ -56,8 +56,9 @@ FOREACH(file ${ABI_HEADERS})
|
|||
SET(tmpfile ${file}.pp.tmp)
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND ${COMPILER}
|
||||
-E -nostdinc -dI -I${SOURCE_DIR}/include -I${BINARY_DIR}/include
|
||||
-I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql ${file}
|
||||
-E -nostdinc -dI -DMYSQL_ABI_CHECK -I${SOURCE_DIR}/include
|
||||
-I${BINARY_DIR}/include -I${SOURCE_DIR}/include/mysql -I${SOURCE_DIR}/sql
|
||||
${file}
|
||||
ERROR_QUIET OUTPUT_FILE ${tmpfile})
|
||||
EXECUTE_PROCESS(
|
||||
COMMAND sed -e
|
||||
|
|
|
@ -782,7 +782,7 @@ dnl Emits shell script for checking configure arguments
|
|||
dnl Arguments to this macro is default value for selected plugins
|
||||
|
||||
AC_DEFUN([_MYSQL_CHECK_PLUGIN_ARGS],[
|
||||
__MYSQL_CHECK_PLUGIN_ARGS(m4_default([$1], [none]))
|
||||
__MYSQL_CHECK_PLUGIN_ARGS(m4_default([$1], [default]))
|
||||
])
|
||||
|
||||
AC_DEFUN([__MYSQL_CHECK_PLUGIN_ARGS],[
|
||||
|
|
|
@ -27,7 +27,7 @@ dnl
|
|||
dnl When changing the major version number please also check the switch
|
||||
dnl statement in mysqlbinlog::check_master_version(). You may also need
|
||||
dnl to update version.c in ndb.
|
||||
AC_INIT([MySQL Server], [5.5.6-m3], [], [mysql])
|
||||
AC_INIT([MySQL Server], [5.5.7-rc], [], [mysql])
|
||||
|
||||
AC_CONFIG_SRCDIR([sql/mysqld.cc])
|
||||
AC_CANONICAL_SYSTEM
|
||||
|
@ -2605,7 +2605,7 @@ MYSQL_STORAGE_ENGINE(partition, partition, [Partition Support],
|
|||
|
||||
dnl -- ndbcluster requires partition to be enabled
|
||||
|
||||
MYSQL_CONFIGURE_PLUGINS([none])
|
||||
MYSQL_CONFIGURE_PLUGINS([default])
|
||||
|
||||
# Only build client code?
|
||||
AC_ARG_WITH(server,
|
||||
|
|
|
@ -185,7 +185,7 @@ void Base64Decoder::Decode()
|
|||
{
|
||||
word32 bytes = coded_.size();
|
||||
word32 plainSz = bytes - ((bytes + (pemLineSz - 1)) / pemLineSz);
|
||||
plainSz = (plainSz * 3 + 3) / 4;
|
||||
plainSz = ((plainSz * 3) / 4) + 3;
|
||||
decoded_.New(plainSz);
|
||||
|
||||
word32 i = 0;
|
||||
|
|
|
@ -54,6 +54,7 @@ SET(HEADERS
|
|||
keycache.h
|
||||
m_ctype.h
|
||||
my_attribute.h
|
||||
my_compiler.h
|
||||
${HEADERS_GEN_CONFIGURE}
|
||||
)
|
||||
|
||||
|
|
|
@ -28,12 +28,15 @@ pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.h \
|
|||
mysql/client_plugin.h mysql/plugin_auth_common.h \
|
||||
mysql/services.h \
|
||||
mysql/service_my_snprintf.h mysql/service_thd_alloc.h \
|
||||
mysql/service_thread_scheduler.h \
|
||||
mysql/service_thd_wait.h \
|
||||
my_pthread.h my_no_pthread.h \
|
||||
decimal.h errmsg.h my_global.h my_net.h \
|
||||
my_getopt.h sslopt-longopts.h my_dir.h \
|
||||
sslopt-vars.h sslopt-case.h sql_common.h keycache.h \
|
||||
m_ctype.h my_attribute.h $(HEADERS_GEN_CONFIGURE) \
|
||||
$(HEADERS_GEN_MAKE) probes_mysql.h probes_mysql_nodtrace.h
|
||||
m_ctype.h my_attribute.h my_compiler.h \
|
||||
$(HEADERS_GEN_CONFIGURE) $(HEADERS_GEN_MAKE) \
|
||||
probes_mysql.h probes_mysql_nodtrace.h
|
||||
|
||||
noinst_HEADERS = lf.h my_bit.h \
|
||||
heap.h my_bitmap.h my_uctype.h password.h \
|
||||
|
@ -47,7 +50,7 @@ noinst_HEADERS = lf.h my_bit.h \
|
|||
my_user.h my_atomic.h atomic/nolock.h \
|
||||
atomic/rwlock.h atomic/x86-gcc.h atomic/generic-msvc.h \
|
||||
atomic/gcc_builtins.h my_libwrap.h my_stacktrace.h \
|
||||
atomic/solaris.h mysql/innodb_priv.h my_compiler.h
|
||||
atomic/solaris.h mysql/innodb_priv.h
|
||||
|
||||
pkgpsiinclude_HEADERS = mysql/psi/psi.h mysql/psi/mysql_thread.h \
|
||||
mysql/psi/mysql_file.h
|
||||
|
|
|
@ -111,9 +111,9 @@
|
|||
On some platforms (e.g. Mac OS X and Solaris) the ebx register
|
||||
is held as a pointer to the global offset table. Thus we're not
|
||||
allowed to use the b-register on those platforms when compiling
|
||||
PIC code, to avoid this we push ebx and pop ebx and add a movl
|
||||
instruction to avoid having ebx in the interface of the assembler
|
||||
instruction.
|
||||
PIC code, to avoid this we push ebx and pop ebx. The new value
|
||||
is copied directly from memory to avoid problems with a implicit
|
||||
manipulation of the stack pointer by the push.
|
||||
|
||||
cmpxchg8b works on both 32-bit platforms and 64-bit platforms but
|
||||
the code here is only used on 32-bit platforms, on 64-bit
|
||||
|
@ -121,11 +121,13 @@
|
|||
fine.
|
||||
*/
|
||||
#define make_atomic_cas_body64 \
|
||||
int32 ebx=(set & 0xFFFFFFFF), ecx=(set >> 32); \
|
||||
asm volatile ("push %%ebx; movl %3, %%ebx;" \
|
||||
LOCK_prefix "; cmpxchg8b %0; setz %2; pop %%ebx" \
|
||||
: "=m" (*a), "+A" (*cmp), "=c" (ret) \
|
||||
: "m" (ebx), "c" (ecx), "m" (*a) \
|
||||
asm volatile ("push %%ebx;" \
|
||||
"movl (%%ecx), %%ebx;" \
|
||||
"movl 4(%%ecx), %%ecx;" \
|
||||
LOCK_prefix "; cmpxchg8b %0;" \
|
||||
"setz %2; pop %%ebx" \
|
||||
: "=m" (*a), "+A" (*cmp), "=c" (ret) \
|
||||
: "c" (&set), "m" (*a) \
|
||||
: "memory", "esp")
|
||||
#endif
|
||||
|
||||
|
|
|
@ -539,6 +539,11 @@ size_t my_strnxfrm_unicode(CHARSET_INFO *,
|
|||
uchar *dst, size_t dstlen,
|
||||
const uchar *src, size_t srclen);
|
||||
|
||||
size_t my_strnxfrm_unicode_full_bin(CHARSET_INFO *,
|
||||
uchar *dst, size_t dstlen,
|
||||
const uchar *src, size_t srclen);
|
||||
size_t my_strnxfrmlen_unicode_full_bin(CHARSET_INFO *, size_t);
|
||||
|
||||
int my_wildcmp_unicode(CHARSET_INFO *cs,
|
||||
const char *str, const char *str_end,
|
||||
const char *wildstr, const char *wildend,
|
||||
|
|
|
@ -601,6 +601,8 @@ int my_pthread_fastmutex_lock(my_pthread_fastmutex_t *mp);
|
|||
#define rw_trywrlock(A) my_rw_trywrlock((A))
|
||||
#define rw_unlock(A) my_rw_unlock((A))
|
||||
#define rwlock_destroy(A) my_rw_destroy((A))
|
||||
#define rw_lock_assert_write_owner(A) my_rw_lock_assert_write_owner((A))
|
||||
#define rw_lock_assert_not_write_owner(A) my_rw_lock_assert_not_write_owner((A))
|
||||
#endif /* USE_MUTEX_INSTEAD_OF_RW_LOCKS */
|
||||
|
||||
|
||||
|
@ -624,6 +626,8 @@ extern int rw_pr_init(rw_pr_lock_t *);
|
|||
#define rw_pr_trywrlock(A) pthread_rwlock_trywrlock(A)
|
||||
#define rw_pr_unlock(A) pthread_rwlock_unlock(A)
|
||||
#define rw_pr_destroy(A) pthread_rwlock_destroy(A)
|
||||
#define rw_pr_lock_assert_write_owner(A)
|
||||
#define rw_pr_lock_assert_not_write_owner(A)
|
||||
#else
|
||||
/* Otherwise we have to use our own implementation of read/write locks. */
|
||||
#define NEED_MY_RW_LOCK 1
|
||||
|
@ -636,6 +640,8 @@ extern int rw_pr_init(struct st_my_rw_lock_t *);
|
|||
#define rw_pr_trywrlock(A) my_rw_trywrlock((A))
|
||||
#define rw_pr_unlock(A) my_rw_unlock((A))
|
||||
#define rw_pr_destroy(A) my_rw_destroy((A))
|
||||
#define rw_pr_lock_assert_write_owner(A) my_rw_lock_assert_write_owner((A))
|
||||
#define rw_pr_lock_assert_not_write_owner(A) my_rw_lock_assert_not_write_owner((A))
|
||||
#endif /* defined(HAVE_PTHREAD_RWLOCK_RDLOCK) && defined(HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP) */
|
||||
|
||||
|
||||
|
@ -651,6 +657,9 @@ typedef struct st_my_rw_lock_t {
|
|||
int state; /* -1:writer,0:free,>0:readers */
|
||||
int waiters; /* number of waiting writers */
|
||||
my_bool prefer_readers;
|
||||
#ifdef SAFE_MUTEX
|
||||
pthread_t write_thread;
|
||||
#endif
|
||||
} my_rw_lock_t;
|
||||
|
||||
extern int my_rw_init(my_rw_lock_t *, my_bool *);
|
||||
|
@ -660,6 +669,17 @@ extern int my_rw_wrlock(my_rw_lock_t *);
|
|||
extern int my_rw_unlock(my_rw_lock_t *);
|
||||
extern int my_rw_tryrdlock(my_rw_lock_t *);
|
||||
extern int my_rw_trywrlock(my_rw_lock_t *);
|
||||
#ifdef SAFE_MUTEX
|
||||
#define my_rw_lock_assert_write_owner(A) \
|
||||
DBUG_ASSERT((A)->state == -1 && pthread_equal(pthread_self(), \
|
||||
(A)->write_thread))
|
||||
#define my_rw_lock_assert_not_write_owner(A) \
|
||||
DBUG_ASSERT((A)->state >= 0 || ! pthread_equal(pthread_self(), \
|
||||
(A)->write_thread))
|
||||
#else
|
||||
#define my_rw_lock_assert_write_owner(A)
|
||||
#define my_rw_lock_assert_not_write_owner(A)
|
||||
#endif
|
||||
#endif /* NEED_MY_RW_LOCK */
|
||||
|
||||
|
||||
|
|
|
@ -249,7 +249,7 @@ typedef struct st_columndef /* column information */
|
|||
|
||||
extern char * myisam_log_filename; /* Name of logfile */
|
||||
extern ulong myisam_block_size;
|
||||
extern uint myisam_concurrent_insert;
|
||||
extern ulong myisam_concurrent_insert;
|
||||
extern my_bool myisam_flush,myisam_delay_key_write,myisam_single_user;
|
||||
extern my_off_t myisam_max_temp_length;
|
||||
extern ulong myisam_data_pointer_size;
|
||||
|
|
|
@ -71,7 +71,7 @@ typedef struct st_mysql_xid MYSQL_XID;
|
|||
Plugin API. Common for all plugin types.
|
||||
*/
|
||||
|
||||
#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0101
|
||||
#define MYSQL_PLUGIN_INTERFACE_VERSION 0x0102
|
||||
|
||||
/*
|
||||
The allowable types of plugins
|
||||
|
@ -529,6 +529,7 @@ long long thd_test_options(const MYSQL_THD thd, long long test_options);
|
|||
int thd_sql_command(const MYSQL_THD thd);
|
||||
const char *thd_proc_info(MYSQL_THD thd, const char *info);
|
||||
void **thd_ha_data(const MYSQL_THD thd, const struct handlerton *hton);
|
||||
void thd_storage_lock_wait(MYSQL_THD thd, long long value);
|
||||
int thd_tx_isolation(const MYSQL_THD thd);
|
||||
char *thd_security_context(MYSQL_THD thd, char *buffer, unsigned int length,
|
||||
unsigned int max_query_len);
|
||||
|
|
217
include/mysql/plugin_audit.h.pp
Normal file
217
include/mysql/plugin_audit.h.pp
Normal file
|
@ -0,0 +1,217 @@
|
|||
#include "plugin.h"
|
||||
#include <mysql/services.h>
|
||||
#include <mysql/service_my_snprintf.h>
|
||||
extern struct my_snprintf_service_st {
|
||||
size_t (*my_snprintf_type)(char*, size_t, const char*, ...);
|
||||
size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list);
|
||||
} *my_snprintf_service;
|
||||
size_t my_snprintf(char* to, size_t n, const char* fmt, ...);
|
||||
size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap);
|
||||
#include <mysql/service_thd_alloc.h>
|
||||
struct st_mysql_lex_string
|
||||
{
|
||||
char *str;
|
||||
size_t length;
|
||||
};
|
||||
typedef struct st_mysql_lex_string MYSQL_LEX_STRING;
|
||||
extern struct thd_alloc_service_st {
|
||||
void *(*thd_alloc_func)(void*, unsigned int);
|
||||
void *(*thd_calloc_func)(void*, unsigned int);
|
||||
char *(*thd_strdup_func)(void*, const char *);
|
||||
char *(*thd_strmake_func)(void*, const char *, unsigned int);
|
||||
void *(*thd_memdup_func)(void*, const void*, unsigned int);
|
||||
MYSQL_LEX_STRING *(*thd_make_lex_string_func)(void*, MYSQL_LEX_STRING *,
|
||||
const char *, unsigned int, int);
|
||||
} *thd_alloc_service;
|
||||
void *thd_alloc(void* thd, unsigned int size);
|
||||
void *thd_calloc(void* thd, unsigned int size);
|
||||
char *thd_strdup(void* thd, const char *str);
|
||||
char *thd_strmake(void* thd, const char *str, unsigned int size);
|
||||
void *thd_memdup(void* thd, const void* str, unsigned int size);
|
||||
MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str,
|
||||
const char *str, unsigned int size,
|
||||
int allocate_lex_string);
|
||||
#include <mysql/service_thd_wait.h>
|
||||
typedef enum _thd_wait_type_e {
|
||||
THD_WAIT_MUTEX= 1,
|
||||
THD_WAIT_DISKIO= 2,
|
||||
THD_WAIT_ROW_TABLE_LOCK= 3,
|
||||
THD_WAIT_GLOBAL_LOCK= 4
|
||||
} thd_wait_type;
|
||||
extern struct thd_wait_service_st {
|
||||
void (*thd_wait_begin_func)(void*, thd_wait_type);
|
||||
void (*thd_wait_end_func)(void*);
|
||||
} *thd_wait_service;
|
||||
void thd_wait_begin(void* thd, thd_wait_type wait_type);
|
||||
void thd_wait_end(void* thd);
|
||||
#include <mysql/service_thread_scheduler.h>
|
||||
struct scheduler_functions;
|
||||
extern struct my_thread_scheduler_service {
|
||||
int (*set)(struct scheduler_functions *scheduler);
|
||||
int (*reset)();
|
||||
} *my_thread_scheduler_service;
|
||||
int my_thread_scheduler_set(struct scheduler_functions *scheduler);
|
||||
int my_thread_scheduler_reset();
|
||||
struct st_mysql_xid {
|
||||
long formatID;
|
||||
long gtrid_length;
|
||||
long bqual_length;
|
||||
char data[128];
|
||||
};
|
||||
typedef struct st_mysql_xid MYSQL_XID;
|
||||
enum enum_mysql_show_type
|
||||
{
|
||||
SHOW_UNDEF, SHOW_BOOL, SHOW_INT, SHOW_LONG,
|
||||
SHOW_LONGLONG, SHOW_CHAR, SHOW_CHAR_PTR,
|
||||
SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE,
|
||||
SHOW_always_last
|
||||
};
|
||||
struct st_mysql_show_var {
|
||||
const char *name;
|
||||
char *value;
|
||||
enum enum_mysql_show_type type;
|
||||
};
|
||||
typedef int (*mysql_show_var_func)(void*, struct st_mysql_show_var*, char *);
|
||||
struct st_mysql_sys_var;
|
||||
struct st_mysql_value;
|
||||
typedef int (*mysql_var_check_func)(void* thd,
|
||||
struct st_mysql_sys_var *var,
|
||||
void *save, struct st_mysql_value *value);
|
||||
typedef void (*mysql_var_update_func)(void* thd,
|
||||
struct st_mysql_sys_var *var,
|
||||
void *var_ptr, const void *save);
|
||||
struct st_mysql_plugin
|
||||
{
|
||||
int type;
|
||||
void *info;
|
||||
const char *name;
|
||||
const char *author;
|
||||
const char *descr;
|
||||
int license;
|
||||
int (*init)(void *);
|
||||
int (*deinit)(void *);
|
||||
unsigned int version;
|
||||
struct st_mysql_show_var *status_vars;
|
||||
struct st_mysql_sys_var **system_vars;
|
||||
void * __reserved1;
|
||||
};
|
||||
#include "plugin_ftparser.h"
|
||||
#include "plugin.h"
|
||||
enum enum_ftparser_mode
|
||||
{
|
||||
MYSQL_FTPARSER_SIMPLE_MODE= 0,
|
||||
MYSQL_FTPARSER_WITH_STOPWORDS= 1,
|
||||
MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2
|
||||
};
|
||||
enum enum_ft_token_type
|
||||
{
|
||||
FT_TOKEN_EOF= 0,
|
||||
FT_TOKEN_WORD= 1,
|
||||
FT_TOKEN_LEFT_PAREN= 2,
|
||||
FT_TOKEN_RIGHT_PAREN= 3,
|
||||
FT_TOKEN_STOPWORD= 4
|
||||
};
|
||||
typedef struct st_mysql_ftparser_boolean_info
|
||||
{
|
||||
enum enum_ft_token_type type;
|
||||
int yesno;
|
||||
int weight_adjust;
|
||||
char wasign;
|
||||
char trunc;
|
||||
char prev;
|
||||
char *quot;
|
||||
} MYSQL_FTPARSER_BOOLEAN_INFO;
|
||||
typedef struct st_mysql_ftparser_param
|
||||
{
|
||||
int (*mysql_parse)(struct st_mysql_ftparser_param *,
|
||||
char *doc, int doc_len);
|
||||
int (*mysql_add_word)(struct st_mysql_ftparser_param *,
|
||||
char *word, int word_len,
|
||||
MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info);
|
||||
void *ftparser_state;
|
||||
void *mysql_ftparam;
|
||||
struct charset_info_st *cs;
|
||||
char *doc;
|
||||
int length;
|
||||
int flags;
|
||||
enum enum_ftparser_mode mode;
|
||||
} MYSQL_FTPARSER_PARAM;
|
||||
struct st_mysql_ftparser
|
||||
{
|
||||
int interface_version;
|
||||
int (*parse)(MYSQL_FTPARSER_PARAM *param);
|
||||
int (*init)(MYSQL_FTPARSER_PARAM *param);
|
||||
int (*deinit)(MYSQL_FTPARSER_PARAM *param);
|
||||
};
|
||||
struct st_mysql_daemon
|
||||
{
|
||||
int interface_version;
|
||||
};
|
||||
struct st_mysql_information_schema
|
||||
{
|
||||
int interface_version;
|
||||
};
|
||||
struct st_mysql_storage_engine
|
||||
{
|
||||
int interface_version;
|
||||
};
|
||||
struct handlerton;
|
||||
struct Mysql_replication {
|
||||
int interface_version;
|
||||
};
|
||||
struct st_mysql_value
|
||||
{
|
||||
int (*value_type)(struct st_mysql_value *);
|
||||
const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
|
||||
int (*val_real)(struct st_mysql_value *, double *realbuf);
|
||||
int (*val_int)(struct st_mysql_value *, long long *intbuf);
|
||||
int (*is_unsigned)(struct st_mysql_value *);
|
||||
};
|
||||
int thd_in_lock_tables(const void* thd);
|
||||
int thd_tablespace_op(const void* thd);
|
||||
long long thd_test_options(const void* thd, long long test_options);
|
||||
int thd_sql_command(const void* thd);
|
||||
const char *thd_proc_info(void* thd, const char *info);
|
||||
void **thd_ha_data(const void* thd, const struct handlerton *hton);
|
||||
void thd_storage_lock_wait(void* thd, long long value);
|
||||
int thd_tx_isolation(const void* thd);
|
||||
char *thd_security_context(void* thd, char *buffer, unsigned int length,
|
||||
unsigned int max_query_len);
|
||||
void thd_inc_row_count(void* thd);
|
||||
int mysql_tmpfile(const char *prefix);
|
||||
int thd_killed(const void* thd);
|
||||
unsigned long thd_get_thread_id(const void* thd);
|
||||
void thd_get_xid(const void* thd, MYSQL_XID *xid);
|
||||
void mysql_query_cache_invalidate4(void* thd,
|
||||
const char *key, unsigned int key_length,
|
||||
int using_trx);
|
||||
void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
|
||||
void thd_set_ha_data(void* thd, const struct handlerton *hton,
|
||||
const void *ha_data);
|
||||
struct mysql_event
|
||||
{
|
||||
unsigned int event_class;
|
||||
};
|
||||
struct mysql_event_general
|
||||
{
|
||||
unsigned int event_class;
|
||||
unsigned int event_subclass;
|
||||
int general_error_code;
|
||||
unsigned long general_thread_id;
|
||||
const char *general_user;
|
||||
unsigned int general_user_length;
|
||||
const char *general_command;
|
||||
unsigned int general_command_length;
|
||||
const char *general_query;
|
||||
unsigned int general_query_length;
|
||||
struct charset_info_st *general_charset;
|
||||
unsigned long long general_time;
|
||||
unsigned long long general_rows;
|
||||
};
|
||||
struct st_mysql_audit
|
||||
{
|
||||
int interface_version;
|
||||
void (*release_thd)(void*);
|
||||
void (*event_notify)(void*, const struct mysql_event *);
|
||||
unsigned long class_mask[1];
|
||||
};
|
|
@ -1,3 +1,4 @@
|
|||
#include "plugin.h"
|
||||
#include <mysql/services.h>
|
||||
#include <mysql/service_my_snprintf.h>
|
||||
extern struct my_snprintf_service_st {
|
||||
|
@ -30,6 +31,27 @@ void *thd_memdup(void* thd, const void* str, unsigned int size);
|
|||
MYSQL_LEX_STRING *thd_make_lex_string(void* thd, MYSQL_LEX_STRING *lex_str,
|
||||
const char *str, unsigned int size,
|
||||
int allocate_lex_string);
|
||||
#include <mysql/service_thd_wait.h>
|
||||
typedef enum _thd_wait_type_e {
|
||||
THD_WAIT_MUTEX= 1,
|
||||
THD_WAIT_DISKIO= 2,
|
||||
THD_WAIT_ROW_TABLE_LOCK= 3,
|
||||
THD_WAIT_GLOBAL_LOCK= 4
|
||||
} thd_wait_type;
|
||||
extern struct thd_wait_service_st {
|
||||
void (*thd_wait_begin_func)(void*, thd_wait_type);
|
||||
void (*thd_wait_end_func)(void*);
|
||||
} *thd_wait_service;
|
||||
void thd_wait_begin(void* thd, thd_wait_type wait_type);
|
||||
void thd_wait_end(void* thd);
|
||||
#include <mysql/service_thread_scheduler.h>
|
||||
struct scheduler_functions;
|
||||
extern struct my_thread_scheduler_service {
|
||||
int (*set)(struct scheduler_functions *scheduler);
|
||||
int (*reset)();
|
||||
} *my_thread_scheduler_service;
|
||||
int my_thread_scheduler_set(struct scheduler_functions *scheduler);
|
||||
int my_thread_scheduler_reset();
|
||||
struct st_mysql_xid {
|
||||
long formatID;
|
||||
long gtrid_length;
|
||||
|
@ -74,7 +96,51 @@ struct st_mysql_plugin
|
|||
void * __reserved1;
|
||||
};
|
||||
#include "plugin_ftparser.h"
|
||||
#include "plugin.h"
|
||||
struct st_mysql_daemon
|
||||
{
|
||||
int interface_version;
|
||||
};
|
||||
struct st_mysql_information_schema
|
||||
{
|
||||
int interface_version;
|
||||
};
|
||||
struct st_mysql_storage_engine
|
||||
{
|
||||
int interface_version;
|
||||
};
|
||||
struct handlerton;
|
||||
struct Mysql_replication {
|
||||
int interface_version;
|
||||
};
|
||||
struct st_mysql_value
|
||||
{
|
||||
int (*value_type)(struct st_mysql_value *);
|
||||
const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
|
||||
int (*val_real)(struct st_mysql_value *, double *realbuf);
|
||||
int (*val_int)(struct st_mysql_value *, long long *intbuf);
|
||||
int (*is_unsigned)(struct st_mysql_value *);
|
||||
};
|
||||
int thd_in_lock_tables(const void* thd);
|
||||
int thd_tablespace_op(const void* thd);
|
||||
long long thd_test_options(const void* thd, long long test_options);
|
||||
int thd_sql_command(const void* thd);
|
||||
const char *thd_proc_info(void* thd, const char *info);
|
||||
void **thd_ha_data(const void* thd, const struct handlerton *hton);
|
||||
void thd_storage_lock_wait(void* thd, long long value);
|
||||
int thd_tx_isolation(const void* thd);
|
||||
char *thd_security_context(void* thd, char *buffer, unsigned int length,
|
||||
unsigned int max_query_len);
|
||||
void thd_inc_row_count(void* thd);
|
||||
int mysql_tmpfile(const char *prefix);
|
||||
int thd_killed(const void* thd);
|
||||
unsigned long thd_get_thread_id(const void* thd);
|
||||
void thd_get_xid(const void* thd, MYSQL_XID *xid);
|
||||
void mysql_query_cache_invalidate4(void* thd,
|
||||
const char *key, unsigned int key_length,
|
||||
int using_trx);
|
||||
void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
|
||||
void thd_set_ha_data(void* thd, const struct handlerton *hton,
|
||||
const void *ha_data);
|
||||
enum enum_ftparser_mode
|
||||
{
|
||||
MYSQL_FTPARSER_SIMPLE_MODE= 0,
|
||||
|
@ -121,47 +187,3 @@ struct st_mysql_ftparser
|
|||
int (*init)(MYSQL_FTPARSER_PARAM *param);
|
||||
int (*deinit)(MYSQL_FTPARSER_PARAM *param);
|
||||
};
|
||||
struct st_mysql_daemon
|
||||
{
|
||||
int interface_version;
|
||||
};
|
||||
struct st_mysql_information_schema
|
||||
{
|
||||
int interface_version;
|
||||
};
|
||||
struct st_mysql_storage_engine
|
||||
{
|
||||
int interface_version;
|
||||
};
|
||||
struct handlerton;
|
||||
struct Mysql_replication {
|
||||
int interface_version;
|
||||
};
|
||||
struct st_mysql_value
|
||||
{
|
||||
int (*value_type)(struct st_mysql_value *);
|
||||
const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length);
|
||||
int (*val_real)(struct st_mysql_value *, double *realbuf);
|
||||
int (*val_int)(struct st_mysql_value *, long long *intbuf);
|
||||
int (*is_unsigned)(struct st_mysql_value *);
|
||||
};
|
||||
int thd_in_lock_tables(const void* thd);
|
||||
int thd_tablespace_op(const void* thd);
|
||||
long long thd_test_options(const void* thd, long long test_options);
|
||||
int thd_sql_command(const void* thd);
|
||||
const char *thd_proc_info(void* thd, const char *info);
|
||||
void **thd_ha_data(const void* thd, const struct handlerton *hton);
|
||||
int thd_tx_isolation(const void* thd);
|
||||
char *thd_security_context(void* thd, char *buffer, unsigned int length,
|
||||
unsigned int max_query_len);
|
||||
void thd_inc_row_count(void* thd);
|
||||
int mysql_tmpfile(const char *prefix);
|
||||
int thd_killed(const void* thd);
|
||||
unsigned long thd_get_thread_id(const void* thd);
|
||||
void thd_get_xid(const void* thd, MYSQL_XID *xid);
|
||||
void mysql_query_cache_invalidate4(void* thd,
|
||||
const char *key, unsigned int key_length,
|
||||
int using_trx);
|
||||
void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
|
||||
void thd_set_ha_data(void* thd, const struct handlerton *hton,
|
||||
const void *ha_data);
|
|
@ -215,6 +215,14 @@ typedef struct st_mysql_cond mysql_cond_t;
|
|||
#define mysql_mutex_assert_not_owner(M) \
|
||||
safe_mutex_assert_not_owner(&(M)->m_mutex)
|
||||
|
||||
/** Wrappers for instrumented prlock objects. */
|
||||
|
||||
#define mysql_prlock_assert_write_owner(M) \
|
||||
rw_pr_lock_assert_write_owner(&(M)->m_prlock)
|
||||
|
||||
#define mysql_prlock_assert_not_write_owner(M) \
|
||||
rw_pr_lock_assert_not_write_owner(&(M)->m_prlock)
|
||||
|
||||
/**
|
||||
@def mysql_mutex_init(K, M, A)
|
||||
Instrumented mutex_init.
|
||||
|
|
83
include/mysql/service_thd_wait.h
Normal file
83
include/mysql/service_thd_wait.h
Normal file
|
@ -0,0 +1,83 @@
|
|||
/* Copyright (C) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
||||
|
||||
#ifndef MYSQL_SERVICE_THD_WAIT_INCLUDED
|
||||
#define MYSQL_SERVICE_THD_WAIT_INCLUDED
|
||||
|
||||
/**
|
||||
@file include/mysql/service_thd_wait.h
|
||||
This service provides functions for plugins and storage engines to report
|
||||
when they are going to sleep/stall.
|
||||
|
||||
SYNOPSIS
|
||||
thd_wait_begin() - call just before a wait begins
|
||||
thd Thread object
|
||||
Use NULL if the thd is NOT known.
|
||||
wait_type Type of wait
|
||||
1 -- short wait (e.g. for mutex)
|
||||
2 -- medium wait (e.g. for disk io)
|
||||
3 -- large wait (e.g. for locked row/table)
|
||||
NOTES
|
||||
This is used by the threadpool to have better knowledge of which
|
||||
threads that currently are actively running on CPUs. When a thread
|
||||
reports that it's going to sleep/stall, the threadpool scheduler is
|
||||
free to start another thread in the pool most likely. The expected wait
|
||||
time is simply an indication of how long the wait is expected to
|
||||
become, the real wait time could be very different.
|
||||
|
||||
thd_wait_end() called immediately after the wait is complete
|
||||
|
||||
thd_wait_end() MUST be called if thd_wait_begin() was called.
|
||||
|
||||
Using thd_wait_...() service is optional but recommended. Using it will
|
||||
improve performance as the thread pool will be more active at managing the
|
||||
thread workload.
|
||||
*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum _thd_wait_type_e {
|
||||
THD_WAIT_MUTEX= 1,
|
||||
THD_WAIT_DISKIO= 2,
|
||||
THD_WAIT_ROW_TABLE_LOCK= 3,
|
||||
THD_WAIT_GLOBAL_LOCK= 4
|
||||
} thd_wait_type;
|
||||
|
||||
extern struct thd_wait_service_st {
|
||||
void (*thd_wait_begin_func)(MYSQL_THD, thd_wait_type);
|
||||
void (*thd_wait_end_func)(MYSQL_THD);
|
||||
} *thd_wait_service;
|
||||
|
||||
#ifdef MYSQL_DYNAMIC_PLUGIN
|
||||
|
||||
#define thd_wait_begin(_THD, _WAIT_TYPE) \
|
||||
thd_wait_service->thd_wait_begin_func(_THD, _WAIT_TYPE)
|
||||
#define thd_wait_end(_THD) thd_wait_service->thd_wait_end_func(_THD)
|
||||
|
||||
#else
|
||||
|
||||
void thd_wait_begin(MYSQL_THD thd, thd_wait_type wait_type);
|
||||
void thd_wait_end(MYSQL_THD thd);
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
65
include/mysql/service_thread_scheduler.h
Normal file
65
include/mysql/service_thread_scheduler.h
Normal file
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
Copyright (C) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef SERVICE_THREAD_SCHEDULER_INCLUDED
|
||||
#define SERVICE_THREAD_SCHEDULER_INCLUDED
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
struct scheduler_functions;
|
||||
|
||||
extern struct my_thread_scheduler_service {
|
||||
int (*set)(struct scheduler_functions *scheduler);
|
||||
int (*reset)();
|
||||
} *my_thread_scheduler_service;
|
||||
|
||||
#ifdef MYSQL_DYNAMIC_PLUGIN
|
||||
|
||||
#define my_thread_scheduler_set(F) my_thread_scheduler_service->set((F))
|
||||
#define my_thread_scheduler_reset() my_thread_scheduler_service->reset()
|
||||
|
||||
#else
|
||||
|
||||
/**
|
||||
Set the thread scheduler to use for the server.
|
||||
|
||||
@param scheduler Pointer to scheduler callbacks to use.
|
||||
@retval 0 Scheduler installed correctly.
|
||||
@retval 1 Invalid value (NULL) used for scheduler.
|
||||
*/
|
||||
int my_thread_scheduler_set(struct scheduler_functions *scheduler);
|
||||
|
||||
/**
|
||||
Restore the previous thread scheduler.
|
||||
|
||||
@note If no thread scheduler was installed previously with
|
||||
thd_set_thread_scheduler, this function will report an error.
|
||||
|
||||
@retval 0 Scheduler installed correctly.
|
||||
@retval 1 No scheduler installed.
|
||||
*/
|
||||
int my_thread_scheduler_reset();
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* SERVICE_THREAD_SCHEDULER_INCLUDED */
|
|
@ -20,6 +20,8 @@ extern "C" {
|
|||
|
||||
#include <mysql/service_my_snprintf.h>
|
||||
#include <mysql/service_thd_alloc.h>
|
||||
#include <mysql/service_thd_wait.h>
|
||||
#include <mysql/service_thread_scheduler.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -21,4 +21,5 @@
|
|||
|
||||
#define VERSION_my_snprintf 0x0100
|
||||
#define VERSION_thd_alloc 0x0100
|
||||
|
||||
#define VERSION_thd_wait 0x0100
|
||||
#define VERSION_my_thread_scheduler 0x0100
|
||||
|
|
|
@ -155,6 +155,8 @@ void thr_downgrade_write_lock(THR_LOCK_DATA *data,
|
|||
enum thr_lock_type new_lock_type);
|
||||
my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data,
|
||||
ulong lock_wait_timeout);
|
||||
void thr_set_lock_wait_callback(void (*before_wait)(void),
|
||||
void (*after_wait)(void));
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -217,6 +217,7 @@ struct st_vio
|
|||
void (*timeout)(Vio*, unsigned int which, unsigned int timeout);
|
||||
my_bool (*poll_read)(Vio *vio, uint timeout);
|
||||
my_bool (*is_connected)(Vio*);
|
||||
my_bool (*has_data) (Vio*);
|
||||
#ifdef HAVE_OPENSSL
|
||||
void *ssl_arg;
|
||||
#endif
|
||||
|
|
|
@ -65,7 +65,7 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc
|
|||
../sql/sql_db.cc ../sql/sql_delete.cc ../sql/sql_derived.cc
|
||||
../sql/sql_do.cc ../sql/sql_error.cc ../sql/sql_handler.cc
|
||||
../sql/sql_help.cc ../sql/sql_insert.cc ../sql/datadict.cc
|
||||
../sql/sql_truncate.cc
|
||||
../sql/sql_admin.cc ../sql/sql_truncate.cc ../sql/sql_reload.cc
|
||||
../sql/sql_lex.cc ../sql/keycaches.cc
|
||||
../sql/sql_list.cc ../sql/sql_load.cc ../sql/sql_locale.cc
|
||||
../sql/sql_binlog.cc ../sql/sql_manager.cc
|
||||
|
@ -81,6 +81,7 @@ SET(SQL_EMBEDDED_SOURCES emb_qcache.cc libmysqld.c lib_sql.cc
|
|||
../sql/sql_time.cc ../sql/tztime.cc ../sql/uniques.cc ../sql/unireg.cc
|
||||
../sql/partition_info.cc ../sql/sql_connect.cc
|
||||
../sql/scheduler.cc ../sql/sql_audit.cc
|
||||
../sql/sql_alter.cc ../sql/sql_partition_admin.cc
|
||||
../sql/event_parse_data.cc
|
||||
../sql/sql_signal.cc ../sql/rpl_handler.cc
|
||||
../sql/rpl_utility.cc
|
||||
|
|
|
@ -63,7 +63,8 @@ sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
|
|||
protocol.cc net_serv.cc opt_range.cc \
|
||||
opt_sum.cc procedure.cc records.cc sql_acl.cc \
|
||||
sql_load.cc discover.cc sql_locale.cc \
|
||||
sql_profile.cc sql_truncate.cc datadict.cc \
|
||||
sql_profile.cc sql_admin.cc sql_truncate.cc datadict.cc \
|
||||
sql_reload.cc \
|
||||
sql_analyse.cc sql_base.cc sql_cache.cc sql_class.cc \
|
||||
sql_crypt.cc sql_db.cc sql_delete.cc sql_error.cc sql_insert.cc \
|
||||
sql_lex.cc sql_list.cc sql_manager.cc \
|
||||
|
@ -78,9 +79,10 @@ sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
|
|||
parse_file.cc sql_view.cc sql_trigger.cc my_decimal.cc \
|
||||
rpl_filter.cc sql_partition.cc sql_builtin.cc sql_plugin.cc \
|
||||
debug_sync.cc sql_tablespace.cc transaction.cc \
|
||||
rpl_injector.cc my_user.c partition_info.cc \
|
||||
rpl_injector.cc my_user.c partition_info.cc sql_alter.cc \
|
||||
sql_servers.cc event_parse_data.cc sql_signal.cc \
|
||||
rpl_handler.cc mdl.cc keycaches.cc sql_audit.cc
|
||||
rpl_handler.cc mdl.cc keycaches.cc sql_audit.cc \
|
||||
sql_partition_admin.cc
|
||||
|
||||
libmysqld_int_a_SOURCES= $(libmysqld_sources)
|
||||
nodist_libmysqld_int_a_SOURCES= $(libmysqlsources) $(sqlsources)
|
||||
|
|
|
@ -15,7 +15,11 @@
|
|||
|
||||
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
|
||||
|
||||
SET(MYSQLSERVICES_SOURCES my_snprintf_service.c thd_alloc_service.c)
|
||||
SET(MYSQLSERVICES_SOURCES
|
||||
my_snprintf_service.c
|
||||
thd_alloc_service.c
|
||||
thd_wait_service.c
|
||||
my_thread_scheduler_service.c)
|
||||
|
||||
ADD_LIBRARY(mysqlservices ${MYSQLSERVICES_SOURCES})
|
||||
INSTALL(TARGETS mysqlservices DESTINATION ${INSTALL_LIBDIR})
|
||||
|
|
|
@ -15,5 +15,7 @@
|
|||
|
||||
AM_CPPFLAGS = -I$(top_srcdir)/include
|
||||
pkglib_LIBRARIES = libmysqlservices.a
|
||||
libmysqlservices_a_SOURCES = my_snprintf_service.c thd_alloc_service.c
|
||||
libmysqlservices_a_SOURCES = my_snprintf_service.c thd_alloc_service.c \
|
||||
thd_wait_service.c \
|
||||
my_thread_scheduler_service.c
|
||||
EXTRA_DIST = CMakeLists.txt
|
||||
|
|
21
libservices/my_thread_scheduler_service.c
Normal file
21
libservices/my_thread_scheduler_service.c
Normal file
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
Copyright (C) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
USA
|
||||
*/
|
||||
|
||||
#include <service_versions.h>
|
||||
SERVICE_VERSION my_thread_scheduler_service=
|
||||
(void*)VERSION_my_thread_scheduler;
|
19
libservices/thd_wait_service.c
Normal file
19
libservices/thd_wait_service.c
Normal file
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
Copyright (C) 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; version 2 of the License.
|
||||
|
||||
This program is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <service_versions.h>
|
||||
SERVICE_VERSION *thd_wait_service= (void*)VERSION_thd_wait;
|
|
@ -16,6 +16,7 @@
|
|||
INSTALL(
|
||||
DIRECTORY .
|
||||
DESTINATION ${INSTALL_MYSQLTESTDIR}
|
||||
USE_SOURCE_PERMISSIONS
|
||||
COMPONENT Test
|
||||
PATTERN "var/" EXCLUDE
|
||||
PATTERN "lib/My/SafeProcess" EXCLUDE
|
||||
|
|
|
@ -19,7 +19,6 @@ main.mysqlbinlog_row @solaris # Bug#52202 2010-03-22 alik mysqlbinlog
|
|||
main.mysqlbinlog_row_innodb @solaris # Bug#52202 2010-03-22 alik mysqlbinlog_row* fail in daily-trunk on Sol10 x86_64 debug_max
|
||||
main.mysqlbinlog_row_myisam @solaris # Bug#52202 2010-03-22 alik mysqlbinlog_row* fail in daily-trunk on Sol10 x86_64 debug_max
|
||||
main.outfile_loaddata @solaris # Bug#46895 2010-01-20 alik Test "outfile_loaddata" fails (reproducible)
|
||||
main.plugin* @solaris # Bug#47146 Linking problem with example plugin when dtrace enabled
|
||||
main.signal_demo3 @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||
main.sp @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||
main.type_float @freebsd # Bug#38965 2010-05-04 alik test cases gis-rtree, type_float, type_newdecimal fail in embedded server
|
||||
|
@ -32,7 +31,6 @@ rpl.rpl_heartbeat_2slaves # BUG#43828 2009-10-22 luis fails spora
|
|||
rpl.rpl_innodb_bug28430* # Bug#46029
|
||||
rpl.rpl_innodb_bug30888* @solaris # Bug#47646 2009-09-25 alik rpl.rpl_innodb_bug30888 fails sporadically on Solaris
|
||||
rpl.rpl_killed_ddl @windows # Bug#47638 2010-01-20 alik The rpl_killed_ddl test fails on Windows
|
||||
rpl.rpl_plugin_load* @solaris # Bug#47146
|
||||
rpl.rpl_row_sp011* @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||
|
||||
sys_vars.max_sp_recursion_depth_func @solaris # Bug#47791 2010-01-20 alik Several test cases fail on Solaris with error Thread stack overrun
|
||||
|
|
|
@ -262,7 +262,6 @@ DROP TABLE IF EXISTS t2;
|
|||
|
||||
CREATE TABLE t2 (a int, b int, primary key (a)) engine=innodb;
|
||||
INSERT INTO t1 VALUES (4,4);
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
|
||||
SELECT * from t2;
|
||||
TRUNCATE table t2;
|
||||
|
@ -277,11 +276,9 @@ CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a)) engine=innodb ;
|
|||
INSERT INTO t1 values (7,7);
|
||||
ROLLBACK;
|
||||
INSERT INTO t1 values (8,8);
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
|
||||
COMMIT;
|
||||
INSERT INTO t1 values (9,9);
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
|
||||
ROLLBACK;
|
||||
SELECT * from t2;
|
||||
|
@ -291,11 +288,9 @@ INSERT INTO t1 values (10,10);
|
|||
INSERT INTO t2 select * from t1;
|
||||
SELECT * from t1;
|
||||
INSERT INTO t2 values (100,100);
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
|
||||
COMMIT;
|
||||
INSERT INTO t2 values (101,101);
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) engine=innodb select * from t1;
|
||||
ROLLBACK;
|
||||
SELECT * from t2;
|
||||
|
@ -377,7 +372,8 @@ reset master;
|
|||
|
||||
begin;
|
||||
insert into ti values (1);
|
||||
insert into ti values (2) ;
|
||||
insert into ti values (2) ;
|
||||
# This is SAFE because --binlog-direct-non-transactional-updates=FALSE
|
||||
insert into tt select * from ti;
|
||||
rollback;
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ reset master;
|
|||
begin;
|
||||
insert into ti values (1);
|
||||
insert into ti values (2) ;
|
||||
# This is SAFE because --binlog-direct-non-transactional-updates=FALSE
|
||||
insert into tt select * from ti;
|
||||
rollback;
|
||||
|
||||
|
|
|
@ -725,7 +725,7 @@ while (`SELECT HEX(@commands) != HEX('')`)
|
|||
--eval SET @check_temp='$available_n_temp'
|
||||
--eval SET @table_temp='$table_n'
|
||||
SET @check_temp= LTRIM(SUBSTRING(@check_temp, LENGTH(@table_temp) + 2));
|
||||
--let $available_t_temp= `SELECT @check_temp`
|
||||
--let $available_n_temp= `SELECT @check_temp`
|
||||
|
||||
--enable_query_log
|
||||
--eval DROP TEMPORARY TABLE $table_t, $table_n
|
||||
|
|
|
@ -378,9 +378,12 @@ sync_slave_with_master;
|
|||
|
||||
let $MYSQLD_DATADIR= `SELECT @@datadir`;
|
||||
|
||||
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLD_DATADIR/test-temporary-master.sql
|
||||
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLD_DATADIR/test-temporary-slave.sql
|
||||
--diff_files $MYSQLD_DATADIR/test-temporary-master.sql $MYSQLD_DATADIR/test-temporary-slave.sql
|
||||
if (`select @@session.binlog_format != 'STATEMENT'`)
|
||||
{
|
||||
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLD_DATADIR/test-temporary-master.sql
|
||||
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLD_DATADIR/test-temporary-slave.sql
|
||||
--diff_files $MYSQLD_DATADIR/test-temporary-master.sql $MYSQLD_DATADIR/test-temporary-slave.sql
|
||||
}
|
||||
|
||||
--echo #########################################################################
|
||||
--echo # CLEAN
|
||||
|
|
|
@ -153,7 +153,7 @@ connection master;
|
|||
let $wait_condition=
|
||||
SELECT COUNT(*) = 1 FROM information_schema.processlist
|
||||
WHERE info = "RENAME TABLE t1 TO t3, t2 TO t1" and
|
||||
state = "Waiting for table";
|
||||
state = "Waiting for table metadata lock";
|
||||
--source include/wait_condition.inc
|
||||
|
||||
COMMIT;
|
||||
|
|
|
@ -43,7 +43,8 @@ connection default;
|
|||
# of our statement.
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Table lock" and info = "insert into $table (i) values (0)";
|
||||
where state = "Waiting for table level lock" and
|
||||
info = "insert into $table (i) values (0)";
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--disable_result_log
|
||||
|
|
|
@ -723,7 +723,7 @@ call p_verify_status_increment(4, 4, 4, 4);
|
|||
--echo # Sic: no table is created.
|
||||
create table if not exists t2 (a int) select 6 union select 7;
|
||||
--echo # Sic: first commits the statement, and then the transaction.
|
||||
call p_verify_status_increment(2, 0, 4, 4);
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
create table t3 select a from t2;
|
||||
call p_verify_status_increment(2, 0, 4, 4);
|
||||
alter table t3 add column (b int);
|
||||
|
|
16
mysql-test/include/ctype_filesort2.inc
Normal file
16
mysql-test/include/ctype_filesort2.inc
Normal file
|
@ -0,0 +1,16 @@
|
|||
#
|
||||
# Testing filesort for full Unicode character sets
|
||||
# with supplementary characters.
|
||||
#
|
||||
|
||||
--echo #
|
||||
--echo # Bug#55980 Character sets: supplementary character _bin ordering is wrong
|
||||
--echo #
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a',1) AS a LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
INSERT INTO t1 VALUES (_utf8mb4 0xEFBE9D),(_utf8mb4 0xF0908E84);
|
||||
INSERT INTO t1 VALUES (_utf8mb4 0xCE85),(_utf8mb4 0xF4808080);
|
||||
SELECT HEX(a), HEX(CONVERT(a USING utf8mb4)) FROM t1 ORDER BY a;
|
||||
ALTER TABLE t1 ADD KEY(a);
|
||||
SELECT HEX(a), HEX(CONVERT(a USING utf8mb4)) FROM t1 ORDER BY a;
|
||||
DROP TABLE IF EXISTS t1;
|
|
@ -1625,6 +1625,108 @@ SET @x=aswkt(point(1,2));
|
|||
SELECT charset(@x), collation(@x);
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#54916 GROUP_CONCAT + IFNULL truncates output
|
||||
--echo #
|
||||
SELECT @@collation_connection;
|
||||
# ENGINE=MYISAM is very important to make sure "SYSTEM" join type
|
||||
# is in use, which will create instances of Item_copy.
|
||||
CREATE TABLE t1 (a MEDIUMINT NULL) ENGINE=MYISAM;
|
||||
INSERT INTO t1 VALUES (1234567);
|
||||
SELECT GROUP_CONCAT(IFNULL(a,'')) FROM t1;
|
||||
SELECT GROUP_CONCAT(IF(a,a,'')) FROM t1;
|
||||
if (`SELECT @@character_set_connection != 'ucs2'`)
|
||||
{
|
||||
# Temporarily disable for ucs2
|
||||
# For details, see Bug#55744 GROUP_CONCAT + CASE + ucs return garbage
|
||||
SELECT GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END) FROM t1;
|
||||
}
|
||||
--enable_metadata
|
||||
SELECT COALESCE(a,'') FROM t1 GROUP BY 1;
|
||||
--disable_metadata
|
||||
--echo # All columns must be VARCHAR(9) with the same length:
|
||||
--disable_warnings
|
||||
CREATE TABLE t2 AS
|
||||
SELECT
|
||||
CONCAT(a),
|
||||
IFNULL(a,''),
|
||||
IF(a,a,''),
|
||||
CASE WHEN a THEN a ELSE '' END,
|
||||
COALESCE(a,'')
|
||||
FROM t1;
|
||||
--enable_warnings
|
||||
# The above query is expected to send a warning
|
||||
# in case of ucs2 character set, until Bug#55744 is fixed.
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT CONCAT_WS(1,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT INSERT(1133,3,0,22) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT LCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT UCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT REPEAT(1,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT LEFT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT RIGHT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT LTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT RTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT ELT(1,111,222,333) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT REPLACE(111,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT SUBSTRING_INDEX(111,111,1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT MAKE_SET(111,222,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT SOUNDEX(1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
CREATE TABLE t2 AS SELECT EXPORT_SET(1,'Y','N','',8);
|
||||
SHOW CREATE TABLE t2;
|
||||
DROP TABLE t2;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of Bug#54916
|
||||
--echo #
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
--echo #
|
||||
|
|
|
@ -159,7 +159,7 @@ drop table if exists A;
|
|||
|
||||
create table A (c int);
|
||||
insert into A (c) values (0);
|
||||
--error 0,ER_LOCK_DEADLOCK,ER_UPDATE_TABLE_USED
|
||||
--error 0,ER_LOCK_DEADLOCK,ER_TABLE_EXISTS_ERROR
|
||||
create table a as select * from A;
|
||||
drop table A;
|
||||
|
||||
|
|
|
@ -523,7 +523,7 @@ connection waiter;
|
|||
--echo connection: waiter
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Flushing tables";
|
||||
where state = "Waiting for table flush";
|
||||
--source include/wait_condition.inc
|
||||
connection default;
|
||||
--echo connection: default
|
||||
|
@ -557,7 +557,8 @@ connection waiter;
|
|||
--echo connection: waiter
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Waiting for table" and info = "rename table t1 to t0";
|
||||
where state = "Waiting for table metadata lock" and
|
||||
info = "rename table t1 to t0";
|
||||
--source include/wait_condition.inc
|
||||
connection default;
|
||||
--echo connection: default
|
||||
|
@ -743,7 +744,8 @@ send alter table t1 engine=memory;
|
|||
connection con2;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Waiting for table" and info = "alter table t1 engine=memory";
|
||||
where state = "Waiting for table metadata lock" and
|
||||
info = "alter table t1 engine=memory";
|
||||
--source include/wait_condition.inc
|
||||
connection default;
|
||||
--error ER_ILLEGAL_HA
|
||||
|
@ -764,7 +766,8 @@ send alter table t1 engine=memory;
|
|||
connection con2;
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Waiting for table" and info = "alter table t1 engine=memory";
|
||||
where state = "Waiting for table metadata lock" and
|
||||
info = "alter table t1 engine=memory";
|
||||
--source include/wait_condition.inc
|
||||
connection default;
|
||||
--echo # Since S metadata lock was already acquired at HANDLER OPEN time
|
||||
|
@ -1024,7 +1027,9 @@ connection con1;
|
|||
--echo # --> connection con2
|
||||
connection con2;
|
||||
--echo # Waitng for 'drop table t1' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='drop table t1';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='drop table t1';
|
||||
--source include/wait_condition.inc
|
||||
--echo # --> connection default
|
||||
connection default;
|
||||
|
@ -1055,7 +1060,9 @@ connection con1;
|
|||
--echo # --> connection con2
|
||||
connection con2;
|
||||
--echo # Waiting for 'drop table t1' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='drop table t1';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='drop table t1';
|
||||
--source include/wait_condition.inc
|
||||
--echo # --> connection default
|
||||
connection default;
|
||||
|
@ -1097,7 +1104,8 @@ send rename table t0 to t3, t1 to t0, t3 to t1;
|
|||
connection con1;
|
||||
--echo # Waiting for 'rename table ...' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table' and info='rename table t0 to t3, t1 to t0, t3 to t1';
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='rename table t0 to t3, t1 to t0, t3 to t1';
|
||||
--source include/wait_condition.inc
|
||||
--echo # --> connection default
|
||||
connection default;
|
||||
|
@ -1137,7 +1145,9 @@ connection con2;
|
|||
--echo # --> connection con1
|
||||
connection con1;
|
||||
--echo # Waiting for 'drop table t2' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='drop table t2';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='drop table t2';
|
||||
--source include/wait_condition.inc
|
||||
--echo # --> connection default
|
||||
connection default;
|
||||
|
@ -1146,7 +1156,9 @@ send select * from t2;
|
|||
--echo # --> connection con1
|
||||
connection con1;
|
||||
--echo # Waiting for 'select * from t2' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='select * from t2';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='select * from t2';
|
||||
unlock tables;
|
||||
--echo # --> connection con2
|
||||
connection con2;
|
||||
|
@ -1190,10 +1202,14 @@ connection default;
|
|||
--echo # --> connection con3
|
||||
connection con3;
|
||||
--echo # Waiting for 'drop table t1' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='drop table t1';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='drop table t1';
|
||||
--source include/wait_condition.inc
|
||||
--echo # Waiting for 'drop table t2' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='drop table t2';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='drop table t2';
|
||||
--source include/wait_condition.inc
|
||||
--echo # Demonstrate that t2 lock was released and t2 was dropped
|
||||
--echo # after ROLLBACK TO SAVEPOINT
|
||||
|
@ -1255,10 +1271,14 @@ connection default;
|
|||
--echo # --> connection con3
|
||||
connection con3;
|
||||
--echo # Waiting for 'drop table t1' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='drop table t1';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='drop table t1';
|
||||
--source include/wait_condition.inc
|
||||
--echo # Waiting for 'drop table t2' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='drop table t2';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='drop table t2';
|
||||
--source include/wait_condition.inc
|
||||
--echo # Demonstrate that t2 lock was released and t2 was dropped
|
||||
--echo # after ROLLBACK TO SAVEPOINT
|
||||
|
@ -1314,7 +1334,9 @@ drop table t1, t2;
|
|||
--echo # --> connection con2
|
||||
connection con2;
|
||||
--echo # Waiting for 'drop table t3' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='drop table t3';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='drop table t3';
|
||||
--source include/wait_condition.inc
|
||||
--echo # Demonstrate that ROLLBACK TO SAVEPOINT didn't release the handler
|
||||
--echo # lock.
|
||||
|
@ -1348,7 +1370,9 @@ send drop table t2;
|
|||
--echo # --> connection con2
|
||||
connection con2;
|
||||
--echo # Waiting for 'drop table t2' to get blocked...
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist where state='Waiting for table' and info='drop table t2';
|
||||
let $wait_condition=select count(*)=1 from information_schema.processlist
|
||||
where state='Waiting for table metadata lock' and
|
||||
info='drop table t2';
|
||||
--source include/wait_condition.inc
|
||||
--echo # --> connection con1
|
||||
connection con1;
|
||||
|
@ -1400,7 +1424,8 @@ connection con2;
|
|||
--echo # has read from the table commits.
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Waiting for table" and info = "lock tables t1 write";
|
||||
where state = "Waiting for table metadata lock" and
|
||||
info = "lock tables t1 write";
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo # --> connection default
|
||||
|
@ -1427,7 +1452,8 @@ connection con1;
|
|||
--echo # Waiting for 'handler t1 read a next' to get blocked...
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Table lock" and info = "handler t1 read a next";
|
||||
where state = "Waiting for table level lock" and
|
||||
info = "handler t1 read a next";
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--echo # The below 'drop table t1' should be able to proceed without
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
disable_query_log;
|
||||
disable_result_log;
|
||||
set @have_thread_concurrency=0;
|
||||
select @have_thread_concurrency:=1 from information_schema.global_variables where variable_name='thread_concurrency';
|
||||
if (`select @have_thread_concurrency = 0`)
|
||||
{
|
||||
skip Need @@thread_concurrency;
|
||||
}
|
||||
enable_result_log;
|
||||
enable_query_log;
|
|
@ -742,7 +742,6 @@ drop table if exists t2;
|
|||
CREATE TABLE t2 (a int, b int, primary key (a));
|
||||
BEGIN;
|
||||
INSERT INTO t2 values(100,100);
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
|
||||
SELECT * from t2;
|
||||
ROLLBACK;
|
||||
|
@ -756,13 +755,11 @@ drop table t2;
|
|||
CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a));
|
||||
BEGIN;
|
||||
INSERT INTO t2 values(100,100);
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
|
||||
SELECT * from t2;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
INSERT INTO t2 values(101,101);
|
||||
--error ER_DUP_ENTRY
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
|
||||
SELECT * from t2;
|
||||
ROLLBACK;
|
||||
|
@ -1583,7 +1580,7 @@ connect (con1, localhost, root,,);
|
|||
--echo # Connection default
|
||||
connection default;
|
||||
let $wait_condition= SELECT COUNT(*)=1 FROM information_schema.processlist
|
||||
WHERE state='Waiting for table' AND info='TRUNCATE TABLE t1';
|
||||
WHERE state='Waiting for table metadata lock' AND info='TRUNCATE TABLE t1';
|
||||
--source include/wait_condition.inc
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
ROLLBACK;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
--source include/not_windows.inc
|
||||
--source include/not_embedded.inc
|
||||
|
||||
if ($MYSQLHOTCOPY)
|
||||
if (!$MYSQLHOTCOPY)
|
||||
{
|
||||
die due to missing mysqlhotcopy tool;
|
||||
}
|
||||
|
|
5
mysql-test/include/not_blackhole.inc
Normal file
5
mysql-test/include/not_blackhole.inc
Normal file
|
@ -0,0 +1,5 @@
|
|||
if (`SELECT count(*) FROM information_schema.engines WHERE
|
||||
(support = 'YES' OR support = 'DEFAULT') AND
|
||||
engine = 'blackhole'`){
|
||||
skip Blackhole engine enabled;
|
||||
}
|
|
@ -2192,10 +2192,12 @@ sub environment_setup {
|
|||
# mysqlhotcopy
|
||||
# ----------------------------------------------------
|
||||
my $mysqlhotcopy=
|
||||
mtr_pl_maybe_exists("$bindir/scripts/mysqlhotcopy");
|
||||
# Since mysqltest interprets the real path as "false" in an if,
|
||||
# use 1 ("true") to indicate "not exists" so it can be tested for
|
||||
$ENV{'MYSQLHOTCOPY'}= $mysqlhotcopy || 1;
|
||||
mtr_pl_maybe_exists("$bindir/scripts/mysqlhotcopy") ||
|
||||
mtr_pl_maybe_exists("$path_client_bindir/mysqlhotcopy");
|
||||
if ($mysqlhotcopy)
|
||||
{
|
||||
$ENV{'MYSQLHOTCOPY'}= $mysqlhotcopy;
|
||||
}
|
||||
|
||||
# ----------------------------------------------------
|
||||
# perror
|
||||
|
|
|
@ -469,7 +469,7 @@ drop table t1;
|
|||
CREATE TABLE t1 ( a INT );
|
||||
INSERT INTO t1 VALUES (1), (1);
|
||||
CREATE TABLE t2 ( a INT AUTO_INCREMENT KEY );
|
||||
CREATE TABLE IF NOT EXISTS t2 AS SELECT a FROM t1;
|
||||
INSERT INTO t2 SELECT a FROM t1;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
UPDATE t2 SET a = 2;
|
||||
SELECT a FROM t2;
|
||||
|
|
|
@ -160,6 +160,8 @@ t1 CREATE TABLE `t1` (
|
|||
`COALESCE('a' COLLATE latin1_bin,'b')` varchar(1) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 SELECT IFNULL('a' COLLATE latin1_swedish_ci, 'b' COLLATE latin1_bin);
|
||||
ERROR HY000: Illegal mix of collations (latin1_swedish_ci,EXPLICIT) and (latin1_bin,EXPLICIT) for operation 'ifnull'
|
||||
SELECT 'case+union+test'
|
||||
UNION
|
||||
SELECT CASE LOWER('1') WHEN LOWER('2') THEN 'BUG' ELSE 'nobug' END;
|
||||
|
|
|
@ -830,7 +830,7 @@ create table if not exists t2 (a int) select 6 union select 7;
|
|||
Warnings:
|
||||
Note 1050 Table 't2' already exists
|
||||
# Sic: first commits the statement, and then the transaction.
|
||||
call p_verify_status_increment(2, 0, 4, 4);
|
||||
call p_verify_status_increment(2, 0, 2, 0);
|
||||
SUCCESS
|
||||
|
||||
create table t3 select a from t2;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
drop table if exists t1,t2,t3,t4,t5;
|
||||
drop database if exists mysqltest;
|
||||
drop view if exists v1;
|
||||
create table t1 (b char(0));
|
||||
insert into t1 values (""),(null);
|
||||
select * from t1;
|
||||
|
@ -264,15 +265,14 @@ 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
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
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;
|
||||
flush status;
|
||||
create table t1 (a int not null, b int, primary key (a));
|
||||
|
@ -280,28 +280,21 @@ insert into t1 values (1,1);
|
|||
create table if not exists t1 select 2;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
Warning 1364 Field 'a' doesn't have a default value
|
||||
select * from t1;
|
||||
a b
|
||||
1 1
|
||||
0 2
|
||||
create table if not exists t1 select 3 as 'a',4 as 'b';
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
create table if not exists t1 select 3 as 'a',3 as 'b';
|
||||
ERROR 23000: Duplicate entry '3' for key 'PRIMARY'
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Note 1050 Table 't1' already exists
|
||||
Error 1062 Duplicate entry '3' for key 'PRIMARY'
|
||||
show status like "Opened_tables";
|
||||
Variable_name Value
|
||||
Opened_tables 2
|
||||
select * from t1;
|
||||
a b
|
||||
1 1
|
||||
0 2
|
||||
3 4
|
||||
drop table t1;
|
||||
create table `t1 `(a int);
|
||||
ERROR 42000: Incorrect table name 't1 '
|
||||
|
@ -611,7 +604,7 @@ b
|
|||
drop table t1,t2;
|
||||
create table t1 (a int);
|
||||
create table t1 select * from t1;
|
||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
create table t2 union = (t1) select * from t1;
|
||||
ERROR HY000: 'test.t2' is not BASE TABLE
|
||||
flush tables with read lock;
|
||||
|
@ -811,7 +804,8 @@ create table t1 (primary key(a)) select "b" as b;
|
|||
ERROR 42000: Key column 'a' doesn't exist in table
|
||||
create table t1 (a int);
|
||||
create table if not exists t1 select 1 as a, 2 as b;
|
||||
ERROR 21S01: Column count doesn't match value count at row 1
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
drop table t1;
|
||||
create table t1 (primary key (a)) (select 1 as a) union all (select 1 as a);
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
|
@ -823,25 +817,14 @@ Warnings:
|
|||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
i
|
||||
1
|
||||
create table if not exists t1 select * from t1;
|
||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
i
|
||||
1
|
||||
drop table t1;
|
||||
create table t1 select coalesce('a' collate latin1_swedish_ci,'b' collate latin1_bin);
|
||||
ERROR HY000: Illegal mix of collations (latin1_swedish_ci,EXPLICIT) and (latin1_bin,EXPLICIT) for operation 'coalesce'
|
||||
select * from t1;
|
||||
i
|
||||
1
|
||||
alter table t1 add primary key (i);
|
||||
create table if not exists t1 (select 2 as i) union all (select 2 as i);
|
||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||
select * from t1;
|
||||
i
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
create temporary table t1 (j int);
|
||||
create table if not exists t1 select 1;
|
||||
select * from t1;
|
||||
|
@ -893,8 +876,6 @@ select * from t2;
|
|||
i
|
||||
1
|
||||
2
|
||||
1
|
||||
2
|
||||
unlock tables;
|
||||
drop table t1, t2;
|
||||
create table t1 (upgrade int);
|
||||
|
@ -1561,6 +1542,7 @@ show status like 'handler_read%';
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 0
|
||||
Handler_read_last 0
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
@ -1586,11 +1568,9 @@ CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
|
|||
INSERT IGNORE INTO t1 (b) VALUES (5);
|
||||
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
|
||||
SELECT a FROM t1;
|
||||
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
|
||||
SELECT a FROM t1;
|
||||
INSERT INTO t2 SELECT a FROM t1;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
|
||||
SELECT a FROM t1;
|
||||
INSERT INTO t2 SELECT a FROM t1;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
|
@ -1620,7 +1600,7 @@ drop table if exists t2;
|
|||
Warnings:
|
||||
Note 1051 Unknown table 't2'
|
||||
CREATE TABLE t2 (a int, b int, primary key (a));
|
||||
CREATE TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
|
||||
INSERT INTO t2 select * from t1;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
SELECT * from t2;
|
||||
a b
|
||||
|
@ -1633,13 +1613,7 @@ a b
|
|||
1 1
|
||||
drop table t2;
|
||||
CREATE TEMPORARY TABLE t2 (a int, b int, primary key (a));
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS t2 (primary key (a)) select * from t1;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
SELECT * from t2;
|
||||
a b
|
||||
1 1
|
||||
TRUNCATE table t2;
|
||||
INSERT INTO t2 select * from t1;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
SELECT * from t2;
|
||||
a b
|
||||
|
@ -1964,11 +1938,7 @@ CREATE TRIGGER f BEFORE INSERT ON t1 FOR EACH ROW
|
|||
BEGIN
|
||||
INSERT INTO t1 ( `int` ) VALUES (4 ),( 8 ),( 2 ) ;
|
||||
END ; |
|
||||
CREATE TABLE IF NOT EXISTS t1 (
|
||||
`pk` INTEGER NOT NULL AUTO_INCREMENT ,
|
||||
`int` INTEGER ,
|
||||
PRIMARY KEY ( `pk` )
|
||||
) SELECT `pk` , `int_key` FROM B ;
|
||||
INSERT INTO t1 (pk, int_key) SELECT `pk` , `int_key` FROM B ;
|
||||
ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
|
||||
CREATE TRIGGER f BEFORE INSERT ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
|
@ -2088,3 +2058,347 @@ t2 CREATE TABLE `t2` (
|
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
set @@sql_mode= @old_mode;
|
||||
drop tables t1, t2;
|
||||
CREATE TABLE t1 (id int);
|
||||
CREATE TABLE t2 (id int);
|
||||
INSERT INTO t1 VALUES (1), (1);
|
||||
INSERT INTO t2 VALUES (2), (2);
|
||||
CREATE VIEW v1 AS SELECT id FROM t2;
|
||||
CREATE TABLE IF NOT EXISTS v1(a int, b int) SELECT id, id FROM t1;
|
||||
Warnings:
|
||||
Note 1050 Table 'v1' already exists
|
||||
SHOW CREATE TABLE v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t2`.`id` AS `id` from `t2` latin1 latin1_swedish_ci
|
||||
SELECT * FROM t2;
|
||||
id
|
||||
2
|
||||
2
|
||||
SELECT * FROM v1;
|
||||
id
|
||||
2
|
||||
2
|
||||
DROP VIEW v1;
|
||||
CREATE TEMPORARY TABLE tt1 AS SELECT id FROM t2;
|
||||
CREATE TEMPORARY TABLE IF NOT EXISTS tt1(a int, b int) SELECT id, id FROM t1;
|
||||
Warnings:
|
||||
Note 1050 Table 'tt1' already exists
|
||||
SELECT * FROM t2;
|
||||
id
|
||||
2
|
||||
2
|
||||
SELECT * FROM tt1;
|
||||
id
|
||||
2
|
||||
2
|
||||
DROP TEMPORARY TABLE tt1;
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# WL#5370 "Changing 'CREATE TABLE IF NOT EXISTS ... SELECT'
|
||||
# behaviour.
|
||||
#
|
||||
#
|
||||
# 1. Basic case: a base table.
|
||||
#
|
||||
create table if not exists t1 (a int) select 1 as a;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
create table t1 (a int) select 2 as a;
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
# Produces an essential warning ER_TABLE_EXISTS.
|
||||
create table if not exists t1 (a int) select 2 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
# No new data in t1.
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
drop table t1;
|
||||
#
|
||||
# 2. A temporary table.
|
||||
#
|
||||
create temporary table if not exists t1 (a int) select 1 as a;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
create temporary table t1 (a int) select 2 as a;
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
# An essential warning.
|
||||
create temporary table if not exists t1 (a int) select 2 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
# No new data in t1.
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
drop temporary table t1;
|
||||
#
|
||||
# 3. Creating a base table in presence of a temporary table.
|
||||
#
|
||||
create table t1 (a int);
|
||||
# Create a view for convenience of querying t1 shadowed by a temp.
|
||||
create view v1 as select a from t1;
|
||||
drop table t1;
|
||||
create temporary table t1 (a int) select 1 as a;
|
||||
create table if not exists t1 (a int) select 2 as a;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
select * from v1;
|
||||
a
|
||||
2
|
||||
# Note: an essential warning.
|
||||
create table if not exists t1 (a int) select 3 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
select * from v1;
|
||||
a
|
||||
2
|
||||
drop temporary table t1;
|
||||
select * from t1;
|
||||
a
|
||||
2
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
#
|
||||
# 4. Creating a temporary table in presence of a base table.
|
||||
#
|
||||
create table t1 (a int) select 1 as a;
|
||||
create temporary table if not exists t1 select 2 as a;
|
||||
select * from t1;
|
||||
a
|
||||
2
|
||||
# Note: an essential warning.
|
||||
create temporary table if not exists t1 select 3 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
2
|
||||
drop temporary table t1;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
drop table t1;
|
||||
#
|
||||
# 5. Creating a base table in presence of an updatable view.
|
||||
#
|
||||
create table t2 (a int unique);
|
||||
create view t1 as select a from t2;
|
||||
insert into t1 (a) values (1);
|
||||
create table t1 (a int);
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
# Note: an essential warning.
|
||||
create table if not exists t1 (a int);
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
create table t1 (a int) select 2 as a;
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
# Note: an essential warning.
|
||||
create table if not exists t1 (a int) select 2 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
select * from t2;
|
||||
a
|
||||
1
|
||||
create temporary table if not exists t1 (a int) select 3 as a;
|
||||
select * from t1;
|
||||
a
|
||||
3
|
||||
select * from t2;
|
||||
a
|
||||
1
|
||||
# Note: an essential warning.
|
||||
create temporary table if not exists t1 (a int) select 4 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
3
|
||||
select * from t2;
|
||||
a
|
||||
1
|
||||
drop temporary table t1;
|
||||
#
|
||||
# Repeating the test with a non-updatable view.
|
||||
#
|
||||
drop view t1;
|
||||
create view t1 as select a + 5 as a from t2;
|
||||
insert into t1 (a) values (1);
|
||||
ERROR HY000: The target table t1 of the INSERT is not insertable-into
|
||||
update t1 set a=3 where a=2;
|
||||
ERROR HY000: Column 'a' is not updatable
|
||||
create table t1 (a int);
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
# Note: an essential warning.
|
||||
create table if not exists t1 (a int);
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
create table t1 (a int) select 2 as a;
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
6
|
||||
# Note: an essential warning.
|
||||
create table if not exists t1 (a int) select 2 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
6
|
||||
select * from t2;
|
||||
a
|
||||
1
|
||||
create temporary table if not exists t1 (a int) select 3 as a;
|
||||
select * from t1;
|
||||
a
|
||||
3
|
||||
select * from t2;
|
||||
a
|
||||
1
|
||||
# Note: an essential warning.
|
||||
create temporary table if not exists t1 (a int) select 4 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
3
|
||||
select * from t2;
|
||||
a
|
||||
1
|
||||
drop temporary table t1;
|
||||
drop view t1;
|
||||
drop table t2;
|
||||
#
|
||||
# Repeating the test with a view select a constant number
|
||||
#
|
||||
create view t1 as select 1 as a;
|
||||
insert into t1 (a) values (1);
|
||||
ERROR HY000: The target table t1 of the INSERT is not insertable-into
|
||||
update t1 set a=3 where a=2;
|
||||
ERROR HY000: The target table t1 of the UPDATE is not updatable
|
||||
create table t1 (a int);
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
# Note: an essential warning.
|
||||
create table if not exists t1 (a int);
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
create table t1 (a int) select 2 as a;
|
||||
ERROR 42S01: Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
# Note: an essential warning.
|
||||
create table if not exists t1 (a int) select 2 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
create temporary table if not exists t1 (a int) select 3 as a;
|
||||
select * from t1;
|
||||
a
|
||||
3
|
||||
# Note: an essential warning.
|
||||
create temporary table if not exists t1 (a int) select 4 as a;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
3
|
||||
drop temporary table t1;
|
||||
drop view t1;
|
||||
#
|
||||
# 6. Test of unique_table().
|
||||
#
|
||||
create table t1 (a int) select 1 as a;
|
||||
create temporary table if not exists t1 (a int) select * from t1;
|
||||
create temporary table if not exists t1 (a int) select * from t1;
|
||||
ERROR HY000: Can't reopen table: 't1'
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
drop temporary table t1;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
drop table t1;
|
||||
create temporary table t1 (a int) select 1 as a;
|
||||
create table if not exists t1 (a int) select * from t1;
|
||||
create table if not exists t1 (a int) select * from t1;
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
drop temporary table t1;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
drop table t1;
|
||||
create table if not exists t1 (a int) select * from t1;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
#
|
||||
# 7. Test of non-matching columns, REPLACE and IGNORE.
|
||||
#
|
||||
create table t1 (a int) select 1 as b, 2 as c;
|
||||
select * from t1;
|
||||
a b c
|
||||
NULL 1 2
|
||||
drop table t1;
|
||||
create table if not exists t1 (a int, b date, c date) select 1 as b, 2 as c;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'b' at row 1
|
||||
Warning 1264 Out of range value for column 'c' at row 1
|
||||
select * from t1;
|
||||
a b c
|
||||
NULL 0000-00-00 0000-00-00
|
||||
drop table t1;
|
||||
set @@session.sql_mode='STRICT_ALL_TABLES';
|
||||
create table if not exists t1 (a int, b date, c date) select 1 as b, 2 as c;
|
||||
ERROR 22007: Incorrect date value: '1' for column 'b' at row 1
|
||||
select * from t1;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
create table if not exists t1 (a int, b date, c date)
|
||||
replace select 1 as b, 2 as c;
|
||||
ERROR 22007: Incorrect date value: '1' for column 'b' at row 1
|
||||
select * from t1;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
create table if not exists t1 (a int, b date, c date)
|
||||
ignore select 1 as b, 2 as c;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'b' at row 1
|
||||
Warning 1264 Out of range value for column 'c' at row 1
|
||||
select * from t1;
|
||||
a b c
|
||||
NULL 0000-00-00 0000-00-00
|
||||
set @@session.sql_mode=default;
|
||||
drop table t1;
|
||||
create table if not exists t1 (a int unique, b int)
|
||||
replace select 1 as a, 1 as b union select 1 as a, 2 as b;
|
||||
select * from t1;
|
||||
a b
|
||||
1 2
|
||||
drop table t1;
|
||||
create table if not exists t1 (a int unique, b int)
|
||||
ignore select 1 as a, 1 as b union select 1 as a, 2 as b;
|
||||
select * from t1;
|
||||
a b
|
||||
1 1
|
||||
drop table t1;
|
||||
#
|
||||
|
|
|
@ -2598,6 +2598,156 @@ SELECT charset(@x), collation(@x);
|
|||
charset(@x) collation(@x)
|
||||
binary binary
|
||||
#
|
||||
# Bug#54916 GROUP_CONCAT + IFNULL truncates output
|
||||
#
|
||||
SELECT @@collation_connection;
|
||||
@@collation_connection
|
||||
binary
|
||||
CREATE TABLE t1 (a MEDIUMINT NULL) ENGINE=MYISAM;
|
||||
INSERT INTO t1 VALUES (1234567);
|
||||
SELECT GROUP_CONCAT(IFNULL(a,'')) FROM t1;
|
||||
GROUP_CONCAT(IFNULL(a,''))
|
||||
1234567
|
||||
SELECT GROUP_CONCAT(IF(a,a,'')) FROM t1;
|
||||
GROUP_CONCAT(IF(a,a,''))
|
||||
1234567
|
||||
SELECT GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END) FROM t1;
|
||||
GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END)
|
||||
1234567
|
||||
SELECT COALESCE(a,'') FROM t1 GROUP BY 1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def COALESCE(a,'') 253 9 7 Y 128 31 63
|
||||
COALESCE(a,'')
|
||||
1234567
|
||||
# All columns must be VARCHAR(9) with the same length:
|
||||
CREATE TABLE t2 AS
|
||||
SELECT
|
||||
CONCAT(a),
|
||||
IFNULL(a,''),
|
||||
IF(a,a,''),
|
||||
CASE WHEN a THEN a ELSE '' END,
|
||||
COALESCE(a,'')
|
||||
FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`CONCAT(a)` varbinary(9) DEFAULT NULL,
|
||||
`IFNULL(a,'')` varbinary(9) NOT NULL DEFAULT '',
|
||||
`IF(a,a,'')` varbinary(9) DEFAULT NULL,
|
||||
`CASE WHEN a THEN a ELSE '' END` varbinary(9) DEFAULT NULL,
|
||||
`COALESCE(a,'')` varbinary(9) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT CONCAT_WS(1,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`CONCAT_WS(1,2,3)` varbinary(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT INSERT(1133,3,0,22) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`INSERT(1133,3,0,22)` varbinary(6) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LCASE(a)` varbinary(9) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT UCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`UCASE(a)` varbinary(9) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT REPEAT(1,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`REPEAT(1,2)` varbinary(2) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LEFT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LEFT(123,2)` varbinary(2) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT RIGHT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`RIGHT(123,2)` varbinary(2) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LTRIM(123)` varbinary(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT RTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`RTRIM(123)` varbinary(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT ELT(1,111,222,333) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`ELT(1,111,222,333)` varbinary(3) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT REPLACE(111,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`REPLACE(111,2,3)` varbinary(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT SUBSTRING_INDEX(111,111,1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`SUBSTRING_INDEX(111,111,1)` varbinary(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT MAKE_SET(111,222,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`MAKE_SET(111,222,3)` varbinary(5) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT SOUNDEX(1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`SOUNDEX(1)` varbinary(4) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT EXPORT_SET(1,'Y','N','',8);
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`EXPORT_SET(1,'Y','N','',8)` varbinary(64) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of Bug#54916
|
||||
#
|
||||
#
|
||||
# Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
#
|
||||
CREATE FUNCTION f1() RETURNS TIME RETURN 1;
|
||||
|
|
|
@ -2680,6 +2680,156 @@ SELECT charset(@x), collation(@x);
|
|||
charset(@x) collation(@x)
|
||||
cp1251 cp1251_general_ci
|
||||
#
|
||||
# Bug#54916 GROUP_CONCAT + IFNULL truncates output
|
||||
#
|
||||
SELECT @@collation_connection;
|
||||
@@collation_connection
|
||||
cp1251_general_ci
|
||||
CREATE TABLE t1 (a MEDIUMINT NULL) ENGINE=MYISAM;
|
||||
INSERT INTO t1 VALUES (1234567);
|
||||
SELECT GROUP_CONCAT(IFNULL(a,'')) FROM t1;
|
||||
GROUP_CONCAT(IFNULL(a,''))
|
||||
1234567
|
||||
SELECT GROUP_CONCAT(IF(a,a,'')) FROM t1;
|
||||
GROUP_CONCAT(IF(a,a,''))
|
||||
1234567
|
||||
SELECT GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END) FROM t1;
|
||||
GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END)
|
||||
1234567
|
||||
SELECT COALESCE(a,'') FROM t1 GROUP BY 1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def COALESCE(a,'') 253 9 7 Y 0 31 51
|
||||
COALESCE(a,'')
|
||||
1234567
|
||||
# All columns must be VARCHAR(9) with the same length:
|
||||
CREATE TABLE t2 AS
|
||||
SELECT
|
||||
CONCAT(a),
|
||||
IFNULL(a,''),
|
||||
IF(a,a,''),
|
||||
CASE WHEN a THEN a ELSE '' END,
|
||||
COALESCE(a,'')
|
||||
FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`CONCAT(a)` varchar(9) CHARACTER SET cp1251 DEFAULT NULL,
|
||||
`IFNULL(a,'')` varchar(9) CHARACTER SET cp1251 NOT NULL DEFAULT '',
|
||||
`IF(a,a,'')` varchar(9) CHARACTER SET cp1251 DEFAULT NULL,
|
||||
`CASE WHEN a THEN a ELSE '' END` varchar(9) CHARACTER SET cp1251 DEFAULT NULL,
|
||||
`COALESCE(a,'')` varchar(9) CHARACTER SET cp1251 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT CONCAT_WS(1,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`CONCAT_WS(1,2,3)` varchar(3) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT INSERT(1133,3,0,22) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`INSERT(1133,3,0,22)` varchar(6) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LCASE(a)` varchar(9) CHARACTER SET cp1251 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT UCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`UCASE(a)` varchar(9) CHARACTER SET cp1251 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT REPEAT(1,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`REPEAT(1,2)` varchar(2) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LEFT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LEFT(123,2)` varchar(2) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT RIGHT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`RIGHT(123,2)` varchar(2) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LTRIM(123)` varchar(3) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT RTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`RTRIM(123)` varchar(3) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT ELT(1,111,222,333) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`ELT(1,111,222,333)` varchar(3) CHARACTER SET cp1251 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT REPLACE(111,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`REPLACE(111,2,3)` varchar(3) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT SUBSTRING_INDEX(111,111,1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`SUBSTRING_INDEX(111,111,1)` varchar(3) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT MAKE_SET(111,222,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`MAKE_SET(111,222,3)` varchar(5) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT SOUNDEX(1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`SOUNDEX(1)` varchar(4) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT EXPORT_SET(1,'Y','N','',8);
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`EXPORT_SET(1,'Y','N','',8)` varchar(64) CHARACTER SET cp1251 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of Bug#54916
|
||||
#
|
||||
#
|
||||
# Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
#
|
||||
CREATE FUNCTION f1() RETURNS TIME RETURN 1;
|
||||
|
|
|
@ -47,7 +47,7 @@ master-bin.000001 # Query # # BEGIN
|
|||
master-bin.000001 # Query # # use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172 COLLATE 'latin1_swedish_ci'), NAME_CONST('ins2',_cp932 0xED40ED41ED42 COLLATE 'cp932_japanese_ci'), NAME_CONST('ind',47.93))
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # use `test`; DROP PROCEDURE bug18293
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t4
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE `t4` /* generated by server */
|
||||
End of 5.0 tests
|
||||
SHOW BINLOG EVENTS FROM 490;
|
||||
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error
|
||||
|
|
|
@ -3008,6 +3008,156 @@ SELECT charset(@x), collation(@x);
|
|||
charset(@x) collation(@x)
|
||||
latin1 latin1_swedish_ci
|
||||
#
|
||||
# Bug#54916 GROUP_CONCAT + IFNULL truncates output
|
||||
#
|
||||
SELECT @@collation_connection;
|
||||
@@collation_connection
|
||||
latin1_swedish_ci
|
||||
CREATE TABLE t1 (a MEDIUMINT NULL) ENGINE=MYISAM;
|
||||
INSERT INTO t1 VALUES (1234567);
|
||||
SELECT GROUP_CONCAT(IFNULL(a,'')) FROM t1;
|
||||
GROUP_CONCAT(IFNULL(a,''))
|
||||
1234567
|
||||
SELECT GROUP_CONCAT(IF(a,a,'')) FROM t1;
|
||||
GROUP_CONCAT(IF(a,a,''))
|
||||
1234567
|
||||
SELECT GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END) FROM t1;
|
||||
GROUP_CONCAT(CASE WHEN a THEN a ELSE '' END)
|
||||
1234567
|
||||
SELECT COALESCE(a,'') FROM t1 GROUP BY 1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def COALESCE(a,'') 253 9 7 Y 0 31 8
|
||||
COALESCE(a,'')
|
||||
1234567
|
||||
# All columns must be VARCHAR(9) with the same length:
|
||||
CREATE TABLE t2 AS
|
||||
SELECT
|
||||
CONCAT(a),
|
||||
IFNULL(a,''),
|
||||
IF(a,a,''),
|
||||
CASE WHEN a THEN a ELSE '' END,
|
||||
COALESCE(a,'')
|
||||
FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`CONCAT(a)` varchar(9) DEFAULT NULL,
|
||||
`IFNULL(a,'')` varchar(9) NOT NULL DEFAULT '',
|
||||
`IF(a,a,'')` varchar(9) DEFAULT NULL,
|
||||
`CASE WHEN a THEN a ELSE '' END` varchar(9) DEFAULT NULL,
|
||||
`COALESCE(a,'')` varchar(9) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT CONCAT_WS(1,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`CONCAT_WS(1,2,3)` varchar(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT INSERT(1133,3,0,22) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`INSERT(1133,3,0,22)` varchar(6) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LCASE(a)` varchar(9) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT UCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`UCASE(a)` varchar(9) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT REPEAT(1,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`REPEAT(1,2)` varchar(2) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LEFT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LEFT(123,2)` varchar(2) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT RIGHT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`RIGHT(123,2)` varchar(2) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LTRIM(123)` varchar(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT RTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`RTRIM(123)` varchar(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT ELT(1,111,222,333) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`ELT(1,111,222,333)` varchar(3) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT REPLACE(111,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`REPLACE(111,2,3)` varchar(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT SUBSTRING_INDEX(111,111,1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`SUBSTRING_INDEX(111,111,1)` varchar(3) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT MAKE_SET(111,222,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`MAKE_SET(111,222,3)` varchar(5) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT SOUNDEX(1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`SOUNDEX(1)` varchar(4) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT EXPORT_SET(1,'Y','N','',8);
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`EXPORT_SET(1,'Y','N','',8)` varchar(64) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of Bug#54916
|
||||
#
|
||||
#
|
||||
# Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
#
|
||||
CREATE FUNCTION f1() RETURNS TIME RETURN 1;
|
||||
|
|
|
@ -3840,6 +3840,153 @@ SELECT charset(@x), collation(@x);
|
|||
charset(@x) collation(@x)
|
||||
ucs2 ucs2_general_ci
|
||||
#
|
||||
# Bug#54916 GROUP_CONCAT + IFNULL truncates output
|
||||
#
|
||||
SELECT @@collation_connection;
|
||||
@@collation_connection
|
||||
ucs2_general_ci
|
||||
CREATE TABLE t1 (a MEDIUMINT NULL) ENGINE=MYISAM;
|
||||
INSERT INTO t1 VALUES (1234567);
|
||||
SELECT GROUP_CONCAT(IFNULL(a,'')) FROM t1;
|
||||
GROUP_CONCAT(IFNULL(a,''))
|
||||
1234567
|
||||
SELECT GROUP_CONCAT(IF(a,a,'')) FROM t1;
|
||||
GROUP_CONCAT(IF(a,a,''))
|
||||
1234567
|
||||
SELECT COALESCE(a,'') FROM t1 GROUP BY 1;
|
||||
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def COALESCE(a,'') 253 9 7 Y 0 31 8
|
||||
COALESCE(a,'')
|
||||
1234567
|
||||
# All columns must be VARCHAR(9) with the same length:
|
||||
CREATE TABLE t2 AS
|
||||
SELECT
|
||||
CONCAT(a),
|
||||
IFNULL(a,''),
|
||||
IF(a,a,''),
|
||||
CASE WHEN a THEN a ELSE '' END,
|
||||
COALESCE(a,'')
|
||||
FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`CONCAT(a)` varchar(9) CHARACTER SET ucs2 DEFAULT NULL,
|
||||
`IFNULL(a,'')` varchar(9) CHARACTER SET ucs2 NOT NULL DEFAULT '',
|
||||
`IF(a,a,'')` varchar(9) CHARACTER SET ucs2 DEFAULT NULL,
|
||||
`CASE WHEN a THEN a ELSE '' END` varchar(9) CHARACTER SET ucs2 DEFAULT NULL,
|
||||
`COALESCE(a,'')` varchar(9) CHARACTER SET ucs2 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT CONCAT_WS(1,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`CONCAT_WS(1,2,3)` varchar(3) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT INSERT(1133,3,0,22) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`INSERT(1133,3,0,22)` varchar(6) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LCASE(a)` varchar(9) CHARACTER SET ucs2 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT UCASE(a) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`UCASE(a)` varchar(9) CHARACTER SET ucs2 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT REPEAT(1,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`REPEAT(1,2)` varchar(2) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LEFT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LEFT(123,2)` varchar(2) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT RIGHT(123,2) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`RIGHT(123,2)` varchar(2) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT LTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`LTRIM(123)` varchar(3) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT RTRIM(123) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`RTRIM(123)` varchar(3) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT ELT(1,111,222,333) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`ELT(1,111,222,333)` varchar(3) CHARACTER SET ucs2 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT REPLACE(111,2,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`REPLACE(111,2,3)` varchar(3) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT SUBSTRING_INDEX(111,111,1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`SUBSTRING_INDEX(111,111,1)` varchar(3) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT MAKE_SET(111,222,3) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`MAKE_SET(111,222,3)` varchar(5) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT SOUNDEX(1) FROM t1;
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`SOUNDEX(1)` varchar(4) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
CREATE TABLE t2 AS SELECT EXPORT_SET(1,'Y','N','',8);
|
||||
SHOW CREATE TABLE t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`EXPORT_SET(1,'Y','N','',8)` varchar(64) CHARACTER SET ucs2 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of Bug#54916
|
||||
#
|
||||
#
|
||||
# Bug#52159 returning time type from function and empty left join causes debug assertion
|
||||
#
|
||||
CREATE FUNCTION f1() RETURNS TIME RETURN 1;
|
||||
|
|
|
@ -611,6 +611,31 @@ utf16_bin 00610009
|
|||
utf16_bin 0061
|
||||
utf16_bin 00610020
|
||||
drop table t1;
|
||||
#
|
||||
# Bug#55980 Character sets: supplementary character _bin ordering is wrong
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a',1) AS a LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(1) CHARACTER SET utf16 COLLATE utf16_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES (_utf8mb4 0xEFBE9D),(_utf8mb4 0xF0908E84);
|
||||
INSERT INTO t1 VALUES (_utf8mb4 0xCE85),(_utf8mb4 0xF4808080);
|
||||
SELECT HEX(a), HEX(CONVERT(a USING utf8mb4)) FROM t1 ORDER BY a;
|
||||
HEX(a) HEX(CONVERT(a USING utf8mb4))
|
||||
0385 CE85
|
||||
D800DF84 F0908E84
|
||||
DBC0DC00 F4808080
|
||||
FF9D EFBE9D
|
||||
ALTER TABLE t1 ADD KEY(a);
|
||||
SELECT HEX(a), HEX(CONVERT(a USING utf8mb4)) FROM t1 ORDER BY a;
|
||||
HEX(a) HEX(CONVERT(a USING utf8mb4))
|
||||
0385 CE85
|
||||
D800DF84 F0908E84
|
||||
DBC0DC00 F4808080
|
||||
FF9D EFBE9D
|
||||
DROP TABLE IF EXISTS t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
utf16_bin
|
||||
|
|
9
mysql-test/r/ctype_utf16_def.result
Normal file
9
mysql-test/r/ctype_utf16_def.result
Normal file
|
@ -0,0 +1,9 @@
|
|||
SHOW VARIABLES LIKE 'collation_server';
|
||||
Variable_name Value
|
||||
collation_server utf16_general_ci
|
||||
SHOW VARIABLES LIKE 'character_set_server';
|
||||
Variable_name Value
|
||||
character_set_server utf16
|
||||
SHOW VARIABLES LIKE 'ft_stopword_file';
|
||||
Variable_name Value
|
||||
ft_stopword_file (built-in)
|
|
@ -610,6 +610,31 @@ utf32_bin 0000006100000009
|
|||
utf32_bin 00000061
|
||||
utf32_bin 0000006100000020
|
||||
drop table t1;
|
||||
#
|
||||
# Bug#55980 Character sets: supplementary character _bin ordering is wrong
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a',1) AS a LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(1) CHARACTER SET utf32 COLLATE utf32_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES (_utf8mb4 0xEFBE9D),(_utf8mb4 0xF0908E84);
|
||||
INSERT INTO t1 VALUES (_utf8mb4 0xCE85),(_utf8mb4 0xF4808080);
|
||||
SELECT HEX(a), HEX(CONVERT(a USING utf8mb4)) FROM t1 ORDER BY a;
|
||||
HEX(a) HEX(CONVERT(a USING utf8mb4))
|
||||
00000385 CE85
|
||||
0000FF9D EFBE9D
|
||||
00010384 F0908E84
|
||||
00100000 F4808080
|
||||
ALTER TABLE t1 ADD KEY(a);
|
||||
SELECT HEX(a), HEX(CONVERT(a USING utf8mb4)) FROM t1 ORDER BY a;
|
||||
HEX(a) HEX(CONVERT(a USING utf8mb4))
|
||||
00000385 CE85
|
||||
0000FF9D EFBE9D
|
||||
00010384 F0908E84
|
||||
00100000 F4808080
|
||||
DROP TABLE IF EXISTS t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
utf32_bin
|
||||
|
@ -1091,5 +1116,41 @@ t2 CREATE TABLE `t2` (
|
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# Bug#45263 utf32_general_ci, bad effects around CREATE TABLE AS SELECT
|
||||
#
|
||||
SET collation_connection=utf32_general_ci;
|
||||
CREATE TABLE t1 AS SELECT HEX(0x00) AS my_col;
|
||||
SELECT * FROM t1;
|
||||
my_col
|
||||
00
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#55912 FORMAT with locale set fails for numbers < 1000
|
||||
#
|
||||
SET collation_connection=utf32_general_ci;
|
||||
CREATE TABLE t1 AS SELECT format(123,2,'no_NO');
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`format(123,2,'no_NO')` varchar(37) CHARACTER SET utf32 NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT * FROM t1;
|
||||
format(123,2,'no_NO')
|
||||
123,00
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#42511 mysqld: ctype-ucs2.c:2044: my_strnncollsp_utf32: Assertion (tlen % 4) == 0' faied
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
b char(250) CHARACTER SET utf32,
|
||||
key (b)
|
||||
) ENGINE=MYISAM;
|
||||
INSERT INTO t1 VALUES ('d'),('f');
|
||||
SELECT * FROM t1 WHERE b BETWEEN 'a' AND 'z';
|
||||
b
|
||||
d
|
||||
f
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -987,6 +987,31 @@ utf8mb4_bin 6109
|
|||
utf8mb4_bin 61
|
||||
utf8mb4_bin 6120
|
||||
drop table t1;
|
||||
#
|
||||
# Bug#55980 Character sets: supplementary character _bin ordering is wrong
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT REPEAT('a',1) AS a LIMIT 0;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
INSERT INTO t1 VALUES (_utf8mb4 0xEFBE9D),(_utf8mb4 0xF0908E84);
|
||||
INSERT INTO t1 VALUES (_utf8mb4 0xCE85),(_utf8mb4 0xF4808080);
|
||||
SELECT HEX(a), HEX(CONVERT(a USING utf8mb4)) FROM t1 ORDER BY a;
|
||||
HEX(a) HEX(CONVERT(a USING utf8mb4))
|
||||
CE85 CE85
|
||||
EFBE9D EFBE9D
|
||||
F0908E84 F0908E84
|
||||
F4808080 F4808080
|
||||
ALTER TABLE t1 ADD KEY(a);
|
||||
SELECT HEX(a), HEX(CONVERT(a USING utf8mb4)) FROM t1 ORDER BY a;
|
||||
HEX(a) HEX(CONVERT(a USING utf8mb4))
|
||||
CE85 CE85
|
||||
EFBE9D EFBE9D
|
||||
F0908E84 F0908E84
|
||||
F4808080 F4808080
|
||||
DROP TABLE IF EXISTS t1;
|
||||
select @@collation_connection;
|
||||
@@collation_connection
|
||||
utf8mb4_bin
|
||||
|
|
|
@ -345,3 +345,80 @@ CREATE TABLE t1 LIKE t2;
|
|||
ERROR 42S01: Table 't1' already exists
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#54332 Deadlock with two connections doing LOCK TABLE+INSERT DELAYED
|
||||
#
|
||||
# This test is not supposed to work under --ps-protocol since
|
||||
# INSERT DELAYED doesn't work under LOCK TABLES with this protocol.
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a INT);
|
||||
CREATE TABLE t3 (a INT);
|
||||
# Test 1: Using LOCK TABLE
|
||||
# Connection con1
|
||||
LOCK TABLE t1 WRITE;
|
||||
# Connection default
|
||||
LOCK TABLE t2 WRITE;
|
||||
# Sending:
|
||||
INSERT DELAYED INTO t1 VALUES (1);
|
||||
# Connection con1
|
||||
# Wait until INSERT DELAYED is blocked on table 't1'.
|
||||
INSERT DELAYED INTO t2 VALUES (1);
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
UNLOCK TABLES;
|
||||
# Connection default
|
||||
# Reaping: INSERT DELAYED INTO t1 VALUES (1)
|
||||
UNLOCK TABLES;
|
||||
# Test 2: Using ALTER TABLE
|
||||
START TRANSACTION;
|
||||
SELECT * FROM t1 WHERE a=0;
|
||||
a
|
||||
# Connection con1
|
||||
# Sending:
|
||||
ALTER TABLE t1 COMMENT 'test';
|
||||
# Connection default
|
||||
# Wait until ALTER TABLE is blocked on table 't1'.
|
||||
INSERT DELAYED INTO t1 VALUES (3);
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
COMMIT;
|
||||
# Connection con1
|
||||
# Reaping: ALTER TABLE t1 COMMENT 'test'
|
||||
# Test 3: Using RENAME TABLE
|
||||
# Connection default
|
||||
START TRANSACTION;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
# Connection con1
|
||||
# Sending:
|
||||
RENAME TABLE t1 to t5, t2 to t4;
|
||||
# Connection default
|
||||
# Wait until RENAME TABLE is blocked on table 't1'.
|
||||
INSERT DELAYED INTO t1 VALUES (4);
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
COMMIT;
|
||||
# Connection con1
|
||||
# Reaping: RENAME TABLE t1 to t5, t2 to t4
|
||||
# Connection default
|
||||
# Reverting the renames
|
||||
RENAME TABLE t5 to t1, t4 to t2;
|
||||
# Test 4: Two INSERT DELAYED on the same table
|
||||
START TRANSACTION;
|
||||
INSERT INTO t2 VALUES (1);
|
||||
# Connection con2
|
||||
LOCK TABLE t1 WRITE, t2 WRITE;
|
||||
# Connection con1
|
||||
# Wait until LOCK TABLE is blocked on table 't2'.
|
||||
INSERT DELAYED INTO t1 VALUES (5);
|
||||
# Connection default
|
||||
# Wait until INSERT DELAYED is blocked on table 't1'.
|
||||
INSERT DELAYED INTO t1 VALUES (6);
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
COMMIT;
|
||||
# Connection con2
|
||||
# Reaping: LOCK TABLE t1 WRITE, t2 WRITE
|
||||
UNLOCK TABLES;
|
||||
# Connection con1
|
||||
# Reaping: INSERT DELAYED INTO t1 VALUES (5)
|
||||
# Connection con2
|
||||
# Connection con1
|
||||
# Connection default
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
|
|
@ -499,4 +499,13 @@ INDEX(a), INDEX(b), INDEX(c));
|
|||
INSERT INTO t1 VALUES (1,2,3), (4,5,6), (7,8,9);
|
||||
DELETE FROM t1 WHERE a = 10 OR b = 20 ORDER BY c LIMIT 1;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #53034: Multiple-table DELETE statements not accepting
|
||||
# "Access compatibility" syntax
|
||||
#
|
||||
CREATE TABLE t1 (id INT);
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
CREATE TABLE t3 LIKE t1;
|
||||
DELETE FROM t1.*, test.t2.*, a.* USING t1, t2, t3 AS a;
|
||||
DROP TABLE t1, t2, t3;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -54,8 +54,8 @@ text1 like 'teststring_%' ORDER BY text1;
|
|||
text1
|
||||
teststring
|
||||
teststring
|
||||
select concat('|', text1, '|') from t1 where text1='teststring' or text1 like 'teststring_%';
|
||||
concat('|', text1, '|')
|
||||
select concat('|', text1, '|') as c from t1 where text1='teststring' or text1 like 'teststring_%' order by c;
|
||||
c
|
||||
|teststring |
|
||||
|teststring|
|
||||
select concat('|', text1, '|') from t1 where text1='teststring' or text1 > 'teststring\t';
|
||||
|
@ -105,11 +105,11 @@ select concat('|', text1, '|') from t1 where text1 like 'teststring_%';
|
|||
concat('|', text1, '|')
|
||||
|teststring |
|
||||
|teststring |
|
||||
select concat('|', text1, '|') from t1 where text1='teststring' or text1 like 'teststring_%';
|
||||
concat('|', text1, '|')
|
||||
select concat('|', text1, '|') as c from t1 where text1='teststring' or text1 like 'teststring_%' order by c;
|
||||
c
|
||||
|teststring |
|
||||
|teststring|
|
||||
|teststring |
|
||||
|teststring|
|
||||
select concat('|', text1, '|') from t1 where text1='teststring' or text1 > 'teststring\t';
|
||||
concat('|', text1, '|')
|
||||
|teststring|
|
||||
|
@ -123,8 +123,8 @@ concat('|', text1, '|')
|
|||
drop table t1;
|
||||
create table t1 (text1 varchar(32) not NULL, KEY key1 (text1)) pack_keys=0;
|
||||
insert into t1 values ('teststring'), ('nothing'), ('teststring\t');
|
||||
select concat('|', text1, '|') from t1 where text1='teststring' or text1 like 'teststring_%';
|
||||
concat('|', text1, '|')
|
||||
select concat('|', text1, '|') as c from t1 where text1='teststring' or text1 like 'teststring_%' order by c;
|
||||
c
|
||||
|teststring |
|
||||
|teststring|
|
||||
select concat('|', text1, '|') from t1 where text1='teststring' or text1 >= 'teststring\t';
|
||||
|
@ -203,13 +203,13 @@ teststring
|
|||
teststring
|
||||
select text1, length(text1) from t1 where text1='teststring' or text1 like 'teststring_%';
|
||||
text1 length(text1)
|
||||
teststring 11
|
||||
teststring 10
|
||||
teststring 11
|
||||
teststring 11
|
||||
select text1, length(text1) from t1 where text1='teststring' or text1 >= 'teststring\t';
|
||||
text1 length(text1)
|
||||
teststring 11
|
||||
teststring 10
|
||||
teststring 11
|
||||
teststring 11
|
||||
select concat('|', text1, '|') from t1 order by text1;
|
||||
concat('|', text1, '|')
|
||||
|
|
|
@ -116,3 +116,22 @@ OK: create event: database does not exist
|
|||
delete from t1;
|
||||
commit work;
|
||||
drop database events_test;
|
||||
#
|
||||
# Bug#54105 assert in MDL_context::release_locks_stored_before
|
||||
#
|
||||
USE test;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP EVENT IF EXISTS e1;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT);
|
||||
CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1;
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SAVEPOINT A;
|
||||
SHOW CREATE EVENT e1;
|
||||
Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation
|
||||
e1 SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `e1` ON SCHEDULE EVERY 1 DAY STARTS '#' ON COMPLETION NOT PRESERVE ENABLE DO SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci
|
||||
SELECT * FROM t2;
|
||||
a
|
||||
ROLLBACK WORK TO SAVEPOINT A;
|
||||
DROP TABLE t1, t2;
|
||||
|
|
|
@ -205,6 +205,51 @@ a
|
|||
insert into t2 (a) values (3);
|
||||
# --> connection default;
|
||||
unlock tables;
|
||||
#
|
||||
# Check that "FLUSH TABLES <list> WITH READ LOCK" is
|
||||
# compatible with active "FLUSH TABLES WITH READ LOCK".
|
||||
# Vice versa it is not true, since tables read-locked by
|
||||
# "FLUSH TABLES <list> WITH READ LOCK" can't be flushed.
|
||||
flush tables with read lock;
|
||||
# --> connection con1;
|
||||
flush table t1 with read lock;
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
unlock tables;
|
||||
# --> connection default;
|
||||
unlock tables;
|
||||
#
|
||||
# Check that FLUSH TABLES t1 WITH READ LOCK
|
||||
# does not conflict with an existing FLUSH TABLES t2
|
||||
# WITH READ LOCK.
|
||||
#
|
||||
flush table t1 with read lock;
|
||||
# --> connection con1
|
||||
flush table t2 with read lock;
|
||||
unlock tables;
|
||||
# --> connection default
|
||||
unlock tables;
|
||||
#
|
||||
# Check that FLUSH TABLES t1 WITH READ LOCK
|
||||
# does not conflict with SET GLOBAL read_only=1.
|
||||
#
|
||||
set global read_only=1;
|
||||
# connection con1
|
||||
flush table t1 with read lock;
|
||||
unlock tables;
|
||||
# connection default
|
||||
set global read_only=0;
|
||||
#
|
||||
# Check that it's possible to read-lock
|
||||
# tables locked with FLUSH TABLE <list> WITH READ LOCK.
|
||||
#
|
||||
flush tables t1, t2 with read lock;
|
||||
# connection con1
|
||||
lock table t1 read, t2 read;
|
||||
unlock tables;
|
||||
# connection default
|
||||
unlock tables;
|
||||
# --> connection con1
|
||||
drop table t1, t2, t3;
|
||||
#
|
||||
|
@ -234,3 +279,97 @@ drop temporary table v1;
|
|||
unlock tables;
|
||||
drop view v2, v3;
|
||||
drop table t1, v1;
|
||||
#
|
||||
# FLUSH TABLES <list> WITH READ LOCK and HANDLER
|
||||
#
|
||||
drop table if exists t1;
|
||||
create table t1 (a int, key a (a));
|
||||
insert into t1 (a) values (1), (2), (3);
|
||||
handler t1 open;
|
||||
handler t1 read a next;
|
||||
a
|
||||
1
|
||||
handler t1 read a next;
|
||||
a
|
||||
2
|
||||
flush tables t1 with read lock;
|
||||
handler t1 read a next;
|
||||
ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
|
||||
unlock tables;
|
||||
#
|
||||
# Sic: lost handler position.
|
||||
#
|
||||
handler t1 read a next;
|
||||
a
|
||||
1
|
||||
handler t1 close;
|
||||
drop table t1;
|
||||
#
|
||||
# Bug#52117 Pending FLUSH TALBES <list> aborts
|
||||
# transactions unnecessarily.
|
||||
#
|
||||
drop table if exists t1;
|
||||
# --> conection default
|
||||
create table t1 (a int);
|
||||
begin;
|
||||
select * from t1;
|
||||
a
|
||||
# --> connection con1
|
||||
#
|
||||
# Issue a LOCK TABLE t1 READ. We could use HANDLER t1 OPEN
|
||||
# or a long-running select -- anything that
|
||||
# prevents FLUSH TABLE t1 from immediate completion would do.
|
||||
#
|
||||
lock table t1 read;
|
||||
# --> connection con2
|
||||
#
|
||||
# FLUSH TABLE expels the table definition from the cache.
|
||||
# Sending 'flush table t1'...
|
||||
flush table t1;
|
||||
# --> connection default
|
||||
# Let flush table sync in.
|
||||
select * from t1;
|
||||
# --> connection con1
|
||||
select * from t1;
|
||||
a
|
||||
unlock tables;
|
||||
# --> connection con2
|
||||
# Reaping 'flush table t1'...
|
||||
# --> connection default
|
||||
# Reaping 'select * from t1'...
|
||||
a
|
||||
commit;
|
||||
#
|
||||
# Repeat the same test but with FLUSH TABLES
|
||||
#
|
||||
begin;
|
||||
select * from t1;
|
||||
a
|
||||
# --> connection con1
|
||||
#
|
||||
# Issue a LOCK TABLE t1 READ.
|
||||
#
|
||||
lock table t1 read;
|
||||
# --> connection con2
|
||||
#
|
||||
# FLUSH TABLES expels the table definition from the cache.
|
||||
# Sending 'flush tables'...
|
||||
flush tables;
|
||||
# --> connection default
|
||||
# Let flush table sync in.
|
||||
select * from t1;
|
||||
# --> connection con1
|
||||
select * from t1;
|
||||
a
|
||||
unlock tables;
|
||||
# --> connection con2
|
||||
# Reaping 'flush tables'...
|
||||
# --> connection default
|
||||
# Reaping 'select * from t1'...
|
||||
a
|
||||
commit;
|
||||
# Cleanup
|
||||
# --> connection con1
|
||||
# --> connection con2
|
||||
# --> connection default
|
||||
drop table t1;
|
||||
|
|
|
@ -1003,6 +1003,7 @@ SELECT 1 FROM
|
|||
1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
#
|
||||
# Bug #52397: another crash with explain extended and group_concat
|
||||
#
|
||||
|
@ -1019,6 +1020,25 @@ Warnings:
|
|||
Note 1003 select 1 AS `1` from dual
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
#
|
||||
# Bug #54476: crash when group_concat and 'with rollup' in prepared statements
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
PREPARE stmt FROM "SELECT GROUP_CONCAT(t1.a ORDER BY t1.a) FROM t1 JOIN t1 t2 GROUP BY t1.a WITH ROLLUP";
|
||||
EXECUTE stmt;
|
||||
GROUP_CONCAT(t1.a ORDER BY t1.a)
|
||||
1,1
|
||||
2,2
|
||||
1,1,2,2
|
||||
EXECUTE stmt;
|
||||
GROUP_CONCAT(t1.a ORDER BY t1.a)
|
||||
1,1
|
||||
2,2
|
||||
1,1,2,2
|
||||
DEALLOCATE PREPARE stmt;
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
CREATE TABLE t1 (a VARCHAR(6), b INT);
|
||||
CREATE TABLE t2 (a VARCHAR(6), b INT);
|
||||
|
|
|
@ -1713,9 +1713,20 @@ f1 f2 f3 f4 f1 = f2
|
|||
NULL NULL NULL NULL NULL
|
||||
drop table t1;
|
||||
#
|
||||
# Bug #54465: assert: field_types == 0 || field_types[field_pos] ==
|
||||
# MYSQL_TYPE_LONGLONG
|
||||
#
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
SELECT MAX((SELECT 1 FROM t1 ORDER BY @var LIMIT 1)) m FROM t1 t2, t1
|
||||
ORDER BY t1.a;
|
||||
m
|
||||
1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug#55648: Server crash on MIX/MAX on maximum time value
|
||||
# Bug#55648: Server crash on MIN/MAX on maximum time value
|
||||
#
|
||||
CREATE TABLE t1(c1 TIME NOT NULL);
|
||||
INSERT INTO t1 VALUES('837:59:59');
|
||||
|
@ -1725,3 +1736,13 @@ MAX(c1)
|
|||
838:59:59
|
||||
DROP TABLE t1;
|
||||
# End of the bug#55648
|
||||
#
|
||||
# Bug#56120: Failed assertion on MIN/MAX on negative time value
|
||||
#
|
||||
CREATE TABLE t1(c1 TIME NOT NULL);
|
||||
INSERT INTO t1 VALUES('-00:00:01');
|
||||
SELECT MAX(c1),MIN(c1) FROM t1;
|
||||
MAX(c1) MIN(c1)
|
||||
-00:00:01 -00:00:01
|
||||
DROP TABLE t1;
|
||||
# End of the bug#56120
|
||||
|
|
|
@ -186,3 +186,13 @@ MAX(IFNULL(CAST(c AS UNSIGNED), 0))
|
|||
12345678901234567890
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
#
|
||||
# Bug#55077: Assertion failed: width > 0 && to != ((void *)0), file .\dtoa.c
|
||||
#
|
||||
CREATE TABLE t1 (a LONGBLOB, b DOUBLE);
|
||||
INSERT INTO t1 VALUES (NULL, 0), (NULL, 1);
|
||||
SELECT IF(b, (SELECT a FROM t1 LIMIT 1), b) c FROM t1 GROUP BY c;
|
||||
c
|
||||
NULL
|
||||
0
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -337,6 +337,21 @@ select connection_id() > 0;
|
|||
connection_id() > 0
|
||||
1
|
||||
#
|
||||
# Bug #54461: crash with longblob and union or update with subquery
|
||||
#
|
||||
CREATE TABLE t1 (a INT, b LONGBLOB);
|
||||
INSERT INTO t1 VALUES (1, '2'), (2, '3'), (3, '2');
|
||||
SELECT DISTINCT LEAST(a, (SELECT b FROM t1 LIMIT 1)) FROM t1 UNION SELECT 1;
|
||||
LEAST(a, (SELECT b FROM t1 LIMIT 1))
|
||||
1
|
||||
2
|
||||
SELECT DISTINCT GREATEST(a, (SELECT b FROM t1 LIMIT 1)) FROM t1 UNION SELECT 1;
|
||||
GREATEST(a, (SELECT b FROM t1 LIMIT 1))
|
||||
2
|
||||
3
|
||||
1
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug #52165: Assertion failed: file .\dtoa.c, line 465
|
||||
#
|
||||
CREATE TABLE t1 (a SET('a'), b INT);
|
||||
|
|
|
@ -2734,3 +2734,28 @@ format(123, 1, 'Non-existent-locale')
|
|||
Warnings:
|
||||
Warning 1649 Unknown locale: 'Non-existent-locale'
|
||||
End of 5.4 tests
|
||||
#
|
||||
# Start of 5.5 tests
|
||||
#
|
||||
#
|
||||
# Bug#55912 FORMAT with locale set fails for numbers < 1000
|
||||
#
|
||||
SELECT FORMAT(123.33, 2, 'no_NO'), FORMAT(1123.33, 2, 'no_NO');
|
||||
FORMAT(123.33, 2, 'no_NO') FORMAT(1123.33, 2, 'no_NO')
|
||||
123,33 1.123,33
|
||||
SELECT FORMAT(12333e-2, 2, 'no_NO'), FORMAT(112333e-2, 2, 'no_NO');
|
||||
FORMAT(12333e-2, 2, 'no_NO') FORMAT(112333e-2, 2, 'no_NO')
|
||||
123,33 1.123,33
|
||||
CREATE TABLE t1 AS SELECT format(123,2,'no_NO');
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`format(123,2,'no_NO')` varchar(37) NOT NULL DEFAULT ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SELECT * FROM t1;
|
||||
format(123,2,'no_NO')
|
||||
123,00
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
|
|
@ -1305,4 +1305,12 @@ date_sub("0069-01-01 00:00:01",INTERVAL 2 SECOND)
|
|||
select date_sub("0169-01-01 00:00:01",INTERVAL 2 SECOND);
|
||||
date_sub("0169-01-01 00:00:01",INTERVAL 2 SECOND)
|
||||
0168-12-31 23:59:59
|
||||
CREATE TABLE t1(a DOUBLE NOT NULL);
|
||||
INSERT INTO t1 VALUES (0),(9.216e-096);
|
||||
# should not crash
|
||||
SELECT 1 FROM t1 ORDER BY @x:=makedate(a,a);
|
||||
1
|
||||
1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -1811,6 +1811,41 @@ MAX(t2.a)
|
|||
2
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# Bug#55188: GROUP BY, GROUP_CONCAT and TEXT - inconsistent results
|
||||
#
|
||||
CREATE TABLE t1 (a text, b varchar(10));
|
||||
INSERT INTO t1 VALUES (repeat('1', 1300),'one'), (repeat('1', 1300),'two');
|
||||
EXPLAIN
|
||||
SELECT SUBSTRING(a,1,10), LENGTH(a), GROUP_CONCAT(b) FROM t1 GROUP BY a;
|
||||
id 1
|
||||
select_type SIMPLE
|
||||
table t1
|
||||
type ALL
|
||||
possible_keys NULL
|
||||
key NULL
|
||||
key_len NULL
|
||||
ref NULL
|
||||
rows 2
|
||||
Extra Using filesort
|
||||
SELECT SUBSTRING(a,1,10), LENGTH(a), GROUP_CONCAT(b) FROM t1 GROUP BY a;
|
||||
SUBSTRING(a,1,10) LENGTH(a) GROUP_CONCAT(b)
|
||||
1111111111 1300 one,two
|
||||
EXPLAIN
|
||||
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
|
||||
id 1
|
||||
select_type SIMPLE
|
||||
table t1
|
||||
type ALL
|
||||
possible_keys NULL
|
||||
key NULL
|
||||
key_len NULL
|
||||
ref NULL
|
||||
rows 2
|
||||
Extra Using temporary; Using filesort
|
||||
SELECT SUBSTRING(a,1,10), LENGTH(a) FROM t1 GROUP BY a;
|
||||
SUBSTRING(a,1,10) LENGTH(a)
|
||||
1111111111 1300
|
||||
DROP TABLE t1;
|
||||
# End of 5.1 tests
|
||||
#
|
||||
# Bug#49771: Incorrect MIN (date) when minimum value is 0000-00-00
|
||||
|
|
60
mysql-test/r/handler_read_last.result
Normal file
60
mysql-test/r/handler_read_last.result
Normal file
|
@ -0,0 +1,60 @@
|
|||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a INT, INDEX (a));
|
||||
INSERT INTO t1 VALUES (),(),(),(),(),(),(),(),(),();
|
||||
FLUSH STATUS;
|
||||
SELECT a FROM t1 ORDER BY a LIMIT 1;
|
||||
a
|
||||
NULL
|
||||
SHOW STATUS LIKE 'HANDLER_READ%';
|
||||
Variable_name Value
|
||||
Handler_read_first 1
|
||||
Handler_read_key 0
|
||||
Handler_read_last 0
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
Handler_read_rnd_next 0
|
||||
FLUSH STATUS;
|
||||
SELECT a FROM t1 ORDER BY a DESC LIMIT 1;
|
||||
a
|
||||
NULL
|
||||
SHOW STATUS LIKE 'HANDLER_READ%';
|
||||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 0
|
||||
Handler_read_last 1
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
Handler_read_rnd_next 0
|
||||
FLUSH STATUS;
|
||||
SELECT a FROM t1 ORDER BY a LIMIT 3;
|
||||
a
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
SHOW STATUS LIKE 'HANDLER_READ%';
|
||||
Variable_name Value
|
||||
Handler_read_first 1
|
||||
Handler_read_key 0
|
||||
Handler_read_last 0
|
||||
Handler_read_next 2
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
Handler_read_rnd_next 0
|
||||
FLUSH STATUS;
|
||||
SELECT a FROM t1 ORDER BY a DESC LIMIT 3;
|
||||
a
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
SHOW STATUS LIKE 'HANDLER_READ%';
|
||||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 0
|
||||
Handler_read_last 1
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 2
|
||||
Handler_read_rnd 0
|
||||
Handler_read_rnd_next 0
|
||||
DROP TABLE t1;
|
|
@ -89,3 +89,15 @@ UNIQUE_CONSTRAINT_NAME
|
|||
NULL
|
||||
drop table t2;
|
||||
set foreign_key_checks = 1;
|
||||
#
|
||||
# Bug#55973 Assertion `thd->transaction.stmt.is_empty()'
|
||||
# on CREATE TABLE .. SELECT I_S.PART
|
||||
#
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
CREATE VIEW v1 AS SELECT 1;
|
||||
CREATE TABLE t1 engine = InnoDB AS
|
||||
SELECT * FROM information_schema.partitions
|
||||
WHERE table_schema= 'test' AND table_name= 'v1';
|
||||
DROP TABLE t1;
|
||||
DROP VIEW v1;
|
||||
|
|
|
@ -671,3 +671,18 @@ drop table t1;
|
|||
#
|
||||
# End of 5.4 tests
|
||||
#
|
||||
#
|
||||
# Bug#54106 assert in Protocol::end_statement,
|
||||
# INSERT IGNORE ... SELECT ... UNION SELECT ...
|
||||
#
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 (a, a) VALUES (1, 1);
|
||||
ERROR 42000: Column 'a' specified twice
|
||||
INSERT IGNORE t1 (a, a) VALUES (1, 1);
|
||||
ERROR 42000: Column 'a' specified twice
|
||||
INSERT IGNORE t1 (a, a) SELECT 1,1;
|
||||
ERROR 42000: Column 'a' specified twice
|
||||
INSERT IGNORE t1 (a, a) SELECT 1,1 UNION SELECT 2,2;
|
||||
ERROR 42000: Column 'a' specified twice
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -694,6 +694,7 @@ show status like 'Handler_read%';
|
|||
Variable_name Value
|
||||
Handler_read_first 1
|
||||
Handler_read_key 0
|
||||
Handler_read_last 0
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
|
|
@ -854,6 +854,7 @@ show status like 'Handler_read%';
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 0
|
||||
Handler_read_last 0
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
|
|
@ -1238,6 +1238,7 @@ show status like 'Handler_read%';
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 5
|
||||
Handler_read_last 0
|
||||
Handler_read_next 0
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
|
|
@ -44,7 +44,7 @@ a abmon mon
|
|||
2006-12-01 Δεκ Δεκέμβριος
|
||||
SELECT format(123456.789, 3, 'el_GR');
|
||||
format(123456.789, 3, 'el_GR')
|
||||
123456.789
|
||||
123456,789
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#46633 Obsolete Serbian locale name
|
||||
|
|
|
@ -2034,6 +2034,155 @@ set debug_sync='now SIGNAL go2';
|
|||
# Switching to connection 'default'.
|
||||
# Reaping ALTER. It should succeed and not produce ER_LOCK_DEADLOCK.
|
||||
drop table t1;
|
||||
#
|
||||
# Now, test for a situation in which deadlock involves waiting not
|
||||
# only in MDL subsystem but also for TDC. Such deadlocks should be
|
||||
# successfully detected. If possible, they should be resolved without
|
||||
# resorting to ER_LOCK_DEADLOCK error.
|
||||
#
|
||||
create table t1(i int);
|
||||
create table t2(j int);
|
||||
#
|
||||
# First, let us check how we handle a simple scenario involving
|
||||
# waits in MDL and TDC.
|
||||
#
|
||||
set debug_sync= 'RESET';
|
||||
# Switching to connection 'deadlock_con1'.
|
||||
# Start a statement, which will acquire SR metadata lock on t1, open it
|
||||
# and then stop, before trying to acquire SW lock on t2 and opening it.
|
||||
set debug_sync='open_tables_after_open_and_process_table SIGNAL parked WAIT_FOR go';
|
||||
# Sending:
|
||||
select * from t1 where i in (select j from t2 for update);
|
||||
# Switching to connection 'deadlock_con2'.
|
||||
# Wait till the above SELECT stops.
|
||||
set debug_sync='now WAIT_FOR parked';
|
||||
# The below FLUSH TABLES WITH READ LOCK should acquire
|
||||
# SNW locks on t1 and t2 and wait till SELECT closes t1.
|
||||
# Sending:
|
||||
flush tables t1, t2 with read lock;
|
||||
# Switching to connection 'deadlock_con3'.
|
||||
# Wait until FLUSH TABLES WITH t1, t2 READ LOCK starts waiting
|
||||
# for SELECT to close t1.
|
||||
# Resume SELECT, so it tries to acquire SW lock on t1 and blocks,
|
||||
# creating a deadlock. This deadlock should be detected and resolved
|
||||
# by backing-off SELECT. As a result FTWRL should be able to finish.
|
||||
set debug_sync='now SIGNAL go';
|
||||
# Switching to connection 'deadlock_con2'.
|
||||
# Reap FLUSH TABLES WITH READ LOCK.
|
||||
unlock tables;
|
||||
# Switching to connection 'deadlock_con1'.
|
||||
# Reap SELECT.
|
||||
i
|
||||
#
|
||||
# The same scenario with a slightly different order of events
|
||||
# which emphasizes that setting correct deadlock detector weights
|
||||
# for flush waits is important.
|
||||
#
|
||||
set debug_sync= 'RESET';
|
||||
# Switching to connection 'deadlock_con2'.
|
||||
set debug_sync='flush_tables_with_read_lock_after_acquire_locks SIGNAL parked WAIT_FOR go';
|
||||
# The below FLUSH TABLES WITH READ LOCK should acquire
|
||||
# SNW locks on t1 and t2 and wait on debug sync point.
|
||||
# Sending:
|
||||
flush tables t1, t2 with read lock;
|
||||
# Switching to connection 'deadlock_con1'.
|
||||
# Wait till FLUSH TABLE WITH READ LOCK stops.
|
||||
set debug_sync='now WAIT_FOR parked';
|
||||
# Start statement which will acquire SR metadata lock on t1, open
|
||||
# it and then will block while trying to acquire SW lock on t2.
|
||||
# Sending:
|
||||
select * from t1 where i in (select j from t2 for update);
|
||||
# Switching to connection 'deadlock_con3'.
|
||||
# Wait till the above SELECT blocks.
|
||||
# Resume FLUSH TABLES, so it tries to flush t1, thus creating
|
||||
# a deadlock. This deadlock should be detected and resolved by
|
||||
# backing-off SELECT. As a result FTWRL should be able to finish.
|
||||
set debug_sync='now SIGNAL go';
|
||||
# Switching to connection 'deadlock_con2'.
|
||||
# Reap FLUSH TABLES WITH READ LOCK.
|
||||
unlock tables;
|
||||
# Switching to connection 'deadlock_con1'.
|
||||
# Reap SELECT.
|
||||
i
|
||||
#
|
||||
# Now a more complex scenario involving two connections
|
||||
# waiting for MDL and one for TDC.
|
||||
#
|
||||
set debug_sync= 'RESET';
|
||||
# Switching to connection 'deadlock_con1'.
|
||||
# Start a statement which will acquire SR metadata lock on t2, open it
|
||||
# and then stop, before trying to acquire SR on t1 and opening it.
|
||||
set debug_sync='open_tables_after_open_and_process_table SIGNAL parked WAIT_FOR go';
|
||||
# Sending:
|
||||
select * from t2, t1;
|
||||
# Switching to connection 'deadlock_con2'.
|
||||
# Wait till the above SELECT stops.
|
||||
set debug_sync='now WAIT_FOR parked';
|
||||
# The below FLUSH TABLES WITH READ LOCK should acquire
|
||||
# SNW locks on t2 and wait till SELECT closes t2.
|
||||
# Sending:
|
||||
flush tables t2 with read lock;
|
||||
# Switching to connection 'deadlock_con3'.
|
||||
# Wait until FLUSH TABLES WITH READ LOCK starts waiting
|
||||
# for SELECT to close t2.
|
||||
# The below DROP TABLES should acquire X lock on t1 and start
|
||||
# waiting for X lock on t2.
|
||||
# Sending:
|
||||
drop tables t1, t2;
|
||||
# Switching to connection 'default'.
|
||||
# Wait until DROP TABLES starts waiting for X lock on t2.
|
||||
# Resume SELECT, so it tries to acquire SR lock on t1 and blocks,
|
||||
# creating a deadlock. This deadlock should be detected and resolved
|
||||
# by backing-off SELECT. As a result, FTWRL should be able to finish.
|
||||
set debug_sync='now SIGNAL go';
|
||||
# Switching to connection 'deadlock_con2'.
|
||||
# Reap FLUSH TABLES WITH READ LOCK.
|
||||
# Unblock DROP TABLES.
|
||||
unlock tables;
|
||||
# Switching to connection 'deadlock_con3'.
|
||||
# Reap DROP TABLES.
|
||||
# Switching to connection 'deadlock_con1'.
|
||||
# Reap SELECT. It should emit error about missing table.
|
||||
ERROR 42S02: Table 'test.t2' doesn't exist
|
||||
# Switching to connection 'default'.
|
||||
set debug_sync= 'RESET';
|
||||
#
|
||||
# Test for a scenario in which FLUSH TABLES <list> WITH READ LOCK
|
||||
# used to erroneously release metadata locks.
|
||||
#
|
||||
drop tables if exists t1, t2;
|
||||
set debug_sync= 'RESET';
|
||||
create table t1(i int);
|
||||
create table t2(j int);
|
||||
# Switching to connection 'con2'.
|
||||
set debug_sync='open_tables_after_open_and_process_table SIGNAL parked WAIT_FOR go';
|
||||
# The below FLUSH TABLES <list> WITH READ LOCK should acquire
|
||||
# SNW locks on t1 and t2, open table t1 and block on the debug
|
||||
# sync point.
|
||||
# Sending:
|
||||
flush tables t1, t2 with read lock;
|
||||
# Switching to connection 'con1'.
|
||||
# Wait till FLUSH TABLES <list> WITH READ LOCK stops.
|
||||
set debug_sync='now WAIT_FOR parked';
|
||||
# Start a statement which will flush all tables and thus
|
||||
# invalidate table t1 open by FLUSH TABLES <list> WITH READ LOCK.
|
||||
# Sending:
|
||||
flush tables;
|
||||
# Switching to connection 'default'.
|
||||
# Wait till the above FLUSH TABLES blocks.
|
||||
# Resume FLUSH TABLES <list> WITH READ LOCK, so it tries to open t2
|
||||
# discovers that its t1 is obsolete and tries to reopen all tables.
|
||||
# Such reopen should not cause releasing of SNW metadata locks
|
||||
# which would result in assertion failures.
|
||||
set debug_sync='now SIGNAL go';
|
||||
# Switching to connection 'con2'.
|
||||
# Reap FLUSH TABLES <list> WITH READ LOCK.
|
||||
unlock tables;
|
||||
# Switching to connection 'con1'.
|
||||
# Reap FLUSH TABLES.
|
||||
# Clean-up.
|
||||
# Switching to connection 'default'.
|
||||
drop tables t1, t2;
|
||||
set debug_sync= 'RESET';
|
||||
#
|
||||
# Test for bug #46748 "Assertion in MDL_context::wait_for_locks()
|
||||
|
|
|
@ -933,7 +933,8 @@ DROP TABLE tm1, t1, t2;
|
|||
CREATE TABLE t1(c1 INT);
|
||||
CREATE TABLE t2 (c1 INT) ENGINE=MERGE UNION=(t1) INSERT_METHOD=FIRST;
|
||||
CREATE TABLE IF NOT EXISTS t1 SELECT * FROM t2;
|
||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||
Warnings:
|
||||
Note 1050 Table 't1' already exists
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (id INT NOT NULL, ref INT NOT NULL, INDEX (id)) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 LIKE t1;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
SET @old_general_log= @@global.general_log;
|
||||
SET @old_slow_query_log= @@global.slow_query_log;
|
||||
ok
|
||||
|
||||
# cat MYSQL_TMP_DIR/test_wl4435.out.log
|
||||
|
@ -120,3 +121,4 @@ mysql_stmt_next_result(): 0; field_count: 0
|
|||
# ------------------------------------
|
||||
|
||||
SET @@global.general_log= @old_general_log;
|
||||
SET @@global.slow_query_log= @old_slow_query_log;
|
||||
|
|
5
mysql-test/r/mysql_not_windows.result
Normal file
5
mysql-test/r/mysql_not_windows.result
Normal file
|
@ -0,0 +1,5 @@
|
|||
Bug #54466 client 5.5 built from source lacks "pager" support
|
||||
a
|
||||
1
|
||||
|
||||
End of tests
|
|
@ -28,7 +28,7 @@ SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/
|
|||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||
SET @@session.lc_time_names=0/*!*/;
|
||||
SET @@session.collation_database=DEFAULT/*!*/;
|
||||
drop table if exists t1,t2,t3,t4,t5,t03,t04
|
||||
DROP TABLE IF EXISTS `t1`,`t2`,`t3`,`t4`,`t5`,`t03`,`t04` /* generated by server */
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
create table t1 (word varchar(20))
|
||||
|
@ -229,7 +229,7 @@ SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/
|
|||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||
SET @@session.lc_time_names=0/*!*/;
|
||||
SET @@session.collation_database=DEFAULT/*!*/;
|
||||
drop table if exists t1,t2,t3,t4,t5,t03,t04
|
||||
DROP TABLE IF EXISTS `t1`,`t2`,`t3`,`t4`,`t5`,`t03`,`t04` /* generated by server */
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
create table t1 (word varchar(20))
|
||||
|
@ -628,7 +628,7 @@ SET TIMESTAMP=1000000000/*!*/;
|
|||
COMMIT
|
||||
/*!*/;
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
drop table t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
DELIMITER ;
|
||||
# End of log file
|
||||
|
|
|
@ -385,7 +385,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -567,7 +567,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -595,7 +595,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -673,7 +673,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -759,7 +759,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -806,7 +806,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -850,7 +850,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -894,7 +894,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -960,7 +960,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1004,7 +1004,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1070,7 +1070,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1114,7 +1114,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1180,7 +1180,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1224,7 +1224,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1290,7 +1290,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1334,7 +1334,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1378,7 +1378,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1439,7 +1439,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1483,7 +1483,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1527,7 +1527,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1572,7 +1572,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1616,7 +1616,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1660,7 +1660,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1704,7 +1704,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1748,7 +1748,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1792,7 +1792,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1836,7 +1836,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1880,7 +1880,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1924,7 +1924,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -1968,7 +1968,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2032,7 +2032,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2076,7 +2076,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2120,7 +2120,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2164,7 +2164,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2230,7 +2230,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2274,7 +2274,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2318,7 +2318,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2362,7 +2362,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2406,7 +2406,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2450,7 +2450,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2494,7 +2494,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2558,7 +2558,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2622,7 +2622,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2666,7 +2666,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2710,7 +2710,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2754,7 +2754,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2798,7 +2798,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2876,7 +2876,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2920,7 +2920,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -2998,7 +2998,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3076,7 +3076,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3120,7 +3120,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3198,7 +3198,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3276,7 +3276,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3320,7 +3320,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3364,7 +3364,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3408,7 +3408,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3452,7 +3452,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3496,7 +3496,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3540,7 +3540,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3584,7 +3584,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3628,7 +3628,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3672,7 +3672,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3716,7 +3716,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3760,7 +3760,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3804,7 +3804,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3848,7 +3848,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -3994,7 +3994,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1
|
||||
DROP TABLE `t1` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
|
@ -4127,7 +4127,7 @@ COMMIT
|
|||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP TABLE t1,t2
|
||||
DROP TABLE `t1`,`t2` /* generated by server */
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id 1 end_log_pos # Rotate to master-bin.000002 pos: 4
|
||||
|
|
|
@ -688,7 +688,7 @@ The following options may be given as the first argument:
|
|||
How many threads we should keep in a cache for reuse
|
||||
--thread-handling=name
|
||||
Define threads usage for handling queries, one of
|
||||
one-thread-per-connection, no-threads
|
||||
one-thread-per-connection, no-threads, loaded-dynamically
|
||||
--thread-stack=# The stack size for each thread
|
||||
--time-format=name The TIME format (ignored)
|
||||
--timed-mutexes Specify whether to time mutexes (only InnoDB mutexes are
|
||||
|
@ -860,9 +860,9 @@ performance-schema-max-file-classes 50
|
|||
performance-schema-max-file-handles 32768
|
||||
performance-schema-max-file-instances 10000
|
||||
performance-schema-max-mutex-classes 200
|
||||
performance-schema-max-mutex-instances 1000
|
||||
performance-schema-max-rwlock-classes 20
|
||||
performance-schema-max-rwlock-instances 1000
|
||||
performance-schema-max-mutex-instances 1000000
|
||||
performance-schema-max-rwlock-classes 30
|
||||
performance-schema-max-rwlock-instances 1000000
|
||||
performance-schema-max-table-handles 100000
|
||||
performance-schema-max-table-instances 50000
|
||||
performance-schema-max-thread-classes 50
|
||||
|
|
|
@ -692,7 +692,7 @@ The following options may be given as the first argument:
|
|||
How many threads we should keep in a cache for reuse
|
||||
--thread-handling=name
|
||||
Define threads usage for handling queries, one of
|
||||
one-thread-per-connection, no-threads
|
||||
one-thread-per-connection, no-threads, loaded-dynamically
|
||||
--thread-stack=# The stack size for each thread
|
||||
--time-format=name The TIME format (ignored)
|
||||
--timed-mutexes Specify whether to time mutexes (only InnoDB mutexes are
|
||||
|
@ -864,9 +864,9 @@ performance-schema-max-file-classes 50
|
|||
performance-schema-max-file-handles 32768
|
||||
performance-schema-max-file-instances 10000
|
||||
performance-schema-max-mutex-classes 200
|
||||
performance-schema-max-mutex-instances 1000
|
||||
performance-schema-max-rwlock-classes 20
|
||||
performance-schema-max-rwlock-instances 1000
|
||||
performance-schema-max-mutex-instances 1000000
|
||||
performance-schema-max-rwlock-classes 30
|
||||
performance-schema-max-rwlock-instances 1000000
|
||||
performance-schema-max-table-handles 100000
|
||||
performance-schema-max-table-instances 50000
|
||||
performance-schema-max-thread-classes 50
|
||||
|
|
|
@ -21,23 +21,17 @@ Table Op Msg_type Msg_text
|
|||
test.t1 repair Error Unknown storage engine 'partition'
|
||||
test.t1 repair error Corrupt
|
||||
ALTER TABLE t1 REPAIR PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair Error Unknown storage engine 'partition'
|
||||
test.t1 repair error Corrupt
|
||||
ERROR HY000: The 'partitioning' feature is disabled; you need MySQL built with '--with-plugin-partition' to have it working
|
||||
ALTER TABLE t1 CHECK PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check Error Unknown storage engine 'partition'
|
||||
test.t1 check error Corrupt
|
||||
ERROR HY000: The 'partitioning' feature is disabled; you need MySQL built with '--with-plugin-partition' to have it working
|
||||
ALTER TABLE t1 OPTIMIZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize Error Unknown storage engine 'partition'
|
||||
test.t1 optimize error Corrupt
|
||||
ERROR HY000: The 'partitioning' feature is disabled; you need MySQL built with '--with-plugin-partition' to have it working
|
||||
ALTER TABLE t1 ANALYZE PARTITION ALL;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze Error Unknown storage engine 'partition'
|
||||
test.t1 analyze error Corrupt
|
||||
ERROR HY000: The 'partitioning' feature is disabled; you need MySQL built with '--with-plugin-partition' to have it working
|
||||
ALTER TABLE t1 REBUILD PARTITION ALL;
|
||||
ERROR 42000: Unknown storage engine 'partition'
|
||||
ALTER TABLE t1 TRUNCATE PARTITION ALL;
|
||||
ERROR HY000: The 'partitioning' feature is disabled; you need MySQL built with '--with-plugin-partition' to have it working
|
||||
ALTER TABLE t1 ENGINE Memory;
|
||||
ERROR 42000: Unknown storage engine 'partition'
|
||||
ALTER TABLE t1 ADD (new INT);
|
||||
|
|
|
@ -424,6 +424,7 @@ SHOW STATUS LIKE "handler_read%";
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 6
|
||||
Handler_read_last 0
|
||||
Handler_read_next 2
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
|
|
@ -359,6 +359,7 @@ SHOW STATUS LIKE 'Handler_read_%';
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 2
|
||||
Handler_read_last 0
|
||||
Handler_read_next 4
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
@ -377,6 +378,7 @@ SHOW STATUS LIKE 'Handler_read_%';
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 2
|
||||
Handler_read_last 0
|
||||
Handler_read_next 4
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
@ -407,6 +409,7 @@ SHOW STATUS LIKE 'Handler_read_%';
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 1
|
||||
Handler_read_last 0
|
||||
Handler_read_next 2
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
@ -423,6 +426,7 @@ SHOW STATUS LIKE 'Handler_read_%';
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 1
|
||||
Handler_read_last 0
|
||||
Handler_read_next 2
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
@ -439,6 +443,7 @@ SHOW STATUS LIKE 'Handler_read_%';
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 1
|
||||
Handler_read_last 0
|
||||
Handler_read_next 2
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
@ -455,6 +460,7 @@ SHOW STATUS LIKE 'Handler_read_%';
|
|||
Variable_name Value
|
||||
Handler_read_first 0
|
||||
Handler_read_key 1
|
||||
Handler_read_last 0
|
||||
Handler_read_next 2
|
||||
Handler_read_prev 0
|
||||
Handler_read_rnd 0
|
||||
|
|
|
@ -3,7 +3,7 @@ FLUSH TABLES;
|
|||
SELECT * FROM t1;
|
||||
ERROR HY000: The MySQL server is running with the --skip-partition option so it cannot execute this statement
|
||||
TRUNCATE TABLE t1;
|
||||
ERROR HY000: The MySQL server is running with the --skip-partition option so it cannot execute this statement
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze Error The MySQL server is running with the --skip-partition option so it cannot execute this statement
|
||||
|
|
|
@ -1,5 +1,103 @@
|
|||
drop table if exists t1, t2;
|
||||
#
|
||||
# Bug#54747: Deadlock between REORGANIZE PARTITION and
|
||||
# SELECT is not detected
|
||||
#
|
||||
SET @old_innodb_thread_concurrency:= @@innodb_thread_concurrency;
|
||||
SET GLOBAL innodb_thread_concurrency = 1;
|
||||
CREATE TABLE t1
|
||||
(user_num BIGINT,
|
||||
hours SMALLINT,
|
||||
KEY user_num (user_num))
|
||||
ENGINE = InnoDB
|
||||
PARTITION BY RANGE COLUMNS (hours)
|
||||
(PARTITION hour_003 VALUES LESS THAN (3),
|
||||
PARTITION hour_004 VALUES LESS THAN (4),
|
||||
PARTITION hour_005 VALUES LESS THAN (5),
|
||||
PARTITION hour_last VALUES LESS THAN (MAXVALUE));
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5);
|
||||
BEGIN;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
5
|
||||
# con1
|
||||
# SEND a ALTER PARTITION which waits on the ongoing transaction.
|
||||
ALTER TABLE t1
|
||||
REORGANIZE PARTITION hour_003, hour_004 INTO
|
||||
(PARTITION oldest VALUES LESS THAN (4));
|
||||
# Connection default wait until the ALTER is in 'waiting for table...'
|
||||
# state and then continue the transaction by trying a SELECT
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
5
|
||||
COMMIT;
|
||||
# con1, reaping ALTER.
|
||||
# Disconnecting con1 and switching to default. Cleaning up.
|
||||
SET GLOBAL innodb_thread_concurrency = @old_innodb_thread_concurrency;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#50418: DROP PARTITION does not interact with transactions
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
id INT AUTO_INCREMENT NOT NULL,
|
||||
name CHAR(50) NOT NULL,
|
||||
myDate DATE NOT NULL,
|
||||
PRIMARY KEY (id, myDate),
|
||||
INDEX idx_date (myDate)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE ( TO_DAYS(myDate) ) (
|
||||
PARTITION p0 VALUES LESS THAN (734028),
|
||||
PARTITION p1 VALUES LESS THAN (734029),
|
||||
PARTITION p2 VALUES LESS THAN (734030),
|
||||
PARTITION p3 VALUES LESS THAN MAXVALUE
|
||||
) ;
|
||||
INSERT INTO t1 VALUES
|
||||
(NULL, 'Lachlan', '2009-09-13'),
|
||||
(NULL, 'Clint', '2009-09-13'),
|
||||
(NULL, 'John', '2009-09-14'),
|
||||
(NULL, 'Dave', '2009-09-14'),
|
||||
(NULL, 'Jeremy', '2009-09-15'),
|
||||
(NULL, 'Scott', '2009-09-15'),
|
||||
(NULL, 'Jeff', '2009-09-16'),
|
||||
(NULL, 'Joe', '2009-09-16');
|
||||
SET AUTOCOMMIT=0;
|
||||
SELECT * FROM t1 FOR UPDATE;
|
||||
id name myDate
|
||||
1 Lachlan 2009-09-13
|
||||
2 Clint 2009-09-13
|
||||
3 John 2009-09-14
|
||||
4 Dave 2009-09-14
|
||||
5 Jeremy 2009-09-15
|
||||
6 Scott 2009-09-15
|
||||
7 Jeff 2009-09-16
|
||||
8 Joe 2009-09-16
|
||||
UPDATE t1 SET name = 'Mattias' WHERE id = 7;
|
||||
SELECT * FROM t1 WHERE id = 7;
|
||||
id name myDate
|
||||
7 Mattias 2009-09-16
|
||||
# Connection con1
|
||||
SET lock_wait_timeout = 1;
|
||||
# After the patch it will wait and fail on timeout.
|
||||
ALTER TABLE t1 DROP PARTITION p3;
|
||||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Error 1205 Lock wait timeout exceeded; try restarting transaction
|
||||
# Connection default
|
||||
SELECT * FROM t1;
|
||||
id name myDate
|
||||
1 Lachlan 2009-09-13
|
||||
2 Clint 2009-09-13
|
||||
3 John 2009-09-14
|
||||
4 Dave 2009-09-14
|
||||
5 Jeremy 2009-09-15
|
||||
6 Scott 2009-09-15
|
||||
7 Mattias 2009-09-16
|
||||
8 Joe 2009-09-16
|
||||
# No changes.
|
||||
COMMIT;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#51830: Incorrect partition pruning on range partition (regression)
|
||||
#
|
||||
CREATE TABLE t1 (a INT NOT NULL)
|
||||
|
|
16
mysql-test/r/partition_not_blackhole.result
Normal file
16
mysql-test/r/partition_not_blackhole.result
Normal file
|
@ -0,0 +1,16 @@
|
|||
DROP TABLE IF EXISTS t1;
|
||||
#
|
||||
# Bug#46086: crash when dropping a partitioned table and
|
||||
# the original engine is disabled
|
||||
# Copy a .frm and .par file which was created with:
|
||||
# create table `t1` (`id` int primary key) engine=blackhole
|
||||
# partition by key () partitions 1;
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
t1
|
||||
SHOW CREATE TABLE t1;
|
||||
ERROR HY000: Incorrect information in file: './test/t1.frm'
|
||||
DROP TABLE t1;
|
||||
ERROR 42S02: Unknown table 't1'
|
||||
t1.frm
|
||||
t1.par
|
|
@ -938,3 +938,47 @@ select sum(count) from t2 ch where ch.defid in (50,52) and ch.day between 200703
|
|||
sum(count)
|
||||
579
|
||||
drop table t1, t2;
|
||||
#
|
||||
# Bug#50939: Loose Index Scan unduly relies on engine to remember range
|
||||
# endpoints
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
a INT,
|
||||
b INT,
|
||||
KEY ( a, b )
|
||||
) PARTITION BY HASH (a) PARTITIONS 1;
|
||||
CREATE TABLE t2 (
|
||||
a INT,
|
||||
b INT,
|
||||
KEY ( a, b )
|
||||
);
|
||||
INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4), (5, 5);
|
||||
INSERT INTO t1 SELECT a + 5, b + 5 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 10, b + 10 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 20, b + 20 FROM t1;
|
||||
INSERT INTO t1 SELECT a + 40, b + 40 FROM t1;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# plans should be identical
|
||||
EXPLAIN SELECT a, MAX(b) FROM t1 WHERE a IN (10,100) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range a a 5 NULL 1 Using where; Using index for group-by
|
||||
EXPLAIN SELECT a, MAX(b) FROM t2 WHERE a IN (10,100) GROUP BY a;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 range a a 5 NULL 2 Using where; Using index for group-by
|
||||
FLUSH status;
|
||||
SELECT a, MAX(b) FROM t1 WHERE a IN (10, 100) GROUP BY a;
|
||||
a MAX(b)
|
||||
10 10
|
||||
# Should be no more than 4 reads.
|
||||
SHOW status LIKE 'handler_read_key';
|
||||
Variable_name Value
|
||||
Handler_read_key 4
|
||||
FLUSH status;
|
||||
SELECT a, MAX(b) FROM t2 WHERE a IN (10, 100) GROUP BY a;
|
||||
a MAX(b)
|
||||
10 10
|
||||
# Should be no more than 4 reads.
|
||||
SHOW status LIKE 'handler_read_key';
|
||||
Variable_name Value
|
||||
Handler_read_key 4
|
||||
DROP TABLE t1, t2;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue