mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
Merge jamppa@bk-internal.mysql.com:/home/bk/mysql-5.0
into a88-113-38-195.elisa-laajakaista.fi:/home/my/new/mysql-5.0-marvel
This commit is contained in:
@@ -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
|
|
@@ -790,3 +790,27 @@ esac
|
|||||||
AC_SUBST(AR)
|
AC_SUBST(AR)
|
||||||
AC_SUBST(ARFLAGS)
|
AC_SUBST(ARFLAGS)
|
||||||
])
|
])
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl Macro to check time_t range: according to C standard
|
||||||
|
dnl array index must be greater than 0 => if time_t is signed,
|
||||||
|
dnl the code in the macros below won't compile.
|
||||||
|
dnl
|
||||||
|
|
||||||
|
AC_DEFUN([MYSQL_CHECK_TIME_T],[
|
||||||
|
AC_MSG_CHECKING(if time_t is unsigned)
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
|
||||||
|
[[
|
||||||
|
#include <time.h>
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
int array[(((time_t)-1) > 0) ? 1 : -1];
|
||||||
|
]] )
|
||||||
|
], [
|
||||||
|
AC_DEFINE([TIME_T_UNSIGNED], 1, [Define to 1 if time_t is unsigned])
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
],
|
||||||
|
[AC_MSG_RESULT(no)]
|
||||||
|
)
|
||||||
|
])
|
||||||
|
|
||||||
|
@@ -2,7 +2,7 @@ dnl Define zlib paths to point at bundled zlib
|
|||||||
|
|
||||||
AC_DEFUN([MYSQL_USE_BUNDLED_ZLIB], [
|
AC_DEFUN([MYSQL_USE_BUNDLED_ZLIB], [
|
||||||
ZLIB_INCLUDES="-I\$(top_srcdir)/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.
|
dnl Omit -L$pkglibdir as it's always in the list of mysql_config deps.
|
||||||
ZLIB_DEPS="-lz"
|
ZLIB_DEPS="-lz"
|
||||||
zlib_dir="zlib"
|
zlib_dir="zlib"
|
||||||
@@ -10,16 +10,25 @@ AC_SUBST([zlib_dir])
|
|||||||
mysql_cv_compress="yes"
|
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], [
|
AC_DEFUN([MYSQL_CHECK_ZLIB_DIR], [
|
||||||
save_CPPFLAGS="$CPPFLAGS"
|
save_CPPFLAGS="$CPPFLAGS"
|
||||||
save_LIBS="$LIBS"
|
save_LIBS="$LIBS"
|
||||||
CPPFLAGS="$ZLIB_INCLUDES $CPPFLAGS"
|
CPPFLAGS="$ZLIB_INCLUDES $CPPFLAGS"
|
||||||
LIBS="$LIBS $ZLIB_LIBS"
|
LIBS="$LIBS $ZLIB_LIBS"
|
||||||
|
if test X"$with_server" = Xno
|
||||||
|
then
|
||||||
|
zlibsym=zlibVersion
|
||||||
|
else
|
||||||
|
zlibsym=zlibCompileFlags
|
||||||
|
fi
|
||||||
AC_CACHE_VAL([mysql_cv_compress],
|
AC_CACHE_VAL([mysql_cv_compress],
|
||||||
[AC_TRY_LINK([#include <zlib.h>],
|
[AC_TRY_LINK([#include <zlib.h>],
|
||||||
[return zlibCompileFlags();],
|
[return $zlibsym();],
|
||||||
[mysql_cv_compress="yes"
|
[mysql_cv_compress="yes"
|
||||||
AC_MSG_RESULT([ok])],
|
AC_MSG_RESULT([ok])],
|
||||||
[mysql_cv_compress="no"])
|
[mysql_cv_compress="no"])
|
||||||
|
@@ -30,7 +30,7 @@ NDB_VERSION_STATUS=""
|
|||||||
# Remember that regexps needs to quote [ and ] since this is run through m4
|
# Remember that regexps needs to quote [ and ] since this is run through m4
|
||||||
MYSQL_NO_DASH_VERSION=`echo $VERSION | sed -e "s|[[a-z]]*-.*$||"`
|
MYSQL_NO_DASH_VERSION=`echo $VERSION | sed -e "s|[[a-z]]*-.*$||"`
|
||||||
MYSQL_BASE_VERSION=`echo $MYSQL_NO_DASH_VERSION | sed -e "s|\.[[^.]]*$||"`
|
MYSQL_BASE_VERSION=`echo $MYSQL_NO_DASH_VERSION | sed -e "s|\.[[^.]]*$||"`
|
||||||
MYSQL_VERSION_ID=`echo $MYSQL_NO_DASH_VERSION. | sed -e 's/[[^0-9.]]//g; s/\./ /g; s/ \([[0-9]]\) / 0\\1 /g; s/ //g'`
|
MYSQL_VERSION_ID=`echo $MYSQL_NO_DASH_VERSION | sed -e 's|[[^0-9.]].*$||;s|$|.|' | sed -e 's/[[^0-9.]]//g; s/\./ /g; s/ \([[0-9]]\) / 0\\1 /g; s/ //g'`
|
||||||
|
|
||||||
# The port should be constant for a LONG time
|
# The port should be constant for a LONG time
|
||||||
MYSQL_TCP_PORT_DEFAULT=3306
|
MYSQL_TCP_PORT_DEFAULT=3306
|
||||||
@@ -1601,9 +1601,9 @@ fi
|
|||||||
# dlopen, dlerror
|
# dlopen, dlerror
|
||||||
case "$with_mysqld_ldflags " in
|
case "$with_mysqld_ldflags " in
|
||||||
|
|
||||||
*"-static "*)
|
*"-all-static "*)
|
||||||
# No need to check for dlopen when mysqld is linked with
|
# 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
|
# 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
|
# 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.
|
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/*
|
chmod o-rwx $BASE/data $BASE/data/*
|
||||||
fi
|
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()
|
copyfileto()
|
||||||
{
|
{
|
||||||
destdir=$1
|
destdir=$1
|
||||||
@@ -165,6 +170,7 @@ if [ $BASE_SYSTEM = "netware" ] ; then
|
|||||||
# For all other platforms:
|
# For all other platforms:
|
||||||
else
|
else
|
||||||
BIN_FILES="$BIN_FILES \
|
BIN_FILES="$BIN_FILES \
|
||||||
|
server-tools/instance-manager/.libs/mysqlmanager \
|
||||||
client/mysqltestmanagerc \
|
client/mysqltestmanagerc \
|
||||||
client/mysqltestmanager-pwgen tools/mysqltestmanager \
|
client/mysqltestmanager-pwgen tools/mysqltestmanager \
|
||||||
client/.libs/mysql client/.libs/mysqlshow client/.libs/mysqladmin \
|
client/.libs/mysql client/.libs/mysqlshow client/.libs/mysqladmin \
|
||||||
|
@@ -14,7 +14,7 @@
|
|||||||
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
|
# Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston
|
||||||
# MA 02110-1301 USA.
|
# 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)
|
# use "rpmbuild --with static" or "rpm --define '_with_static 1'" (for RPM 3.x)
|
||||||
# to enable static linking (off by default)
|
# to enable static linking (off by default)
|
||||||
@@ -32,10 +32,10 @@
|
|||||||
%define release 0.glibc23
|
%define release 0.glibc23
|
||||||
%endif
|
%endif
|
||||||
%define license GPL
|
%define license GPL
|
||||||
%define mysqld_user mysql
|
%define mysqld_user mysql
|
||||||
%define mysqld_group mysql
|
%define mysqld_group mysql
|
||||||
%define server_suffix -standard
|
%define server_suffix -community
|
||||||
%define mysqldatadir /var/lib/mysql
|
%define mysqldatadir /var/lib/mysql
|
||||||
|
|
||||||
# We don't package all files installed into the build root by intention -
|
# We don't package all files installed into the build root by intention -
|
||||||
# See BUG#998 for details.
|
# See BUG#998 for details.
|
||||||
@@ -99,7 +99,7 @@ Summary: MySQL: a very fast and reliable SQL database server
|
|||||||
Group: Applications/Databases
|
Group: Applications/Databases
|
||||||
Requires: coreutils grep procps /usr/sbin/useradd /usr/sbin/groupadd /sbin/chkconfig
|
Requires: coreutils grep procps /usr/sbin/useradd /usr/sbin/groupadd /sbin/chkconfig
|
||||||
Provides: msqlormysql mysql-server mysql MySQL
|
Provides: msqlormysql mysql-server mysql MySQL
|
||||||
Obsoletes: MySQL mysql mysql-server
|
Obsoletes: MySQL mysql mysql-server mysql-Max
|
||||||
|
|
||||||
%description server
|
%description server
|
||||||
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
|
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.
|
as related utilities to run and administrate a MySQL server.
|
||||||
|
|
||||||
If you want to access and work with the database, you have to install
|
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
|
%package client
|
||||||
Summary: MySQL - Client
|
Summary: MySQL - Client
|
||||||
@@ -141,8 +141,6 @@ Group: Applications/Databases
|
|||||||
This package contains the ndbcluster storage engine.
|
This package contains the ndbcluster storage engine.
|
||||||
It is necessary to have this package installed on all
|
It is necessary to have this package installed on all
|
||||||
computers that should store ndbcluster table data.
|
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}
|
%{see_base}
|
||||||
|
|
||||||
@@ -211,29 +209,6 @@ Obsoletes: mysql-shared
|
|||||||
This package contains the shared libraries (*.so*) which certain
|
This package contains the shared libraries (*.so*) which certain
|
||||||
languages and applications need to dynamically load and use MySQL.
|
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
|
#%package embedded
|
||||||
#Requires: %{name}-devel
|
#Requires: %{name}-devel
|
||||||
#Summary: MySQL - embedded library
|
#Summary: MySQL - embedded library
|
||||||
@@ -323,9 +298,6 @@ mkdir -p $RBR%{_libdir}/mysql
|
|||||||
PATH=${MYSQL_BUILD_PATH:-/bin:/usr/bin}
|
PATH=${MYSQL_BUILD_PATH:-/bin:/usr/bin}
|
||||||
export PATH
|
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
|
# Use gcc for C and C++ code (to avoid a dependency on libstdc++ and
|
||||||
# including exceptions into the code
|
# including exceptions into the code
|
||||||
if [ -z "$CXX" -a -z "$CC" ]
|
if [ -z "$CXX" -a -z "$CC" ]
|
||||||
@@ -334,76 +306,44 @@ then
|
|||||||
export CXX="gcc"
|
export CXX="gcc"
|
||||||
fi
|
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
|
# 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)
|
# patched static glibc installed) - ia64 and x86_64 run glibc-2.3 (unpatched)
|
||||||
# so don't link statically there
|
# so don't link statically there
|
||||||
#
|
#
|
||||||
BuildMySQL "--disable-shared \
|
for servertype in '--with-debug=full' ' '
|
||||||
|
do
|
||||||
|
BuildMySQL "\
|
||||||
%if %{STATIC_BUILD}
|
%if %{STATIC_BUILD}
|
||||||
|
--disable-shared \
|
||||||
--with-mysqld-ldflags='-all-static' \
|
--with-mysqld-ldflags='-all-static' \
|
||||||
--with-client-ldflags='-all-static' \
|
--with-client-ldflags='-all-static' \
|
||||||
$USE_OTHER_LIBC_DIR \
|
$USE_OTHER_LIBC_DIR \
|
||||||
%else
|
%else
|
||||||
|
--enable-shared \
|
||||||
--with-zlib-dir=bundled \
|
--with-zlib-dir=bundled \
|
||||||
%endif
|
%endif
|
||||||
--with-extra-charsets=complex \
|
--with-extra-charsets=complex \
|
||||||
--with-comment=\"MySQL Community Edition - Standard (GPL)\" \
|
--with-comment=\"MySQL Community Edition (GPL)\" \
|
||||||
--with-server-suffix='%{server_suffix}' \
|
--with-server-suffix='%{server_suffix}' \
|
||||||
--with-archive-storage-engine \
|
--with-archive-storage-engine \
|
||||||
--with-innodb \
|
--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
|
./libtool --mode=execute nm --numeric-sort sql/mysqld > sql/mysqld.sym
|
||||||
|
|
||||||
@@ -413,6 +353,7 @@ then
|
|||||||
cp -fp config.log "$MYSQL_CONFLOG_DEST"
|
cp -fp config.log "$MYSQL_CONFLOG_DEST"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "# standard"
|
||||||
make test-bt
|
make test-bt
|
||||||
|
|
||||||
%install
|
%install
|
||||||
@@ -428,22 +369,33 @@ install -d $RBR%{_libdir}
|
|||||||
install -d $RBR%{_mandir}
|
install -d $RBR%{_mandir}
|
||||||
install -d $RBR%{_sbindir}
|
install -d $RBR%{_sbindir}
|
||||||
|
|
||||||
|
|
||||||
# Install all binaries stripped
|
# Install all binaries stripped
|
||||||
make install-strip DESTDIR=$RBR benchdir_root=%{_datadir}
|
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)
|
# 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
|
# Include libgcc.a in the devel subpackage (BUG 4921)
|
||||||
install -s -m 755 $MBD/sql/mysqld-max $RBR%{_sbindir}/mysqld-max
|
if expr "$CC" : ".*gcc.*" > /dev/null ;
|
||||||
|
then
|
||||||
# install saved perror binary with NDB support (BUG#13740)
|
libgcc=`$CC $CFLAGS --print-libgcc-file`
|
||||||
install -s -m 755 $MBD/extra/perror.ndb $RBR%{_bindir}/perror
|
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 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.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 logrotate and autostart
|
||||||
install -m 644 $MBD/support-files/mysql-log-rotate $RBR%{_sysconfdir}/logrotate.d/mysql
|
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
|
# Allow safe_mysqld to start mysqld and print a message before we exit
|
||||||
sleep 2
|
sleep 2
|
||||||
|
|
||||||
|
|
||||||
%post ndb-storage
|
%post ndb-storage
|
||||||
mysql_clusterdir=/var/lib/mysql-cluster
|
mysql_clusterdir=/var/lib/mysql-cluster
|
||||||
|
|
||||||
# Create cluster directory if needed
|
# Create cluster directory if needed
|
||||||
if test ! -d $mysql_clusterdir; then mkdir -m 755 $mysql_clusterdir; fi
|
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
|
%preun server
|
||||||
if test $1 = 0
|
if test $1 = 0
|
||||||
then
|
then
|
||||||
@@ -611,7 +556,6 @@ fi
|
|||||||
%attr(755, root, root) %{_bindir}/myisamlog
|
%attr(755, root, root) %{_bindir}/myisamlog
|
||||||
%attr(755, root, root) %{_bindir}/myisampack
|
%attr(755, root, root) %{_bindir}/myisampack
|
||||||
%attr(755, root, root) %{_bindir}/mysql_convert_table_format
|
%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_explain_log
|
||||||
%attr(755, root, root) %{_bindir}/mysql_fix_extensions
|
%attr(755, root, root) %{_bindir}/mysql_fix_extensions
|
||||||
%attr(755, root, root) %{_bindir}/mysql_fix_privilege_tables
|
%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) %{_bindir}/safe_mysqld
|
||||||
|
|
||||||
%attr(755, root, root) %{_sbindir}/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}/mysqlmanager
|
||||||
%attr(755, root, root) %{_sbindir}/rcmysql
|
%attr(755, root, root) %{_sbindir}/rcmysql
|
||||||
%attr(644, root, root) %{_libdir}/mysql/mysqld.sym
|
%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-stress-test.pl.1*
|
||||||
%doc %attr(644, root, man) %{_mandir}/man1/mysql-test-run.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
|
#%files embedded
|
||||||
#%defattr(-, root, root, 0755)
|
#%defattr(-, root, root, 0755)
|
||||||
# %attr(644, root, root) %{_libdir}/mysql/libmysqld.a
|
# %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
|
# The spec file changelog only includes changes made to the spec file
|
||||||
# itself - note that they must be ordered by date (important when
|
# itself - note that they must be ordered by date (important when
|
||||||
# merging BK trees)
|
# 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>
|
* Fri Mar 02 2007 Joerg Bruehe <joerg@mysql.com>
|
||||||
|
|
||||||
- Add several man pages for NDB which are now created.
|
- 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)
|
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 \
|
noinst_HEADERS = crc32.h deflate.h inffast.h inffixed.h inflate.h \
|
||||||
inftrees.h trees.h zconf.h zlib.h zutil.h
|
inftrees.h trees.h zconf.h zlib.h zutil.h
|
||||||
|
|
||||||
libz_la_SOURCES= adler32.c compress.c crc32.c deflate.c gzio.c \
|
libz_la_SOURCES = adler32.c compress.c crc32.c deflate.c gzio.c \
|
||||||
infback.c inffast.c inflate.c inftrees.c trees.c \
|
infback.c inffast.c inflate.c inftrees.c trees.c \
|
||||||
uncompr.c zutil.c
|
uncompr.c zutil.c
|
||||||
|
libzlt_la_SOURCES = $(libz_la_SOURCES)
|
||||||
|
|
||||||
EXTRA_DIST= README FAQ INDEX ChangeLog algorithm.txt zlib.3 CMakeLists.txt
|
EXTRA_DIST= README FAQ INDEX ChangeLog algorithm.txt zlib.3 CMakeLists.txt
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user