mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge mskold@bk-internal.mysql.com:/home/bk/mysql-5.0-ndb
into mysql.com:/usr/local/home/marty/MySQL/test/mysql-5.0-ndb sql/filesort.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_cmpfunc.h: Auto merged sql/item_func.h: Auto merged sql/mysqld.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_select.cc: Auto merged
This commit is contained in:
commit
5c52b71d48
227 changed files with 4886 additions and 2762 deletions
|
@ -754,6 +754,7 @@ ndb/examples/ndbapi_example3/ndbapi_example3
|
|||
ndb/examples/ndbapi_example5/ndbapi_example5
|
||||
ndb/examples/select_all/select_all
|
||||
ndb/include/ndb_global.h
|
||||
ndb/include/ndb_types.h
|
||||
ndb/include/ndb_version.h
|
||||
ndb/lib/libMGM_API.so
|
||||
ndb/lib/libNDB_API.so
|
||||
|
|
|
@ -43,7 +43,13 @@ global_warnings="-Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wch
|
|||
c_warnings="$global_warnings -Wunused"
|
||||
cxx_warnings="$global_warnings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor"
|
||||
|
||||
base_max_configs="--with-innodb --with-bdb --with-ndbcluster --with-archive-storage-engine --with-raid --with-openssl --with-raid --with-vio"
|
||||
max_leave_isam_configs="--with-innodb --with-bdb --with-ndbcluster --with-archive-storage-engine --with-federated-storage-engine --with-raid --with-openssl --with-raid --with-vio --with-embedded-server"
|
||||
max_no_es_configs="$max_leave_isam_configs --without-isam"
|
||||
max_configs="$max_no_es_configs --with-embedded-server"
|
||||
|
||||
alpha_cflags="-mcpu=ev6 -Wa,-mev6" # Not used yet
|
||||
amd64_cflags="-DBIG_TABLES"
|
||||
pentium_cflags="-mcpu=pentiumpro"
|
||||
pentium64_cflags="-mcpu=nocona -m64"
|
||||
ppc_cflags="-mpowerpc -mcpu=powerpc"
|
||||
|
@ -58,9 +64,11 @@ reckless_cflags="-O3 -fomit-frame-pointer "
|
|||
debug_cflags="-DUNIV_MUST_NOT_INLINE -DEXTRA_DEBUG -DFORCE_INIT_OF_VARS -DSAFEMALLOC -DPEDANTIC_SAFEMALLOC -DSAFE_MUTEX"
|
||||
|
||||
base_cxxflags="-felide-constructors -fno-exceptions -fno-rtti"
|
||||
amd64_cxxflags="-DBIG_TABLES"
|
||||
|
||||
base_configs="--prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-readline"
|
||||
static_link="--with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static"
|
||||
amd64_configs=""
|
||||
alpha_configs="" # Not used yet
|
||||
pentium_configs=""
|
||||
sparc_configs=""
|
||||
|
|
|
@ -1,15 +1,9 @@
|
|||
#! /bin/sh
|
||||
path=`dirname $0`
|
||||
. "$path/SETUP.sh"
|
||||
amd64_cflags="-DBIG_TABLES"
|
||||
amd64_cxx_flags="-DBIG_TABLES"
|
||||
amd64_configs=""
|
||||
base_cxxflags="$amd64_cxx_flags $base_cxxflags"
|
||||
extra_flags="$amd64_cflags $debug_cflags"
|
||||
extra_flags="$amd64_cflags $debug_cflags $max_cflags"
|
||||
c_warnings="$c_warnings $debug_extra_warnings"
|
||||
cxx_warnings="$cxx_warnings $debug_extra_warnings"
|
||||
extra_configs="$amd64_configs $debug_configs"
|
||||
|
||||
extra_configs="$extra_configs --with-berkeley-db --with-innodb --without-isam --with-embedded-server --with-openssl --with-raid --with-vio --with-ndbcluster"
|
||||
extra_configs="$amd64_configs $debug_configs $max_configs"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
|
|
@ -2,16 +2,7 @@
|
|||
|
||||
path=`dirname $0`
|
||||
. "$path/SETUP.sh"
|
||||
amd64_cflags="-DBIG_TABLES"
|
||||
amd64_cxx_flags="-DBIG_TABLES"
|
||||
amd64_configs=""
|
||||
base_cxxflags="$amd64_cxx_flags $base_cxxflags"
|
||||
extra_flags="$amd64_cflags $fast_cflags -g"
|
||||
extra_configs="$amd64_configs"
|
||||
#strip=yes
|
||||
|
||||
extra_configs="$extra_configs --with-innodb --with-berkeley-db \
|
||||
--with-embedded-server --enable-thread-safe-client \
|
||||
--with-openssl --with-vio --with-raid --with-ndbcluster"
|
||||
extra_flags="$amd64_cflags $fast_cflags $max_cflags -g"
|
||||
extra_configs="$amd64_configs $max_configs"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
|
|
@ -3,11 +3,9 @@
|
|||
path=`dirname $0`
|
||||
. "$path/SETUP.sh"
|
||||
|
||||
extra_flags="$pentium_cflags $debug_cflags"
|
||||
extra_flags="$pentium_cflags $debug_cflags $max_cflags"
|
||||
c_warnings="$c_warnings $debug_extra_warnings"
|
||||
cxx_warnings="$cxx_warnings $debug_extra_warnings"
|
||||
extra_configs="$pentium_configs $debug_configs"
|
||||
|
||||
extra_configs="$extra_configs --with-berkeley-db --with-innodb --without-isam --with-embedded-server --with-openssl --with-raid --with-vio --with-ndbcluster"
|
||||
extra_configs="$pentium_configs $debug_configs $max_configs"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
|
|
@ -3,11 +3,9 @@
|
|||
path=`dirname $0`
|
||||
. "$path/SETUP.sh"
|
||||
|
||||
extra_flags="$pentium_cflags $debug_cflags"
|
||||
extra_flags="$pentium_cflags $debug_cflags $max_cflags"
|
||||
c_warnings="$c_warnings $debug_extra_warnings"
|
||||
cxx_warnings="$cxx_warnings $debug_extra_warnings"
|
||||
extra_configs="$pentium_configs $debug_configs"
|
||||
|
||||
extra_configs="$extra_configs --with-berkeley-db --with-innodb --without-isam --with-openssl --with-raid"
|
||||
extra_configs="$pentium_configs $debug_configs $max_no_es_configs"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
|
|
@ -3,12 +3,7 @@
|
|||
path=`dirname $0`
|
||||
. "$path/SETUP.sh"
|
||||
|
||||
extra_flags="$pentium_cflags $fast_cflags -g"
|
||||
extra_configs="$pentium_configs"
|
||||
#strip=yes
|
||||
|
||||
extra_configs="$extra_configs --with-innodb --with-berkeley-db \
|
||||
--with-embedded-server --enable-thread-safe-client \
|
||||
--with-openssl --with-vio --with-raid --with-ndbcluster"
|
||||
extra_flags="$pentium_cflags $fast_cflags $max_cflags -g"
|
||||
extra_configs="$pentium_configs $max_configs"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
path=`dirname $0`
|
||||
. "$path/SETUP.sh"
|
||||
|
||||
extra_flags="$pentium_cflags $debug_cflags -USAFEMALLOC -UFORCE_INIT_OF_VARS -DHAVE_purify -DMYSQL_SERVER_SUFFIX=-valgrind-max"
|
||||
extra_flags="$pentium_cflags $debug_cflags $max_cflags -USAFEMALLOC -UFORCE_INIT_OF_VARS -DHAVE_purify -DMYSQL_SERVER_SUFFIX=-valgrind-max"
|
||||
c_warnings="$c_warnings $debug_extra_warnings"
|
||||
cxx_warnings="$cxx_warnings $debug_extra_warnings"
|
||||
extra_configs="$pentium_configs $debug_configs"
|
||||
|
||||
# We want to test isam when building with valgrind
|
||||
extra_configs="$extra_configs --with-berkeley-db --with-innodb --with-isam --with-embedded-server --with-openssl --with-vio --with-raid --with-ndbcluster"
|
||||
extra_configs="$extra_configs $max_leave_isam_configs --with-isam"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
||||
|
|
|
@ -3,11 +3,9 @@
|
|||
path=`dirname $0`
|
||||
. "$path/SETUP.sh"
|
||||
|
||||
extra_flags="$ppc_cflags $debug_cflags"
|
||||
extra_flags="$ppc_cflags $debug_cflags $max_cflags"
|
||||
c_warnings="$c_warnings $debug_extra_warnings"
|
||||
cxx_warnings="$cxx_warnings $debug_extra_warnings"
|
||||
extra_configs="$debug_configs"
|
||||
|
||||
extra_configs="$extra_configs --with-berkeley-db --with-innodb --without-isam --with-embedded-server --with-openssl --with-raid --with-vio --with-ndbcluster"
|
||||
extra_configs="$debug_configs $max_configs"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
|
|
@ -3,11 +3,7 @@
|
|||
path=`dirname $0`
|
||||
. "$path/SETUP.sh"
|
||||
|
||||
extra_flags="$ppc_cflags $fast_cflags -g"
|
||||
#strip=yes
|
||||
|
||||
extra_configs="$extra_configs --with-innodb --with-berkeley-db \
|
||||
--with-embedded-server --enable-thread-safe-client \
|
||||
--with-openssl --with-vio --with-raid --with-ndbcluster"
|
||||
extra_flags="$ppc_cflags $fast_cflags $max_cflags -g"
|
||||
extra_configs="$extra_configs $max_configs"
|
||||
|
||||
. "$path/FINISH.sh"
|
||||
|
|
|
@ -3,28 +3,27 @@
|
|||
while test $# -gt 0
|
||||
do
|
||||
case "$1" in
|
||||
--debug) EXTRA_CONFIG_FLAGS=--with-debug; shift ;;
|
||||
-h | --help ) cat <<EOF; exit 0 ;;
|
||||
Usage: $0 [-h|-n] [configure-options]
|
||||
--debug Compile with DBUG enabled
|
||||
EOF
|
||||
*) echo "No such option '$1'" ; exit ;;
|
||||
--debug) EXTRA_CONFIG_FLAGS=--with-debug; shift ;;
|
||||
-h | --help )
|
||||
echo "Usage: $0 [-h|-n] [configure-options]"
|
||||
echo " --debug Compile with DBUG enabled"
|
||||
exit 0 ;;
|
||||
*) echo "No such option '$1'" ; exit ;;
|
||||
esac
|
||||
done
|
||||
|
||||
gmake -k clean || true
|
||||
/bin/rm -f */.deps/*.P config.cache
|
||||
aclocal && autoheader && aclocal && automake && autoconf
|
||||
(cd bdb/dist && sh s_all)
|
||||
# (cd bdb/dist && sh s_all)
|
||||
(cd innobase && aclocal && autoheader && aclocal && automake && autoconf)
|
||||
|
||||
CFLAGS="-g -Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -DHAVE_purify -DEXTRA_DEBUG -O2" CXX=gcc CXXLD=g++ CXXFLAGS="-g -Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -DHAVE_purify -DEXTRA_DEBUG -O2" ./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-berkeley-db --with-innodb $EXTRA_CONFIG_FLAGS
|
||||
CFLAGS="-g -Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -DHAVE_purify -DEXTRA_DEBUG -O2" CXX=gcc CXXLD=g++ CXXFLAGS="-g -Wimplicit -Wreturn-type -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -DHAVE_purify -DEXTRA_DEBUG -O2" ./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --without-berkeley-db --with-embedded-server --with-innodb $EXTRA_CONFIG_FLAGS
|
||||
|
||||
gmake -j 4
|
||||
|
||||
cd sql ; mv mysqld mysqld-org ;
|
||||
make CXXLD="purify -best-effort g++" mysqld ; mv mysqld mysqld-purify
|
||||
make CXXLD="quantify -best-effort g++" mysqld ; mv mysqld mysqld-quantify
|
||||
make CXXLD="purecov -best-effort g++" mysqld ; mv mysqld mysqld-purecov
|
||||
gmake CXXLD="purify -best-effort g++" mysqld ; mv mysqld mysqld-purify
|
||||
gmake CXXLD="quantify -best-effort g++" mysqld ; mv mysqld mysqld-quantify
|
||||
gmake CXXLD="purecov -best-effort g++" mysqld ; mv mysqld mysqld-purecov
|
||||
mv mysqld-org mysqld
|
||||
|
||||
|
|
|
@ -197,6 +197,7 @@ ram@mysql.r18.ru
|
|||
ram@ram.(none)
|
||||
ranger@regul.home.lan
|
||||
rburnett@build.mysql.com
|
||||
reggie@bob.(none)
|
||||
root@home.(none)
|
||||
root@mc04.(none)
|
||||
root@x3.internalnet
|
||||
|
|
|
@ -265,7 +265,8 @@ if ($opt_stage <= 1)
|
|||
$opt_config_options.= " --with-berkeley-db" if ($opt_bdb);
|
||||
$opt_config_options.= " --with-zlib-dir=bundled" if ($opt_bundled_zlib);
|
||||
$opt_config_options.= " --with-client-ldflags=-all-static" if ($opt_static_client);
|
||||
$opt_config_options.= " --with-debug" if ($opt_with_debug);
|
||||
$opt_config_options.= " --with-debug" if ($opt_with_debug);
|
||||
$opt_config_options.= " --without-ndb-debug" if ($opt_with_debug && $opt_with_cluster);
|
||||
$opt_config_options.= " --with-libwrap" if ($opt_libwrap);
|
||||
$opt_config_options.= " --with-low-memory" if ($opt_with_low_memory);
|
||||
$opt_config_options.= " --with-mysqld-ldflags=-all-static" if ($opt_static_server);
|
||||
|
|
|
@ -87,7 +87,7 @@ $BUILDDIR= "$PWD/$HOST";
|
|||
$PREFPANE= "$PWD/mysql-administrator/source/mac/PreferencePane/build/MySQL.prefPane";
|
||||
$SRCBASEDIR= <$BUILDDIR/mysql*-$VERSION>;
|
||||
$SUPFILEDIR= <$SRCBASEDIR/support-files/MacOSX>;
|
||||
$TAR= <$BUILDDIR/$NAME-apple-darwin*-powerpc.tar.gz>;
|
||||
$TAR= <$BUILDDIR/$NAME-apple-darwin*-powerpc*.tar.gz>;
|
||||
$TAR =~ /.*\/$NAME(.*)\.tar\.gz$/;
|
||||
$ARCH= $1;
|
||||
$NAME= $NAME . $ARCH;
|
||||
|
|
|
@ -22,7 +22,6 @@ use Getopt::Long;
|
|||
Getopt::Long::Configure ("bundling");
|
||||
use Sys::Hostname;
|
||||
|
||||
$opt_nobuild = undef;
|
||||
$opt_cc= undef;
|
||||
$opt_cflags= undef;
|
||||
$opt_clean= undef;
|
||||
|
@ -33,6 +32,9 @@ $opt_help= undef;
|
|||
$opt_log= undef;
|
||||
$opt_mail= "";
|
||||
$opt_verbose= undef;
|
||||
$opt_susebuild= undef;
|
||||
$opt_susebuildroot= undef;
|
||||
$opt_suserpms= undef;
|
||||
|
||||
# Set a dummy version until we know the correct one
|
||||
$VERSION= "x.y.z";
|
||||
|
@ -49,7 +51,9 @@ GetOptions(
|
|||
"help|h",
|
||||
"log|l:s",
|
||||
"mail|m=s",
|
||||
"nobuild",
|
||||
"susebuild|s",
|
||||
"susebuildroot|r=s",
|
||||
"suserpms=s",
|
||||
"verbose|v",
|
||||
) || &print_help;
|
||||
|
||||
|
@ -57,6 +61,20 @@ GetOptions(
|
|||
|
||||
defined($SPECFILE=$ARGV[0]) || print_help("Please provide the spec file name!");
|
||||
|
||||
&print_help("Please define the location of the RPM repository!") if $opt_susebuild && !($opt_suserpms || $ENV{BUILD_RPMS});
|
||||
|
||||
unless ($opt_susebuildroot)
|
||||
{
|
||||
if ($ENV{BUILD_ROOT})
|
||||
{
|
||||
$opt_susebuildroot= $ENV{BUILD_ROOT};
|
||||
}
|
||||
else
|
||||
{
|
||||
$opt_susebuildroot="/var/tmp/build-root";
|
||||
}
|
||||
}
|
||||
|
||||
# Include helper functions
|
||||
$PWD= cwd();
|
||||
$LOGGER= "$PWD/logger.pm";
|
||||
|
@ -72,7 +90,7 @@ else
|
|||
$subject= "RPM build for $SPECFILE failed" if $opt_mail;
|
||||
|
||||
# Open the spec file and extract the version number
|
||||
open(SPEC, $SPECFILE) or &abort("Unable to open \"$ARGV[0]\": $!");
|
||||
open(SPEC, $SPECFILE) or die "Unable to open \"$ARGV[0]\": $!";
|
||||
@spec= <SPEC>;
|
||||
close SPEC;
|
||||
|
||||
|
@ -94,7 +112,7 @@ $HOST= hostname();
|
|||
$HOST=~ /^([^.-]*)/;
|
||||
$HOST= $1;
|
||||
$LOGFILE= "$PWD/Logs/Do-rpm-$HOST-$MAJOR.$MINOR.log";
|
||||
&logger("Using spec file for version: $VERSION");
|
||||
&logger("Logging to $LOGFILE");
|
||||
|
||||
#
|
||||
# Override predefined Log file name
|
||||
|
@ -114,111 +132,157 @@ if (defined $opt_log)
|
|||
}
|
||||
}
|
||||
|
||||
#
|
||||
# Newer RPM versions ship with a separate tool "rpmbuild" to build RPMs
|
||||
#
|
||||
if (-x "/usr/bin/rpmbuild")
|
||||
&logger("Using spec file for version: $VERSION");
|
||||
|
||||
if ($opt_susebuild)
|
||||
{
|
||||
$RPM= "/usr/bin/rpmbuild";
|
||||
$RMSOURCE= "--rmsource --rmspec";
|
||||
&susebuild;
|
||||
}
|
||||
else
|
||||
{
|
||||
$RPM= "/bin/rpm";
|
||||
$RMSOURCE= "--rmspec";
|
||||
{
|
||||
&rpmbuild;
|
||||
}
|
||||
|
||||
if ($RPM)
|
||||
{
|
||||
&logger("Found rpm binary: $RPM");
|
||||
}
|
||||
else
|
||||
{
|
||||
&abort("Unable to find RPM binary!");
|
||||
}
|
||||
|
||||
#
|
||||
# determine some RPM settings for this host
|
||||
#
|
||||
chomp($RPMARCH= `$RPM --eval "%{_arch}" 2> /dev/null`);
|
||||
chomp($RPMDIR= `$RPM --eval "%{_rpmdir}" 2> /dev/null`);
|
||||
chomp($SOURCEDIR= `$RPM --eval "%{_sourcedir}" 2> /dev/null`);
|
||||
chomp($SPECDIR= `$RPM --eval "%{_specdir}" 2> /dev/null`);
|
||||
chomp($SRCRPMDIR= `$RPM --eval "%{_srcrpmdir}" 2> /dev/null`);
|
||||
|
||||
$SOURCEFILE= glob "mysql*-$VERSION.tar.gz";
|
||||
|
||||
unless($opt_nobuild) {
|
||||
|
||||
&logger("Starting RPM build of MySQL-$VERSION on $HOST");
|
||||
|
||||
foreach $file ($SOURCEFILE, $SPECFILE)
|
||||
{
|
||||
&abort("Unable to find $file!") unless (-f "$file");
|
||||
}
|
||||
|
||||
#
|
||||
# Install source and spec file
|
||||
#
|
||||
&logger("Copying SOURCE and SPEC file to build directories.");
|
||||
unless ($opt_dry_run)
|
||||
{
|
||||
copy($SOURCEFILE, $SOURCEDIR)
|
||||
or &abort("Unable to copy $SOURCEFILE to $SOURCEDIR!");
|
||||
copy($SPECFILE, $SPECDIR)
|
||||
or &abort("Unable to copy $SPECFILE to $SPECDIR!");
|
||||
}
|
||||
|
||||
#
|
||||
# Set environment variables - these are being used in the
|
||||
# official MySQL RPM spec file
|
||||
#
|
||||
&logger("Setting special build environment variables")
|
||||
if ($opt_cc) or ($opt_cflags) or ($opt_cxxflags) or ($opt_cxx);
|
||||
$ENV{MYSQL_BUILD_CC}=$opt_cc if ($opt_cc);
|
||||
$ENV{MYSQL_BUILD_CFLAGS}=$opt_cflags if ($opt_cflags);
|
||||
$ENV{MYSQL_BUILD_CXXFLAGS}=$opt_cxxflags if ($opt_cxxflags);
|
||||
$ENV{MYSQL_BUILD_CXX}=$opt_cxx if ($opt_cxx);
|
||||
|
||||
#
|
||||
# Build the RPMs
|
||||
#
|
||||
$command= "$RPM";
|
||||
$command.= " -v" if ($opt_verbose);
|
||||
$command.= " -ba";
|
||||
$command.= " --clean $RMSOURCE" if $opt_clean;
|
||||
$command.= " $SPECDIR/";
|
||||
$command.= basename($SPECFILE);
|
||||
&logger("Building RPM.");
|
||||
&run_command($command, "Error while building the RPMs!");
|
||||
}
|
||||
|
||||
#
|
||||
# Move the resulting RPMs into the pwd
|
||||
#
|
||||
$command= "mv";
|
||||
$command.= " -v " if ($opt_verbose);
|
||||
$command.= " $SRCRPMDIR/MySQL*$VERSION_SRPM*.src.rpm $PWD";
|
||||
&logger("Moving source RPM to current dir.");
|
||||
&run_command($command, "Error moving source RPM!");
|
||||
|
||||
$command= "mv";
|
||||
$command.= " -v " if ($opt_verbose);
|
||||
# $command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION*.$RPMARCH.rpm $PWD";
|
||||
$command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION_SRPM*.$RPMARCH.rpm $PWD";
|
||||
&logger("Moving binary RPMs to current dir.");
|
||||
&run_command($command, "Error moving binary RPMs!");
|
||||
|
||||
&logger("SUCCESS: RPM files successfully created.") unless ($opt_dry_run);
|
||||
exit 0;
|
||||
|
||||
#
|
||||
# Build using SUSE's "build" script
|
||||
#
|
||||
sub susebuild
|
||||
{
|
||||
$BUILD= "/usr/bin/build";
|
||||
( -x $BUILD) ? &logger("$BUILD found, proceeding.") : &abort("$BUILD could not be found!");
|
||||
$command= "sudo $BUILD --clean";
|
||||
$command.= " --root=$opt_susebuildroot";
|
||||
$command.= " --rpms=$opt_suserpms" if $opt_suserpms;
|
||||
$command.= " $SPECFILE";
|
||||
&logger("Building RPMs using SUSE build.");
|
||||
&run_command($command, "Error while running the SUSE RPM build!");
|
||||
|
||||
#
|
||||
# Move the resulting RPMs into the pwd - we can use broad globs here
|
||||
# as the build root has been cleaned up before so there should not be
|
||||
# any residuals from previous build runs
|
||||
#
|
||||
$command= "cp";
|
||||
$command.= " -v " if ($opt_verbose);
|
||||
$command.= " $opt_susebuildroot/usr/src/packages/SRPMS/MySQL*.src.rpm $PWD";
|
||||
&logger("Copying source RPM to current dir.");
|
||||
&run_command($command, "Error moving source RPM!");
|
||||
|
||||
$command= "cp";
|
||||
$command.= " -v " if ($opt_verbose);
|
||||
$command.= " $opt_susebuildroot/usr/src/packages/RPMS/*/MySQL*.rpm $PWD";
|
||||
&logger("Copying binary RPMs to current dir.");
|
||||
&run_command($command, "Error moving binary RPMs!");
|
||||
}
|
||||
|
||||
#
|
||||
# Build using "plain" RPM
|
||||
#
|
||||
sub rpmbuild
|
||||
{
|
||||
|
||||
#
|
||||
# Newer RPM versions ship with a separate tool "rpmbuild" to build RPMs
|
||||
#
|
||||
if (-x "/usr/bin/rpmbuild")
|
||||
{
|
||||
$RPM= "/usr/bin/rpmbuild";
|
||||
$RMSOURCE= "--rmsource --rmspec";
|
||||
}
|
||||
else
|
||||
{
|
||||
$RPM= "/bin/rpm";
|
||||
$RMSOURCE= "--rmspec";
|
||||
}
|
||||
|
||||
if ($RPM)
|
||||
{
|
||||
&logger("Found rpm binary: $RPM");
|
||||
}
|
||||
else
|
||||
{
|
||||
&abort("Unable to find RPM binary!");
|
||||
}
|
||||
|
||||
#
|
||||
# determine some RPM settings for this host
|
||||
#
|
||||
chomp($RPMARCH= `$RPM --eval "%{_arch}" 2> /dev/null`);
|
||||
chomp($RPMDIR= `$RPM --eval "%{_rpmdir}" 2> /dev/null`);
|
||||
chomp($SOURCEDIR= `$RPM --eval "%{_sourcedir}" 2> /dev/null`);
|
||||
chomp($SPECDIR= `$RPM --eval "%{_specdir}" 2> /dev/null`);
|
||||
chomp($SRCRPMDIR= `$RPM --eval "%{_srcrpmdir}" 2> /dev/null`);
|
||||
|
||||
$SOURCEFILE= glob "mysql*-$VERSION.tar.gz";
|
||||
|
||||
&logger("Starting RPM build of MySQL-$VERSION on $HOST");
|
||||
|
||||
foreach $file ($SOURCEFILE, $SPECFILE)
|
||||
{
|
||||
&abort("Unable to find $file!") unless (-f "$file");
|
||||
}
|
||||
|
||||
#
|
||||
# Install source and spec file
|
||||
#
|
||||
&logger("Copying SOURCE and SPEC file to build directories.");
|
||||
unless ($opt_dry_run)
|
||||
{
|
||||
copy($SOURCEFILE, $SOURCEDIR)
|
||||
or &abort("Unable to copy $SOURCEFILE to $SOURCEDIR!");
|
||||
copy($SPECFILE, $SPECDIR)
|
||||
or &abort("Unable to copy $SPECFILE to $SPECDIR!");
|
||||
}
|
||||
|
||||
#
|
||||
# Set environment variables - these are being used in the
|
||||
# official MySQL RPM spec file
|
||||
#
|
||||
&logger("Setting special build environment variables")
|
||||
if ($opt_cc) or ($opt_cflags) or ($opt_cxxflags) or ($opt_cxx);
|
||||
$ENV{MYSQL_BUILD_CC}=$opt_cc if ($opt_cc);
|
||||
$ENV{MYSQL_BUILD_CFLAGS}=$opt_cflags if ($opt_cflags);
|
||||
$ENV{MYSQL_BUILD_CXXFLAGS}=$opt_cxxflags if ($opt_cxxflags);
|
||||
$ENV{MYSQL_BUILD_CXX}=$opt_cxx if ($opt_cxx);
|
||||
|
||||
#
|
||||
# Build the RPMs
|
||||
#
|
||||
$command= "$RPM";
|
||||
$command.= " -v" if ($opt_verbose);
|
||||
$command.= " -ba";
|
||||
$command.= " --clean $RMSOURCE" if $opt_clean;
|
||||
$command.= " $SPECDIR/";
|
||||
$command.= basename($SPECFILE);
|
||||
&logger("Building RPM.");
|
||||
&run_command($command, "Error while building the RPMs!");
|
||||
|
||||
#
|
||||
# Move the resulting RPMs into the pwd
|
||||
#
|
||||
$command= "mv";
|
||||
$command.= " -v " if ($opt_verbose);
|
||||
$command.= " $SRCRPMDIR/MySQL*$VERSION_SRPM*.src.rpm $PWD";
|
||||
&logger("Moving source RPM to current dir.");
|
||||
&run_command($command, "Error moving source RPM!");
|
||||
|
||||
$command= "mv";
|
||||
$command.= " -v " if ($opt_verbose);
|
||||
$command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION_SRPM*.$RPMARCH.rpm $PWD";
|
||||
&logger("Moving binary RPMs to current dir.");
|
||||
&run_command($command, "Error moving binary RPMs!");
|
||||
}
|
||||
|
||||
sub print_help
|
||||
{
|
||||
my $message= $_[0];
|
||||
if ($message ne "")
|
||||
{
|
||||
print "\n";
|
||||
print "ERROR: $message\n\n}";
|
||||
print "ERROR: $message\n\n";
|
||||
}
|
||||
print <<EOF;
|
||||
|
||||
|
@ -241,12 +305,22 @@ Options:
|
|||
-t, --dry-run Dry run without executing
|
||||
-h, --help Print this help
|
||||
-l, --log[=<filename>] Write a log file [to <filename>]
|
||||
(default is "$LOGFILE")
|
||||
-m, --mail=<address> Mail a failure report to the given address
|
||||
(and include a log file snippet, if logging
|
||||
is enabled)
|
||||
Note that the \@-Sign needs to be quoted!
|
||||
Example: --mail=user\\\@domain.com
|
||||
-s, --susebuild Use the SUSE "build" script instead of RPM
|
||||
directly (requires sudo privileges to run the
|
||||
/usr/bin/build command)
|
||||
-r, --susebuildroot=<root> Use <root> as the build root directory for the
|
||||
SUSE "build" (default is /var/tmp/build-root
|
||||
or defined by the BUILD_ROOT environment
|
||||
variable)
|
||||
--suserpms=<path> Path to the SUSE RPM repository to build up
|
||||
the build root (mandatory option when using
|
||||
--susebuild and the BUILD_RPMS environment
|
||||
variable is not set.)
|
||||
-v, --verbose Verbose execution
|
||||
|
||||
Example:
|
||||
|
|
|
@ -20,9 +20,8 @@
|
|||
INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/regex \
|
||||
$(openssl_includes) -I$(top_srcdir)/extra
|
||||
LIBS = @CLIENT_LIBS@
|
||||
DEPLIB= ../libmysql/libmysqlclient.la
|
||||
REGEXLIB= ../regex/libregex.a
|
||||
LDADD = @CLIENT_EXTRA_LDFLAGS@ $(DEPLIB)
|
||||
LDADD= @CLIENT_EXTRA_LDFLAGS@ \
|
||||
$(top_builddir)/libmysql/libmysqlclient.la
|
||||
bin_PROGRAMS = mysql mysqladmin mysqlcheck mysqlshow \
|
||||
mysqldump mysqlimport mysqltest mysqlbinlog mysqlmanagerc mysqlmanager-pwgen
|
||||
noinst_HEADERS = sql_string.h completion_hash.h my_readline.h \
|
||||
|
@ -31,19 +30,10 @@ mysql_SOURCES = mysql.cc readline.cc sql_string.cc completion_hash.cc
|
|||
mysqladmin_SOURCES = mysqladmin.cc
|
||||
mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD) $(CXXLDFLAGS)
|
||||
mysqlbinlog_LDADD = $(LDADD) $(CXXLDFLAGS)
|
||||
mysql_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) $(DEPLIB)
|
||||
mysqladmin_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) $(DEPLIB)
|
||||
mysqlcheck_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) $(DEPLIB)
|
||||
mysqlshow_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) $(DEPLIB)
|
||||
mysqldump_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) $(DEPLIB)
|
||||
mysqlimport_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) $(DEPLIB)
|
||||
mysqltest_SOURCES= mysqltest.c ../mysys/my_getsystime.c
|
||||
mysqltest_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) $(REGEXLIB) $(DEPLIB)
|
||||
mysqltest_LDADD = $(REGEXLIB) $(LDADD)
|
||||
mysqlbinlog_SOURCES = mysqlbinlog.cc ../mysys/mf_tempdir.c
|
||||
mysqlbinlog_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) $(DEPLIB)
|
||||
mysqltest_SOURCES= mysqltest.c $(top_srcdir)/mysys/my_getsystime.c
|
||||
mysqltest_LDADD = $(top_builddir)/regex/libregex.a $(LDADD)
|
||||
mysqlbinlog_SOURCES = mysqlbinlog.cc $(top_srcdir)/mysys/mf_tempdir.c
|
||||
mysqlmanagerc_SOURCES = mysqlmanagerc.c
|
||||
mysqlmanagerc_DEPENDENCIES= $(LIBRARIES) $(pkglib_LTLIBRARIES) $(DEPLIB)
|
||||
sql_src=log_event.h mysql_priv.h log_event.cc
|
||||
|
||||
# Fix for mit-threads
|
||||
|
|
|
@ -172,7 +172,7 @@ static char *shared_memory_base_name=0;
|
|||
#endif
|
||||
static uint opt_protocol=0;
|
||||
static CHARSET_INFO *charset_info= &my_charset_latin1;
|
||||
|
||||
|
||||
#include "sslopt-vars.h"
|
||||
|
||||
const char *default_dbug_option="d:t:o,/tmp/mysql.trace";
|
||||
|
@ -1520,7 +1520,7 @@ You can turn off this feature to get a quicker startup with -A\n\n");
|
|||
j=0;
|
||||
while ((sql_field=mysql_fetch_field(fields)))
|
||||
{
|
||||
sprintf(buf,"%s.%s",table_row[0],sql_field->name);
|
||||
sprintf(buf,"%.64s.%.64s",table_row[0],sql_field->name);
|
||||
field_names[i][j] = strdup_root(&hash_mem_root,buf);
|
||||
add_word(&ht,field_names[i][j]);
|
||||
field_names[i][num_fields+j] = strdup_root(&hash_mem_root,
|
||||
|
@ -1597,7 +1597,7 @@ int mysql_real_query_for_lazy(const char *buf, int length)
|
|||
for (uint retry=0;; retry++)
|
||||
{
|
||||
if (!mysql_real_query(&mysql,buf,length))
|
||||
return 0;
|
||||
return 0;
|
||||
int error= put_error(&mysql);
|
||||
if (mysql_errno(&mysql) != CR_SERVER_GONE_ERROR || retry > 1 ||
|
||||
!opt_reconnect)
|
||||
|
@ -2526,7 +2526,7 @@ com_connect(String *buffer, char *line)
|
|||
{
|
||||
sprintf(buff,"Connection id: %lu",mysql_thread_id(&mysql));
|
||||
put_info(buff,INFO_INFO);
|
||||
sprintf(buff,"Current database: %s\n",
|
||||
sprintf(buff,"Current database: %.128s\n",
|
||||
current_db ? current_db : "*** NONE ***");
|
||||
put_info(buff,INFO_INFO);
|
||||
}
|
||||
|
@ -3234,13 +3234,20 @@ static const char* construct_prompt()
|
|||
break;
|
||||
}
|
||||
case 'p':
|
||||
{
|
||||
#ifndef EMBEDDED_LIBRARY
|
||||
if (!connected)
|
||||
{
|
||||
processed_prompt.append("not_connected");
|
||||
break;
|
||||
}
|
||||
if (strstr(mysql_get_host_info(&mysql),"TCP/IP") ||
|
||||
|
||||
const char *host_info = mysql_get_host_info(&mysql);
|
||||
if (strstr(host_info, "memory"))
|
||||
{
|
||||
processed_prompt.append( mysql.host );
|
||||
}
|
||||
else if (strstr(host_info,"TCP/IP") ||
|
||||
!mysql.unix_socket)
|
||||
add_int_to_prompt(mysql.port);
|
||||
else
|
||||
|
@ -3249,6 +3256,7 @@ static const char* construct_prompt()
|
|||
processed_prompt.append(pos ? pos+1 : mysql.unix_socket);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
case 'U':
|
||||
if (!full_username)
|
||||
|
|
|
@ -833,7 +833,8 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
|||
if (argv[1][0])
|
||||
{
|
||||
char *pw= argv[1];
|
||||
bool old= find_type(argv[0], &command_typelib, 2) == ADMIN_OLD_PASSWORD;
|
||||
bool old= (find_type(argv[0], &command_typelib, 2) ==
|
||||
ADMIN_OLD_PASSWORD);
|
||||
#ifdef __WIN__
|
||||
uint pw_len= strlen(pw);
|
||||
if (pw_len > 1 && pw[0] == '\'' && pw[pw_len-1] == '\'')
|
||||
|
@ -844,21 +845,29 @@ static int execute_commands(MYSQL *mysql,int argc, char **argv)
|
|||
If we don't already know to use an old-style password, see what
|
||||
the server is using
|
||||
*/
|
||||
if (!old) {
|
||||
if (mysql_query(mysql, "SHOW VARIABLES LIKE 'old_passwords'")) {
|
||||
if (!old)
|
||||
{
|
||||
if (mysql_query(mysql, "SHOW VARIABLES LIKE 'old_passwords'"))
|
||||
{
|
||||
my_printf_error(0, "Could not determine old_passwords setting from server; error: '%s'",
|
||||
MYF(ME_BELL),mysql_error(mysql));
|
||||
return -1;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
MYSQL_RES *res= mysql_store_result(mysql);
|
||||
if (!res) {
|
||||
my_printf_error(0, "Could not get old_passwords setting from server; error: '%s'",
|
||||
if (!res)
|
||||
{
|
||||
my_printf_error(0,
|
||||
"Could not get old_passwords setting from "
|
||||
"server; error: '%s'",
|
||||
MYF(ME_BELL),mysql_error(mysql));
|
||||
return -1;
|
||||
}
|
||||
if (!mysql_num_rows(res)) {
|
||||
if (!mysql_num_rows(res))
|
||||
old= 1;
|
||||
} else {
|
||||
else
|
||||
{
|
||||
MYSQL_ROW row= mysql_fetch_row(res);
|
||||
old= !strncmp(row[1], "ON", 2);
|
||||
}
|
||||
|
|
|
@ -305,6 +305,9 @@ static struct my_option my_long_options[] =
|
|||
{"opt", OPT_OPTIMIZE,
|
||||
"Same as --add-drop-table, --add-locks, --create-options, --quick, --extended-insert, --lock-tables, --set-charset, and --disable-keys. Enabled by default, disable with --skip-opt.",
|
||||
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"order-by-primary", OPT_ORDER_BY_PRIMARY,
|
||||
"Sorts each table's rows by primary key, or first unique key, if such a key exists. Useful when dumping a MyISAM table to be loaded into an InnoDB table, but will make the dump itself take considerably longer.",
|
||||
(gptr*) &opt_order_by_primary, (gptr*) &opt_order_by_primary, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"password", 'p',
|
||||
"Password to use when connecting to server. If password is not given it's solicited on the tty.",
|
||||
0, 0, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
@ -356,9 +359,6 @@ static struct my_option my_long_options[] =
|
|||
{"socket", 'S', "Socket file to use for connection.",
|
||||
(gptr*) &opt_mysql_unix_port, (gptr*) &opt_mysql_unix_port, 0, GET_STR,
|
||||
REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
{"order-by-primary", OPT_ORDER_BY_PRIMARY,
|
||||
"Sorts each table's rows by primary key, or first unique key, if such a key exists. Useful when dumping a MyISAM table to be loaded into an InnoDB table, but will make the dump itself take considerably longer.",
|
||||
(gptr*) &opt_order_by_primary, (gptr*) &opt_order_by_primary, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
|
||||
#include <sslopt-longopts.h>
|
||||
{"tab",'T',
|
||||
"Creates tab separated textfile for each table to given path. (creates .sql and .txt files). NOTE: This only works if mysqldump is run on the same machine as the mysqld daemon.",
|
||||
|
@ -2308,8 +2308,15 @@ static int start_transaction(MYSQL *mysql_con, my_bool consistent_read_now)
|
|||
We use BEGIN for old servers. --single-transaction --master-data will fail
|
||||
on old servers, but that's ok as it was already silently broken (it didn't
|
||||
do a consistent read, so better tell people frankly, with the error).
|
||||
|
||||
We want the first consistent read to be used for all tables to dump so we
|
||||
need the REPEATABLE READ level (not anything lower, for example READ
|
||||
COMMITTED would give one new consistent read per dumped table).
|
||||
*/
|
||||
return (mysql_query_with_error_report(mysql_con, 0,
|
||||
"SET SESSION TRANSACTION ISOLATION "
|
||||
"LEVEL REPEATABLE READ") ||
|
||||
mysql_query_with_error_report(mysql_con, 0,
|
||||
consistent_read_now ?
|
||||
"START TRANSACTION "
|
||||
"WITH CONSISTENT SNAPSHOT" :
|
||||
|
|
|
@ -123,6 +123,17 @@ typedef struct
|
|||
} code;
|
||||
} match_err;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char *name;
|
||||
long code;
|
||||
} st_error;
|
||||
|
||||
static st_error global_error[] = {
|
||||
#include <mysqld_ername.h>
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
static match_err global_expected_errno[MAX_EXPECTED_ERRORS];
|
||||
static uint global_expected_errors;
|
||||
|
||||
|
@ -1340,6 +1351,7 @@ static uint get_errcodes(match_err *to,struct st_query* q)
|
|||
{
|
||||
char* p= q->first_argument;
|
||||
uint count= 0;
|
||||
|
||||
DBUG_ENTER("get_errcodes");
|
||||
|
||||
if (!*p)
|
||||
|
@ -1350,19 +1362,41 @@ static uint get_errcodes(match_err *to,struct st_query* q)
|
|||
if (*p == 'S')
|
||||
{
|
||||
/* SQLSTATE string */
|
||||
int i;
|
||||
p++;
|
||||
for (i = 0; my_isalnum(charset_info, *p) && i < SQLSTATE_LENGTH; p++, i++)
|
||||
to[count].code.sqlstate[i]= *p;
|
||||
to[count].code.sqlstate[i]= '\0';
|
||||
char *end= ++p + SQLSTATE_LENGTH;
|
||||
char *to_ptr= to[count].code.sqlstate;
|
||||
|
||||
for (; my_isalnum(charset_info, *p) && p != end; p++)
|
||||
*to_ptr++= *p;
|
||||
*to_ptr= 0;
|
||||
|
||||
to[count].type= ERR_SQLSTATE;
|
||||
}
|
||||
else if (*p == 'E')
|
||||
{
|
||||
/* SQL error as string */
|
||||
st_error *e= global_error;
|
||||
char *start= p++;
|
||||
|
||||
for (; *p == '_' || my_isalnum(charset_info, *p); p++)
|
||||
;
|
||||
for (; e->name; e++)
|
||||
{
|
||||
if (!strncmp(start, e->name, (int) (p - start)))
|
||||
{
|
||||
to[count].code.errnum= (uint) e->code;
|
||||
to[count].type= ERR_ERRNO;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!e->name)
|
||||
die("Unknown SQL error '%s'\n", start);
|
||||
}
|
||||
else
|
||||
{
|
||||
long val;
|
||||
p=str2int(p,10,(long) INT_MIN, (long) INT_MAX, &val);
|
||||
if (p == NULL)
|
||||
die("Invalid argument in %s\n", q->query);
|
||||
|
||||
if (!(p= str2int(p,10,(long) INT_MIN, (long) INT_MAX, &val)))
|
||||
die("Invalid argument in %s\n", q->query);
|
||||
to[count].code.errnum= (uint) val;
|
||||
to[count].type= ERR_ERRNO;
|
||||
}
|
||||
|
@ -2855,6 +2889,7 @@ static int normal_handle_error(const char *query, struct st_query *q,
|
|||
mysql_error(mysql));
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
return 0; /* Keep compiler happy */
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -61,7 +61,12 @@ AC_DEFUN([MYSQL_CHECK_NDB_OPTIONS], [
|
|||
--without-ndb-debug Disable special ndb debug features],
|
||||
[ndb_debug="$withval"],
|
||||
[ndb_debug="default"])
|
||||
|
||||
AC_ARG_WITH([ndb-ccflags],
|
||||
[
|
||||
--with-ndb-ccflags Extra CC options for ndb compile],
|
||||
[ndb_cxxflags_fix=$withval],
|
||||
[ndb_cxxflags_fix=])
|
||||
|
||||
AC_MSG_CHECKING([for NDB Cluster options])
|
||||
AC_MSG_RESULT([])
|
||||
|
||||
|
|
10
configure.in
10
configure.in
|
@ -361,7 +361,6 @@ AC_SUBST(INSTALL_SCRIPT)
|
|||
|
||||
export CC CXX CFLAGS LD LDFLAGS AR
|
||||
|
||||
ndb_cxxflags_fix=
|
||||
if test "$GXX" = "yes"
|
||||
then
|
||||
# mysqld requires -fno-implicit-templates.
|
||||
|
@ -1922,7 +1921,7 @@ AC_CHECK_FUNCS(alarm bcmp bfill bmove bzero chsize cuserid fchmod fcntl \
|
|||
pthread_key_delete pthread_rwlock_rdlock pthread_setprio \
|
||||
pthread_setprio_np pthread_setschedparam pthread_sigmask readlink \
|
||||
realpath rename rint rwlock_init setupterm \
|
||||
shmget shmat shmdt shmctl sigaction \
|
||||
shmget shmat shmdt shmctl sigaction sigemptyset sigaddset \
|
||||
sighold sigset sigthreadmask \
|
||||
snprintf socket stpcpy strcasecmp strerror strnlen strpbrk strstr strtol \
|
||||
strtoll strtoul strtoull tell tempnam thr_setconcurrency vidattr)
|
||||
|
@ -2629,7 +2628,7 @@ AC_SUBST(server_scripts)
|
|||
sql_union_dirs=" $sql_server_dirs "
|
||||
for DIR in $sql_client_dirs
|
||||
do
|
||||
if echo $sql_union_dirs | grep " $DIR " >/dev/null
|
||||
if echo " $sql_union_dirs " | grep " $DIR " >/dev/null
|
||||
then
|
||||
: # already present, skip
|
||||
else
|
||||
|
@ -2709,7 +2708,10 @@ if test "$ac_cv_func_shmget" = "yes" &&
|
|||
test "$ac_cv_func_shmat" = "yes" &&
|
||||
test "$ac_cv_func_shmdt" = "yes" &&
|
||||
test "$ac_cv_func_shmctl" = "yes" &&
|
||||
test "$ac_cv_func_sigaction" = "yes"
|
||||
test "$ac_cv_func_sigaction" = "yes" &&
|
||||
test "$ac_cv_func_sigemptyset" = "yes" &&
|
||||
test "$ac_cv_func_sigaddset" = "yes" &&
|
||||
test "$ac_cv_func_pthread_sigmask" = "yes"
|
||||
then
|
||||
AC_DEFINE([NDB_SHM_TRANSPORTER], [1],
|
||||
[Including Ndb Cluster DB shared memory transporter])
|
||||
|
|
|
@ -154,15 +154,15 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef,
|
|||
keyseg->flag= 0;
|
||||
keyseg->null_bit= 0;
|
||||
keyseg++;
|
||||
|
||||
init_tree(&keyinfo->rb_tree, 0, 0, sizeof(byte*),
|
||||
|
||||
init_tree(&keyinfo->rb_tree, 0, 0, sizeof(byte*),
|
||||
(qsort_cmp2)keys_compare, 1, NULL, NULL);
|
||||
keyinfo->delete_key= hp_rb_delete_key;
|
||||
keyinfo->write_key= hp_rb_write_key;
|
||||
}
|
||||
else
|
||||
{
|
||||
init_block(&keyinfo->block, sizeof(HASH_INFO), min_records,
|
||||
init_block(&keyinfo->block, sizeof(HASH_INFO), min_records,
|
||||
max_records);
|
||||
keyinfo->delete_key= hp_delete_key;
|
||||
keyinfo->write_key= hp_write_key;
|
||||
|
@ -171,6 +171,7 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef,
|
|||
}
|
||||
share->min_records= min_records;
|
||||
share->max_records= max_records;
|
||||
share->max_table_size= create_info->max_table_size;
|
||||
share->data_length= share->index_length= 0;
|
||||
share->reclength= reclength;
|
||||
share->blength= 1;
|
||||
|
|
|
@ -143,7 +143,8 @@ static byte *next_free_record_pos(HP_SHARE *info)
|
|||
}
|
||||
if (!(block_pos=(info->records % info->block.records_in_block)))
|
||||
{
|
||||
if (info->records > info->max_records && info->max_records)
|
||||
if ((info->records > info->max_records && info->max_records) ||
|
||||
(info->data_length + info->index_length >= info->max_table_size))
|
||||
{
|
||||
my_errno=HA_ERR_RECORD_FILE_FULL;
|
||||
DBUG_RETURN(NULL);
|
||||
|
|
|
@ -125,8 +125,8 @@ typedef struct st_hp_keydef /* Key definition with open */
|
|||
TREE rb_tree;
|
||||
int (*write_key)(struct st_heap_info *info, struct st_hp_keydef *keyinfo,
|
||||
const byte *record, byte *recpos);
|
||||
int (*delete_key)(struct st_heap_info *info, struct st_hp_keydef *keyinfo,
|
||||
const byte *record, byte *recpos, int flag);
|
||||
int (*delete_key)(struct st_heap_info *info, struct st_hp_keydef *keyinfo,
|
||||
const byte *record, byte *recpos, int flag);
|
||||
uint (*get_key_length)(struct st_hp_keydef *keydef, const byte *key);
|
||||
} HP_KEYDEF;
|
||||
|
||||
|
@ -135,7 +135,7 @@ typedef struct st_heap_share
|
|||
HP_BLOCK block;
|
||||
HP_KEYDEF *keydef;
|
||||
ulong min_records,max_records; /* Params to open */
|
||||
ulong data_length,index_length;
|
||||
ulong data_length,index_length,max_table_size;
|
||||
uint records; /* records */
|
||||
uint blength; /* records rounded up to 2^n */
|
||||
uint deleted; /* Deleted records in database */
|
||||
|
@ -185,6 +185,7 @@ typedef struct st_heap_create_info
|
|||
{
|
||||
uint auto_key;
|
||||
uint auto_key_type;
|
||||
ulong max_table_size;
|
||||
ulonglong auto_increment;
|
||||
} HP_CREATE_INFO;
|
||||
|
||||
|
|
|
@ -215,7 +215,7 @@ extern char *strstr(const char *, const char *);
|
|||
extern int is_prefix(const char *, const char *);
|
||||
|
||||
/* Conversion routines */
|
||||
double my_strtod(const char *str, char **end);
|
||||
double my_strtod(const char *str, char **end, int *error);
|
||||
double my_atof(const char *nptr);
|
||||
|
||||
extern char *llstr(longlong value,char *buff);
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
typedef struct st_bitmap
|
||||
{
|
||||
uchar *bitmap;
|
||||
uint bitmap_size;
|
||||
uint bitmap_size; /* number of bytes occupied by the above */
|
||||
/*
|
||||
mutex will be acquired for the duration of each bitmap operation if
|
||||
thread_safe flag in bitmap_init was set. Otherwise, we optimize by not
|
||||
|
|
|
@ -688,6 +688,7 @@ extern int init_io_cache(IO_CACHE *info,File file,uint cachesize,
|
|||
extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type,
|
||||
my_off_t seek_offset,pbool use_async_io,
|
||||
pbool clear_cache);
|
||||
extern void setup_io_cache(IO_CACHE* info);
|
||||
extern int _my_b_read(IO_CACHE *info,byte *Buffer,uint Count);
|
||||
#ifdef THREAD
|
||||
extern int _my_b_read_r(IO_CACHE *info,byte *Buffer,uint Count);
|
||||
|
|
|
@ -165,6 +165,17 @@ dtype_is_non_binary_string_type(
|
|||
return(FALSE);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Gets the MySQL charset-collation code for MySQL string types. */
|
||||
|
||||
ulint
|
||||
dtype_get_charset_coll_noninline(
|
||||
/*=============================*/
|
||||
ulint prtype) /* in: precise data type */
|
||||
{
|
||||
return(dtype_get_charset_coll(prtype));
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Forms a precise type from the < 4.1.2 format precise type plus the
|
||||
charset-collation code. */
|
||||
|
|
|
@ -223,6 +223,7 @@ dict_boot(void)
|
|||
dict_index_t* index;
|
||||
dict_hdr_t* dict_hdr;
|
||||
mtr_t mtr;
|
||||
ibool success;
|
||||
|
||||
mtr_start(&mtr);
|
||||
|
||||
|
@ -275,20 +276,20 @@ dict_boot(void)
|
|||
|
||||
dict_mem_index_add_field(index, "NAME", 0, 0);
|
||||
|
||||
index->page_no = mtr_read_ulint(dict_hdr + DICT_HDR_TABLES,
|
||||
MLOG_4BYTES, &mtr);
|
||||
index->id = DICT_TABLES_ID;
|
||||
|
||||
ut_a(dict_index_add_to_cache(table, index));
|
||||
success = dict_index_add_to_cache(table, index, mtr_read_ulint(
|
||||
dict_hdr + DICT_HDR_TABLES, MLOG_4BYTES, &mtr));
|
||||
ut_a(success);
|
||||
/*-------------------------*/
|
||||
index = dict_mem_index_create("SYS_TABLES", "ID_IND",
|
||||
DICT_HDR_SPACE, DICT_UNIQUE, 1);
|
||||
dict_mem_index_add_field(index, "ID", 0, 0);
|
||||
|
||||
index->page_no = mtr_read_ulint(dict_hdr + DICT_HDR_TABLE_IDS,
|
||||
MLOG_4BYTES, &mtr);
|
||||
index->id = DICT_TABLE_IDS_ID;
|
||||
ut_a(dict_index_add_to_cache(table, index));
|
||||
success = dict_index_add_to_cache(table, index, mtr_read_ulint(
|
||||
dict_hdr + DICT_HDR_TABLE_IDS, MLOG_4BYTES, &mtr));
|
||||
ut_a(success);
|
||||
/*-------------------------*/
|
||||
table = dict_mem_table_create("SYS_COLUMNS", DICT_HDR_SPACE, 7, FALSE);
|
||||
|
||||
|
@ -311,10 +312,10 @@ dict_boot(void)
|
|||
dict_mem_index_add_field(index, "TABLE_ID", 0, 0);
|
||||
dict_mem_index_add_field(index, "POS", 0, 0);
|
||||
|
||||
index->page_no = mtr_read_ulint(dict_hdr + DICT_HDR_COLUMNS,
|
||||
MLOG_4BYTES, &mtr);
|
||||
index->id = DICT_COLUMNS_ID;
|
||||
ut_a(dict_index_add_to_cache(table, index));
|
||||
success = dict_index_add_to_cache(table, index, mtr_read_ulint(
|
||||
dict_hdr + DICT_HDR_COLUMNS, MLOG_4BYTES, &mtr));
|
||||
ut_a(success);
|
||||
/*-------------------------*/
|
||||
table = dict_mem_table_create("SYS_INDEXES", DICT_HDR_SPACE, 7, FALSE);
|
||||
|
||||
|
@ -332,6 +333,9 @@ dict_boot(void)
|
|||
#endif
|
||||
#if DICT_SYS_INDEXES_SPACE_NO_FIELD != 5 + 2
|
||||
#error "DICT_SYS_INDEXES_SPACE_NO_FIELD != 5 + 2"
|
||||
#endif
|
||||
#if DICT_SYS_INDEXES_TYPE_FIELD != 4 + 2
|
||||
#error "DICT_SYS_INDEXES_TYPE_FIELD != 4 + 2"
|
||||
#endif
|
||||
|
||||
table->id = DICT_INDEXES_ID;
|
||||
|
@ -344,10 +348,10 @@ dict_boot(void)
|
|||
dict_mem_index_add_field(index, "TABLE_ID", 0, 0);
|
||||
dict_mem_index_add_field(index, "ID", 0, 0);
|
||||
|
||||
index->page_no = mtr_read_ulint(dict_hdr + DICT_HDR_INDEXES,
|
||||
MLOG_4BYTES, &mtr);
|
||||
index->id = DICT_INDEXES_ID;
|
||||
ut_a(dict_index_add_to_cache(table, index));
|
||||
success = dict_index_add_to_cache(table, index, mtr_read_ulint(
|
||||
dict_hdr + DICT_HDR_INDEXES, MLOG_4BYTES, &mtr));
|
||||
ut_a(success);
|
||||
/*-------------------------*/
|
||||
table = dict_mem_table_create("SYS_FIELDS", DICT_HDR_SPACE, 3, FALSE);
|
||||
|
||||
|
@ -365,10 +369,10 @@ dict_boot(void)
|
|||
dict_mem_index_add_field(index, "INDEX_ID", 0, 0);
|
||||
dict_mem_index_add_field(index, "POS", 0, 0);
|
||||
|
||||
index->page_no = mtr_read_ulint(dict_hdr + DICT_HDR_FIELDS,
|
||||
MLOG_4BYTES, &mtr);
|
||||
index->id = DICT_FIELDS_ID;
|
||||
ut_a(dict_index_add_to_cache(table, index));
|
||||
success = dict_index_add_to_cache(table, index, mtr_read_ulint(
|
||||
dict_hdr + DICT_HDR_FIELDS, MLOG_4BYTES, &mtr));
|
||||
ut_a(success);
|
||||
|
||||
mtr_commit(&mtr);
|
||||
/*-------------------------*/
|
||||
|
|
|
@ -544,9 +544,7 @@ dict_build_index_def_step(
|
|||
table in the same tablespace */
|
||||
|
||||
index->space = table->space;
|
||||
|
||||
index->page_no = FIL_NULL;
|
||||
|
||||
node->page_no = FIL_NULL;
|
||||
row = dict_create_sys_indexes_tuple(index, node->heap);
|
||||
node->ind_row = row;
|
||||
|
||||
|
@ -624,18 +622,18 @@ dict_create_index_tree_step(
|
|||
|
||||
btr_pcur_move_to_next_user_rec(&pcur, &mtr);
|
||||
|
||||
index->page_no = btr_create(index->type, index->space, index->id,
|
||||
node->page_no = btr_create(index->type, index->space, index->id,
|
||||
table->comp, &mtr);
|
||||
/* printf("Created a new index tree in space %lu root page %lu\n",
|
||||
index->space, index->page_no); */
|
||||
|
||||
page_rec_write_index_page_no(btr_pcur_get_rec(&pcur),
|
||||
DICT_SYS_INDEXES_PAGE_NO_FIELD,
|
||||
index->page_no, &mtr);
|
||||
node->page_no, &mtr);
|
||||
btr_pcur_close(&pcur);
|
||||
mtr_commit(&mtr);
|
||||
|
||||
if (index->page_no == FIL_NULL) {
|
||||
if (node->page_no == FIL_NULL) {
|
||||
|
||||
return(DB_OUT_OF_FILE_SPACE);
|
||||
}
|
||||
|
@ -706,6 +704,101 @@ dict_drop_index_tree(
|
|||
DICT_SYS_INDEXES_PAGE_NO_FIELD, FIL_NULL, mtr);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
Truncates the index tree associated with a row in SYS_INDEXES table. */
|
||||
|
||||
void
|
||||
dict_truncate_index_tree(
|
||||
/*=====================*/
|
||||
dict_table_t* table, /* in: the table the index belongs to */
|
||||
rec_t* rec, /* in: record in the clustered index of
|
||||
SYS_INDEXES table */
|
||||
mtr_t* mtr) /* in: mtr having the latch
|
||||
on the record page */
|
||||
{
|
||||
ulint root_page_no;
|
||||
ulint space;
|
||||
ulint type;
|
||||
dulint index_id;
|
||||
byte* ptr;
|
||||
ulint len;
|
||||
ibool comp;
|
||||
dict_index_t* index;
|
||||
|
||||
#ifdef UNIV_SYNC_DEBUG
|
||||
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||
#endif /* UNIV_SYNC_DEBUG */
|
||||
|
||||
ut_a(!dict_sys->sys_indexes->comp);
|
||||
ptr = rec_get_nth_field_old(rec, DICT_SYS_INDEXES_PAGE_NO_FIELD, &len);
|
||||
|
||||
ut_ad(len == 4);
|
||||
|
||||
root_page_no = mtr_read_ulint(ptr, MLOG_4BYTES, mtr);
|
||||
|
||||
if (root_page_no == FIL_NULL) {
|
||||
/* The tree has been freed. */
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
ptr = rec_get_nth_field_old(rec,
|
||||
DICT_SYS_INDEXES_SPACE_NO_FIELD, &len);
|
||||
|
||||
ut_ad(len == 4);
|
||||
|
||||
space = mtr_read_ulint(ptr, MLOG_4BYTES, mtr);
|
||||
|
||||
if (!fil_tablespace_exists_in_mem(space)) {
|
||||
/* It is a single table tablespace and the .ibd file is
|
||||
missing: do nothing */
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
ptr = rec_get_nth_field_old(rec,
|
||||
DICT_SYS_INDEXES_TYPE_FIELD, &len);
|
||||
ut_ad(len == 4);
|
||||
type = mach_read_from_4(ptr);
|
||||
|
||||
ptr = rec_get_nth_field_old(rec, 1, &len);
|
||||
ut_ad(len == 8);
|
||||
index_id = mach_read_from_8(ptr);
|
||||
|
||||
/* We free all the pages but the root page first; this operation
|
||||
may span several mini-transactions */
|
||||
|
||||
btr_free_but_not_root(space, root_page_no);
|
||||
|
||||
/* Then we free the root page in the same mini-transaction where
|
||||
we create the b-tree and write its new root page number to the
|
||||
appropriate field in the SYS_INDEXES record: this mini-transaction
|
||||
marks the B-tree totally truncated */
|
||||
|
||||
comp = page_is_comp(btr_page_get(
|
||||
space, root_page_no, RW_X_LATCH, mtr));
|
||||
|
||||
btr_free_root(space, root_page_no, mtr);
|
||||
|
||||
/* Find the index corresponding to this SYS_INDEXES record. */
|
||||
for (index = UT_LIST_GET_FIRST(table->indexes);
|
||||
index;
|
||||
index = UT_LIST_GET_NEXT(indexes, index)) {
|
||||
if (!ut_dulint_cmp(index->id, index_id)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
root_page_no = btr_create(type, space, index_id, comp, mtr);
|
||||
if (index) {
|
||||
index->tree->page = root_page_no;
|
||||
}
|
||||
|
||||
page_rec_write_index_page_no(rec,
|
||||
DICT_SYS_INDEXES_PAGE_NO_FIELD,
|
||||
root_page_no, mtr);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Creates a table create graph. */
|
||||
|
||||
|
@ -762,6 +855,7 @@ ind_create_graph_create(
|
|||
node->index = index;
|
||||
|
||||
node->state = INDEX_BUILD_INDEX_DEF;
|
||||
node->page_no = FIL_NULL;
|
||||
node->heap = mem_heap_create(256);
|
||||
|
||||
node->ind_def = ins_node_create(INS_DIRECT,
|
||||
|
@ -981,7 +1075,8 @@ dict_create_index_step(
|
|||
|
||||
if (node->state == INDEX_ADD_TO_CACHE) {
|
||||
|
||||
success = dict_index_add_to_cache(node->table, node->index);
|
||||
success = dict_index_add_to_cache(node->table, node->index,
|
||||
node->page_no);
|
||||
|
||||
ut_a(success);
|
||||
|
||||
|
|
|
@ -1374,8 +1374,9 @@ dict_index_add_to_cache(
|
|||
/*====================*/
|
||||
/* out: TRUE if success */
|
||||
dict_table_t* table, /* in: table on which the index is */
|
||||
dict_index_t* index) /* in, own: index; NOTE! The index memory
|
||||
dict_index_t* index, /* in, own: index; NOTE! The index memory
|
||||
object is freed in this function! */
|
||||
ulint page_no)/* in: root page number of the index */
|
||||
{
|
||||
dict_index_t* new_index;
|
||||
dict_tree_t* tree;
|
||||
|
@ -1461,10 +1462,9 @@ dict_index_add_to_cache(
|
|||
tree = dict_index_get_tree(
|
||||
UT_LIST_GET_FIRST(cluster->indexes));
|
||||
new_index->tree = tree;
|
||||
new_index->page_no = tree->page;
|
||||
} else {
|
||||
/* Create an index tree memory object for the index */
|
||||
tree = dict_tree_create(new_index);
|
||||
tree = dict_tree_create(new_index, page_no);
|
||||
ut_ad(tree);
|
||||
|
||||
new_index->tree = tree;
|
||||
|
@ -1749,7 +1749,6 @@ dict_index_build_internal_clust(
|
|||
new_index->n_user_defined_cols = index->n_fields;
|
||||
|
||||
new_index->id = index->id;
|
||||
new_index->page_no = index->page_no;
|
||||
|
||||
if (table->type != DICT_TABLE_ORDINARY) {
|
||||
/* The index is mixed: copy common key prefix fields */
|
||||
|
@ -1928,7 +1927,6 @@ dict_index_build_internal_non_clust(
|
|||
new_index->n_user_defined_cols = index->n_fields;
|
||||
|
||||
new_index->id = index->id;
|
||||
new_index->page_no = index->page_no;
|
||||
|
||||
/* Copy fields from index to new_index */
|
||||
dict_index_copy(new_index, index, 0, index->n_fields);
|
||||
|
@ -3565,9 +3563,10 @@ dict_tree_t*
|
|||
dict_tree_create(
|
||||
/*=============*/
|
||||
/* out, own: created tree */
|
||||
dict_index_t* index) /* in: the index for which to create: in the
|
||||
dict_index_t* index, /* in: the index for which to create: in the
|
||||
case of a mixed tree, this should be the
|
||||
index of the cluster object */
|
||||
ulint page_no)/* in: root page number of the index */
|
||||
{
|
||||
dict_tree_t* tree;
|
||||
|
||||
|
@ -3577,7 +3576,7 @@ dict_tree_create(
|
|||
|
||||
tree->type = index->type;
|
||||
tree->space = index->space;
|
||||
tree->page = index->page_no;
|
||||
tree->page = page_no;
|
||||
|
||||
tree->id = index->id;
|
||||
|
||||
|
|
|
@ -681,12 +681,10 @@ dict_load_indexes(
|
|||
} else {
|
||||
index = dict_mem_index_create(table->name, name_buf,
|
||||
space, type, n_fields);
|
||||
index->page_no = page_no;
|
||||
index->id = id;
|
||||
|
||||
dict_load_fields(table, index, heap);
|
||||
|
||||
dict_index_add_to_cache(table, index);
|
||||
dict_index_add_to_cache(table, index, page_no);
|
||||
}
|
||||
|
||||
btr_pcur_move_to_next_user_rec(&pcur, &mtr);
|
||||
|
|
|
@ -548,11 +548,9 @@ ibuf_data_init_for_space(
|
|||
dict_mem_index_add_field(index, "PAGE_NO", 0, 0);
|
||||
dict_mem_index_add_field(index, "TYPES", 0, 0);
|
||||
|
||||
index->page_no = FSP_IBUF_TREE_ROOT_PAGE_NO;
|
||||
|
||||
index->id = ut_dulint_add(DICT_IBUF_ID_MIN, space);
|
||||
|
||||
dict_index_add_to_cache(table, index);
|
||||
dict_index_add_to_cache(table, index, FSP_IBUF_TREE_ROOT_PAGE_NO);
|
||||
|
||||
data->index = dict_table_get_first_index(table);
|
||||
|
||||
|
|
|
@ -234,6 +234,13 @@ dtype_get_prtype(
|
|||
dtype_t* type);
|
||||
/*************************************************************************
|
||||
Gets the MySQL charset-collation code for MySQL string types. */
|
||||
|
||||
ulint
|
||||
dtype_get_charset_coll_noninline(
|
||||
/*=============================*/
|
||||
ulint prtype);/* in: precise data type */
|
||||
/*************************************************************************
|
||||
Gets the MySQL charset-collation code for MySQL string types. */
|
||||
UNIV_INLINE
|
||||
ulint
|
||||
dtype_get_charset_coll(
|
||||
|
|
|
@ -119,6 +119,7 @@ dict_create(void);
|
|||
clustered index */
|
||||
#define DICT_SYS_INDEXES_PAGE_NO_FIELD 8
|
||||
#define DICT_SYS_INDEXES_SPACE_NO_FIELD 7
|
||||
#define DICT_SYS_INDEXES_TYPE_FIELD 6
|
||||
|
||||
/* When a row id which is zero modulo this number (which must be a power of
|
||||
two) is assigned, the field DICT_HDR_ROW_ID on the dictionary header page is
|
||||
|
|
|
@ -54,6 +54,17 @@ dict_create_index_step(
|
|||
/* out: query thread to run next or NULL */
|
||||
que_thr_t* thr); /* in: query thread */
|
||||
/***********************************************************************
|
||||
Truncates the index tree associated with a row in SYS_INDEXES table. */
|
||||
|
||||
void
|
||||
dict_truncate_index_tree(
|
||||
/*=====================*/
|
||||
dict_table_t* table, /* in: the table the index belongs to */
|
||||
rec_t* rec, /* in: record in the clustered index of
|
||||
SYS_INDEXES table */
|
||||
mtr_t* mtr); /* in: mtr having the latch
|
||||
on the record page */
|
||||
/***********************************************************************
|
||||
Drops the index tree associated with a row in SYS_INDEXES table. */
|
||||
|
||||
void
|
||||
|
@ -142,6 +153,7 @@ struct ind_node_struct{
|
|||
/*----------------------*/
|
||||
/* Local storage for this graph node */
|
||||
ulint state; /* node execution state */
|
||||
ulint page_no;/* root page number of the index */
|
||||
dict_table_t* table; /* table which owns the index */
|
||||
dtuple_t* ind_row;/* index definition row built */
|
||||
ulint field_no;/* next field definition to insert */
|
||||
|
|
|
@ -508,8 +508,9 @@ dict_index_add_to_cache(
|
|||
/*====================*/
|
||||
/* out: TRUE if success */
|
||||
dict_table_t* table, /* in: table on which the index is */
|
||||
dict_index_t* index); /* in, own: index; NOTE! The index memory
|
||||
dict_index_t* index, /* in, own: index; NOTE! The index memory
|
||||
object is freed in this function! */
|
||||
ulint page_no);/* in: root page number of the index */
|
||||
/************************************************************************
|
||||
Gets the number of fields in the internal representation of an index,
|
||||
including fields added by the dictionary system. */
|
||||
|
@ -686,9 +687,10 @@ dict_tree_t*
|
|||
dict_tree_create(
|
||||
/*=============*/
|
||||
/* out, own: created tree */
|
||||
dict_index_t* index); /* in: the index for which to create: in the
|
||||
dict_index_t* index, /* in: the index for which to create: in the
|
||||
case of a mixed tree, this should be the
|
||||
index of the cluster object */
|
||||
ulint page_no);/* in: root page number of the index */
|
||||
/**************************************************************************
|
||||
Frees an index tree struct. */
|
||||
|
||||
|
|
|
@ -218,7 +218,6 @@ struct dict_index_struct{
|
|||
const char* table_name; /* table name */
|
||||
dict_table_t* table; /* back pointer to table */
|
||||
ulint space; /* space where the index tree is placed */
|
||||
ulint page_no;/* page number of the index tree root */
|
||||
ulint trx_id_offset;/* position of the the trx id column
|
||||
in a clustered index record, if the fields
|
||||
before it are known to be of a fixed size,
|
||||
|
|
|
@ -363,6 +363,15 @@ row_get_background_drop_list_len_low(void);
|
|||
/*======================================*/
|
||||
/* out: how many tables in list */
|
||||
/*************************************************************************
|
||||
Truncates a table for MySQL. */
|
||||
|
||||
int
|
||||
row_truncate_table_for_mysql(
|
||||
/*=========================*/
|
||||
/* out: error code or DB_SUCCESS */
|
||||
dict_table_t* table, /* in: table handle */
|
||||
trx_t* trx); /* in: transaction handle */
|
||||
/*************************************************************************
|
||||
Drops a table for MySQL. If the name of the dropped table ends to
|
||||
characters INNODB_MONITOR, then this also stops printing of monitor
|
||||
output by the master thread. */
|
||||
|
@ -447,6 +456,8 @@ struct mysql_row_templ_struct {
|
|||
zero if column cannot be NULL */
|
||||
ulint type; /* column type in Innobase mtype
|
||||
numbers DATA_CHAR... */
|
||||
ulint charset; /* MySQL charset-collation code
|
||||
of the column, or zero */
|
||||
ulint is_unsigned; /* if a column type is an integer
|
||||
type and this field is != 0, then
|
||||
it is an unsigned integer type */
|
||||
|
|
|
@ -91,12 +91,33 @@ row_mysql_store_col_in_innobase_format(
|
|||
}
|
||||
} else if (type == DATA_VARCHAR || type == DATA_VARMYSQL
|
||||
|| type == DATA_BINARY) {
|
||||
/* Remove trailing spaces. */
|
||||
|
||||
/* Handle UCS2 strings differently. As no new
|
||||
collations will be introduced in 4.1, we hardcode the
|
||||
charset-collation codes here. In 5.0, the logic will
|
||||
be based on mbminlen. */
|
||||
ulint cset = dtype_get_charset_coll(
|
||||
dtype_get_prtype(dfield_get_type(dfield)));
|
||||
ptr = row_mysql_read_var_ref(&col_len, mysql_data);
|
||||
|
||||
/* Remove trailing spaces */
|
||||
while (col_len > 0 && ptr[col_len - 1] == ' ') {
|
||||
col_len--;
|
||||
}
|
||||
if (cset == 35/*ucs2_general_ci*/
|
||||
|| cset == 90/*ucs2_bin*/
|
||||
|| (cset >= 128/*ucs2_unicode_ci*/
|
||||
&& cset <= 144/*ucs2_persian_ci*/)) {
|
||||
/* space=0x0020 */
|
||||
/* Trim "half-chars", just in case. */
|
||||
col_len &= ~1;
|
||||
|
||||
while (col_len >= 2 && ptr[col_len - 2] == 0x00
|
||||
&& ptr[col_len - 1] == 0x20) {
|
||||
col_len -= 2;
|
||||
}
|
||||
} else {
|
||||
/* space=0x20 */
|
||||
while (col_len > 0 && ptr[col_len - 1] == 0x20) {
|
||||
col_len--;
|
||||
}
|
||||
}
|
||||
} else if (type == DATA_BLOB) {
|
||||
ptr = row_mysql_read_blob_ref(&col_len, mysql_data, col_len);
|
||||
}
|
||||
|
|
|
@ -75,6 +75,10 @@ extern dulint srv_start_lsn;
|
|||
void set_panic_flag_for_netware(void);
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_DARWIN_THREADS
|
||||
extern ibool srv_have_fullfsync;
|
||||
#endif
|
||||
|
||||
extern ulint srv_sizeof_trx_t_in_ha_innodb_cc;
|
||||
|
||||
extern ibool srv_is_being_started;
|
||||
|
|
|
@ -1773,19 +1773,31 @@ os_file_flush(
|
|||
#else
|
||||
int ret;
|
||||
|
||||
#if defined(HAVE_DARWIN_THREADS) && defined(F_FULLFSYNC)
|
||||
#if defined(HAVE_DARWIN_THREADS)
|
||||
# ifndef F_FULLFSYNC
|
||||
/* The following definition is from the Mac OS X 10.3 <sys/fcntl.h> */
|
||||
# define F_FULLFSYNC 51 /* fsync + ask the drive to flush to the media */
|
||||
# elif F_FULLFSYNC != 51
|
||||
# error "F_FULLFSYNC != 51: ABI incompatibility with Mac OS X 10.3"
|
||||
# endif
|
||||
/* Apple has disabled fsync() for internal disk drives in OS X. That
|
||||
caused corruption for a user when he tested a power outage. Let us in
|
||||
OS X use a nonstandard flush method recommended by an Apple
|
||||
engineer. */
|
||||
|
||||
ret = fcntl(file, F_FULLFSYNC, NULL);
|
||||
|
||||
if (ret) {
|
||||
/* If we are not on a file system that supports this, then
|
||||
fall back to a plain fsync. */
|
||||
if (!srv_have_fullfsync) {
|
||||
/* If we are not on an operating system that supports this,
|
||||
then fall back to a plain fsync. */
|
||||
|
||||
ret = fsync(file);
|
||||
} else {
|
||||
ret = fcntl(file, F_FULLFSYNC, NULL);
|
||||
|
||||
if (ret) {
|
||||
/* If we are not on a file system that supports this,
|
||||
then fall back to a plain fsync. */
|
||||
ret = fsync(file);
|
||||
}
|
||||
}
|
||||
#elif HAVE_FDATASYNC
|
||||
ret = fdatasync(file);
|
||||
|
|
|
@ -262,22 +262,6 @@ cmp_whole_field(
|
|||
"InnoDB: comparison!\n");
|
||||
}
|
||||
|
||||
/* MySQL does not pad the ends of strings with spaces in a
|
||||
comparison. That would cause a foreign key check to fail for
|
||||
non-latin1 character sets if we have different length columns.
|
||||
To prevent that we remove trailing spaces here before doing
|
||||
the comparison. NOTE that if we in the future map more MySQL
|
||||
types to DATA_MYSQL or DATA_VARMYSQL, we have to change this
|
||||
code. */
|
||||
|
||||
while (a_length > 0 && a[a_length - 1] == ' ') {
|
||||
a_length--;
|
||||
}
|
||||
|
||||
while (b_length > 0 && b[b_length - 1] == ' ') {
|
||||
b_length--;
|
||||
}
|
||||
|
||||
return(innobase_mysql_cmp(
|
||||
(int)(type->prtype & DATA_MYSQL_TYPE_MASK),
|
||||
(uint)dtype_get_charset_coll(type->prtype),
|
||||
|
|
|
@ -2421,6 +2421,294 @@ funct_exit:
|
|||
return((int) err);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Truncates a table for MySQL. */
|
||||
|
||||
int
|
||||
row_truncate_table_for_mysql(
|
||||
/*=========================*/
|
||||
/* out: error code or DB_SUCCESS */
|
||||
dict_table_t* table, /* in: table handle */
|
||||
trx_t* trx) /* in: transaction handle */
|
||||
{
|
||||
dict_foreign_t* foreign;
|
||||
ulint err;
|
||||
ibool locked_dictionary = FALSE;
|
||||
mem_heap_t* heap;
|
||||
byte* buf;
|
||||
dtuple_t* tuple;
|
||||
dfield_t* dfield;
|
||||
dict_index_t* sys_index;
|
||||
btr_pcur_t pcur;
|
||||
mtr_t mtr;
|
||||
dulint new_id;
|
||||
char* sql;
|
||||
que_thr_t* thr;
|
||||
que_t* graph = NULL;
|
||||
|
||||
/* How do we prevent crashes caused by ongoing operations on the table? Old
|
||||
operations could try to access non-existent pages.
|
||||
|
||||
1) SQL queries, INSERT, SELECT, ...: we must get an exclusive MySQL table lock
|
||||
on the table before we can do TRUNCATE TABLE. Then there are no running
|
||||
queries on the table.
|
||||
2) Purge and rollback: we assign a new table id for the table. Since purge and
|
||||
rollback look for the table based on the table id, they see the table as
|
||||
'dropped' and discard their operations.
|
||||
3) Insert buffer: TRUNCATE TABLE is analogous to DROP TABLE, so we do not
|
||||
have to remove insert buffer records, as the insert buffer works at a low
|
||||
level. If a freed page is later reallocated, the allocator will remove
|
||||
the ibuf entries for it.
|
||||
|
||||
TODO: when we truncate *.ibd files (analogous to DISCARD TABLESPACE), we
|
||||
will have to remove we remove all entries for the table in the insert
|
||||
buffer tree!
|
||||
|
||||
4) Linear readahead and random readahead: we use the same method as in 3) to
|
||||
discard ongoing operations. (This will only be relevant for TRUNCATE TABLE
|
||||
by DISCARD TABLESPACE.)
|
||||
5) FOREIGN KEY operations: if table->n_foreign_key_checks_running > 0, we
|
||||
do not allow the TRUNCATE. We also reserve the data dictionary latch. */
|
||||
|
||||
static const char renumber_tablespace_proc[] =
|
||||
"PROCEDURE RENUMBER_TABLESPACE_PROC () IS\n"
|
||||
"old_id CHAR;\n"
|
||||
"new_id CHAR;\n"
|
||||
"old_id_low INT;\n"
|
||||
"old_id_high INT;\n"
|
||||
"new_id_low INT;\n"
|
||||
"new_id_high INT;\n"
|
||||
"BEGIN\n"
|
||||
"old_id_high := %lu;\n"
|
||||
"old_id_low := %lu;\n"
|
||||
"new_id_high := %lu;\n"
|
||||
"new_id_low := %lu;\n"
|
||||
"old_id := CONCAT(TO_BINARY(old_id_high, 4), TO_BINARY(old_id_low, 4));\n"
|
||||
"new_id := CONCAT(TO_BINARY(new_id_high, 4), TO_BINARY(new_id_low, 4));\n"
|
||||
"UPDATE SYS_TABLES SET ID = new_id\n"
|
||||
"WHERE ID = old_id;\n"
|
||||
"UPDATE SYS_COLUMNS SET TABLE_ID = new_id\n"
|
||||
"WHERE TABLE_ID = old_id;\n"
|
||||
"UPDATE SYS_INDEXES SET TABLE_ID = new_id\n"
|
||||
"WHERE TABLE_ID = old_id;\n"
|
||||
"COMMIT WORK;\n"
|
||||
"END;\n";
|
||||
|
||||
ut_ad(trx->mysql_thread_id == os_thread_get_curr_id());
|
||||
ut_ad(table);
|
||||
|
||||
if (srv_created_new_raw) {
|
||||
fputs(
|
||||
"InnoDB: A new raw disk partition was initialized or\n"
|
||||
"InnoDB: innodb_force_recovery is on: we do not allow\n"
|
||||
"InnoDB: database modifications by the user. Shut down\n"
|
||||
"InnoDB: mysqld and edit my.cnf so that newraw is replaced\n"
|
||||
"InnoDB: with raw, and innodb_force_... is removed.\n",
|
||||
stderr);
|
||||
|
||||
return(DB_ERROR);
|
||||
}
|
||||
|
||||
trx->op_info = "truncating table";
|
||||
|
||||
trx_start_if_not_started(trx);
|
||||
|
||||
/* Serialize data dictionary operations with dictionary mutex:
|
||||
no deadlocks can occur then in these operations */
|
||||
|
||||
if (trx->dict_operation_lock_mode != RW_X_LATCH) {
|
||||
/* Prevent foreign key checks etc. while we are truncating the
|
||||
table */
|
||||
|
||||
row_mysql_lock_data_dictionary(trx);
|
||||
|
||||
locked_dictionary = TRUE;
|
||||
}
|
||||
|
||||
#ifdef UNIV_SYNC_DEBUG
|
||||
ut_ad(mutex_own(&(dict_sys->mutex)));
|
||||
ut_ad(rw_lock_own(&dict_operation_lock, RW_LOCK_EX));
|
||||
#endif /* UNIV_SYNC_DEBUG */
|
||||
|
||||
/* Check if the table is referenced by foreign key constraints from
|
||||
some other table (not the table itself) */
|
||||
|
||||
foreign = UT_LIST_GET_FIRST(table->referenced_list);
|
||||
|
||||
while (foreign && foreign->foreign_table == table) {
|
||||
foreign = UT_LIST_GET_NEXT(referenced_list, foreign);
|
||||
}
|
||||
|
||||
if (foreign && trx->check_foreigns) {
|
||||
FILE* ef = dict_foreign_err_file;
|
||||
|
||||
/* We only allow truncating a referenced table if
|
||||
FOREIGN_KEY_CHECKS is set to 0 */
|
||||
|
||||
mutex_enter(&dict_foreign_err_mutex);
|
||||
rewind(ef);
|
||||
ut_print_timestamp(ef);
|
||||
|
||||
fputs(" Cannot truncate table ", ef);
|
||||
ut_print_name(ef, trx, table->name);
|
||||
fputs("\n"
|
||||
"because it is referenced by ", ef);
|
||||
ut_print_name(ef, trx, foreign->foreign_table_name);
|
||||
putc('\n', ef);
|
||||
mutex_exit(&dict_foreign_err_mutex);
|
||||
|
||||
err = DB_ERROR;
|
||||
goto funct_exit;
|
||||
}
|
||||
|
||||
if (table->n_mysql_handles_opened > 1) {
|
||||
ut_print_timestamp(stderr);
|
||||
fputs(" InnoDB: Warning: MySQL is trying to truncate table ", stderr);
|
||||
ut_print_name(stderr, trx, table->name);
|
||||
fputs("\n"
|
||||
"InnoDB: though there are still open handles to it.\n", stderr);
|
||||
err = DB_ERROR;
|
||||
|
||||
goto funct_exit;
|
||||
}
|
||||
|
||||
/* TODO: could we replace the counter n_foreign_key_checks_running
|
||||
with lock checks on the table? Acquire here an exclusive lock on the
|
||||
table, and rewrite lock0lock.c and the lock wait in srv0srv.c so that
|
||||
they can cope with the table having been truncated here? Foreign key
|
||||
checks take an IS or IX lock on the table. */
|
||||
|
||||
if (table->n_foreign_key_checks_running > 0) {
|
||||
ut_print_timestamp(stderr);
|
||||
fputs(" InnoDB: You are trying to truncate table ", stderr);
|
||||
ut_print_name(stderr, trx, table->name);
|
||||
fputs("\n"
|
||||
"InnoDB: though there is a foreign key check running on it.\n",
|
||||
stderr);
|
||||
err = DB_ERROR;
|
||||
|
||||
goto funct_exit;
|
||||
}
|
||||
|
||||
/* Remove any locks there are on the table or its records */
|
||||
|
||||
lock_reset_all_on_table(table);
|
||||
|
||||
trx->dict_operation = TRUE;
|
||||
trx->table_id = table->id;
|
||||
|
||||
/* scan SYS_INDEXES for all indexes of the table */
|
||||
heap = mem_heap_create(800);
|
||||
|
||||
tuple = dtuple_create(heap, 1);
|
||||
dfield = dtuple_get_nth_field(tuple, 0);
|
||||
|
||||
buf = mem_heap_alloc(heap, 8);
|
||||
mach_write_to_8(buf, table->id);
|
||||
|
||||
dfield_set_data(dfield, buf, 8);
|
||||
sys_index = dict_table_get_first_index(dict_sys->sys_indexes);
|
||||
dict_index_copy_types(tuple, sys_index, 1);
|
||||
|
||||
mtr_start(&mtr);
|
||||
btr_pcur_open_on_user_rec(sys_index, tuple, PAGE_CUR_GE,
|
||||
BTR_MODIFY_LEAF, &pcur, &mtr);
|
||||
for (;;) {
|
||||
rec_t* rec;
|
||||
const byte* field;
|
||||
ulint len;
|
||||
|
||||
if (!btr_pcur_is_on_user_rec(&pcur, &mtr)) {
|
||||
/* The end of SYS_INDEXES has been reached. */
|
||||
break;
|
||||
}
|
||||
|
||||
rec = btr_pcur_get_rec(&pcur);
|
||||
|
||||
field = rec_get_nth_field_old(rec, 0, &len);
|
||||
ut_ad(len == 8);
|
||||
|
||||
if (memcmp(buf, field, len) != 0) {
|
||||
/* End of indexes for the table (TABLE_ID mismatch). */
|
||||
break;
|
||||
}
|
||||
|
||||
if (rec_get_deleted_flag(rec, FALSE)) {
|
||||
/* The index has been dropped. */
|
||||
continue;
|
||||
}
|
||||
|
||||
dict_truncate_index_tree(table, rec, &mtr);
|
||||
|
||||
btr_pcur_move_to_next_user_rec(&pcur, &mtr);
|
||||
}
|
||||
|
||||
btr_pcur_close(&pcur);
|
||||
mtr_commit(&mtr);
|
||||
|
||||
new_id = dict_hdr_get_new_id(DICT_HDR_TABLE_ID);
|
||||
|
||||
mem_heap_empty(heap);
|
||||
sql = mem_heap_alloc(heap, (sizeof renumber_tablespace_proc) + 40);
|
||||
sprintf(sql, renumber_tablespace_proc,
|
||||
(ulong) ut_dulint_get_high(table->id),
|
||||
(ulong) ut_dulint_get_low(table->id),
|
||||
(ulong) ut_dulint_get_high(new_id),
|
||||
(ulong) ut_dulint_get_low(new_id));
|
||||
|
||||
graph = pars_sql(sql);
|
||||
|
||||
ut_a(graph);
|
||||
|
||||
mem_heap_free(heap);
|
||||
|
||||
graph->trx = trx;
|
||||
trx->graph = NULL;
|
||||
|
||||
graph->fork_type = QUE_FORK_MYSQL_INTERFACE;
|
||||
|
||||
thr = que_fork_start_command(graph);
|
||||
ut_a(thr);
|
||||
|
||||
que_run_threads(thr);
|
||||
|
||||
que_graph_free(graph);
|
||||
|
||||
err = trx->error_state;
|
||||
|
||||
if (err != DB_SUCCESS) {
|
||||
trx->error_state = DB_SUCCESS;
|
||||
trx_general_rollback_for_mysql(trx, FALSE, NULL);
|
||||
trx->error_state = DB_SUCCESS;
|
||||
ut_print_timestamp(stderr);
|
||||
fputs(" InnoDB: Unable to assign a new identifier to table ", stderr);
|
||||
ut_print_name(stderr, trx, table->name);
|
||||
fputs("\n"
|
||||
"InnoDB: after truncating it. Background processes may corrupt the table!\n",
|
||||
stderr);
|
||||
err = DB_ERROR;
|
||||
} else {
|
||||
dict_table_change_id_in_cache(table, new_id);
|
||||
}
|
||||
|
||||
dict_table_autoinc_initialize(table, 0);
|
||||
dict_update_statistics(table);
|
||||
|
||||
trx_commit_for_mysql(trx);
|
||||
|
||||
funct_exit:
|
||||
|
||||
if (locked_dictionary) {
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
}
|
||||
|
||||
trx->op_info = "";
|
||||
|
||||
srv_wake_master_thread();
|
||||
|
||||
return((int) err);
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
Drops a table for MySQL. If the name of the table to be dropped is equal
|
||||
with one of the predefined magic table names, then this also stops printing
|
||||
|
|
|
@ -2271,9 +2271,6 @@ row_sel_field_store_in_mysql_format(
|
|||
dest = row_mysql_store_var_len(dest, len);
|
||||
ut_memcpy(dest, data, len);
|
||||
|
||||
/* Pad with trailing spaces */
|
||||
memset(dest + len, ' ', col_len - len);
|
||||
|
||||
/* ut_ad(col_len >= len + 2); No real var implemented in
|
||||
MySQL yet! */
|
||||
|
||||
|
@ -2406,7 +2403,45 @@ row_sel_store_mysql_rec(
|
|||
mysql_rec + templ->mysql_col_offset,
|
||||
templ->mysql_col_len, data, len,
|
||||
templ->type, templ->is_unsigned);
|
||||
|
||||
|
||||
if (templ->type == DATA_VARCHAR
|
||||
|| templ->type == DATA_VARMYSQL
|
||||
|| templ->type == DATA_BINARY) {
|
||||
/* Pad with trailing spaces */
|
||||
data = mysql_rec + templ->mysql_col_offset;
|
||||
|
||||
/* Handle UCS2 strings differently. As no new
|
||||
collations will be introduced in 4.1, we
|
||||
hardcode the charset-collation codes here.
|
||||
5.0 will use a different approach. */
|
||||
if (templ->charset == 35
|
||||
|| templ->charset == 90
|
||||
|| (templ->charset >= 128
|
||||
&& templ->charset <= 144)) {
|
||||
/* space=0x0020 */
|
||||
ulint col_len = templ->mysql_col_len;
|
||||
|
||||
ut_a(!(col_len & 1));
|
||||
if (len & 1) {
|
||||
/* A 0x20 has been stripped
|
||||
from the column.
|
||||
Pad it back. */
|
||||
goto pad_0x20;
|
||||
}
|
||||
/* Pad the rest of the string
|
||||
with 0x0020 */
|
||||
while (len < col_len) {
|
||||
data[len++] = 0x00;
|
||||
pad_0x20:
|
||||
data[len++] = 0x20;
|
||||
}
|
||||
} else {
|
||||
/* space=0x20 */
|
||||
memset(data + len, 0x20,
|
||||
templ->mysql_col_len - len);
|
||||
}
|
||||
}
|
||||
|
||||
/* Cleanup */
|
||||
if (extern_field_heap) {
|
||||
mem_heap_free(extern_field_heap);
|
||||
|
@ -2442,8 +2477,29 @@ row_sel_store_mysql_rec(
|
|||
pad_char = '\0';
|
||||
}
|
||||
|
||||
memset(mysql_rec + templ->mysql_col_offset, pad_char,
|
||||
templ->mysql_col_len);
|
||||
/* Handle UCS2 strings differently. As no new
|
||||
collations will be introduced in 4.1,
|
||||
we hardcode the charset-collation codes here.
|
||||
5.0 will use a different approach. */
|
||||
if (templ->charset == 35
|
||||
|| templ->charset == 90
|
||||
|| (templ->charset >= 128
|
||||
&& templ->charset <= 144)) {
|
||||
/* There are two bytes per char, so the length
|
||||
has to be an even number. */
|
||||
ut_a(!(templ->mysql_col_len & 1));
|
||||
data = mysql_rec + templ->mysql_col_offset;
|
||||
len = templ->mysql_col_len;
|
||||
/* Pad with 0x0020. */
|
||||
while (len >= 2) {
|
||||
*data++ = 0x00;
|
||||
*data++ = 0x20;
|
||||
len -= 2;
|
||||
}
|
||||
} else {
|
||||
memset(mysql_rec + templ->mysql_col_offset,
|
||||
pad_char, templ->mysql_col_len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -61,6 +61,11 @@ dulint srv_start_lsn;
|
|||
/* Log sequence number at shutdown */
|
||||
dulint srv_shutdown_lsn;
|
||||
|
||||
#ifdef HAVE_DARWIN_THREADS
|
||||
# include <sys/utsname.h>
|
||||
ibool srv_have_fullfsync = FALSE;
|
||||
#endif
|
||||
|
||||
ibool srv_start_raw_disk_in_use = FALSE;
|
||||
|
||||
static ibool srv_start_has_been_called = FALSE;
|
||||
|
@ -935,6 +940,28 @@ innobase_start_or_create_for_mysql(void)
|
|||
ulint i;
|
||||
ibool srv_file_per_table_original_value = srv_file_per_table;
|
||||
mtr_t mtr;
|
||||
#ifdef HAVE_DARWIN_THREADS
|
||||
# ifdef F_FULLFSYNC
|
||||
/* This executable has been compiled on Mac OS X 10.3 or later.
|
||||
Assume that F_FULLFSYNC is available at run-time. */
|
||||
srv_have_fullfsync = TRUE;
|
||||
# else /* F_FULLFSYNC */
|
||||
/* This executable has been compiled on Mac OS X 10.2
|
||||
or earlier. Determine if the executable is running
|
||||
on Mac OS X 10.3 or later. */
|
||||
struct utsname utsname;
|
||||
if (uname(&utsname)) {
|
||||
fputs("InnoDB: cannot determine Mac OS X version!\n", stderr);
|
||||
} else {
|
||||
srv_have_fullfsync = strcmp(utsname.release, "7.") >= 0;
|
||||
}
|
||||
if (!srv_have_fullfsync) {
|
||||
fputs(
|
||||
"InnoDB: On Mac OS X, fsync() may be broken on internal drives,\n"
|
||||
"InnoDB: making transactions unsafe!\n", stderr);
|
||||
}
|
||||
# endif /* F_FULLFSYNC */
|
||||
#endif /* HAVE_DARWIN_THREADS */
|
||||
|
||||
if (sizeof(ulint) != sizeof(void*)) {
|
||||
fprintf(stderr,
|
||||
|
|
|
@ -857,6 +857,7 @@ my_bool handle_local_infile(MYSQL *mysql, const char *net_filename)
|
|||
err:
|
||||
/* free up memory allocated with _init, usually */
|
||||
(*options->local_infile_end)(li_ptr);
|
||||
my_free(buf, MYF(0));
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
||||
|
@ -1509,7 +1510,7 @@ ulong STDCALL mysql_thread_id(MYSQL *mysql)
|
|||
|
||||
const char * STDCALL mysql_character_set_name(MYSQL *mysql)
|
||||
{
|
||||
return mysql->charset->name;
|
||||
return mysql->charset->csname;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ sqlexamplessources = ha_example.cc ha_archive.cc ha_tina.cc
|
|||
noinst_HEADERS = embedded_priv.h emb_qcache.h
|
||||
|
||||
sqlsources = derror.cc field.cc field_conv.cc strfunc.cc filesort.cc \
|
||||
ha_innodb.cc ha_berkeley.cc ha_heap.cc \
|
||||
ha_innodb.cc ha_berkeley.cc ha_heap.cc ha_federated.cc \
|
||||
ha_myisam.cc ha_myisammrg.cc handler.cc sql_handler.cc \
|
||||
hostname.cc init.cc password.c \
|
||||
item.cc item_buff.cc item_cmpfunc.cc item_create.cc \
|
||||
|
|
|
@ -148,9 +148,8 @@ MI_INFO *mi_open(const char *name, int mode, uint open_flags)
|
|||
goto err;
|
||||
}
|
||||
/* Don't call realpath() if the name can't be a link */
|
||||
if (strcmp(name_buff, org_name))
|
||||
(void) my_readlink(index_name, org_name, MYF(0));
|
||||
else
|
||||
if (!strcmp(name_buff, org_name) ||
|
||||
my_readlink(index_name, org_name, MYF(0)) == -1)
|
||||
(void) strmov(index_name, org_name);
|
||||
(void) fn_format(data_name,org_name,"",MI_NAME_DEXT,2+4+16);
|
||||
|
||||
|
|
|
@ -35,13 +35,72 @@ sub mtr_get_opts_from_file ($) {
|
|||
while ( <FILE> )
|
||||
{
|
||||
chomp;
|
||||
s/\$MYSQL_TEST_DIR/$::glob_mysql_test_dir/g;
|
||||
push(@args, split(' ', $_));
|
||||
|
||||
# --set-variable=init_connect=set @a='a\\0c'
|
||||
s/^\s+//; # Remove leading space
|
||||
s/\s+$//; # Remove ending space
|
||||
|
||||
# This is strange, but we need to fill whitespace inside
|
||||
# quotes with something, to remove later. We do this to
|
||||
# be able to split on space. Else, we have trouble with
|
||||
# options like
|
||||
#
|
||||
# --someopt="--insideopt1 --insideopt2"
|
||||
#
|
||||
# But still with this, we are not 100% sure it is right,
|
||||
# we need a shell to do it right.
|
||||
|
||||
# print STDERR "\n";
|
||||
# print STDERR "AAA: $_\n";
|
||||
|
||||
s/\'([^\'\"]*)\'/unspace($1,"\x0a")/ge;
|
||||
s/\"([^\'\"]*)\"/unspace($1,"\x0b")/ge;
|
||||
s/\'([^\'\"]*)\'/unspace($1,"\x0a")/ge;
|
||||
s/\"([^\'\"]*)\"/unspace($1,"\x0b")/ge;
|
||||
|
||||
# print STDERR "BBB: $_\n";
|
||||
|
||||
# foreach my $arg (/(--?\w.*?)(?=\s+--?\w|$)/)
|
||||
|
||||
# FIXME ENV vars should be expanded!!!!
|
||||
|
||||
foreach my $arg (split(/[ \t]+/))
|
||||
{
|
||||
$arg =~ tr/\x11\x0a\x0b/ \'\"/; # Put back real chars
|
||||
# The outermost quotes has to go
|
||||
$arg =~ s/^([^\'\"]*)\'(.*)\'([^\'\"]*)$/$1$2$3/
|
||||
or $arg =~ s/^([^\'\"]*)\"(.*)\"([^\'\"]*)$/$1$2$3/;
|
||||
$arg =~ s/\\\\/\\/g;
|
||||
|
||||
$arg =~ s/\$\{(\w+)\}/envsubst($1)/ge;
|
||||
$arg =~ s/\$(\w+)/envsubst($1)/ge;
|
||||
|
||||
# print STDERR "ARG: $arg\n";
|
||||
push(@args, $arg);
|
||||
}
|
||||
}
|
||||
close FILE;
|
||||
return \@args;
|
||||
}
|
||||
|
||||
sub envsubst {
|
||||
my $string= shift;
|
||||
|
||||
if ( ! defined $ENV{$string} )
|
||||
{
|
||||
mtr_error("opt file referense \$$string that is unknown");
|
||||
}
|
||||
|
||||
return $ENV{$string};
|
||||
}
|
||||
|
||||
sub unspace {
|
||||
my $string= shift;
|
||||
my $quote= shift;
|
||||
$string =~ s/[ \t]/\x11/g;
|
||||
return "$quote$string$quote";
|
||||
}
|
||||
|
||||
sub mtr_fromfile ($) {
|
||||
my $file= shift;
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
# and is part of the translation of the Bourne shell script with the
|
||||
# same name.
|
||||
|
||||
use Carp qw(cluck);
|
||||
#use Carp qw(cluck);
|
||||
use strict;
|
||||
|
||||
use POSIX ":sys_wait_h";
|
||||
|
@ -64,18 +64,6 @@ sub spawn_impl ($$$$$$$) {
|
|||
my $error= shift;
|
||||
my $pid_file= shift; # FIXME
|
||||
|
||||
# FIXME really needing a PATH???
|
||||
# $ENV{'PATH'}= "/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin:/usr/bin/X11:$ENV{'PATH'}";
|
||||
|
||||
$ENV{'TZ'}= "GMT-3"; # for UNIX_TIMESTAMP tests to work
|
||||
$ENV{'LC_COLLATE'}= "C";
|
||||
$ENV{'MYSQL_TEST_DIR'}= $::glob_mysql_test_dir;
|
||||
$ENV{'MASTER_MYPORT'}= $::opt_master_myport;
|
||||
$ENV{'SLAVE_MYPORT'}= $::opt_slave_myport;
|
||||
# $ENV{'MYSQL_TCP_PORT'}= '@MYSQL_TCP_PORT@'; # FIXME
|
||||
$ENV{'MYSQL_TCP_PORT'}= 3306;
|
||||
$ENV{'MASTER_MYSOCK'}= $::master->[0]->{'path_mysock'};
|
||||
|
||||
if ( $::opt_script_debug )
|
||||
{
|
||||
print STDERR "\n";
|
||||
|
@ -85,17 +73,21 @@ sub spawn_impl ($$$$$$$) {
|
|||
print STDERR "#### ", "STDERR $error\n" if $error;
|
||||
if ( $join )
|
||||
{
|
||||
print STDERR "#### ", "run";
|
||||
print STDERR "#### ", "RUN ";
|
||||
}
|
||||
else
|
||||
{
|
||||
print STDERR "#### ", "spawn";
|
||||
print STDERR "#### ", "SPAWN ";
|
||||
}
|
||||
print STDERR "$path ", join(" ",@$arg_list_t), "\n";
|
||||
print STDERR "#### ", "-" x 78, "\n";
|
||||
}
|
||||
|
||||
my $pid= fork();
|
||||
if ( ! defined $pid )
|
||||
{
|
||||
mtr_error("$path ($pid) can't be forked");
|
||||
}
|
||||
|
||||
if ( $pid )
|
||||
{
|
||||
|
@ -104,17 +96,22 @@ sub spawn_impl ($$$$$$$) {
|
|||
{
|
||||
# We run a command and wait for the result
|
||||
# FIXME this need to be improved
|
||||
waitpid($pid,0);
|
||||
my $res= waitpid($pid,0);
|
||||
|
||||
if ( $res == -1 )
|
||||
{
|
||||
mtr_error("$path ($pid) got lost somehow");
|
||||
}
|
||||
my $exit_value= $? >> 8;
|
||||
my $signal_num= $? & 127;
|
||||
my $dumped_core= $? & 128;
|
||||
if ( $signal_num )
|
||||
{
|
||||
mtr_error("spawn got signal $signal_num");
|
||||
mtr_error("$path ($pid) got signal $signal_num");
|
||||
}
|
||||
if ( $dumped_core )
|
||||
{
|
||||
mtr_error("spawn dumped core");
|
||||
mtr_error("$path ($pid) dumped core");
|
||||
}
|
||||
return $exit_value;
|
||||
}
|
||||
|
@ -326,7 +323,8 @@ sub mtr_stop_mysqld_servers ($$) {
|
|||
mtr_init_args(\$args);
|
||||
|
||||
mtr_add_arg($args, "--no-defaults");
|
||||
mtr_add_arg($args, "-uroot");
|
||||
mtr_add_arg($args, "--user=%s", $::opt_user);
|
||||
mtr_add_arg($args, "--password=");
|
||||
if ( -e $srv->{'sockfile'} )
|
||||
{
|
||||
mtr_add_arg($args, "--socket=%s", $srv->{'sockfile'});
|
||||
|
@ -336,7 +334,8 @@ sub mtr_stop_mysqld_servers ($$) {
|
|||
mtr_add_arg($args, "--port=%s", $srv->{'port'});
|
||||
}
|
||||
mtr_add_arg($args, "--connect_timeout=5");
|
||||
mtr_add_arg($args, "--shutdown_timeout=70");
|
||||
mtr_add_arg($args, "--shutdown_timeout=20");
|
||||
mtr_add_arg($args, "--protocol=tcp"); # FIXME new thing, will it help?!
|
||||
mtr_add_arg($args, "shutdown");
|
||||
# We don't wait for termination of mysqladmin
|
||||
mtr_spawn($::exe_mysqladmin, $args,
|
||||
|
@ -361,6 +360,10 @@ sub mtr_stop_mysqld_servers ($$) {
|
|||
{
|
||||
last PIDSOCKFILEREMOVED;
|
||||
}
|
||||
if ( $loop % 20 == 1 )
|
||||
{
|
||||
mtr_warning("Still processes alive after 10 seconds, retrying for $loop seconds...");
|
||||
}
|
||||
mtr_debug("Sleep for 1 second waiting for pid and socket file removal");
|
||||
sleep(1); # One second
|
||||
}
|
||||
|
@ -464,4 +467,40 @@ sub stop_reap_all {
|
|||
$SIG{CHLD}= 'DEFAULT';
|
||||
}
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Wait for a file to be created
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
sub sleep_until_file_created ($$) {
|
||||
my $pidfile= shift;
|
||||
my $timeout= shift;
|
||||
|
||||
my $loop= $timeout;
|
||||
while ( $loop-- )
|
||||
{
|
||||
if ( -r $pidfile )
|
||||
{
|
||||
return;
|
||||
}
|
||||
mtr_debug("Sleep for 1 second waiting for creation of $pidfile");
|
||||
|
||||
if ( $loop % 20 == 1 )
|
||||
{
|
||||
mtr_warning("Waiting for $pidfile to be created, still trying for $loop seconds...");
|
||||
}
|
||||
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
if ( ! -r $pidfile )
|
||||
{
|
||||
mtr_error("No $pidfile was created");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
1;
|
||||
|
|
|
@ -232,6 +232,8 @@ our $opt_local_master;
|
|||
our $master; # Will be struct in C
|
||||
our $slave;
|
||||
|
||||
our $opt_master_myport;
|
||||
our $opt_slave_myport;
|
||||
our $opt_ndbcluster_port;
|
||||
our $opt_ndbconnectstring;
|
||||
|
||||
|
@ -248,16 +250,10 @@ our $opt_skip_rpl;
|
|||
our $opt_skip_test;
|
||||
|
||||
our $opt_sleep;
|
||||
|
||||
our $opt_ps_protocol;
|
||||
|
||||
# FIXME all of the sleep time handling needs cleanup
|
||||
our $opt_sleep_time_after_restart= 1;
|
||||
our $opt_sleep_time_for_delete= 10;
|
||||
our $opt_sleep_time_for_first_master= 400; # enough time create innodb tables
|
||||
our $opt_sleep_time_for_second_master= 400;
|
||||
our $opt_sleep_time_for_first_slave= 400;
|
||||
our $opt_sleep_time_for_second_slave= 30;
|
||||
our $opt_sleep_time_after_restart= 1;
|
||||
our $opt_sleep_time_for_delete= 10;
|
||||
|
||||
our $opt_socket;
|
||||
|
||||
|
@ -270,7 +266,7 @@ our $opt_strace_client;
|
|||
|
||||
our $opt_timer;
|
||||
|
||||
|
||||
our $opt_user;
|
||||
our $opt_user_test;
|
||||
|
||||
our $opt_valgrind;
|
||||
|
@ -299,6 +295,7 @@ sub main ();
|
|||
sub initial_setup ();
|
||||
sub command_line_setup ();
|
||||
sub executable_setup ();
|
||||
sub environment_setup ();
|
||||
sub kill_and_cleanup ();
|
||||
sub collect_test_cases ($);
|
||||
sub sleep_until_file_created ($$);
|
||||
|
@ -332,6 +329,7 @@ sub main () {
|
|||
initial_setup();
|
||||
command_line_setup();
|
||||
executable_setup();
|
||||
environment_setup();
|
||||
signal_setup();
|
||||
|
||||
if ( $opt_gcov )
|
||||
|
@ -449,12 +447,9 @@ sub command_line_setup () {
|
|||
$path_manager_log= "$glob_mysql_test_dir/var/log/manager.log";
|
||||
$opt_current_test= "$glob_mysql_test_dir/var/log/current_test";
|
||||
|
||||
my $opt_master_myport= 9306;
|
||||
my $opt_slave_myport= 9308;
|
||||
$opt_ndbcluster_port= 9350;
|
||||
$opt_sleep_time_for_delete= 10;
|
||||
|
||||
my $opt_user;
|
||||
$opt_master_myport= 9306;
|
||||
$opt_slave_myport= 9308;
|
||||
$opt_ndbcluster_port= 9350;
|
||||
|
||||
# Read the command line
|
||||
# Note: Keep list, and the order, in sync with usage at end of this file
|
||||
|
@ -545,6 +540,7 @@ sub command_line_setup () {
|
|||
$master->[0]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/master.pid";
|
||||
$master->[0]->{'path_mysock'}= "$opt_tmpdir/master.sock";
|
||||
$master->[0]->{'path_myport'}= $opt_master_myport;
|
||||
$master->[0]->{'start_timeout'}= 400; # enough time create innodb tables
|
||||
|
||||
$master->[1]->{'path_myddir'}= "$glob_mysql_test_dir/var/master1-data";
|
||||
$master->[1]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/master1.err";
|
||||
|
@ -552,6 +548,7 @@ sub command_line_setup () {
|
|||
$master->[1]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/master1.pid";
|
||||
$master->[1]->{'path_mysock'}= "$opt_tmpdir/master1.sock";
|
||||
$master->[1]->{'path_myport'}= $opt_master_myport + 1;
|
||||
$master->[1]->{'start_timeout'}= 400; # enough time create innodb tables
|
||||
|
||||
$slave->[0]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave-data";
|
||||
$slave->[0]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave.err";
|
||||
|
@ -559,6 +556,7 @@ sub command_line_setup () {
|
|||
$slave->[0]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave.pid";
|
||||
$slave->[0]->{'path_mysock'}= "$opt_tmpdir/slave.sock";
|
||||
$slave->[0]->{'path_myport'}= $opt_slave_myport;
|
||||
$slave->[0]->{'start_timeout'}= 400;
|
||||
|
||||
$slave->[1]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave1-data";
|
||||
$slave->[1]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave1.err";
|
||||
|
@ -566,6 +564,7 @@ sub command_line_setup () {
|
|||
$slave->[1]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave1.pid";
|
||||
$slave->[1]->{'path_mysock'}= "$opt_tmpdir/slave1.sock";
|
||||
$slave->[1]->{'path_myport'}= $opt_slave_myport + 1;
|
||||
$slave->[1]->{'start_timeout'}= 30;
|
||||
|
||||
$slave->[2]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave2-data";
|
||||
$slave->[2]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave2.err";
|
||||
|
@ -573,6 +572,7 @@ sub command_line_setup () {
|
|||
$slave->[2]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave2.pid";
|
||||
$slave->[2]->{'path_mysock'}= "$opt_tmpdir/slave2.sock";
|
||||
$slave->[2]->{'path_myport'}= $opt_slave_myport + 2;
|
||||
$slave->[2]->{'start_timeout'}= 30;
|
||||
|
||||
# Do sanity checks of command line arguments
|
||||
|
||||
|
@ -594,16 +594,6 @@ sub command_line_setup () {
|
|||
$master->[0]->{'path_mysock'}= $opt_socket;
|
||||
}
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Set LD_LIBRARY_PATH if we are using shared libraries
|
||||
# --------------------------------------------------------------------------
|
||||
$ENV{'LD_LIBRARY_PATH'}=
|
||||
"$glob_basedir/lib:$glob_basedir/libmysql/.libs" .
|
||||
($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : "");
|
||||
$ENV{'DYLD_LIBRARY_PATH'}=
|
||||
"$glob_basedir/lib:$glob_basedir/libmysql/.libs" .
|
||||
($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : "");
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Look at the command line options and set script flags
|
||||
# --------------------------------------------------------------------------
|
||||
|
@ -741,7 +731,7 @@ sub executable_setup () {
|
|||
}
|
||||
else
|
||||
{
|
||||
mtr_error("Cannot find embedded server 'mysqltest'");
|
||||
mtr_error("Can't find embedded server 'mysqltest'");
|
||||
}
|
||||
$path_tests_bindir= "$glob_basedir/libmysqld/examples";
|
||||
}
|
||||
|
@ -831,6 +821,41 @@ sub executable_setup () {
|
|||
}
|
||||
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Set environment to be used by childs of this process
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Note that some env is setup in spawn/run, in "mtr_process.pl"
|
||||
|
||||
sub environment_setup () {
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Set LD_LIBRARY_PATH if we are using shared libraries
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
$ENV{'LD_LIBRARY_PATH'}=
|
||||
"$glob_basedir/lib:$glob_basedir/libmysql/.libs" .
|
||||
($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : "");
|
||||
$ENV{'DYLD_LIBRARY_PATH'}=
|
||||
"$glob_basedir/lib:$glob_basedir/libmysql/.libs" .
|
||||
($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : "");
|
||||
|
||||
# --------------------------------------------------------------------------
|
||||
# Also command lines in .opt files may contain env vars
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
$ENV{'LC_COLLATE'}= "C";
|
||||
$ENV{'MYSQL_TEST_DIR'}= $glob_mysql_test_dir;
|
||||
$ENV{'MASTER_MYPORT'}= $opt_master_myport;
|
||||
$ENV{'SLAVE_MYPORT'}= $opt_slave_myport;
|
||||
# $ENV{'MYSQL_TCP_PORT'}= '@MYSQL_TCP_PORT@'; # FIXME
|
||||
$ENV{'MYSQL_TCP_PORT'}= 3306;
|
||||
$ENV{'MASTER_MYSOCK'}= $master->[0]->{'path_mysock'};
|
||||
}
|
||||
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# If we get a ^C, we try to clean up before termination
|
||||
|
@ -922,6 +947,7 @@ sub collect_test_cases ($) {
|
|||
# ----------------------------------------------------------------------
|
||||
|
||||
$tinfo->{'path'}= $path;
|
||||
$tinfo->{'timezone'}= "GMT-3"; # for UNIX_TIMESTAMP tests to work
|
||||
|
||||
if ( defined mtr_match_prefix($tname,"rpl") )
|
||||
{
|
||||
|
@ -967,7 +993,7 @@ sub collect_test_cases ($) {
|
|||
|
||||
if ( defined $value )
|
||||
{
|
||||
$ENV{'TZ'}= $value; # FIXME pass this on somehow....
|
||||
$tinfo->{'timezone'}= $value;
|
||||
$extra_master_opt= [];
|
||||
$tinfo->{'master_restart'}= 0;
|
||||
last;
|
||||
|
@ -1071,6 +1097,7 @@ sub kill_and_cleanup () {
|
|||
# leftovers from previous runs.
|
||||
|
||||
mtr_report("Killing Possible Leftover Processes");
|
||||
mkpath("$glob_mysql_test_dir/var/log"); # Needed for mysqladmin log
|
||||
mtr_kill_leftovers();
|
||||
}
|
||||
|
||||
|
@ -1092,52 +1119,28 @@ sub kill_and_cleanup () {
|
|||
mkpath("$glob_mysql_test_dir/var/tmp");
|
||||
mkpath($opt_tmpdir);
|
||||
|
||||
# FIXME do we really need to create these all, or are they
|
||||
# created for us when tables are created?
|
||||
|
||||
rmtree("$master->[0]->{'path_myddir'}");
|
||||
mkpath("$master->[0]->{'path_myddir'}/mysql"); # Need to create subdir?!
|
||||
mkpath("$master->[0]->{'path_myddir'}/mysql");
|
||||
mkpath("$master->[0]->{'path_myddir'}/test");
|
||||
|
||||
rmtree("$master->[1]->{'path_myddir'}");
|
||||
mkpath("$master->[1]->{'path_myddir'}/mysql"); # Need to create subdir?!
|
||||
mkpath("$master->[1]->{'path_myddir'}/mysql");
|
||||
mkpath("$master->[1]->{'path_myddir'}/test");
|
||||
|
||||
rmtree("$slave->[0]->{'path_myddir'}");
|
||||
mkpath("$slave->[0]->{'path_myddir'}/mysql"); # Need to create subdir?!
|
||||
mkpath("$slave->[0]->{'path_myddir'}/mysql");
|
||||
mkpath("$slave->[0]->{'path_myddir'}/test");
|
||||
|
||||
rmtree("$slave->[1]->{'path_myddir'}");
|
||||
mkpath("$slave->[1]->{'path_myddir'}/mysql"); # Need to create subdir?!
|
||||
mkpath("$slave->[1]->{'path_myddir'}/mysql");
|
||||
mkpath("$slave->[1]->{'path_myddir'}/test");
|
||||
|
||||
rmtree("$slave->[2]->{'path_myddir'}");
|
||||
mkpath("$slave->[2]->{'path_myddir'}/mysql"); # Need to create subdir?!
|
||||
mkpath("$slave->[2]->{'path_myddir'}/mysql");
|
||||
mkpath("$slave->[2]->{'path_myddir'}/test");
|
||||
|
||||
$opt_wait_for_master= $opt_sleep_time_for_first_master;
|
||||
$opt_wait_for_slave= $opt_sleep_time_for_first_slave;
|
||||
}
|
||||
|
||||
|
||||
# FIXME
|
||||
|
||||
sub sleep_until_file_created ($$) {
|
||||
my $pidfile= shift;
|
||||
my $timeout= shift;
|
||||
|
||||
my $loop= $timeout * 2;
|
||||
while ( $loop-- )
|
||||
{
|
||||
if ( -r $pidfile )
|
||||
{
|
||||
return;
|
||||
}
|
||||
mtr_debug("Sleep for 1 second waiting for creation of $pidfile");
|
||||
sleep(1);
|
||||
}
|
||||
|
||||
if ( ! -r $pidfile )
|
||||
{
|
||||
mtr_error("No $pidfile was created");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1251,11 +1254,11 @@ sub run_suite () {
|
|||
|
||||
mtr_print_thick_line();
|
||||
|
||||
mtr_report("Finding Tests in $suite suite");
|
||||
mtr_report("Finding Tests in the '$suite' suite");
|
||||
|
||||
my $tests= collect_test_cases($suite);
|
||||
|
||||
mtr_report("Starting Tests in $suite suite");
|
||||
mtr_report("Starting Tests in the '$suite' suite");
|
||||
|
||||
mtr_print_header();
|
||||
|
||||
|
@ -1412,6 +1415,8 @@ sub run_testcase ($) {
|
|||
# the preparation.
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
$ENV{'TZ'}= $tinfo->{'timezone'};
|
||||
|
||||
mtr_report_test_name($tinfo);
|
||||
|
||||
mtr_tofile($master->[0]->{'path_myerr'},"CURRENT_TEST: $tname\n");
|
||||
|
@ -1778,6 +1783,7 @@ sub mysqld_arguments ($$$$$) {
|
|||
}
|
||||
|
||||
# FIXME strange,.....
|
||||
# FIXME MYSQL_MYPORT is not set anythere?!
|
||||
if ( $opt_local_master )
|
||||
{
|
||||
mtr_add_arg($args, "%s--host=127.0.0.1", $prefix);
|
||||
|
@ -1888,8 +1894,7 @@ sub mysqld_start ($$$$) {
|
|||
$master->[$idx]->{'path_myerr'}, "") )
|
||||
{
|
||||
sleep_until_file_created($master->[$idx]->{'path_mypid'},
|
||||
$opt_wait_for_master);
|
||||
$opt_wait_for_master= $opt_sleep_time_for_second_master;
|
||||
$master->[$idx]->{'start_timeout'});
|
||||
return $pid;
|
||||
}
|
||||
}
|
||||
|
@ -1901,8 +1906,7 @@ sub mysqld_start ($$$$) {
|
|||
$slave->[$idx]->{'path_myerr'}, "") )
|
||||
{
|
||||
sleep_until_file_created($slave->[$idx]->{'path_mypid'},
|
||||
$opt_wait_for_slave);
|
||||
$opt_wait_for_slave= $opt_sleep_time_for_second_slave;
|
||||
$master->[$idx]->{'start_timeout'});
|
||||
return $pid;
|
||||
}
|
||||
}
|
||||
|
@ -1970,7 +1974,6 @@ sub run_mysqltest ($$) {
|
|||
my $tinfo= shift;
|
||||
my $master_opts= shift;
|
||||
|
||||
# FIXME set where????
|
||||
my $cmdline_mysqldump= "$exe_mysqldump --no-defaults -uroot " .
|
||||
"--socket=$master->[0]->{'path_mysock'} --password=";
|
||||
if ( $opt_debug )
|
||||
|
@ -1992,6 +1995,9 @@ sub run_mysqltest ($$) {
|
|||
"$exe_mysql --host=localhost --port=$master->[0]->{'path_myport'} " .
|
||||
"--socket=$master->[0]->{'path_mysock'} --user=root --password=";
|
||||
|
||||
# FIXME really needing a PATH???
|
||||
# $ENV{'PATH'}= "/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin:/usr/bin/X11:$ENV{'PATH'}";
|
||||
|
||||
$ENV{'MYSQL'}= $exe_mysql;
|
||||
$ENV{'MYSQL_DUMP'}= $cmdline_mysqldump;
|
||||
$ENV{'MYSQL_BINLOG'}= $exe_mysqlbinlog;
|
||||
|
|
|
@ -241,6 +241,9 @@ USE_EMBEDDED_SERVER=""
|
|||
RESULT_EXT=""
|
||||
TEST_MODE="default"
|
||||
|
||||
NDB_MGMD_EXTRA_OPTS=
|
||||
NDBD_EXTRA_OPTS=
|
||||
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
--embedded-server) USE_EMBEDDED_SERVER=1 USE_MANAGER=0 NO_SLAVE=1 ; \
|
||||
|
@ -261,6 +264,10 @@ while test $# -gt 0; do
|
|||
--ndb-connectstring=*)
|
||||
USE_NDBCLUSTER="--ndbcluster" ;
|
||||
USE_RUNNING_NDBCLUSTER=`$ECHO "$1" | $SED -e "s;--ndb-connectstring=;;"` ;;
|
||||
--ndb_mgmd-extra-opts=*)
|
||||
NDB_MGMD_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndb_mgmd-extra-opts=;;"` ;;
|
||||
--ndbd-extra-opts=*)
|
||||
NDBD_EXTRA_OPTS=`$ECHO "$1" | $SED -e "s;--ndbd-extra-opts=;;"` ;;
|
||||
--tmpdir=*) MYSQL_TMP_DIR=`$ECHO "$1" | $SED -e "s;--tmpdir=;;"` ;;
|
||||
--local-master)
|
||||
MASTER_MYPORT=3306;
|
||||
|
@ -427,6 +434,9 @@ while test $# -gt 0; do
|
|||
--fast)
|
||||
FAST_START=1
|
||||
;;
|
||||
--use-old-data)
|
||||
USE_OLD_DATA=1;
|
||||
;;
|
||||
-- ) shift; break ;;
|
||||
--* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
|
||||
* ) break ;;
|
||||
|
@ -460,7 +470,7 @@ SMALL_SERVER="--key_buffer_size=1M --sort_buffer=256K --max_heap_table_size=1M"
|
|||
export MASTER_MYPORT MASTER_MYPORT1 SLAVE_MYPORT MYSQL_TCP_PORT MASTER_MYSOCK MASTER_MYSOCK1
|
||||
|
||||
NDBCLUSTER_BASE_PORT=`expr $NDBCLUSTER_PORT + 2`
|
||||
NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --port-base=$NDBCLUSTER_BASE_PORT --data-dir=$MYSQL_TEST_DIR/var"
|
||||
NDBCLUSTER_OPTS="--port=$NDBCLUSTER_PORT --port-base=$NDBCLUSTER_BASE_PORT --data-dir=$MYSQL_TEST_DIR/var --ndb_mgmd-extra-opts=\"$NDB_MGMD_EXTRA_OPTS\" --ndbd-extra-opts=\"$NDBD_EXTRA_OPTS\""
|
||||
|
||||
if [ x$SOURCE_DIST = x1 ] ; then
|
||||
MY_BASEDIR=$MYSQL_TEST_DIR
|
||||
|
@ -530,6 +540,7 @@ if [ x$SOURCE_DIST = x1 ] ; then
|
|||
INSTALL_DB="./install_test_db"
|
||||
MYSQL_FIX_SYSTEM_TABLES="$BASEDIR/scripts/mysql_fix_privilege_tables"
|
||||
NDB_TOOLS_DIR="$BASEDIR/ndb/tools"
|
||||
NDB_MGM="$BASEDIR/ndb/src/mgmclient/ndb_mgm"
|
||||
else
|
||||
if test -x "$BASEDIR/libexec/mysqld"
|
||||
then
|
||||
|
@ -538,7 +549,12 @@ else
|
|||
MYSQLD="$VALGRIND $BASEDIR/bin/mysqld"
|
||||
fi
|
||||
CLIENT_BINDIR="$BASEDIR/bin"
|
||||
TESTS_BINDIR="$BASEDIR/bin"
|
||||
if test -d "$BASEDIR/tests"
|
||||
then
|
||||
TESTS_BINDIR="$BASEDIR/tests"
|
||||
else
|
||||
TESTS_BINDIR="$BASEDIR/bin"
|
||||
fi
|
||||
MYSQL_TEST="$CLIENT_BINDIR/mysqltest"
|
||||
MYSQL_DUMP="$CLIENT_BINDIR/mysqldump"
|
||||
MYSQL_BINLOG="$CLIENT_BINDIR/mysqlbinlog"
|
||||
|
@ -551,6 +567,7 @@ else
|
|||
INSTALL_DB="./install_test_db --bin"
|
||||
MYSQL_FIX_SYSTEM_TABLES="$CLIENT_BINDIR/mysql_fix_privilege_tables"
|
||||
NDB_TOOLS_DIR="$CLIENT_BINDIR"
|
||||
NDB_MGM="$CLIENT_BINDIR/ndb_mgm"
|
||||
if test -d "$BASEDIR/share/mysql/english"
|
||||
then
|
||||
LANGUAGE="$BASEDIR/share/mysql/english/"
|
||||
|
@ -600,6 +617,7 @@ MYSQL="$MYSQL --host=localhost --port=$MASTER_MYPORT --socket=$MASTER_MYSOCK --u
|
|||
export MYSQL MYSQL_DUMP MYSQL_BINLOG MYSQL_FIX_SYSTEM_TABLES
|
||||
export CLIENT_BINDIR TESTS_BINDIR CHARSETSDIR
|
||||
export NDB_TOOLS_DIR
|
||||
export NDB_MGM
|
||||
|
||||
MYSQL_TEST_ARGS="--no-defaults --socket=$MASTER_MYSOCK --database=$DB \
|
||||
--user=$DBUSER --password=$DBPASSWD --silent -v --skip-safemalloc \
|
||||
|
@ -768,12 +786,14 @@ report_stats () {
|
|||
|
||||
mysql_install_db () {
|
||||
$ECHO "Removing Stale Files"
|
||||
$RM -rf $MASTER_MYDDIR $MASTER_MYDDIR"1" $SLAVE_MYDDIR $MY_LOG_DIR/*
|
||||
$ECHO "Installing Master Databases"
|
||||
$INSTALL_DB
|
||||
if [ $? != 0 ]; then
|
||||
if [ -z "$USE_OLD_DATA" ]; then
|
||||
$RM -rf $MASTER_MYDDIR $MASTER_MYDDIR"1"
|
||||
$ECHO "Installing Master Databases"
|
||||
$INSTALL_DB
|
||||
if [ $? != 0 ]; then
|
||||
error "Could not install master test DBs"
|
||||
exit 1
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
if [ ! -z "$USE_NDBCLUSTER" ]
|
||||
then
|
||||
|
@ -785,6 +805,7 @@ mysql_install_db () {
|
|||
fi
|
||||
fi
|
||||
$ECHO "Installing Slave Databases"
|
||||
$RM -rf $SLAVE_MYDDIR $MY_LOG_DIR/*
|
||||
$INSTALL_DB -slave
|
||||
if [ $? != 0 ]; then
|
||||
error "Could not install slave test DBs"
|
||||
|
@ -952,7 +973,13 @@ start_ndbcluster()
|
|||
else
|
||||
NDBCLUSTER_EXTRA_OPTS="--small"
|
||||
fi
|
||||
./ndb/ndbcluster $NDBCLUSTER_OPTS $NDBCLUSTER_EXTRA_OPTS --initial || exit 1
|
||||
NDB_STARTED=1
|
||||
./ndb/ndbcluster $NDBCLUSTER_OPTS $NDBCLUSTER_EXTRA_OPTS --initial || NDB_STARTED=0
|
||||
if [ x$NDB_STARTED != x1 ] ; then
|
||||
if [ x$FORCE != x1 ] ; then
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
NDB_CONNECTSTRING="host=localhost:$NDBCLUSTER_PORT"
|
||||
else
|
||||
NDB_CONNECTSTRING="$USE_RUNNING_NDBCLUSTER"
|
||||
|
|
|
@ -58,6 +58,9 @@ ndb_con_op=105000
|
|||
ndb_dmem=80M
|
||||
ndb_imem=24M
|
||||
|
||||
NDB_MGMD_EXTRA_OPTS=
|
||||
NDBD_EXTRA_OPTS=
|
||||
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
--test)
|
||||
|
@ -94,6 +97,12 @@ while test $# -gt 0; do
|
|||
--port-base=*)
|
||||
port_base=`echo "$1" | sed -e "s;--port-base=;;"`
|
||||
;;
|
||||
--ndb_mgmd-extra-opts=*)
|
||||
NDB_MGMD_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndb_mgmd-extra-opts=;;"`
|
||||
;;
|
||||
--ndbd-extra-opts=*)
|
||||
NDBD_EXTRA_OPTS=`echo "$1" | sed -e "s;--ndbd-extra-opts=;;"`
|
||||
;;
|
||||
-- ) shift; break ;;
|
||||
--* ) $ECHO "Unrecognized option: $1"; exit 1 ;;
|
||||
* ) break ;;
|
||||
|
@ -122,8 +131,8 @@ if [ ! -x "$exec_waiter" ]; then
|
|||
fi
|
||||
|
||||
exec_mgmtclient="$exec_mgmtclient --no-defaults"
|
||||
exec_mgmtsrvr="$exec_mgmtsrvr --no-defaults"
|
||||
exec_ndb="$exec_ndb --no-defaults"
|
||||
exec_mgmtsrvr="$exec_mgmtsrvr --no-defaults $NDB_MGMD_EXTRA_OPTS"
|
||||
exec_ndb="$exec_ndb --no-defaults $NDBD_EXTRA_OPTS"
|
||||
exec_waiter="$exec_waiter --no-defaults"
|
||||
|
||||
ndb_host="localhost"
|
||||
|
|
|
@ -493,3 +493,7 @@ select hex(a) from t1;
|
|||
hex(a)
|
||||
F2E5F1F2
|
||||
drop table t1;
|
||||
create table t1 ( a timestamp );
|
||||
alter table t1 add unique ( a(1) );
|
||||
ERROR HY000: Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique sub keys
|
||||
drop table t1;
|
||||
|
|
|
@ -36,16 +36,16 @@ create table t2 select * from t1 where 0=1 procedure analyse();
|
|||
show create table t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`Field_name` varchar(255) NOT NULL default '',
|
||||
`Min_value` varchar(255) default NULL,
|
||||
`Max_value` varchar(255) default NULL,
|
||||
`Field_name` varbinary(255) NOT NULL default '',
|
||||
`Min_value` varbinary(255) default NULL,
|
||||
`Max_value` varbinary(255) default NULL,
|
||||
`Min_length` bigint(11) NOT NULL default '0',
|
||||
`Max_length` bigint(11) NOT NULL default '0',
|
||||
`Empties_or_zeros` bigint(11) NOT NULL default '0',
|
||||
`Nulls` bigint(11) NOT NULL default '0',
|
||||
`Avg_value_or_avg_length` varchar(255) NOT NULL default '',
|
||||
`Std` varchar(255) default NULL,
|
||||
`Optimal_fieldtype` varchar(64) NOT NULL default ''
|
||||
`Avg_value_or_avg_length` varbinary(255) NOT NULL default '',
|
||||
`Std` varbinary(255) default NULL,
|
||||
`Optimal_fieldtype` varbinary(64) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t1 where 0=1 procedure analyse();
|
||||
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
|
||||
|
@ -55,16 +55,16 @@ create table t2 select * from t1 where 0=1 procedure analyse();
|
|||
show create table t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`Field_name` varchar(255) NOT NULL default '',
|
||||
`Min_value` varchar(255) default NULL,
|
||||
`Max_value` varchar(255) default NULL,
|
||||
`Field_name` varbinary(255) NOT NULL default '',
|
||||
`Min_value` varbinary(255) default NULL,
|
||||
`Max_value` varbinary(255) default NULL,
|
||||
`Min_length` bigint(11) NOT NULL default '0',
|
||||
`Max_length` bigint(11) NOT NULL default '0',
|
||||
`Empties_or_zeros` bigint(11) NOT NULL default '0',
|
||||
`Nulls` bigint(11) NOT NULL default '0',
|
||||
`Avg_value_or_avg_length` varchar(255) NOT NULL default '',
|
||||
`Std` varchar(255) default NULL,
|
||||
`Optimal_fieldtype` varchar(64) NOT NULL default ''
|
||||
`Avg_value_or_avg_length` varbinary(255) NOT NULL default '',
|
||||
`Std` varbinary(255) default NULL,
|
||||
`Optimal_fieldtype` varbinary(64) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t2;
|
||||
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
|
||||
|
@ -78,16 +78,16 @@ create table t2 select * from t1 where 0=1 procedure analyse();
|
|||
show create table t2;
|
||||
Table Create Table
|
||||
t2 CREATE TABLE `t2` (
|
||||
`Field_name` varchar(255) NOT NULL default '',
|
||||
`Min_value` varchar(255) default NULL,
|
||||
`Max_value` varchar(255) default NULL,
|
||||
`Field_name` varbinary(255) NOT NULL default '',
|
||||
`Min_value` varbinary(255) default NULL,
|
||||
`Max_value` varbinary(255) default NULL,
|
||||
`Min_length` bigint(11) NOT NULL default '0',
|
||||
`Max_length` bigint(11) NOT NULL default '0',
|
||||
`Empties_or_zeros` bigint(11) NOT NULL default '0',
|
||||
`Nulls` bigint(11) NOT NULL default '0',
|
||||
`Avg_value_or_avg_length` varchar(255) NOT NULL default '',
|
||||
`Std` varchar(255) default NULL,
|
||||
`Optimal_fieldtype` varchar(64) NOT NULL default ''
|
||||
`Avg_value_or_avg_length` varbinary(255) NOT NULL default '',
|
||||
`Std` varbinary(255) default NULL,
|
||||
`Optimal_fieldtype` varbinary(64) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from t2;
|
||||
Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
|
||||
|
|
|
@ -98,10 +98,10 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`c1` varchar(1) character set latin1 collate latin1_danish_ci NOT NULL default '',
|
||||
`c2` varchar(1) character set latin1 collate latin1_danish_ci NOT NULL default '',
|
||||
`c3` varchar(1) NOT NULL default '',
|
||||
`c4` varchar(1) NOT NULL default '',
|
||||
`c5` varchar(3) NOT NULL default '',
|
||||
`c6` varchar(3) NOT NULL default '',
|
||||
`c3` varbinary(1) NOT NULL default '',
|
||||
`c4` varbinary(1) NOT NULL default '',
|
||||
`c5` varbinary(3) NOT NULL default '',
|
||||
`c6` varbinary(3) NOT NULL default '',
|
||||
`c7` double(3,1) NOT NULL default '0.0',
|
||||
`c8` double(3,1) NOT NULL default '0.0',
|
||||
`c9` double(3,1) default NULL
|
||||
|
@ -149,8 +149,8 @@ t1 CREATE TABLE `t1` (
|
|||
`COALESCE(1.0)` double(3,1) NOT NULL default '0.0',
|
||||
`COALESCE('a')` varchar(1) NOT NULL default '',
|
||||
`COALESCE(1,1.0)` double(3,1) NOT NULL default '0.0',
|
||||
`COALESCE(1,'1')` varchar(1) NOT NULL default '',
|
||||
`COALESCE(1.1,'1')` varchar(3) NOT NULL default '',
|
||||
`COALESCE(1,'1')` varbinary(1) NOT NULL default '',
|
||||
`COALESCE(1.1,'1')` varbinary(3) NOT NULL default '',
|
||||
`COALESCE('a' COLLATE latin1_bin,'b')` varchar(1) character set latin1 collate latin1_bin NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -204,7 +204,7 @@ show create table t1;
|
|||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
SET SESSION storage_engine="gemini";
|
||||
ERROR 42000: Unknown table engine 'gemini'
|
||||
|
@ -216,7 +216,7 @@ show create table t1;
|
|||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
SET SESSION storage_engine=default;
|
||||
drop table t1;
|
||||
create table t1 ( k1 varchar(2), k2 int, primary key(k1,k2));
|
||||
|
@ -361,7 +361,7 @@ show create table t1;
|
|||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
SET SESSION storage_engine="gemini";
|
||||
ERROR 42000: Unknown table engine 'gemini'
|
||||
|
@ -373,7 +373,7 @@ show create table t1;
|
|||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
SET SESSION storage_engine=default;
|
||||
drop table t1;
|
||||
create table t1(a int,b int,c int unsigned,d date,e char,f datetime,g time,h blob);
|
||||
|
|
|
@ -11315,3 +11315,23 @@ DROP TABLE t1;
|
|||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
SET collation_connection='cp932_japanese_ci';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
insert into t1 values ('a'), ('a '), ('a\t');
|
||||
select collation(a),hex(a) from t1 order by a;
|
||||
collation(a) hex(a)
|
||||
cp932_japanese_ci 6109
|
||||
cp932_japanese_ci 61
|
||||
cp932_japanese_ci 6120
|
||||
drop table t1;
|
||||
SET collation_connection='cp932_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
insert into t1 values ('a'), ('a '), ('a\t');
|
||||
select collation(a),hex(a) from t1 order by a;
|
||||
collation(a) hex(a)
|
||||
cp932_bin 6109
|
||||
cp932_bin 61
|
||||
cp932_bin 6120
|
||||
drop table t1;
|
||||
|
|
|
@ -9785,3 +9785,23 @@ DROP TABLE t1;
|
|||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
SET collation_connection='eucjpms_japanese_ci';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
insert into t1 values ('a'), ('a '), ('a\t');
|
||||
select collation(a),hex(a) from t1 order by a;
|
||||
collation(a) hex(a)
|
||||
eucjpms_japanese_ci 6109
|
||||
eucjpms_japanese_ci 61
|
||||
eucjpms_japanese_ci 6120
|
||||
drop table t1;
|
||||
SET collation_connection='eucjpms_bin';
|
||||
create table t1 select repeat('a',4000) a;
|
||||
delete from t1;
|
||||
insert into t1 values ('a'), ('a '), ('a\t');
|
||||
select collation(a),hex(a) from t1 order by a;
|
||||
collation(a) hex(a)
|
||||
eucjpms_bin 6109
|
||||
eucjpms_bin 61
|
||||
eucjpms_bin 6120
|
||||
drop table t1;
|
||||
|
|
|
@ -528,7 +528,7 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
|||
master-bin.000001 95 User var 1 135 @`v`=_ucs2 0x006100620063 COLLATE ucs2_general_ci
|
||||
master-bin.000001 135 Query 1 218 use `test`; insert into t2 values (@v)
|
||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||
SET @`v`:=_ucs2 0x006100620063 COLLATE ucs2_general_ci;
|
||||
SET @`v`:=_ucs2 0x006100620063 COLLATE `ucs2_general_ci`;
|
||||
use test;
|
||||
SET TIMESTAMP=10000;
|
||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
||||
|
|
|
@ -413,7 +413,7 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`c` char(10) character set utf8 default NULL,
|
||||
UNIQUE KEY `a` USING HASH (`c`(1))
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
insert into t1 values ('a'),('b'),('c'),('d'),('e'),('f');
|
||||
insert into t1 values ('aa');
|
||||
ERROR 23000: Duplicate entry 'aa' for key 1
|
||||
|
@ -449,7 +449,7 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`c` char(10) character set utf8 default NULL,
|
||||
UNIQUE KEY `a` USING BTREE (`c`(1))
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
insert into t1 values ('a'),('b'),('c'),('d'),('e'),('f');
|
||||
insert into t1 values ('aa');
|
||||
ERROR 23000: Duplicate entry 'aa' for key 1
|
||||
|
@ -571,7 +571,7 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`c` char(10) character set utf8 collate utf8_bin default NULL,
|
||||
UNIQUE KEY `a` USING HASH (`c`(1))
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
insert into t1 values ('a'),('b'),('c'),('d'),('e'),('f');
|
||||
insert into t1 values ('aa');
|
||||
ERROR 23000: Duplicate entry 'aa' for key 1
|
||||
|
@ -607,7 +607,7 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`c` char(10) character set utf8 collate utf8_bin default NULL,
|
||||
UNIQUE KEY `a` USING BTREE (`c`(1))
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
insert into t1 values ('a'),('b'),('c'),('d'),('e'),('f');
|
||||
insert into t1 values ('aa');
|
||||
ERROR 23000: Duplicate entry 'aa' for key 1
|
||||
|
@ -849,3 +849,15 @@ utf8_bin 6109
|
|||
utf8_bin 61
|
||||
utf8_bin 6120
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (
|
||||
user varchar(255) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES ('one'),('two');
|
||||
SELECT CHARSET('a');
|
||||
CHARSET('a')
|
||||
utf8
|
||||
SELECT user, CONCAT('<', user, '>') AS c FROM t1;
|
||||
user c
|
||||
one <one>
|
||||
two <two>
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -457,6 +457,11 @@ group_concat(distinct b order by b)
|
|||
Warnings:
|
||||
Warning 1260 2 line(s) were cut by GROUP_CONCAT()
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (id int);
|
||||
SELECT GROUP_CONCAT(id) AS gc FROM t1 HAVING gc IS NULL;
|
||||
gc
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
create table t1 (a char(3), b char(20), primary key (a, b));
|
||||
insert into t1 values ('ABW', 'Dutch'), ('ABW', 'English');
|
||||
select group_concat(a) from t1 group by b;
|
||||
|
|
|
@ -157,6 +157,14 @@ a
|
|||
bbbb
|
||||
цццц
|
||||
drop table t1;
|
||||
create table t1 (a char(10) character set latin1 not null);
|
||||
insert into t1 values ('a'),('b'),('c');
|
||||
select a from t1 where a IN ('a','b','c') order by a;
|
||||
a
|
||||
a
|
||||
b
|
||||
c
|
||||
drop table t1;
|
||||
set names latin1;
|
||||
select '1.0' in (1,2);
|
||||
'1.0' in (1,2)
|
||||
|
|
|
@ -107,13 +107,16 @@ timediff("1997-12-31 23:59:59.000001","1997-12-30 01:01:01.000002")
|
|||
46:58:57.999999
|
||||
select timediff("1997-12-30 23:59:59.000001","1997-12-31 23:59:59.000002");
|
||||
timediff("1997-12-30 23:59:59.000001","1997-12-31 23:59:59.000002")
|
||||
-23:59:59.999999
|
||||
-24:00:00.000001
|
||||
select timediff("1997-12-31 23:59:59.000001","23:59:59.000001");
|
||||
timediff("1997-12-31 23:59:59.000001","23:59:59.000001")
|
||||
NULL
|
||||
select timediff("2000:01:01 00:00:00", "2000:01:01 00:00:00.000001");
|
||||
timediff("2000:01:01 00:00:00", "2000:01:01 00:00:00.000001")
|
||||
-00:00:00.000001
|
||||
select timediff("2005-01-11 15:48:49.999999", "2005-01-11 15:48:50");
|
||||
timediff("2005-01-11 15:48:49.999999", "2005-01-11 15:48:50")
|
||||
-00:00:00.000001
|
||||
select maketime(10,11,12);
|
||||
maketime(10,11,12)
|
||||
10:11:12
|
||||
|
@ -185,7 +188,7 @@ f8 date YES NULL
|
|||
f9 time YES NULL
|
||||
select * from t1;
|
||||
f1 f2 f3 f4 f5 f6 f7 f8 f9
|
||||
1997-01-01 1998-01-02 01:01:00 49:01:01 46:58:57 -23:59:59 10:11:12 2001-12-01 01:01:01 1997-12-31 23:59:59
|
||||
1997-01-01 1998-01-02 01:01:00 49:01:01 46:58:57 -24:00:00 10:11:12 2001-12-01 01:01:01 1997-12-31 23:59:59
|
||||
create table test(t1 datetime, t2 time, t3 time, t4 datetime);
|
||||
insert into test values
|
||||
('2001-01-01 01:01:01', '01:01:01', null, '2001-02-01 01:01:01'),
|
||||
|
|
|
@ -466,7 +466,7 @@ collation(hex(130)) coercibility(hex(130))
|
|||
latin1_swedish_ci 3
|
||||
select collation(char(130)), coercibility(hex(130));
|
||||
collation(char(130)) coercibility(hex(130))
|
||||
binary 3
|
||||
latin1_swedish_ci 3
|
||||
select collation(format(130,10)), coercibility(format(130,10));
|
||||
collation(format(130,10)) coercibility(format(130,10))
|
||||
latin1_swedish_ci 3
|
||||
|
|
|
@ -266,7 +266,7 @@ t1 CREATE TABLE `t1` (
|
|||
`v` varchar(10) default NULL,
|
||||
`c` char(10) default NULL,
|
||||
`t` varchar(50) default NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
create table t2 like t1;
|
||||
show create table t2;
|
||||
Table Create Table
|
||||
|
@ -274,7 +274,7 @@ t2 CREATE TABLE `t2` (
|
|||
`v` varchar(10) default NULL,
|
||||
`c` char(10) default NULL,
|
||||
`t` varchar(50) default NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
create table t3 select * from t1;
|
||||
show create table t3;
|
||||
Table Create Table
|
||||
|
@ -282,7 +282,7 @@ t3 CREATE TABLE `t3` (
|
|||
`v` varchar(10) default NULL,
|
||||
`c` char(10) default NULL,
|
||||
`t` varchar(50) default NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
alter table t1 modify c varchar(10);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
|
@ -290,7 +290,7 @@ t1 CREATE TABLE `t1` (
|
|||
`v` varchar(10) default NULL,
|
||||
`c` varchar(10) default NULL,
|
||||
`t` varchar(50) default NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
alter table t1 modify v char(10);
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
|
@ -298,7 +298,7 @@ t1 CREATE TABLE `t1` (
|
|||
`v` char(10) default NULL,
|
||||
`c` varchar(10) default NULL,
|
||||
`t` varchar(50) default NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
alter table t1 modify t varchar(10);
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 't' at row 2
|
||||
|
@ -308,7 +308,7 @@ t1 CREATE TABLE `t1` (
|
|||
`v` char(10) default NULL,
|
||||
`c` varchar(10) default NULL,
|
||||
`t` varchar(10) default NULL
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
select concat('*',v,'*',c,'*',t,'*') from t1;
|
||||
concat('*',v,'*',c,'*',t,'*')
|
||||
*+*+*+ *
|
||||
|
@ -324,7 +324,7 @@ t1 CREATE TABLE `t1` (
|
|||
KEY `v` (`v`),
|
||||
KEY `c` (`c`),
|
||||
KEY `t` (`t`(10))
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
270
|
||||
|
@ -559,7 +559,7 @@ t1 CREATE TABLE `t1` (
|
|||
KEY `v` USING BTREE (`v`),
|
||||
KEY `c` USING BTREE (`c`),
|
||||
KEY `t` USING BTREE (`t`(10))
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
270
|
||||
|
@ -650,7 +650,7 @@ t1 CREATE TABLE `t1` (
|
|||
KEY `v` (`v`(5)),
|
||||
KEY `c` (`c`(5)),
|
||||
KEY `t` (`t`(5))
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 (v varchar(65530), key(v(10)));
|
||||
show create table t1;
|
||||
|
@ -658,7 +658,7 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`v` varchar(65530) default NULL,
|
||||
KEY `v` (`v`(10))
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
insert into t1 values(repeat('a',65530));
|
||||
select length(v) from t1 where v=repeat('a',65530);
|
||||
length(v)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
drop table if exists t1;
|
||||
drop table if exists t1,t2;
|
||||
create table t1
|
||||
(
|
||||
key1 int not null,
|
||||
|
|
|
@ -26,7 +26,7 @@ primary key (pk1, pk2)
|
|||
) engine=innodb;
|
||||
explain select * from t1 where pk1 = 1 and pk2 < 80 and key1=0;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ref PRIMARY,key1 PRIMARY 4 const 1 Using where
|
||||
1 SIMPLE t1 range PRIMARY,key1 PRIMARY 8 NULL 9 Using where
|
||||
select * from t1 where pk1 = 1 and pk2 < 80 and key1=0;
|
||||
pk1 pk2 key1 key2 pktail1ok pktail2ok pktail3bad pktail4bad pktail5bad pk2copy badkey filler1 filler2
|
||||
1 10 0 0 0 0 0 0 0 10 0 filler-data-10 filler2
|
||||
|
|
|
@ -478,7 +478,7 @@ character_sets CREATE TEMPORARY TABLE `character_sets` (
|
|||
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL default '',
|
||||
`DESCRIPTION` varchar(60) NOT NULL default '',
|
||||
`MAXLEN` bigint(3) NOT NULL default '0'
|
||||
) ENGINE=HEAP DEFAULT CHARSET=utf8 MAX_ROWS=1818
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8 MAX_ROWS=1818
|
||||
set names latin2;
|
||||
SHOW CREATE TABLE INFORMATION_SCHEMA.character_sets;
|
||||
Table Create Table
|
||||
|
@ -487,7 +487,7 @@ character_sets CREATE TEMPORARY TABLE `character_sets` (
|
|||
`DEFAULT_COLLATE_NAME` varchar(64) NOT NULL default '',
|
||||
`DESCRIPTION` varchar(60) NOT NULL default '',
|
||||
`MAXLEN` bigint(3) NOT NULL default '0'
|
||||
) ENGINE=HEAP DEFAULT CHARSET=utf8 MAX_ROWS=1818
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=utf8 MAX_ROWS=1818
|
||||
set names latin1;
|
||||
create table t1 select * from information_schema.CHARACTER_SETS
|
||||
where CHARACTER_SET_NAME like "latin1";
|
||||
|
@ -676,3 +676,6 @@ variable_name
|
|||
character_set_database
|
||||
collation_database
|
||||
skip_show_database
|
||||
show global status like "Threads_running";
|
||||
Variable_name Value
|
||||
Threads_running 1
|
||||
|
|
|
@ -1326,8 +1326,8 @@ truncate table t1;
|
|||
insert into t1 (a) values (NULL),(NULL);
|
||||
SELECT * from t1;
|
||||
a
|
||||
3
|
||||
4
|
||||
1
|
||||
2
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (`id 1` INT NOT NULL, PRIMARY KEY (`id 1`)) ENGINE=INNODB;
|
||||
CREATE TABLE t2 (id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id), FOREIGN KEY (`t1_id`) REFERENCES `t1`(`id 1`) ON DELETE CASCADE ) ENGINE=INNODB;
|
||||
|
@ -1690,13 +1690,13 @@ Variable_name Value
|
|||
Innodb_page_size 16384
|
||||
show status like "Innodb_rows_deleted";
|
||||
Variable_name Value
|
||||
Innodb_rows_deleted 2078
|
||||
Innodb_rows_deleted 2070
|
||||
show status like "Innodb_rows_inserted";
|
||||
Variable_name Value
|
||||
Innodb_rows_inserted 31706
|
||||
show status like "Innodb_rows_read";
|
||||
Variable_name Value
|
||||
Innodb_rows_read 80161
|
||||
Innodb_rows_read 80153
|
||||
show status like "Innodb_rows_updated";
|
||||
Variable_name Value
|
||||
Innodb_rows_updated 29530
|
||||
|
|
|
@ -784,32 +784,32 @@ t2.flag_value IS NULL;
|
|||
flag_name flag_value
|
||||
flag2 NULL
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE invoice (
|
||||
CREATE TABLE t1 (
|
||||
id int(11) unsigned NOT NULL auto_increment,
|
||||
text_id int(10) unsigned default NULL,
|
||||
PRIMARY KEY (id)
|
||||
);
|
||||
INSERT INTO invoice VALUES("1", "0");
|
||||
INSERT INTO invoice VALUES("2", "10");
|
||||
CREATE TABLE text_table (
|
||||
INSERT INTO t1 VALUES("1", "0");
|
||||
INSERT INTO t1 VALUES("2", "10");
|
||||
CREATE TABLE t2 (
|
||||
text_id char(3) NOT NULL default '',
|
||||
language_id char(3) NOT NULL default '',
|
||||
text_data text,
|
||||
PRIMARY KEY (text_id,language_id)
|
||||
);
|
||||
INSERT INTO text_table VALUES("0", "EN", "0-EN");
|
||||
INSERT INTO text_table VALUES("0", "SV", "0-SV");
|
||||
INSERT INTO text_table VALUES("10", "EN", "10-EN");
|
||||
INSERT INTO text_table VALUES("10", "SV", "10-SV");
|
||||
SELECT invoice.id, invoice.text_id, text_table.text_data
|
||||
FROM invoice LEFT JOIN text_table
|
||||
ON invoice.text_id = text_table.text_id
|
||||
AND text_table.language_id = 'SV'
|
||||
WHERE (invoice.id LIKE '%' OR text_table.text_data LIKE '%');
|
||||
INSERT INTO t2 VALUES("0", "EN", "0-EN");
|
||||
INSERT INTO t2 VALUES("0", "SV", "0-SV");
|
||||
INSERT INTO t2 VALUES("10", "EN", "10-EN");
|
||||
INSERT INTO t2 VALUES("10", "SV", "10-SV");
|
||||
SELECT t1.id, t1.text_id, t2.text_data
|
||||
FROM t1 LEFT JOIN t2
|
||||
ON t1.text_id = t2.text_id
|
||||
AND t2.language_id = 'SV'
|
||||
WHERE (t1.id LIKE '%' OR t2.text_data LIKE '%');
|
||||
id text_id text_data
|
||||
1 0 0-SV
|
||||
2 10 10-SV
|
||||
DROP TABLE invoice, text_table;
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t0 (a0 int PRIMARY KEY);
|
||||
CREATE TABLE t1 (a1 int PRIMARY KEY);
|
||||
CREATE TABLE t2 (a2 int);
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
drop table if exists t1,t2;
|
||||
select 1, 1.0, -1, "hello", NULL;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def 1 8 1 1 N 32769 0 8
|
||||
def 1.0 5 3 3 N 32769 1 8
|
||||
def -1 8 2 2 N 32769 0 8
|
||||
def 1 8 1 1 N 32897 0 63
|
||||
def 1.0 5 3 3 N 32897 1 63
|
||||
def -1 8 2 2 N 32897 0 63
|
||||
def hello 253 5 5 N 1 31 8
|
||||
def NULL 6 0 0 Y 32896 0 63
|
||||
1 1.0 -1 hello NULL
|
||||
|
|
|
@ -353,12 +353,17 @@ drop table t1;
|
|||
use test2;
|
||||
drop table t2;
|
||||
drop database test2;
|
||||
show databases;
|
||||
Database
|
||||
information_schema
|
||||
mysql
|
||||
test
|
||||
use test;
|
||||
drop database if exists test_only_ndb_tables;
|
||||
create database test_only_ndb_tables;
|
||||
use test_only_ndb_tables;
|
||||
create table t1 (a int primary key) engine=ndb;
|
||||
select * from t1;
|
||||
a
|
||||
select * from t1;
|
||||
ERROR HY000: Can't lock file (errno: 4009)
|
||||
use test;
|
||||
drop database test_only_ndb_tables;
|
||||
CREATE TABLE t9 (
|
||||
a int NOT NULL PRIMARY KEY,
|
||||
b int
|
||||
|
|
|
@ -740,3 +740,41 @@ a b
|
|||
1 2
|
||||
1 1
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
`sid` decimal(8,0) default null,
|
||||
`wnid` varchar(11) not null default '',
|
||||
key `wnid14` (`wnid`(4)),
|
||||
key `wnid` (`wnid`)
|
||||
) engine=myisam default charset=latin1;
|
||||
insert into t1 (`sid`, `wnid`) values
|
||||
('10100','01019000000'),('37986','01019000000'),('37987','01019010000'),
|
||||
('39560','01019090000'),('37989','01019000000'),('37990','01019011000'),
|
||||
('37991','01019011000'),('37992','01019019000'),('37993','01019030000'),
|
||||
('37994','01019090000'),('475','02070000000'),('25253','02071100000'),
|
||||
('25255','02071100000'),('25256','02071110000'),('25258','02071130000'),
|
||||
('25259','02071190000'),('25260','02071200000'),('25261','02071210000'),
|
||||
('25262','02071290000'),('25263','02071300000'),('25264','02071310000'),
|
||||
('25265','02071310000'),('25266','02071320000'),('25267','02071320000'),
|
||||
('25269','02071330000'),('25270','02071340000'),('25271','02071350000'),
|
||||
('25272','02071360000'),('25273','02071370000'),('25281','02071391000'),
|
||||
('25282','02071391000'),('25283','02071399000'),('25284','02071400000'),
|
||||
('25285','02071410000'),('25286','02071410000'),('25287','02071420000'),
|
||||
('25288','02071420000'),('25291','02071430000'),('25290','02071440000'),
|
||||
('25292','02071450000'),('25293','02071460000'),('25294','02071470000'),
|
||||
('25295','02071491000'),('25296','02071491000'),('25297','02071499000');
|
||||
explain select * from t1 where wnid like '0101%' order by wnid;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range wnid14,wnid wnid 13 NULL 10 Using where
|
||||
select * from t1 where wnid like '0101%' order by wnid;
|
||||
sid wnid
|
||||
10100 01019000000
|
||||
37986 01019000000
|
||||
37989 01019000000
|
||||
37987 01019010000
|
||||
37990 01019011000
|
||||
37991 01019011000
|
||||
37992 01019019000
|
||||
37993 01019030000
|
||||
39560 01019090000
|
||||
37994 01019090000
|
||||
drop table t1;
|
||||
|
|
|
@ -471,7 +471,7 @@ ERROR HY000: This command is not supported in the prepared statement protocol ye
|
|||
prepare stmt1 from ' explain select a from t1 order by b ';
|
||||
execute stmt1;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id 8 3 1 N 32801 0 8
|
||||
def id 8 3 1 N 32929 0 63
|
||||
def select_type 253 19 6 N 1 31 8
|
||||
def table 253 64 2 N 1 31 8
|
||||
def type 253 10 3 N 1 31 8
|
||||
|
@ -479,7 +479,7 @@ def possible_keys 253 4096 0 Y 0 31 8
|
|||
def key 253 64 0 Y 0 31 8
|
||||
def key_len 253 4096 0 Y 128 31 63
|
||||
def ref 253 1024 0 Y 0 31 8
|
||||
def rows 8 10 1 N 32801 0 8
|
||||
def rows 8 10 1 N 32929 0 63
|
||||
def Extra 253 255 14 N 1 31 8
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using filesort
|
||||
|
@ -487,7 +487,7 @@ SET @arg00=1 ;
|
|||
prepare stmt1 from ' explain select a from t1 where a > ? order by b ';
|
||||
execute stmt1 using @arg00;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id 8 3 1 N 32801 0 8
|
||||
def id 8 3 1 N 32929 0 63
|
||||
def select_type 253 19 6 N 1 31 8
|
||||
def table 253 64 2 N 1 31 8
|
||||
def type 253 10 5 N 1 31 8
|
||||
|
@ -495,7 +495,7 @@ def possible_keys 253 4096 7 Y 0 31 8
|
|||
def key 253 64 7 Y 0 31 8
|
||||
def key_len 253 4096 1 Y 128 31 63
|
||||
def ref 253 1024 0 Y 0 31 8
|
||||
def rows 8 10 1 N 32801 0 8
|
||||
def rows 8 10 1 N 32929 0 63
|
||||
def Extra 253 255 27 N 1 31 8
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 range PRIMARY PRIMARY 4 NULL 3 Using where; Using filesort
|
||||
|
|
|
@ -1145,7 +1145,7 @@ test_sequence
|
|||
prepare stmt1 from ' explain select * from t9 ' ;
|
||||
execute stmt1;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id 8 3 1 N 32801 0 8
|
||||
def id 8 3 1 N 32929 0 63
|
||||
def select_type 253 19 6 N 1 31 8
|
||||
def table 253 64 2 N 1 31 8
|
||||
def type 253 10 3 N 1 31 8
|
||||
|
@ -1153,7 +1153,7 @@ def possible_keys 253 4096 0 Y 0 31 8
|
|||
def key 253 64 0 Y 0 31 8
|
||||
def key_len 253 4096 0 Y 128 31 63
|
||||
def ref 253 1024 0 Y 0 31 8
|
||||
def rows 8 10 1 N 32801 0 8
|
||||
def rows 8 10 1 N 32929 0 63
|
||||
def Extra 253 255 0 N 1 31 8
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 2
|
||||
|
|
|
@ -1145,7 +1145,7 @@ test_sequence
|
|||
prepare stmt1 from ' explain select * from t9 ' ;
|
||||
execute stmt1;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id 8 3 1 N 32801 0 8
|
||||
def id 8 3 1 N 32929 0 63
|
||||
def select_type 253 19 6 N 1 31 8
|
||||
def table 253 64 2 N 1 31 8
|
||||
def type 253 10 3 N 1 31 8
|
||||
|
@ -1153,7 +1153,7 @@ def possible_keys 253 4096 0 Y 0 31 8
|
|||
def key 253 64 0 Y 0 31 8
|
||||
def key_len 253 4096 0 Y 128 31 63
|
||||
def ref 253 1024 0 Y 0 31 8
|
||||
def rows 8 10 1 N 32801 0 8
|
||||
def rows 8 10 1 N 32929 0 63
|
||||
def Extra 253 255 0 N 1 31 8
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 2
|
||||
|
|
|
@ -1146,7 +1146,7 @@ test_sequence
|
|||
prepare stmt1 from ' explain select * from t9 ' ;
|
||||
execute stmt1;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id 8 3 1 N 32801 0 8
|
||||
def id 8 3 1 N 32929 0 63
|
||||
def select_type 253 19 6 N 1 31 8
|
||||
def table 253 64 2 N 1 31 8
|
||||
def type 253 10 3 N 1 31 8
|
||||
|
@ -1154,7 +1154,7 @@ def possible_keys 253 4096 0 Y 0 31 8
|
|||
def key 253 64 0 Y 0 31 8
|
||||
def key_len 253 4096 0 Y 128 31 63
|
||||
def ref 253 1024 0 Y 0 31 8
|
||||
def rows 8 10 1 N 32801 0 8
|
||||
def rows 8 10 1 N 32929 0 63
|
||||
def Extra 253 255 0 N 1 31 8
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 2
|
||||
|
|
|
@ -1188,7 +1188,7 @@ test_sequence
|
|||
prepare stmt1 from ' explain select * from t9 ' ;
|
||||
execute stmt1;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id 8 3 1 N 32801 0 8
|
||||
def id 8 3 1 N 32929 0 63
|
||||
def select_type 253 19 6 N 1 31 8
|
||||
def table 253 64 2 N 1 31 8
|
||||
def type 253 10 3 N 1 31 8
|
||||
|
@ -1196,7 +1196,7 @@ def possible_keys 253 4096 0 Y 0 31 8
|
|||
def key 253 64 0 Y 0 31 8
|
||||
def key_len 253 4096 0 Y 128 31 63
|
||||
def ref 253 1024 0 Y 0 31 8
|
||||
def rows 8 10 1 N 32801 0 8
|
||||
def rows 8 10 1 N 32929 0 63
|
||||
def Extra 253 255 0 N 1 31 8
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 2
|
||||
|
@ -4197,7 +4197,7 @@ test_sequence
|
|||
prepare stmt1 from ' explain select * from t9 ' ;
|
||||
execute stmt1;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id 8 3 1 N 32801 0 8
|
||||
def id 8 3 1 N 32929 0 63
|
||||
def select_type 253 19 6 N 1 31 8
|
||||
def table 253 64 2 N 1 31 8
|
||||
def type 253 10 3 N 1 31 8
|
||||
|
@ -4205,7 +4205,7 @@ def possible_keys 253 4096 0 Y 0 31 8
|
|||
def key 253 64 0 Y 0 31 8
|
||||
def key_len 253 4096 0 Y 128 31 63
|
||||
def ref 253 1024 0 Y 0 31 8
|
||||
def rows 8 10 1 N 32801 0 8
|
||||
def rows 8 10 1 N 32929 0 63
|
||||
def Extra 253 255 0 N 1 31 8
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 2
|
||||
|
|
|
@ -1145,7 +1145,7 @@ test_sequence
|
|||
prepare stmt1 from ' explain select * from t9 ' ;
|
||||
execute stmt1;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id 8 3 1 N 32801 0 8
|
||||
def id 8 3 1 N 32929 0 63
|
||||
def select_type 253 19 6 N 1 31 8
|
||||
def table 253 64 2 N 1 31 8
|
||||
def type 253 10 3 N 1 31 8
|
||||
|
@ -1153,7 +1153,7 @@ def possible_keys 253 4096 0 Y 0 31 8
|
|||
def key 253 64 0 Y 0 31 8
|
||||
def key_len 253 4096 0 Y 128 31 63
|
||||
def ref 253 1024 0 Y 0 31 8
|
||||
def rows 8 10 1 N 32801 0 8
|
||||
def rows 8 10 1 N 32929 0 63
|
||||
def Extra 253 255 0 N 1 31 8
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 3
|
||||
|
|
|
@ -1145,7 +1145,7 @@ test_sequence
|
|||
prepare stmt1 from ' explain select * from t9 ' ;
|
||||
execute stmt1;
|
||||
Catalog Database Table Table_alias Column Column_alias Name Type Length Max length Is_null Flags Decimals Charsetnr
|
||||
def id 8 3 1 N 32801 0 8
|
||||
def id 8 3 1 N 32929 0 63
|
||||
def select_type 253 19 6 N 1 31 8
|
||||
def table 253 64 2 N 1 31 8
|
||||
def type 253 10 3 N 1 31 8
|
||||
|
@ -1153,7 +1153,7 @@ def possible_keys 253 4096 0 Y 0 31 8
|
|||
def key 253 64 0 Y 0 31 8
|
||||
def key_len 253 4096 0 Y 128 31 63
|
||||
def ref 253 1024 0 Y 0 31 8
|
||||
def rows 8 10 1 N 32801 0 8
|
||||
def rows 8 10 1 N 32929 0 63
|
||||
def Extra 253 255 0 N 1 31 8
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t9 ALL NULL NULL NULL NULL 2
|
||||
|
|
|
@ -315,57 +315,57 @@ insert into t2 values (1),(2);
|
|||
insert into t3 values (1,1),(2,2);
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 HEAP 9 Fixed 2 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 HEAP 9 Fixed 2 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 HEAP 9 Fixed 2 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t1 MEMORY 9 Fixed 2 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 MEMORY 9 Fixed 2 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 MEMORY 9 Fixed 2 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
insert into t1 values (3),(4);
|
||||
insert into t2 values (3),(4);
|
||||
insert into t3 values (3,3),(4,4);
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 HEAP 9 Fixed 4 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 HEAP 9 Fixed 4 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 HEAP 9 Fixed 4 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t1 MEMORY 9 Fixed 4 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 MEMORY 9 Fixed 4 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 MEMORY 9 Fixed 4 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
insert into t1 values (5);
|
||||
insert into t2 values (5);
|
||||
insert into t3 values (5,5);
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 HEAP 9 Fixed 5 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 HEAP 9 Fixed 5 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 HEAP 9 Fixed 5 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t1 MEMORY 9 Fixed 5 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 MEMORY 9 Fixed 5 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 MEMORY 9 Fixed 5 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
delete from t1 where a=3;
|
||||
delete from t2 where b=3;
|
||||
delete from t3 where a=3;
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 HEAP 9 Fixed 4 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 HEAP 9 Fixed 4 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 HEAP 9 Fixed 4 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t1 MEMORY 9 Fixed 4 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 MEMORY 9 Fixed 4 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 MEMORY 9 Fixed 4 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
delete from t3;
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 HEAP 9 Fixed 0 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 HEAP 9 Fixed 0 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 HEAP 9 Fixed 0 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t1 MEMORY 9 Fixed 0 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 MEMORY 9 Fixed 0 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 MEMORY 9 Fixed 0 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
insert into t1 values (5);
|
||||
insert into t2 values (5);
|
||||
insert into t3 values (5,5);
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 HEAP 9 Fixed 1 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 HEAP 9 Fixed 1 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 HEAP 9 Fixed 1 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t1 MEMORY 9 Fixed 1 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 MEMORY 9 Fixed 1 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 MEMORY 9 Fixed 1 # # # # 0 NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
delete from t1 where a=5;
|
||||
delete from t2 where b=5;
|
||||
delete from t3 where a=5;
|
||||
show table status;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 HEAP 9 Fixed 0 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 HEAP 9 Fixed 0 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 HEAP 9 Fixed 0 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t1 MEMORY 9 Fixed 0 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t2 MEMORY 9 Fixed 0 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
t3 MEMORY 9 Fixed 0 # # # # # NULL NULL NULL NULL latin1_swedish_ci NULL
|
||||
drop table t1, t2, t3;
|
||||
create database mysqltest;
|
||||
show create database mysqltest;
|
||||
|
@ -412,7 +412,7 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) default NULL,
|
||||
KEY `i` (`i`)
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (i int, KEY USING HASH (i)) ENGINE=MEMORY;
|
||||
SHOW CREATE TABLE t1;
|
||||
|
@ -420,7 +420,7 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) default NULL,
|
||||
KEY `i` USING HASH (`i`)
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (i int, KEY USING BTREE (i)) ENGINE=MEMORY;
|
||||
SHOW CREATE TABLE t1;
|
||||
|
@ -428,7 +428,7 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) default NULL,
|
||||
KEY `i` USING BTREE (`i`)
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (i int, KEY (i)) ENGINE=MyISAM;
|
||||
SHOW CREATE TABLE t1;
|
||||
|
@ -459,7 +459,7 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) default NULL,
|
||||
KEY `i` (`i`)
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (i int, KEY USING BTREE (i)) ENGINE=MyISAM;
|
||||
SHOW CREATE TABLE t1;
|
||||
|
@ -474,5 +474,5 @@ Table Create Table
|
|||
t1 CREATE TABLE `t1` (
|
||||
`i` int(11) default NULL,
|
||||
KEY `i` USING BTREE (`i`)
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -18,7 +18,7 @@ t1 CREATE TABLE `t1` (
|
|||
`email` varchar(60) character set latin2 NOT NULL default '',
|
||||
PRIMARY KEY (`a`),
|
||||
UNIQUE KEY `email` USING BTREE (`email`)
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
||||
set @@sql_mode="ansi_quotes";
|
||||
show variables like 'sql_mode';
|
||||
Variable_name Value
|
||||
|
@ -31,7 +31,7 @@ t1 CREATE TABLE "t1" (
|
|||
"email" varchar(60) character set latin2 NOT NULL default '',
|
||||
PRIMARY KEY ("a"),
|
||||
UNIQUE KEY "email" USING BTREE ("email")
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
||||
set @@sql_mode="no_table_options";
|
||||
show variables like 'sql_mode';
|
||||
Variable_name Value
|
||||
|
@ -57,7 +57,7 @@ t1 CREATE TABLE `t1` (
|
|||
`email` varchar(60) character set latin2 NOT NULL default '',
|
||||
PRIMARY KEY (`a`),
|
||||
UNIQUE KEY `email` (`email`)
|
||||
) ENGINE=HEAP DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
||||
) ENGINE=MEMORY DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC
|
||||
set @@sql_mode="no_field_options,mysql323,mysql40";
|
||||
show variables like 'sql_mode';
|
||||
Variable_name Value
|
||||
|
|
|
@ -768,7 +768,7 @@ INSERT INTO t1 VALUES (-2.2E-307,0),(+1.7E+308,+1.7E+308);
|
|||
INSERT INTO t1 VALUES ('-2.2E-307',0),('+1.7E+308','+1.7E+308');
|
||||
INSERT INTO t1 (col1) VALUES (-2.2E-330);
|
||||
INSERT INTO t1 (col1) VALUES (+1.7E+309);
|
||||
ERROR 22007: Illegal double '1.7E+309' value found during parsing
|
||||
Got one of the listed errors
|
||||
INSERT INTO t1 (col2) VALUES (-1.1E-3);
|
||||
ERROR 22003: Out of range value adjusted for column 'col2' at row 1
|
||||
INSERT INTO t1 (col1) VALUES ('+1.8E+309');
|
||||
|
|
|
@ -2160,3 +2160,11 @@ WHERE f1 <> ALL ( SELECT SUM(f1) AS sf1 FROM t2 HAVING sf1 > 10000);
|
|||
f1
|
||||
NULL
|
||||
1
|
||||
drop table t1,t2;
|
||||
create table t1 (a1 int);
|
||||
create table t2 (b1 int);
|
||||
select * from t1 where a2 > any(select b1 from t2);
|
||||
ERROR 42S22: Unknown column 'a2' in 'scalar IN/ALL/ANY subquery'
|
||||
select * from t1 where a1 > any(select b1 from t2);
|
||||
a1
|
||||
drop table t1,t2;
|
||||
|
|
|
@ -45,6 +45,15 @@ alter table t9 rename t8, add column d int not null;
|
|||
alter table t8 rename t7;
|
||||
rename table t7 to t9;
|
||||
drop table t1;
|
||||
SHOW CREATE TABLE t9;
|
||||
Table Create Table
|
||||
t9 CREATE TABLE `t9` (
|
||||
`a` int(11) NOT NULL auto_increment,
|
||||
`b` char(16) NOT NULL,
|
||||
`c` int(11) NOT NULL,
|
||||
`d` int(11) NOT NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 DATA DIRECTORY='TEST_DIR/var/tmp/' INDEX DIRECTORY='TEST_DIR/var/run/'
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
|
|
|
@ -368,3 +368,14 @@ a+0
|
|||
44
|
||||
57
|
||||
drop table t1;
|
||||
create table t1 (a bit(3), b bit(12));
|
||||
insert into t1 values (7,(1<<12)-2), (0x01,0x01ff);
|
||||
select hex(a),hex(b) from t1;
|
||||
hex(a) hex(b)
|
||||
7 FFE
|
||||
1 1FF
|
||||
select hex(concat(a)),hex(concat(b)) from t1;
|
||||
hex(concat(a)) hex(concat(b))
|
||||
07 0FFE
|
||||
01 01FF
|
||||
drop table t1;
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
drop table if exists t1;
|
||||
drop table if exists t1,t2;
|
||||
SELECT 10,10.0,10.,.1e+2,100.0e-1;
|
||||
10 10.0 10. .1e+2 100.0e-1
|
||||
10 10.0 10 10 10
|
||||
|
@ -8,6 +8,9 @@ SELECT 6e-05, -6e-05, --6e-05, -6e-05+1.000000;
|
|||
SELECT 1e1,1.e1,1.0e1,1e+1,1.e+1,1.0e+1,1e-1,1.e-1,1.0e-1;
|
||||
1e1 1.e1 1.0e1 1e+1 1.e+1 1.0e+1 1e-1 1.e-1 1.0e-1
|
||||
10 10 10 10 10 10 0.1 0.1 0.1
|
||||
SELECT 0.001e+1,0.001e-1, -0.001e+01,-0.001e-01;
|
||||
0.001e+1 0.001e-1 -0.001e+01 -0.001e-01
|
||||
0.01 0.0001 -0.01 -0.0001
|
||||
create table t1 (f1 float(24),f2 float(52));
|
||||
show full columns from t1;
|
||||
Field Type Collation Null Key Default Extra Privileges Comment
|
||||
|
@ -143,6 +146,15 @@ drop table t1;
|
|||
create table t1 (f float(54));
|
||||
ERROR 42000: Incorrect column specifier for column 'f'
|
||||
drop table if exists t1;
|
||||
create table t1 (d1 double, d2 double unsigned);
|
||||
insert into t1 set d1 = -1.0;
|
||||
update t1 set d2 = d1;
|
||||
Warnings:
|
||||
Warning 1264 Out of range value adjusted for column 'd2' at row 1
|
||||
select * from t1;
|
||||
d1 d2
|
||||
-1 0
|
||||
drop table t1;
|
||||
create table t1 (f float(4,3));
|
||||
insert into t1 values (-11.0),(-11),("-11"),(11.0),(11),("11");
|
||||
Warnings:
|
||||
|
|
|
@ -426,3 +426,13 @@ max(t)
|
|||
2004-01-01 01:00:00
|
||||
2004-02-01 00:00:00
|
||||
drop table t1;
|
||||
set sql_mode='maxdb';
|
||||
create table t1 (a timestamp, b timestamp(19));
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE "t1" (
|
||||
"a" datetime default NULL,
|
||||
"b" datetime default NULL
|
||||
)
|
||||
set sql_mode='';
|
||||
drop table t1;
|
||||
|
|
|
@ -554,7 +554,7 @@ aa
|
|||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` varchar(20) NOT NULL default ''
|
||||
`a` varbinary(20) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t1;
|
||||
create table t1 SELECT 12 as a UNION select 12.2 as a;
|
||||
|
@ -872,6 +872,22 @@ count(*)
|
|||
show status like 'Slow_queries';
|
||||
Variable_name Value
|
||||
Slow_queries 7
|
||||
flush status;
|
||||
select a from t1 where b not in (1,2,3) union select a from t1 where b not in (4,5,6);
|
||||
a
|
||||
4
|
||||
5
|
||||
3
|
||||
6
|
||||
7
|
||||
8
|
||||
9
|
||||
10
|
||||
1
|
||||
2
|
||||
show status like 'Slow_queries';
|
||||
Variable_name Value
|
||||
Slow_queries 1
|
||||
drop table t1;
|
||||
create table t1 ( RID int(11) not null default '0', IID int(11) not null default '0', nada varchar(50) not null,NAME varchar(50) not null,PHONE varchar(50) not null) engine=MyISAM;
|
||||
insert into t1 ( RID,IID,nada,NAME,PHONE) values (1, 1, 'main', 'a', '111'), (2, 1, 'main', 'b', '222'), (3, 1, 'main', 'c', '333'), (4, 1, 'main', 'd', '444'), (5, 1, 'main', 'e', '555'), (6, 2, 'main', 'c', '333'), (7, 2, 'main', 'd', '454'), (8, 2, 'main', 'e', '555'), (9, 2, 'main', 'f', '666'), (10, 2, 'main', 'g', '777');
|
||||
|
|
|
@ -172,23 +172,26 @@ SET TIMESTAMP=10000;
|
|||
SET @`a b`='hello';
|
||||
INSERT INTO t1 VALUES(@`a b`);
|
||||
set @var1= "';aaa";
|
||||
insert into t1 values (@var1);
|
||||
SET @var2=char(ascii('a'));
|
||||
insert into t1 values (@var1),(@var2);
|
||||
show binlog events from 95;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 95 User var 1 136 @`a b`=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci
|
||||
master-bin.000001 136 Query 1 222 use `test`; INSERT INTO t1 VALUES(@`a b`)
|
||||
master-bin.000001 222 User var 1 264 @`var1`=_latin1 0x273B616161 COLLATE latin1_swedish_ci
|
||||
master-bin.000001 264 Query 1 350 use `test`; insert into t1 values (@var1)
|
||||
master-bin.000001 264 User var 1 302 @`var2`=_latin1 0x61 COLLATE latin1_swedish_ci
|
||||
master-bin.000001 302 Query 1 396 use `test`; insert into t1 values (@var1),(@var2)
|
||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||
SET @`a b`:=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci;
|
||||
SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`;
|
||||
use test;
|
||||
SET TIMESTAMP=10000;
|
||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1;
|
||||
SET @@session.sql_mode=0;
|
||||
INSERT INTO t1 VALUES(@`a b`);
|
||||
SET @`var1`:=_latin1 0x273B616161 COLLATE latin1_swedish_ci;
|
||||
SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`;
|
||||
SET @`var2`:=_latin1 0x61 COLLATE `latin1_swedish_ci`;
|
||||
SET TIMESTAMP=10000;
|
||||
insert into t1 values (@var1);
|
||||
insert into t1 values (@var1),(@var2);
|
||||
drop table t1;
|
||||
set @var= NULL ;
|
||||
select FIELD( @var,'1it','Hit') as my_column;
|
||||
|
|
|
@ -1724,3 +1724,9 @@ a b
|
|||
301 0
|
||||
drop view v3;
|
||||
drop tables t1,t2;
|
||||
create table t1(f1 int);
|
||||
create view v1 as select f1 from t1;
|
||||
select * from v1 where F1 = 1;
|
||||
f1
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
|
|
@ -336,3 +336,14 @@ select hex(a) from t1;
|
|||
alter table t1 convert to character set cp1251;
|
||||
select hex(a) from t1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test for bug #7884 "Able to add invalid unique index on TIMESTAMP prefix"
|
||||
# MySQL should not think that packed field with non-zero decimals is
|
||||
# geometry field and allow to create prefix index which is
|
||||
# shorter than packed field length.
|
||||
#
|
||||
create table t1 ( a timestamp );
|
||||
--error 1089
|
||||
alter table t1 add unique ( a(1) );
|
||||
drop table t1;
|
||||
|
|
|
@ -294,7 +294,7 @@ select * from t2;
|
|||
create table t3 like t1;
|
||||
--error 1050
|
||||
create table t3 like mysqltest.t3;
|
||||
--error 1044,1
|
||||
--error ER_DBACCESS_DENIED_ERROR,1
|
||||
create table non_existing_database.t1 like t1;
|
||||
--error 1051
|
||||
create table t3 like non_existing_table;
|
||||
|
|
|
@ -395,3 +395,9 @@ DROP TABLE t1;
|
|||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
|
||||
|
||||
SET collation_connection='cp932_japanese_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
SET collation_connection='cp932_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
|
|
|
@ -342,3 +342,9 @@ DROP TABLE t1;
|
|||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
|
||||
|
||||
SET collation_connection='eucjpms_japanese_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
SET collation_connection='eucjpms_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
|
|
|
@ -681,3 +681,15 @@ SET collation_connection='utf8_general_ci';
|
|||
-- source include/ctype_filesort.inc
|
||||
SET collation_connection='utf8_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
|
||||
#
|
||||
# Bug #7874 CONCAT() gives wrong results mixing
|
||||
# latin1 field and utf8 string literals
|
||||
#
|
||||
CREATE TABLE t1 (
|
||||
user varchar(255) NOT NULL default ''
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
INSERT INTO t1 VALUES ('one'),('two');
|
||||
SELECT CHARSET('a');
|
||||
SELECT user, CONCAT('<', user, '>') AS c FROM t1;
|
||||
DROP TABLE t1;
|
||||
|
|
|
@ -278,6 +278,13 @@ select group_concat(distinct b order by b) from t1 group by a;
|
|||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# bug #7769: group_concat returning null is checked in having
|
||||
#
|
||||
CREATE TABLE t1 (id int);
|
||||
SELECT GROUP_CONCAT(id) AS gc FROM t1 HAVING gc IS NULL;
|
||||
DROP TABLE t1;
|
||||
|
||||
#
|
||||
# Bug #6475
|
||||
#
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue