mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
Merge kboortz@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/kent/bk/tmp3/mysql-5.0-build
This commit is contained in:
commit
7e02bed924
94 changed files with 5475 additions and 760 deletions
|
@ -1,19 +0,0 @@
|
|||
***************
|
||||
*** 39,46 ****
|
||||
c_warnings="$global_warnings -Wunused"
|
||||
cxx_warnings="$global_warnings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor"
|
||||
|
||||
! alpha_cflags="-mcpu=ev6 -Wa,-mev6" # Not used yet
|
||||
! pentium_cflags="-mcpu=pentiumpro"
|
||||
sparc_cflags=""
|
||||
|
||||
# be as fast as we can be without losing our ability to backtrace
|
||||
--- 39,46 ----
|
||||
c_warnings="$global_warnings -Wunused"
|
||||
cxx_warnings="$global_warnings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor"
|
||||
|
||||
! #alpha_cflags="-mcpu=ev6 -Wa,-mev6" # Not used yet
|
||||
! #pentium_cflags="-mcpu=pentiumpro"
|
||||
sparc_cflags=""
|
||||
|
||||
# be as fast as we can be without losing our ability to backtrace
|
|
@ -2,7 +2,7 @@ dnl Define zlib paths to point at bundled zlib
|
|||
|
||||
AC_DEFUN([MYSQL_USE_BUNDLED_ZLIB], [
|
||||
ZLIB_INCLUDES="-I\$(top_srcdir)/zlib"
|
||||
ZLIB_LIBS="\$(top_builddir)/zlib/libz.la"
|
||||
ZLIB_LIBS="\$(top_builddir)/zlib/libzlt.la"
|
||||
dnl Omit -L$pkglibdir as it's always in the list of mysql_config deps.
|
||||
ZLIB_DEPS="-lz"
|
||||
zlib_dir="zlib"
|
||||
|
@ -10,16 +10,25 @@ AC_SUBST([zlib_dir])
|
|||
mysql_cv_compress="yes"
|
||||
])
|
||||
|
||||
dnl Auxiliary macro to check for zlib at given path
|
||||
dnl Auxiliary macro to check for zlib at given path.
|
||||
dnl We are strict with the server, as "archive" engine
|
||||
dnl needs zlibCompileFlags(), but for client only we
|
||||
dnl are less strict, and take the zlib we find.
|
||||
|
||||
AC_DEFUN([MYSQL_CHECK_ZLIB_DIR], [
|
||||
save_CPPFLAGS="$CPPFLAGS"
|
||||
save_LIBS="$LIBS"
|
||||
CPPFLAGS="$ZLIB_INCLUDES $CPPFLAGS"
|
||||
LIBS="$LIBS $ZLIB_LIBS"
|
||||
if test X"$with_server" = Xno
|
||||
then
|
||||
zlibsym=zlibVersion
|
||||
else
|
||||
zlibsym=zlibCompileFlags
|
||||
fi
|
||||
AC_CACHE_VAL([mysql_cv_compress],
|
||||
[AC_TRY_LINK([#include <zlib.h>],
|
||||
[return zlibCompileFlags();],
|
||||
[return $zlibsym();],
|
||||
[mysql_cv_compress="yes"
|
||||
AC_MSG_RESULT([ok])],
|
||||
[mysql_cv_compress="no"])
|
||||
|
|
|
@ -1601,9 +1601,9 @@ fi
|
|||
# dlopen, dlerror
|
||||
case "$with_mysqld_ldflags " in
|
||||
|
||||
*"-static "*)
|
||||
*"-all-static "*)
|
||||
# No need to check for dlopen when mysqld is linked with
|
||||
# -all-static or -static as it won't be able to load any functions.
|
||||
# -all-static as it won't be able to load any functions.
|
||||
# NOTE! It would be better if it was possible to test if dlopen
|
||||
# can be used, but a good way to test it couldn't be found
|
||||
|
||||
|
|
299
configure.in.rej
299
configure.in.rej
|
@ -1,299 +0,0 @@
|
|||
***************
|
||||
*** 388,402 ****
|
||||
if expr "$target_os" : "[[Ll]]inux.*" > /dev/null
|
||||
then
|
||||
MYSQLD_DEFAULT_SWITCHES="--skip-locking"
|
||||
! IS_LINUX="true"
|
||||
AC_MSG_RESULT("yes");
|
||||
else
|
||||
MYSQLD_DEFAULT_SWITCHES=""
|
||||
! IS_LINUX="false"
|
||||
AC_MSG_RESULT("no");
|
||||
fi
|
||||
AC_SUBST(MYSQLD_DEFAULT_SWITCHES)
|
||||
! AC_SUBST(IS_LINUX)
|
||||
|
||||
dnl Find paths to some shell programs
|
||||
AC_PATH_PROG(LN, ln, ln)
|
||||
--- 388,403 ----
|
||||
if expr "$target_os" : "[[Ll]]inux.*" > /dev/null
|
||||
then
|
||||
MYSQLD_DEFAULT_SWITCHES="--skip-locking"
|
||||
! TARGET_LINUX="true"
|
||||
AC_MSG_RESULT("yes");
|
||||
+ AC_DEFINE([TARGET_OS_LINUX], [1], [Whether we build for Linux])
|
||||
else
|
||||
MYSQLD_DEFAULT_SWITCHES=""
|
||||
! TARGET_LINUX="false"
|
||||
AC_MSG_RESULT("no");
|
||||
fi
|
||||
AC_SUBST(MYSQLD_DEFAULT_SWITCHES)
|
||||
! AC_SUBST(TARGET_LINUX)
|
||||
|
||||
dnl Find paths to some shell programs
|
||||
AC_PATH_PROG(LN, ln, ln)
|
||||
***************
|
||||
*** 576,582 ****
|
||||
# (this is true on the MySQL build machines to avoid NSS problems)
|
||||
#
|
||||
|
||||
! if test "$IS_LINUX" = "true" -a "$static_nss" = ""
|
||||
then
|
||||
tmp=`nm /usr/lib/libc.a | grep _nss_files_getaliasent_r`
|
||||
if test -n "$tmp"
|
||||
--- 577,583 ----
|
||||
# (this is true on the MySQL build machines to avoid NSS problems)
|
||||
#
|
||||
|
||||
! if test "$TARGET_LINUX" = "true" -a "$static_nss" = ""
|
||||
then
|
||||
tmp=`nm /usr/lib/libc.a | grep _nss_files_getaliasent_r`
|
||||
if test -n "$tmp"
|
||||
***************
|
||||
*** 827,833 ****
|
||||
])
|
||||
AC_SUBST(WRAPLIBS)
|
||||
|
||||
! if test "$IS_LINUX" = "true"; then
|
||||
AC_MSG_CHECKING([for atomic operations])
|
||||
|
||||
AC_LANG_SAVE
|
||||
--- 828,834 ----
|
||||
])
|
||||
AC_SUBST(WRAPLIBS)
|
||||
|
||||
! if test "$TARGET_LINUX" = "true"; then
|
||||
AC_MSG_CHECKING([for atomic operations])
|
||||
|
||||
AC_LANG_SAVE
|
||||
***************
|
||||
*** 870,876 ****
|
||||
[ USE_PSTACK=no ])
|
||||
pstack_libs=
|
||||
pstack_dirs=
|
||||
! if test "$USE_PSTACK" = yes -a "$IS_LINUX" = "true" -a "$BASE_MACHINE_TYPE" = "i386" -a "$with_mit_threads" = "no"
|
||||
then
|
||||
have_libiberty= have_libbfd=
|
||||
my_save_LIBS="$LIBS"
|
||||
--- 871,877 ----
|
||||
[ USE_PSTACK=no ])
|
||||
pstack_libs=
|
||||
pstack_dirs=
|
||||
! if test "$USE_PSTACK" = yes -a "$TARGET_LINUX" = "true" -a "$BASE_MACHINE_TYPE" = "i386" -a "$with_mit_threads" = "no"
|
||||
then
|
||||
have_libiberty= have_libbfd=
|
||||
my_save_LIBS="$LIBS"
|
||||
***************
|
||||
*** 1239,1301 ****
|
||||
# Hack for DEC-UNIX (OSF1)
|
||||
if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
|
||||
then
|
||||
! # Look for LinuxThreads.
|
||||
! AC_MSG_CHECKING("LinuxThreads")
|
||||
! grepres=`grep Linuxthreads /usr/include/pthread.h 2>/dev/null | wc -l`
|
||||
! getconfres=`which getconf >/dev/null && getconf GNU_LIBPTHREAD_VERSION | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ |grep LINUXTHREADS | wc -l || echo 0`
|
||||
! if test "$grepres" -gt 0 -o "$getconfres" -gt 0
|
||||
then
|
||||
! AC_MSG_RESULT("Found")
|
||||
! AC_DEFINE(HAVE_LINUXTHREADS)
|
||||
! # Linux 2.0 sanity check
|
||||
! AC_TRY_COMPILE([#include <sched.h>], [int a = sched_get_priority_min(1);], ,
|
||||
! AC_MSG_ERROR([Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file. See the Installation chapter in the Reference Manual]))
|
||||
! # RedHat 5.0 does not work with dynamic linking of this. -static also
|
||||
! # gives a speed increase in linux so it does not hurt on other systems.
|
||||
! with_named_thread="-lpthread"
|
||||
! else
|
||||
! AC_MSG_RESULT("Not found")
|
||||
! # If this is a linux machine we should barf
|
||||
! AC_MSG_CHECKING("NPTL")
|
||||
! if test "$IS_LINUX" = "true"
|
||||
! then
|
||||
! getconfres=`which getconf >/dev/null && getconf GNU_LIBPTHREAD_VERSION | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ |grep NPTL | wc -l || echo 0`
|
||||
! if test "$getconfres" -gt 0
|
||||
then
|
||||
! AC_DEFINE(HAVE_LINUXTHREADS) dnl All this code predates NPTL, so "have linuxthreads" is a poor name.
|
||||
! with_named_thread="-lpthread"
|
||||
else
|
||||
! AC_MSG_ERROR([This is a Linux system and neither Linuxthreads nor NPTL were
|
||||
! found. Please install Linuxthreads or a new glibc and try
|
||||
! again. See the Installation chapter in the Reference Manual for
|
||||
! more information.])
|
||||
fi
|
||||
! else
|
||||
! AC_MSG_CHECKING("DEC threads")
|
||||
! if test -f /usr/shlib/libpthread.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
|
||||
! then
|
||||
! with_named_thread="-lpthread -lmach -lexc"
|
||||
! CFLAGS="$CFLAGS -D_REENTRANT"
|
||||
! CXXFLAGS="$CXXFLAGS -D_REENTRANT"
|
||||
! AC_DEFINE(HAVE_DEC_THREADS)
|
||||
! AC_MSG_RESULT("yes")
|
||||
! else
|
||||
! AC_MSG_RESULT("no")
|
||||
! AC_MSG_CHECKING("DEC 3.2 threads")
|
||||
! if test -f /usr/shlib/libpthreads.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
|
||||
! then
|
||||
! with_named_thread="-lpthreads -lmach -lc_r"
|
||||
! AC_DEFINE(HAVE_DEC_THREADS)
|
||||
! AC_DEFINE(HAVE_DEC_3_2_THREADS)
|
||||
! with_osf32_threads="yes"
|
||||
! MYSQLD_DEFAULT_SWITCHES="--skip-thread-priority"
|
||||
! AC_MSG_RESULT("yes")
|
||||
! else
|
||||
! AC_MSG_RESULT("no")
|
||||
! fi
|
||||
! fi
|
||||
! fi
|
||||
! fi
|
||||
fi
|
||||
|
||||
|
||||
--- 1240,1337 ----
|
||||
# Hack for DEC-UNIX (OSF1)
|
||||
if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
|
||||
then
|
||||
! AC_MSG_CHECKING("Linux threads")
|
||||
! if test "$TARGET_LINUX" = "true"
|
||||
then
|
||||
! AC_MSG_RESULT("starting")
|
||||
! # use getconf to check glibc contents
|
||||
! AC_MSG_CHECKING("getconf GNU_LIBPTHREAD_VERSION")
|
||||
! case `getconf GNU_LIBPTHREAD_VERSION | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ` in
|
||||
! NPTL* )
|
||||
! AC_MSG_RESULT("NPTL")
|
||||
! AC_DEFINE([HAVE_NPTL], [1], [NPTL threads implementation])
|
||||
! with_named_thread="-lpthread"
|
||||
! ;;
|
||||
! LINUXTHREADS* )
|
||||
! AC_MSG_RESULT("Linuxthreads")
|
||||
! AC_DEFINE([HAVE_LINUXTHREADS], [1],
|
||||
! [Whether we are using Xavier Leroy's LinuxThreads])
|
||||
! with_named_thread="-lpthread"
|
||||
! ;;
|
||||
! * )
|
||||
! AC_MSG_RESULT("unknown")
|
||||
! ;;
|
||||
! esac
|
||||
! if test "$with_named_thread" = "no"
|
||||
then
|
||||
! # old method, check headers
|
||||
! # Look for LinuxThreads.
|
||||
! AC_MSG_CHECKING("LinuxThreads in header file comment")
|
||||
! res=`grep Linuxthreads /usr/include/pthread.h 2>/dev/null | wc -l`
|
||||
! if test "$res" -gt 0
|
||||
! then
|
||||
! AC_MSG_RESULT("Found")
|
||||
! AC_DEFINE([HAVE_LINUXTHREADS], [1],
|
||||
! [Whether we are using Xavier Leroy's LinuxThreads])
|
||||
! # Linux 2.0 sanity check
|
||||
! AC_TRY_COMPILE([#include <sched.h>], [int a = sched_get_priority_min(1);], ,
|
||||
! AC_MSG_ERROR([Syntax error in sched.h. Change _P to __P in the /usr/include/sched.h file. See the Installation chapter in the Reference Manual]))
|
||||
! # RedHat 5.0 does not work with dynamic linking of this. -static also
|
||||
! # gives a speed increase in linux so it does not hurt on other systems.
|
||||
! with_named_thread="-lpthread"
|
||||
! else
|
||||
! AC_MSG_RESULT("Not found")
|
||||
! # If this is a linux machine we should barf
|
||||
! AC_MSG_ERROR([This is a Linux system without a working getconf,
|
||||
! and Linuxthreads was not found. Please install it (or a new glibc) and try again.
|
||||
! See the Installation chapter in the Reference Manual for more information.])
|
||||
! fi
|
||||
else
|
||||
! AC_MSG_RESULT("no need to check headers")
|
||||
fi
|
||||
! AC_MSG_CHECKING("for pthread_create in -lpthread");
|
||||
! ac_save_LIBS="$LIBS"
|
||||
! LIBS="$LIBS -lpthread"
|
||||
! AC_TRY_LINK( [#include <pthread.h>],
|
||||
! [ (void) pthread_create((pthread_t*) 0,(pthread_attr_t*) 0, 0, 0); ],
|
||||
! AC_MSG_RESULT("yes"),
|
||||
! [ AC_MSG_RESULT("no")
|
||||
! AC_MSG_ERROR([
|
||||
! This is a Linux system claiming to support threads, either Linuxthreads or NPTL, but linking a test program failed.
|
||||
! Please install one of these (or a new glibc) and try again.
|
||||
! See the Installation chapter in the Reference Manual for more information.]) ]
|
||||
! )
|
||||
! LIBS="$ac_save_LIBS"
|
||||
! else
|
||||
! AC_MSG_RESULT("no")
|
||||
! fi # "$TARGET_LINUX"
|
||||
! fi # "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
|
||||
!
|
||||
! if test "$with_named_thread" = "no" -a "$with_mit_threads" = "no"
|
||||
! then
|
||||
! AC_MSG_CHECKING("DEC threads")
|
||||
! if test -f /usr/shlib/libpthread.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
|
||||
! then
|
||||
! with_named_thread="-lpthread -lmach -lexc"
|
||||
! CFLAGS="$CFLAGS -D_REENTRANT"
|
||||
! CXXFLAGS="$CXXFLAGS -D_REENTRANT"
|
||||
! AC_DEFINE(HAVE_DEC_THREADS)
|
||||
! AC_MSG_RESULT("yes")
|
||||
! else
|
||||
! AC_MSG_RESULT("no")
|
||||
! AC_MSG_CHECKING("DEC 3.2 threads")
|
||||
! if test -f /usr/shlib/libpthreads.so -a -f /usr/lib/libmach.a -a -f /usr/ccs/lib/cmplrs/cc/libexc.a
|
||||
! then
|
||||
! with_named_thread="-lpthreads -lmach -lc_r"
|
||||
! AC_DEFINE(HAVE_DEC_THREADS)
|
||||
! AC_DEFINE(HAVE_DEC_3_2_THREADS)
|
||||
! with_osf32_threads="yes"
|
||||
! MYSQLD_DEFAULT_SWITCHES="--skip-thread-priority"
|
||||
! AC_MSG_RESULT("yes")
|
||||
! else
|
||||
! AC_MSG_RESULT("no")
|
||||
! fi
|
||||
! fi
|
||||
fi
|
||||
|
||||
|
||||
***************
|
||||
*** 1720,1726 ****
|
||||
AC_SUBST(COMPILATION_COMMENT)
|
||||
|
||||
AC_MSG_CHECKING("need of special linking flags")
|
||||
! if test "$IS_LINUX" = "true" -a "$ac_cv_prog_gcc" = "yes" -a "$all_is_static" != "yes"
|
||||
then
|
||||
LDFLAGS="$LDFLAGS -rdynamic"
|
||||
AC_MSG_RESULT("-rdynamic")
|
||||
--- 1756,1762 ----
|
||||
AC_SUBST(COMPILATION_COMMENT)
|
||||
|
||||
AC_MSG_CHECKING("need of special linking flags")
|
||||
! if test "$TARGET_LINUX" = "true" -a "$ac_cv_prog_gcc" = "yes" -a "$all_is_static" != "yes"
|
||||
then
|
||||
LDFLAGS="$LDFLAGS -rdynamic"
|
||||
AC_MSG_RESULT("-rdynamic")
|
||||
***************
|
||||
*** 1873,1878 ****
|
||||
tell atod memcpy memmove \
|
||||
setupterm strcasecmp sighold vidattr lrand48 localtime_r \
|
||||
sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \
|
||||
pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \
|
||||
pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
|
||||
pthread_attr_getstacksize pthread_key_delete \
|
||||
--- 1909,1915 ----
|
||||
tell atod memcpy memmove \
|
||||
setupterm strcasecmp sighold vidattr lrand48 localtime_r \
|
||||
sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \
|
||||
+ sigaction sigemptyset sigaddset \
|
||||
pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \
|
||||
pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
|
||||
pthread_attr_getstacksize pthread_key_delete \
|
||||
***************
|
||||
*** 1884,1890 ****
|
||||
# Sanity check: We chould not have any fseeko symbol unless
|
||||
# large_file_support=yes
|
||||
AC_CHECK_FUNCS(fseeko,
|
||||
! [if test "$large_file_support" = no -a "$IS_LINUX" = "true";
|
||||
then
|
||||
AC_MSG_ERROR("Found fseeko symbol but large_file_support is not enabled!");
|
||||
fi]
|
||||
--- 1921,1927 ----
|
||||
# Sanity check: We chould not have any fseeko symbol unless
|
||||
# large_file_support=yes
|
||||
AC_CHECK_FUNCS(fseeko,
|
||||
! [if test "$large_file_support" = no -a "$TARGET_LINUX" = "true";
|
||||
then
|
||||
AC_MSG_ERROR("Found fseeko symbol but large_file_support is not enabled!");
|
||||
fi]
|
|
@ -1,17 +0,0 @@
|
|||
***************
|
||||
*** 97,103 ****
|
||||
|
||||
|
||||
/* Fix problem with S_ISLNK() on Linux */
|
||||
! #if defined(HAVE_LINUXTHREADS)
|
||||
#undef _GNU_SOURCE
|
||||
#define _GNU_SOURCE 1
|
||||
#endif
|
||||
--- 97,103 ----
|
||||
|
||||
|
||||
/* Fix problem with S_ISLNK() on Linux */
|
||||
! #if defined(TARGET_OS_LINUX) || defined(__GLIBC__)
|
||||
#undef _GNU_SOURCE
|
||||
#define _GNU_SOURCE 1
|
||||
#endif
|
|
@ -1,80 +0,0 @@
|
|||
***************
|
||||
*** 286,293 ****
|
||||
#undef HAVE_PTHREAD_RWLOCK_RDLOCK
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
! #define sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
|
||||
! #define signal(A,B) pthread_signal((A),(void (*)(int)) (B))
|
||||
#define my_pthread_attr_setprio(A,B)
|
||||
#endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */
|
||||
|
||||
--- 294,301 ----
|
||||
#undef HAVE_PTHREAD_RWLOCK_RDLOCK
|
||||
#undef HAVE_SNPRINTF
|
||||
|
||||
! #define my_sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
|
||||
! #define my_signal(A,B) pthread_signal((A),(void (*)(int)) (B))
|
||||
#define my_pthread_attr_setprio(A,B)
|
||||
#endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */
|
||||
|
||||
***************
|
||||
*** 324,337 ****
|
||||
#if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX)
|
||||
int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
|
||||
#endif
|
||||
! #if !defined(HAVE_SIGSET) && !defined(HAVE_mit_thread) && !defined(sigset)
|
||||
! #define sigset(A,B) do { struct sigaction s; sigset_t set; \
|
||||
! sigemptyset(&set); \
|
||||
! s.sa_handler = (B); \
|
||||
! s.sa_mask = set; \
|
||||
! s.sa_flags = 0; \
|
||||
! sigaction((A), &s, (struct sigaction *) NULL); \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#ifndef my_pthread_setprio
|
||||
--- 332,358 ----
|
||||
#if !defined(HAVE_SIGWAIT) && !defined(HAVE_mit_thread) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX)
|
||||
int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */
|
||||
#endif
|
||||
!
|
||||
! /*
|
||||
! We define my_sigset() and use that instead of the system sigset() so that
|
||||
! we can favor an implementation based on sigaction(). On some systems, such
|
||||
! as Mac OS X, sigset() results in flags such as SA_RESTART being set, and
|
||||
! we want to make sure that no such flags are set.
|
||||
! */
|
||||
! #if defined(HAVE_SIGACTION) && !defined(my_sigset)
|
||||
! #define my_sigset(A,B) do { struct sigaction s; sigset_t set; int rc; \
|
||||
! DBUG_ASSERT((A) != 0); \
|
||||
! sigemptyset(&set); \
|
||||
! s.sa_handler = (B); \
|
||||
! s.sa_mask = set; \
|
||||
! s.sa_flags = 0; \
|
||||
! rc= sigaction((A), &s, (struct sigaction *) NULL); \
|
||||
! DBUG_ASSERT(rc == 0); \
|
||||
} while (0)
|
||||
+ #elif defined(HAVE_SIGSET) && !defined(my_sigset)
|
||||
+ #define my_sigset(A,B) sigset((A),(B))
|
||||
+ #elif !defined(my_sigset)
|
||||
+ #define my_sigset(A,B) signal((A),(B))
|
||||
#endif
|
||||
|
||||
#ifndef my_pthread_setprio
|
||||
***************
|
||||
*** 416,422 ****
|
||||
#undef pthread_detach_this_thread
|
||||
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); }
|
||||
#undef sigset
|
||||
! #define sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
|
||||
#endif
|
||||
|
||||
#if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER)
|
||||
--- 437,443 ----
|
||||
#undef pthread_detach_this_thread
|
||||
#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(tmp); }
|
||||
#undef sigset
|
||||
! #define my_sigset(A,B) pthread_signal((A),(void (*)(int)) (B))
|
||||
#endif
|
||||
|
||||
#if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) && !defined(HAVE_CTHREADS_WRAPPER)
|
83
mysql-test/suite/row_lock/include/row_lock.inc
Normal file
83
mysql-test/suite/row_lock/include/row_lock.inc
Normal file
|
@ -0,0 +1,83 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
--enable_warnings
|
||||
SET autocommit=0;
|
||||
# Create additional connections used through test
|
||||
CONNECT (root1, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
eval $indext1;
|
||||
eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
eval $indext2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
|
||||
# Both transaction are able to update the tables
|
||||
eval EXPLAIN $select;
|
||||
eval $select;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE t1,t2 SET t1.i=223,t2.i=223 WHERE t1.i=123 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE t1,t2 SET t1.i=226,t2.i=226 WHERE t1.i=126 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE t1,t2 SET t1.i=224,t2.i=224 WHERE t1.i=124 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
COMMIT;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
DISCONNECT root1;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DROP TABLE t1, t2;
|
||||
|
94
mysql-test/suite/row_lock/include/row_lock_big_tab.inc
Normal file
94
mysql-test/suite/row_lock/include/row_lock_big_tab.inc
Normal file
|
@ -0,0 +1,94 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
--enable_warnings
|
||||
SET autocommit=0;
|
||||
# Create additional connections used through test
|
||||
CONNECT (root1, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
eval $indext1;
|
||||
eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
eval $indext2;
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE fill_t1 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t1() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT count(*)/2 INTO res FROM t1;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CREATE PROCEDURE fill_t2 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t2() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT count(*)/2 INTO res FROM t2;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
DELIMITER ;|
|
||||
CALL fill_t1 (10);
|
||||
CALL fill_t2 (10);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
# With the two separate selects (without join) the differs from
|
||||
# that select with join.
|
||||
|
||||
# Both transaction are able to update the tables
|
||||
eval EXPLAIN $select;
|
||||
eval $select;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT k from t1 WHERE k < half_t1();
|
||||
SELECT k from t1 WHERE k >= half_t1();
|
||||
UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k < half_t1() AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k >= half_t1() AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
COMMIT;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
DISCONNECT root1;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP TABLE t1, t2;
|
||||
#DROP VIEW v1;
|
||||
|
93
mysql-test/suite/row_lock/include/row_lock_big_tab_1.inc
Normal file
93
mysql-test/suite/row_lock/include/row_lock_big_tab_1.inc
Normal file
|
@ -0,0 +1,93 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
--enable_warnings
|
||||
SET autocommit=0;
|
||||
# Create additional connections used through test
|
||||
CONNECT (root1, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
eval $indext1;
|
||||
eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
eval $indext2;
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE fill_t1 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t1() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t1;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CREATE PROCEDURE fill_t2 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t2() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t2;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
DELIMITER ;|
|
||||
eval CALL fill_t1 ($nbrows);
|
||||
eval CALL fill_t2 ($nbrows);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
# With the two separate selects (without join) the differs from
|
||||
# that select with join.
|
||||
|
||||
# Both transaction are able to update the tables
|
||||
eval EXPLAIN $select;
|
||||
eval $select;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 1 AND t1.k = t2.k LOCK IN SHARE MODE;
|
||||
UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k % 2 = 1 AND t1.k = t2.k;
|
||||
SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k;
|
||||
SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k % 2 = 0 AND t1.k = t2.k;
|
||||
SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k;
|
||||
SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k;
|
||||
|
||||
COMMIT;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k;
|
||||
SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k;
|
||||
SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k;
|
||||
DISCONNECT root1;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
93
mysql-test/suite/row_lock/include/row_lock_big_tab_2.inc
Normal file
93
mysql-test/suite/row_lock/include/row_lock_big_tab_2.inc
Normal file
|
@ -0,0 +1,93 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
--enable_warnings
|
||||
SET autocommit=0;
|
||||
# Create additional connections used through test
|
||||
CONNECT (root1, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
eval $indext1;
|
||||
eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
eval $indext2;
|
||||
DELIMITER |;
|
||||
CREATE PROCEDURE fill_t1 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t1() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t1;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CREATE PROCEDURE fill_t2 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t2() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t2;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
DELIMITER ;|
|
||||
eval CALL fill_t1 ($nbrows);
|
||||
eval CALL fill_t2 ($nbrows);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
# With the two separate selects (without join) the differs from
|
||||
# that select with join.
|
||||
|
||||
# Both transaction are able to update the tables
|
||||
eval EXPLAIN $select;
|
||||
eval $select;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
#SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 1 AND t1.k = t2.k FOR UPDATE;
|
||||
DELETE FROM t1 WHERE t1.k % 2 = 1;
|
||||
SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k;
|
||||
SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k % 2 = 0 AND t1.k = t2.k;
|
||||
SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k;
|
||||
SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k;
|
||||
|
||||
COMMIT;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k;
|
||||
SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT * FROM t1 WHERE k < 40 ORDER BY t1.k;
|
||||
SELECT * FROM t2 WHERE k < 40 ORDER BY t2.k;
|
||||
DISCONNECT root1;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
96
mysql-test/suite/row_lock/include/row_lock_trig.inc
Normal file
96
mysql-test/suite/row_lock/include/row_lock_trig.inc
Normal file
|
@ -0,0 +1,96 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
--enable_warnings
|
||||
SET autocommit=0;
|
||||
# Create additional connections used through test
|
||||
CONNECT (root1, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
eval $indext1;
|
||||
eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
eval $indext2;
|
||||
DELIMITER |;
|
||||
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE t1 SET l = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
|
||||
DELIMITER ;|
|
||||
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
# With the two separate selects (without join) the differs from
|
||||
# that select with join.
|
||||
|
||||
# Both transaction are able to update the tables
|
||||
eval EXPLAIN $select;
|
||||
eval $select;
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE t2 SET t2.i=223 WHERE t2.i=123;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE t2 SET t2.i=226 WHERE t2.i=126;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE t2 SET t2.i=224 WHERE t2.i=124;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
COMMIT;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
DISCONNECT root1;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DROP TABLE t1, t2;
|
||||
#DROP VIEW v1;
|
||||
|
89
mysql-test/suite/row_lock/include/row_lock_view.inc
Normal file
89
mysql-test/suite/row_lock/include/row_lock_view.inc
Normal file
|
@ -0,0 +1,89 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
--enable_warnings
|
||||
SET autocommit=0;
|
||||
# Create additional connections used through test
|
||||
CONNECT (root1, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
eval $indext1;
|
||||
eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
eval $indext2;
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
# With the two separate selects (without join) the differs from
|
||||
# that select with join.
|
||||
|
||||
# Both transaction are able to update the tables
|
||||
eval EXPLAIN $select;
|
||||
eval $select;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE v1 SET i=325 where i=125;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE v1 SET i=323 where i=123;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE v1 SET i=326 where i=126;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE v1 SET i=324 where i=124;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
COMMIT;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
DISCONNECT root1;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP TABLE t1, t2;
|
||||
#DROP VIEW v1;
|
||||
|
92
mysql-test/suite/row_lock/include/row_lock_view_mix.inc
Normal file
92
mysql-test/suite/row_lock/include/row_lock_view_mix.inc
Normal file
|
@ -0,0 +1,92 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
--enable_warnings
|
||||
SET autocommit=0;
|
||||
# Create additional connections used through test
|
||||
CONNECT (root1, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
eval $indext1;
|
||||
eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
eval $indext2;
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
# With the two separate selects (without join) the differs from
|
||||
# that select with join.
|
||||
|
||||
# Both transaction are able to update the tables
|
||||
eval EXPLAIN $select;
|
||||
eval $select;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
#UPDATE v1 SET i=325 where i=125;
|
||||
#SELECT * FROM v1 ORDER BY i,l;
|
||||
#SELECT * FROM t1 ORDER BY t1.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE v1 SET i=323 where i=123;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE t1,t2 SET t1.i=226,t2.i=226 WHERE t1.i=126 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE v1 SET i=324 where i=124;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
COMMIT;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
DISCONNECT root1;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP TABLE t1, t2;
|
||||
#DROP VIEW v1;
|
||||
|
126
mysql-test/suite/row_lock/include/row_lock_view_storedp.inc
Normal file
126
mysql-test/suite/row_lock/include/row_lock_view_storedp.inc
Normal file
|
@ -0,0 +1,126 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP PROCEDURE IF EXISTS stp_t;
|
||||
--enable_warnings
|
||||
SET autocommit=0;
|
||||
# Create additional connections used through test
|
||||
CONNECT (root1, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
CONNECT (root2, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
INSERT INTO t1 VALUES (5,127,5,127);
|
||||
INSERT INTO t1 VALUES (6,128,6,128);
|
||||
eval $indext1;
|
||||
eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
INSERT INTO t2 VALUES (5,127,5,127);
|
||||
INSERT INTO t2 VALUES (6,128,6,128);
|
||||
eval $indext2;
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
DELIMITER |;
|
||||
|
||||
CREATE PROCEDURE stp_t (IN p1 int, IN p2 int) MODIFIES SQL DATA
|
||||
BEGIN
|
||||
UPDATE t2 SET i = p2 WHERE i = p1;
|
||||
UPDATE v1 SET i = p2 WHERE i = p1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
END;
|
||||
|
|
||||
|
||||
DELIMITER ;|
|
||||
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
eval EXPLAIN $select;
|
||||
eval $select;
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
CALL stp_t (125, 225);
|
||||
|
||||
--echo connection root2;
|
||||
CONNECTION root2;
|
||||
CALL stp_t (127, 227);
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
CALL stp_t (123, 223);
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
CALL stp_t (126, 226);
|
||||
|
||||
--echo connection root2;
|
||||
CONNECTION root2;
|
||||
CALL stp_t (128, 228);
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
CALL stp_t (124, 224);
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root2;
|
||||
CONNECTION root2;
|
||||
DELETE FROM t1 WHERE t1.i=228;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
COMMIT;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
COMMIT;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
DISCONNECT root1;
|
||||
|
||||
--echo connection root2;
|
||||
CONNECTION root2;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
DISCONNECT root2;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
--disable_warnings
|
||||
DROP VIEW v1;
|
||||
DROP PROCEDURE stp_t;
|
||||
DROP TABLE t1, t2;
|
||||
--enable_warnings
|
99
mysql-test/suite/row_lock/include/row_lock_view_trig.inc
Normal file
99
mysql-test/suite/row_lock/include/row_lock_view_trig.inc
Normal file
|
@ -0,0 +1,99 @@
|
|||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
--enable_warnings
|
||||
SET autocommit=0;
|
||||
# Create additional connections used through test
|
||||
CONNECT (root1, localhost, root,,);
|
||||
SET autocommit=0;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
eval CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
eval $indext1;
|
||||
eval CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=$engine;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
eval $indext2;
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
DELIMITER |;
|
||||
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE v1 SET i = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
|
||||
DELIMITER ;|
|
||||
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
eval EXPLAIN $select;
|
||||
eval $select;
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE t2 SET t2.i=223 WHERE t2.i=123;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
UPDATE t2 SET t2.i=226 WHERE t2.i=126;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
UPDATE t2 SET t2.i=224 WHERE t2.i=124;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
COMMIT;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
ROLLBACK;
|
||||
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
|
||||
--echo connection root1;
|
||||
CONNECTION root1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
DISCONNECT root1;
|
||||
--echo connection default;
|
||||
CONNECTION default;
|
||||
DROP TABLE t1, t2;
|
||||
DROP VIEW v1;
|
||||
|
142
mysql-test/suite/row_lock/r/innodb_row_lock_1.result
Normal file
142
mysql-test/suite/row_lock/r/innodb_row_lock_1.result
Normal file
|
@ -0,0 +1,142 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 4 Using where; Using index
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 2 Using where; Using index
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=223,t2.i=223 WHERE t1.i=123 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=226,t2.i=226 WHERE t1.i=126 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=224,t2.i=224 WHERE t1.i=124 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
32
mysql-test/suite/row_lock/r/innodb_row_lock_2.result
Normal file
32
mysql-test/suite/row_lock/r/innodb_row_lock_2.result
Normal file
|
@ -0,0 +1,32 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
32
mysql-test/suite/row_lock/r/innodb_row_lock_3.result
Normal file
32
mysql-test/suite/row_lock/r/innodb_row_lock_3.result
Normal file
|
@ -0,0 +1,32 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
142
mysql-test/suite/row_lock/r/innodb_row_lock_4.result
Normal file
142
mysql-test/suite/row_lock/r/innodb_row_lock_4.result
Normal file
|
@ -0,0 +1,142 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 4 Using where; Using index
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 2 Using where; Using index
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=223,t2.i=223 WHERE t1.i=123 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=226,t2.i=226 WHERE t1.i=126 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=224,t2.i=224 WHERE t1.i=124 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
32
mysql-test/suite/row_lock/r/innodb_row_lock_5.result
Normal file
32
mysql-test/suite/row_lock/r/innodb_row_lock_5.result
Normal file
|
@ -0,0 +1,32 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1 ignore index (ixi),t2 IGNORE INDEX (ixi) WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i,t2.i FROM t1 ignore index (ixi),t2 IGNORE INDEX (ixi) WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
97
mysql-test/suite/row_lock/r/innodb_row_lock_big_tab.result
Normal file
97
mysql-test/suite/row_lock/r/innodb_row_lock_big_tab.result
Normal file
|
@ -0,0 +1,97 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE PROCEDURE fill_t1 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t1() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT count(*)/2 INTO res FROM t1;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CREATE PROCEDURE fill_t2 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t2() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT count(*)/2 INTO res FROM t2;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CALL fill_t1 (10);
|
||||
CALL fill_t2 (10);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < half_t1() AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 10 Using where; Using index
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 1 Using where; Using index
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < half_t1() AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
i i
|
||||
connection root1;
|
||||
SELECT k from t1 WHERE k < half_t1();
|
||||
k
|
||||
0
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
SELECT k from t1 WHERE k >= half_t1();
|
||||
k
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k < half_t1() AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
0 1111 0 100
|
||||
1 1111 1 101
|
||||
2 1111 2 102
|
||||
3 1111 3 103
|
||||
4 1111 4 104
|
||||
5 105 5 105
|
||||
6 106 6 106
|
||||
7 107 7 107
|
||||
8 108 8 108
|
||||
9 109 9 109
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
0 2222 0 100
|
||||
1 2222 1 101
|
||||
2 2222 2 102
|
||||
3 2222 3 103
|
||||
4 2222 4 104
|
||||
5 105 5 105
|
||||
6 106 6 106
|
||||
7 107 7 107
|
||||
8 108 8 108
|
||||
9 109 9 109
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k >= half_t1() AND t2.i=t1.i;
|
145
mysql-test/suite/row_lock/r/innodb_row_lock_big_tab_1.result
Normal file
145
mysql-test/suite/row_lock/r/innodb_row_lock_big_tab_1.result
Normal file
|
@ -0,0 +1,145 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE PROCEDURE fill_t1 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t1() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t1;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CREATE PROCEDURE fill_t2 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t2() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t2;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CALL fill_t1 (40);
|
||||
CALL fill_t2 (40);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 0 AND t1.k = t2.k LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index PRIMARY ixi 5 NULL 40 Using where; Using index
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.k 1
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 0 AND t1.k = t2.k LOCK IN SHARE MODE;
|
||||
i i
|
||||
100 100
|
||||
102 102
|
||||
104 104
|
||||
106 106
|
||||
108 108
|
||||
110 110
|
||||
112 112
|
||||
114 114
|
||||
116 116
|
||||
118 118
|
||||
120 120
|
||||
122 122
|
||||
124 124
|
||||
126 126
|
||||
128 128
|
||||
130 130
|
||||
132 132
|
||||
134 134
|
||||
136 136
|
||||
138 138
|
||||
connection root1;
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 1 AND t1.k = t2.k LOCK IN SHARE MODE;
|
||||
i i
|
||||
101 101
|
||||
103 103
|
||||
105 105
|
||||
107 107
|
||||
109 109
|
||||
111 111
|
||||
113 113
|
||||
115 115
|
||||
117 117
|
||||
119 119
|
||||
121 121
|
||||
123 123
|
||||
125 125
|
||||
127 127
|
||||
129 129
|
||||
131 131
|
||||
133 133
|
||||
135 135
|
||||
137 137
|
||||
139 139
|
||||
UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k % 2 = 1 AND t1.k = t2.k;
|
||||
SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
1 1111 1 101
|
||||
2 102 2 102
|
||||
3 1111 3 103
|
||||
4 104 4 104
|
||||
5 1111 5 105
|
||||
6 106 6 106
|
||||
7 1111 7 107
|
||||
8 108 8 108
|
||||
9 1111 9 109
|
||||
10 110 10 110
|
||||
11 1111 11 111
|
||||
12 112 12 112
|
||||
13 1111 13 113
|
||||
14 114 14 114
|
||||
15 1111 15 115
|
||||
16 116 16 116
|
||||
17 1111 17 117
|
||||
18 118 18 118
|
||||
19 1111 19 119
|
||||
SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
1 2222 1 101
|
||||
2 102 2 102
|
||||
3 2222 3 103
|
||||
4 104 4 104
|
||||
5 2222 5 105
|
||||
6 106 6 106
|
||||
7 2222 7 107
|
||||
8 108 8 108
|
||||
9 2222 9 109
|
||||
10 110 10 110
|
||||
11 2222 11 111
|
||||
12 112 12 112
|
||||
13 2222 13 113
|
||||
14 114 14 114
|
||||
15 2222 15 115
|
||||
16 116 16 116
|
||||
17 2222 17 117
|
||||
18 118 18 118
|
||||
19 2222 19 119
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k % 2 = 0 AND t1.k = t2.k;
|
113
mysql-test/suite/row_lock/r/innodb_row_lock_big_tab_2.result
Normal file
113
mysql-test/suite/row_lock/r/innodb_row_lock_big_tab_2.result
Normal file
|
@ -0,0 +1,113 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE PROCEDURE fill_t1 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t1() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t1;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CREATE PROCEDURE fill_t2 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t2() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t2;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CALL fill_t1 (40);
|
||||
CALL fill_t2 (40);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 0 AND t1.k = t2.k LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index PRIMARY ixi 5 NULL 40 Using where; Using index
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.k 1
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 0 AND t1.k = t2.k LOCK IN SHARE MODE;
|
||||
i i
|
||||
100 100
|
||||
102 102
|
||||
104 104
|
||||
106 106
|
||||
108 108
|
||||
110 110
|
||||
112 112
|
||||
114 114
|
||||
116 116
|
||||
118 118
|
||||
120 120
|
||||
122 122
|
||||
124 124
|
||||
126 126
|
||||
128 128
|
||||
130 130
|
||||
132 132
|
||||
134 134
|
||||
136 136
|
||||
138 138
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.k % 2 = 1;
|
||||
SELECT * FROM t1 WHERE k < 20 ORDER BY t1.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
2 102 2 102
|
||||
4 104 4 104
|
||||
6 106 6 106
|
||||
8 108 8 108
|
||||
10 110 10 110
|
||||
12 112 12 112
|
||||
14 114 14 114
|
||||
16 116 16 116
|
||||
18 118 18 118
|
||||
SELECT * FROM t2 WHERE k < 20 ORDER BY t2.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
1 101 1 101
|
||||
2 102 2 102
|
||||
3 103 3 103
|
||||
4 104 4 104
|
||||
5 105 5 105
|
||||
6 106 6 106
|
||||
7 107 7 107
|
||||
8 108 8 108
|
||||
9 109 9 109
|
||||
10 110 10 110
|
||||
11 111 11 111
|
||||
12 112 12 112
|
||||
13 113 13 113
|
||||
14 114 14 114
|
||||
15 115 15 115
|
||||
16 116 16 116
|
||||
17 117 17 117
|
||||
18 118 18 118
|
||||
19 119 19 119
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k % 2 = 0 AND t1.k = t2.k;
|
151
mysql-test/suite/row_lock/r/innodb_row_lock_trig_1.result
Normal file
151
mysql-test/suite/row_lock/r/innodb_row_lock_trig_1.result
Normal file
|
@ -0,0 +1,151 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE t1 SET l = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 4 Using where; Using index
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 225
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE t2 SET t2.i=223 WHERE t2.i=123;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=226 WHERE t2.i=126;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 225
|
||||
4 126 4 226
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
UPDATE t2 SET t2.i=224 WHERE t2.i=124;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 224
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 225
|
||||
4 126 4 226
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 224
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 224
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 224
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
37
mysql-test/suite/row_lock/r/innodb_row_lock_trig_2.result
Normal file
37
mysql-test/suite/row_lock/r/innodb_row_lock_trig_2.result
Normal file
|
@ -0,0 +1,37 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE t1 SET l = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
34
mysql-test/suite/row_lock/r/innodb_row_lock_view_1.result
Normal file
34
mysql-test/suite/row_lock/r/innodb_row_lock_view_1.result
Normal file
|
@ -0,0 +1,34 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 4 Using where; Using index
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 2 Using where; Using index
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE v1 SET i=325 where i=125;
|
40
mysql-test/suite/row_lock/r/innodb_row_lock_view_2.result
Normal file
40
mysql-test/suite/row_lock/r/innodb_row_lock_view_2.result
Normal file
|
@ -0,0 +1,40 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 4 Using where; Using index
|
||||
1 SIMPLE t2 index NULL PRIMARY 4 NULL 4 Using index
|
||||
SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE v1 SET i=325 where i=125;
|
|
@ -0,0 +1,48 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 4 Using where; Using index
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 2 Using where; Using index
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE v1 SET i=323 where i=123;
|
|
@ -0,0 +1,40 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 4 Using where; Using index
|
||||
1 SIMPLE t2 index NULL PRIMARY 4 NULL 4 Using index
|
||||
SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
|
@ -0,0 +1,312 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
INSERT INTO t1 VALUES (5,127,5,127);
|
||||
INSERT INTO t1 VALUES (6,128,6,128);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
INSERT INTO t2 VALUES (5,127,5,127);
|
||||
INSERT INTO t2 VALUES (6,128,6,128);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
CREATE PROCEDURE stp_t (IN p1 int, IN p2 int) MODIFIES SQL DATA
|
||||
BEGIN
|
||||
UPDATE t2 SET i = p2 WHERE i = p1;
|
||||
UPDATE v1 SET i = p2 WHERE i = p1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 6 Using where; Using index
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
CALL stp_t (125, 225);
|
||||
i
|
||||
123
|
||||
124
|
||||
126
|
||||
127
|
||||
128
|
||||
225
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root2;
|
||||
CALL stp_t (127, 227);
|
||||
i
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
128
|
||||
227
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 128 6 128
|
||||
connection default;
|
||||
CALL stp_t (123, 223);
|
||||
i
|
||||
124
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
223
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root1;
|
||||
CALL stp_t (126, 226);
|
||||
i
|
||||
123
|
||||
124
|
||||
127
|
||||
128
|
||||
225
|
||||
226
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root2;
|
||||
CALL stp_t (128, 228);
|
||||
i
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
227
|
||||
228
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 228 6 128
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 228 6 128
|
||||
connection default;
|
||||
CALL stp_t (124, 224);
|
||||
i
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
223
|
||||
224
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root2;
|
||||
DELETE FROM t1 WHERE t1.i=228;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 228 6 128
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection root1;
|
||||
COMMIT;
|
||||
connection default;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root2;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
227
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 228 6 128
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
||||
DROP VIEW v1;
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
|
@ -0,0 +1,47 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
INSERT INTO t1 VALUES (5,127,5,127);
|
||||
INSERT INTO t1 VALUES (6,128,6,128);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
INSERT INTO t2 VALUES (5,127,5,127);
|
||||
INSERT INTO t2 VALUES (6,128,6,128);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
CREATE PROCEDURE stp_t (IN p1 int, IN p2 int) MODIFIES SQL DATA
|
||||
BEGIN
|
||||
UPDATE t2 SET i = p2 WHERE i = p1;
|
||||
UPDATE v1 SET i = p2 WHERE i = p1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 6 Using where
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
CALL stp_t (125, 225);
|
183
mysql-test/suite/row_lock/r/innodb_row_lock_view_trig_1.result
Normal file
183
mysql-test/suite/row_lock/r/innodb_row_lock_view_trig_1.result
Normal file
|
@ -0,0 +1,183 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE v1 SET i = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index ixi ixi 5 NULL 4 Using where; Using index
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
123
|
||||
124
|
||||
126
|
||||
225
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE t2 SET t2.i=223 WHERE t2.i=123;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
124
|
||||
125
|
||||
126
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=226 WHERE t2.i=126;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
123
|
||||
124
|
||||
225
|
||||
226
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
UPDATE t2 SET t2.i=224 WHERE t2.i=124;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
223
|
||||
224
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
||||
DROP VIEW v1;
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
|
@ -0,0 +1,38 @@
|
|||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE v1 SET i = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
139
mysql-test/suite/row_lock/r/ndb_row_lock_1.result
Normal file
139
mysql-test/suite/row_lock/r/ndb_row_lock_1.result
Normal file
|
@ -0,0 +1,139 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 1 Using where
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=223,t2.i=223 WHERE t1.i=123 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=226,t2.i=226 WHERE t1.i=126 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=224,t2.i=224 WHERE t1.i=124 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
31
mysql-test/suite/row_lock/r/ndb_row_lock_2.result
Normal file
31
mysql-test/suite/row_lock/r/ndb_row_lock_2.result
Normal file
|
@ -0,0 +1,31 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
30
mysql-test/suite/row_lock/r/ndb_row_lock_3.result
Normal file
30
mysql-test/suite/row_lock/r/ndb_row_lock_3.result
Normal file
|
@ -0,0 +1,30 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
139
mysql-test/suite/row_lock/r/ndb_row_lock_4.result
Normal file
139
mysql-test/suite/row_lock/r/ndb_row_lock_4.result
Normal file
|
@ -0,0 +1,139 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 1 Using where
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=223,t2.i=223 WHERE t1.i=123 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=226,t2.i=226 WHERE t1.i=126 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=224,t2.i=224 WHERE t1.i=124 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
30
mysql-test/suite/row_lock/r/ndb_row_lock_5.result
Normal file
30
mysql-test/suite/row_lock/r/ndb_row_lock_5.result
Normal file
|
@ -0,0 +1,30 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1 ignore index (ixi),t2 IGNORE INDEX (ixi) WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i,t2.i FROM t1 ignore index (ixi),t2 IGNORE INDEX (ixi) WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
177
mysql-test/suite/row_lock/r/ndb_row_lock_big_tab.result
Normal file
177
mysql-test/suite/row_lock/r/ndb_row_lock_big_tab.result
Normal file
|
@ -0,0 +1,177 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE PROCEDURE fill_t1 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t1() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT count(*)/2 INTO res FROM t1;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CREATE PROCEDURE fill_t2 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t2() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT count(*)/2 INTO res FROM t2;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CALL fill_t1 (10);
|
||||
CALL fill_t2 (10);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < half_t1() AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 1 Using where
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < half_t1() AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
i i
|
||||
connection root1;
|
||||
SELECT k from t1 WHERE k < half_t1();
|
||||
k
|
||||
0
|
||||
3
|
||||
1
|
||||
2
|
||||
4
|
||||
SELECT k from t1 WHERE k >= half_t1();
|
||||
k
|
||||
6
|
||||
7
|
||||
9
|
||||
5
|
||||
8
|
||||
UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k < half_t1() AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
0 1111 0 100
|
||||
1 1111 1 101
|
||||
2 1111 2 102
|
||||
3 1111 3 103
|
||||
4 1111 4 104
|
||||
5 105 5 105
|
||||
6 106 6 106
|
||||
7 107 7 107
|
||||
8 108 8 108
|
||||
9 109 9 109
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
0 2222 0 100
|
||||
1 2222 1 101
|
||||
2 2222 2 102
|
||||
3 2222 3 103
|
||||
4 2222 4 104
|
||||
5 105 5 105
|
||||
6 106 6 106
|
||||
7 107 7 107
|
||||
8 108 8 108
|
||||
9 109 9 109
|
||||
connection default;
|
||||
UPDATE t1,t2 SET t1.i=3333,t2.i=4444 WHERE t1.k >= half_t1() AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
1 101 1 101
|
||||
2 102 2 102
|
||||
3 103 3 103
|
||||
4 104 4 104
|
||||
5 3333 5 105
|
||||
6 3333 6 106
|
||||
7 3333 7 107
|
||||
8 3333 8 108
|
||||
9 3333 9 109
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
1 101 1 101
|
||||
2 102 2 102
|
||||
3 103 3 103
|
||||
4 104 4 104
|
||||
5 4444 5 105
|
||||
6 4444 6 106
|
||||
7 4444 7 107
|
||||
8 4444 8 108
|
||||
9 4444 9 109
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
1 101 1 101
|
||||
2 102 2 102
|
||||
3 103 3 103
|
||||
4 104 4 104
|
||||
5 3333 5 105
|
||||
6 3333 6 106
|
||||
7 3333 7 107
|
||||
8 3333 8 108
|
||||
9 3333 9 109
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
1 101 1 101
|
||||
2 102 2 102
|
||||
3 103 3 103
|
||||
4 104 4 104
|
||||
5 4444 5 105
|
||||
6 4444 6 106
|
||||
7 4444 7 107
|
||||
8 4444 8 108
|
||||
9 4444 9 109
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
1 101 1 101
|
||||
2 102 2 102
|
||||
3 103 3 103
|
||||
4 104 4 104
|
||||
5 3333 5 105
|
||||
6 3333 6 106
|
||||
7 3333 7 107
|
||||
8 3333 8 108
|
||||
9 3333 9 109
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
0 100 0 100
|
||||
1 101 1 101
|
||||
2 102 2 102
|
||||
3 103 3 103
|
||||
4 104 4 104
|
||||
5 4444 5 105
|
||||
6 4444 6 106
|
||||
7 4444 7 107
|
||||
8 4444 8 108
|
||||
9 4444 9 109
|
||||
connection default;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 'test.v1'
|
||||
DROP TABLE t1, t2;
|
357
mysql-test/suite/row_lock/r/ndb_row_lock_big_tab_1.result
Normal file
357
mysql-test/suite/row_lock/r/ndb_row_lock_big_tab_1.result
Normal file
|
@ -0,0 +1,357 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE PROCEDURE fill_t1 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t1() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t1;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CREATE PROCEDURE fill_t2 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t2() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t2;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CALL fill_t1 (200);
|
||||
CALL fill_t2 (200);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < t1.k % 2 = 0 AND t2.k=t1.k LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 200 Using where
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.k 1
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < t1.k % 2 = 0 AND t2.k=t1.k LOCK IN SHARE MODE;
|
||||
i i
|
||||
135 135
|
||||
119 119
|
||||
211 211
|
||||
184 184
|
||||
232 232
|
||||
105 105
|
||||
188 188
|
||||
216 216
|
||||
255 255
|
||||
154 154
|
||||
197 197
|
||||
279 279
|
||||
218 218
|
||||
127 127
|
||||
203 203
|
||||
281 281
|
||||
194 194
|
||||
161 161
|
||||
276 276
|
||||
122 122
|
||||
139 139
|
||||
183 183
|
||||
114 114
|
||||
247 247
|
||||
144 144
|
||||
148 148
|
||||
174 174
|
||||
267 267
|
||||
142 142
|
||||
168 168
|
||||
226 226
|
||||
258 258
|
||||
231 231
|
||||
146 146
|
||||
253 253
|
||||
189 189
|
||||
230 230
|
||||
290 290
|
||||
178 178
|
||||
158 158
|
||||
130 130
|
||||
214 214
|
||||
133 133
|
||||
229 229
|
||||
294 294
|
||||
295 295
|
||||
108 108
|
||||
112 112
|
||||
297 297
|
||||
151 151
|
||||
251 251
|
||||
270 270
|
||||
291 291
|
||||
159 159
|
||||
132 132
|
||||
121 121
|
||||
244 244
|
||||
272 272
|
||||
293 293
|
||||
186 186
|
||||
111 111
|
||||
166 166
|
||||
201 201
|
||||
175 175
|
||||
180 180
|
||||
209 209
|
||||
192 192
|
||||
246 246
|
||||
195 195
|
||||
107 107
|
||||
233 233
|
||||
239 239
|
||||
103 103
|
||||
109 109
|
||||
128 128
|
||||
266 266
|
||||
143 143
|
||||
160 160
|
||||
187 187
|
||||
243 243
|
||||
273 273
|
||||
259 259
|
||||
110 110
|
||||
176 176
|
||||
141 141
|
||||
170 170
|
||||
215 215
|
||||
191 191
|
||||
200 200
|
||||
271 271
|
||||
162 162
|
||||
260 260
|
||||
106 106
|
||||
150 150
|
||||
126 126
|
||||
147 147
|
||||
155 155
|
||||
193 193
|
||||
207 207
|
||||
287 287
|
||||
235 235
|
||||
252 252
|
||||
129 129
|
||||
205 205
|
||||
268 268
|
||||
278 278
|
||||
116 116
|
||||
137 137
|
||||
199 199
|
||||
217 217
|
||||
234 234
|
||||
190 190
|
||||
236 236
|
||||
257 257
|
||||
100 100
|
||||
210 210
|
||||
212 212
|
||||
264 264
|
||||
221 221
|
||||
241 241
|
||||
256 256
|
||||
262 262
|
||||
265 265
|
||||
269 269
|
||||
277 277
|
||||
173 173
|
||||
177 177
|
||||
208 208
|
||||
219 219
|
||||
285 285
|
||||
101 101
|
||||
164 164
|
||||
113 113
|
||||
125 125
|
||||
202 202
|
||||
140 140
|
||||
156 156
|
||||
282 282
|
||||
181 181
|
||||
206 206
|
||||
299 299
|
||||
102 102
|
||||
145 145
|
||||
227 227
|
||||
196 196
|
||||
138 138
|
||||
198 198
|
||||
204 204
|
||||
237 237
|
||||
171 171
|
||||
284 284
|
||||
263 263
|
||||
292 292
|
||||
104 104
|
||||
149 149
|
||||
250 250
|
||||
296 296
|
||||
228 228
|
||||
280 280
|
||||
242 242
|
||||
248 248
|
||||
185 185
|
||||
220 220
|
||||
245 245
|
||||
275 275
|
||||
118 118
|
||||
120 120
|
||||
152 152
|
||||
153 153
|
||||
157 157
|
||||
182 182
|
||||
179 179
|
||||
254 254
|
||||
288 288
|
||||
172 172
|
||||
283 283
|
||||
286 286
|
||||
115 115
|
||||
238 238
|
||||
289 289
|
||||
131 131
|
||||
223 223
|
||||
134 134
|
||||
136 136
|
||||
222 222
|
||||
225 225
|
||||
261 261
|
||||
274 274
|
||||
123 123
|
||||
163 163
|
||||
224 224
|
||||
117 117
|
||||
298 298
|
||||
169 169
|
||||
124 124
|
||||
167 167
|
||||
240 240
|
||||
249 249
|
||||
165 165
|
||||
213 213
|
||||
connection root1;
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 1 AND t1.k = t2.k LOCK IN SHARE MODE;
|
||||
i i
|
||||
209 209
|
||||
195 195
|
||||
107 107
|
||||
233 233
|
||||
239 239
|
||||
103 103
|
||||
109 109
|
||||
143 143
|
||||
187 187
|
||||
243 243
|
||||
273 273
|
||||
259 259
|
||||
141 141
|
||||
215 215
|
||||
191 191
|
||||
271 271
|
||||
147 147
|
||||
155 155
|
||||
193 193
|
||||
207 207
|
||||
287 287
|
||||
235 235
|
||||
129 129
|
||||
205 205
|
||||
137 137
|
||||
199 199
|
||||
217 217
|
||||
257 257
|
||||
221 221
|
||||
241 241
|
||||
265 265
|
||||
269 269
|
||||
277 277
|
||||
173 173
|
||||
177 177
|
||||
135 135
|
||||
119 119
|
||||
211 211
|
||||
105 105
|
||||
255 255
|
||||
197 197
|
||||
279 279
|
||||
127 127
|
||||
203 203
|
||||
281 281
|
||||
161 161
|
||||
139 139
|
||||
183 183
|
||||
247 247
|
||||
267 267
|
||||
231 231
|
||||
253 253
|
||||
189 189
|
||||
133 133
|
||||
229 229
|
||||
295 295
|
||||
297 297
|
||||
151 151
|
||||
251 251
|
||||
291 291
|
||||
159 159
|
||||
121 121
|
||||
293 293
|
||||
111 111
|
||||
201 201
|
||||
175 175
|
||||
185 185
|
||||
245 245
|
||||
275 275
|
||||
153 153
|
||||
157 157
|
||||
179 179
|
||||
283 283
|
||||
115 115
|
||||
289 289
|
||||
131 131
|
||||
223 223
|
||||
225 225
|
||||
261 261
|
||||
123 123
|
||||
163 163
|
||||
117 117
|
||||
169 169
|
||||
167 167
|
||||
249 249
|
||||
165 165
|
||||
213 213
|
||||
219 219
|
||||
285 285
|
||||
101 101
|
||||
113 113
|
||||
125 125
|
||||
181 181
|
||||
299 299
|
||||
145 145
|
||||
227 227
|
||||
237 237
|
||||
171 171
|
||||
263 263
|
||||
149 149
|
||||
UPDATE t1,t2 SET t1.i=1111,t2.i=2222 WHERE t1.k % 2 = 1 AND t1.k = t2.k;
|
255
mysql-test/suite/row_lock/r/ndb_row_lock_big_tab_2.result
Normal file
255
mysql-test/suite/row_lock/r/ndb_row_lock_big_tab_2.result
Normal file
|
@ -0,0 +1,255 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE PROCEDURE fill_t1 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t1 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t1() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t1;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CREATE PROCEDURE fill_t2 (IN upb int)
|
||||
BEGIN
|
||||
DECLARE cnt int DEFAULT 0;
|
||||
WHILE cnt < upb DO
|
||||
INSERT INTO t2 VALUES (cnt, cnt+100, cnt, cnt+100);
|
||||
SET cnt= cnt+1;
|
||||
END WHILE;
|
||||
END;
|
||||
|
|
||||
CREATE FUNCTION half_t2() RETURNS int
|
||||
BEGIN
|
||||
DECLARE res int DEFAULT 0;
|
||||
SELECT MOD(k,2) INTO res FROM t2;
|
||||
RETURN res;
|
||||
END;
|
||||
|
|
||||
CALL fill_t1 (200);
|
||||
CALL fill_t2 (200);
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < t1.k % 2 = 0 AND t2.k=t1.k LOCK IN SHARE MODE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL PRIMARY NULL NULL NULL 200 Using where
|
||||
1 SIMPLE t2 eq_ref PRIMARY PRIMARY 4 test.t1.k 1
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < t1.k % 2 = 0 AND t2.k=t1.k LOCK IN SHARE MODE;
|
||||
i i
|
||||
135 135
|
||||
119 119
|
||||
211 211
|
||||
184 184
|
||||
232 232
|
||||
105 105
|
||||
188 188
|
||||
216 216
|
||||
255 255
|
||||
154 154
|
||||
197 197
|
||||
279 279
|
||||
218 218
|
||||
127 127
|
||||
203 203
|
||||
281 281
|
||||
194 194
|
||||
161 161
|
||||
276 276
|
||||
122 122
|
||||
139 139
|
||||
183 183
|
||||
114 114
|
||||
247 247
|
||||
144 144
|
||||
148 148
|
||||
174 174
|
||||
267 267
|
||||
142 142
|
||||
168 168
|
||||
226 226
|
||||
258 258
|
||||
231 231
|
||||
146 146
|
||||
253 253
|
||||
189 189
|
||||
230 230
|
||||
290 290
|
||||
178 178
|
||||
158 158
|
||||
130 130
|
||||
214 214
|
||||
133 133
|
||||
229 229
|
||||
294 294
|
||||
295 295
|
||||
108 108
|
||||
112 112
|
||||
297 297
|
||||
151 151
|
||||
251 251
|
||||
270 270
|
||||
291 291
|
||||
159 159
|
||||
132 132
|
||||
121 121
|
||||
244 244
|
||||
272 272
|
||||
293 293
|
||||
186 186
|
||||
111 111
|
||||
166 166
|
||||
201 201
|
||||
175 175
|
||||
180 180
|
||||
209 209
|
||||
192 192
|
||||
246 246
|
||||
195 195
|
||||
107 107
|
||||
233 233
|
||||
239 239
|
||||
103 103
|
||||
109 109
|
||||
128 128
|
||||
266 266
|
||||
143 143
|
||||
160 160
|
||||
187 187
|
||||
243 243
|
||||
273 273
|
||||
259 259
|
||||
110 110
|
||||
176 176
|
||||
141 141
|
||||
170 170
|
||||
215 215
|
||||
191 191
|
||||
200 200
|
||||
271 271
|
||||
162 162
|
||||
260 260
|
||||
106 106
|
||||
150 150
|
||||
126 126
|
||||
147 147
|
||||
155 155
|
||||
193 193
|
||||
207 207
|
||||
287 287
|
||||
235 235
|
||||
252 252
|
||||
129 129
|
||||
205 205
|
||||
268 268
|
||||
278 278
|
||||
116 116
|
||||
137 137
|
||||
199 199
|
||||
217 217
|
||||
234 234
|
||||
190 190
|
||||
236 236
|
||||
257 257
|
||||
100 100
|
||||
210 210
|
||||
212 212
|
||||
264 264
|
||||
221 221
|
||||
241 241
|
||||
256 256
|
||||
262 262
|
||||
265 265
|
||||
269 269
|
||||
277 277
|
||||
173 173
|
||||
177 177
|
||||
208 208
|
||||
219 219
|
||||
285 285
|
||||
101 101
|
||||
164 164
|
||||
113 113
|
||||
125 125
|
||||
202 202
|
||||
140 140
|
||||
156 156
|
||||
282 282
|
||||
181 181
|
||||
206 206
|
||||
299 299
|
||||
102 102
|
||||
145 145
|
||||
227 227
|
||||
196 196
|
||||
138 138
|
||||
198 198
|
||||
204 204
|
||||
237 237
|
||||
171 171
|
||||
284 284
|
||||
263 263
|
||||
292 292
|
||||
104 104
|
||||
149 149
|
||||
250 250
|
||||
296 296
|
||||
228 228
|
||||
280 280
|
||||
242 242
|
||||
248 248
|
||||
185 185
|
||||
220 220
|
||||
245 245
|
||||
275 275
|
||||
118 118
|
||||
120 120
|
||||
152 152
|
||||
153 153
|
||||
157 157
|
||||
182 182
|
||||
179 179
|
||||
254 254
|
||||
288 288
|
||||
172 172
|
||||
283 283
|
||||
286 286
|
||||
115 115
|
||||
238 238
|
||||
289 289
|
||||
131 131
|
||||
223 223
|
||||
134 134
|
||||
136 136
|
||||
222 222
|
||||
225 225
|
||||
261 261
|
||||
274 274
|
||||
123 123
|
||||
163 163
|
||||
224 224
|
||||
117 117
|
||||
298 298
|
||||
169 169
|
||||
124 124
|
||||
167 167
|
||||
240 240
|
||||
249 249
|
||||
165 165
|
||||
213 213
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.k % 2 = 1;
|
148
mysql-test/suite/row_lock/r/ndb_row_lock_trig_1.result
Normal file
148
mysql-test/suite/row_lock/r/ndb_row_lock_trig_1.result
Normal file
|
@ -0,0 +1,148 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE t1 SET l = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 225
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE t2 SET t2.i=223 WHERE t2.i=123;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=226 WHERE t2.i=126;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 225
|
||||
4 126 4 226
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
UPDATE t2 SET t2.i=224 WHERE t2.i=124;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 224
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 225
|
||||
4 126 4 226
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 224
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 224
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 223
|
||||
2 124 2 224
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
35
mysql-test/suite/row_lock/r/ndb_row_lock_trig_2.result
Normal file
35
mysql-test/suite/row_lock/r/ndb_row_lock_trig_2.result
Normal file
|
@ -0,0 +1,35 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE t1 SET l = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
194
mysql-test/suite/row_lock/r/ndb_row_lock_view_1.result
Normal file
194
mysql-test/suite/row_lock/r/ndb_row_lock_view_1.result
Normal file
|
@ -0,0 +1,194 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 1 Using where
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE v1 SET i=325 where i=125;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
123 123
|
||||
123 124
|
||||
123 125
|
||||
123 126
|
||||
124 123
|
||||
124 124
|
||||
124 125
|
||||
124 126
|
||||
126 123
|
||||
126 124
|
||||
126 125
|
||||
126 126
|
||||
325 123
|
||||
325 124
|
||||
325 125
|
||||
325 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 325 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE v1 SET i=323 where i=123;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
124 123
|
||||
124 124
|
||||
124 125
|
||||
124 126
|
||||
125 123
|
||||
125 124
|
||||
125 125
|
||||
125 126
|
||||
126 123
|
||||
126 124
|
||||
126 125
|
||||
126 126
|
||||
323 123
|
||||
323 124
|
||||
323 125
|
||||
323 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE v1 SET i=326 where i=126;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
123 123
|
||||
123 124
|
||||
123 125
|
||||
123 126
|
||||
124 123
|
||||
124 124
|
||||
124 125
|
||||
124 126
|
||||
325 123
|
||||
325 124
|
||||
325 125
|
||||
325 126
|
||||
326 123
|
||||
326 124
|
||||
326 125
|
||||
326 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 325 3 125
|
||||
4 326 4 126
|
||||
connection default;
|
||||
UPDATE v1 SET i=324 where i=124;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
125 123
|
||||
125 124
|
||||
125 125
|
||||
125 126
|
||||
126 123
|
||||
126 124
|
||||
126 125
|
||||
126 126
|
||||
323 123
|
||||
323 124
|
||||
323 125
|
||||
323 126
|
||||
324 123
|
||||
324 124
|
||||
324 125
|
||||
324 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 325 3 125
|
||||
4 326 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP TABLE t1, t2;
|
200
mysql-test/suite/row_lock/r/ndb_row_lock_view_2.result
Normal file
200
mysql-test/suite/row_lock/r/ndb_row_lock_view_2.result
Normal file
|
@ -0,0 +1,200 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4
|
||||
SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE v1 SET i=325 where i=125;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
123 123
|
||||
123 124
|
||||
123 125
|
||||
123 126
|
||||
124 123
|
||||
124 124
|
||||
124 125
|
||||
124 126
|
||||
126 123
|
||||
126 124
|
||||
126 125
|
||||
126 126
|
||||
325 123
|
||||
325 124
|
||||
325 125
|
||||
325 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 325 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE v1 SET i=323 where i=123;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
124 123
|
||||
124 124
|
||||
124 125
|
||||
124 126
|
||||
125 123
|
||||
125 124
|
||||
125 125
|
||||
125 126
|
||||
126 123
|
||||
126 124
|
||||
126 125
|
||||
126 126
|
||||
323 123
|
||||
323 124
|
||||
323 125
|
||||
323 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE v1 SET i=326 where i=126;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
123 123
|
||||
123 124
|
||||
123 125
|
||||
123 126
|
||||
124 123
|
||||
124 124
|
||||
124 125
|
||||
124 126
|
||||
325 123
|
||||
325 124
|
||||
325 125
|
||||
325 126
|
||||
326 123
|
||||
326 124
|
||||
326 125
|
||||
326 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 325 3 125
|
||||
4 326 4 126
|
||||
connection default;
|
||||
UPDATE v1 SET i=324 where i=124;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
125 123
|
||||
125 124
|
||||
125 125
|
||||
125 126
|
||||
126 123
|
||||
126 124
|
||||
126 125
|
||||
126 126
|
||||
323 123
|
||||
323 124
|
||||
323 125
|
||||
323 126
|
||||
324 123
|
||||
324 124
|
||||
324 125
|
||||
324 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 325 3 125
|
||||
4 326 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP TABLE t1, t2;
|
169
mysql-test/suite/row_lock/r/ndb_row_lock_view_mix_1.result
Normal file
169
mysql-test/suite/row_lock/r/ndb_row_lock_view_mix_1.result
Normal file
|
@ -0,0 +1,169 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
1 SIMPLE t2 ref ixi ixi 5 test.t1.i 1 Using where
|
||||
SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
i i
|
||||
123 123
|
||||
124 124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE v1 SET i=323 where i=123;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
124 123
|
||||
124 124
|
||||
124 125
|
||||
124 126
|
||||
125 123
|
||||
125 124
|
||||
125 125
|
||||
125 126
|
||||
126 123
|
||||
126 124
|
||||
126 125
|
||||
126 126
|
||||
323 123
|
||||
323 124
|
||||
323 125
|
||||
323 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=226,t2.i=226 WHERE t1.i=126 AND t2.i=t1.i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
UPDATE v1 SET i=324 where i=124;
|
||||
SELECT * FROM v1 ORDER BY i,l;
|
||||
i l
|
||||
125 123
|
||||
125 124
|
||||
125 125
|
||||
125 126
|
||||
126 123
|
||||
126 124
|
||||
126 125
|
||||
126 126
|
||||
323 123
|
||||
323 124
|
||||
323 125
|
||||
323 126
|
||||
324 123
|
||||
324 124
|
||||
324 125
|
||||
324 126
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 323 1 123
|
||||
2 324 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP TABLE t1, t2;
|
38
mysql-test/suite/row_lock/r/ndb_row_lock_view_mix_2.result
Normal file
38
mysql-test/suite/row_lock/r/ndb_row_lock_view_mix_2.result
Normal file
|
@ -0,0 +1,38 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i, t2.l from t1,t2;
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 4
|
||||
SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t1,t2 SET t1.i=225,t2.i=225 WHERE t1.i=125 AND t2.i=t1.i;
|
309
mysql-test/suite/row_lock/r/ndb_row_lock_view_storedp_1.result
Normal file
309
mysql-test/suite/row_lock/r/ndb_row_lock_view_storedp_1.result
Normal file
|
@ -0,0 +1,309 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP PROCEDURE IF EXISTS stp_t;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
INSERT INTO t1 VALUES (5,127,5,127);
|
||||
INSERT INTO t1 VALUES (6,128,6,128);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
INSERT INTO t2 VALUES (5,127,5,127);
|
||||
INSERT INTO t2 VALUES (6,128,6,128);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
CREATE PROCEDURE stp_t (IN p1 int, IN p2 int) MODIFIES SQL DATA
|
||||
BEGIN
|
||||
UPDATE t2 SET i = p2 WHERE i = p1;
|
||||
UPDATE v1 SET i = p2 WHERE i = p1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
CALL stp_t (125, 225);
|
||||
i
|
||||
123
|
||||
124
|
||||
126
|
||||
127
|
||||
128
|
||||
225
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root2;
|
||||
CALL stp_t (127, 227);
|
||||
i
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
128
|
||||
227
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 128 6 128
|
||||
connection default;
|
||||
CALL stp_t (123, 223);
|
||||
i
|
||||
124
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
223
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root1;
|
||||
CALL stp_t (126, 226);
|
||||
i
|
||||
123
|
||||
124
|
||||
127
|
||||
128
|
||||
225
|
||||
226
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root2;
|
||||
CALL stp_t (128, 228);
|
||||
i
|
||||
123
|
||||
124
|
||||
125
|
||||
126
|
||||
227
|
||||
228
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 228 6 128
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 228 6 128
|
||||
connection default;
|
||||
CALL stp_t (124, 224);
|
||||
i
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
223
|
||||
224
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root2;
|
||||
DELETE FROM t1 WHERE t1.i=228;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 228 6 128
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection root1;
|
||||
COMMIT;
|
||||
connection default;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
127
|
||||
128
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 127 5 127
|
||||
6 128 6 128
|
||||
connection root2;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
223
|
||||
227
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
5 227 5 127
|
||||
6 228 6 128
|
||||
connection default;
|
||||
DROP VIEW v1;
|
||||
DROP PROCEDURE stp_t;
|
||||
DROP TABLE t1, t2;
|
|
@ -0,0 +1,46 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
DROP PROCEDURE IF EXISTS stp_t;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
INSERT INTO t1 VALUES (5,127,5,127);
|
||||
INSERT INTO t1 VALUES (6,128,6,128);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
INSERT INTO t2 VALUES (5,127,5,127);
|
||||
INSERT INTO t2 VALUES (6,128,6,128);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
CREATE PROCEDURE stp_t (IN p1 int, IN p2 int) MODIFIES SQL DATA
|
||||
BEGIN
|
||||
UPDATE t2 SET i = p2 WHERE i = p1;
|
||||
UPDATE v1 SET i = p2 WHERE i = p1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 6 Using where
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
CALL stp_t (125, 225);
|
180
mysql-test/suite/row_lock/r/ndb_row_lock_view_trig_1.result
Normal file
180
mysql-test/suite/row_lock/r/ndb_row_lock_view_trig_1.result
Normal file
|
@ -0,0 +1,180 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE v1 SET i = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range ixi ixi 5 NULL 10 Using where
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
123
|
||||
124
|
||||
126
|
||||
225
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
UPDATE t2 SET t2.i=223 WHERE t2.i=123;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
124
|
||||
125
|
||||
126
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 124 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=226 WHERE t2.i=126;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
123
|
||||
124
|
||||
225
|
||||
226
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
UPDATE t2 SET t2.i=224 WHERE t2.i=124;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
223
|
||||
224
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
DELETE FROM t1 WHERE t1.i=226;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 123 1 123
|
||||
2 124 2 124
|
||||
3 225 3 125
|
||||
4 226 4 126
|
||||
connection default;
|
||||
DELETE FROM t1 WHERE t1.i=224;
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
COMMIT;
|
||||
connection root1;
|
||||
ROLLBACK;
|
||||
connection default;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection root1;
|
||||
SELECT * FROM v1 ORDER BY i;
|
||||
i
|
||||
125
|
||||
126
|
||||
223
|
||||
SELECT * FROM t1 ORDER BY t1.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
SELECT * FROM t2 ORDER BY t2.k;
|
||||
k i j l
|
||||
1 223 1 123
|
||||
2 224 2 124
|
||||
3 125 3 125
|
||||
4 126 4 126
|
||||
connection default;
|
||||
DROP TABLE t1, t2;
|
||||
DROP VIEW v1;
|
36
mysql-test/suite/row_lock/r/ndb_row_lock_view_trig_2.result
Normal file
36
mysql-test/suite/row_lock/r/ndb_row_lock_view_trig_2.result
Normal file
|
@ -0,0 +1,36 @@
|
|||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP VIEW IF EXISTS v1;
|
||||
SET autocommit=0;
|
||||
SET autocommit=0;
|
||||
connection default;
|
||||
CREATE TABLE t1 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t1 VALUES (1,123,1,123);
|
||||
INSERT INTO t1 VALUES (2,124,2,124);
|
||||
INSERT INTO t1 VALUES (3,125,3,125);
|
||||
INSERT INTO t1 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t1 (i);
|
||||
CREATE TABLE t2 (k INT NOT NULL PRIMARY KEY, i INT, j INT, l INT) ENGINE=NDB;
|
||||
INSERT INTO t2 VALUES (1,123,1,123);
|
||||
INSERT INTO t2 VALUES (2,124,2,124);
|
||||
INSERT INTO t2 VALUES (3,125,3,125);
|
||||
INSERT INTO t2 VALUES (4,126,4,126);
|
||||
#CREATE INDEX ixi ON t2 (i);
|
||||
CREATE VIEW v1 AS SELECT t1.i from t1;
|
||||
CREATE TRIGGER trig_t2 AFTER UPDATE ON t2
|
||||
FOR EACH ROW BEGIN
|
||||
UPDATE v1 SET i = NEW.i WHERE i = OLD.i;
|
||||
END;
|
||||
|
|
||||
COMMIT;
|
||||
SELECT @@global.tx_isolation;
|
||||
@@global.tx_isolation
|
||||
REPEATABLE-READ
|
||||
EXPLAIN SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using where
|
||||
SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
i
|
||||
123
|
||||
124
|
||||
connection root1;
|
||||
UPDATE t2 SET t2.i=225 WHERE t2.i=125;
|
9
mysql-test/suite/row_lock/readme.txt
Normal file
9
mysql-test/suite/row_lock/readme.txt
Normal file
|
@ -0,0 +1,9 @@
|
|||
All row lock test with InnoDB have to be executed with the options
|
||||
|
||||
--innodb_lock_wait_timeout=1
|
||||
--innodb_locks_unsafe_for_binlog
|
||||
|
||||
for example
|
||||
|
||||
perl mysql-test-run.pl --mysqld=--innodb_lock_wait_timeout=2 --mysqld=--innodb_locks_unsafe_for_binlog --suite=row_lock innodb_row_lock_2
|
||||
|
36
mysql-test/suite/row_lock/summary_of_sel_test.txt
Normal file
36
mysql-test/suite/row_lock/summary_of_sel_test.txt
Normal file
|
@ -0,0 +1,36 @@
|
|||
Test plan:
|
||||
Create 2 tables with a primary key and 3 integer columns. Both get the same rows (1,123,1,123),(2,124,2,124),(3,125,3,125),(4,126,4,126). The second and third column may get an index to have cases with, without and mutilple index. Create views on the tables. Create an update trigger. Create a stored procedure updating the table. Create a stored function updating the table and deliver the key as result.
|
||||
|
||||
The test isself consists of 2 sessions (transactions) running in "parallel" (same user "root") accessing and locking the same tables on basis of a row lock. Expected is that both sessions(transactions) can update the table successfully.
|
||||
|
||||
First session
|
||||
execute an explain to every select and one of the following selects on the first half of table t1:
|
||||
- select <non index columns> ... where ... for update;
|
||||
- select <non index columns> ... where ... lock in share mode;
|
||||
- select <indexed columns> ... where ... for update;
|
||||
- select <indexed columns> ... where ... lock in share mode;
|
||||
- select <indexed columns> ... ignore index ... where ... for update;
|
||||
- select <indexed columns> ... ignore index ... where ... lock in share mode;
|
||||
- select ... where (select...) ... for update;
|
||||
- select ... where (select...) ... lock in share mode;
|
||||
- (select ... where) union (select ... where) for update;
|
||||
- (select ... where) union (select ... where) lock in...;
|
||||
- select <view> ... where ... for update;
|
||||
- select <view> ... where ... lock in ...;
|
||||
- select <join> ... where ... for update;
|
||||
- select <join> ... where ... lock in ...;
|
||||
Then executes
|
||||
- update
|
||||
- delete
|
||||
- trigger accessing table t1
|
||||
- stored procedure accessing table t1
|
||||
- stored function accessing table t1
|
||||
|
||||
Second session
|
||||
executes the same on the last half of table t1
|
||||
|
||||
call of mysqld with option
|
||||
--innodb_locks_unsafe_for_binlog
|
||||
|
||||
As the tests above work with small tables (<10 rows) there must be at least one test with a big table (>1000 rows) doing a table scan.
|
||||
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_1.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_1.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_2.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_2.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_3.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_3.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_4.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_4.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_5.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_5.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1 ignore index (ixi),t2 IGNORE INDEX (ixi) WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_big_tab.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_big_tab.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < half_t1() AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_big_tab.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
10
mysql-test/suite/row_lock/t/innodb_row_lock_big_tab_1.test
Normal file
10
mysql-test/suite/row_lock/t/innodb_row_lock_big_tab_1.test
Normal file
|
@ -0,0 +1,10 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $nbrows= 40;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 0 AND t1.k = t2.k LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_big_tab_1.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
10
mysql-test/suite/row_lock/t/innodb_row_lock_big_tab_2.test
Normal file
10
mysql-test/suite/row_lock/t/innodb_row_lock_big_tab_2.test
Normal file
|
@ -0,0 +1,10 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $nbrows= 40;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.k % 2= 0 AND t1.k = t2.k LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_big_tab_2.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_trig_1.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_trig_1.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_trig.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_trig_2.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_trig_2.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_trig.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_view_1.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_view_1.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
9
mysql-test/suite/row_lock/t/innodb_row_lock_view_2.test
Normal file
9
mysql-test/suite/row_lock/t/innodb_row_lock_view_2.test
Normal file
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_mix.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
10
mysql-test/suite/row_lock/t/innodb_row_lock_view_mix_2.test
Normal file
10
mysql-test/suite/row_lock/t/innodb_row_lock_view_mix_2.test
Normal file
|
@ -0,0 +1,10 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
#let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
let $select= SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_mix.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_storedp.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_storedp.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_trig.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
|
@ -0,0 +1,9 @@
|
|||
--source include/have_innodb.inc
|
||||
SELECT @@global.innodb_table_locks into @table_locks;
|
||||
SET @@global.innodb_table_locks= OFF;
|
||||
let $engine= InnoDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_trig.inc
|
||||
SET @@global.innodb_table_locks= @table_locks;
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_1.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_1.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_2.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_2.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_3.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_3.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_4.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_4.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_5.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_5.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1 ignore index (ixi),t2 IGNORE INDEX (ixi) WHERE t1.i<125 AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock.inc
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_big_tab.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_big_tab.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < half_t1() AND t2.i=t1.i LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_big_tab.inc
|
7
mysql-test/suite/row_lock/t/ndb_row_lock_big_tab_1.test
Normal file
7
mysql-test/suite/row_lock/t/ndb_row_lock_big_tab_1.test
Normal file
|
@ -0,0 +1,7 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $nbrows= 200;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < t1.k % 2 = 0 AND t2.k=t1.k LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_big_tab_1.inc
|
7
mysql-test/suite/row_lock/t/ndb_row_lock_big_tab_2.test
Normal file
7
mysql-test/suite/row_lock/t/ndb_row_lock_big_tab_2.test
Normal file
|
@ -0,0 +1,7 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $nbrows= 200;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i < t1.k % 2 = 0 AND t2.k=t1.k LOCK IN SHARE MODE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_big_tab_2.inc
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_trig_1.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_trig_1.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_trig.inc
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_trig_2.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_trig_2.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_trig.inc
|
7
mysql-test/suite/row_lock/t/ndb_row_lock_view_1.test
Normal file
7
mysql-test/suite/row_lock/t/ndb_row_lock_view_1.test
Normal file
|
@ -0,0 +1,7 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view.inc
|
||||
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_view_2.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_view_2.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view.inc
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_view_mix_1.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_view_mix_1.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i,t2.i FROM t1,t2 WHERE t1.i<125 AND t2.i=t1.i FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_mix.inc
|
6
mysql-test/suite/row_lock/t/ndb_row_lock_view_mix_2.test
Normal file
6
mysql-test/suite/row_lock/t/ndb_row_lock_view_mix_2.test
Normal file
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT v1.i FROM v1 WHERE v1.i<125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_mix.inc
|
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_storedp.inc
|
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_storedp.inc
|
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_trig.inc
|
|
@ -0,0 +1,6 @@
|
|||
--source include/have_ndb.inc
|
||||
let $engine= NDB;
|
||||
let $select= SELECT t1.i FROM t1 WHERE t1.i< 125 FOR UPDATE;
|
||||
let $indext1= #CREATE INDEX ixi ON t1 (i);
|
||||
let $indext2= #CREATE INDEX ixi ON t2 (i);
|
||||
--source suite/row_lock/include/row_lock_view_trig.inc
|
|
@ -1,4 +1,20 @@
|
|||
#include "my_base.h"
|
||||
/* Copyright (C) 2000 MySQL AB
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; 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 <my_global.h>
|
||||
#include <m_string.h>
|
||||
|
||||
/*
|
||||
my_memmem, port of a GNU extension.
|
||||
|
|
|
@ -1,220 +0,0 @@
|
|||
***************
|
||||
*** 76,96 ****
|
||||
alarm_aborted=0;
|
||||
init_queue(&alarm_queue,max_alarms+1,offsetof(ALARM,expire_time),0,
|
||||
compare_ulong,NullS);
|
||||
! sigfillset(&full_signal_set); /* Neaded to block signals */
|
||||
pthread_mutex_init(&LOCK_alarm,MY_MUTEX_INIT_FAST);
|
||||
pthread_cond_init(&COND_alarm,NULL);
|
||||
! #if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD)
|
||||
! #if defined(HAVE_mit_thread)
|
||||
! sigset(THR_CLIENT_ALARM,thread_alarm); /* int. thread system calls */
|
||||
! #else
|
||||
{
|
||||
! struct sigaction sact;
|
||||
! sact.sa_flags = 0;
|
||||
! sact.sa_handler = thread_alarm;
|
||||
! sigaction(THR_CLIENT_ALARM, &sact, (struct sigaction*) 0);
|
||||
}
|
||||
- #endif
|
||||
- #endif
|
||||
sigemptyset(&s);
|
||||
sigaddset(&s, THR_SERVER_ALARM);
|
||||
alarm_thread=pthread_self();
|
||||
--- 74,89 ----
|
||||
alarm_aborted=0;
|
||||
init_queue(&alarm_queue,max_alarms+1,offsetof(ALARM,expire_time),0,
|
||||
compare_ulong,NullS);
|
||||
! sigfillset(&full_signal_set); /* Needed to block signals */
|
||||
pthread_mutex_init(&LOCK_alarm,MY_MUTEX_INIT_FAST);
|
||||
pthread_cond_init(&COND_alarm,NULL);
|
||||
! #ifndef USE_ALARM_THREAD
|
||||
! if (thd_lib_detected != THD_LIB_LT)
|
||||
! #endif
|
||||
{
|
||||
! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1,
|
||||
! thread_alarm);
|
||||
}
|
||||
sigemptyset(&s);
|
||||
sigaddset(&s, THR_SERVER_ALARM);
|
||||
alarm_thread=pthread_self();
|
||||
***************
|
||||
*** 108,120 ****
|
||||
}
|
||||
#elif defined(USE_ONE_SIGNAL_HAND)
|
||||
pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */
|
||||
! #if THR_SERVER_ALARM == THR_CLIENT_ALARM
|
||||
! sigset(THR_CLIENT_ALARM,process_alarm); /* Linuxthreads */
|
||||
! pthread_sigmask(SIG_UNBLOCK, &s, NULL);
|
||||
! #endif
|
||||
#else
|
||||
pthread_sigmask(SIG_UNBLOCK, &s, NULL);
|
||||
- sigset(THR_SERVER_ALARM,process_alarm);
|
||||
#endif
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
--- 101,115 ----
|
||||
}
|
||||
#elif defined(USE_ONE_SIGNAL_HAND)
|
||||
pthread_sigmask(SIG_BLOCK, &s, NULL); /* used with sigwait() */
|
||||
! if (thd_lib_detected == THD_LIB_LT)
|
||||
! {
|
||||
! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1,
|
||||
! process_alarm); /* Linuxthreads */
|
||||
! pthread_sigmask(SIG_UNBLOCK, &s, NULL);
|
||||
! }
|
||||
#else
|
||||
+ my_sigset(THR_SERVER_ALARM, process_alarm);
|
||||
pthread_sigmask(SIG_UNBLOCK, &s, NULL);
|
||||
#endif
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
***************
|
||||
*** 240,246 ****
|
||||
if (alarm_data->malloced)
|
||||
my_free((gptr) alarm_data,MYF(0));
|
||||
found++;
|
||||
! #ifndef DBUG_OFF
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
--- 235,241 ----
|
||||
if (alarm_data->malloced)
|
||||
my_free((gptr) alarm_data,MYF(0));
|
||||
found++;
|
||||
! #ifdef DBUG_OFF
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
***************
|
||||
*** 249,258 ****
|
||||
if (!found)
|
||||
{
|
||||
if (*alarmed)
|
||||
! fprintf(stderr,"Warning: Didn't find alarm %lx in queue of %d alarms\n",
|
||||
! (long) *alarmed, alarm_queue.elements);
|
||||
! DBUG_PRINT("warning",("Didn't find alarm %lx in queue\n",
|
||||
! (long) *alarmed));
|
||||
}
|
||||
pthread_mutex_unlock(&LOCK_alarm);
|
||||
pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
|
||||
--- 244,254 ----
|
||||
if (!found)
|
||||
{
|
||||
if (*alarmed)
|
||||
! fprintf(stderr,
|
||||
! "Warning: Didn't find alarm 0x%lx in queue of %d alarms\n",
|
||||
! (long) *alarmed, alarm_queue.elements);
|
||||
! DBUG_PRINT("warning",("Didn't find alarm 0x%lx in queue\n",
|
||||
! (long) *alarmed));
|
||||
}
|
||||
pthread_mutex_unlock(&LOCK_alarm);
|
||||
pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
|
||||
***************
|
||||
*** 274,291 ****
|
||||
This must be first as we can't call DBUG inside an alarm for a normal thread
|
||||
*/
|
||||
|
||||
! #if THR_SERVER_ALARM == THR_CLIENT_ALARM
|
||||
! if (!pthread_equal(pthread_self(),alarm_thread))
|
||||
{
|
||||
#if defined(MAIN) && !defined(__bsdi__)
|
||||
! printf("thread_alarm\n"); fflush(stdout);
|
||||
#endif
|
||||
#ifdef DONT_REMEMBER_SIGNAL
|
||||
! sigset(THR_CLIENT_ALARM,process_alarm); /* int. thread system calls */
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
- #endif
|
||||
|
||||
/*
|
||||
We have to do do the handling of the alarm in a sub function,
|
||||
--- 270,287 ----
|
||||
This must be first as we can't call DBUG inside an alarm for a normal thread
|
||||
*/
|
||||
|
||||
! if (thd_lib_detected == THD_LIB_LT &&
|
||||
! !pthread_equal(pthread_self(),alarm_thread))
|
||||
{
|
||||
#if defined(MAIN) && !defined(__bsdi__)
|
||||
! printf("thread_alarm in process_alarm\n"); fflush(stdout);
|
||||
#endif
|
||||
#ifdef DONT_REMEMBER_SIGNAL
|
||||
! my_sigset(thd_lib_detected == THD_LIB_LT ? SIGALRM : SIGUSR1,
|
||||
! process_alarm); /* int. thread system calls */
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
We have to do do the handling of the alarm in a sub function,
|
||||
***************
|
||||
*** 301,307 ****
|
||||
process_alarm_part2(sig);
|
||||
#ifndef USE_ALARM_THREAD
|
||||
#if defined(DONT_REMEMBER_SIGNAL) && !defined(USE_ONE_SIGNAL_HAND)
|
||||
! sigset(THR_SERVER_ALARM,process_alarm);
|
||||
#endif
|
||||
pthread_mutex_unlock(&LOCK_alarm);
|
||||
pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
|
||||
--- 297,303 ----
|
||||
process_alarm_part2(sig);
|
||||
#ifndef USE_ALARM_THREAD
|
||||
#if defined(DONT_REMEMBER_SIGNAL) && !defined(USE_ONE_SIGNAL_HAND)
|
||||
! my_sigset(THR_SERVER_ALARM, process_alarm);
|
||||
#endif
|
||||
pthread_mutex_unlock(&LOCK_alarm);
|
||||
pthread_sigmask(SIG_SETMASK,&old_mask,NULL);
|
||||
***************
|
||||
*** 504,520 ****
|
||||
ARGSUSED
|
||||
*/
|
||||
|
||||
- #if THR_CLIENT_ALARM != SIGALRM || defined(USE_ALARM_THREAD)
|
||||
static sig_handler thread_alarm(int sig)
|
||||
{
|
||||
#ifdef MAIN
|
||||
printf("thread_alarm\n"); fflush(stdout);
|
||||
#endif
|
||||
#ifdef DONT_REMEMBER_SIGNAL
|
||||
! sigset(sig,thread_alarm); /* int. thread system calls */
|
||||
#endif
|
||||
}
|
||||
- #endif
|
||||
|
||||
|
||||
#ifdef HAVE_TIMESPEC_TS_SEC
|
||||
--- 499,513 ----
|
||||
ARGSUSED
|
||||
*/
|
||||
|
||||
static sig_handler thread_alarm(int sig)
|
||||
{
|
||||
#ifdef MAIN
|
||||
printf("thread_alarm\n"); fflush(stdout);
|
||||
#endif
|
||||
#ifdef DONT_REMEMBER_SIGNAL
|
||||
! my_sigset(sig, thread_alarm); /* int. thread system calls */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#ifdef HAVE_TIMESPEC_TS_SEC
|
||||
***************
|
||||
*** 915,921 ****
|
||||
printf("Warning: Got signal %d from thread %s\n",sig,my_thread_name());
|
||||
fflush(stdout);
|
||||
#ifdef DONT_REMEMBER_SIGNAL
|
||||
! sigset(sig,print_signal_warning); /* int. thread system calls */
|
||||
#endif
|
||||
#ifndef OS2
|
||||
if (sig == SIGALRM)
|
||||
--- 908,914 ----
|
||||
printf("Warning: Got signal %d from thread %s\n",sig,my_thread_name());
|
||||
fflush(stdout);
|
||||
#ifdef DONT_REMEMBER_SIGNAL
|
||||
! my_sigset(sig, print_signal_warning); /* int. thread system calls */
|
||||
#endif
|
||||
#ifndef OS2
|
||||
if (sig == SIGALRM)
|
|
@ -115,7 +115,12 @@ if [ $BASE_SYSTEM != "netware" ] ; then
|
|||
chmod o-rwx $BASE/data $BASE/data/*
|
||||
fi
|
||||
|
||||
# Copy files if they exists, warn for those that don't
|
||||
# Copy files if they exists, warn for those that don't.
|
||||
# Note that when listing files to copy, we might list the file name
|
||||
# twice, once in the directory location where it is build, and a
|
||||
# second time in the ".libs" location. In the case the firs one
|
||||
# is a wrapper script, the second one will overwrite it with the
|
||||
# binary file.
|
||||
copyfileto()
|
||||
{
|
||||
destdir=$1
|
||||
|
@ -165,6 +170,7 @@ if [ $BASE_SYSTEM = "netware" ] ; then
|
|||
# For all other platforms:
|
||||
else
|
||||
BIN_FILES="$BIN_FILES \
|
||||
server-tools/instance-manager/.libs/mysqlmanager \
|
||||
client/mysqltestmanagerc \
|
||||
client/mysqltestmanager-pwgen tools/mysqltestmanager \
|
||||
client/.libs/mysql client/.libs/mysqlshow client/.libs/mysqladmin \
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
|
||||
# MA 02110-1301 USA.
|
||||
|
||||
%define mysql_version @VERSION@
|
||||
%define mysql_version @VERSION@
|
||||
|
||||
# use "rpmbuild --with static" or "rpm --define '_with_static 1'" (for RPM 3.x)
|
||||
# to enable static linking (off by default)
|
||||
|
@ -32,10 +32,10 @@
|
|||
%define release 0.glibc23
|
||||
%endif
|
||||
%define license GPL
|
||||
%define mysqld_user mysql
|
||||
%define mysqld_group mysql
|
||||
%define server_suffix -standard
|
||||
%define mysqldatadir /var/lib/mysql
|
||||
%define mysqld_user mysql
|
||||
%define mysqld_group mysql
|
||||
%define server_suffix -community
|
||||
%define mysqldatadir /var/lib/mysql
|
||||
|
||||
# We don't package all files installed into the build root by intention -
|
||||
# See BUG#998 for details.
|
||||
|
@ -99,7 +99,7 @@ Summary: MySQL: a very fast and reliable SQL database server
|
|||
Group: Applications/Databases
|
||||
Requires: coreutils grep procps /usr/sbin/useradd /usr/sbin/groupadd /sbin/chkconfig
|
||||
Provides: msqlormysql mysql-server mysql MySQL
|
||||
Obsoletes: MySQL mysql mysql-server
|
||||
Obsoletes: MySQL mysql mysql-server mysql-Max
|
||||
|
||||
%description server
|
||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
||||
|
@ -120,7 +120,7 @@ This package includes the MySQL server binary (incl. InnoDB) as well
|
|||
as related utilities to run and administrate a MySQL server.
|
||||
|
||||
If you want to access and work with the database, you have to install
|
||||
package "MySQL-client" as well!
|
||||
the package "MySQL-client" as well!
|
||||
|
||||
%package client
|
||||
Summary: MySQL - Client
|
||||
|
@ -141,8 +141,6 @@ Group: Applications/Databases
|
|||
This package contains the ndbcluster storage engine.
|
||||
It is necessary to have this package installed on all
|
||||
computers that should store ndbcluster table data.
|
||||
Note that this storage engine can only be used in conjunction
|
||||
with the MySQL Max server.
|
||||
|
||||
%{see_base}
|
||||
|
||||
|
@ -211,29 +209,6 @@ Obsoletes: mysql-shared
|
|||
This package contains the shared libraries (*.so*) which certain
|
||||
languages and applications need to dynamically load and use MySQL.
|
||||
|
||||
%package Max
|
||||
Summary: MySQL - server with extended functionality
|
||||
Group: Applications/Databases
|
||||
Provides: mysql-Max
|
||||
Obsoletes: mysql-Max
|
||||
Requires: MySQL-server >= @MYSQL_BASE_VERSION@
|
||||
|
||||
%description Max
|
||||
Optional MySQL server binary that supports additional features like:
|
||||
|
||||
- Berkeley DB Storage Engine
|
||||
- Ndbcluster Storage Engine interface
|
||||
- Archive Storage Engine
|
||||
- CSV Storage Engine
|
||||
- Example Storage Engine
|
||||
- Federated Storage Engine
|
||||
- User Defined Functions (UDFs).
|
||||
|
||||
To activate this binary, just install this package in addition to
|
||||
the standard MySQL package.
|
||||
|
||||
Please note that this is a dynamically linked binary!
|
||||
|
||||
#%package embedded
|
||||
#Requires: %{name}-devel
|
||||
#Summary: MySQL - embedded library
|
||||
|
@ -323,9 +298,6 @@ mkdir -p $RBR%{_libdir}/mysql
|
|||
PATH=${MYSQL_BUILD_PATH:-/bin:/usr/bin}
|
||||
export PATH
|
||||
|
||||
# Build the Max binary (includes BDB and UDFs and therefore
|
||||
# cannot be linked statically against the patched glibc)
|
||||
|
||||
# Use gcc for C and C++ code (to avoid a dependency on libstdc++ and
|
||||
# including exceptions into the code
|
||||
if [ -z "$CXX" -a -z "$CC" ]
|
||||
|
@ -334,76 +306,44 @@ then
|
|||
export CXX="gcc"
|
||||
fi
|
||||
|
||||
BuildMySQL "--enable-shared \
|
||||
--with-extra-charsets=all \
|
||||
--with-berkeley-db \
|
||||
--with-innodb \
|
||||
--with-ndbcluster \
|
||||
--with-archive-storage-engine \
|
||||
--with-csv-storage-engine \
|
||||
--with-example-storage-engine \
|
||||
--with-blackhole-storage-engine \
|
||||
--with-federated-storage-engine \
|
||||
--with-big-tables \
|
||||
--with-comment=\"MySQL Community Edition - Experimental (GPL)\" \
|
||||
--with-server-suffix='-max'"
|
||||
|
||||
# We might want to save the config log file
|
||||
if test -n "$MYSQL_MAXCONFLOG_DEST"
|
||||
then
|
||||
cp -fp config.log "$MYSQL_MAXCONFLOG_DEST"
|
||||
fi
|
||||
|
||||
make test-bt
|
||||
|
||||
# Save mysqld-max
|
||||
./libtool --mode=execute cp sql/mysqld sql/mysqld-max
|
||||
./libtool --mode=execute nm --numeric-sort sql/mysqld-max > sql/mysqld-max.sym
|
||||
|
||||
# Save the perror binary so it supports the NDB error codes (BUG#13740)
|
||||
./libtool --mode=execute cp extra/perror extra/perror.ndb
|
||||
|
||||
# Install the ndb binaries
|
||||
(cd ndb; make install DESTDIR=$RBR)
|
||||
|
||||
# Include libgcc.a in the devel subpackage (BUG 4921)
|
||||
if expr "$CC" : ".*gcc.*" > /dev/null ;
|
||||
then
|
||||
libgcc=`$CC $CFLAGS --print-libgcc-file`
|
||||
if [ -f $libgcc ]
|
||||
then
|
||||
%define have_libgcc 1
|
||||
install -m 644 $libgcc $RBR%{_libdir}/mysql/libmygcc.a
|
||||
fi
|
||||
fi
|
||||
|
||||
# Save libraries
|
||||
(cd libmysql/.libs; tar cf $RBR/shared-libs.tar *.so*)
|
||||
(cd libmysql_r/.libs; tar rf $RBR/shared-libs.tar *.so*)
|
||||
(cd ndb/src/.libs; tar rf $RBR/shared-libs.tar *.so*)
|
||||
|
||||
# Now clean up
|
||||
make clean
|
||||
|
||||
#
|
||||
# Only link statically on our i386 build host (which has a specially
|
||||
# patched static glibc installed) - ia64 and x86_64 run glibc-2.3 (unpatched)
|
||||
# so don't link statically there
|
||||
#
|
||||
BuildMySQL "--disable-shared \
|
||||
for servertype in '--with-debug=full' ' '
|
||||
do
|
||||
BuildMySQL "\
|
||||
%if %{STATIC_BUILD}
|
||||
--disable-shared \
|
||||
--with-mysqld-ldflags='-all-static' \
|
||||
--with-client-ldflags='-all-static' \
|
||||
$USE_OTHER_LIBC_DIR \
|
||||
%else
|
||||
--enable-shared \
|
||||
--with-zlib-dir=bundled \
|
||||
%endif
|
||||
--with-extra-charsets=complex \
|
||||
--with-comment=\"MySQL Community Edition - Standard (GPL)\" \
|
||||
--with-comment=\"MySQL Community Edition (GPL)\" \
|
||||
--with-server-suffix='%{server_suffix}' \
|
||||
--with-archive-storage-engine \
|
||||
--with-innodb \
|
||||
--with-big-tables"
|
||||
--with-ndbcluster \
|
||||
--with-csv-storage-engine \
|
||||
--with-example-storage-engine \
|
||||
--with-blackhole-storage-engine \
|
||||
--with-federated-storage-engine \
|
||||
--with-big-tables $servertype"
|
||||
if test "$servertype" != ' '
|
||||
then
|
||||
# if this is not the regular build, we save the server binary
|
||||
./libtool --mode=execute cp sql/mysqld sql/mysqld-debug
|
||||
./libtool --mode=execute nm --numeric-sort sql/mysqld-debug > sql/mysqld-debug.sym
|
||||
echo "# debug"
|
||||
make test-bt
|
||||
make clean
|
||||
fi
|
||||
done
|
||||
|
||||
./libtool --mode=execute nm --numeric-sort sql/mysqld > sql/mysqld.sym
|
||||
|
||||
|
@ -413,6 +353,7 @@ then
|
|||
cp -fp config.log "$MYSQL_CONFLOG_DEST"
|
||||
fi
|
||||
|
||||
echo "# standard"
|
||||
make test-bt
|
||||
|
||||
%install
|
||||
|
@ -428,22 +369,33 @@ install -d $RBR%{_libdir}
|
|||
install -d $RBR%{_mandir}
|
||||
install -d $RBR%{_sbindir}
|
||||
|
||||
|
||||
# Install all binaries stripped
|
||||
make install-strip DESTDIR=$RBR benchdir_root=%{_datadir}
|
||||
|
||||
# Install the ndb binaries
|
||||
(cd ndb; make install DESTDIR=$RBR)
|
||||
|
||||
# Install the saved debug server
|
||||
install -s -m 755 $MBD/sql/mysqld-debug $RBR%{_sbindir}/mysqld-debug
|
||||
|
||||
# Install shared libraries (Disable for architectures that don't support it)
|
||||
(cd $RBR%{_libdir}; tar xf $RBR/shared-libs.tar; rm -f $RBR/shared-libs.tar)
|
||||
# (cd $RBR%{_libdir}; tar xf $RBR/shared-libs.tar; rm -f $RBR/shared-libs.tar)
|
||||
|
||||
# install saved mysqld-max
|
||||
install -s -m 755 $MBD/sql/mysqld-max $RBR%{_sbindir}/mysqld-max
|
||||
|
||||
# install saved perror binary with NDB support (BUG#13740)
|
||||
install -s -m 755 $MBD/extra/perror.ndb $RBR%{_bindir}/perror
|
||||
# Include libgcc.a in the devel subpackage (BUG 4921)
|
||||
if expr "$CC" : ".*gcc.*" > /dev/null ;
|
||||
then
|
||||
libgcc=`$CC $CFLAGS --print-libgcc-file`
|
||||
if [ -f $libgcc ]
|
||||
then
|
||||
%define have_libgcc 1
|
||||
install -m 644 $libgcc $RBR%{_libdir}/mysql/libmygcc.a
|
||||
fi
|
||||
fi
|
||||
|
||||
# install symbol files ( for stack trace resolution)
|
||||
install -m 644 $MBD/sql/mysqld-max.sym $RBR%{_libdir}/mysql/mysqld-max.sym
|
||||
# install -m 644 $MBD/sql/mysqld-max.sym $RBR%{_libdir}/mysql/mysqld-max.sym
|
||||
install -m 644 $MBD/sql/mysqld.sym $RBR%{_libdir}/mysql/mysqld.sym
|
||||
install -m 644 $MBD/sql/mysqld-debug.sym $RBR%{_libdir}/mysql/mysqld-debug.sym
|
||||
|
||||
# Install logrotate and autostart
|
||||
install -m 644 $MBD/support-files/mysql-log-rotate $RBR%{_sysconfdir}/logrotate.d/mysql
|
||||
|
@ -529,19 +481,12 @@ chmod -R og-rw $mysql_datadir/mysql
|
|||
# Allow safe_mysqld to start mysqld and print a message before we exit
|
||||
sleep 2
|
||||
|
||||
|
||||
%post ndb-storage
|
||||
mysql_clusterdir=/var/lib/mysql-cluster
|
||||
|
||||
# Create cluster directory if needed
|
||||
if test ! -d $mysql_clusterdir; then mkdir -m 755 $mysql_clusterdir; fi
|
||||
|
||||
|
||||
%post Max
|
||||
# Restart mysqld, to use the new binary.
|
||||
echo "Restarting mysqld."
|
||||
%{_sysconfdir}/init.d/mysql restart > /dev/null 2>&1
|
||||
|
||||
%preun server
|
||||
if test $1 = 0
|
||||
then
|
||||
|
@ -611,7 +556,6 @@ fi
|
|||
%attr(755, root, root) %{_bindir}/myisamlog
|
||||
%attr(755, root, root) %{_bindir}/myisampack
|
||||
%attr(755, root, root) %{_bindir}/mysql_convert_table_format
|
||||
%attr(755, root, root) %{_bindir}/mysql_create_system_tables
|
||||
%attr(755, root, root) %{_bindir}/mysql_explain_log
|
||||
%attr(755, root, root) %{_bindir}/mysql_fix_extensions
|
||||
%attr(755, root, root) %{_bindir}/mysql_fix_privilege_tables
|
||||
|
@ -634,6 +578,7 @@ fi
|
|||
%attr(755, root, root) %{_bindir}/safe_mysqld
|
||||
|
||||
%attr(755, root, root) %{_sbindir}/mysqld
|
||||
%attr(755, root, root) %{_sbindir}/mysqld-debug
|
||||
%attr(755, root, root) %{_sbindir}/mysqlmanager
|
||||
%attr(755, root, root) %{_sbindir}/rcmysql
|
||||
%attr(644, root, root) %{_libdir}/mysql/mysqld.sym
|
||||
|
@ -762,11 +707,6 @@ fi
|
|||
%doc %attr(644, root, man) %{_mandir}/man1/mysql-stress-test.pl.1*
|
||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.pl.1*
|
||||
|
||||
%files Max
|
||||
%defattr(-, root, root, 0755)
|
||||
%attr(755, root, root) %{_sbindir}/mysqld-max
|
||||
%attr(644, root, root) %{_libdir}/mysql/mysqld-max.sym
|
||||
|
||||
#%files embedded
|
||||
#%defattr(-, root, root, 0755)
|
||||
# %attr(644, root, root) %{_libdir}/mysql/libmysqld.a
|
||||
|
@ -774,7 +714,20 @@ fi
|
|||
# The spec file changelog only includes changes made to the spec file
|
||||
# itself - note that they must be ordered by date (important when
|
||||
# merging BK trees)
|
||||
%changelog
|
||||
%changelog
|
||||
* Sat Apr 07 2007 Kent Boortz <kent@mysql.com>
|
||||
|
||||
- Removed man page for "mysql_create_system_tables"
|
||||
|
||||
* Wed Mar 21 2007 Daniel Fischer <df@mysql.com>
|
||||
|
||||
- Add debug server.
|
||||
|
||||
* Mon Mar 19 2007 Daniel Fischer <df@mysql.com>
|
||||
|
||||
- Remove Max RPMs; the server RPMs contain a mysqld compiled with all
|
||||
features that previously only were built into Max.
|
||||
|
||||
* Fri Mar 02 2007 Joerg Bruehe <joerg@mysql.com>
|
||||
|
||||
- Add several man pages for NDB which are now created.
|
||||
|
|
|
@ -19,16 +19,18 @@ INCLUDES= -I$(top_builddir)/include -I$(top_srcdir)/include
|
|||
|
||||
LIBS= $(NON_THREADED_LIBS)
|
||||
|
||||
pkglib_LTLIBRARIES=libz.la
|
||||
pkglib_LTLIBRARIES = libz.la
|
||||
noinst_LTLIBRARIES = libzlt.la
|
||||
|
||||
libz_la_LDFLAGS= -version-info 3:3:2
|
||||
libz_la_LDFLAGS = -static
|
||||
|
||||
noinst_HEADERS= crc32.h deflate.h inffast.h inffixed.h inflate.h \
|
||||
inftrees.h trees.h zconf.h zlib.h zutil.h
|
||||
noinst_HEADERS = crc32.h deflate.h inffast.h inffixed.h inflate.h \
|
||||
inftrees.h trees.h zconf.h zlib.h zutil.h
|
||||
|
||||
libz_la_SOURCES= adler32.c compress.c crc32.c deflate.c gzio.c \
|
||||
infback.c inffast.c inflate.c inftrees.c trees.c \
|
||||
uncompr.c zutil.c
|
||||
libz_la_SOURCES = adler32.c compress.c crc32.c deflate.c gzio.c \
|
||||
infback.c inffast.c inflate.c inftrees.c trees.c \
|
||||
uncompr.c zutil.c
|
||||
libzlt_la_SOURCES = $(libz_la_SOURCES)
|
||||
|
||||
EXTRA_DIST= README FAQ INDEX ChangeLog algorithm.txt zlib.3 CMakeLists.txt
|
||||
|
||||
|
|
Loading…
Reference in a new issue