#At file:///shared/home/df/mysql/bazaar/mysql-5.0-community-preconfigure/
2584 Daniel Fischer 2008-10-20 [merge]
merge mysql-5.0-preconfigure
removed:
extra/yassl/taocrypt/taocrypt.vcproj
extra/yassl/yassl.vcproj
mysql-test/t/rpl_view-slave.opt
server-tools/instance-manager/mysqlmanager.vcproj
added:
BUILD/preconfigure
mysql-test/r/innodb-autoinc-optimize.result
mysql-test/r/innodb_bug35220.result
mysql-test/r/parser_stack.result
mysql-test/t/innodb-autoinc-optimize.test
mysql-test/t/innodb_bug35220.test
mysql-test/t/parser_stack.test
win/build-vs9.bat
win/build-vs9_x64.bat
modified:
BUILD/Makefile.am
BUILD/check-cpu
CMakeLists.txt
client/mysql_upgrade.c
client/mysqldump.c
configure.in
extra/Makefile.am
include/myisam.h
innobase/buf/buf0buf.c
innobase/dict/dict0dict.c
innobase/include/buf0buf.h
innobase/include/srv0srv.h
innobase/include/trx0undo.h
innobase/srv/srv0srv.c
innobase/trx/trx0trx.c
innobase/trx/trx0undo.c
libmysql/dll.c
man/Makefile.am
myisam/mi_check.c
myisam/mi_create.c
myisam/mi_open.c
myisam/mi_static.c
myisam/myisamchk.c
myisam/myisamdef.h
myisam/rt_index.c
mysql-test/include/ndb_backup_print.inc
mysql-test/mysql-test-run.pl
mysql-test/r/binlog.result
mysql-test/r/client_xml.result
mysql-test/r/compare.result
mysql-test/r/create.result
mysql-test/r/ctype_cp932_binlog.result
mysql-test/r/default.result
mysql-test/r/distinct.result
mysql-test/r/federated.result
mysql-test/r/federated_bug_25714.result
mysql-test/r/func_if.result
mysql-test/r/func_misc.result
mysql-test/r/func_regexp.result
mysql-test/r/group_min_max.result
mysql-test/r/index_merge.result
mysql-test/r/information_schema_db.result
mysql-test/r/innodb_mysql.result
mysql-test/r/join.result
mysql-test/r/loaddata.result
mysql-test/r/lock_multi.result
mysql-test/r/metadata.result
mysql-test/r/myisam.result
mysql-test/r/mysqldump.result
mysql-test/r/ps_1general.result
mysql-test/r/ps_2myisam.result
mysql-test/r/ps_3innodb.result
mysql-test/r/ps_4heap.result
mysql-test/r/ps_5merge.result
mysql-test/r/ps_6bdb.result
mysql-test/r/ps_7ndb.result
mysql-test/r/query_cache_merge.result
mysql-test/r/rpl_grant.result
mysql-test/r/rpl_log.result
mysql-test/r/rpl_sp.result
mysql-test/r/show_check.result
mysql-test/r/sp-error.result
mysql-test/r/sp.result
mysql-test/r/subselect.result
mysql-test/r/symlink.result
mysql-test/r/type_bit.result
mysql-test/r/type_datetime.result
mysql-test/r/type_newdecimal.result
mysql-test/suite/funcs_1/views/func_view.inc
mysql-test/suite/funcs_2/charset/charset_master.test
mysql-test/suite/funcs_2/t/innodb_charset.test
mysql-test/suite/funcs_2/t/memory_charset.test
mysql-test/suite/funcs_2/t/myisam_charset.test
mysql-test/suite/funcs_2/t/ndb_charset.test
mysql-test/t/binlog.test
mysql-test/t/binlog_killed_simulate.test
mysql-test/t/binlog_start_comment.test
mysql-test/t/client_xml.test
mysql-test/t/compare.test
mysql-test/t/create.test
mysql-test/t/ctype_big5.test
mysql-test/t/default.test
mysql-test/t/disabled.def
mysql-test/t/distinct.test
mysql-test/t/federated.test
mysql-test/t/federated_bug_25714.test
mysql-test/t/func_if.test
mysql-test/t/func_misc.test
mysql-test/t/func_regexp.test
mysql-test/t/group_min_max.test
mysql-test/t/index_merge.test
mysql-test/t/information_schema_db.test
mysql-test/t/innodb_mysql.test
mysql-test/t/join.test
mysql-test/t/loaddata.test
mysql-test/t/lock_multi.test
mysql-test/t/myisam.test
mysql-test/t/mysqldump.test
mysql-test/t/ndb_autodiscover.test
mysql-test/t/ndb_loaddatalocal.test
mysql-test/t/ndb_restore_print.test
mysql-test/t/outfile.test
mysql-test/t/query_cache_merge.test
mysql-test/t/rpl_EE_error.test
mysql-test/t/rpl_ddl.test
mysql-test/t/rpl_grant.test
mysql-test/t/rpl_loaddatalocal.test
mysql-test/t/rpl_log-slave.opt
mysql-test/t/rpl_log.test
mysql-test/t/show_check.test
mysql-test/t/sp-error.test
mysql-test/t/sp.test
mysql-test/t/subselect.test
mysql-test/t/symlink.test
mysql-test/t/type_bit.test
mysql-test/t/type_datetime.test
mysql-test/t/type_newdecimal.test
mysys/mf_keycache.c
mysys/mf_pack.c
mysys/my_alloc.c
mysys/my_symlink.c
mysys/thr_lock.c
netware/BUILD/compile-linux-tools
netware/BUILD/nwbootstrap
netware/Makefile.am
netware/mysql_install_db.c
scripts/make_binary_distribution.sh
scripts/mysql_system_tables_data.sql
sql/field.cc
sql/field.h
sql/filesort.cc
sql/ha_federated.cc
sql/ha_innodb.cc
sql/item.cc
sql/item.h
sql/item_cmpfunc.cc
sql/item_cmpfunc.h
sql/item_func.cc
sql/item_strfunc.cc
sql/log.cc
sql/mysql_priv.h
sql/mysqld.cc
sql/opt_range.cc
sql/opt_range.h
sql/parse_file.cc
sql/parse_file.h
sql/records.cc
sql/share/errmsg.txt
sql/sp.cc
sql/sp_head.cc
sql/sql_acl.cc
sql/sql_base.cc
sql/sql_cache.cc
sql/sql_class.cc
sql/sql_class.h
sql/sql_cursor.cc
sql/sql_db.cc
sql/sql_delete.cc
sql/sql_help.cc
sql/sql_insert.cc
sql/sql_lex.cc
sql/sql_lex.h
sql/sql_list.h
sql/sql_load.cc
sql/sql_parse.cc
sql/sql_prepare.cc
sql/sql_select.cc
sql/sql_show.cc
sql/sql_string.h
sql/sql_table.cc
sql/sql_trigger.cc
sql/sql_udf.cc
sql/sql_union.cc
sql/sql_update.cc
sql/sql_view.cc
sql/sql_yacc.yy
sql/stacktrace.c
sql/table.cc
sql/table.h
sql/thr_malloc.cc
strings/decimal.c
support-files/build-tags
support-files/mysql.spec.sh
tests/mysql_client_test.c
win/create_manifest.js
zlib/gzio.c
zlib/zutil.h
=== modified file 'BUILD/Makefile.am'
--- a/BUILD/Makefile.am 2008-05-13 13:46:38 +0000
+++ b/BUILD/Makefile.am 2008-10-20 11:24:57 +0000
@@ -22,6 +22,7 @@ EXTRA_DIST = FINISH.sh \
autorun.sh \
check-cpu \
cleanup \
+ preconfigure \
compile-alpha \
compile-alpha-ccc \
compile-alpha-cxx \
=== modified file 'BUILD/check-cpu'
--- a/BUILD/check-cpu 2007-05-29 10:25:51 +0000
+++ b/BUILD/check-cpu 2008-08-18 17:28:46 +0000
@@ -169,7 +169,7 @@ check_cpu () {
fi
cc_ver=`$cc --version | sed 1q`
- cc_verno=`echo $cc_ver | sed -e 's/^.*gcc/gcc/g; s/[^0-9. ]//g; s/^ *//g; s/ .*//g'`
+ cc_verno=`echo $cc_ver | sed -e 's/^.*(GCC)//g; s/[^0-9. ]//g; s/^ *//g; s/ .*//g'`
set -- `echo $cc_verno | tr '.' ' '`
cc_major=$1
cc_minor=$2
=== added file 'BUILD/preconfigure'
--- a/BUILD/preconfigure 1970-01-01 00:00:00 +0000
+++ b/BUILD/preconfigure 2008-10-20 11:24:57 +0000
@@ -0,0 +1,1249 @@
+#!/usr/bin/env perl
+#
+# MySQL preconfigure, Copyright (c)2008 Sun Microsystems
+#
+# This script knows how to configure this MySQL 5.0 source
+# tree in order to build various flavours of MySQL Server
+# products on many platforms.
+#
+# Command-line usage:
+# ------------------
+# The script has to be executed with the current working
+# directory being the top level directory of the source tree.
+# In order to build a default binary for a given platform,
+# use this command:
+# $ BUILD/preconfigure --platform <platform-id> --configure
+# This will run configure with appropriate environment
+# settings and configure options for a default build.
+#
+# In order to see the available platforms, do this:
+# $ BUILD/preconfigure --list-platforms
+#
+# To build a different flavour than the default, specify
+# the --product option, followed by a product identifier.
+#
+# To see the available products:
+# $ BUILD/preconfigure --list-products
+#
+# In case you don't want to run configure, but only see
+# which settings preconfigure would use, you can use the
+# --print option:
+# $ BUILD/preconfigure --platform <platform-id> --print
+#
+# Fur the purpose of logging, it might also be helpful
+# to specify both --print and --configure.
+#
+# Usage from perl:
+# ---------------
+# The script is written so that it can be used as a module
+# from perl code, if @ARGV is empty at the time when it is
+# included.
+#
+# Example:
+# $ perl -e 'require "preconfigure"; $cfg = {}; \
+# aggregate($cfg, $default); print_config($cfg)'
+#
+
+use strict;
+
+##############################################################################
+# DEFAULT SETTINGS #
+##############################################################################
+our $default = {
+ 'env' => {
+ 'CC' => 'gcc',
+ 'CXX' => 'gcc',
+ 'CFLAGS' => '-g',
+ 'CXXFLAGS' => '-g',
+ 'LDFLAGS' => '',
+ },
+ 'opt' => {
+ '--enable-local-infile' => undef,
+ '--enable-thread-safe-client' => undef,
+ '--libexecdir' => '/usr/local/mysql/bin',
+ '--localstatedir' => '/usr/local/mysql/data',
+ '--prefix' => '/usr/local/mysql',
+ '--with-big-tables' => undef,
+ '--with-pic' => undef,
+ '--with-archive-storage-engine' => undef,
+ '--with-blackhole-storage-engine' => undef,
+ '--with-csv-storage-engine' => undef,
+ '--with-federated-storage-engine' => undef,
+ '--with-innodb' => undef,
+ '--with-ndbcluster' => undef,
+ '--with-readline' => undef,
+ '--with-extra-charsets' => 'complex',
+ '--with-yassl' => undef,
+ '--with-client-ldflags' => '-static',
+ '--with-mysqld-ldflags' => '-static',
+ },
+ 'win' => {
+ 'WITH_HEAP_STORAGE_ENGINE' => undef,
+ 'WITH_MYISAM_STORAGE_ENGINE' => undef,
+ 'WITH_MYISAMMRG_STORAGE_ENGINE' => undef,
+ 'WITH_ARCHIVE_STORAGE_ENGINE' => undef,
+ 'WITH_BLACKHOLE_STORAGE_ENGINE' => undef,
+ 'WITH_FEDERATED_STORAGE_ENGINE' => undef,
+ 'WITH_INNOBASE_STORAGE_ENGINE' => undef,
+ '__NT__' => undef,
+ },
+};
+
+##############################################################################
+# DEBUG SETTINGS #
+##############################################################################
+our $debug = {
+ 'env' => {
+ '-CFLAGS' => '-O2 -O3 -Os -xO3 -xO2 -xOs +O3 +O2 +Os',
+ '-CXXFLAGS' => '-O2 -O3 -Os -xO3 -xO2 -xOs +O3 +O2 +Os',
+ },
+ 'opt' => {
+ '--with-debug' => undef,
+ '--without-ndb-debug' => undef,
+ },
+ 'win' => {
+ },
+};
+
+##############################################################################
+# PRODUCT DEFINITIONS #
+##############################################################################
+
+our $products = {
+ # community uses the default set of engines
+ 'community' => {
+ 'opt' => {
+ '--with-extra-charsets' => 'all',
+ },
+ 'win' => {
+ },
+ },
+ # classic
+ 'classic' => {
+ 'opt' => {
+ '--without-ndbcluster' => undef,
+ '--without-innodb' => undef,
+ '--with-libedit' => undef,
+ },
+ 'win' => {
+ '-WITH_INNOBASE_STORAGE_ENGINE' => undef,
+ }
+ },
+ # enterprise
+ 'enterprise' => {
+ 'opt' => {
+ '--without-ndbcluster' => undef,
+ '--with-libedit' => undef,
+ },
+ 'win' => {
+ },
+ },
+ # enterprise-gpl
+ 'enterprise-gpl' => {
+ 'opt' => {
+ '--without-ndbcluster' => undef,
+ },
+ 'win' => {
+ },
+ },
+ # cluster
+ 'cluster' => {
+ 'opt' => {
+ '--without-innodb' => undef,
+ '--with-extra-charsets' => 'all',
+ '--with-libedit' => undef,
+ },
+ 'win' => {
+ },
+ },
+};
+
+##############################################################################
+# PLATFORM DEFINITIONS #
+##############################################################################
+our $platforms = {
+##############################################################################
+# solaris10-x86_64
+#
+ 'solaris10-x86_64' => {
+ 'env' => {
+ 'CXX' => 'CC',
+ 'CC' => 'cc',
+ 'CFLAGS' => '-g -m64 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic',
+ 'LDFLAGS' => '-m64',
+ 'CXXFLAGS' => '-g -m64 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -features=no%except -xlibmil -xlibmopt -xtarget=generic',
+ 'LIBRARY_PATH' => '/usr/local/lib/amd64',
+ },
+ 'opt' => {
+ '--with-mysqld-libs' => '-lmtmalloc',
+ '--build' => 'x86_64-pc-solaris2.10',
+ '--with-named-curses' => '-lcurses',
+ },
+ },
+
+##############################################################################
+# qnx6.2.1-x86
+#
+ 'qnx6.2.1-x86' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O1 -D_FILE_OFFSET_BITS=64 -Wl,-E',
+ 'CC' => 'qcc',
+ 'CONFIG_SHELL' => '/usr/bin/bash',
+ 'CXXFLAGS' => '-g -O1 -D_FILE_OFFSET_BITS=64 -Wl,-E',
+ 'CXX' => 'qcc',
+ },
+ 'opt' => {
+ '--without-csv-storage-engine' => undef,
+ },
+ },
+
+##############################################################################
+# aix5.3-powerpc-64bit
+#
+ 'aix5.3-powerpc-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -q64 -ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192',
+ 'CC' => 'xlc_r',
+ 'LDFLAGS' => '-Wl,-brtl',
+ 'CXXFLAGS' => '-g -q64 -ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192',
+ 'CXX' => 'xlC_r',
+ 'AR' => 'ar -Xany',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# solaris10-sparc-64bit
+#
+ 'solaris10-sparc-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -Xa -xstrconst -mt -D_FORTEC_ -xarch=v9 -xc99=none',
+ 'CC' => 'cc-5.0',
+ 'LDFLAGS' => '-xarch=v9',
+ 'CXXFLAGS' => '-g -xO3 -noex -mt -D_FORTEC_ -xarch=v9',
+ 'CXX' => 'CC',
+ 'ASFLAGS' => '-xarch=v9',
+ },
+ 'opt' => {
+ '--with-mysqld-libs' => '-lmtmalloc',
+ '--with-named-z-libs' => 'no',
+ },
+ },
+
+##############################################################################
+# linux-x86-icc
+#
+ 'linux-x86-icc' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3 -mp -restrict',
+ 'CC' => 'icc -static-intel -static-libgcc',
+ 'CXXFLAGS' => '-g -O3 -mp -restrict',
+ 'CXX' => 'icpc -static-intel -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ '--enable-assembler' => undef,
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# linux-s390x
+#
+ 'linux-s390x' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O2',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -O2 -felide-constructors',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ },
+ },
+
+##############################################################################
+# osx10.5-x86
+#
+ 'osx10.5-x86' => {
+ 'env' => {
+ 'CFLAGS' => '-g -Os -arch i386 -fno-common',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -Os -arch i386 -felide-constructors -fno-common',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ },
+ },
+
+##############################################################################
+# osx10.3-powerpc-32bit
+#
+ 'osx10.3-powerpc-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3 -fno-common',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -O3 -fno-common',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ },
+ },
+
+##############################################################################
+# i5os-power-64bit
+#
+ 'i5os-power-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -q64 -ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192',
+ 'NM' => 'nm -X64',
+ 'CC' => 'xlc_r',
+ 'LDFLAGS' => '-Wl,-brtl',
+ 'CXXFLAGS' => '-g -q64 -ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192',
+ 'CXX' => 'xlC_r',
+ 'AR' => 'ar -X64',
+ },
+ 'opt' => {
+ '--with-machine-type' => 'power',
+ '--with-named-z-libs' => 'no',
+ '--build' => 'powerpc-ibm-aix5.3.0.0',
+ '--with-system-type' => 'ibm-i5os',
+ '--host' => 'powerpc-ibm-aix5.3.0.0',
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# linux-x86-static
+#
+ 'linux-x86-static' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O2 -mcpu=pentiumpro',
+ 'CC' => 'gcc',
+ 'CPPFLAGS' => '-I/usr/local/include -DDEFAULT_THREAD_STACK=126976',
+ 'LDFLAGS' => '-L/usr/local/lib',
+ 'CXXFLAGS' => '-g -O2 -mcpu=pentiumpro -felide-constructors',
+ 'CXX' => 'gcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ '--enable-assembler' => undef,
+ '--with-client-ldflags' => '-all-static',
+ '--with-mysqld-ldflags' => '-all-static',
+ '---with-zlib-dir' => undef,
+ },
+ },
+
+##############################################################################
+# osx10.4-powerpc-64bit
+#
+ 'osx10.4-powerpc-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -Os -arch ppc64 -fno-common',
+ 'CC' => 'gcc -static-libgcc',
+ 'LDFLAGS' => '-arch ppc64',
+ 'CXXFLAGS' => '-g -Os -arch ppc64 -felide-constructors -fno-common',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-named-curses-libs' => '/Users/mysqldev/local/lib/libncurses.a',
+ },
+ },
+
+##############################################################################
+# aix5.3-powerpc-32bit
+#
+ 'aix5.3-powerpc-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -ma -qstrict -qoptimize=0 -qmaxmem=8192',
+ 'CC' => 'xlc_r',
+ 'LDFLAGS' => '-Wl,-brtl',
+ 'CXXFLAGS' => '-g -ma -qstrict -qoptimize=0 -qmaxmem=8192',
+ 'CXX' => 'xlC_r',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ '---with-yassl' => undef,
+ },
+ },
+
+
+##############################################################################
+# osx10.4-x86
+#
+ 'osx10.4-x86' => {
+ 'env' => {
+ 'CFLAGS' => '-g -Os -arch i386 -fno-common',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -Os -arch i386 -felide-constructors -fno-common',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ },
+ },
+
+##############################################################################
+# solaris8-sparc-64bit
+#
+ 'solaris8-sparc-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -Xa -xstrconst -mt -D_FORTEC_ -xarch=v9',
+ 'CC' => 'cc-5.0',
+ 'LDFLAGS' => '-xarch=v9',
+ 'CXXFLAGS' => '-g -xO3 -noex -mt -D_FORTEC_ -xarch=v9',
+ 'CXX' => 'CC',
+ 'ASFLAGS' => '-xarch=v9',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ '--with-named-curses-libs' => '-lcurses',
+ },
+ },
+
+##############################################################################
+# aix5.2-powerpc-64bit
+#
+ 'aix5.2-powerpc-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -q64 -ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192',
+ 'CC' => 'xlc_r',
+ 'LDFLAGS' => '-Wl,-brtl',
+ 'CXXFLAGS' => '-g -q64 -ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192',
+ 'CXX' => 'xlC_r',
+ 'AR' => 'ar -Xany',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# freebsd6.0-x86
+#
+ 'freebsd6.0-x86' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -O3',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--enable-assembler' => undef,
+ },
+ },
+
+##############################################################################
+# solaris8-x86
+#
+ 'solaris8-x86' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic',
+ 'CC' => 'cc',
+ 'CXXFLAGS' => '-g -xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -features=no%except -xlibmil -xlibmopt -xtarget=generic',
+ 'CXX' => 'CC',
+ },
+ 'opt' => {
+ },
+ },
+
+##############################################################################
+# linux-x86_64
+#
+ 'linux-x86_64' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -O3',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ },
+ },
+
+##############################################################################
+# solaris10-sparc-64bit-gcc
+#
+ 'solaris10-sparc-64bit-gcc' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3 -m64',
+ 'CC' => 'gcc -static-libgcc',
+ 'AS' => '/opt/gnu/bin/as',
+ 'LD' => '/opt/gnu/bin/ld',
+ 'CXXFLAGS' => '-g -O3 -felide-constructors -fno-exceptions -fno-rtti -m64',
+ 'CXX' => 'gcc -static-libgcc',
+ 'CXXLD' => 'g++ -static-libgcc',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ },
+ },
+
+##############################################################################
+# openserver6-x86
+#
+ 'openserver6-x86' => {
+ 'env' => {
+ 'CFLAGS' => '-D_FILE_OFFSET_BITS=64 optO -DDBUG_OFF -Kalloca',
+ 'CC' => 'cc',
+ 'CXXFLAGS' => '-D_FILE_OFFSET_BITS=64 optO3 -DDBUG_OFF -Kalloca -Kalloca -Tno_implicit',
+ 'CXX' => 'CC',
+ },
+ 'opt' => {
+ '--build' => 'i686-unknown-sysv5SCO_SV6.0.0',
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# linux-ia64
+#
+ 'linux-ia64' => {
+ 'env' => {
+ 'CC' => 'gcc -static-libgcc',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ },
+ },
+
+##############################################################################
+# osx10.4-powerpc-32bit
+#
+ 'osx10.4-powerpc-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -Os -arch ppc -fno-common',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -Os -arch ppc -felide-constructors -fno-common',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ },
+ },
+
+##############################################################################
+# hpux11.00-hppa-32bit
+#
+ 'hpux11.00-hppa-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g +O2 +DAportable',
+ 'CC' => 'cc',
+ 'CPPFLAGS' => '-DDEFAULT_THREAD_STACK=262144',
+ 'CXXFLAGS' => '-g +O2 +DAportable -Aa',
+ 'CXX' => 'aCC',
+ },
+ 'opt' => {
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# hpux11.31-hppa-32bit
+#
+ 'hpux11.31-hppa-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g +O1 +DAportable',
+ 'CC' => 'cc',
+ 'CPPFLAGS' => '-DDEFAULT_THREAD_STACK=262144',
+ 'CXXFLAGS' => '-g +O1 +DAportable -Aa',
+ 'CXX' => 'aCC',
+ 'INSTALL' => '/usr/local/bin/install',
+ },
+ 'opt' => {
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# linux-sles9-x86_64
+#
+ 'linux-sles9-x86_64' => {
+ 'env' => {
+ 'CC' => 'gcc -static-libgcc',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ },
+ },
+
+##############################################################################
+# solaris9-x86
+#
+ 'solaris9-x86' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic',
+ 'CC' => 'cc',
+ 'CXXFLAGS' => '-g -xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -features=no%except -xlibmil -xlibmopt -xtarget=generic',
+ 'CXX' => 'CC',
+ },
+ 'opt' => {
+ '--with-named-curses' => '-lcurses',
+ },
+ },
+
+##############################################################################
+# solaris8-sparc-32bit
+#
+ 'solaris8-sparc-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -Xa -xstrconst -mt -D_FORTEC_ -xarch=v8',
+ 'CC' => 'cc-5.0',
+ 'CXXFLAGS' => '-g -xO3 -noex -mt -D_FORTEC_ -xarch=v8',
+ 'CXX' => 'CC',
+ 'ASFLAGS' => '-xarch=v8',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ '--enable-assembler' => undef,
+ '--with-named-curses-libs' => '-lcurses',
+ },
+ },
+
+##############################################################################
+# linux-powerpc
+#
+ 'linux-powerpc' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3 -mpowerpc -mcpu=powerpc',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -O3 -mpowerpc -mcpu=powerpc',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ },
+ },
+
+##############################################################################
+# hpux11.11-hppa-32bit
+#
+ 'hpux11.11-hppa-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g +O1 +DAportable',
+ 'CC' => 'cc',
+ 'CPPFLAGS' => '-DDEFAULT_THREAD_STACK=262144',
+ 'CXXFLAGS' => '-g +O1 +DAportable -Aa',
+ 'CXX' => 'aCC',
+ 'INSTALL' => '/usr/local/bin/install',
+ },
+ 'opt' => {
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# osx10.5-x86_64
+#
+ 'osx10.5-x86_64' => {
+ 'env' => {
+ 'CFLAGS' => '-g -Os -arch x86_64 -fno-common',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -Os -arch x86_64 -felide-constructors -fno-common',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ },
+ },
+
+##############################################################################
+# solaris10-x86
+#
+ 'solaris10-x86' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic',
+ 'CC' => 'cc',
+ 'CXXFLAGS' => '-g -xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -features=no%except -xlibmil -xlibmopt -xtarget=generic',
+ 'CXX' => 'CC',
+ },
+ 'opt' => {
+ '--with-mysqld-libs' => '-lmtmalloc',
+ '--with-named-curses' => '-lcurses',
+ },
+ },
+
+##############################################################################
+# hpux11.31-hppa-64bit
+#
+ 'hpux11.31-hppa-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '+O2 +DD64',
+ 'CC' => 'cc',
+ 'LDFLAGS' => '+DD64',
+ 'CXXFLAGS' => '+O2 +DD64 -Aa',
+ 'CXX' => 'aCC',
+ 'INSTALL' => '/usr/local/bin/install',
+ },
+ 'opt' => {
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# osx10.5-powerpc-32bit
+#
+ 'osx10.5-powerpc-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -Os -arch ppc -fno-common',
+ 'CC' => 'gcc -static-libgcc',
+ 'LDFLAGS' => '-arch ppc',
+ 'CXXFLAGS' => '-g -Os -arch ppc -felide-constructors -fno-common',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ },
+ },
+
+##############################################################################
+# solaris9-sparc-32bit
+#
+ 'solaris9-sparc-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -Xa -xstrconst -mt -D_FORTEC_ -xarch=v8',
+ 'CC' => 'cc-5.0',
+ 'LDFLAGS' => '-xarch=v8',
+ 'CXXFLAGS' => '-g -xO3 -noex -mt -D_FORTEC_ -xarch=v8',
+ 'CXX' => 'CC',
+ 'ASFLAGS' => '-xarch=v8',
+ },
+ 'opt' => {
+ '--enable-assembler' => undef,
+ '--with-named-curses-libs' => '-lcurses',
+ },
+ },
+
+##############################################################################
+# solaris9-sparc-64bit
+#
+ 'solaris9-sparc-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -Xa -xstrconst -mt -D_FORTEC_ -xarch=v9',
+ 'CC' => 'cc-5.0',
+ 'LDFLAGS' => '-xarch=v9',
+ 'CXXFLAGS' => '-g -xO3 -noex -mt -D_FORTEC_ -xarch=v9',
+ 'CXX' => 'CC',
+ 'ASFLAGS' => '-xarch=v9',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ },
+ },
+
+##############################################################################
+# linux-x86_64-icc
+#
+ 'linux-x86_64-icc' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3 -mp -restrict',
+ 'CC' => 'icc -static-intel -static-libgcc',
+ 'CXXFLAGS' => '-g -O3 -mp -restrict',
+ 'CXX' => 'icpc -static-intel -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# hpux11.00-hppa-64bit
+#
+ 'hpux11.00-hppa-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g +O2 +DD64',
+ 'CC' => 'cc',
+ 'LDFLAGS' => '+DD64',
+ 'CXXFLAGS' => '-g +O2 +DD64 -Aa',
+ 'CXX' => 'aCC',
+ },
+ 'opt' => {
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# aix4.3-powerpc-32bit
+#
+ 'aix4.3-powerpc-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192',
+ 'CC' => 'xlc_r',
+ 'CXXFLAGS' => '-g -ma -O2 -qstrict -qoptimize=2 -qmaxmem=8192',
+ 'CXX' => 'xlC_r',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# solaris8-sparc-32bit-gcc
+#
+ 'solaris8-sparc-32bit-gcc' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -DHAVE_MYSYS_NEW',
+ 'CC' => 'gcc',
+ 'CXXFLAGS' => '-g -xO3 -DHAVE_MYSYS_NEW',
+ 'CXX' => 'gcc',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ '--enable-assembler' => undef,
+ '--with-named-curses-libs' => '-lcurses',
+ },
+ },
+
+##############################################################################
+# hpux11.23-ia64
+#
+ 'hpux11.23-ia64' => {
+ 'env' => {
+ 'CFLAGS' => '-g +O2 +DD64 +DSitanium2 -mt -AC99 -DPTHREAD_COMPAT_MODE -O1',
+ 'CC' => 'cc',
+ 'LDFLAGS' => '+DD64',
+ 'CXXFLAGS' => '-g +O2 +DD64 +DSitanium2 -mt -DPTHREAD_COMPAT_MODE -O1 -Aa',
+ 'CXX' => 'aCC',
+ },
+ 'opt' => {
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# linux-ia64-icc
+#
+ 'linux-ia64-icc' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3 -mp -restrict -no-ftz',
+ 'CC' => 'icc -static-intel -static-libgcc',
+ 'CXXFLAGS' => '-g -O3 -mp -restrict -no-ftz',
+ 'CXX' => 'icpc -static-intel -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# linux-x86
+#
+ 'linux-x86' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -O3',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ '--enable-assembler' => undef,
+ },
+ },
+
+##############################################################################
+# solaris8-sparc-64bit-gcc
+#
+ 'solaris8-sparc-64bit-gcc' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O -m64',
+ 'CC' => 'gcc -static-libgcc',
+ 'LDFLAGS' => '-m64',
+ 'CXXFLAGS' => '-g -O3 -DHAVE_MYSYS_NEW -m64',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ '--with-named-curses-libs' => '-lcurses',
+ },
+ },
+
+##############################################################################
+# freebsd6.0-x86_64
+#
+ 'freebsd6.0-x86_64' => {
+ 'env' => {
+ 'CFLAGS' => '-g -O3',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-g -O3',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-machine-type' => 'x86_64',
+ '--enable-assembler' => undef,
+ },
+ },
+
+##############################################################################
+# hpux11.11-hppa-64bit
+#
+ 'hpux11.11-hppa-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '+O2 +DD64',
+ 'CC' => 'cc',
+ 'LDFLAGS' => '+DD64',
+ 'CXXFLAGS' => '+O2 +DD64 -Aa',
+ 'CXX' => 'aCC',
+ 'INSTALL' => '/usr/local/bin/install',
+ },
+ 'opt' => {
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# i5os-power-32bit
+#
+ 'i5os-power-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -ma -qstrict -qoptimize=0 -qmaxmem=8192',
+ 'CC' => 'xlc_r',
+ 'LDFLAGS' => '-Wl,-brtl',
+ 'CXXFLAGS' => '-g -ma -qstrict -qoptimize=0 -qmaxmem=8192',
+ 'CXX' => 'xlC_r',
+ },
+ 'opt' => {
+ '--with-machine-type' => 'power',
+ '--with-named-z-libs' => 'no',
+ '--build' => 'powerpc-ibm-aix5.3.0.0',
+ '--with-system-type' => 'ibm-i5os',
+ '--host' => 'powerpc-ibm-aix5.3.0.0',
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# solaris10-sparc-32bit
+#
+ 'solaris10-sparc-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -xO3 -Xa -xstrconst -mt -D_FORTEC_ -xarch=v8 -xc99=none',
+ 'CC' => 'cc-5.0',
+ 'LDFLAGS' => '-xarch=v8',
+ 'CXXFLAGS' => '-g -xO3 -noex -mt -D_FORTEC_ -xarch=v8',
+ 'CXX' => 'CC',
+ 'ASFLAGS' => '-xarch=v8',
+ },
+ 'opt' => {
+ '--with-mysqld-libs' => '-lmtmalloc',
+ '--with-named-z-libs' => 'no',
+ },
+ },
+
+##############################################################################
+# osx10.5-powerpc-64bit
+#
+ 'osx10.5-powerpc-64bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -Os -arch ppc64 -fno-common',
+ 'CC' => 'gcc -static-libgcc',
+ 'LDFLAGS' => '-arch ppc64',
+ 'CXXFLAGS' => '-g -Os -arch ppc64 -felide-constructors -fno-common',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ },
+ },
+
+##############################################################################
+# linux-x86-valgrind
+#
+ 'linux-x86-valgrind' => {
+ 'env' => {
+ 'CFLAGS' => '-O3 -g -fno-omit-frame-pointers -USAFEMALLOC -UFORCE_INIT_OF_VARS -DHAVE_purify',
+ 'CC' => 'gcc -static-libgcc',
+ 'CXXFLAGS' => '-O3 -g -fno-omit-frame-pointers -USAFEMALLOC -UFORCE_INIT_OF_VARS -DHAVE_purify',
+ 'CXX' => 'gcc -static-libgcc',
+ },
+ 'opt' => {
+ '--with-fast-mutexes' => undef,
+ },
+ },
+
+##############################################################################
+# aix5.2-powerpc-32bit
+#
+ 'aix5.2-powerpc-32bit' => {
+ 'env' => {
+ 'CFLAGS' => '-g -ma -qstrict -qoptimize=0 -qmaxmem=8192',
+ 'CC' => 'xlc_r',
+ 'LDFLAGS' => '-Wl,-brtl',
+ 'CXXFLAGS' => '-g -ma -qstrict -qoptimize=0 -qmaxmem=8192',
+ 'CXX' => 'xlC_r',
+ },
+ 'opt' => {
+ '--with-named-z-libs' => 'no',
+ '---with-yassl' => undef,
+ },
+ },
+
+##############################################################################
+# windows-x86
+#
+ 'windows-x86' => {
+ 'env' => {
+ },
+ 'opt' => {
+ },
+ 'win' => {
+ },
+ },
+
+##############################################################################
+# windows-x86_64
+#
+ 'windows-x86_64' => {
+ 'env' => {
+ },
+ 'opt' => {
+ },
+ 'win' => {
+ },
+ },
+};
+
+##############################################################################
+# No configuration below this line. #
+##############################################################################
+
+sub aggregate {
+ my ($config, $mod) = @_;
+ $config->{"env"} = {} unless defined $config->{"env"};
+ for my $key (keys %{$mod->{"env"}}) {
+ my $p = $mod->{"env"}->{$key};
+ my $parts = [];
+ if(ref($p)) {
+ $parts = $p;
+ } else {
+ $parts = [ split / +/, $p ];
+ }
+ my $mode = "replace";
+ if($key =~ /^\+/) {
+ $mode = "add";
+ $key = substr($key, 1);
+ } elsif($key =~ /^-/) {
+ $mode = "sub";
+ $key = substr($key, 1);
+ }
+ if($mode eq "replace") {
+ $config->{"env"}->{$key} = $parts;
+ } else {
+ if(!defined $config->{"env"}->{$key}) {
+ $config->{"env"}->{$key} = [];
+ }
+ my %tmp = ();
+ @tmp{@{$config->{"env"}->{$key}}} = ();
+ for my $val (@$parts) {
+ delete $tmp{$val};
+ }
+ $config->{"env"}->{$key} = [ sort keys %tmp ];
+ if($mode eq "add") {
+ for my $val (@$parts) {
+ push @{$config->{"env"}->{$key}}, $val;
+ }
+ }
+ }
+ }
+ $config->{"opt"} = {} unless defined $config->{"opt"};
+ for my $key (keys %{$mod->{"opt"}}) {
+ my $val = $mod->{"opt"}->{$key};
+ if($key =~ /^---/) {
+ delete $config->{"opt"}->{substr($key,1)};
+ next;
+ } elsif($key =~ /^--with-(.*)$/) {
+ delete $config->{"opt"}->{"--without-$1"};
+ } elsif($key =~ /^--without-(.*)$/) {
+ delete $config->{"opt"}->{"--with-$1"};
+ }
+ $config->{"opt"}->{$key} = $val;
+ }
+ $config->{"win"} = {} unless defined $config->{"win"};
+ for my $key (keys %{$mod->{"win"}}) {
+ my $val = $mod->{"win"}->{$key};
+ if($key =~ /^-/) {
+ delete $config->{"win"}->{substr($key,1)};
+ next;
+ }
+ $config->{"win"}->{$key} = $val;
+ }
+}
+
+sub create_configure_line {
+ my ($config, $vars) = @_;
+ my $ln = "";
+ if($vars->{"windows"}) {
+ $ln .= "cscript win/configure.js";
+ for my $win (sort keys %{$config->{"win"}}) {
+ $ln .= " ";
+ if(defined $config->{"win"}->{$win}) {
+ my $val = $config->{"win"}->{$win};
+ $ln .= "$win='$val'";
+ } else {
+ $ln .= "$win";
+ }
+ }
+ return $ln;
+ }
+ for my $var (sort keys %{$config->{"env"}}) {
+ $ln .= " " unless $ln eq "";
+ my $val = join " ", @{$config->{"env"}->{$var}};
+ $ln .= "$var='$val'";
+ }
+ $ln .= " " unless $ln eq "";
+ $ln .= "./configure";
+ for my $opt (sort keys %{$config->{"opt"}}) {
+ $ln .= " ";
+ if(defined $config->{"opt"}->{$opt}) {
+ my $val = $config->{"opt"}->{$opt};
+ $ln .= "$opt='$val'";
+ } else {
+ $ln .= "$opt";
+ }
+ }
+ return $ln;
+}
+
+sub print_config {
+ my ($config, $vars) = @_;
+ print "#\n# configuring for " . $config->{"platform"};
+ if($config->{"debug"}) {
+ print " (debug)";
+ }
+ print "\n#\n";
+ if($vars->{"windows"}) {
+ for my $win (sort keys %{$config->{"win"}}) {
+ if(defined $config->{"win"}->{$win}) {
+ my $val = $config->{"win"}->{$win};
+ print "# $win='$val'\n";
+ } else {
+ print "# $win\n";
+ }
+ }
+ } else {
+ for my $var (sort keys %{$config->{"env"}}) {
+ my $val = join " ", @{$config->{"env"}->{$var}};
+ print "# $var='$val'\n";
+ }
+ print "#\n";
+ for my $opt (sort keys %{$config->{"opt"}}) {
+ if(defined $config->{"opt"}->{$opt}) {
+ my $val = $config->{"opt"}->{$opt};
+ print "# $opt='$val'\n";
+ } else {
+ print "# $opt\n";
+ }
+ }
+ }
+ print "#\n";
+ print create_configure_line($config, $vars) . "\n";
+}
+
+##############################################################################
+
+return 1 unless @ARGV;
+
+my $vars = {
+ 'debug' => 0,
+ 'ccache' => 0,
+ 'windows' => 0,
+ 'print' => 0,
+ 'configure' => 0,
+ 'list-platforms' => 0,
+ 'platform' => "",
+ 'list-products' => 0,
+ 'product' => "community",
+};
+
+while(@ARGV) {
+ my $arg = shift;
+ if($arg =~ /^--/) {
+ last if $arg eq "--";
+ my $var = substr($arg, 2);
+ if(defined $vars->{$var}) {
+ if($vars->{$var} =~ /^[0-9]+$/) {
+ $vars->{$var} += 1;
+ } else {
+ $vars->{$var} = shift;
+ }
+ } else {
+ print STDERR "unrecognized option: $arg\n";
+ exit 1;
+ }
+ }
+}
+
+if($vars->{"platform"} =~ /^windows-/) {
+ $vars->{"windows"} = 1;
+}
+
+my $pass_on = { "opt" => {}, "win" => {} };
+while(@ARGV) {
+ my $arg = shift;
+ my $val = undef;
+ if($arg =~ /^([-a-zA-Z-0-9_]+)=(.*)$/) {
+ $arg = $1;
+ $val = $2;
+ }
+ if($vars->{"windows"}) {
+ $pass_on->{"win"}->{$arg} = $val;
+ } else {
+ $pass_on->{"opt"}->{$arg} = $val;
+ }
+}
+
+if($vars->{"list-platforms"}) {
+ for my $name (sort keys %$platforms) {
+ print "$name\n";
+ }
+}
+if($vars->{"list-products"}) {
+ for my $name (sort keys %$products) {
+ print "$name\n";
+ }
+}
+
+if(!defined $platforms->{$vars->{"platform"}}) {
+ print STDERR "requested platform is unknown; please use --list-platforms to see available choices\n";
+ exit 1;
+}
+
+if(!defined $products->{$vars->{"product"}}) {
+ print STDERR "requested product is unknown; please use --list-products to see available choices\n";
+ exit 1;
+}
+
+my $config = $vars;
+aggregate($config, $default);
+aggregate($config, $products->{$vars->{"product"}});
+aggregate($config, $platforms->{$vars->{"platform"}});
+if($vars->{"debug"}) {
+ aggregate($config, $debug);
+}
+aggregate($config, $pass_on);
+if($vars->{"ccache"}) {
+ unshift @{$config->{"env"}->{"CC"}}, "ccache";
+ unshift @{$config->{"env"}->{"CXX"}}, "ccache";
+}
+
+if($vars->{"print"}) {
+ if($vars->{"platform"} eq "") {
+ print STDERR "please use --platform <platform name>\n";
+ exit 1;
+ }
+ print_config($config, $vars);
+}
+
+if($vars->{"configure"}) {
+ if($vars->{"platform"} eq "") {
+ print STDERR "please use --platform <platform name>\n";
+ exit 1;
+ }
+ system(create_configure_line($config, $vars));
+}
+
=== modified file 'CMakeLists.txt'
--- a/CMakeLists.txt 2008-07-14 20:16:37 +0000
+++ b/CMakeLists.txt 2008-10-20 11:31:29 +0000
@@ -82,18 +82,18 @@ SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAK
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4800 /wd4805")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4800 /wd4805")
-IF(CMAKE_GENERATOR MATCHES "Visual Studio 8")
+# Disable warnings in Visual Studio 8 and above
+IF(MSVC AND NOT CMAKE_GENERATOR MATCHES "Visual Studio 7")
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /wd4996")
SET(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /wd4996")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /wd4996")
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /wd4996")
SET(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /wd4996")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO} /wd4996")
-ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 8")
-
-IF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR
- CMAKE_GENERATOR MATCHES "Visual Studio 8")
+ENDIF(MSVC AND NOT CMAKE_GENERATOR MATCHES "Visual Studio 7")
+# Settings for Visual Studio 7 and above.
+IF(MSVC)
# replace /MDd with /MTd
STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE})
STRING(REPLACE "/MD" "/MT" CMAKE_C_FLAGS_RELWITHDEBINFO ${CMAKE_C_FLAGS_RELWITHDEBINFO})
@@ -123,9 +123,7 @@ IF(CMAKE_GENERATOR MATCHES "Visual Studi
IF(NOT tmp_manifest)
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO")
ENDIF(NOT tmp_manifest)
-
-ENDIF(CMAKE_GENERATOR MATCHES "Visual Studio 7" OR
- CMAKE_GENERATOR MATCHES "Visual Studio 8")
+ENDIF(MSVC)
ADD_DEFINITIONS("-D_WINDOWS -D__WIN__ -D_CRT_SECURE_NO_DEPRECATE")
=== modified file 'client/mysql_upgrade.c'
--- a/client/mysql_upgrade.c 2008-05-02 12:41:19 +0000
+++ b/client/mysql_upgrade.c 2008-08-11 17:56:54 +0000
@@ -259,6 +259,10 @@ get_one_option(int optid, const struct m
}
+/**
+ Run a command using the shell, storing its output in the supplied dynamic
+ string.
+*/
static int run_command(char* cmd,
DYNAMIC_STRING *ds_res)
{
@@ -331,36 +335,16 @@ static int run_tool(char *tool_path, DYN
}
-/*
- Try to get the full path to this exceutable
-
- Return 0 if path found
-
+/**
+ Look for the filename of given tool, with the presumption that it is in the
+ same directory as mysql_upgrade and that the same executable-searching
+ mechanism will be used when we run our sub-shells with popen() later.
*/
-
-static my_bool get_full_path_to_executable(char* path)
+static void find_tool(char *tool_executable_name, const char *tool_name,
+ const char *self_name)
{
- my_bool ret;
- DBUG_ENTER("get_full_path_to_executable");
-#ifdef __WIN__
- ret= (GetModuleFileName(NULL, path, FN_REFLEN) == 0);
-#else
- /* my_readlink returns 0 if a symlink was read */
- ret= (my_readlink(path, "/proc/self/exe", MYF(0)) != 0);
- /* Might also want to try with /proc/$$/exe if the above fails */
-#endif
- DBUG_PRINT("exit", ("path: %s", path));
- DBUG_RETURN(ret);
-}
+ char *last_fn_libchar;
-
-/*
- Look for the tool in the same directory as mysql_upgrade.
-*/
-
-static void find_tool(char *tool_path, const char *tool_name)
-{
- char path[FN_REFLEN];
DYNAMIC_STRING ds_tmp;
DBUG_ENTER("find_tool");
DBUG_PRINT("enter", ("progname: %s", my_progname));
@@ -368,77 +352,59 @@ static void find_tool(char *tool_path, c
if (init_dynamic_string(&ds_tmp, "", 32, 32))
die("Out of memory");
- /* Initialize path with the full path to this program */
- if (get_full_path_to_executable(path))
+ last_fn_libchar= strrchr(self_name, FN_LIBCHAR);
+
+ if (last_fn_libchar == NULL)
{
/*
- Easy way to get full executable path failed, try
- other methods
+ mysql_upgrade was found by the shell searching the path. A sibling
+ next to us should be found the same way.
*/
- if (my_progname[0] == FN_LIBCHAR)
- {
- /* 1. my_progname contains full path */
- strmake(path, my_progname, FN_REFLEN);
- }
- else if (my_progname[0] == '.')
- {
- /* 2. my_progname contains relative path, prepend wd */
- char buf[FN_REFLEN];
- my_getwd(buf, FN_REFLEN, MYF(0));
- my_snprintf(path, FN_REFLEN, "%s%s", buf, my_progname);
- }
- else
- {
- /* 3. Just go for it and hope tool is in path */
- path[0]= 0;
- }
+ strncpy(tool_executable_name, tool_name, FN_REFLEN);
}
-
- DBUG_PRINT("info", ("path: '%s'", path));
-
- /* Chop off binary name (i.e mysql-upgrade) from path */
- dirname_part(path, path);
-
- /*
- When running in a not yet installed build and using libtool,
- the program(mysql_upgrade) will be in .libs/ and executed
- through a libtool wrapper in order to use the dynamic libraries
- from this build. The same must be done for the tools(mysql and
- mysqlcheck). Thus if path ends in .libs/, step up one directory
- and execute the tools from there
- */
- path[max((strlen(path)-1), 0)]= 0; /* Chop off last / */
- if (strncmp(path + dirname_length(path), ".libs", 5) == 0)
+ else
{
- DBUG_PRINT("info", ("Chopping off .libs from '%s'", path));
-
- /* Chop off .libs */
- dirname_part(path, path);
- }
+ int len;
+ /*
+ mysql_upgrade was run absolutely or relatively. We can find a sibling
+ by replacing our name after the LIBCHAR with the new tool name.
+ */
- DBUG_PRINT("info", ("path: '%s'", path));
+ /*
+ When running in a not yet installed build and using libtool,
+ the program(mysql_upgrade) will be in .libs/ and executed
+ through a libtool wrapper in order to use the dynamic libraries
+ from this build. The same must be done for the tools(mysql and
+ mysqlcheck). Thus if path ends in .libs/, step up one directory
+ and execute the tools from there
+ */
+ if (((last_fn_libchar - 6) >= self_name) &&
+ (strncmp(last_fn_libchar - 5, ".libs", 5) == 0) &&
+ (*(last_fn_libchar - 6) == FN_LIBCHAR))
+ {
+ DBUG_PRINT("info", ("Chopping off \".libs\" from end of path"));
+ last_fn_libchar -= 6;
+ }
- /* Format name of the tool to search for */
- fn_format(tool_path, tool_name,
- path, "", MYF(MY_REPLACE_DIR));
+ len= last_fn_libchar - self_name;
- verbose("Looking for '%s' in: %s", tool_name, tool_path);
+ my_snprintf(tool_executable_name, FN_REFLEN, "%.*s%c%s",
+ len, self_name, FN_LIBCHAR, tool_name);
+ }
- /* Make sure the tool exists */
- if (my_access(tool_path, F_OK) != 0)
- die("Can't find '%s'", tool_path);
+ verbose("Looking for '%s' as: %s", tool_name, tool_executable_name);
/*
Make sure it can be executed
*/
- if (run_tool(tool_path,
+ if (run_tool(tool_executable_name,
&ds_tmp, /* Get output from command, discard*/
"--help",
"2>&1",
IF_WIN("> NUL", "> /dev/null"),
NULL))
- die("Can't execute '%s'", tool_path);
+ die("Can't execute '%s'", tool_executable_name);
dynstr_free(&ds_tmp);
@@ -748,11 +714,20 @@ static const char *load_default_groups[]
int main(int argc, char **argv)
{
+ char self_name[FN_REFLEN];
+
MY_INIT(argv[0]);
#ifdef __NETWARE__
setscreenmode(SCR_AUTOCLOSE_ON_EXIT);
#endif
+#if __WIN__
+ if (GetModuleFileName(NULL, self_name, FN_REFLEN) == 0)
+#endif
+ {
+ strncpy(self_name, argv[0], FN_REFLEN);
+ }
+
if (init_dynamic_string(&ds_args, "", 512, 256))
die("Out of memory");
@@ -774,10 +749,10 @@ int main(int argc, char **argv)
dynstr_append(&ds_args, " ");
/* Find mysql */
- find_tool(mysql_path, IF_WIN("mysql.exe", "mysql"));
+ find_tool(mysql_path, IF_WIN("mysql.exe", "mysql"), self_name);
/* Find mysqlcheck */
- find_tool(mysqlcheck_path, IF_WIN("mysqlcheck.exe", "mysqlcheck"));
+ find_tool(mysqlcheck_path, IF_WIN("mysqlcheck.exe", "mysqlcheck"), self_name);
/*
Read the mysql_upgrade_info file to check if mysql_upgrade
=== modified file 'client/mysqldump.c'
--- a/client/mysqldump.c 2008-03-14 13:32:01 +0000
+++ b/client/mysqldump.c 2008-09-11 05:46:43 +0000
@@ -1836,7 +1836,13 @@ static uint get_table_structure(char *ta
fprintf(sql_file, ",\n %s %s",
quote_name(row[0], name_buff, 0), row[1]);
}
- fprintf(sql_file, "\n) */;\n");
+ /*
+ Stand-in tables are always MyISAM tables as the default
+ engine might have a column-limit that's lower than the
+ number of columns in the view, and MyISAM support is
+ guaranteed to be in the server anyway.
+ */
+ fprintf(sql_file, "\n) ENGINE=MyISAM */;\n");
check_io(sql_file);
}
}
=== modified file 'configure.in'
--- a/configure.in 2008-07-16 16:07:16 +0000
+++ b/configure.in 2008-10-20 11:31:29 +0000
@@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc)
AC_CANONICAL_SYSTEM
# The Docs Makefile.am parses this line!
# remember to also change ndb version below and update version.c in ndb
-AM_INIT_AUTOMAKE(mysql, 5.0.69)
+AM_INIT_AUTOMAKE(mysql, 5.0.73)
AM_CONFIG_HEADER([include/config.h:config.h.in])
PROTOCOL_VERSION=10
@@ -23,7 +23,7 @@ NDB_SHARED_LIB_VERSION=$NDB_SHARED_LIB_M
# ndb version
NDB_VERSION_MAJOR=5
NDB_VERSION_MINOR=0
-NDB_VERSION_BUILD=69
+NDB_VERSION_BUILD=73
NDB_VERSION_STATUS=""
# Set all version vars based on $VERSION. How do we do this more elegant ?
@@ -504,46 +504,50 @@ then
fi
AC_SUBST(ICHECK)
-# Lock for PS
+# Look for PS usage. We use double dollar-signs in FIND_PROC because this
+# value is written to a makefile, which interprets away one level of
+# dollar-signs. So, interpretation stages are m4 and then shell in autoconf,
+# then Make, then shell. The autoconf substitution uses single quotes, so
+# no unprotected single quotes should appear in the expression.
AC_PATH_PROG(PS, ps, ps)
AC_MSG_CHECKING("how to check if pid exists")
PS=$ac_cv_path_PS
# Linux style
-if $PS p $$ 2> /dev/null | grep `echo $0 | sed s/\-//` > /dev/null
+if $PS wwwp $$ 2> /dev/null | grep -- "$0" > /dev/null
then
- FIND_PROC="$PS p \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
+ FIND_PROC="$PS wwwp \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
# Solaris
-elif $PS -fp $$ 2> /dev/null | grep $0 > /dev/null
+elif $PS -fp $$ 2> /dev/null | grep -- $0 > /dev/null
then
- FIND_PROC="$PS -p \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
+ FIND_PROC="$PS -p \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
# BSD style
-elif $PS -uaxww 2> /dev/null | grep $0 > /dev/null
+elif $PS -uaxww 2> /dev/null | grep -- $0 > /dev/null
then
- FIND_PROC="$PS -uaxww | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
+ FIND_PROC="$PS -uaxww | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
# SysV style
-elif $PS -ef 2> /dev/null | grep $0 > /dev/null
+elif $PS -ef 2> /dev/null | grep -- $0 > /dev/null
then
- FIND_PROC="$PS -ef | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
+ FIND_PROC="$PS -ef | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
# Do anybody use this?
-elif $PS $$ 2> /dev/null | grep $0 > /dev/null
+elif $PS $$ 2> /dev/null | grep -- $0 > /dev/null
then
- FIND_PROC="$PS \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
+ FIND_PROC="$PS \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
else
case $SYSTEM_TYPE in
*freebsd*|*dragonfly*)
- FIND_PROC="$PS p \$\$PID | grep -v grep | grep \$\$MYSQLD > /dev/null"
+ FIND_PROC="$PS p \$\$PID | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" > /dev/null"
;;
*darwin*)
- FIND_PROC="$PS -uaxww | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
+ FIND_PROC="$PS -uaxww | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
;;
*cygwin*)
- FIND_PROC="$PS -e | grep -v grep | grep \$\$MYSQLD | grep \" \$\$PID \" > /dev/null"
+ FIND_PROC="$PS -e | grep -v \" grep\" | grep -v mysqld_safe | grep -- \"\$\$MYSQLD\" | grep \" \$\$PID \" > /dev/null"
;;
*netware*)
FIND_PROC=
;;
*)
- AC_MSG_ERROR([Could not find the right ps switches. Which OS is this ?. See the Installation chapter in the Reference Manual.])
+ AC_MSG_ERROR([Could not find the right ps and/or grep switches. Which OS is this? See the Installation chapter in the Reference Manual.])
esac
fi
AC_SUBST(FIND_PROC)
@@ -2823,11 +2827,20 @@ EOF
AC_CONFIG_SUBDIRS(innobase)
fi
+ # "innochecksum" is not in the "innobase/" subdirectory, but should be switched
+ AM_CONDITIONAL([BUILD_INNODB_TOOLS], [test X"$have_innodb" = Xyes])
+
case $SYSTEM_TYPE-$MACHINE_TYPE-$ac_cv_prog_gcc-$have_ndbcluster in
*solaris*-i?86-no-yes)
- # ndb fail for whatever strange reason to link Sun Forte/x86
- # unless using incremental linker
- CXXFLAGS="$CXXFLAGS -xildon"
+ if $CC -xildon 2>&1 | grep "illegal option" >/dev/null
+ then
+ # This Solaris ld does not support -xildon
+ true
+ else
+ # ndb fail for whatever strange reason to link Sun Forte/x86
+ # unless using incremental linker
+ CXXFLAGS="$CXXFLAGS -xildon"
+ fi
;;
*) ;;
esac
=== modified file 'extra/Makefile.am'
--- a/extra/Makefile.am 2007-02-22 15:41:51 +0000
+++ b/extra/Makefile.am 2008-08-25 19:07:41 +0000
@@ -45,7 +45,12 @@ $(top_builddir)/include/mysqld_ername.h:
$(top_builddir)/include/sql_state.h: $(top_builddir)/include/mysqld_error.h
bin_PROGRAMS = replace comp_err perror resolveip my_print_defaults \
- resolve_stack_dump mysql_waitpid innochecksum
+ resolve_stack_dump mysql_waitpid
+# "innochecksum" should be switched
+if BUILD_INNODB_TOOLS
+bin_PROGRAMS += innochecksum
+endif
+
noinst_PROGRAMS = charset2html
EXTRA_DIST = CMakeLists.txt
=== removed file 'extra/yassl/taocrypt/taocrypt.vcproj'
--- a/extra/yassl/taocrypt/taocrypt.vcproj 2007-03-19 15:18:10 +0000
+++ b/extra/yassl/taocrypt/taocrypt.vcproj 1970-01-01 00:00:00 +0000
@@ -1,268 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="taocrypt"
- SccProjectName=""
- SccLocalPath="">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\debug_obj"
- IntermediateDirectory=".\debug_obj"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- OptimizeForProcessor="2"
- AdditionalIncludeDirectories="include,mySTL"
- PreprocessorDefinitions="WIN32;_DEBUG;_LIB"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile=".\debug_obj/taocrypt.pch"
- AssemblerListingLocation=".\debug_obj/"
- ObjectFile=".\debug_obj/"
- ProgramDataBaseFileName=".\debug_obj/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="4"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile=".\debug_obj\taocrypt.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\release_obj"
- IntermediateDirectory=".\release_obj"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OptimizeForProcessor="2"
- AdditionalIncludeDirectories="include,mySTL"
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
- StringPooling="TRUE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile=".\release_obj/taocrypt.pch"
- AssemblerListingLocation=".\release_obj/"
- ObjectFile=".\release_obj/"
- ProgramDataBaseFileName=".\release_obj/"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile=".\release_obj\taocrypt.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
- <File
- RelativePath="src\aes.cpp">
- </File>
- <File
- RelativePath="src\aestables.cpp">
- </File>
- <File
- RelativePath="src\algebra.cpp">
- </File>
- <File
- RelativePath="src\arc4.cpp">
- </File>
- <File
- RelativePath="src\asn.cpp">
- </File>
- <File
- RelativePath="src\coding.cpp">
- </File>
- <File
- RelativePath="src\des.cpp">
- </File>
- <File
- RelativePath="src\dh.cpp">
- </File>
- <File
- RelativePath="src\dsa.cpp">
- </File>
- <File
- RelativePath="src\file.cpp">
- </File>
- <File
- RelativePath="src\hash.cpp">
- </File>
- <File
- RelativePath="src\integer.cpp">
- </File>
- <File
- RelativePath="src\md2.cpp">
- </File>
- <File
- RelativePath="src\md4.cpp">
- </File>
- <File
- RelativePath="src\md5.cpp">
- </File>
- <File
- RelativePath="src\misc.cpp">
- </File>
- <File
- RelativePath="src\random.cpp">
- </File>
- <File
- RelativePath="src\ripemd.cpp">
- </File>
- <File
- RelativePath="src\rsa.cpp">
- </File>
- <File
- RelativePath="src\sha.cpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl">
- <File
- RelativePath="include\aes.hpp">
- </File>
- <File
- RelativePath="include\algebra.hpp">
- </File>
- <File
- RelativePath="include\arc4.hpp">
- </File>
- <File
- RelativePath="include\asn.hpp">
- </File>
- <File
- RelativePath="include\block.hpp">
- </File>
- <File
- RelativePath="include\coding.hpp">
- </File>
- <File
- RelativePath="include\des.hpp">
- </File>
- <File
- RelativePath="include\dh.hpp">
- </File>
- <File
- RelativePath="include\dsa.hpp">
- </File>
- <File
- RelativePath="include\error.hpp">
- </File>
- <File
- RelativePath="include\file.hpp">
- </File>
- <File
- RelativePath="include\hash.hpp">
- </File>
- <File
- RelativePath="include\hmac.hpp">
- </File>
- <File
- RelativePath="include\integer.hpp">
- </File>
- <File
- RelativePath="include\md2.hpp">
- </File>
- <File
- RelativePath="include\md4.hpp">
- </File>
- <File
- RelativePath="include\md5.hpp">
- </File>
- <File
- RelativePath="include\misc.hpp">
- </File>
- <File
- RelativePath="include\modarith.hpp">
- </File>
- <File
- RelativePath="include\modes.hpp">
- </File>
- <File
- RelativePath="include\random.hpp">
- </File>
- <File
- RelativePath="include\ripemd.hpp">
- </File>
- <File
- RelativePath="include\rsa.hpp">
- </File>
- <File
- RelativePath="include\sha.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
=== removed file 'extra/yassl/yassl.vcproj'
--- a/extra/yassl/yassl.vcproj 2007-03-19 15:18:10 +0000
+++ b/extra/yassl/yassl.vcproj 1970-01-01 00:00:00 +0000
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="yassl"
- SccProjectName=""
- SccLocalPath="">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\debug_obj"
- IntermediateDirectory=".\debug_obj"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- OptimizeForProcessor="2"
- AdditionalIncludeDirectories="include,taocrypt\include,taocrypt\mySTL"
- PreprocessorDefinitions="WIN32;_DEBUG;_LIB;YASSL_PREFIX"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile=".\debug_obj/yassl.pch"
- AssemblerListingLocation=".\debug_obj/"
- ObjectFile=".\debug_obj/"
- ProgramDataBaseFileName=".\debug_obj/"
- BrowseInformation="1"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"
- DebugInformationFormat="4"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile=".\debug_obj\yassl.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="_DEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\release_obj"
- IntermediateDirectory=".\release_obj"
- ConfigurationType="4"
- UseOfMFC="0"
- ATLMinimizesCRunTimeLibraryUsage="FALSE"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OptimizeForProcessor="2"
- AdditionalIncludeDirectories="include,taocrypt\include,taocrypt\mySTL"
- PreprocessorDefinitions="WIN32;NDEBUG;_LIB;YASSL_PREFIX"
- StringPooling="TRUE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="0"
- EnableFunctionLevelLinking="TRUE"
- UsePrecompiledHeader="2"
- PrecompiledHeaderFile=".\release_obj/yassl.pch"
- AssemblerListingLocation=".\release_obj/"
- ObjectFile=".\release_obj/"
- ProgramDataBaseFileName=".\release_obj/"
- WarningLevel="3"
- SuppressStartupBanner="TRUE"
- CompileAs="0"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLibrarianTool"
- OutputFile=".\release_obj\yassl.lib"
- SuppressStartupBanner="TRUE"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"
- PreprocessorDefinitions="NDEBUG"
- Culture="1033"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
- <File
- RelativePath="src\buffer.cpp">
- </File>
- <File
- RelativePath="src\cert_wrapper.cpp">
- </File>
- <File
- RelativePath="src\crypto_wrapper.cpp">
- </File>
- <File
- RelativePath="src\handshake.cpp">
- </File>
- <File
- RelativePath="src\lock.cpp">
- </File>
- <File
- RelativePath="src\log.cpp">
- </File>
- <File
- RelativePath="src\socket_wrapper.cpp">
- </File>
- <File
- RelativePath="src\ssl.cpp">
- </File>
- <File
- RelativePath="src\timer.cpp">
- </File>
- <File
- RelativePath="src\yassl_error.cpp">
- </File>
- <File
- RelativePath="src\yassl_imp.cpp">
- </File>
- <File
- RelativePath="src\yassl_int.cpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl">
- <File
- RelativePath="include\buffer.hpp">
- </File>
- <File
- RelativePath="include\cert_wrapper.hpp">
- </File>
- <File
- RelativePath="include\crypto_wrapper.hpp">
- </File>
- <File
- RelativePath="include\factory.hpp">
- </File>
- <File
- RelativePath="include\handshake.hpp">
- </File>
- <File
- RelativePath="include\lock.hpp">
- </File>
- <File
- RelativePath="include\log.hpp">
- </File>
- <File
- RelativePath="include\socket_wrapper.hpp">
- </File>
- <File
- RelativePath="include\timer.hpp">
- </File>
- <File
- RelativePath="include\yassl_error.hpp">
- </File>
- <File
- RelativePath="include\yassl_imp.hpp">
- </File>
- <File
- RelativePath="include\yassl_int.hpp">
- </File>
- <File
- RelativePath="include\yassl_types.hpp">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
=== modified file 'include/myisam.h'
--- a/include/myisam.h 2006-12-23 19:17:15 +0000
+++ b/include/myisam.h 2008-08-22 12:31:53 +0000
@@ -267,6 +267,10 @@ extern my_bool myisam_flush,myisam_delay
extern my_off_t myisam_max_temp_length;
extern ulong myisam_bulk_insert_tree_size, myisam_data_pointer_size;
+/* usually used to check if a symlink points into the mysql data home */
+/* which is normally forbidden */
+extern int (*myisam_test_invalid_symlink)(const char *filename);
+
/* Prototypes for myisam-functions */
extern int mi_close(struct st_myisam_info *file);
=== modified file 'innobase/buf/buf0buf.c'
--- a/innobase/buf/buf0buf.c 2007-12-11 00:00:25 +0000
+++ b/innobase/buf/buf0buf.c 2008-07-31 21:47:57 +0000
@@ -2260,6 +2260,7 @@ buf_print(void)
ut_a(buf_validate());
}
+#ifdef UNIV_DEBUG
/*************************************************************************
Returns the number of latched pages in the buffer pool. */
@@ -2290,6 +2291,7 @@ buf_get_latched_pages_number(void)
mutex_exit(&(buf_pool->mutex));
return fixed_pages_number;
}
+#endif /* UNIV_DEBUG */
/*************************************************************************
Returns the number of pending buf pool ios. */
=== modified file 'innobase/dict/dict0dict.c'
--- a/innobase/dict/dict0dict.c 2007-03-29 04:41:21 +0000
+++ b/innobase/dict/dict0dict.c 2008-08-08 00:25:24 +0000
@@ -3554,7 +3554,7 @@ loop:
ptr = dict_accept(ptr, "FOREIGN", &success);
- if (!success) {
+ if (!success || !ib_isspace(*ptr)) {
goto loop;
}
=== modified file 'innobase/include/buf0buf.h'
--- a/innobase/include/buf0buf.h 2007-12-11 00:00:25 +0000
+++ b/innobase/include/buf0buf.h 2008-07-31 21:47:57 +0000
@@ -495,7 +495,15 @@ Prints info of the buffer pool data stru
void
buf_print(void);
/*============*/
+
+/*************************************************************************
+Returns the number of latched pages in the buffer pool. */
+
+ulint
+buf_get_latched_pages_number(void);
+/*==============================*/
#endif /* UNIV_DEBUG */
+
/************************************************************************
Prints a page to stderr. */
@@ -503,12 +511,7 @@ void
buf_page_print(
/*===========*/
byte* read_buf); /* in: a database page */
-/*************************************************************************
-Returns the number of latched pages in the buffer pool. */
-ulint
-buf_get_latched_pages_number(void);
-/*==============================*/
/*************************************************************************
Returns the number of pending buf pool ios. */
=== modified file 'innobase/include/srv0srv.h'
--- a/innobase/include/srv0srv.h 2006-01-18 12:20:56 +0000
+++ b/innobase/include/srv0srv.h 2008-07-31 21:47:57 +0000
@@ -531,7 +531,9 @@ struct export_var_struct{
ulint innodb_buffer_pool_pages_dirty;
ulint innodb_buffer_pool_pages_misc;
ulint innodb_buffer_pool_pages_free;
+#ifdef UNIV_DEBUG
ulint innodb_buffer_pool_pages_latched;
+#endif /* UNIV_DEBUG */
ulint innodb_buffer_pool_read_requests;
ulint innodb_buffer_pool_reads;
ulint innodb_buffer_pool_wait_free;
=== modified file 'innobase/include/trx0undo.h'
--- a/innobase/include/trx0undo.h 2005-02-25 20:35:33 +0000
+++ b/innobase/include/trx0undo.h 2008-07-31 21:47:57 +0000
@@ -237,6 +237,7 @@ trx_undo_set_state_at_finish(
/*=========================*/
/* out: undo log segment header page,
x-latched */
+ trx_rseg_t* rseg, /* in: rollback segment memory object */
trx_t* trx, /* in: transaction */
trx_undo_t* undo, /* in: undo log memory copy */
mtr_t* mtr); /* in: mtr */
=== modified file 'innobase/srv/srv0srv.c'
--- a/innobase/srv/srv0srv.c 2007-11-20 17:53:19 +0000
+++ b/innobase/srv/srv0srv.c 2008-07-31 21:47:57 +0000
@@ -1803,7 +1803,9 @@ srv_export_innodb_status(void)
export_vars.innodb_buffer_pool_pages_data= UT_LIST_GET_LEN(buf_pool->LRU);
export_vars.innodb_buffer_pool_pages_dirty= UT_LIST_GET_LEN(buf_pool->flush_list);
export_vars.innodb_buffer_pool_pages_free= UT_LIST_GET_LEN(buf_pool->free);
+#ifdef UNIV_DEBUG
export_vars.innodb_buffer_pool_pages_latched= buf_get_latched_pages_number();
+#endif /* UNIV_DEBUG */
export_vars.innodb_buffer_pool_pages_total= buf_pool->curr_size;
export_vars.innodb_buffer_pool_pages_misc= buf_pool->max_size -
UT_LIST_GET_LEN(buf_pool->LRU) - UT_LIST_GET_LEN(buf_pool->free);
=== modified file 'innobase/trx/trx0trx.c'
--- a/innobase/trx/trx0trx.c 2007-08-15 23:20:54 +0000
+++ b/innobase/trx/trx0trx.c 2008-07-31 21:47:57 +0000
@@ -761,8 +761,8 @@ trx_commit_off_kernel(
mutex_enter(&(rseg->mutex));
if (trx->insert_undo != NULL) {
- trx_undo_set_state_at_finish(trx, trx->insert_undo,
- &mtr);
+ trx_undo_set_state_at_finish(
+ rseg, trx, trx->insert_undo, &mtr);
}
undo = trx->update_undo;
@@ -777,8 +777,8 @@ trx_commit_off_kernel(
because only a single OS thread is allowed to do the
transaction commit for this transaction. */
- update_hdr_page = trx_undo_set_state_at_finish(trx,
- undo, &mtr);
+ update_hdr_page = trx_undo_set_state_at_finish(
+ rseg, trx, undo, &mtr);
/* We have to do the cleanup for the update log while
holding the rseg mutex because update log headers
=== modified file 'innobase/trx/trx0undo.c'
--- a/innobase/trx/trx0undo.c 2005-06-21 17:15:22 +0000
+++ b/innobase/trx/trx0undo.c 2008-07-31 21:47:57 +0000
@@ -1724,6 +1724,7 @@ trx_undo_set_state_at_finish(
/*=========================*/
/* out: undo log segment header page,
x-latched */
+ trx_rseg_t* rseg, /* in: rollback segment memory object */
trx_t* trx __attribute__((unused)), /* in: transaction */
trx_undo_t* undo, /* in: undo log memory copy */
mtr_t* mtr) /* in: mtr */
@@ -1732,8 +1733,10 @@ trx_undo_set_state_at_finish(
trx_upagef_t* page_hdr;
page_t* undo_page;
ulint state;
-
- ut_ad(trx && undo && mtr);
+
+ ut_ad(trx);
+ ut_ad(undo);
+ ut_ad(mtr);
if (undo->id >= TRX_RSEG_N_SLOTS) {
fprintf(stderr, "InnoDB: Error: undo->id is %lu\n",
@@ -1747,9 +1750,23 @@ trx_undo_set_state_at_finish(
seg_hdr = undo_page + TRX_UNDO_SEG_HDR;
page_hdr = undo_page + TRX_UNDO_PAGE_HDR;
- if (undo->size == 1 && mach_read_from_2(page_hdr + TRX_UNDO_PAGE_FREE)
- < TRX_UNDO_PAGE_REUSE_LIMIT) {
- state = TRX_UNDO_CACHED;
+ if (undo->size == 1
+ && mach_read_from_2(page_hdr + TRX_UNDO_PAGE_FREE)
+ < TRX_UNDO_PAGE_REUSE_LIMIT) {
+
+ /* This is a heuristic to avoid the problem of all UNDO
+ slots ending up in one of the UNDO lists. Previously if
+ the server crashed with all the slots in one of the lists,
+ transactions that required the slots of a different type
+ would fail for lack of slots. */
+
+ if (UT_LIST_GET_LEN(rseg->update_undo_list) < 500
+ && UT_LIST_GET_LEN(rseg->insert_undo_list) < 500) {
+
+ state = TRX_UNDO_CACHED;
+ } else {
+ state = TRX_UNDO_TO_FREE;
+ }
} else if (undo->type == TRX_UNDO_INSERT) {
@@ -1759,7 +1776,7 @@ trx_undo_set_state_at_finish(
}
undo->state = state;
-
+
mlog_write_ulint(seg_hdr + TRX_UNDO_STATE, state, MLOG_2BYTES, mtr);
return(undo_page);
=== modified file 'libmysql/dll.c'
--- a/libmysql/dll.c 2004-08-18 17:57:55 +0000
+++ b/libmysql/dll.c 2008-09-01 21:46:37 +0000
@@ -89,9 +89,20 @@ BOOL APIENTRY LibMain(HANDLE hInst,DWORD
UNREFERENCED_PARAMETER(lpReserved);
} /* LibMain */
+
+static BOOL do_libmain;
int __stdcall DllMain(HANDLE hInst,DWORD ul_reason_being_called,LPVOID lpReserved)
{
- return LibMain(hInst,ul_reason_being_called,lpReserved);
+ /*
+ Unless environment variable LIBMYSQL_DLLINIT is set, do nothing.
+ The environment variable is checked once, during the first call to DllMain()
+ (in DLL_PROCESS_ATTACH hook).
+ */
+ if (ul_reason_being_called == DLL_PROCESS_ATTACH)
+ do_libmain = (getenv("LIBMYSQL_DLLINIT") != NULL);
+ if (do_libmain)
+ return LibMain(hInst,ul_reason_being_called,lpReserved);
+ return TRUE;
}
#elif defined(WINDOWS)
=== modified file 'man/Makefile.am'
--- a/man/Makefile.am 2006-12-31 00:02:27 +0000
+++ b/man/Makefile.am 2008-08-25 19:07:41 +0000
@@ -21,5 +21,11 @@ man1_MANS = @man1_files@
man8_MANS = @man8_files@
EXTRA_DIST = $(man1_MANS) $(man8_MANS)
+# 1) not needed in Unix binary packages,
+# 2) programs not generated in 5.0:
+install-data-hook:
+ rm -f $(DESTDIR)$(manlibdir)/man1/make_win_*
+ rm -f $(DESTDIR)$(manlibdir)/man1/ndb_print_*
+
# Don't update the files from bitkeeper
%::SCCS/s.%
=== modified file 'myisam/mi_check.c'
--- a/myisam/mi_check.c 2008-03-29 15:50:46 +0000
+++ b/myisam/mi_check.c 2008-08-22 12:31:53 +0000
@@ -1732,7 +1732,7 @@ err:
DATA_TMP_EXT, share->base.raid_chunks,
(param->testflag & T_BACKUP_DATA ?
MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) ||
- mi_open_datafile(info,share,-1))
+ mi_open_datafile(info,share,name,-1))
got_error=1;
}
}
@@ -2519,7 +2519,7 @@ err:
DATA_TMP_EXT, share->base.raid_chunks,
(param->testflag & T_BACKUP_DATA ?
MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) ||
- mi_open_datafile(info,share,-1))
+ mi_open_datafile(info,share,name,-1))
got_error=1;
}
}
@@ -3050,7 +3050,7 @@ err:
DATA_TMP_EXT, share->base.raid_chunks,
(param->testflag & T_BACKUP_DATA ?
MYF(MY_REDEL_MAKE_BACKUP): MYF(0))) ||
- mi_open_datafile(info,share,-1))
+ mi_open_datafile(info,share,name,-1))
got_error=1;
}
}
=== modified file 'myisam/mi_create.c'
--- a/myisam/mi_create.c 2007-07-11 09:37:47 +0000
+++ b/myisam/mi_create.c 2008-08-26 13:48:50 +0000
@@ -192,7 +192,7 @@ int mi_create(const char *name,uint keys
packed=(packed+7)/8;
if (pack_reclength != INT_MAX32)
pack_reclength+= reclength+packed +
- test(test_all_bits(options, HA_OPTION_CHECKSUM | HA_PACK_RECORD));
+ test(test_all_bits(options, HA_OPTION_CHECKSUM | HA_OPTION_PACK_RECORD));
min_pack_length+=packed;
if (!ci->data_file_length && ci->max_rows)
=== modified file 'myisam/mi_open.c'
--- a/myisam/mi_open.c 2008-07-14 20:16:37 +0000
+++ b/myisam/mi_open.c 2008-10-20 11:31:29 +0000
@@ -74,7 +74,7 @@ MI_INFO *test_if_reopen(char *filename)
MI_INFO *mi_open(const char *name, int mode, uint open_flags)
{
- int lock_error,kfile,open_mode,save_errno,have_rtree=0;
+ int lock_error,kfile,open_mode,save_errno,have_rtree=0, realpath_err;
uint i,j,len,errpos,head_length,base_pos,offset,info_length,keys,
key_parts,unique_key_parts,fulltext_keys,uniques;
char name_buff[FN_REFLEN], org_name[FN_REFLEN], index_name[FN_REFLEN],
@@ -94,7 +94,16 @@ MI_INFO *mi_open(const char *name, int m
head_length=sizeof(share_buff.state.header);
bzero((byte*) &info,sizeof(info));
- my_realpath(name_buff, fn_format(org_name,name,"",MI_NAME_IEXT,4),MYF(0));
+ realpath_err= my_realpath(name_buff,
+ fn_format(org_name,name,"",MI_NAME_IEXT,4),MYF(0));
+ if (my_is_symlink(org_name) &&
+ (realpath_err || (*myisam_test_invalid_symlink)(name_buff)))
+ {
+ my_errno= HA_WRONG_CREATE_OPTION;
+ DBUG_RETURN (NULL);
+ }
+
+
pthread_mutex_lock(&THR_LOCK_myisam);
if (!(old_info=test_if_reopen(name_buff)))
{
@@ -463,7 +472,7 @@ MI_INFO *mi_open(const char *name, int m
lock_error=1; /* Database unlocked */
}
- if (mi_open_datafile(&info, share, -1))
+ if (mi_open_datafile(&info, share, name, -1))
goto err;
errpos=5;
@@ -534,7 +543,7 @@ MI_INFO *mi_open(const char *name, int m
my_errno=EACCES; /* Can't open in write mode */
goto err;
}
- if (mi_open_datafile(&info, share, old_info->dfile))
+ if (mi_open_datafile(&info, share, name, old_info->dfile))
goto err;
errpos=5;
have_rtree= old_info->rtree_recursion_state != NULL;
@@ -1191,12 +1200,30 @@ The argument file_to_dup is here for the
exist a dup()-like call that would give us two different file descriptors.
*************************************************************************/
-int mi_open_datafile(MI_INFO *info, MYISAM_SHARE *share, File file_to_dup __attribute__((unused)))
+int mi_open_datafile(MI_INFO *info, MYISAM_SHARE *share, const char *org_name,
+ File file_to_dup __attribute__((unused)))
{
+ char *data_name= share->data_file_name;
+ char real_data_name[FN_REFLEN];
+
+ if (org_name)
+ {
+ fn_format(real_data_name,org_name,"",MI_NAME_DEXT,4);
+ if (my_is_symlink(real_data_name))
+ {
+ if (my_realpath(real_data_name, real_data_name, MYF(0)) ||
+ (*myisam_test_invalid_symlink)(real_data_name))
+ {
+ my_errno= HA_WRONG_CREATE_OPTION;
+ return 1;
+ }
+ data_name= real_data_name;
+ }
+ }
#ifdef USE_RAID
if (share->base.raid_type)
{
- info->dfile=my_raid_open(share->data_file_name,
+ info->dfile=my_raid_open(data_name,
share->mode | O_SHARE,
share->base.raid_type,
share->base.raid_chunks,
@@ -1205,8 +1232,7 @@ int mi_open_datafile(MI_INFO *info, MYIS
}
else
#endif
- info->dfile=my_open(share->data_file_name, share->mode | O_SHARE,
- MYF(MY_WME));
+ info->dfile=my_open(data_name, share->mode | O_SHARE, MYF(MY_WME));
return info->dfile >= 0 ? 0 : 1;
}
=== modified file 'myisam/mi_static.c'
--- a/myisam/mi_static.c 2006-12-31 00:02:27 +0000
+++ b/myisam/mi_static.c 2008-08-26 08:32:43 +0000
@@ -41,6 +41,15 @@ my_off_t myisam_max_temp_length= MAX_FIL
ulong myisam_bulk_insert_tree_size=8192*1024;
ulong myisam_data_pointer_size=4;
+
+static int always_valid(const char *filename __attribute__((unused)))
+{
+ return 0;
+}
+
+int (*myisam_test_invalid_symlink)(const char *filename)= always_valid;
+
+
/*
read_vec[] is used for converting between P_READ_KEY.. and SEARCH_
Position is , == , >= , <= , > , <
=== modified file 'myisam/myisamchk.c'
--- a/myisam/myisamchk.c 2007-11-14 10:38:26 +0000
+++ b/myisam/myisamchk.c 2008-08-22 12:31:53 +0000
@@ -1039,7 +1039,7 @@ static int myisamchk(MI_CHECK *param, my
error|=change_to_newfile(filename,MI_NAME_DEXT,DATA_TMP_EXT,
raid_chunks,
MYF(0));
- if (mi_open_datafile(info,info->s, -1))
+ if (mi_open_datafile(info,info->s, NULL, -1))
error=1;
param->out_flag&= ~O_NEW_DATA; /* We are using new datafile */
param->read_cache.file=info->dfile;
=== modified file 'myisam/myisamdef.h'
--- a/myisam/myisamdef.h 2007-04-18 11:22:23 +0000
+++ b/myisam/myisamdef.h 2008-08-22 12:31:53 +0000
@@ -739,7 +739,9 @@ void mi_disable_non_unique_index(MI_INFO
extern MI_INFO *test_if_reopen(char *filename);
my_bool check_table_is_closed(const char *name, const char *where);
-int mi_open_datafile(MI_INFO *info, MYISAM_SHARE *share, File file_to_dup);
+int mi_open_datafile(MI_INFO *info, MYISAM_SHARE *share, const char *orn_name,
+ File file_to_dup);
+
int mi_open_keyfile(MYISAM_SHARE *share);
void mi_setup_functions(register MYISAM_SHARE *share);
=== modified file 'myisam/rt_index.c'
--- a/myisam/rt_index.c 2007-10-05 10:41:56 +0000
+++ b/myisam/rt_index.c 2008-08-26 13:51:06 +0000
@@ -389,7 +389,7 @@ int rtree_get_first(MI_INFO *info, uint
info->rtree_recursion_depth = -1;
info->buff_used = 1;
- return rtree_get_req(info, &keyinfo[keynr], key_length, root, 0);
+ return rtree_get_req(info, keyinfo, key_length, root, 0);
}
@@ -436,7 +436,7 @@ int rtree_get_next(MI_INFO *info, uint k
return -1;
}
- return rtree_get_req(info, &keyinfo[keynr], key_length, root, 0);
+ return rtree_get_req(info, keyinfo, key_length, root, 0);
}
}
=== modified file 'mysql-test/include/ndb_backup_print.inc'
--- a/mysql-test/include/ndb_backup_print.inc 2007-03-07 06:19:37 +0000
+++ b/mysql-test/include/ndb_backup_print.inc 2008-09-20 06:21:28 +0000
@@ -1,6 +1,7 @@
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults $ndb_restore_opts -b $the_backup_id -n 1 $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id $ndb_restore_filter > $MYSQLTEST_VARDIR/tmp/tmp.dat
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults $ndb_restore_opts -b $the_backup_id -n 2 $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id $ndb_restore_filter >> $MYSQLTEST_VARDIR/tmp/tmp.dat
--exec sort $MYSQLTEST_VARDIR/tmp/tmp.dat
---exec rm -f $MYSQLTEST_VARDIR/tmp/tmp.dat
+--error 0,1
+--remove_file $MYSQLTEST_VARDIR/tmp/tmp.dat
--let ndb_restore_opts=
--let ndb_restore_filter=
=== modified file 'mysql-test/mysql-test-run.pl'
--- a/mysql-test/mysql-test-run.pl 2008-05-25 13:13:30 +0000
+++ b/mysql-test/mysql-test-run.pl 2008-10-02 14:29:41 +0000
@@ -3505,7 +3505,16 @@ sub run_testcase ($) {
{
mtr_timer_stop_all($glob_timers);
mtr_report("\nServers started, exiting");
- exit(0);
+ if ($glob_win32_perl)
+ {
+ #ActiveState perl hangs when using normal exit, use POSIX::_exit instead
+ use POSIX qw[ _exit ];
+ POSIX::_exit(0);
+ }
+ else
+ {
+ exit(0);
+ }
}
{
=== modified file 'mysql-test/r/binlog.result'
--- a/mysql-test/r/binlog.result 2008-02-08 10:55:55 +0000
+++ b/mysql-test/r/binlog.result 2008-10-01 09:48:47 +0000
@@ -582,4 +582,35 @@ master-bin.000001 4 Format_desc 1 98 Ser
master-bin.000001 98 Query 1 219 use `test`; create table t1 (a bigint unsigned, b bigint(20) unsigned)
master-bin.000001 219 Query 1 343 use `test`; insert into t1 values (9999999999999999,14632475938453979136)
master-bin.000001 343 Query 1 419 use `test`; drop table t1
+CREATE DATABASE bug39182 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
+USE bug39182;
+CREATE TABLE t1 (a VARCHAR(255) COLLATE utf8_unicode_ci)
+DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+CREATE PROCEDURE p1()
+BEGIN
+DECLARE s1 VARCHAR(255);
+SET s1= "test";
+CREATE TEMPORARY TABLE tmp1
+SELECT * FROM t1 WHERE a LIKE CONCAT("%", s1, "%");
+SELECT
+COLLATION(NAME_CONST('s1', _utf8'test')) c1,
+COLLATION(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) c2,
+COLLATION(s1) c3,
+COERCIBILITY(NAME_CONST('s1', _utf8'test')) d1,
+COERCIBILITY(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) d2,
+COERCIBILITY(s1) d3;
+DROP TEMPORARY TABLE tmp1;
+END//
+CALL p1();
+c1 c2 c3 d1 d2 d3
+utf8_general_ci utf8_unicode_ci utf8_unicode_ci 2 2 2
+SHOW BINLOG EVENTS FROM 1285;
+Log_name Pos Event_type Server_id End_log_pos Info
+master-bin.000001 1285 Query 1 1483 use `bug39182`; CREATE TEMPORARY TABLE tmp1
+SELECT * FROM t1 WHERE a LIKE CONCAT("%", NAME_CONST('s1',_utf8'test' COLLATE 'utf8_unicode_ci'), "%")
+master-bin.000001 1483 Query 1 1575 use `bug39182`; DROP TEMPORARY TABLE tmp1
+DROP PROCEDURE p1;
+DROP TABLE t1;
+DROP DATABASE bug39182;
+USE test;
End of 5.0 tests
=== modified file 'mysql-test/r/client_xml.result'
--- a/mysql-test/r/client_xml.result 2007-04-09 12:53:10 +0000
+++ b/mysql-test/r/client_xml.result 2008-07-18 09:07:16 +0000
@@ -1,3 +1,4 @@
+drop table if exists t1;
create table t1 (
`a&b` int,
`a<b` int,
=== modified file 'mysql-test/r/compare.result'
--- a/mysql-test/r/compare.result 2008-02-15 13:47:32 +0000
+++ b/mysql-test/r/compare.result 2008-09-18 12:55:36 +0000
@@ -90,4 +90,9 @@ Note 1276 Field or reference 'test.t2.a'
Note 1276 Field or reference 'test.t2.a' of SELECT #2 was resolved in SELECT #1
Note 1003 select `test`.`t2`.`a` AS `a`,(select count(0) AS `COUNT(*)` from `test`.`t1` where ((`test`.`t1`.`b` = `test`.`t2`.`a`) and (concat(`test`.`t1`.`b`,`test`.`t1`.`c`) = concat(_latin1'0',`test`.`t2`.`a`,_latin1'01')))) AS `x` from `test`.`t2` order by `test`.`t2`.`a`
DROP TABLE t1,t2;
+CREATE TABLE t1 (a TIMESTAMP);
+INSERT INTO t1 VALUES (NOW()),(NOW()),(NOW());
+SELECT * FROM t1 WHERE a > '2008-01-01' AND a = '0000-00-00';
+a
+DROP TABLE t1;
End of 5.0 tests
=== modified file 'mysql-test/r/create.result'
--- a/mysql-test/r/create.result 2008-02-01 08:00:40 +0000
+++ b/mysql-test/r/create.result 2008-10-02 11:57:52 +0000
@@ -1546,4 +1546,17 @@ SHOW INDEX FROM t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
t1 1 c1 1 c1 A NULL NULL NULL YES BTREE
DROP TABLE t1;
+create user mysqltest_1@'test@test';
+ERROR HY000: Malformed hostname (illegal symbol: '@')
+CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
+INSERT IGNORE INTO t1 (b) VALUES (5);
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+SELECT a FROM t1;
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+SELECT a FROM t1;
+ERROR 23000: Duplicate entry '1' for key 1
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+SELECT a FROM t1;
+ERROR 23000: Duplicate entry '1' for key 1
+DROP TABLE t1, t2;
End of 5.0 tests
=== modified file 'mysql-test/r/ctype_cp932_binlog.result'
--- a/mysql-test/r/ctype_cp932_binlog.result 2008-05-15 23:13:24 +0000
+++ b/mysql-test/r/ctype_cp932_binlog.result 2008-10-01 09:48:47 +0000
@@ -40,6 +40,6 @@ IN ind DECIMAL(10,2))
BEGIN
INSERT INTO t4 VALUES (ins1, ins2, ind);
END
-master-bin.000001 777 Query 1 988 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
-master-bin.000001 988 Query 1 1077 use `test`; DROP PROCEDURE bug18293
-master-bin.000001 1077 Query 1 1156 use `test`; DROP TABLE t4
+master-bin.000001 777 Query 1 1044 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172 COLLATE 'latin1_swedish_ci'), NAME_CONST('ins2',_cp932 0xED40ED41ED42 COLLATE 'cp932_japanese_ci'), NAME_CONST('ind',47.93))
+master-bin.000001 1044 Query 1 1133 use `test`; DROP PROCEDURE bug18293
+master-bin.000001 1133 Query 1 1212 use `test`; DROP TABLE t4
=== modified file 'mysql-test/r/default.result'
--- a/mysql-test/r/default.result 2007-09-20 08:54:46 +0000
+++ b/mysql-test/r/default.result 2008-09-03 07:32:43 +0000
@@ -205,4 +205,19 @@ Warnings:
Warning 1364 Field 'id' doesn't have a default value
drop view v1;
drop table t1;
+create table t1 (a int unique);
+create table t2 (b int default 10);
+insert into t1 (a) values (1);
+insert into t2 (b) values (1);
+insert into t1 (a) select b from t2 on duplicate key update a=default;
+select * from t1;
+a
+NULL
+insert into t1 (a) values (1);
+insert into t1 (a) select b from t2 on duplicate key update a=default(b);
+select * from t1;
+a
+NULL
+10
+drop table t1, t2;
End of 5.0 tests.
=== modified file 'mysql-test/r/distinct.result'
--- a/mysql-test/r/distinct.result 2007-08-27 15:33:41 +0000
+++ b/mysql-test/r/distinct.result 2008-09-23 09:24:32 +0000
@@ -608,6 +608,65 @@ id select_type table type possible_keys
SELECT DISTINCT a,a FROM t1 WHERE b < 12 ORDER BY a;
a a
DROP TABLE t1;
+DROP TABLE IF EXISTS t1;
+CREATE TABLE t1 (id INT NOT NULL, fruit_id INT NOT NULL, fruit_name varchar(20)
+default NULL);
+INSERT INTO t1 VALUES (1,1,'ORANGE');
+INSERT INTO t1 VALUES (2,2,'APPLE');
+INSERT INTO t1 VALUES (3,2,'APPLE');
+INSERT INTO t1 VALUES (4,3,'PEAR');
+SELECT DISTINCT fruit_id, fruit_name INTO @v1, @v2 FROM t1 WHERE fruit_name =
+'APPLE';
+SELECT @v1, @v2;
+@v1 @v2
+2 APPLE
+SELECT DISTINCT fruit_id, fruit_name INTO @v3, @v4 FROM t1 GROUP BY fruit_id,
+fruit_name HAVING fruit_name = 'APPLE';
+SELECT @v3, @v4;
+@v3 @v4
+2 APPLE
+SELECT DISTINCT @v5:= fruit_id, @v6:= fruit_name INTO @v7, @v8 FROM t1 WHERE
+fruit_name = 'APPLE';
+SELECT @v5, @v6, @v7, @v8;
+@v5 @v6 @v7 @v8
+3 PEAR 3 PEAR
+SELECT DISTINCT @v5 + fruit_id, CONCAT(@v6, fruit_name) INTO @v9, @v10 FROM t1
+WHERE fruit_name = 'APPLE';
+SELECT @v5, @v6, @v7, @v8, @v9, @v10;
+@v5 @v6 @v7 @v8 @v9 @v10
+3 PEAR 3 PEAR 5 PEARAPPLE
+SELECT DISTINCT @v11:= @v5 + fruit_id, @v12:= CONCAT(@v6, fruit_name) INTO
+@v13, @v14 FROM t1 WHERE fruit_name = 'APPLE';
+SELECT @v11, @v12, @v13, @v14;
+@v11 @v12 @v13 @v14
+6 PEARPEAR 6 PEARPEAR
+SELECT DISTINCT @v13, @v14 INTO @v15, @v16 FROM t1 WHERE fruit_name = 'APPLE';
+SELECT @v15, @v16;
+@v15 @v16
+6 PEARPEAR
+SELECT DISTINCT 2 + 2, 'Bob' INTO @v17, @v18 FROM t1 WHERE fruit_name =
+'APPLE';
+SELECT @v17, @v18;
+@v17 @v18
+4 Bob
+DROP TABLE IF EXISTS t2;
+CREATE TABLE t2 (fruit_id INT NOT NULL, fruit_name varchar(20)
+default NULL);
+SELECT DISTINCT fruit_id, fruit_name INTO OUTFILE
+'../tmp/data1.tmp' FROM t1 WHERE fruit_name = 'APPLE';
+LOAD DATA INFILE '../tmp/data1.tmp' INTO TABLE t2;
+SELECT DISTINCT @v19:= fruit_id, @v20:= fruit_name INTO OUTFILE
+'../tmp/data2.tmp' FROM t1 WHERE fruit_name = 'APPLE';
+LOAD DATA INFILE '../tmp/data2.tmp' INTO TABLE t2;
+SELECT @v19, @v20;
+@v19 @v20
+2 APPLE
+SELECT * FROM t2;
+fruit_id fruit_name
+2 APPLE
+2 APPLE
+DROP TABLE t1;
+DROP TABLE t2;
CREATE TABLE t1 (a CHAR(1));
INSERT INTO t1 VALUES('A'), (0);
SELECT a FROM t1 WHERE a=0;
=== modified file 'mysql-test/r/federated.result'
--- a/mysql-test/r/federated.result 2008-03-20 15:07:17 +0000
+++ b/mysql-test/r/federated.result 2008-09-16 17:05:30 +0000
@@ -9,6 +9,10 @@ DROP DATABASE IF EXISTS federated;
CREATE DATABASE federated;
DROP DATABASE IF EXISTS federated;
CREATE DATABASE federated;
+SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT= 0;
+SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT= 0;
DROP TABLE IF EXISTS federated.t1;
Warnings:
Note 1051 Unknown table 't1'
@@ -83,7 +87,7 @@ t2 CREATE TABLE `t2` (
) ENGINE=FEDERATED DEFAULT CHARSET=latin1 CONNECTION='mysql://root@stripped:SLAVE_PORT/federated/t1'
INSERT INTO federated.t2 (id, name) VALUES (1, 'foo');
INSERT INTO federated.t2 (id, name) VALUES (2, 'fee');
-SELECT * FROM federated.t2;
+SELECT * FROM federated.t2 ORDER BY id, name;
id name
1 foo
2 fee
@@ -108,7 +112,7 @@ ENGINE="FEDERATED" DEFAULT CHARSET=latin
CONNECTION='mysql://root@stripped:SLAVE_PORT/federated/t1%';
INSERT INTO federated.t1 (id, name) VALUES (1, 'foo');
INSERT INTO federated.t1 (id, name) VALUES (2, 'fee');
-SELECT * FROM federated.t1;
+SELECT * FROM federated.t1 ORDER BY id,name;
id name
1 foo
2 fee
@@ -122,7 +126,7 @@ ENGINE="FEDERATED" DEFAULT CHARSET=latin
CONNECTION='mysql://root@127.0.0.1:SLAVE_PORT/federated/t1%';
INSERT INTO federated.`t1%` (id, name) VALUES (1, 'foo');
INSERT INTO federated.`t1%` (id, name) VALUES (2, 'fee');
-SELECT * FROM federated.`t1%`;
+SELECT * FROM federated.`t1%` ORDER BY id, name;
id name
1 foo
2 fee
@@ -160,6 +164,7 @@ INSERT INTO federated.t1 (name, other) V
SELECT * FROM federated.t1;
id name other created
1 First Name 11111 2004-04-04 04:04:04
+10 Tenth Name 101010 2004-04-04 04:04:04
2 Second Name 22222 2004-04-04 04:04:04
3 Third Name 33333 2004-04-04 04:04:04
4 Fourth Name 44444 2004-04-04 04:04:04
@@ -168,7 +173,6 @@ id name other created
7 Seventh Name 77777 2004-04-04 04:04:04
8 Eigth Name 88888 2004-04-04 04:04:04
9 Ninth Name 99999 2004-04-04 04:04:04
-10 Tenth Name 101010 2004-04-04 04:04:04
SELECT * FROM federated.t1 WHERE id = 5;
id name other created
5 Fifth Name 55555 2004-04-04 04:04:04
@@ -182,6 +186,7 @@ SELECT * FROM federated.t1 WHERE name =
id name other created
SELECT * FROM federated.t1 WHERE name like '%th%';
id name other created
+10 Tenth Name 101010 2004-04-04 04:04:04
3 Third Name 33333 2004-04-04 04:04:04
4 Fourth Name 44444 2004-04-04 04:04:04
5 Fifth Name 55555 2004-04-04 04:04:04
@@ -189,7 +194,6 @@ id name other created
7 Seventh Name 77777 2004-04-04 04:04:04
8 Eigth Name 88888 2004-04-04 04:04:04
9 Ninth Name 99999 2004-04-04 04:04:04
-10 Tenth Name 101010 2004-04-04 04:04:04
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
SELECT * FROM federated.t1 WHERE name = '3rd name';
id name other created
@@ -310,6 +314,7 @@ VALUES ('Tenth Name', 101010, '2005-03-1
SELECT * FROM federated.t1;
id name other created
1 First Name 11111 2004-01-01 01:01:01
+10 Tenth Name 101010 2005-03-12 12:00:01
2 Second Name 22222 2004-01-23 02:43:00
3 Third Name 33333 2004-02-14 02:14:00
4 Fourth Name 44444 2003-04-05 00:00:00
@@ -318,7 +323,6 @@ id name other created
7 Seventh Name 77777 2003-12-12 18:32:00
8 Eigth Name 88888 2005-03-12 11:00:00
9 Ninth Name 99999 2005-03-12 11:00:01
-10 Tenth Name 101010 2005-03-12 12:00:01
SELECT * FROM federated.t1 WHERE id = 5;
id name other created
5 Fifth Name 55555 2001-02-02 02:02:02
@@ -330,6 +334,7 @@ id name other created
4 Fourth Name 44444 2003-04-05 00:00:00
SELECT * FROM federated.t1 WHERE name like '%th%';
id name other created
+10 Tenth Name 101010 2005-03-12 12:00:01
3 Third Name 33333 2004-02-14 02:14:00
4 Fourth Name 44444 2003-04-05 00:00:00
5 Fifth Name 55555 2001-02-02 02:02:02
@@ -337,7 +342,6 @@ id name other created
7 Seventh Name 77777 2003-12-12 18:32:00
8 Eigth Name 88888 2005-03-12 11:00:00
9 Ninth Name 99999 2005-03-12 11:00:01
-10 Tenth Name 101010 2005-03-12 12:00:01
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
SELECT * FROM federated.t1 WHERE name = '3rd name';
id name other created
@@ -444,17 +448,17 @@ id name other
7 Seventh Name NULL
SELECT * FROM federated.t1 WHERE name IS NULL;
id name other
-4 NULL NULL
10 NULL fee fie foe fum
+4 NULL NULL
SELECT * FROM federated.t1 WHERE name IS NULL and other IS NULL;
id name other
4 NULL NULL
SELECT * FROM federated.t1 WHERE name IS NULL or other IS NULL;
id name other
+10 NULL fee fie foe fum
2 Second Name NULL
4 NULL NULL
7 Seventh Name NULL
-10 NULL fee fie foe fum
UPDATE federated.t1
SET name = 'Fourth Name', other = 'four four four'
WHERE name IS NULL AND other IS NULL;
@@ -466,6 +470,7 @@ id name other
SELECT * FROM federated.t1;
id name other
1 First Name 11111
+10 Tenth Name fee fie foe fum
2 Second Name two two two two
3 Third Name 33333
4 Fourth Name four four four
@@ -474,7 +479,6 @@ id name other
7 Seventh Name seven seven
8 Eigth Name 88888
9 Ninth Name 99999
-10 Tenth Name fee fie foe fum
DROP TABLE IF EXISTS federated.t1;
CREATE TABLE federated.t1 (
`id` int(20) NOT NULL auto_increment,
@@ -655,8 +659,8 @@ id col1 col2 col3 col4
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'five 5 five five 5')
OR (col2 = 'three Three' AND col3 = 33);
id col1 col2 col3 col4
-5 5 five 5 five five 5 5 55555
3 3 three Three 33 33333
+5 5 five 5 five five 5 5 55555
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'Two two')
OR (col2 = 444 AND col3 = 4444444);
id col1 col2 col3 col4
@@ -667,25 +671,25 @@ OR col3 = 33
OR col4 = 4444444;
id col1 col2 col3 col4
1 1 one One 11 1111
+10 10 Tenth ten TEN 1010101 1010
2 2 Two two 22 2222
3 3 three Three 33 33333
4 4 fourfourfour 444 4444444
-10 10 Tenth ten TEN 1010101 1010
SELECT * FROM federated.t1 WHERE id > 5;
id col1 col2 col3 col4
+10 10 Tenth ten TEN 1010101 1010
6 6 six six Sixsix 6666 6
7 7 seven Sevenseven 77777 7777
8 8 eight eight eight 88888 88
9 9 nine Nine 999999 999999
-10 10 Tenth ten TEN 1010101 1010
SELECT * FROM federated.t1 WHERE id >= 5;
id col1 col2 col3 col4
+10 10 Tenth ten TEN 1010101 1010
5 5 five 5 five five 5 5 55555
6 6 six six Sixsix 6666 6
7 7 seven Sevenseven 77777 7777
8 8 eight eight eight 88888 88
9 9 nine Nine 999999 999999
-10 10 Tenth ten TEN 1010101 1010
SELECT * FROM federated.t1 WHERE id < 5;
id col1 col2 col3 col4
1 1 one One 11 1111
@@ -702,6 +706,7 @@ id col1 col2 col3 col4
SELECT * FROM federated.t1 WHERE id != 5;
id col1 col2 col3 col4
1 1 one One 11 1111
+10 10 Tenth ten TEN 1010101 1010
2 2 Two two 22 2222
3 3 three Three 33 33333
4 4 fourfourfour 444 4444444
@@ -709,7 +714,6 @@ id col1 col2 col3 col4
7 7 seven Sevenseven 77777 7777
8 8 eight eight eight 88888 88
9 9 nine Nine 999999 999999
-10 10 Tenth ten TEN 1010101 1010
SELECT * FROM federated.t1 WHERE id > 3 AND id < 7;
id col1 col2 col3 col4
4 4 fourfourfour 444 4444444
@@ -737,25 +741,25 @@ id col1 col2 col3 col4
SELECT * FROM federated.t1 WHERE id < 3 OR id > 7;
id col1 col2 col3 col4
1 1 one One 11 1111
+10 10 Tenth ten TEN 1010101 1010
2 2 Two two 22 2222
8 8 eight eight eight 88888 88
9 9 nine Nine 999999 999999
-10 10 Tenth ten TEN 1010101 1010
SELECT * FROM federated.t1 WHERE col2 = 'three Three';
id col1 col2 col3 col4
3 3 three Three 33 33333
SELECT * FROM federated.t1 WHERE col2 > 'one';
id col1 col2 col3 col4
1 1 one One 11 1111
+10 10 Tenth ten TEN 1010101 1010
2 2 Two two 22 2222
3 3 three Three 33 33333
6 6 six six Sixsix 6666 6
7 7 seven Sevenseven 77777 7777
-10 10 Tenth ten TEN 1010101 1010
SELECT * FROM federated.t1 WHERE col2 LIKE 's%';
id col1 col2 col3 col4
-7 7 seven Sevenseven 77777 7777
6 6 six six Sixsix 6666 6
+7 7 seven Sevenseven 77777 7777
SELECT * FROM federated.t1 WHERE col2 LIKE 'si%';
id col1 col2 col3 col4
6 6 six six Sixsix 6666 6
@@ -765,6 +769,7 @@ id col1 col2 col3 col4
SELECT * FROM federated.t1 WHERE col2 NOT LIKE 'e%';
id col1 col2 col3 col4
1 1 one One 11 1111
+10 10 Tenth ten TEN 1010101 1010
2 2 Two two 22 2222
3 3 three Three 33 33333
4 4 fourfourfour 444 4444444
@@ -772,18 +777,17 @@ id col1 col2 col3 col4
6 6 six six Sixsix 6666 6
7 7 seven Sevenseven 77777 7777
9 9 nine Nine 999999 999999
-10 10 Tenth ten TEN 1010101 1010
SELECT * FROM federated.t1 WHERE col2 <> 'one One';
id col1 col2 col3 col4
-4 4 fourfourfour 444 4444444
-5 5 five 5 five five 5 5 55555
-8 8 eight eight eight 88888 88
-9 9 nine Nine 999999 999999
+10 10 Tenth ten TEN 1010101 1010
2 2 Two two 22 2222
3 3 three Three 33 33333
+4 4 fourfourfour 444 4444444
+5 5 five 5 five five 5 5 55555
6 6 six six Sixsix 6666 6
7 7 seven Sevenseven 77777 7777
-10 10 Tenth ten TEN 1010101 1010
+8 8 eight eight eight 88888 88
+9 9 nine Nine 999999 999999
DROP TABLE IF EXISTS federated.t1;
CREATE TABLE federated.t1 (
`col1` varchar(8) NOT NULL DEFAULT '',
@@ -950,11 +954,11 @@ INSERT INTO federated.t1 (name, floatval
VALUES (0, 00.3333, NULL);
SELECT * FROM federated.t1;
id name floatval other
+1 NULL NULL NULL
+NULL 0 0.3333 NULL
NULL NULL NULL NULL
NULL NULL NULL NULL
-1 NULL NULL NULL
NULL foo 33.3333 NULL
-NULL 0 0.3333 NULL
SELECT count(*) FROM federated.t1
WHERE id IS NULL
AND name IS NULL
@@ -983,13 +987,13 @@ Warning 1101 BLOB/TEXT column 'blurb' ca
INSERT INTO federated.t1 VALUES (1, " MySQL supports a number of column types in several categories: numeric types, date and time types, and string (character) types. This chapter first gives an overview of these column types, and then provides a more detailed description of the properties of the types in each category, and a summary of the column type storage requirements. The overview is intentionally brief. The more detailed descriptions should be consulted for additional information about particular column types, such as the allowable formats in which you can specify values.");
INSERT INTO federated.t1 VALUES (2, "All arithmetic is done using signed BIGINT or DOUBLE values, so you should not use unsigned big integers larger than 9223372036854775807 (63 bits) except with bit functions! If you do that, some of the last digits in the result may be wrong because of rounding errors when converting a BIGINT value to a DOUBLE.");
INSERT INTO federated.t1 VALUES (3, " A floating-point number. p represents the precision. It can be from 0 to 24 for a single-precision floating-point number and from 25 to 53 for a double-precision floating-point number. These types are like the FLOAT and DOUBLE types described immediately following. FLOAT(p) has the same range as the corresponding FLOAT and DOUBLE types, but the display size and number of decimals are undefined. ");
-INSERT INTO federated.t1 VALUES(4, "Die �ersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest f�anden, der seine Zielsprache ernst nimmt:");
+INSERT INTO federated.t1 VALUES(4, "Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt:");
SELECT * FROM federated.t1;
blurb_id blurb
1 MySQL supports a number of column types in several categories: numeric types, date and time types, and string (character) types. This chapter first gives an overview of these column types, and then provides a more detailed description of the properties of the types in each category, and a summary of the column type storage requirements. The overview is intentionally brief. The more detailed descriptions should be consulted for additional information about particular column types, such as the allowable formats in which you can specify values.
2 All arithmetic is done using signed BIGINT or DOUBLE values, so you should not use unsigned big integers larger than 9223372036854775807 (63 bits) except with bit functions! If you do that, some of the last digits in the result may be wrong because of rounding errors when converting a BIGINT value to a DOUBLE.
3 A floating-point number. p represents the precision. It can be from 0 to 24 for a single-precision floating-point number and from 25 to 53 for a double-precision floating-point number. These types are like the FLOAT and DOUBLE types described immediately following. FLOAT(p) has the same range as the corresponding FLOAT and DOUBLE types, but the display size and number of decimals are undefined.
-4 Die �ersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest f�anden, der seine Zielsprache ernst nimmt:
+4 Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt:
DROP TABLE IF EXISTS federated.t1;
CREATE TABLE federated.t1 (
`a` int NOT NULL,
@@ -1741,20 +1745,20 @@ create trigger federated.t1_bi before in
create table federated.t2 (a int, b int);
insert into federated.t2 values (13, 17), (19, 23);
insert into federated.t1 (a, b) values (1, 2), (3, 5), (7, 11);
-select * from federated.t1;
+select * from federated.t1 order by a;
a b c
1 2 2
3 5 15
7 11 77
delete from federated.t1;
insert into federated.t1 (a, b) select * from federated.t2;
-select * from federated.t1;
+select * from federated.t1 order by a;
a b c
13 17 221
19 23 437
delete from federated.t1;
load data infile '../std_data_ln/loaddata5.dat' into table federated.t1 fields terminated by '' enclosed by '' ignore 1 lines (a, b);
-select * from federated.t1;
+select * from federated.t1 order by a;
a b c
3 4 12
5 6 30
@@ -2071,6 +2075,19 @@ DROP TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://';
DROP TABLE t1;
+CREATE TABLE t1 (a LONGBLOB, b LONGBLOB);
+INSERT INTO t1 VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaa', NULL);
+CREATE TABLE t1
+(a LONGBLOB, b LONGBLOB) ENGINE=FEDERATED
+CONNECTION='mysql://root@stripped:SLAVE_PORT/test/t1';
+CHECKSUM TABLE t1;
+Table Checksum
+test.t1 2465757603
+DROP TABLE t1;
+DROP TABLE t1;
+End of 5.0 tests
+SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
DROP TABLE IF EXISTS federated.t1;
=== modified file 'mysql-test/r/federated_bug_25714.result'
--- a/mysql-test/r/federated_bug_25714.result 2007-07-24 06:35:43 +0000
+++ b/mysql-test/r/federated_bug_25714.result 2008-10-02 11:04:29 +0000
@@ -9,6 +9,10 @@ DROP DATABASE IF EXISTS federated;
CREATE DATABASE federated;
DROP DATABASE IF EXISTS federated;
CREATE DATABASE federated;
+SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT= 0;
+SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT= 0;
DROP TABLE IF EXISTS federated.bug_13118_table;
CREATE TABLE federated.t1 (
`id` int auto_increment primary key,
@@ -49,7 +53,9 @@ id value
7 54
8 55
DROP TABLE federated.t1;
+SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
DROP TABLE federated.t1;
+SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
DROP TABLE IF EXISTS federated.t1;
DROP DATABASE IF EXISTS federated;
DROP TABLE IF EXISTS federated.t1;
=== modified file 'mysql-test/r/func_if.result'
--- a/mysql-test/r/func_if.result 2007-02-12 20:59:29 +0000
+++ b/mysql-test/r/func_if.result 2008-07-30 11:07:37 +0000
@@ -131,3 +131,49 @@ drop table t1;
select if(0, 18446744073709551610, 18446744073709551610);
if(0, 18446744073709551610, 18446744073709551610)
18446744073709551610
+CREATE TABLE t1(a DECIMAL(10,3));
+SELECT t1.a,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,0)))))))))))))))))))))))))))))) + 1
+FROM t1;
+a IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((ROUND(t1.a,2)=1), 2,
+IF((R
+DROP TABLE t1;
+End of 5.0 tests
=== modified file 'mysql-test/r/func_misc.result'
--- a/mysql-test/r/func_misc.result 2008-06-02 19:57:11 +0000
+++ b/mysql-test/r/func_misc.result 2008-07-10 01:58:30 +0000
@@ -305,4 +305,18 @@ drop table t1;
SELECT NAME_CONST('var', 'value') COLLATE latin1_general_cs;
NAME_CONST('var', 'value') COLLATE latin1_general_cs
value
+select @@session.time_zone into @save_tz;
+set @@session.time_zone='UTC';
+select uuid() into @my_uuid;
+select mid(@my_uuid,15,1);
+mid(@my_uuid,15,1)
+1
+select 24 * 60 * 60 * 1000 * 1000 * 10 into @my_uuid_one_day;
+select concat('0',mid(@my_uuid,16,3),mid(@my_uuid,10,4),left(@my_uuid,8)) into @my_uuidate;
+select floor(conv(@my_uuidate,16,10)/@my_uuid_one_day) into @my_uuid_date;
+select 141427 + datediff(curdate(),'1970-01-01') into @my_uuid_synthetic;
+select @my_uuid_date - @my_uuid_synthetic;
+@my_uuid_date - @my_uuid_synthetic
+0
+set @@session.time_zone=@save_tz;
End of 5.0 tests
=== modified file 'mysql-test/r/func_regexp.result'
--- a/mysql-test/r/func_regexp.result 2007-10-30 08:21:44 +0000
+++ b/mysql-test/r/func_regexp.result 2008-09-05 08:30:01 +0000
@@ -114,4 +114,16 @@ End of 4.1 tests
SELECT 1 REGEXP NULL;
1 REGEXP NULL
NULL
+SELECT '' REGEXP BINARY NULL;
+'' REGEXP BINARY NULL
+NULL
+SELECT NULL REGEXP BINARY NULL;
+NULL REGEXP BINARY NULL
+NULL
+SELECT 'A' REGEXP BINARY NULL;
+'A' REGEXP BINARY NULL
+NULL
+SELECT "ABC" REGEXP BINARY NULL;
+"ABC" REGEXP BINARY NULL
+NULL
End of 5.0 tests
=== modified file 'mysql-test/r/group_min_max.result'
--- a/mysql-test/r/group_min_max.result 2007-11-20 14:07:24 +0000
+++ b/mysql-test/r/group_min_max.result 2008-08-27 13:03:17 +0000
@@ -2353,3 +2353,79 @@ a MIN(b) MAX(b) AVG(b)
2 1 3 2.0000
1 1 3 2.0000
DROP TABLE t1;
+create table t1 (a int, b int, primary key (a,b), key `index` (a,b)) engine=MyISAM;
+insert into t1 (a,b) values
+(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),
+(0,7),(0,8),(0,9),(0,10),(0,11),(0,12),(0,13),
+(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),
+(1,7),(1,8),(1,9),(1,10),(1,11),(1,12),(1,13),
+(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),
+(2,7),(2,8),(2,9),(2,10),(2,11),(2,12),(2,13),
+(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),
+(3,7),(3,8),(3,9),(3,10),(3,11),(3,12),(3,13);
+insert into t1 (a,b) select a, max(b)+1 from t1 where a = 0 group by a;
+select * from t1;
+a b
+0 0
+0 1
+0 2
+0 3
+0 4
+0 5
+0 6
+0 7
+0 8
+0 9
+0 10
+0 11
+0 12
+0 13
+0 14
+1 0
+1 1
+1 2
+1 3
+1 4
+1 5
+1 6
+1 7
+1 8
+1 9
+1 10
+1 11
+1 12
+1 13
+2 0
+2 1
+2 2
+2 3
+2 4
+2 5
+2 6
+2 7
+2 8
+2 9
+2 10
+2 11
+2 12
+2 13
+3 0
+3 1
+3 2
+3 3
+3 4
+3 5
+3 6
+3 7
+3 8
+3 9
+3 10
+3 11
+3 12
+3 13
+explain extended select sql_buffer_result a, max(b)+1 from t1 where a = 0 group by a;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range PRIMARY,index PRIMARY 4 NULL 3 Using where; Using index for group-by; Using temporary
+Warnings:
+Note 1003 select sql_buffer_result `test`.`t1`.`a` AS `a`,(max(`test`.`t1`.`b`) + 1) AS `max(b)+1` from `test`.`t1` where (`test`.`t1`.`a` = 0) group by `test`.`t1`.`a`
+drop table t1;
=== modified file 'mysql-test/r/index_merge.result'
--- a/mysql-test/r/index_merge.result 2007-11-30 05:32:04 +0000
+++ b/mysql-test/r/index_merge.result 2008-10-01 15:50:55 +0000
@@ -518,3 +518,13 @@ a filler b
4 zz 4
5 qq 4
drop table t1, t2;
+CREATE TABLE t1 (a varchar(8), b set('a','b','c','d','e','f','g','h'),
+KEY b(b), KEY a(a));
+INSERT INTO t1 VALUES ('y',''), ('z','');
+SELECT b,a from t1 WHERE (b!='c' AND b!='f' && b!='h') OR
+(a='pure-S') OR (a='DE80337a') OR (a='DE80799');
+b a
+ y
+ z
+DROP TABLE t1;
+End of 5.0 tests
=== modified file 'mysql-test/r/information_schema_db.result'
--- a/mysql-test/r/information_schema_db.result 2007-12-10 20:28:17 +0000
+++ b/mysql-test/r/information_schema_db.result 2008-10-20 11:31:29 +0000
@@ -210,3 +210,24 @@ drop view testdb_1.v1, v2, testdb_1.v3,
drop database testdb_1;
drop user testdb_1@localhost;
drop user testdb_2@localhost;
+create database testdb_1;
+create table testdb_1.t1 (a int);
+create view testdb_1.v1 as select * from testdb_1.t1;
+grant show view on testdb_1.* to mysqltest_1@localhost;
+grant select on testdb_1.v1 to mysqltest_1@localhost;
+select table_schema, table_name, view_definition from information_schema.views
+where table_name='v1';
+table_schema table_name view_definition
+testdb_1 v1 /* ALGORITHM=UNDEFINED */ select `testdb_1`.`t1`.`a` AS `a` from `testdb_1`.`t1`
+show create view testdb_1.v1;
+View Create View
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `testdb_1`.`v1` AS select `testdb_1`.`t1`.`a` AS `a` from `testdb_1`.`t1`
+revoke select on testdb_1.v1 from mysqltest_1@localhost;
+select table_schema, table_name, view_definition from information_schema.views
+where table_name='v1';
+table_schema table_name view_definition
+testdb_1 v1
+show create view testdb_1.v1;
+ERROR 42000: SELECT command denied to user 'mysqltest_1'@'localhost' for table 'v1'
+drop user mysqltest_1@localhost;
+drop database testdb_1;
=== added file 'mysql-test/r/innodb-autoinc-optimize.result'
--- a/mysql-test/r/innodb-autoinc-optimize.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/innodb-autoinc-optimize.result 2008-07-31 21:47:57 +0000
@@ -0,0 +1,6 @@
+drop table if exists t1;
+create table t1(a int not null auto_increment primary key) engine=innodb;
+insert into t1 set a = -1;
+optimize table t1;
+Table Op Msg_type Msg_text
+test.t1 optimize status OK
=== added file 'mysql-test/r/innodb_bug35220.result'
--- a/mysql-test/r/innodb_bug35220.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/innodb_bug35220.result 2008-08-08 00:25:24 +0000
@@ -0,0 +1 @@
+SET storage_engine=InnoDB;
=== modified file 'mysql-test/r/innodb_mysql.result'
--- a/mysql-test/r/innodb_mysql.result 2008-02-07 07:12:49 +0000
+++ b/mysql-test/r/innodb_mysql.result 2008-07-23 11:25:00 +0000
@@ -1246,4 +1246,19 @@ set global innodb_autoextend_increment=@
set @my_innodb_commit_concurrency=@@global.innodb_commit_concurrency;
set global innodb_commit_concurrency=0;
set global innodb_commit_concurrency=@my_innodb_commit_concurrency;
+CREATE TABLE t1 (a int, b int, c int, PRIMARY KEY (a), KEY t1_b (b))
+ENGINE=InnoDB;
+INSERT INTO t1 (a,b,c) VALUES (1,1,1), (2,1,1), (3,1,1), (4,1,1);
+INSERT INTO t1 (a,b,c) SELECT a+4,b,c FROM t1;
+EXPLAIN SELECT a, b, c FROM t1 WHERE b = 1 ORDER BY a DESC LIMIT 5;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 range t1_b t1_b 5 NULL 4 Using where
+SELECT a, b, c FROM t1 WHERE b = 1 ORDER BY a DESC LIMIT 5;
+a b c
+8 1 1
+7 1 1
+6 1 1
+5 1 1
+4 1 1
+DROP TABLE t1;
End of 5.0 tests
=== modified file 'mysql-test/r/join.result'
--- a/mysql-test/r/join.result 2007-05-04 13:47:58 +0000
+++ b/mysql-test/r/join.result 2008-10-06 12:18:13 +0000
@@ -747,11 +747,13 @@ select t1.b from v1a;
ERROR 42S22: Unknown column 't1.b' in 'field list'
select * from v1a join v1b on t1.b = t2.b;
ERROR 42S22: Unknown column 't1.b' in 'on clause'
-select * from information_schema.statistics join information_schema.columns
-using(table_name,column_name) where table_name='user';
-TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION CARDINALITY SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA ORDINAL_POSITION COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA PRIVILEGES COLUMN_COMMENT
-user Host NULL mysql 0 mysql PRIMARY 1 A NULL NULL NULL BTREE NULL mysql 1 NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI #
-user User NULL mysql 0 mysql PRIMARY 2 A 3 NULL NULL BTREE NULL mysql 2 NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI #
+select
+statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.COLLATION, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.COMMENT,
+columns.TABLE_CATALOG, columns.TABLE_SCHEMA, columns.COLUMN_DEFAULT, columns.IS_NULLABLE, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.CHARACTER_OCTET_LENGTH, columns.NUMERIC_PRECISION, columns.NUMERIC_SCALE, columns.CHARACTER_SET_NAME, columns.COLLATION_NAME, columns.COLUMN_TYPE, columns.COLUMN_KEY, columns.EXTRA, columns.COLUMN_COMMENT
+from information_schema.statistics join information_schema.columns using(table_name,column_name) where table_name='user';
+TABLE_NAME COLUMN_NAME TABLE_CATALOG TABLE_SCHEMA NON_UNIQUE INDEX_SCHEMA INDEX_NAME SEQ_IN_INDEX COLLATION SUB_PART PACKED NULLABLE INDEX_TYPE COMMENT TABLE_CATALOG TABLE_SCHEMA COLUMN_DEFAULT IS_NULLABLE DATA_TYPE CHARACTER_MAXIMUM_LENGTH CHARACTER_OCTET_LENGTH NUMERIC_PRECISION NUMERIC_SCALE CHARACTER_SET_NAME COLLATION_NAME COLUMN_TYPE COLUMN_KEY EXTRA COLUMN_COMMENT
+user Host NULL mysql 0 mysql PRIMARY 1 A NULL NULL BTREE NULL mysql NO char 60 180 NULL NULL utf8 utf8_bin char(60) PRI
+user User NULL mysql 0 mysql PRIMARY 2 A NULL NULL BTREE NULL mysql NO char 16 48 NULL NULL utf8 utf8_bin char(16) PRI
drop table t1;
drop table t2;
drop table t3;
=== modified file 'mysql-test/r/loaddata.result'
--- a/mysql-test/r/loaddata.result 2008-03-28 20:39:47 +0000
+++ b/mysql-test/r/loaddata.result 2008-09-18 09:24:50 +0000
@@ -328,3 +328,123 @@ DROP VIEW v2;
DROP VIEW v3;
# -- End of Bug#35469.
+Bug#37114
+SET SESSION character_set_client=latin1;
+SET SESSION character_set_server=latin1;
+SET SESSION character_set_connection=latin1;
+SET @OLD_SQL_MODE=@@SESSION.SQL_MODE;
+test LOAD DATA INFILE
+SET sql_mode = '';
+SELECT '1 \\aa\n' INTO DUMPFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt';
+CREATE TABLE t1 (id INT, val1 CHAR(3)) ENGINE=MyISAM;
+SET sql_mode = 'NO_BACKSLASH_ESCAPES';
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' REPLACE INTO TABLE t1 FIELDS TERMINATED BY ' ';
+SELECT * FROM t1;
+id val1
+1 \aa
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114_out.txt' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1;
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114_out.txt' FIELDS TERMINATED BY ' ' FROM t1;
+INSERT INTO t1 (id, val1) VALUES (1, '\aa');
+SELECT * FROM t1;
+id val1
+1 \aa
+1 \aa
+SET sql_mode='';
+INSERT INTO t1 (id, val1) VALUES (1, '\aa');
+SELECT * FROM t1;
+id val1
+1 \aa
+1 \aa
+1 aa
+DROP TABLE t1;
+test SELECT INTO OUTFILE
+CREATE TABLE t1 (id INT PRIMARY KEY, val1 CHAR(4));
+CREATE TABLE t2 LIKE t1;
+SET sql_mode = '';
+INSERT INTO t1 (id, val1) VALUES (5, '\ttab');
+INSERT INTO t1 (id, val1) VALUES (4, '\\r');
+SET sql_mode = 'NO_BACKSLASH_ESCAPES';
+INSERT INTO t1 (id, val1) VALUES (3, '\tx');
+1.1 NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS TERMINATED BY ' ';
+SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
+SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
+t id val1 hex(val1)
+before 3 \tx 5C7478
+after 3 \tx 5C7478
+before 4 \r 5C72
+after 4 \r 5C72
+before 5 tab 09746162
+after 5 tab 09746162
+TRUNCATE t2;
+SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
+LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
+3 \tx
+4 \r
+5 tab
+
+1.2 NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS ESCAPED BY '\' TERMINATED BY ' ' FROM t1 ORDER BY id;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS ESCAPED BY '\' TERMINATED BY ' ';
+SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
+SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
+t id val1 hex(val1)
+before 3 \tx 5C7478
+after 3 \tx 5C7478
+before 4 \r 5C72
+after 4 \r 5C72
+before 5 tab 09746162
+after 5 tab 09746162
+TRUNCATE t2;
+SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
+LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
+3 \\tx
+4 \\r
+5 tab
+
+SET sql_mode = '';
+2.1 !NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS TERMINATED BY ' ';
+SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
+SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
+t id val1 hex(val1)
+before 3 \tx 5C7478
+after 3 \tx 5C7478
+before 4 \r 5C72
+after 4 \r 5C72
+before 5 tab 09746162
+after 5 tab 09746162
+TRUNCATE t2;
+SET sql_mode = 'NO_BACKSLASH_ESCAPES';
+SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
+LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
+3 \\tx
+4 \\r
+5 tab
+
+SET sql_mode = '';
+2.2 !NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
+SELECT * INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1 ORDER BY id;
+LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug37114.txt' INTO TABLE t2 FIELDS ESCAPED BY '' TERMINATED BY ' ';
+SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
+SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
+t id val1 hex(val1)
+before 3 \tx 5C7478
+after 3 \tx 5C7478
+before 4 \r 5C72
+after 4 \r 5C72
+before 5 tab 09746162
+after 5 tab 09746162
+TRUNCATE t2;
+SET sql_mode = 'NO_BACKSLASH_ESCAPES';
+SELECT LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt");
+LOAD_FILE("MYSQLTEST_VARDIR/tmp/bug37114.txt")
+3 \tx
+4 \r
+5 tab
+
+set session sql_mode=@OLD_SQL_MODE;
+DROP TABLE t1,t2;
+End of 5.0 tests
=== modified file 'mysql-test/r/lock_multi.result'
--- a/mysql-test/r/lock_multi.result 2007-11-28 12:18:01 +0000
+++ b/mysql-test/r/lock_multi.result 2008-10-09 15:24:31 +0000
@@ -99,3 +99,37 @@ kill query
ERROR 70100: Query execution was interrupted
unlock tables;
drop table t1;
+CREATE TABLE t1 (
+a int(11) unsigned default NULL,
+b varchar(255) default NULL,
+UNIQUE KEY a (a),
+KEY b (b)
+);
+INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
+CREATE TABLE t2 SELECT * FROM t1;
+CREATE TABLE t3 SELECT * FROM t1;
+# test altering of columns that multiupdate doesn't use
+# normal mode
+# PS mode
+# test altering of columns that multiupdate uses
+# normal mode
+# PS mode
+DROP TABLE t1, t2, t3;
+CREATE TABLE t1( a INT, b INT );
+INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
+# 1. test regular tables
+# 1.1. test altering of columns that multiupdate doesn't use
+# 1.1.1. normal mode
+# 1.1.2. PS mode
+# 1.2. test altering of columns that multiupdate uses
+# 1.2.1. normal mode
+# 1.2.2. PS mode
+ALTER TABLE t1 ADD COLUMN a INT;
+# 2. test UNIONs
+# 2.1. test altering of columns that multiupdate doesn't use
+# 2.1.1. normal mode
+# 2.1.2. PS mode
+# 2.2. test altering of columns that multiupdate uses
+# 2.2.1. normal mode
+# 2.2.2. PS mode
+DROP TABLE t1;
=== modified file 'mysql-test/r/metadata.result'
--- a/mysql-test/r/metadata.result 2007-06-20 09:21:48 +0000
+++ b/mysql-test/r/metadata.result 2008-08-20 09:49:28 +0000
@@ -108,11 +108,11 @@ id
1
select * from v1 group by id limit 0;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def test t1 v1 id id 3 10 0 Y 32768 0 63
+def test v1 v1 id id 3 10 0 Y 32768 0 63
id
select * from v1 where id=1000 group by id;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def test t1 v1 id id 3 10 0 Y 32768 0 63
+def test v1 v1 id id 3 10 0 Y 32768 0 63
id
select * from v1 where id=1 group by id;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
@@ -126,7 +126,7 @@ renamed
1
select * from v3 where renamed=1 group by renamed;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def v3 renamed 8 12 0 Y 32896 0 63
+def v3 v3 renamed renamed 8 12 0 Y 32896 0 63
renamed
drop table t1;
drop view v1,v2,v3;
@@ -156,8 +156,8 @@ c1
3
SELECT v1.c1, v2.c2 FROM v1 JOIN v2 ON c1=c2;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def test t1 v1 c1 c1 254 1 1 Y 0 0 8
-def test t2 v2 c2 c2 254 1 1 Y 0 0 8
+def test v1 v1 c1 c1 254 1 1 Y 0 0 8
+def test v2 v2 c2 c2 254 1 1 Y 0 0 8
c1 c2
1 1
2 2
=== modified file 'mysql-test/r/myisam.result'
--- a/mysql-test/r/myisam.result 2008-05-06 16:43:46 +0000
+++ b/mysql-test/r/myisam.result 2008-08-26 13:48:50 +0000
@@ -1861,4 +1861,26 @@ id ref
3 2
4 5
DROP TABLE t1, t2;
+CREATE TABLE t1 (a INT) ENGINE=MyISAM CHECKSUM=1 ROW_FORMAT=DYNAMIC;
+INSERT INTO t1 VALUES (0);
+UPDATE t1 SET a=1;
+SELECT a FROM t1;
+a
+1
+CHECK TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+INSERT INTO t1 VALUES (0), (5), (4), (2);
+UPDATE t1 SET a=2;
+SELECT a FROM t1;
+a
+2
+2
+2
+2
+2
+CHECK TABLE t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+DROP TABLE t1;
End of 5.0 tests
=== modified file 'mysql-test/r/mysqldump.result'
--- a/mysql-test/r/mysqldump.result 2008-03-02 18:20:36 +0000
+++ b/mysql-test/r/mysqldump.result 2008-10-01 09:41:13 +0000
@@ -1,3 +1,8 @@
+Bug#37938 - Test "mysqldump" lacks various insert statements
+Turn off concurrent inserts to avoid random errors
+NOTE: We reset the variable back to saved value at the end of test
+SET @OLD_CONCURRENT_INSERT = @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT = 0;
DROP TABLE IF EXISTS t1, `"t"1`, t1aa, t2, t2aa, t3;
drop database if exists mysqldump_test_db;
drop database if exists db1;
@@ -1996,7 +2001,7 @@ DROP TABLE IF EXISTS `v2`;
/*!50001 DROP VIEW IF EXISTS `v2`*/;
/*!50001 CREATE TABLE `v2` (
`a` varchar(30)
-) */;
+) ENGINE=MyISAM */;
/*!50001 DROP TABLE `v2`*/;
/*!50001 DROP VIEW IF EXISTS `v2`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
@@ -2078,7 +2083,7 @@ DROP TABLE IF EXISTS `v1`;
/*!50001 DROP VIEW IF EXISTS `v1`*/;
/*!50001 CREATE TABLE `v1` (
`a` int(11)
-) */;
+) ENGINE=MyISAM */;
/*!50001 DROP TABLE `v1`*/;
/*!50001 DROP VIEW IF EXISTS `v1`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
@@ -2140,7 +2145,7 @@ DROP TABLE IF EXISTS `v2`;
/*!50001 DROP VIEW IF EXISTS `v2`*/;
/*!50001 CREATE TABLE `v2` (
`a` varchar(30)
-) */;
+) ENGINE=MyISAM */;
/*!50001 DROP TABLE `v2`*/;
/*!50001 DROP VIEW IF EXISTS `v2`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
@@ -2244,19 +2249,19 @@ DROP TABLE IF EXISTS `v1`;
`a` int(11),
`b` int(11),
`c` varchar(30)
-) */;
+) ENGINE=MyISAM */;
DROP TABLE IF EXISTS `v2`;
/*!50001 DROP VIEW IF EXISTS `v2`*/;
/*!50001 CREATE TABLE `v2` (
`a` int(11)
-) */;
+) ENGINE=MyISAM */;
DROP TABLE IF EXISTS `v3`;
/*!50001 DROP VIEW IF EXISTS `v3`*/;
/*!50001 CREATE TABLE `v3` (
`a` int(11),
`b` int(11),
`c` varchar(30)
-) */;
+) ENGINE=MyISAM */;
/*!50001 DROP TABLE `v1`*/;
/*!50001 DROP VIEW IF EXISTS `v1`*/;
/*!50001 CREATE ALGORITHM=UNDEFINED */
@@ -2860,21 +2865,21 @@ DROP TABLE IF EXISTS `v0`;
`a` int(11),
`b` varchar(32),
`c` varchar(32)
-) */;
+) ENGINE=MyISAM */;
DROP TABLE IF EXISTS `v1`;
/*!50001 DROP VIEW IF EXISTS `v1`*/;
/*!50001 CREATE TABLE `v1` (
`a` int(11),
`b` varchar(32),
`c` varchar(32)
-) */;
+) ENGINE=MyISAM */;
DROP TABLE IF EXISTS `v2`;
/*!50001 DROP VIEW IF EXISTS `v2`*/;
/*!50001 CREATE TABLE `v2` (
`a` int(11),
`b` varchar(32),
`c` varchar(32)
-) */;
+) ENGINE=MyISAM */;
USE `test`;
/*!50001 DROP TABLE `v0`*/;
@@ -3198,7 +3203,7 @@ DROP TABLE IF EXISTS `v1`;
/*!50001 DROP VIEW IF EXISTS `v1`*/;
/*!50001 CREATE TABLE `v1` (
`id` int(11)
-) */;
+) ENGINE=MyISAM */;
USE `mysqldump_test_db`;
/*!50001 DROP TABLE `v1`*/;
@@ -3246,7 +3251,7 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/
USE `mysqldump_views`;
/*!50001 CREATE TABLE `nasishnasifu` (
`id` bigint(20) unsigned
-) */;
+) ENGINE=MyISAM */;
USE `mysqldump_tables`;
@@ -3565,6 +3570,7 @@ DROP TABLE t1,t2;
-- Dump completed on DATE
+SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT;
#
# End of 5.0 tests
#
=== added file 'mysql-test/r/parser_stack.result'
--- a/mysql-test/r/parser_stack.result 1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/parser_stack.result 2008-07-14 21:41:30 +0000
@@ -0,0 +1,306 @@
+use test;
+SELECT
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+1
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+;
+1
+1
+prepare stmt from
+"
+SELECT
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+1
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+"
+;
+execute stmt;
+1
+1
+drop view if exists view_overflow;
+CREATE VIEW view_overflow AS
+SELECT
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+1
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+;
+SELECT * from view_overflow;
+1
+1
+drop view view_overflow;
+drop procedure if exists proc_overflow;
+CREATE PROCEDURE proc_overflow()
+BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+select 1;
+select 2;
+select 3;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END $$
+call proc_overflow();
+1
+1
+2
+2
+3
+3
+drop procedure proc_overflow;
+drop function if exists func_overflow;
+create function func_overflow() returns int
+BEGIN
+DECLARE x int default 0;
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+SET x=x+1;
+SET x=x+2;
+SET x=x+3;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+return x;
+END $$
+select func_overflow();
+func_overflow()
+6
+drop function func_overflow;
+drop table if exists table_overflow;
+create table table_overflow(a int, b int);
+create trigger trigger_overflow before insert on table_overflow
+for each row
+BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+SET NEW.b := NEW.a;
+SET NEW.b := NEW.b + 1;
+SET NEW.b := NEW.b + 2;
+SET NEW.b := NEW.b + 3;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END; END; END; END; END; END; END; END; END; END; END; END;
+END $$
+insert into table_overflow set a=10;
+insert into table_overflow set a=20;
+select * from table_overflow;
+a b
+10 16
+20 26
+drop table table_overflow;
+drop procedure if exists proc_35577;
+CREATE PROCEDURE proc_35577()
+BEGIN
+DECLARE z_done INT DEFAULT 0;
+DECLARE t_done VARCHAR(5000);
+outer_loop: LOOP
+IF t_done=1 THEN
+LEAVE outer_loop;
+END IF;
+inner_block:BEGIN
+DECLARE z_done INT DEFAULT 0;
+SET z_done = 0;
+inner_loop: LOOP
+IF z_done=1 THEN
+LEAVE inner_loop;
+END IF;
+IF (t_done = 'a') THEN
+IF (t_done <> 0) THEN
+IF ( t_done > 0) THEN
+IF (t_done = 'a') THEN
+SET t_done = 'a';
+ELSEIF (t_done = 'a') THEN
+SET t_done = 'a';
+ELSEIF(t_done = 'a') THEN
+SET t_done = 'a';
+ELSEIF(t_done = 'a') THEN
+SET t_done = 'a';
+ELSEIF(t_done = 'a') THEN
+SET t_done = 'a';
+ELSEIF(t_done = 'a') THEN
+SET t_done = 'a';
+ELSEIF(t_done = 'a') THEN
+SET t_done = 'a';
+ELSEIF(t_done = 'a') THEN
+SET t_done = 'a';
+END IF;
+END IF;
+END IF;
+END IF;
+END LOOP inner_loop;
+END inner_block;
+END LOOP outer_loop;
+END $$
+drop procedure proc_35577;
+drop procedure if exists p_37269;
+create procedure p_37269()
+begin
+declare done int default 0;
+declare varb int default 0;
+declare vara int default 0;
+repeat
+select now();
+until done end repeat;
+while varb do
+select now();
+begin
+select now();
+repeat
+select now();
+until done end repeat;
+if vara then
+select now();
+repeat
+select now();
+loop
+select now();
+end loop;
+repeat
+select now();
+label1: while varb do
+select now();
+end while label1;
+if vara then
+select now();
+repeat
+select now();
+until done end repeat;
+begin
+select now();
+while varb do
+select now();
+label1: while varb do
+select now();
+end while label1;
+if vara then
+select now();
+while varb do
+select now();
+loop
+select now();
+end loop;
+repeat
+select now();
+loop
+select now();
+while varb do
+select now();
+end while;
+repeat
+select now();
+label1: loop
+select now();
+if vara then
+select now();
+end if;
+end loop label1;
+until done end repeat;
+end loop;
+until done end repeat;
+end while;
+end if;
+end while;
+end;
+end if;
+until done end repeat;
+until done end repeat;
+end if;
+end;
+end while;
+end $$
+drop procedure p_37269;
+drop procedure if exists p_37228;
+create procedure p_37228 ()
+BEGIN
+DECLARE v INT DEFAULT 123;
+IF (v > 1) THEN SET v = 1;
+ELSEIF (v < 10) THEN SET v = 10;
+ELSEIF (v < 11) THEN SET v = 11;
+ELSEIF (v < 12) THEN SET v = 12;
+ELSEIF (v < 13) THEN SET v = 13;
+ELSEIF (v < 14) THEN SET v = 14;
+ELSEIF (v < 15) THEN SET v = 15;
+ELSEIF (v < 16) THEN SET v = 16;
+ELSEIF (v < 17) THEN SET v = 17;
+ELSEIF (v < 18) THEN SET v = 18;
+ELSEIF (v < 19) THEN SET v = 19;
+ELSEIF (v < 20) THEN SET v = 20;
+ELSEIF (v < 21) THEN SET v = 21;
+ELSEIF (v < 22) THEN SET v = 22;
+ELSEIF (v < 23) THEN SET v = 23;
+ELSEIF (v < 24) THEN SET v = 24;
+ELSEIF (v < 25) THEN SET v = 25;
+ELSEIF (v < 26) THEN SET v = 26;
+ELSEIF (v < 27) THEN SET v = 27;
+ELSEIF (v < 28) THEN SET v = 28;
+ELSEIF (v < 29) THEN SET v = 29;
+ELSEIF (v < 30) THEN SET v = 30;
+ELSEIF (v < 31) THEN SET v = 31;
+ELSEIF (v < 32) THEN SET v = 32;
+ELSEIF (v < 33) THEN SET v = 33;
+ELSEIF (v < 34) THEN SET v = 34;
+ELSEIF (v < 35) THEN SET v = 35;
+ELSEIF (v < 36) THEN SET v = 36;
+ELSEIF (v < 37) THEN SET v = 37;
+ELSEIF (v < 38) THEN SET v = 38;
+ELSEIF (v < 39) THEN SET v = 39;
+END IF;
+END $$
+drop procedure p_37228;
=== modified file 'mysql-test/r/ps_1general.result'
--- a/mysql-test/r/ps_1general.result 2007-09-20 08:54:46 +0000
+++ b/mysql-test/r/ps_1general.result 2008-08-15 20:13:27 +0000
@@ -468,7 +468,7 @@ def table 253 64 2 Y 0 31 8
def type 253 10 3 Y 0 31 8
def possible_keys 253 4096 0 Y 0 31 8
def key 253 64 0 Y 0 31 8
-def key_len 253 1365 0 Y 0 31 8
+def key_len 253 4096 0 Y 0 31 8
def ref 253 1024 0 Y 0 31 8
def rows 8 10 1 Y 32928 0 63
def Extra 253 255 14 N 1 31 8
@@ -484,7 +484,7 @@ def table 253 64 2 Y 0 31 8
def type 253 10 5 Y 0 31 8
def possible_keys 253 4096 7 Y 0 31 8
def key 253 64 7 Y 0 31 8
-def key_len 253 1365 1 Y 0 31 8
+def key_len 253 4096 1 Y 0 31 8
def ref 253 1024 0 Y 0 31 8
def rows 8 10 1 Y 32928 0 63
def Extra 253 255 27 N 1 31 8
=== modified file 'mysql-test/r/ps_2myisam.result'
--- a/mysql-test/r/ps_2myisam.result 2007-12-06 07:46:01 +0000
+++ b/mysql-test/r/ps_2myisam.result 2008-08-15 20:13:27 +0000
@@ -1158,7 +1158,7 @@ def table 253 64 2 Y 0 31 8
def type 253 10 3 Y 0 31 8
def possible_keys 253 4096 0 Y 0 31 8
def key 253 64 0 Y 0 31 8
-def key_len 253 1365 0 Y 0 31 8
+def key_len 253 4096 0 Y 0 31 8
def ref 253 1024 0 Y 0 31 8
def rows 8 10 1 Y 32928 0 63
def Extra 253 255 0 N 1 31 8
=== modified file 'mysql-test/r/ps_3innodb.result'
--- a/mysql-test/r/ps_3innodb.result 2007-12-06 07:46:01 +0000
+++ b/mysql-test/r/ps_3innodb.result 2008-08-15 20:13:27 +0000
@@ -1158,7 +1158,7 @@ def table 253 64 2 Y 0 31 8
def type 253 10 3 Y 0 31 8
def possible_keys 253 4096 0 Y 0 31 8
def key 253 64 0 Y 0 31 8
-def key_len 253 1365 0 Y 0 31 8
+def key_len 253 4096 0 Y 0 31 8
def ref 253 1024 0 Y 0 31 8
def rows 8 10 1 Y 32928 0 63
def Extra 253 255 0 N 1 31 8
=== modified file 'mysql-test/r/ps_4heap.result'
--- a/mysql-test/r/ps_4heap.result 2007-12-06 07:46:01 +0000
+++ b/mysql-test/r/ps_4heap.result 2008-08-15 20:13:27 +0000
@@ -1159,7 +1159,7 @@ def table 253 64 2 Y 0 31 8
def type 253 10 3 Y 0 31 8
def possible_keys 253 4096 0 Y 0 31 8
def key 253 64 0 Y 0 31 8
-def key_len 253 1365 0 Y 0 31 8
+def key_len 253 4096 0 Y 0 31 8
def ref 253 1024 0 Y 0 31 8
def rows 8 10 1 Y 32928 0 63
def Extra 253 255 0 N 1 31 8
=== modified file 'mysql-test/r/ps_5merge.result'
--- a/mysql-test/r/ps_5merge.result 2007-12-06 07:46:01 +0000
+++ b/mysql-test/r/ps_5merge.result 2008-08-15 20:13:27 +0000
@@ -1201,7 +1201,7 @@ def table 253 64 2 Y 0 31 8
def type 253 10 3 Y 0 31 8
def possible_keys 253 4096 0 Y 0 31 8
def key 253 64 0 Y 0 31 8
-def key_len 253 1365 0 Y 0 31 8
+def key_len 253 4096 0 Y 0 31 8
def ref 253 1024 0 Y 0 31 8
def rows 8 10 1 Y 32928 0 63
def Extra 253 255 0 N 1 31 8
@@ -4223,7 +4223,7 @@ def table 253 64 2 Y 0 31 8
def type 253 10 3 Y 0 31 8
def possible_keys 253 4096 0 Y 0 31 8
def key 253 64 0 Y 0 31 8
-def key_len 253 1365 0 Y 0 31 8
+def key_len 253 4096 0 Y 0 31 8
def ref 253 1024 0 Y 0 31 8
def rows 8 10 1 Y 32928 0 63
def Extra 253 255 0 N 1 31 8
=== modified file 'mysql-test/r/ps_6bdb.result'
--- a/mysql-test/r/ps_6bdb.result 2007-12-06 07:46:01 +0000
+++ b/mysql-test/r/ps_6bdb.result 2008-08-15 20:13:27 +0000
@@ -1158,7 +1158,7 @@ def table 253 64 2 Y 0 31 8
def type 253 10 3 Y 0 31 8
def possible_keys 253 4096 0 Y 0 31 8
def key 253 64 0 Y 0 31 8
-def key_len 253 1365 0 Y 0 31 8
+def key_len 253 4096 0 Y 0 31 8
def ref 253 1024 0 Y 0 31 8
def rows 8 10 1 Y 32928 0 63
def Extra 253 255 0 N 1 31 8
=== modified file 'mysql-test/r/ps_7ndb.result'
--- a/mysql-test/r/ps_7ndb.result 2007-12-06 07:46:01 +0000
+++ b/mysql-test/r/ps_7ndb.result 2008-08-15 20:13:27 +0000
@@ -1158,7 +1158,7 @@ def table 253 64 2 Y 0 31 8
def type 253 10 3 Y 0 31 8
def possible_keys 253 4096 0 Y 0 31 8
def key 253 64 0 Y 0 31 8
-def key_len 253 1365 0 Y 0 31 8
+def key_len 253 4096 0 Y 0 31 8
def ref 253 1024 0 Y 0 31 8
def rows 8 10 1 Y 32928 0 63
def Extra 253 255 0 N 1 31 8
=== modified file 'mysql-test/r/query_cache_merge.result'
--- a/mysql-test/r/query_cache_merge.result 2003-08-22 01:07:40 +0000
+++ b/mysql-test/r/query_cache_merge.result 2008-07-24 14:14:34 +0000
@@ -18,3 +18,1675 @@ Variable_name Value
Qcache_queries_in_cache 0
drop table t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32,t33,t34,t35,t36,t37,t38,t39,t40,t41,t42,t43,t44,t45,t46,t47,t48,t49,t50,t51,t52,t53,t54,t55,t56,t57,t58,t59,t60,t61,t62,t63,t64,t65,t66,t67,t68,t69,t70,t71,t72,t73,t74,t75,t76,t77,t78,t79,t80,t81,t82,t83,t84,t85,t86,t87,t88,t89,t90,t91,t92,t93,t94,t95,t96,t97,t98,t99,t100,t101,t102,t103,t104,t105,t106,t107,t108,t109,t110,t111,t112,t113,t114,t115,t116,t117,t118,t119,t120,t121,t122,t123,t124,t125,t126,t127,t128,t129,t130,t131,t132,t133,t134,t135,t136,t137,t138,t139,t140,t141,t142,t143,t144,t145,t146,t147,t148,t149,t150,t151,t152,t153,t154,t155,t156,t157,t158,t159,t160,t161,t162,t163,t164,t165,t166,t167,t168,t169,t170,t171,t172,t173,t174,t175,t176,t177,t178,t179,t180,t181,t182,t183,t184,t185,t186,t187,t188,t189,t190,t191,t192,t193,t194,t195,t196,t197,t198,t199,t200,t201,t202,t203,t204,t205,t206,t207,t208,t209,t210,t211,t212,t213,t214,t215,t216,t217,t218,t219,t220,t221,t222,t223,t224,t225,t226,t227,t228,t229,t230,t231,t232,t233,t234,t235,t236,t237,t238,t239,t240,t241,t242,t243,t244,t245,t246,t247,t248,t249,t250,t251,t252,t253,t254,t255,t256,t257,t00;
SET @@global.query_cache_size=0;
+CREATE TABLE t255 (a INT);
+INSERT INTO t255 VALUES (255);
+CREATE TABLE t254 (a INT);
+INSERT INTO t254 VALUES (254);
+CREATE TABLE t253 (a INT);
+INSERT INTO t253 VALUES (253);
+CREATE TABLE t252 (a INT);
+INSERT INTO t252 VALUES (252);
+CREATE TABLE t251 (a INT);
+INSERT INTO t251 VALUES (251);
+CREATE TABLE t250 (a INT);
+INSERT INTO t250 VALUES (250);
+CREATE TABLE t249 (a INT);
+INSERT INTO t249 VALUES (249);
+CREATE TABLE t248 (a INT);
+INSERT INTO t248 VALUES (248);
+CREATE TABLE t247 (a INT);
+INSERT INTO t247 VALUES (247);
+CREATE TABLE t246 (a INT);
+INSERT INTO t246 VALUES (246);
+CREATE TABLE t245 (a INT);
+INSERT INTO t245 VALUES (245);
+CREATE TABLE t244 (a INT);
+INSERT INTO t244 VALUES (244);
+CREATE TABLE t243 (a INT);
+INSERT INTO t243 VALUES (243);
+CREATE TABLE t242 (a INT);
+INSERT INTO t242 VALUES (242);
+CREATE TABLE t241 (a INT);
+INSERT INTO t241 VALUES (241);
+CREATE TABLE t240 (a INT);
+INSERT INTO t240 VALUES (240);
+CREATE TABLE t239 (a INT);
+INSERT INTO t239 VALUES (239);
+CREATE TABLE t238 (a INT);
+INSERT INTO t238 VALUES (238);
+CREATE TABLE t237 (a INT);
+INSERT INTO t237 VALUES (237);
+CREATE TABLE t236 (a INT);
+INSERT INTO t236 VALUES (236);
+CREATE TABLE t235 (a INT);
+INSERT INTO t235 VALUES (235);
+CREATE TABLE t234 (a INT);
+INSERT INTO t234 VALUES (234);
+CREATE TABLE t233 (a INT);
+INSERT INTO t233 VALUES (233);
+CREATE TABLE t232 (a INT);
+INSERT INTO t232 VALUES (232);
+CREATE TABLE t231 (a INT);
+INSERT INTO t231 VALUES (231);
+CREATE TABLE t230 (a INT);
+INSERT INTO t230 VALUES (230);
+CREATE TABLE t229 (a INT);
+INSERT INTO t229 VALUES (229);
+CREATE TABLE t228 (a INT);
+INSERT INTO t228 VALUES (228);
+CREATE TABLE t227 (a INT);
+INSERT INTO t227 VALUES (227);
+CREATE TABLE t226 (a INT);
+INSERT INTO t226 VALUES (226);
+CREATE TABLE t225 (a INT);
+INSERT INTO t225 VALUES (225);
+CREATE TABLE t224 (a INT);
+INSERT INTO t224 VALUES (224);
+CREATE TABLE t223 (a INT);
+INSERT INTO t223 VALUES (223);
+CREATE TABLE t222 (a INT);
+INSERT INTO t222 VALUES (222);
+CREATE TABLE t221 (a INT);
+INSERT INTO t221 VALUES (221);
+CREATE TABLE t220 (a INT);
+INSERT INTO t220 VALUES (220);
+CREATE TABLE t219 (a INT);
+INSERT INTO t219 VALUES (219);
+CREATE TABLE t218 (a INT);
+INSERT INTO t218 VALUES (218);
+CREATE TABLE t217 (a INT);
+INSERT INTO t217 VALUES (217);
+CREATE TABLE t216 (a INT);
+INSERT INTO t216 VALUES (216);
+CREATE TABLE t215 (a INT);
+INSERT INTO t215 VALUES (215);
+CREATE TABLE t214 (a INT);
+INSERT INTO t214 VALUES (214);
+CREATE TABLE t213 (a INT);
+INSERT INTO t213 VALUES (213);
+CREATE TABLE t212 (a INT);
+INSERT INTO t212 VALUES (212);
+CREATE TABLE t211 (a INT);
+INSERT INTO t211 VALUES (211);
+CREATE TABLE t210 (a INT);
+INSERT INTO t210 VALUES (210);
+CREATE TABLE t209 (a INT);
+INSERT INTO t209 VALUES (209);
+CREATE TABLE t208 (a INT);
+INSERT INTO t208 VALUES (208);
+CREATE TABLE t207 (a INT);
+INSERT INTO t207 VALUES (207);
+CREATE TABLE t206 (a INT);
+INSERT INTO t206 VALUES (206);
+CREATE TABLE t205 (a INT);
+INSERT INTO t205 VALUES (205);
+CREATE TABLE t204 (a INT);
+INSERT INTO t204 VALUES (204);
+CREATE TABLE t203 (a INT);
+INSERT INTO t203 VALUES (203);
+CREATE TABLE t202 (a INT);
+INSERT INTO t202 VALUES (202);
+CREATE TABLE t201 (a INT);
+INSERT INTO t201 VALUES (201);
+CREATE TABLE t200 (a INT);
+INSERT INTO t200 VALUES (200);
+CREATE TABLE t199 (a INT);
+INSERT INTO t199 VALUES (199);
+CREATE TABLE t198 (a INT);
+INSERT INTO t198 VALUES (198);
+CREATE TABLE t197 (a INT);
+INSERT INTO t197 VALUES (197);
+CREATE TABLE t196 (a INT);
+INSERT INTO t196 VALUES (196);
+CREATE TABLE t195 (a INT);
+INSERT INTO t195 VALUES (195);
+CREATE TABLE t194 (a INT);
+INSERT INTO t194 VALUES (194);
+CREATE TABLE t193 (a INT);
+INSERT INTO t193 VALUES (193);
+CREATE TABLE t192 (a INT);
+INSERT INTO t192 VALUES (192);
+CREATE TABLE t191 (a INT);
+INSERT INTO t191 VALUES (191);
+CREATE TABLE t190 (a INT);
+INSERT INTO t190 VALUES (190);
+CREATE TABLE t189 (a INT);
+INSERT INTO t189 VALUES (189);
+CREATE TABLE t188 (a INT);
+INSERT INTO t188 VALUES (188);
+CREATE TABLE t187 (a INT);
+INSERT INTO t187 VALUES (187);
+CREATE TABLE t186 (a INT);
+INSERT INTO t186 VALUES (186);
+CREATE TABLE t185 (a INT);
+INSERT INTO t185 VALUES (185);
+CREATE TABLE t184 (a INT);
+INSERT INTO t184 VALUES (184);
+CREATE TABLE t183 (a INT);
+INSERT INTO t183 VALUES (183);
+CREATE TABLE t182 (a INT);
+INSERT INTO t182 VALUES (182);
+CREATE TABLE t181 (a INT);
+INSERT INTO t181 VALUES (181);
+CREATE TABLE t180 (a INT);
+INSERT INTO t180 VALUES (180);
+CREATE TABLE t179 (a INT);
+INSERT INTO t179 VALUES (179);
+CREATE TABLE t178 (a INT);
+INSERT INTO t178 VALUES (178);
+CREATE TABLE t177 (a INT);
+INSERT INTO t177 VALUES (177);
+CREATE TABLE t176 (a INT);
+INSERT INTO t176 VALUES (176);
+CREATE TABLE t175 (a INT);
+INSERT INTO t175 VALUES (175);
+CREATE TABLE t174 (a INT);
+INSERT INTO t174 VALUES (174);
+CREATE TABLE t173 (a INT);
+INSERT INTO t173 VALUES (173);
+CREATE TABLE t172 (a INT);
+INSERT INTO t172 VALUES (172);
+CREATE TABLE t171 (a INT);
+INSERT INTO t171 VALUES (171);
+CREATE TABLE t170 (a INT);
+INSERT INTO t170 VALUES (170);
+CREATE TABLE t169 (a INT);
+INSERT INTO t169 VALUES (169);
+CREATE TABLE t168 (a INT);
+INSERT INTO t168 VALUES (168);
+CREATE TABLE t167 (a INT);
+INSERT INTO t167 VALUES (167);
+CREATE TABLE t166 (a INT);
+INSERT INTO t166 VALUES (166);
+CREATE TABLE t165 (a INT);
+INSERT INTO t165 VALUES (165);
+CREATE TABLE t164 (a INT);
+INSERT INTO t164 VALUES (164);
+CREATE TABLE t163 (a INT);
+INSERT INTO t163 VALUES (163);
+CREATE TABLE t162 (a INT);
+INSERT INTO t162 VALUES (162);
+CREATE TABLE t161 (a INT);
+INSERT INTO t161 VALUES (161);
+CREATE TABLE t160 (a INT);
+INSERT INTO t160 VALUES (160);
+CREATE TABLE t159 (a INT);
+INSERT INTO t159 VALUES (159);
+CREATE TABLE t158 (a INT);
+INSERT INTO t158 VALUES (158);
+CREATE TABLE t157 (a INT);
+INSERT INTO t157 VALUES (157);
+CREATE TABLE t156 (a INT);
+INSERT INTO t156 VALUES (156);
+CREATE TABLE t155 (a INT);
+INSERT INTO t155 VALUES (155);
+CREATE TABLE t154 (a INT);
+INSERT INTO t154 VALUES (154);
+CREATE TABLE t153 (a INT);
+INSERT INTO t153 VALUES (153);
+CREATE TABLE t152 (a INT);
+INSERT INTO t152 VALUES (152);
+CREATE TABLE t151 (a INT);
+INSERT INTO t151 VALUES (151);
+CREATE TABLE t150 (a INT);
+INSERT INTO t150 VALUES (150);
+CREATE TABLE t149 (a INT);
+INSERT INTO t149 VALUES (149);
+CREATE TABLE t148 (a INT);
+INSERT INTO t148 VALUES (148);
+CREATE TABLE t147 (a INT);
+INSERT INTO t147 VALUES (147);
+CREATE TABLE t146 (a INT);
+INSERT INTO t146 VALUES (146);
+CREATE TABLE t145 (a INT);
+INSERT INTO t145 VALUES (145);
+CREATE TABLE t144 (a INT);
+INSERT INTO t144 VALUES (144);
+CREATE TABLE t143 (a INT);
+INSERT INTO t143 VALUES (143);
+CREATE TABLE t142 (a INT);
+INSERT INTO t142 VALUES (142);
+CREATE TABLE t141 (a INT);
+INSERT INTO t141 VALUES (141);
+CREATE TABLE t140 (a INT);
+INSERT INTO t140 VALUES (140);
+CREATE TABLE t139 (a INT);
+INSERT INTO t139 VALUES (139);
+CREATE TABLE t138 (a INT);
+INSERT INTO t138 VALUES (138);
+CREATE TABLE t137 (a INT);
+INSERT INTO t137 VALUES (137);
+CREATE TABLE t136 (a INT);
+INSERT INTO t136 VALUES (136);
+CREATE TABLE t135 (a INT);
+INSERT INTO t135 VALUES (135);
+CREATE TABLE t134 (a INT);
+INSERT INTO t134 VALUES (134);
+CREATE TABLE t133 (a INT);
+INSERT INTO t133 VALUES (133);
+CREATE TABLE t132 (a INT);
+INSERT INTO t132 VALUES (132);
+CREATE TABLE t131 (a INT);
+INSERT INTO t131 VALUES (131);
+CREATE TABLE t130 (a INT);
+INSERT INTO t130 VALUES (130);
+CREATE TABLE t129 (a INT);
+INSERT INTO t129 VALUES (129);
+CREATE TABLE t128 (a INT);
+INSERT INTO t128 VALUES (128);
+CREATE TABLE t127 (a INT);
+INSERT INTO t127 VALUES (127);
+CREATE TABLE t126 (a INT);
+INSERT INTO t126 VALUES (126);
+CREATE TABLE t125 (a INT);
+INSERT INTO t125 VALUES (125);
+CREATE TABLE t124 (a INT);
+INSERT INTO t124 VALUES (124);
+CREATE TABLE t123 (a INT);
+INSERT INTO t123 VALUES (123);
+CREATE TABLE t122 (a INT);
+INSERT INTO t122 VALUES (122);
+CREATE TABLE t121 (a INT);
+INSERT INTO t121 VALUES (121);
+CREATE TABLE t120 (a INT);
+INSERT INTO t120 VALUES (120);
+CREATE TABLE t119 (a INT);
+INSERT INTO t119 VALUES (119);
+CREATE TABLE t118 (a INT);
+INSERT INTO t118 VALUES (118);
+CREATE TABLE t117 (a INT);
+INSERT INTO t117 VALUES (117);
+CREATE TABLE t116 (a INT);
+INSERT INTO t116 VALUES (116);
+CREATE TABLE t115 (a INT);
+INSERT INTO t115 VALUES (115);
+CREATE TABLE t114 (a INT);
+INSERT INTO t114 VALUES (114);
+CREATE TABLE t113 (a INT);
+INSERT INTO t113 VALUES (113);
+CREATE TABLE t112 (a INT);
+INSERT INTO t112 VALUES (112);
+CREATE TABLE t111 (a INT);
+INSERT INTO t111 VALUES (111);
+CREATE TABLE t110 (a INT);
+INSERT INTO t110 VALUES (110);
+CREATE TABLE t109 (a INT);
+INSERT INTO t109 VALUES (109);
+CREATE TABLE t108 (a INT);
+INSERT INTO t108 VALUES (108);
+CREATE TABLE t107 (a INT);
+INSERT INTO t107 VALUES (107);
+CREATE TABLE t106 (a INT);
+INSERT INTO t106 VALUES (106);
+CREATE TABLE t105 (a INT);
+INSERT INTO t105 VALUES (105);
+CREATE TABLE t104 (a INT);
+INSERT INTO t104 VALUES (104);
+CREATE TABLE t103 (a INT);
+INSERT INTO t103 VALUES (103);
+CREATE TABLE t102 (a INT);
+INSERT INTO t102 VALUES (102);
+CREATE TABLE t101 (a INT);
+INSERT INTO t101 VALUES (101);
+CREATE TABLE t100 (a INT);
+INSERT INTO t100 VALUES (100);
+CREATE TABLE t99 (a INT);
+INSERT INTO t99 VALUES (99);
+CREATE TABLE t98 (a INT);
+INSERT INTO t98 VALUES (98);
+CREATE TABLE t97 (a INT);
+INSERT INTO t97 VALUES (97);
+CREATE TABLE t96 (a INT);
+INSERT INTO t96 VALUES (96);
+CREATE TABLE t95 (a INT);
+INSERT INTO t95 VALUES (95);
+CREATE TABLE t94 (a INT);
+INSERT INTO t94 VALUES (94);
+CREATE TABLE t93 (a INT);
+INSERT INTO t93 VALUES (93);
+CREATE TABLE t92 (a INT);
+INSERT INTO t92 VALUES (92);
+CREATE TABLE t91 (a INT);
+INSERT INTO t91 VALUES (91);
+CREATE TABLE t90 (a INT);
+INSERT INTO t90 VALUES (90);
+CREATE TABLE t89 (a INT);
+INSERT INTO t89 VALUES (89);
+CREATE TABLE t88 (a INT);
+INSERT INTO t88 VALUES (88);
+CREATE TABLE t87 (a INT);
+INSERT INTO t87 VALUES (87);
+CREATE TABLE t86 (a INT);
+INSERT INTO t86 VALUES (86);
+CREATE TABLE t85 (a INT);
+INSERT INTO t85 VALUES (85);
+CREATE TABLE t84 (a INT);
+INSERT INTO t84 VALUES (84);
+CREATE TABLE t83 (a INT);
+INSERT INTO t83 VALUES (83);
+CREATE TABLE t82 (a INT);
+INSERT INTO t82 VALUES (82);
+CREATE TABLE t81 (a INT);
+INSERT INTO t81 VALUES (81);
+CREATE TABLE t80 (a INT);
+INSERT INTO t80 VALUES (80);
+CREATE TABLE t79 (a INT);
+INSERT INTO t79 VALUES (79);
+CREATE TABLE t78 (a INT);
+INSERT INTO t78 VALUES (78);
+CREATE TABLE t77 (a INT);
+INSERT INTO t77 VALUES (77);
+CREATE TABLE t76 (a INT);
+INSERT INTO t76 VALUES (76);
+CREATE TABLE t75 (a INT);
+INSERT INTO t75 VALUES (75);
+CREATE TABLE t74 (a INT);
+INSERT INTO t74 VALUES (74);
+CREATE TABLE t73 (a INT);
+INSERT INTO t73 VALUES (73);
+CREATE TABLE t72 (a INT);
+INSERT INTO t72 VALUES (72);
+CREATE TABLE t71 (a INT);
+INSERT INTO t71 VALUES (71);
+CREATE TABLE t70 (a INT);
+INSERT INTO t70 VALUES (70);
+CREATE TABLE t69 (a INT);
+INSERT INTO t69 VALUES (69);
+CREATE TABLE t68 (a INT);
+INSERT INTO t68 VALUES (68);
+CREATE TABLE t67 (a INT);
+INSERT INTO t67 VALUES (67);
+CREATE TABLE t66 (a INT);
+INSERT INTO t66 VALUES (66);
+CREATE TABLE t65 (a INT);
+INSERT INTO t65 VALUES (65);
+CREATE TABLE t64 (a INT);
+INSERT INTO t64 VALUES (64);
+CREATE TABLE t63 (a INT);
+INSERT INTO t63 VALUES (63);
+CREATE TABLE t62 (a INT);
+INSERT INTO t62 VALUES (62);
+CREATE TABLE t61 (a INT);
+INSERT INTO t61 VALUES (61);
+CREATE TABLE t60 (a INT);
+INSERT INTO t60 VALUES (60);
+CREATE TABLE t59 (a INT);
+INSERT INTO t59 VALUES (59);
+CREATE TABLE t58 (a INT);
+INSERT INTO t58 VALUES (58);
+CREATE TABLE t57 (a INT);
+INSERT INTO t57 VALUES (57);
+CREATE TABLE t56 (a INT);
+INSERT INTO t56 VALUES (56);
+CREATE TABLE t55 (a INT);
+INSERT INTO t55 VALUES (55);
+CREATE TABLE t54 (a INT);
+INSERT INTO t54 VALUES (54);
+CREATE TABLE t53 (a INT);
+INSERT INTO t53 VALUES (53);
+CREATE TABLE t52 (a INT);
+INSERT INTO t52 VALUES (52);
+CREATE TABLE t51 (a INT);
+INSERT INTO t51 VALUES (51);
+CREATE TABLE t50 (a INT);
+INSERT INTO t50 VALUES (50);
+CREATE TABLE t49 (a INT);
+INSERT INTO t49 VALUES (49);
+CREATE TABLE t48 (a INT);
+INSERT INTO t48 VALUES (48);
+CREATE TABLE t47 (a INT);
+INSERT INTO t47 VALUES (47);
+CREATE TABLE t46 (a INT);
+INSERT INTO t46 VALUES (46);
+CREATE TABLE t45 (a INT);
+INSERT INTO t45 VALUES (45);
+CREATE TABLE t44 (a INT);
+INSERT INTO t44 VALUES (44);
+CREATE TABLE t43 (a INT);
+INSERT INTO t43 VALUES (43);
+CREATE TABLE t42 (a INT);
+INSERT INTO t42 VALUES (42);
+CREATE TABLE t41 (a INT);
+INSERT INTO t41 VALUES (41);
+CREATE TABLE t40 (a INT);
+INSERT INTO t40 VALUES (40);
+CREATE TABLE t39 (a INT);
+INSERT INTO t39 VALUES (39);
+CREATE TABLE t38 (a INT);
+INSERT INTO t38 VALUES (38);
+CREATE TABLE t37 (a INT);
+INSERT INTO t37 VALUES (37);
+CREATE TABLE t36 (a INT);
+INSERT INTO t36 VALUES (36);
+CREATE TABLE t35 (a INT);
+INSERT INTO t35 VALUES (35);
+CREATE TABLE t34 (a INT);
+INSERT INTO t34 VALUES (34);
+CREATE TABLE t33 (a INT);
+INSERT INTO t33 VALUES (33);
+CREATE TABLE t32 (a INT);
+INSERT INTO t32 VALUES (32);
+CREATE TABLE t31 (a INT);
+INSERT INTO t31 VALUES (31);
+CREATE TABLE t30 (a INT);
+INSERT INTO t30 VALUES (30);
+CREATE TABLE t29 (a INT);
+INSERT INTO t29 VALUES (29);
+CREATE TABLE t28 (a INT);
+INSERT INTO t28 VALUES (28);
+CREATE TABLE t27 (a INT);
+INSERT INTO t27 VALUES (27);
+CREATE TABLE t26 (a INT);
+INSERT INTO t26 VALUES (26);
+CREATE TABLE t25 (a INT);
+INSERT INTO t25 VALUES (25);
+CREATE TABLE t24 (a INT);
+INSERT INTO t24 VALUES (24);
+CREATE TABLE t23 (a INT);
+INSERT INTO t23 VALUES (23);
+CREATE TABLE t22 (a INT);
+INSERT INTO t22 VALUES (22);
+CREATE TABLE t21 (a INT);
+INSERT INTO t21 VALUES (21);
+CREATE TABLE t20 (a INT);
+INSERT INTO t20 VALUES (20);
+CREATE TABLE t19 (a INT);
+INSERT INTO t19 VALUES (19);
+CREATE TABLE t18 (a INT);
+INSERT INTO t18 VALUES (18);
+CREATE TABLE t17 (a INT);
+INSERT INTO t17 VALUES (17);
+CREATE TABLE t16 (a INT);
+INSERT INTO t16 VALUES (16);
+CREATE TABLE t15 (a INT);
+INSERT INTO t15 VALUES (15);
+CREATE TABLE t14 (a INT);
+INSERT INTO t14 VALUES (14);
+CREATE TABLE t13 (a INT);
+INSERT INTO t13 VALUES (13);
+CREATE TABLE t12 (a INT);
+INSERT INTO t12 VALUES (12);
+CREATE TABLE t11 (a INT);
+INSERT INTO t11 VALUES (11);
+CREATE TABLE t10 (a INT);
+INSERT INTO t10 VALUES (10);
+CREATE TABLE t9 (a INT);
+INSERT INTO t9 VALUES (9);
+CREATE TABLE t8 (a INT);
+INSERT INTO t8 VALUES (8);
+CREATE TABLE t7 (a INT);
+INSERT INTO t7 VALUES (7);
+CREATE TABLE t6 (a INT);
+INSERT INTO t6 VALUES (6);
+CREATE TABLE t5 (a INT);
+INSERT INTO t5 VALUES (5);
+CREATE TABLE t4 (a INT);
+INSERT INTO t4 VALUES (4);
+CREATE TABLE t3 (a INT);
+INSERT INTO t3 VALUES (3);
+CREATE TABLE t2 (a INT);
+INSERT INTO t2 VALUES (2);
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1);
+CREATE TABLE t0 (a INT) ENGINE=MERGE UNION(t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32,t33,t34,t35,t36,t37,t38,t39,t40,t41,t42,t43,t44,t45,t46,t47,t48,t49,t50,t51,t52,t53,t54,t55,t56,t57,t58,t59,t60,t61,t62,t63,t64,t65,t66,t67,t68,t69,t70,t71,t72,t73,t74,t75,t76,t77,t78,t79,t80,t81,t82,t83,t84,t85,t86,t87,t88,t89,t90,t91,t92,t93,t94,t95,t96,t97,t98,t99,t100,t101,t102,t103,t104,t105,t106,t107,t108,t109,t110,t111,t112,t113,t114,t115,t116,t117,t118,t119,t120,t121,t122,t123,t124,t125,t126,t127,t128,t129,t130,t131,t132,t133,t134,t135,t136,t137,t138,t139,t140,t141,t142,t143,t144,t145,t146,t147,t148,t149,t150,t151,t152,t153,t154,t155,t156,t157,t158,t159,t160,t161,t162,t163,t164,t165,t166,t167,t168,t169,t170,t171,t172,t173,t174,t175,t176,t177,t178,t179,t180,t181,t182,t183,t184,t185,t186,t187,t188,t189,t190,t191,t192,t193,t194,t195,t196,t197,t198,t199,t200,t201,t202,t203,t204,t205,t206,t207,t208,t209,t210,t211,t212,t213,t214,t215,t216,t217,t218,t219,t220,t221,t222,t223,t224,t225,t226,t227,t228,t229,t230,t231,t232,t233,t234,t235,t236,t237,t238,t239,t240,t241,t242,t243,t244,t245,t246,t247,t248,t249,t250,t251,t252,t253,t254,t255);
+SET GLOBAL query_cache_size = 1048576;
+FLUSH STATUS;
+SELECT a FROM t0 WHERE a = 1;
+a
+1
+SHOW STATUS LIKE "Qcache_queries_in_cache";
+Variable_name Value
+Qcache_queries_in_cache 1
+FLUSH TABLES;
+TRUNCATE TABLE t255;
+SELECT a FROM t1;
+a
+1
+TRUNCATE TABLE t254;
+SELECT a FROM t2;
+a
+2
+TRUNCATE TABLE t253;
+SELECT a FROM t3;
+a
+3
+TRUNCATE TABLE t252;
+SELECT a FROM t4;
+a
+4
+TRUNCATE TABLE t251;
+SELECT a FROM t5;
+a
+5
+TRUNCATE TABLE t250;
+SELECT a FROM t6;
+a
+6
+TRUNCATE TABLE t249;
+SELECT a FROM t7;
+a
+7
+TRUNCATE TABLE t248;
+SELECT a FROM t8;
+a
+8
+TRUNCATE TABLE t247;
+SELECT a FROM t9;
+a
+9
+TRUNCATE TABLE t246;
+SELECT a FROM t10;
+a
+10
+TRUNCATE TABLE t245;
+SELECT a FROM t11;
+a
+11
+TRUNCATE TABLE t244;
+SELECT a FROM t12;
+a
+12
+TRUNCATE TABLE t243;
+SELECT a FROM t13;
+a
+13
+TRUNCATE TABLE t242;
+SELECT a FROM t14;
+a
+14
+TRUNCATE TABLE t241;
+SELECT a FROM t15;
+a
+15
+TRUNCATE TABLE t240;
+SELECT a FROM t16;
+a
+16
+TRUNCATE TABLE t239;
+SELECT a FROM t17;
+a
+17
+TRUNCATE TABLE t238;
+SELECT a FROM t18;
+a
+18
+TRUNCATE TABLE t237;
+SELECT a FROM t19;
+a
+19
+TRUNCATE TABLE t236;
+SELECT a FROM t20;
+a
+20
+TRUNCATE TABLE t235;
+SELECT a FROM t21;
+a
+21
+TRUNCATE TABLE t234;
+SELECT a FROM t22;
+a
+22
+TRUNCATE TABLE t233;
+SELECT a FROM t23;
+a
+23
+TRUNCATE TABLE t232;
+SELECT a FROM t24;
+a
+24
+TRUNCATE TABLE t231;
+SELECT a FROM t25;
+a
+25
+TRUNCATE TABLE t230;
+SELECT a FROM t26;
+a
+26
+TRUNCATE TABLE t229;
+SELECT a FROM t27;
+a
+27
+TRUNCATE TABLE t228;
+SELECT a FROM t28;
+a
+28
+TRUNCATE TABLE t227;
+SELECT a FROM t29;
+a
+29
+TRUNCATE TABLE t226;
+SELECT a FROM t30;
+a
+30
+TRUNCATE TABLE t225;
+SELECT a FROM t31;
+a
+31
+TRUNCATE TABLE t224;
+SELECT a FROM t32;
+a
+32
+TRUNCATE TABLE t223;
+SELECT a FROM t33;
+a
+33
+TRUNCATE TABLE t222;
+SELECT a FROM t34;
+a
+34
+TRUNCATE TABLE t221;
+SELECT a FROM t35;
+a
+35
+TRUNCATE TABLE t220;
+SELECT a FROM t36;
+a
+36
+TRUNCATE TABLE t219;
+SELECT a FROM t37;
+a
+37
+TRUNCATE TABLE t218;
+SELECT a FROM t38;
+a
+38
+TRUNCATE TABLE t217;
+SELECT a FROM t39;
+a
+39
+TRUNCATE TABLE t216;
+SELECT a FROM t40;
+a
+40
+TRUNCATE TABLE t215;
+SELECT a FROM t41;
+a
+41
+TRUNCATE TABLE t214;
+SELECT a FROM t42;
+a
+42
+TRUNCATE TABLE t213;
+SELECT a FROM t43;
+a
+43
+TRUNCATE TABLE t212;
+SELECT a FROM t44;
+a
+44
+TRUNCATE TABLE t211;
+SELECT a FROM t45;
+a
+45
+TRUNCATE TABLE t210;
+SELECT a FROM t46;
+a
+46
+TRUNCATE TABLE t209;
+SELECT a FROM t47;
+a
+47
+TRUNCATE TABLE t208;
+SELECT a FROM t48;
+a
+48
+TRUNCATE TABLE t207;
+SELECT a FROM t49;
+a
+49
+TRUNCATE TABLE t206;
+SELECT a FROM t50;
+a
+50
+TRUNCATE TABLE t205;
+SELECT a FROM t51;
+a
+51
+TRUNCATE TABLE t204;
+SELECT a FROM t52;
+a
+52
+TRUNCATE TABLE t203;
+SELECT a FROM t53;
+a
+53
+TRUNCATE TABLE t202;
+SELECT a FROM t54;
+a
+54
+TRUNCATE TABLE t201;
+SELECT a FROM t55;
+a
+55
+TRUNCATE TABLE t200;
+SELECT a FROM t56;
+a
+56
+TRUNCATE TABLE t199;
+SELECT a FROM t57;
+a
+57
+TRUNCATE TABLE t198;
+SELECT a FROM t58;
+a
+58
+TRUNCATE TABLE t197;
+SELECT a FROM t59;
+a
+59
+TRUNCATE TABLE t196;
+SELECT a FROM t60;
+a
+60
+TRUNCATE TABLE t195;
+SELECT a FROM t61;
+a
+61
+TRUNCATE TABLE t194;
+SELECT a FROM t62;
+a
+62
+TRUNCATE TABLE t193;
+SELECT a FROM t63;
+a
+63
+TRUNCATE TABLE t192;
+SELECT a FROM t64;
+a
+64
+TRUNCATE TABLE t191;
+SELECT a FROM t65;
+a
+65
+TRUNCATE TABLE t190;
+SELECT a FROM t66;
+a
+66
+TRUNCATE TABLE t189;
+SELECT a FROM t67;
+a
+67
+TRUNCATE TABLE t188;
+SELECT a FROM t68;
+a
+68
+TRUNCATE TABLE t187;
+SELECT a FROM t69;
+a
+69
+TRUNCATE TABLE t186;
+SELECT a FROM t70;
+a
+70
+TRUNCATE TABLE t185;
+SELECT a FROM t71;
+a
+71
+TRUNCATE TABLE t184;
+SELECT a FROM t72;
+a
+72
+TRUNCATE TABLE t183;
+SELECT a FROM t73;
+a
+73
+TRUNCATE TABLE t182;
+SELECT a FROM t74;
+a
+74
+TRUNCATE TABLE t181;
+SELECT a FROM t75;
+a
+75
+TRUNCATE TABLE t180;
+SELECT a FROM t76;
+a
+76
+TRUNCATE TABLE t179;
+SELECT a FROM t77;
+a
+77
+TRUNCATE TABLE t178;
+SELECT a FROM t78;
+a
+78
+TRUNCATE TABLE t177;
+SELECT a FROM t79;
+a
+79
+TRUNCATE TABLE t176;
+SELECT a FROM t80;
+a
+80
+TRUNCATE TABLE t175;
+SELECT a FROM t81;
+a
+81
+TRUNCATE TABLE t174;
+SELECT a FROM t82;
+a
+82
+TRUNCATE TABLE t173;
+SELECT a FROM t83;
+a
+83
+TRUNCATE TABLE t172;
+SELECT a FROM t84;
+a
+84
+TRUNCATE TABLE t171;
+SELECT a FROM t85;
+a
+85
+TRUNCATE TABLE t170;
+SELECT a FROM t86;
+a
+86
+TRUNCATE TABLE t169;
+SELECT a FROM t87;
+a
+87
+TRUNCATE TABLE t168;
+SELECT a FROM t88;
+a
+88
+TRUNCATE TABLE t167;
+SELECT a FROM t89;
+a
+89
+TRUNCATE TABLE t166;
+SELECT a FROM t90;
+a
+90
+TRUNCATE TABLE t165;
+SELECT a FROM t91;
+a
+91
+TRUNCATE TABLE t164;
+SELECT a FROM t92;
+a
+92
+TRUNCATE TABLE t163;
+SELECT a FROM t93;
+a
+93
+TRUNCATE TABLE t162;
+SELECT a FROM t94;
+a
+94
+TRUNCATE TABLE t161;
+SELECT a FROM t95;
+a
+95
+TRUNCATE TABLE t160;
+SELECT a FROM t96;
+a
+96
+TRUNCATE TABLE t159;
+SELECT a FROM t97;
+a
+97
+TRUNCATE TABLE t158;
+SELECT a FROM t98;
+a
+98
+TRUNCATE TABLE t157;
+SELECT a FROM t99;
+a
+99
+TRUNCATE TABLE t156;
+SELECT a FROM t100;
+a
+100
+TRUNCATE TABLE t155;
+SELECT a FROM t101;
+a
+101
+TRUNCATE TABLE t154;
+SELECT a FROM t102;
+a
+102
+TRUNCATE TABLE t153;
+SELECT a FROM t103;
+a
+103
+TRUNCATE TABLE t152;
+SELECT a FROM t104;
+a
+104
+TRUNCATE TABLE t151;
+SELECT a FROM t105;
+a
+105
+TRUNCATE TABLE t150;
+SELECT a FROM t106;
+a
+106
+TRUNCATE TABLE t149;
+SELECT a FROM t107;
+a
+107
+TRUNCATE TABLE t148;
+SELECT a FROM t108;
+a
+108
+TRUNCATE TABLE t147;
+SELECT a FROM t109;
+a
+109
+TRUNCATE TABLE t146;
+SELECT a FROM t110;
+a
+110
+TRUNCATE TABLE t145;
+SELECT a FROM t111;
+a
+111
+TRUNCATE TABLE t144;
+SELECT a FROM t112;
+a
+112
+TRUNCATE TABLE t143;
+SELECT a FROM t113;
+a
+113
+TRUNCATE TABLE t142;
+SELECT a FROM t114;
+a
+114
+TRUNCATE TABLE t141;
+SELECT a FROM t115;
+a
+115
+TRUNCATE TABLE t140;
+SELECT a FROM t116;
+a
+116
+TRUNCATE TABLE t139;
+SELECT a FROM t117;
+a
+117
+TRUNCATE TABLE t138;
+SELECT a FROM t118;
+a
+118
+TRUNCATE TABLE t137;
+SELECT a FROM t119;
+a
+119
+TRUNCATE TABLE t136;
+SELECT a FROM t120;
+a
+120
+TRUNCATE TABLE t135;
+SELECT a FROM t121;
+a
+121
+TRUNCATE TABLE t134;
+SELECT a FROM t122;
+a
+122
+TRUNCATE TABLE t133;
+SELECT a FROM t123;
+a
+123
+TRUNCATE TABLE t132;
+SELECT a FROM t124;
+a
+124
+TRUNCATE TABLE t131;
+SELECT a FROM t125;
+a
+125
+TRUNCATE TABLE t130;
+SELECT a FROM t126;
+a
+126
+TRUNCATE TABLE t129;
+SELECT a FROM t127;
+a
+127
+TRUNCATE TABLE t128;
+SELECT a FROM t128;
+a
+TRUNCATE TABLE t127;
+SELECT a FROM t129;
+a
+TRUNCATE TABLE t126;
+SELECT a FROM t130;
+a
+TRUNCATE TABLE t125;
+SELECT a FROM t131;
+a
+TRUNCATE TABLE t124;
+SELECT a FROM t132;
+a
+TRUNCATE TABLE t123;
+SELECT a FROM t133;
+a
+TRUNCATE TABLE t122;
+SELECT a FROM t134;
+a
+TRUNCATE TABLE t121;
+SELECT a FROM t135;
+a
+TRUNCATE TABLE t120;
+SELECT a FROM t136;
+a
+TRUNCATE TABLE t119;
+SELECT a FROM t137;
+a
+TRUNCATE TABLE t118;
+SELECT a FROM t138;
+a
+TRUNCATE TABLE t117;
+SELECT a FROM t139;
+a
+TRUNCATE TABLE t116;
+SELECT a FROM t140;
+a
+TRUNCATE TABLE t115;
+SELECT a FROM t141;
+a
+TRUNCATE TABLE t114;
+SELECT a FROM t142;
+a
+TRUNCATE TABLE t113;
+SELECT a FROM t143;
+a
+TRUNCATE TABLE t112;
+SELECT a FROM t144;
+a
+TRUNCATE TABLE t111;
+SELECT a FROM t145;
+a
+TRUNCATE TABLE t110;
+SELECT a FROM t146;
+a
+TRUNCATE TABLE t109;
+SELECT a FROM t147;
+a
+TRUNCATE TABLE t108;
+SELECT a FROM t148;
+a
+TRUNCATE TABLE t107;
+SELECT a FROM t149;
+a
+TRUNCATE TABLE t106;
+SELECT a FROM t150;
+a
+TRUNCATE TABLE t105;
+SELECT a FROM t151;
+a
+TRUNCATE TABLE t104;
+SELECT a FROM t152;
+a
+TRUNCATE TABLE t103;
+SELECT a FROM t153;
+a
+TRUNCATE TABLE t102;
+SELECT a FROM t154;
+a
+TRUNCATE TABLE t101;
+SELECT a FROM t155;
+a
+TRUNCATE TABLE t100;
+SELECT a FROM t156;
+a
+TRUNCATE TABLE t99;
+SELECT a FROM t157;
+a
+TRUNCATE TABLE t98;
+SELECT a FROM t158;
+a
+TRUNCATE TABLE t97;
+SELECT a FROM t159;
+a
+TRUNCATE TABLE t96;
+SELECT a FROM t160;
+a
+TRUNCATE TABLE t95;
+SELECT a FROM t161;
+a
+TRUNCATE TABLE t94;
+SELECT a FROM t162;
+a
+TRUNCATE TABLE t93;
+SELECT a FROM t163;
+a
+TRUNCATE TABLE t92;
+SELECT a FROM t164;
+a
+TRUNCATE TABLE t91;
+SELECT a FROM t165;
+a
+TRUNCATE TABLE t90;
+SELECT a FROM t166;
+a
+TRUNCATE TABLE t89;
+SELECT a FROM t167;
+a
+TRUNCATE TABLE t88;
+SELECT a FROM t168;
+a
+TRUNCATE TABLE t87;
+SELECT a FROM t169;
+a
+TRUNCATE TABLE t86;
+SELECT a FROM t170;
+a
+TRUNCATE TABLE t85;
+SELECT a FROM t171;
+a
+TRUNCATE TABLE t84;
+SELECT a FROM t172;
+a
+TRUNCATE TABLE t83;
+SELECT a FROM t173;
+a
+TRUNCATE TABLE t82;
+SELECT a FROM t174;
+a
+TRUNCATE TABLE t81;
+SELECT a FROM t175;
+a
+TRUNCATE TABLE t80;
+SELECT a FROM t176;
+a
+TRUNCATE TABLE t79;
+SELECT a FROM t177;
+a
+TRUNCATE TABLE t78;
+SELECT a FROM t178;
+a
+TRUNCATE TABLE t77;
+SELECT a FROM t179;
+a
+TRUNCATE TABLE t76;
+SELECT a FROM t180;
+a
+TRUNCATE TABLE t75;
+SELECT a FROM t181;
+a
+TRUNCATE TABLE t74;
+SELECT a FROM t182;
+a
+TRUNCATE TABLE t73;
+SELECT a FROM t183;
+a
+TRUNCATE TABLE t72;
+SELECT a FROM t184;
+a
+TRUNCATE TABLE t71;
+SELECT a FROM t185;
+a
+TRUNCATE TABLE t70;
+SELECT a FROM t186;
+a
+TRUNCATE TABLE t69;
+SELECT a FROM t187;
+a
+TRUNCATE TABLE t68;
+SELECT a FROM t188;
+a
+TRUNCATE TABLE t67;
+SELECT a FROM t189;
+a
+TRUNCATE TABLE t66;
+SELECT a FROM t190;
+a
+TRUNCATE TABLE t65;
+SELECT a FROM t191;
+a
+TRUNCATE TABLE t64;
+SELECT a FROM t192;
+a
+TRUNCATE TABLE t63;
+SELECT a FROM t193;
+a
+TRUNCATE TABLE t62;
+SELECT a FROM t194;
+a
+TRUNCATE TABLE t61;
+SELECT a FROM t195;
+a
+TRUNCATE TABLE t60;
+SELECT a FROM t196;
+a
+TRUNCATE TABLE t59;
+SELECT a FROM t197;
+a
+TRUNCATE TABLE t58;
+SELECT a FROM t198;
+a
+TRUNCATE TABLE t57;
+SELECT a FROM t199;
+a
+TRUNCATE TABLE t56;
+SELECT a FROM t200;
+a
+TRUNCATE TABLE t55;
+SELECT a FROM t201;
+a
+TRUNCATE TABLE t54;
+SELECT a FROM t202;
+a
+TRUNCATE TABLE t53;
+SELECT a FROM t203;
+a
+TRUNCATE TABLE t52;
+SELECT a FROM t204;
+a
+TRUNCATE TABLE t51;
+SELECT a FROM t205;
+a
+TRUNCATE TABLE t50;
+SELECT a FROM t206;
+a
+TRUNCATE TABLE t49;
+SELECT a FROM t207;
+a
+TRUNCATE TABLE t48;
+SELECT a FROM t208;
+a
+TRUNCATE TABLE t47;
+SELECT a FROM t209;
+a
+TRUNCATE TABLE t46;
+SELECT a FROM t210;
+a
+TRUNCATE TABLE t45;
+SELECT a FROM t211;
+a
+TRUNCATE TABLE t44;
+SELECT a FROM t212;
+a
+TRUNCATE TABLE t43;
+SELECT a FROM t213;
+a
+TRUNCATE TABLE t42;
+SELECT a FROM t214;
+a
+TRUNCATE TABLE t41;
+SELECT a FROM t215;
+a
+TRUNCATE TABLE t40;
+SELECT a FROM t216;
+a
+TRUNCATE TABLE t39;
+SELECT a FROM t217;
+a
+TRUNCATE TABLE t38;
+SELECT a FROM t218;
+a
+TRUNCATE TABLE t37;
+SELECT a FROM t219;
+a
+TRUNCATE TABLE t36;
+SELECT a FROM t220;
+a
+TRUNCATE TABLE t35;
+SELECT a FROM t221;
+a
+TRUNCATE TABLE t34;
+SELECT a FROM t222;
+a
+TRUNCATE TABLE t33;
+SELECT a FROM t223;
+a
+TRUNCATE TABLE t32;
+SELECT a FROM t224;
+a
+TRUNCATE TABLE t31;
+SELECT a FROM t225;
+a
+TRUNCATE TABLE t30;
+SELECT a FROM t226;
+a
+TRUNCATE TABLE t29;
+SELECT a FROM t227;
+a
+TRUNCATE TABLE t28;
+SELECT a FROM t228;
+a
+TRUNCATE TABLE t27;
+SELECT a FROM t229;
+a
+TRUNCATE TABLE t26;
+SELECT a FROM t230;
+a
+TRUNCATE TABLE t25;
+SELECT a FROM t231;
+a
+TRUNCATE TABLE t24;
+SELECT a FROM t232;
+a
+TRUNCATE TABLE t23;
+SELECT a FROM t233;
+a
+TRUNCATE TABLE t22;
+SELECT a FROM t234;
+a
+TRUNCATE TABLE t21;
+SELECT a FROM t235;
+a
+TRUNCATE TABLE t20;
+SELECT a FROM t236;
+a
+TRUNCATE TABLE t19;
+SELECT a FROM t237;
+a
+TRUNCATE TABLE t18;
+SELECT a FROM t238;
+a
+TRUNCATE TABLE t17;
+SELECT a FROM t239;
+a
+TRUNCATE TABLE t16;
+SELECT a FROM t240;
+a
+TRUNCATE TABLE t15;
+SELECT a FROM t241;
+a
+TRUNCATE TABLE t14;
+SELECT a FROM t242;
+a
+TRUNCATE TABLE t13;
+SELECT a FROM t243;
+a
+TRUNCATE TABLE t12;
+SELECT a FROM t244;
+a
+TRUNCATE TABLE t11;
+SELECT a FROM t245;
+a
+TRUNCATE TABLE t10;
+SELECT a FROM t246;
+a
+TRUNCATE TABLE t9;
+SELECT a FROM t247;
+a
+TRUNCATE TABLE t8;
+SELECT a FROM t248;
+a
+TRUNCATE TABLE t7;
+SELECT a FROM t249;
+a
+TRUNCATE TABLE t6;
+SELECT a FROM t250;
+a
+TRUNCATE TABLE t5;
+SELECT a FROM t251;
+a
+TRUNCATE TABLE t4;
+SELECT a FROM t252;
+a
+TRUNCATE TABLE t3;
+SELECT a FROM t253;
+a
+TRUNCATE TABLE t2;
+SELECT a FROM t254;
+a
+TRUNCATE TABLE t1;
+SELECT a FROM t255;
+a
+SELECT a FROM t0;
+a
+DROP TABLE t0;
+DROP TABLE t255;
+DROP TABLE t254;
+DROP TABLE t253;
+DROP TABLE t252;
+DROP TABLE t251;
+DROP TABLE t250;
+DROP TABLE t249;
+DROP TABLE t248;
+DROP TABLE t247;
+DROP TABLE t246;
+DROP TABLE t245;
+DROP TABLE t244;
+DROP TABLE t243;
+DROP TABLE t242;
+DROP TABLE t241;
+DROP TABLE t240;
+DROP TABLE t239;
+DROP TABLE t238;
+DROP TABLE t237;
+DROP TABLE t236;
+DROP TABLE t235;
+DROP TABLE t234;
+DROP TABLE t233;
+DROP TABLE t232;
+DROP TABLE t231;
+DROP TABLE t230;
+DROP TABLE t229;
+DROP TABLE t228;
+DROP TABLE t227;
+DROP TABLE t226;
+DROP TABLE t225;
+DROP TABLE t224;
+DROP TABLE t223;
+DROP TABLE t222;
+DROP TABLE t221;
+DROP TABLE t220;
+DROP TABLE t219;
+DROP TABLE t218;
+DROP TABLE t217;
+DROP TABLE t216;
+DROP TABLE t215;
+DROP TABLE t214;
+DROP TABLE t213;
+DROP TABLE t212;
+DROP TABLE t211;
+DROP TABLE t210;
+DROP TABLE t209;
+DROP TABLE t208;
+DROP TABLE t207;
+DROP TABLE t206;
+DROP TABLE t205;
+DROP TABLE t204;
+DROP TABLE t203;
+DROP TABLE t202;
+DROP TABLE t201;
+DROP TABLE t200;
+DROP TABLE t199;
+DROP TABLE t198;
+DROP TABLE t197;
+DROP TABLE t196;
+DROP TABLE t195;
+DROP TABLE t194;
+DROP TABLE t193;
+DROP TABLE t192;
+DROP TABLE t191;
+DROP TABLE t190;
+DROP TABLE t189;
+DROP TABLE t188;
+DROP TABLE t187;
+DROP TABLE t186;
+DROP TABLE t185;
+DROP TABLE t184;
+DROP TABLE t183;
+DROP TABLE t182;
+DROP TABLE t181;
+DROP TABLE t180;
+DROP TABLE t179;
+DROP TABLE t178;
+DROP TABLE t177;
+DROP TABLE t176;
+DROP TABLE t175;
+DROP TABLE t174;
+DROP TABLE t173;
+DROP TABLE t172;
+DROP TABLE t171;
+DROP TABLE t170;
+DROP TABLE t169;
+DROP TABLE t168;
+DROP TABLE t167;
+DROP TABLE t166;
+DROP TABLE t165;
+DROP TABLE t164;
+DROP TABLE t163;
+DROP TABLE t162;
+DROP TABLE t161;
+DROP TABLE t160;
+DROP TABLE t159;
+DROP TABLE t158;
+DROP TABLE t157;
+DROP TABLE t156;
+DROP TABLE t155;
+DROP TABLE t154;
+DROP TABLE t153;
+DROP TABLE t152;
+DROP TABLE t151;
+DROP TABLE t150;
+DROP TABLE t149;
+DROP TABLE t148;
+DROP TABLE t147;
+DROP TABLE t146;
+DROP TABLE t145;
+DROP TABLE t144;
+DROP TABLE t143;
+DROP TABLE t142;
+DROP TABLE t141;
+DROP TABLE t140;
+DROP TABLE t139;
+DROP TABLE t138;
+DROP TABLE t137;
+DROP TABLE t136;
+DROP TABLE t135;
+DROP TABLE t134;
+DROP TABLE t133;
+DROP TABLE t132;
+DROP TABLE t131;
+DROP TABLE t130;
+DROP TABLE t129;
+DROP TABLE t128;
+DROP TABLE t127;
+DROP TABLE t126;
+DROP TABLE t125;
+DROP TABLE t124;
+DROP TABLE t123;
+DROP TABLE t122;
+DROP TABLE t121;
+DROP TABLE t120;
+DROP TABLE t119;
+DROP TABLE t118;
+DROP TABLE t117;
+DROP TABLE t116;
+DROP TABLE t115;
+DROP TABLE t114;
+DROP TABLE t113;
+DROP TABLE t112;
+DROP TABLE t111;
+DROP TABLE t110;
+DROP TABLE t109;
+DROP TABLE t108;
+DROP TABLE t107;
+DROP TABLE t106;
+DROP TABLE t105;
+DROP TABLE t104;
+DROP TABLE t103;
+DROP TABLE t102;
+DROP TABLE t101;
+DROP TABLE t100;
+DROP TABLE t99;
+DROP TABLE t98;
+DROP TABLE t97;
+DROP TABLE t96;
+DROP TABLE t95;
+DROP TABLE t94;
+DROP TABLE t93;
+DROP TABLE t92;
+DROP TABLE t91;
+DROP TABLE t90;
+DROP TABLE t89;
+DROP TABLE t88;
+DROP TABLE t87;
+DROP TABLE t86;
+DROP TABLE t85;
+DROP TABLE t84;
+DROP TABLE t83;
+DROP TABLE t82;
+DROP TABLE t81;
+DROP TABLE t80;
+DROP TABLE t79;
+DROP TABLE t78;
+DROP TABLE t77;
+DROP TABLE t76;
+DROP TABLE t75;
+DROP TABLE t74;
+DROP TABLE t73;
+DROP TABLE t72;
+DROP TABLE t71;
+DROP TABLE t70;
+DROP TABLE t69;
+DROP TABLE t68;
+DROP TABLE t67;
+DROP TABLE t66;
+DROP TABLE t65;
+DROP TABLE t64;
+DROP TABLE t63;
+DROP TABLE t62;
+DROP TABLE t61;
+DROP TABLE t60;
+DROP TABLE t59;
+DROP TABLE t58;
+DROP TABLE t57;
+DROP TABLE t56;
+DROP TABLE t55;
+DROP TABLE t54;
+DROP TABLE t53;
+DROP TABLE t52;
+DROP TABLE t51;
+DROP TABLE t50;
+DROP TABLE t49;
+DROP TABLE t48;
+DROP TABLE t47;
+DROP TABLE t46;
+DROP TABLE t45;
+DROP TABLE t44;
+DROP TABLE t43;
+DROP TABLE t42;
+DROP TABLE t41;
+DROP TABLE t40;
+DROP TABLE t39;
+DROP TABLE t38;
+DROP TABLE t37;
+DROP TABLE t36;
+DROP TABLE t35;
+DROP TABLE t34;
+DROP TABLE t33;
+DROP TABLE t32;
+DROP TABLE t31;
+DROP TABLE t30;
+DROP TABLE t29;
+DROP TABLE t28;
+DROP TABLE t27;
+DROP TABLE t26;
+DROP TABLE t25;
+DROP TABLE t24;
+DROP TABLE t23;
+DROP TABLE t22;
+DROP TABLE t21;
+DROP TABLE t20;
+DROP TABLE t19;
+DROP TABLE t18;
+DROP TABLE t17;
+DROP TABLE t16;
+DROP TABLE t15;
+DROP TABLE t14;
+DROP TABLE t13;
+DROP TABLE t12;
+DROP TABLE t11;
+DROP TABLE t10;
+DROP TABLE t9;
+DROP TABLE t8;
+DROP TABLE t7;
+DROP TABLE t6;
+DROP TABLE t5;
+DROP TABLE t4;
+DROP TABLE t3;
+DROP TABLE t2;
+DROP TABLE t1;
+SET @@global.query_cache_size = 0;
+End of 5.1 tests
=== modified file 'mysql-test/r/rpl_grant.result'
--- a/mysql-test/r/rpl_grant.result 2008-01-29 11:21:21 +0000
+++ b/mysql-test/r/rpl_grant.result 2008-09-24 12:59:56 +0000
@@ -12,18 +12,18 @@ user host
dummy localhost
dummy1 localhost
dummy2 localhost
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
COUNT(*)
-6
+3
**** On Slave ****
SELECT user,host FROM mysql.user WHERE user != 'root';
user host
dummy localhost
dummy1 localhost
dummy2 localhost
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
COUNT(*)
-6
+3
**** On Master ****
DROP USER nonexisting@localhost;
ERROR HY000: Operation DROP USER failed for 'nonexisting'@'localhost'
@@ -32,15 +32,15 @@ ERROR HY000: Operation DROP USER failed
DROP USER dummy1@localhost, dummy2@localhost;
SELECT user, host FROM mysql.user WHERE user != 'root';
user host
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
COUNT(*)
-3
+0
**** On Slave ****
SELECT user,host FROM mysql.user WHERE user != 'root';
user host
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
COUNT(*)
-3
+0
SHOW SLAVE STATUS;
Slave_IO_State #
Master_Host 127.0.0.1
=== modified file 'mysql-test/r/rpl_log.result'
--- a/mysql-test/r/rpl_log.result 2006-10-19 09:35:10 +0000
+++ b/mysql-test/r/rpl_log.result 2008-04-03 21:16:55 +0000
@@ -7,7 +7,7 @@ start slave;
stop slave;
reset master;
reset slave;
-reset master;
+start slave;
create table t1(n int not null auto_increment primary key);
insert into t1 values (NULL);
drop table t1;
@@ -25,8 +25,8 @@ master-bin.000001 219 Intvar 1 247 INSER
master-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL)
master-bin.000001 338 Query 1 414 use `test`; drop table t1
master-bin.000001 414 Query 1 517 use `test`; create table t1 (word char(20) not null)
-master-bin.000001 517 Begin_load_query 1 1121 ;file_id=1;block_len=581
-master-bin.000001 1121 Execute_load_query 1 1269 use `test`; load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines ;file_id=1
+master-bin.000001 517 Begin_load_query 1 1121 ;file_id=#;block_len=#
+master-bin.000001 1121 Execute_load_query 1 1269 use `test`; load data infile 'words.dat' into table t1 ignore 1 lines ;file_id=#
master-bin.000001 1269 Query 1 1345 use `test`; drop table t1
show binlog events from 98 limit 1;
Log_name Pos Event_type Server_id End_log_pos Info
@@ -41,7 +41,6 @@ master-bin.000001 247 Query 1 338 use `t
flush logs;
create table t5 (a int);
drop table t5;
-start slave;
flush logs;
stop slave;
create table t1 (n int);
@@ -55,8 +54,8 @@ master-bin.000001 219 Intvar 1 247 INSER
master-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL)
master-bin.000001 338 Query 1 414 use `test`; drop table t1
master-bin.000001 414 Query 1 517 use `test`; create table t1 (word char(20) not null)
-master-bin.000001 517 Begin_load_query 1 1121 ;file_id=1;block_len=581
-master-bin.000001 1121 Execute_load_query 1 1269 use `test`; load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines ;file_id=1
+master-bin.000001 517 Begin_load_query 1 1121 ;file_id=#;block_len=#
+master-bin.000001 1121 Execute_load_query 1 1269 use `test`; load data infile 'words.dat' into table t1 ignore 1 lines ;file_id=#
master-bin.000001 1269 Query 1 1345 use `test`; drop table t1
master-bin.000001 1345 Rotate 1 1389 master-bin.000002;pos=4
show binlog events in 'master-bin.000002';
@@ -84,8 +83,8 @@ slave-bin.000001 219 Intvar 1 247 INSERT
slave-bin.000001 247 Query 1 338 use `test`; insert into t1 values (NULL)
slave-bin.000001 338 Query 1 414 use `test`; drop table t1
slave-bin.000001 414 Query 1 517 use `test`; create table t1 (word char(20) not null)
-slave-bin.000001 517 Begin_load_query 1 1121 ;file_id=1;block_len=581
-slave-bin.000001 1121 Execute_load_query 1 1271 use `test`; load data INFILE '../tmp/SQL_LOAD-2-1-1.data' INTO table t1 ignore 1 lines ;file_id=1
+slave-bin.000001 517 Begin_load_query 1 1121 ;file_id=#;block_len=#
+slave-bin.000001 1121 Execute_load_query 1 1271 use `test`; load data INFILE 'words.dat' INTO table t1 ignore 1 lines ;file_id=#
slave-bin.000001 1271 Query 1 1347 use `test`; drop table t1
slave-bin.000001 1347 Query 1 1433 use `test`; create table t5 (a int)
slave-bin.000001 1433 Query 1 1509 use `test`; drop table t5
=== modified file 'mysql-test/r/rpl_sp.result'
--- a/mysql-test/r/rpl_sp.result 2008-05-16 15:26:29 +0000
+++ b/mysql-test/r/rpl_sp.result 2008-10-01 09:48:47 +0000
@@ -502,7 +502,7 @@ master-bin.000001 # Query 1 # use `test`
master-bin.000001 # Query 1 # use `test`; CREATE TABLE t1(col VARCHAR(10))
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
INSERT INTO t1 VALUES(arg)
-master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test'))
+master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci'))
master-bin.000001 # Query 1 # use `test`; DROP PROCEDURE p1
master-bin.000001 # Query 1 # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
SET @a = 1
@@ -841,7 +841,7 @@ CREATE DEFINER=`root`@`localhost` PROCED
INSERT INTO t1 VALUES(arg)
/*!*/;
SET TIMESTAMP=t/*!*/;
-INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test'))
+INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci'))
/*!*/;
SET TIMESTAMP=t/*!*/;
DROP PROCEDURE p1
=== modified file 'mysql-test/r/show_check.result'
--- a/mysql-test/r/show_check.result 2007-09-20 08:54:46 +0000
+++ b/mysql-test/r/show_check.result 2008-08-15 20:13:27 +0000
@@ -12,51 +12,51 @@ insert into t1 values (1,2,2),(2,2,3),(3
-- after Bug#29394 is implemented.
check table t1 fast;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 42 7 Y 0 31 8
-def Op 253 3 5 Y 0 31 8
-def Msg_type 253 3 6 Y 0 31 8
-def Msg_text 253 85 27 Y 0 31 8
+def Table 253 128 7 Y 0 31 8
+def Op 253 10 5 Y 0 31 8
+def Msg_type 253 10 6 Y 0 31 8
+def Msg_text 253 255 27 Y 0 31 8
Table Op Msg_type Msg_text
test.t1 check status Table is already up to date
check table t1 fast;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 42 7 Y 0 31 8
-def Op 253 3 5 Y 0 31 8
-def Msg_type 253 3 6 Y 0 31 8
-def Msg_text 253 85 27 Y 0 31 8
+def Table 253 128 7 Y 0 31 8
+def Op 253 10 5 Y 0 31 8
+def Msg_type 253 10 6 Y 0 31 8
+def Msg_text 253 255 27 Y 0 31 8
Table Op Msg_type Msg_text
test.t1 check status Table is already up to date
check table t1 changed;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 42 7 Y 0 31 8
-def Op 253 3 5 Y 0 31 8
-def Msg_type 253 3 6 Y 0 31 8
-def Msg_text 253 85 2 Y 0 31 8
+def Table 253 128 7 Y 0 31 8
+def Op 253 10 5 Y 0 31 8
+def Msg_type 253 10 6 Y 0 31 8
+def Msg_text 253 255 2 Y 0 31 8
Table Op Msg_type Msg_text
test.t1 check status OK
insert into t1 values (5,5,5);
check table t1 changed;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 42 7 Y 0 31 8
-def Op 253 3 5 Y 0 31 8
-def Msg_type 253 3 6 Y 0 31 8
-def Msg_text 253 85 2 Y 0 31 8
+def Table 253 128 7 Y 0 31 8
+def Op 253 10 5 Y 0 31 8
+def Msg_type 253 10 6 Y 0 31 8
+def Msg_text 253 255 2 Y 0 31 8
Table Op Msg_type Msg_text
test.t1 check status OK
check table t1 medium;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 42 7 Y 0 31 8
-def Op 253 3 5 Y 0 31 8
-def Msg_type 253 3 6 Y 0 31 8
-def Msg_text 253 85 2 Y 0 31 8
+def Table 253 128 7 Y 0 31 8
+def Op 253 10 5 Y 0 31 8
+def Msg_type 253 10 6 Y 0 31 8
+def Msg_text 253 255 2 Y 0 31 8
Table Op Msg_type Msg_text
test.t1 check status OK
check table t1 extended;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 42 7 Y 0 31 8
-def Op 253 3 5 Y 0 31 8
-def Msg_type 253 3 6 Y 0 31 8
-def Msg_text 253 85 2 Y 0 31 8
+def Table 253 128 7 Y 0 31 8
+def Op 253 10 5 Y 0 31 8
+def Msg_type 253 10 6 Y 0 31 8
+def Msg_text 253 255 2 Y 0 31 8
Table Op Msg_type Msg_text
test.t1 check status OK
show index from t1;
@@ -84,10 +84,10 @@ ERROR 23000: Duplicate entry '5' for key
-- after Bug#29394 is implemented.
optimize table t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 42 7 Y 0 31 8
-def Op 253 3 8 Y 0 31 8
-def Msg_type 253 3 6 Y 0 31 8
-def Msg_text 253 85 2 Y 0 31 8
+def Table 253 128 7 Y 0 31 8
+def Op 253 10 8 Y 0 31 8
+def Msg_type 253 10 6 Y 0 31 8
+def Msg_text 253 255 2 Y 0 31 8
Table Op Msg_type Msg_text
test.t1 optimize status OK
optimize table t1;
@@ -154,10 +154,10 @@ insert into t1 values (1,1,1,0),(1,1,2,0
-- after Bug#29394 is implemented.
analyze table t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 42 7 Y 0 31 8
-def Op 253 3 7 Y 0 31 8
-def Msg_type 253 3 6 Y 0 31 8
-def Msg_text 253 85 2 Y 0 31 8
+def Table 253 128 7 Y 0 31 8
+def Op 253 10 7 Y 0 31 8
+def Msg_type 253 10 6 Y 0 31 8
+def Msg_text 253 255 2 Y 0 31 8
Table Op Msg_type Msg_text
test.t1 analyze status OK
show index from t1;
@@ -171,10 +171,10 @@ t1 0 PRIMARY 4 f4 A 18 NULL NULL BTREE
-- after Bug#29394 is implemented.
repair table t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 42 7 Y 0 31 8
-def Op 253 3 6 Y 0 31 8
-def Msg_type 253 3 6 Y 0 31 8
-def Msg_text 253 85 2 Y 0 31 8
+def Table 253 128 7 Y 0 31 8
+def Op 253 10 6 Y 0 31 8
+def Msg_type 253 10 6 Y 0 31 8
+def Msg_text 253 255 2 Y 0 31 8
Table Op Msg_type Msg_text
test.t1 repair status OK
show index from t1;
@@ -788,8 +788,8 @@ latin1_bin latin1 47 Yes 1
----------------------------------------------------------------
SHOW CREATE DATABASE mysqltest1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Database 253 63 10 N 1 31 33
-def Create Database 253 1023 69 N 1 31 33
+def Database 253 192 10 N 1 31 33
+def Create Database 253 3072 69 N 1 31 33
Database Create Database
mysqltest1 CREATE DATABASE `mysqltest1` /*!40100 DEFAULT CHARACTER SET latin1 */
----------------------------------------------------------------
@@ -801,8 +801,8 @@ mysqltest1
----------------------------------------------------------------
SHOW CREATE TABLE t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Table 253 63 2 N 1 31 33
-def Create Table 253 1023 103 N 1 31 33
+def Table 253 192 2 N 1 31 33
+def Create Table 253 3072 103 N 1 31 33
Table Create Table
t1 CREATE TABLE `t1` (
`c` int(11) NOT NULL,
@@ -959,8 +959,8 @@ NULL test t1_bi INSERT NULL test t1 NULL
----------------------------------------------------------------
SHOW CREATE VIEW v1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def View 253 63 2 N 1 31 33
-def Create View 253 1023 103 N 1 31 33
+def View 253 192 2 N 1 31 33
+def Create View 253 3072 103 N 1 31 33
View Create View
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 AS `1`
----------------------------------------------------------------
@@ -981,9 +981,9 @@ NULL test v1 /* ALGORITHM=UNDEFINED */ s
----------------------------------------------------------------
SHOW CREATE PROCEDURE p1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Procedure 253 63 2 N 1 31 33
+def Procedure 253 192 2 N 1 31 33
def sql_mode 253 0 0 N 1 31 33
-def Create Procedure 253 2046 59 Y 0 31 33
+def Create Procedure 253 6144 59 Y 0 31 33
Procedure sql_mode Create Procedure
p1 CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
SELECT 1
@@ -1033,9 +1033,9 @@ p1 NULL test p1 PROCEDURE NULL SQL SELEC
----------------------------------------------------------------
SHOW CREATE FUNCTION f1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
-def Function 253 63 2 N 1 31 33
+def Function 253 192 2 N 1 31 33
def sql_mode 253 0 0 N 1 31 33
-def Create Function 253 2046 74 Y 0 31 33
+def Create Function 253 6144 74 Y 0 31 33
Function sql_mode Create Function
f1 CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
RETURN 1
@@ -1141,4 +1141,34 @@ Slow_queries 2
show variables like 'myisam_recover_options';
Variable_name Value
myisam_recover_options OFF
+CREATE TABLE t1 (
+Codigo int(10) unsigned NOT NULL auto_increment,
+Nombre varchar(255) default NULL,
+Telefono varchar(255) default NULL,
+Observaciones longtext,
+Direccion varchar(255) default NULL,
+Dni varchar(255) default NULL,
+CP int(11) default NULL,
+Provincia varchar(255) default NULL,
+Poblacion varchar(255) default NULL,
+PRIMARY KEY (Codigo)
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
+show create table t1;
+Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
+def Table 253 64 2 N 1 31 7
+def Create Table 253 1024 446 N 1 31 7
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `Codigo` int(10) unsigned NOT NULL auto_increment,
+ `Nombre` varchar(255) default NULL,
+ `Telefono` varchar(255) default NULL,
+ `Observaciones` longtext,
+ `Direccion` varchar(255) default NULL,
+ `Dni` varchar(255) default NULL,
+ `CP` int(11) default NULL,
+ `Provincia` varchar(255) default NULL,
+ `Poblacion` varchar(255) default NULL,
+ PRIMARY KEY (`Codigo`)
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
+drop table t1;
End of 5.0 tests
=== modified file 'mysql-test/r/sp-error.result'
--- a/mysql-test/r/sp-error.result 2008-01-23 20:26:41 +0000
+++ b/mysql-test/r/sp-error.result 2008-09-29 14:11:34 +0000
@@ -1513,3 +1513,10 @@ end loop label1;
end loop;
end|
ERROR 42000: End-label label1 without match
+CREATE TABLE t1 (a INT)|
+INSERT INTO t1 VALUES (1),(2)|
+CREATE PROCEDURE p1(a INT) BEGIN END|
+CALL p1((SELECT * FROM t1))|
+ERROR 21000: Subquery returns more than 1 row
+DROP PROCEDURE IF EXISTS p1|
+DROP TABLE t1|
=== modified file 'mysql-test/r/sp.result'
--- a/mysql-test/r/sp.result 2008-02-17 11:37:39 +0000
+++ b/mysql-test/r/sp.result 2008-09-20 08:51:03 +0000
@@ -6646,6 +6646,32 @@ ttt
2
drop function func30787;
drop table t1;
+create table t1(c1 INT);
+create function f1(p1 int) returns varchar(32)
+return 'aaa';
+create view v1 as select f1(c1) as parent_control_name from t1;
+create procedure p1()
+begin
+select parent_control_name as c1 from v1;
+end //
+call p1();
+c1
+call p1();
+c1
+drop procedure p1;
+drop function f1;
+drop view v1;
+drop table t1;
+drop procedure if exists `p2` $
+create procedure `p2`(in `a` text charset utf8)
+begin
+declare `pos` int default 1;
+declare `str` text charset utf8;
+set `str` := `a`;
+select substr(`str`, `pos`+ 1 ) into `str`;
+end $
+call `p2`('s s s s s s');
+drop procedure `p2`;
# ------------------------------------------------------------------
# -- End of 5.0 tests
# ------------------------------------------------------------------
=== modified file 'mysql-test/r/subselect.result'
--- a/mysql-test/r/subselect.result 2008-05-16 14:05:55 +0000
+++ b/mysql-test/r/subselect.result 2008-07-26 20:44:07 +0000
@@ -4396,4 +4396,15 @@ id select_type table type possible_keys
Warnings:
Note 1003 select 1 AS `1` from `test`.`t1` where <in_optimizer>(1,<exists>(select 1 AS `1` from `test`.`t1` where (`test`.`t1`.`a` > 3) group by `test`.`t1`.`a` having (<cache>(1) = <ref_null_helper>(1))))
DROP TABLE t1;
+CREATE TABLE t1(pk int PRIMARY KEY, a int, INDEX idx(a));
+INSERT INTO t1 VALUES (1, 10), (3, 30), (2, 20);
+CREATE TABLE t2(pk int PRIMARY KEY, a int, b int, INDEX idxa(a));
+INSERT INTO t2 VALUES (2, 20, 700), (1, 10, 200), (4, 10, 100);
+SELECT * FROM t1
+WHERE EXISTS (SELECT DISTINCT a FROM t2 WHERE t1.a < t2.a ORDER BY b);
+pk a
+1 10
+3 30
+2 20
+DROP TABLE t1,t2;
End of 5.0 tests.
=== modified file 'mysql-test/r/symlink.result'
--- a/mysql-test/r/symlink.result 2008-07-10 18:50:07 +0000
+++ b/mysql-test/r/symlink.result 2008-10-20 11:31:29 +0000
@@ -57,8 +57,6 @@ t9 CREATE TABLE `t9` (
Got one of the listed errors
Got one of the listed errors
Got one of the listed errors
-Got one of the listed errors
-Got one of the listed errors
alter table t9 rename mysqltest.t9;
select count(*) from mysqltest.t9;
count(*)
=== modified file 'mysql-test/r/type_bit.result'
--- a/mysql-test/r/type_bit.result 2007-12-02 00:48:43 +0000
+++ b/mysql-test/r/type_bit.result 2008-08-27 21:10:37 +0000
@@ -684,4 +684,28 @@ SELECT 1 FROM t1 GROUP BY a;
1
1
DROP TABLE t1;
+CREATE TABLE t1 (b BIT NOT NULL, i2 INTEGER NOT NULL, s VARCHAR(255) NOT NULL);
+INSERT INTO t1 VALUES(0x01,100,''), (0x00,300,''), (0x01,200,''), (0x00,100,'');
+SELECT HEX(b), i2 FROM t1 WHERE (i2>=100 AND i2<201) AND b=TRUE;
+HEX(b) i2
+1 100
+1 200
+CREATE TABLE t2 (b1 BIT NOT NULL, b2 BIT NOT NULL, i2 INTEGER NOT NULL,
+s VARCHAR(255) NOT NULL);
+INSERT INTO t2 VALUES (0x01,0x00,100,''), (0x00,0x01,300,''),
+(0x01,0x00,200,''), (0x00,0x01,100,'');
+SELECT HEX(b1), i2 FROM t2 WHERE (i2>=100 AND i2<201) AND b1=TRUE;
+HEX(b1) i2
+1 100
+1 200
+SELECT HEX(b2), i2 FROM t2 WHERE (i2>=100 AND i2<201) AND b2=FALSE;
+HEX(b2) i2
+0 100
+0 200
+SELECT HEX(b1), HEX(b2), i2 FROM t2
+WHERE (i2>=100 AND i2<201) AND b1=TRUE AND b2=FALSE;
+HEX(b1) HEX(b2) i2
+1 0 100
+1 0 200
+DROP TABLE t1, t2;
End of 5.0 tests
=== modified file 'mysql-test/r/type_datetime.result'
--- a/mysql-test/r/type_datetime.result 2007-12-08 21:05:00 +0000
+++ b/mysql-test/r/type_datetime.result 2008-09-09 15:05:27 +0000
@@ -560,4 +560,27 @@ select * from t2
where id in (select id from t2 as x1 where (t2.cur_date is null));
id cur_date
drop table t1,t2;
+SELECT
+CAST('NULL' AS DATE) <=> CAST('2008-01-01' AS DATE) n1,
+CAST('2008-01-01' AS DATE) <=> CAST('NULL' AS DATE) n2,
+CAST('NULL' AS DATE) <=> CAST('NULL' AS DATE) n3,
+CAST('NULL' AS DATE) <> CAST('2008-01-01' AS DATE) n4,
+CAST('2008-01-01' AS DATE) <> CAST('NULL' AS DATE) n5,
+CAST('NULL' AS DATE) <> CAST('NULL' AS DATE) n6,
+CAST('NULL' AS DATE) < CAST('2008-01-01' AS DATE) n7,
+CAST('2008-01-01' AS DATE) < CAST('NULL' AS DATE) n8,
+CAST('NULL' AS DATE) < CAST('NULL' AS DATE) n9;
+n1 n2 n3 n4 n5 n6 n7 n8 n9
+0 0 1 NULL NULL NULL NULL NULL NULL
+Warnings:
+Warning 1292 Truncated incorrect datetime value: 'NULL'
+Warning 1292 Truncated incorrect datetime value: 'NULL'
+Warning 1292 Truncated incorrect datetime value: 'NULL'
+Warning 1292 Truncated incorrect datetime value: 'NULL'
+Warning 1292 Truncated incorrect datetime value: 'NULL'
+Warning 1292 Truncated incorrect datetime value: 'NULL'
+Warning 1292 Truncated incorrect datetime value: 'NULL'
+Warning 1292 Truncated incorrect datetime value: 'NULL'
+Warning 1292 Truncated incorrect datetime value: 'NULL'
+Warning 1292 Truncated incorrect datetime value: 'NULL'
End of 5.0 tests
=== modified file 'mysql-test/r/type_newdecimal.result'
--- a/mysql-test/r/type_newdecimal.result 2007-11-17 18:05:31 +0000
+++ b/mysql-test/r/type_newdecimal.result 2008-08-15 19:46:21 +0000
@@ -1519,4 +1519,9 @@ SELECT f1 FROM t1;
f1
99999999999999999999999999999.999999999999999999999999999999
DROP TABLE t1;
+select (1.20396873 * 0.89550000 * 0.68000000 * 1.08721696 * 0.99500000 *
+1.01500000 * 1.01500000 * 0.99500000);
+(1.20396873 * 0.89550000 * 0.68000000 * 1.08721696 * 0.99500000 *
+1.01500000 * 1.01500000 * 0.99500000)
+0.812988073953673124592306939480
End of 5.0 tests
=== modified file 'mysql-test/suite/funcs_1/views/func_view.inc'
--- a/mysql-test/suite/funcs_1/views/func_view.inc 2008-06-16 18:39:58 +0000
+++ b/mysql-test/suite/funcs_1/views/func_view.inc 2008-10-02 11:47:16 +0000
@@ -157,10 +157,16 @@ DROP VIEW IF EXISTS v1;
--disable_query_log
# Storage for the SELECTs to be used for the VIEW definition
+# Attention: my_select must be no too small because a statement like
+# SELECT LOAD_FILE(< file in MYSQLTEST_VARDIR >)
+# AS my_col,
+# id FROM t1_values';
+# might be a very long
+# Bug#38427 "Data too long" ... tests "<ENGINE>_func_view" fail
CREATE TABLE t1_selects
(
id BIGINT AUTO_INCREMENT,
- my_select VARCHAR(200) NOT NULL,
+ my_select VARCHAR(1000) NOT NULL,
disable_result ENUM('Yes','No') NOT NULL default 'No',
PRIMARY KEY(id),
UNIQUE (my_select)
=== modified file 'mysql-test/suite/funcs_2/charset/charset_master.test'
--- a/mysql-test/suite/funcs_2/charset/charset_master.test 2007-02-06 18:07:48 +0000
+++ b/mysql-test/suite/funcs_2/charset/charset_master.test 2008-07-09 11:22:07 +0000
@@ -1,14 +1,96 @@
#################################################################################
-# Author: Serge Kozlov #
-# Date: 09/21/2005 #
-# Purpose: used by ../t/*_charset.test #
-# Require: set $engine_type= [NDB,MyISAM,InnoDB,etc] before calling #
+# Author: Serge Kozlov #
+# Date: 2005-09-21 #
+# Purpose: used by ../t/*_charset.test #
+# Require: set $engine_type= [NDB,MyISAM,InnoDB,etc] before calling #
+# #
+# Last modification: Matthias Leich #
+# Date: 2008-07-02 #
+# Purpose: Fix Bug#37160 funcs_2: The tests do not check if optional character #
+# sets exist. #
+# Add checking of prerequisites + minor cleanup #
#################################################################################
#
#
#
+# Check that all character sets needed are available
+# Note(mleich):
+# It is intentional that the common solution with
+# "--source include/have_<character set>.inc"
+# is not applied.
+# - We currently do not have such a prerequisite test for every character set
+# /collation needed.
+# - There is also no real value in mentioning the first missing character set
+# /collation within the "skip message" because it is most probably only
+# one of many.
+#
+# Hint: 5 character_set_names per source line if possible
+if (`SELECT COUNT(*) <> 36 FROM information_schema.character_sets
+ WHERE CHARACTER_SET_NAME IN (
+ 'armscii8', 'ascii' , 'big5' , 'binary' , 'cp1250',
+ 'cp1251' , 'cp1256' , 'cp1257' , 'cp850' , 'cp852' ,
+ 'cp866' , 'cp932' , 'dec8' , 'eucjpms', 'euckr' ,
+ 'gb2312' , 'gbk' , 'geostd8', 'greek' , 'hebrew',
+ 'hp8' , 'keybcs2', 'koi8r' , 'koi8u' , 'latin1',
+ 'latin2' , 'latin5' , 'latin7' , 'macce' , 'macroman',
+ 'sjis' , 'swe7' , 'tis620' , 'ucs2' , 'ujis',
+ 'utf8'
+ )`)
+{
+ --skip Not all character sets required for this test are present
+}
+# Check that all collations needed are available
+# Hint: 4 collation_names per source line if possible
+if (`SELECT COUNT(*) <> 123 FROM information_schema.collations
+WHERE collation_name IN (
+'armscii8_bin', 'armscii8_general_ci', 'ascii_bin', 'ascii_general_ci',
+'big5_bin', 'big5_chinese_ci', 'cp1250_bin', 'cp1250_croatian_ci',
+'cp1250_czech_cs', 'cp1250_general_ci', 'cp1251_bin', 'cp1251_bulgarian_ci',
+'cp1251_general_ci', 'cp1251_general_cs', 'cp1251_ukrainian_ci', 'cp1256_bin',
+'cp1256_general_ci', 'cp1257_bin', 'cp1257_general_ci', 'cp1257_lithuanian_ci',
+'cp850_bin', 'cp850_general_ci', 'cp852_bin', 'cp852_general_ci',
+'cp866_bin', 'cp866_general_ci', 'cp932_bin', 'cp932_japanese_ci',
+'dec8_bin', 'dec8_swedish_ci', 'eucjpms_bin', 'eucjpms_japanese_ci',
+'euckr_bin', 'euckr_korean_ci', 'gb2312_bin', 'gb2312_chinese_ci',
+'gbk_bin', 'gbk_chinese_ci', 'geostd8_bin', 'geostd8_general_ci',
+'greek_bin', 'greek_general_ci', 'hebrew_bin', 'hebrew_general_ci',
+'hp8_bin', 'hp8_english_ci', 'keybcs2_bin', 'keybcs2_general_ci',
+'koi8r_bin', 'koi8r_general_ci', 'koi8u_bin', 'koi8u_general_ci',
+'latin1_bin', 'latin1_danish_ci', 'latin1_general_ci', 'latin1_general_cs',
+'latin1_german1_ci', 'latin1_german2_ci', 'latin1_spanish_ci', 'latin1_swedish_ci',
+'latin2_bin', 'latin2_croatian_ci', 'latin2_czech_cs', 'latin2_general_ci',
+'latin2_hungarian_ci', 'latin5_bin', 'latin5_turkish_ci', 'latin7_bin',
+'latin7_estonian_cs', 'latin7_general_ci', 'latin7_general_cs', 'macce_bin',
+'macce_general_ci', 'macroman_bin', 'macroman_general_ci', 'sjis_bin',
+'sjis_japanese_ci', 'swe7_bin', 'swe7_swedish_ci', 'tis620_bin',
+'tis620_thai_ci', 'ucs2_bin', 'ucs2_czech_ci', 'ucs2_danish_ci',
+'ucs2_estonian_ci', 'ucs2_general_ci', 'ucs2_hungarian_ci', 'ucs2_icelandic_ci',
+'ucs2_latvian_ci', 'ucs2_lithuanian_ci', 'ucs2_persian_ci', 'ucs2_polish_ci',
+'ucs2_roman_ci', 'ucs2_romanian_ci', 'ucs2_slovak_ci', 'ucs2_slovenian_ci',
+'ucs2_spanish2_ci', 'ucs2_spanish_ci', 'ucs2_swedish_ci', 'ucs2_turkish_ci',
+'ucs2_unicode_ci', 'ujis_bin', 'ujis_japanese_ci', 'utf8_bin',
+'utf8_czech_ci', 'utf8_danish_ci', 'utf8_estonian_ci', 'utf8_general_ci',
+'utf8_hungarian_ci', 'utf8_icelandic_ci', 'utf8_latvian_ci', 'utf8_lithuanian_ci',
+'utf8_persian_ci', 'utf8_polish_ci', 'utf8_roman_ci', 'utf8_romanian_ci',
+'utf8_slovak_ci', 'utf8_slovenian_ci', 'utf8_spanish2_ci', 'utf8_spanish_ci',
+'utf8_swedish_ci', 'utf8_turkish_ci', 'utf8_unicode_ci'
+)`)
+{
+ --skip Not all collations required for this test are present
+}
+
+################################
+let $check_std_csets= 1;
+let $check_ucs2_csets= 1;
+let $check_utf8_csets= 1;
+
+#
+# Check all charsets/collation combinations
+#
+
+################################
let $check_std_csets= 1;
let $check_ucs2_csets= 1;
let $check_utf8_csets= 1;
=== modified file 'mysql-test/suite/funcs_2/t/innodb_charset.test'
--- a/mysql-test/suite/funcs_2/t/innodb_charset.test 2007-02-06 18:07:48 +0000
+++ b/mysql-test/suite/funcs_2/t/innodb_charset.test 2008-07-09 11:22:07 +0000
@@ -1,8 +1,10 @@
-#################################################################################
-# Author: Serge Kozlov #
-# Date: 09/21/2005 #
-# Purpose: Testing the charsets for InnoDB engine #
-#################################################################################
+################################################################################
+# Author: Serge Kozlov #
+# Date: 2005-09-21 #
+# Purpose: Testing the charsets for InnoDB engine #
+# #
+# Checking of other prerequisites is in charset_master.test #
+################################################################################
--source include/have_innodb.inc
=== modified file 'mysql-test/suite/funcs_2/t/memory_charset.test'
--- a/mysql-test/suite/funcs_2/t/memory_charset.test 2007-02-06 18:07:48 +0000
+++ b/mysql-test/suite/funcs_2/t/memory_charset.test 2008-07-09 11:22:07 +0000
@@ -1,8 +1,10 @@
-#################################################################################
-# Author: Serge Kozlov #
-# Date: 09/21/2005 #
-# Purpose: Testing the charsets for Memory engine #
-#################################################################################
+################################################################################
+# Author: Serge Kozlov #
+# Date: 2005-09-21 #
+# Purpose: Testing the charsets for Memory engine #
+# #
+# Checking of other prerequisites is in charset_master.test #
+################################################################################
let $engine_type= Memory;
--source suite/funcs_2/charset/charset_master.test
=== modified file 'mysql-test/suite/funcs_2/t/myisam_charset.test'
--- a/mysql-test/suite/funcs_2/t/myisam_charset.test 2007-02-06 18:07:48 +0000
+++ b/mysql-test/suite/funcs_2/t/myisam_charset.test 2008-07-09 11:22:07 +0000
@@ -1,8 +1,10 @@
-#################################################################################
-# Author: Serge Kozlov #
-# Date: 09/21/2005 #
-# Purpose: Testing the charsets for MyISAM engine #
-#################################################################################
+################################################################################
+# Author: Serge Kozlov #
+# Date: 2005-09-21 #
+# Purpose: Testing the charsets for MyISAM engine #
+# #
+# Checking of other prerequisites is in charset_master.test #
+################################################################################
let $engine_type= MyISAM;
--source suite/funcs_2/charset/charset_master.test
=== modified file 'mysql-test/suite/funcs_2/t/ndb_charset.test'
--- a/mysql-test/suite/funcs_2/t/ndb_charset.test 2007-02-06 18:07:48 +0000
+++ b/mysql-test/suite/funcs_2/t/ndb_charset.test 2008-07-09 11:22:07 +0000
@@ -1,8 +1,10 @@
-#################################################################################
-# Author: Serge Kozlov #
-# Date: 09/21/2005 #
-# Purpose: Testing the charsets for NDB engine #
-#################################################################################
+################################################################################
+# Author: Serge Kozlov #
+# Date: 09/21/2005 #
+# Purpose: Testing the charsets for NDB engine #
+# #
+# Checking of other prerequisites is in charset_master.test #
+################################################################################
--source include/have_ndb.inc
--source include/not_embedded.inc
=== modified file 'mysql-test/t/binlog.test'
--- a/mysql-test/t/binlog.test 2008-02-08 10:55:55 +0000
+++ b/mysql-test/t/binlog.test 2008-10-01 09:48:47 +0000
@@ -123,4 +123,42 @@ drop table t1;
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/
show binlog events from 0;
+
+#
+# Bug #39182: Binary log producing incompatible character set query from
+# stored procedure.
+#
+CREATE DATABASE bug39182 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
+USE bug39182;
+CREATE TABLE t1 (a VARCHAR(255) COLLATE utf8_unicode_ci)
+ DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
+
+DELIMITER //;
+
+CREATE PROCEDURE p1()
+BEGIN
+ DECLARE s1 VARCHAR(255);
+ SET s1= "test";
+ CREATE TEMPORARY TABLE tmp1
+ SELECT * FROM t1 WHERE a LIKE CONCAT("%", s1, "%");
+ SELECT
+ COLLATION(NAME_CONST('s1', _utf8'test')) c1,
+ COLLATION(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) c2,
+ COLLATION(s1) c3,
+ COERCIBILITY(NAME_CONST('s1', _utf8'test')) d1,
+ COERCIBILITY(NAME_CONST('s1', _utf8'test' COLLATE utf8_unicode_ci)) d2,
+ COERCIBILITY(s1) d3;
+ DROP TEMPORARY TABLE tmp1;
+END//
+
+DELIMITER ;//
+
+CALL p1();
+SHOW BINLOG EVENTS FROM 1285;
+
+DROP PROCEDURE p1;
+DROP TABLE t1;
+DROP DATABASE bug39182;
+USE test;
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/binlog_killed_simulate.test'
--- a/mysql-test/t/binlog_killed_simulate.test 2007-11-06 11:53:26 +0000
+++ b/mysql-test/t/binlog_killed_simulate.test 2008-09-20 06:21:28 +0000
@@ -30,7 +30,7 @@ let $error_code= `select @a like "%#%err
eval select $error_code /* must return 1 as query completed before got killed*/;
# cleanup for the sub-case
-system rm $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
+remove_file $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
#
@@ -58,7 +58,7 @@ let $error_code= `select @a like "%#%err
eval select $error_code /* must return 0 to mean the killed query is in */;
# cleanup for the sub-case
-system rm $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
+remove_file $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
drop table t1,t2;
=== modified file 'mysql-test/t/binlog_start_comment.test'
--- a/mysql-test/t/binlog_start_comment.test 2008-02-01 12:18:27 +0000
+++ b/mysql-test/t/binlog_start_comment.test 2008-09-20 06:21:28 +0000
@@ -21,4 +21,4 @@ select * from t2;
# clean up
drop table t1,t2;
-#--system rm $MYSQLTEST_VARDIR/tmp/binlog_start_comment.binlog
+#--remove_file $MYSQLTEST_VARDIR/tmp/binlog_start_comment.binlog
=== modified file 'mysql-test/t/client_xml.test'
--- a/mysql-test/t/client_xml.test 2007-04-09 12:53:10 +0000
+++ b/mysql-test/t/client_xml.test 2008-07-18 09:07:16 +0000
@@ -1,6 +1,10 @@
# Can't run with embedded server
-- source include/not_embedded.inc
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
# Test of the xml output of the 'mysql' and 'mysqldump' clients -- makes
# sure that basic encoding issues are handled properly
create table t1 (
=== modified file 'mysql-test/t/compare.test'
--- a/mysql-test/t/compare.test 2008-02-15 13:47:32 +0000
+++ b/mysql-test/t/compare.test 2008-09-18 12:55:36 +0000
@@ -76,4 +76,13 @@ FROM t2 ORDER BY a;
DROP TABLE t1,t2;
+#
+# Bug #39353: Multiple conditions on timestamp column crashes server
+#
+
+CREATE TABLE t1 (a TIMESTAMP);
+INSERT INTO t1 VALUES (NOW()),(NOW()),(NOW());
+SELECT * FROM t1 WHERE a > '2008-01-01' AND a = '0000-00-00';
+DROP TABLE t1;
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/create.test'
--- a/mysql-test/t/create.test 2008-02-01 08:00:40 +0000
+++ b/mysql-test/t/create.test 2008-10-02 11:57:52 +0000
@@ -1171,5 +1171,28 @@ CREATE TABLE t1(c1 VARCHAR(33), KEY USIN
SHOW INDEX FROM t1;
DROP TABLE t1;
+#
+# Bug#35924 DEFINER should be stored 'quoted' in I_S
+#
+--error ER_UNKNOWN_ERROR
+create user mysqltest_1@'test@test';
+
+#
+# Bug#38821: Assert table->auto_increment_field_not_null failed in open_table()
+#
+CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
+INSERT IGNORE INTO t1 (b) VALUES (5);
+
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+ SELECT a FROM t1;
+--error 1062
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+ SELECT a FROM t1;
+--error 1062
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+ SELECT a FROM t1;
+
+DROP TABLE t1, t2;
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/ctype_big5.test'
--- a/mysql-test/t/ctype_big5.test 2008-02-04 07:10:40 +0000
+++ b/mysql-test/t/ctype_big5.test 2008-09-20 06:21:28 +0000
@@ -79,7 +79,8 @@ delete from t1;
--eval select hex(load_file('$MYSQLTEST_VARDIR/master-data/test/t1.txt'));
load data infile 't1.txt' into table t1;
select hex(a) from t1;
---exec rm $MYSQLTEST_VARDIR/master-data/test/t1.txt
+--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.txt
+
drop table t1;
--echo End of 5.0 tests
=== modified file 'mysql-test/t/default.test'
--- a/mysql-test/t/default.test 2007-02-12 11:41:36 +0000
+++ b/mysql-test/t/default.test 2008-09-03 07:32:43 +0000
@@ -145,5 +145,24 @@ insert into t1 values(default);
drop view v1;
drop table t1;
+#
+# Bug #39002: crash with
+# INSERT ... SELECT ... ON DUPLICATE KEY UPDATE col=DEFAULT
+#
+
+create table t1 (a int unique);
+create table t2 (b int default 10);
+insert into t1 (a) values (1);
+insert into t2 (b) values (1);
+
+insert into t1 (a) select b from t2 on duplicate key update a=default;
+select * from t1;
+
+insert into t1 (a) values (1);
+insert into t1 (a) select b from t2 on duplicate key update a=default(b);
+select * from t1;
+
+drop table t1, t2;
+
--echo End of 5.0 tests.
=== modified file 'mysql-test/t/disabled.def'
--- a/mysql-test/t/disabled.def 2007-11-28 08:48:06 +0000
+++ b/mysql-test/t/disabled.def 2008-04-07 11:59:51 +0000
@@ -17,8 +17,6 @@ im_options_set : Bug#20294: Instan
im_options_unset : Bug#20294: Instance manager tests fail randomly
im_utils : Bug#20294: Instance manager tests fail randomly
grant_cache : Bug#32651: grant_cache.test fails
-rpl_log : Bug#32653: rpl_log.test fails randomly
-rpl_view : Bug#32654: rpl_view.test fails randomly
ndb_backup_print : Bug#32357: ndb_backup_print test fails sometimes in pushbuild
rpl_log_pos : Bug#8693 Test 'rpl_log_pos' fails sometimes
kill : Bug#29149 Test "kill" fails on Windows
=== modified file 'mysql-test/t/distinct.test'
--- a/mysql-test/t/distinct.test 2007-04-10 13:55:48 +0000
+++ b/mysql-test/t/distinct.test 2008-10-01 09:45:02 +0000
@@ -438,72 +438,71 @@ EXPLAIN SELECT DISTINCT a,a FROM t1 WHER
SELECT DISTINCT a,a FROM t1 WHERE b < 12 ORDER BY a;
DROP TABLE t1;
-# The test case for bug#20836 should be re-enabled when bug#16861 is resolved
-# The results for the test should be the same as in 4.1.
-#
+
#Bug #20836: Selecting into variables results in wrong results being returned
-#
-#--disable_warnings
-#DROP TABLE IF EXISTS t1;
-#--enable_warnings
-#
-#CREATE TABLE t1 (id INT NOT NULL, fruit_id INT NOT NULL, fruit_name varchar(20)
-#default NULL);
-#
-#INSERT INTO t1 VALUES (1,1,'ORANGE');
-#INSERT INTO t1 VALUES (2,2,'APPLE');
-#INSERT INTO t1 VALUES (3,2,'APPLE');
-#INSERT INTO t1 VALUES (4,3,'PEAR');
-#
-#SELECT DISTINCT fruit_id, fruit_name INTO @v1, @v2 FROM t1 WHERE fruit_name =
-#'APPLE';
-#SELECT @v1, @v2;
-#
-#SELECT DISTINCT fruit_id, fruit_name INTO @v3, @v4 FROM t1 GROUP BY fruit_id,
-#fruit_name HAVING fruit_name = 'APPLE';
-#SELECT @v3, @v4;
-#
-#SELECT DISTINCT @v5:= fruit_id, @v6:= fruit_name INTO @v7, @v8 FROM t1 WHERE
-#fruit_name = 'APPLE';
-#SELECT @v5, @v6, @v7, @v8;
-#
-#SELECT DISTINCT @v5 + fruit_id, CONCAT(@v6, fruit_name) INTO @v9, @v10 FROM t1
-#WHERE fruit_name = 'APPLE';
-#SELECT @v5, @v6, @v7, @v8, @v9, @v10;
-#
-#SELECT DISTINCT @v11:= @v5 + fruit_id, @v12:= CONCAT(@v6, fruit_name) INTO
-#@v13, @v14 FROM t1 WHERE fruit_name = 'APPLE';
-#SELECT @v11, @v12, @v13, @v14;
-#
-#SELECT DISTINCT @v13, @v14 INTO @v15, @v16 FROM t1 WHERE fruit_name = 'APPLE';
-#SELECT @v15, @v16;
-#
-#SELECT DISTINCT 2 + 2, 'Bob' INTO @v17, @v18 FROM t1 WHERE fruit_name =
-#'APPLE';
-#SELECT @v17, @v18;
-#
-#--disable_warnings
-#DROP TABLE IF EXISTS t2;
-#--enable_warnings
-#
-#CREATE TABLE t2 (fruit_id INT NOT NULL, fruit_name varchar(20)
-#default NULL);
-#
-#SELECT DISTINCT fruit_id, fruit_name INTO OUTFILE
-#'../tmp/data1.tmp' FROM t1 WHERE fruit_name = 'APPLE';
-#LOAD DATA INFILE '../tmp/data1.tmp' INTO TABLE t2;
-#--exec rm $MYSQL_TEST_DIR/var/tmp/data1.tmp
-#
-#SELECT DISTINCT @v19:= fruit_id, @v20:= fruit_name INTO OUTFILE
-#'../tmp/data2.tmp' FROM t1 WHERE fruit_name = 'APPLE';
-#LOAD DATA INFILE '../tmp/data2.tmp' INTO TABLE t2;
-#--exec rm $MYSQL_TEST_DIR/var/tmp/data2.tmp
-#
-#SELECT @v19, @v20;
-#SELECT * FROM t2;
-#
-#DROP TABLE t1;
-#DROP TABLE t2;
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+CREATE TABLE t1 (id INT NOT NULL, fruit_id INT NOT NULL, fruit_name varchar(20)
+default NULL);
+
+INSERT INTO t1 VALUES (1,1,'ORANGE');
+INSERT INTO t1 VALUES (2,2,'APPLE');
+INSERT INTO t1 VALUES (3,2,'APPLE');
+INSERT INTO t1 VALUES (4,3,'PEAR');
+
+SELECT DISTINCT fruit_id, fruit_name INTO @v1, @v2 FROM t1 WHERE fruit_name =
+'APPLE';
+SELECT @v1, @v2;
+
+SELECT DISTINCT fruit_id, fruit_name INTO @v3, @v4 FROM t1 GROUP BY fruit_id,
+fruit_name HAVING fruit_name = 'APPLE';
+SELECT @v3, @v4;
+
+SELECT DISTINCT @v5:= fruit_id, @v6:= fruit_name INTO @v7, @v8 FROM t1 WHERE
+fruit_name = 'APPLE';
+SELECT @v5, @v6, @v7, @v8;
+
+SELECT DISTINCT @v5 + fruit_id, CONCAT(@v6, fruit_name) INTO @v9, @v10 FROM t1
+WHERE fruit_name = 'APPLE';
+SELECT @v5, @v6, @v7, @v8, @v9, @v10;
+
+SELECT DISTINCT @v11:= @v5 + fruit_id, @v12:= CONCAT(@v6, fruit_name) INTO
+@v13, @v14 FROM t1 WHERE fruit_name = 'APPLE';
+SELECT @v11, @v12, @v13, @v14;
+
+SELECT DISTINCT @v13, @v14 INTO @v15, @v16 FROM t1 WHERE fruit_name = 'APPLE';
+SELECT @v15, @v16;
+
+SELECT DISTINCT 2 + 2, 'Bob' INTO @v17, @v18 FROM t1 WHERE fruit_name =
+'APPLE';
+SELECT @v17, @v18;
+
+--disable_warnings
+DROP TABLE IF EXISTS t2;
+--enable_warnings
+
+CREATE TABLE t2 (fruit_id INT NOT NULL, fruit_name varchar(20)
+default NULL);
+
+SELECT DISTINCT fruit_id, fruit_name INTO OUTFILE
+'../tmp/data1.tmp' FROM t1 WHERE fruit_name = 'APPLE';
+LOAD DATA INFILE '../tmp/data1.tmp' INTO TABLE t2;
+--error 0,1
+--remove_file $MYSQLTEST_VARDIR/tmp/data1.tmp
+
+SELECT DISTINCT @v19:= fruit_id, @v20:= fruit_name INTO OUTFILE
+'../tmp/data2.tmp' FROM t1 WHERE fruit_name = 'APPLE';
+LOAD DATA INFILE '../tmp/data2.tmp' INTO TABLE t2;
+--remove_file $MYSQLTEST_VARDIR/tmp/data2.tmp
+
+SELECT @v19, @v20;
+SELECT * FROM t2;
+
+DROP TABLE t1;
+DROP TABLE t2;
#
# Bug #15881: cast problems
=== modified file 'mysql-test/t/federated.test'
--- a/mysql-test/t/federated.test 2008-03-25 08:47:57 +0000
+++ b/mysql-test/t/federated.test 2008-09-16 17:05:30 +0000
@@ -1,6 +1,22 @@
-source include/federated.inc;
+# Note: This test is tricky. It reuses the prerequisites generated for
+# replication tests (master+slave server and connections) for its
+# own purposes. But the replication feature itself is stopped.
+#
+
+
+--source include/federated.inc
+
+connection default;
+
+# Disable concurrent inserts to avoid test failures when reading
+# data from concurrent connections (insert might return before
+# the data is actually in the table).
+SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT= 0;
connection slave;
+SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT= 0;
DROP TABLE IF EXISTS federated.t1;
CREATE TABLE federated.t1 (
`id` int(20) NOT NULL,
@@ -11,7 +27,7 @@ CREATE TABLE federated.t1 (
connection master;
DROP TABLE IF EXISTS federated.t1;
# test too many items (malformed) in the comment string url
---error 1432
+--error ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE
CREATE TABLE federated.t1 (
`id` int(20) NOT NULL,
`name` varchar(32) NOT NULL default ''
@@ -20,7 +36,7 @@ CREATE TABLE federated.t1 (
CONNECTION='mysql://root@stripped:@/too/many/items/federated/t1';
# test not enough items (malformed) in the comment string url
---error 1432
+--error ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE
CREATE TABLE federated.t1 (
`id` int(20) NOT NULL,
`name` varchar(32) NOT NULL default ''
@@ -36,7 +52,7 @@ eval CREATE TABLE federated.t1 (
)
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
CONNECTION='mysql://root@stripped:$SLAVE_MYPORT/federated/t3';
---error 1431
+--error ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST
SELECT * FROM federated.t1;
DROP TABLE federated.t1;
@@ -48,7 +64,7 @@ eval CREATE TABLE federated.t1 (
)
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
CONNECTION='mysql://user:pass@stripped:$SLAVE_MYPORT/federated/t1';
---error 1429
+--error ER_CONNECT_TO_FOREIGN_DATA_SOURCE
SELECT * FROM federated.t1;
DROP TABLE federated.t1;
@@ -64,6 +80,7 @@ eval CREATE TABLE federated.t1 (
INSERT INTO federated.t1 (id, name) VALUES (1, 'foo');
INSERT INTO federated.t1 (id, name) VALUES (2, 'fee');
+--sorted_result
SELECT * FROM federated.t1;
DELETE FROM federated.t1;
DROP TABLE federated.t1;
@@ -84,7 +101,7 @@ eval SHOW CREATE TABLE federated.t2;
INSERT INTO federated.t2 (id, name) VALUES (1, 'foo');
INSERT INTO federated.t2 (id, name) VALUES (2, 'fee');
-SELECT * FROM federated.t2;
+SELECT * FROM federated.t2 ORDER BY id, name;
DROP TABLE federated.t2;
connection slave;
@@ -111,7 +128,7 @@ eval CREATE TABLE federated.t1 (
INSERT INTO federated.t1 (id, name) VALUES (1, 'foo');
INSERT INTO federated.t1 (id, name) VALUES (2, 'fee');
-SELECT * FROM federated.t1;
+SELECT * FROM federated.t1 ORDER BY id,name;
DELETE FROM federated.t1;
DROP TABLE IF EXISTS federated.t1;
@@ -126,7 +143,7 @@ eval CREATE TABLE federated.`t1%` (
INSERT INTO federated.`t1%` (id, name) VALUES (1, 'foo');
INSERT INTO federated.`t1%` (id, name) VALUES (2, 'fee');
-SELECT * FROM federated.`t1%`;
+SELECT * FROM federated.`t1%` ORDER BY id, name;
DELETE FROM federated.`t1%`;
DROP TABLE IF EXISTS federated.`t1%`;
@@ -166,12 +183,14 @@ INSERT INTO federated.t1 (name, other) V
INSERT INTO federated.t1 (name, other) VALUES ('Tenth Name', 101010);
# basic select
+--sorted_result
SELECT * FROM federated.t1;
# with PRIMARY KEY index_read_idx
SELECT * FROM federated.t1 WHERE id = 5;
SELECT * FROM federated.t1 WHERE name = 'Sixth Name';
SELECT * FROM federated.t1 WHERE id = 6 and name = 'Sixth Name';
SELECT * FROM federated.t1 WHERE name = 'Sixth Name' AND other = 44444;
+--sorted_result
SELECT * FROM federated.t1 WHERE name like '%th%';
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
SELECT * FROM federated.t1 WHERE name = '3rd name';
@@ -243,6 +262,7 @@ INSERT INTO federated.t1 (name, other, c
VALUES ('Tenth Name', 101010, '2005-03-12 12:00:01');
# basic select
+--sorted_result
SELECT * FROM federated.t1;
# with PRIMARY KEY index_read_idx
SELECT * FROM federated.t1 WHERE id = 5;
@@ -251,6 +271,7 @@ SELECT * FROM federated.t1 WHERE id = 5;
SELECT * FROM federated.t1 WHERE id = 6 and name = 'Sixth Name';
# with regular key index_read -> index_read_idx
SELECT * FROM federated.t1 WHERE other = 44444;
+--sorted_result
SELECT * FROM federated.t1 WHERE name like '%th%';
# update - update_row, index_read_idx
UPDATE federated.t1 SET name = '3rd name' WHERE id = 3;
@@ -303,9 +324,12 @@ INSERT INTO federated.t1 (name, other) V
INSERT INTO federated.t1 (name, other) VALUES ('Ninth Name', 99999);
INSERT INTO federated.t1 (other) VALUES ('fee fie foe fum');
+--sorted_result
SELECT * FROM federated.t1 WHERE other IS NULL;
+--sorted_result
SELECT * FROM federated.t1 WHERE name IS NULL;
SELECT * FROM federated.t1 WHERE name IS NULL and other IS NULL;
+--sorted_result
SELECT * FROM federated.t1 WHERE name IS NULL or other IS NULL;
UPDATE federated.t1
@@ -316,6 +340,7 @@ UPDATE federated.t1 SET other = 'two two
UPDATE federated.t1 SET other = 'seven seven' WHERE name like 'Sev%';
UPDATE federated.t1 SET name = 'Tenth Name' WHERE other like 'fee fie%';
SELECT * FROM federated.t1 WHERE name IS NULL OR other IS NULL ;
+--sorted_result
SELECT * FROM federated.t1;
# test multi-keys
@@ -386,6 +411,7 @@ INSERT INTO federated.t1 (name, bincol,
VALUES ('second', 0x66, 22.22, 2222);
INSERT INTO federated.t1 (name, bincol, floatval, other)
VALUES ('third', 'g', 22.22, 2222);
+--sorted_result
SELECT * FROM federated.t1;
SELECT * FROM federated.t1 WHERE name = 'second';
SELECT * FROM federated.t1 WHERE bincol= 'f';
@@ -394,6 +420,7 @@ SELECT * FROM federated.t1 WHERE bincol=
SELECT * FROM federated.t1 WHERE bincol= 'g';
SELECT * FROM federated.t1 WHERE floatval=11.11;
SELECT * FROM federated.t1 WHERE name='third';
+--sorted_result
SELECT * FROM federated.t1 WHERE other=2222;
SELECT * FROM federated.t1 WHERE name='third' and other=2222;
@@ -467,32 +494,47 @@ SELECT * FROM federated.t1 WHERE id = 5
SELECT * FROM federated.t1 WHERE id = 5
AND col2 = 'five 5 five five 5' AND col3 = 5
AND col4 = 55555;
+--sorted_result
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'five 5 five five 5')
OR (col2 = 'three Three' AND col3 = 33);
SELECT * FROM federated.t1 WHERE (id = 5 AND col2 = 'Two two')
OR (col2 = 444 AND col3 = 4444444);
+--sorted_result
SELECT * FROM federated.t1 WHERE id = 1
OR col1 = 10
OR col2 = 'Two two'
OR col3 = 33
OR col4 = 4444444;
+--sorted_result
SELECT * FROM federated.t1 WHERE id > 5;
+--sorted_result
SELECT * FROM federated.t1 WHERE id >= 5;
+--sorted_result
SELECT * FROM federated.t1 WHERE id < 5;
+--sorted_result
SELECT * FROM federated.t1 WHERE id <= 5;
+--sorted_result
SELECT * FROM federated.t1 WHERE id != 5;
+--sorted_result
SELECT * FROM federated.t1 WHERE id > 3 AND id < 7;
+--sorted_result
SELECT * FROM federated.t1 WHERE id > 3 AND id <= 7;
+--sorted_result
SELECT * FROM federated.t1 WHERE id >= 3 AND id <= 7;
SELECT * FROM federated.t1 WHERE id < 3 AND id <= 7;
SELECT * FROM federated.t1 WHERE id < 3 AND id > 7;
+--sorted_result
SELECT * FROM federated.t1 WHERE id < 3 OR id > 7;
SELECT * FROM federated.t1 WHERE col2 = 'three Three';
+--sorted_result
SELECT * FROM federated.t1 WHERE col2 > 'one';
+--sorted_result
SELECT * FROM federated.t1 WHERE col2 LIKE 's%';
SELECT * FROM federated.t1 WHERE col2 LIKE 'si%';
SELECT * FROM federated.t1 WHERE col2 LIKE 'se%';
+--sorted_result
SELECT * FROM federated.t1 WHERE col2 NOT LIKE 'e%';
+--sorted_result
SELECT * FROM federated.t1 WHERE col2 <> 'one One';
# more multi-column indexes, in the primary key
@@ -546,13 +588,19 @@ SELECT * FROM federated.t1 WHERE col3 =
SELECT * FROM federated.t1 WHERE col1 = 'gggg' AND col2 = 'ggggggggggggggggggg';
SELECT * FROM federated.t1 WHERE col1 = 'gggg' AND col3 = 'gagagagaga';
SELECT * FROM federated.t1 WHERE col1 = 'ffff' AND col4 = 'fcfcfcfcfcfcfcfc';
+--sorted_result
SELECT * FROM federated.t1 WHERE col1 > 'bbbb';
+--sorted_result
SELECT * FROM federated.t1 WHERE col1 >= 'bbbb';
SELECT * FROM federated.t1 WHERE col1 < 'bbbb';
+--sorted_result
SELECT * FROM federated.t1 WHERE col1 <= 'bbbb';
+--sorted_result
SELECT * FROM federated.t1 WHERE col1 <> 'bbbb';
SELECT * FROM federated.t1 WHERE col1 LIKE 'b%';
+--sorted_result
SELECT * FROM federated.t1 WHERE col4 LIKE '%b%';
+--sorted_result
SELECT * FROM federated.t1 WHERE col1 NOT LIKE 'c%';
SELECT * FROM federated.t1 WHERE col4 NOT LIKE '%c%';
connection slave;
@@ -583,11 +631,13 @@ INSERT INTO federated.t1 VALUES ('ccd',
# let's see what the foreign database says
connection slave;
+--sorted_result
SELECT col3 FROM federated.t1 WHERE (
(col1 = 'aaa' AND col2 >= '111') OR col1 > 'aaa') AND
(col1 < 'ccc' OR ( col1 = 'ccc' AND col2 <= '111'));
connection master;
+--sorted_result
SELECT col3 FROM federated.t1 WHERE (
(col1 = 'aaa' AND col2 >= '111') OR col1 > 'aaa') AND
(col1 < 'ccc' OR ( col1 = 'ccc' AND col2 <= '111'));
@@ -622,6 +672,7 @@ INSERT INTO federated.t1 (name, floatval
VALUES ('foo', 33.33333332, NULL);
INSERT INTO federated.t1 (name, floatval, other)
VALUES (0, 00.3333, NULL);
+--sorted_result
SELECT * FROM federated.t1;
SELECT count(*) FROM federated.t1
WHERE id IS NULL
@@ -651,7 +702,8 @@ eval CREATE TABLE federated.t1 (
INSERT INTO federated.t1 VALUES (1, " MySQL supports a number of column types in several categories: numeric types, date and time types, and string (character) types. This chapter first gives an overview of these column types, and then provides a more detailed description of the properties of the types in each category, and a summary of the column type storage requirements. The overview is intentionally brief. The more detailed descriptions should be consulted for additional information about particular column types, such as the allowable formats in which you can specify values.");
INSERT INTO federated.t1 VALUES (2, "All arithmetic is done using signed BIGINT or DOUBLE values, so you should not use unsigned big integers larger than 9223372036854775807 (63 bits) except with bit functions! If you do that, some of the last digits in the result may be wrong because of rounding errors when converting a BIGINT value to a DOUBLE.");
INSERT INTO federated.t1 VALUES (3, " A floating-point number. p represents the precision. It can be from 0 to 24 for a single-precision floating-point number and from 25 to 53 for a double-precision floating-point number. These types are like the FLOAT and DOUBLE types described immediately following. FLOAT(p) has the same range as the corresponding FLOAT and DOUBLE types, but the display size and number of decimals are undefined. ");
-INSERT INTO federated.t1 VALUES(4, "Die �ersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest f�anden, der seine Zielsprache ernst nimmt:");
+INSERT INTO federated.t1 VALUES(4, "Die Übersetzung einer so umfangreichen technischen Dokumentation wie des MySQL-Referenzhandbuchs ist schon eine besondere Herausforderung. Zumindest für jemanden, der seine Zielsprache ernst nimmt:");
+--sorted_result
SELECT * FROM federated.t1;
connection slave;
@@ -1010,6 +1062,7 @@ eval CREATE TABLE federated.t1 (
INSERT INTO federated.t1 (code, fileguts, creation_date) VALUES ('ASDFWERQWETWETAWETA', '*()w*09*$()*#)(*09*^90*d)(*s()d8g)(s*ned)(*)(s*d)(*hn(d*)(*sbn)D((#$*(#*%%&#&^$#&#&#&#&^&#*&*#$*&^*(&#(&Q*&&(*!&!(*&*(#&*(%&#<S-F8>*<S-F8><S-F8><S-F8>#<S-F8>#<S-F8>#<S-F8>[[', '2003-03-03 03:03:03');
INSERT INTO federated.t1 (code, fileguts, creation_date) VALUES ('DEUEUEUEUEUEUEUEUEU', '*()w*09*$()*#)(*09*^90*d)(*s()d8g)(s*ned)(*)(s*d)(*hn(d*)(*sbn)D((#$*(#*%%&#&^$#&#&#&#&^&#*&*#$*&^*(&#(&Q*&&(*!&!(*&*(#&*(%&#<S-F8>*<S-F8><S-F8><S-F8>#<S-F8>#<S-F8>#<S-F8>[[', '2004-04-04 04:04:04');
INSERT INTO federated.t1 (code, fileguts, creation_date) VALUES ('DEUEUEUEUEUEUEUEUEU', 'jimbob', '2004-04-04 04:04:04');
+--sorted_result
SELECT * FROM federated.t1;
# test blob indexes
SELECT * FROM federated.t1 WHERE fileguts = 'jimbob';
@@ -1030,6 +1083,7 @@ CONNECTION='mysql://root@stripped:$SLAV
INSERT INTO federated.t1 VALUES (0x00);
INSERT INTO federated.t1 VALUES (0x0001);
INSERT INTO federated.t1 VALUES (0x0100);
+--sorted_result
SELECT HEX(a) FROM federated.t1;
# # simple tests for cyrillic, given to me by
@@ -1044,20 +1098,20 @@ SELECT HEX(a) FROM federated.t1;
# CREATE TABLE federated.t1 (a char(20)) charset=cp1251;
# #
# connection master;
-# INSERT INTO federated.t1 values (_cp1251'��1251;
-# INSERT INTO federated.t1 values ('���3');
-# INSERT INTO federated.t1 values ('�Ũ�4');
+# INSERT INTO federated.t1 values ('Â-ÃÄÅ-3');
+# INSERT INTO federated.t1 values ('Ã-ŨÆ-4');
# SELECT * FROM federated.t1;
# SELECT hex(a) from federated.t1;
# SELECT hex(a) from federated.t1 ORDER BY a desc;
-# UPDATE federated.t1 SET a='���1��HERE a='���1';
+# UPDATE federated.t1 SET a='À-ÁÂÃ-1íîâûé' WHERE a='À-ÁÂÃ-1';
# SELECT * FROM federated.t1;
-# DELETE FROM federated.t1 WHERE a='�Ũ�4';
+# DELETE FROM federated.t1 WHERE a='Ã-ŨÆ-4';
# SELECT * FROM federated.t1;
-# DELETE FROM federated.t1 WHERE a>'�';
+# DELETE FROM federated.t1 WHERE a>'Â-';
# SELECT * FROM federated.t1;
# SET names default;
# DROP TABLE IF EXISTS federated.t1;
@@ -1108,6 +1162,7 @@ INSERT INTO federated.t1 (name, country_
INSERT INTO federated.t1 (name, country_id, other) VALUES ('Sanja', 5, 33333);
#inner join
+--sorted_result
SELECT federated.t1.name AS name, federated.t1.country_id AS country_id,
federated.t1.other AS other, federated.countries.country AS country
FROM federated.t1, federated.countries WHERE
@@ -1181,7 +1236,7 @@ INSERT INTO federated.alter_me (id, name
SELECT * FROM federated.alter_me;
---error 1031
+--error ER_ILLEGAL_HA
ALTER TABLE federated.alter_me MODIFY COLUMN id int(16) NOT NULL;
SELECT * FROM federated.alter_me;
@@ -1452,15 +1507,15 @@ insert into federated.t2 values (13, 17)
# Each of three statements should correctly set values for all three fields
# insert
insert into federated.t1 (a, b) values (1, 2), (3, 5), (7, 11);
-select * from federated.t1;
+select * from federated.t1 order by a;
delete from federated.t1;
# insert ... select
insert into federated.t1 (a, b) select * from federated.t2;
-select * from federated.t1;
+select * from federated.t1 order by a;
delete from federated.t1;
# load
load data infile '../std_data_ln/loaddata5.dat' into table federated.t1 fields terminated by '' enclosed by '' ignore 1 lines (a, b);
-select * from federated.t1;
+select * from federated.t1 order by a;
drop tables federated.t1, federated.t2;
connection slave;
@@ -1750,4 +1805,32 @@ DROP TABLE t1;
CREATE TABLE t1 (a INT) ENGINE=federated CONNECTION='mysql://@:://';
DROP TABLE t1;
+
+#
+# Bug #34779: crash in checksum table on federated tables with blobs
+# containing nulls
+#
+connection slave;
+CREATE TABLE t1 (a LONGBLOB, b LONGBLOB);
+INSERT INTO t1 VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaa', NULL);
+connection master;
+--replace_result $SLAVE_MYPORT SLAVE_PORT
+eval CREATE TABLE t1
+ (a LONGBLOB, b LONGBLOB) ENGINE=FEDERATED
+ CONNECTION='mysql://root@stripped:$SLAVE_MYPORT/test/t1';
+CHECKSUM TABLE t1;
+connection slave;
+DROP TABLE t1;
+connection master;
+DROP TABLE t1;
+
+connection default;
+
+--echo End of 5.0 tests
+
+SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
+connection slave;
+SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
+
+connection default;
source include/federated_cleanup.inc;
=== modified file 'mysql-test/t/federated_bug_25714.test'
--- a/mysql-test/t/federated_bug_25714.test 2007-07-24 06:35:43 +0000
+++ b/mysql-test/t/federated_bug_25714.test 2008-10-02 11:04:29 +0000
@@ -1,8 +1,16 @@
--source include/have_bug25714.inc
source include/federated.inc;
+connection master;
+# Disable concurrent inserts to avoid test failures when reading
+# data from concurrent connections (insert might return before
+# the data is actually in the table).
+SET @OLD_MASTER_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT= 0;
connection slave;
+SET @OLD_SLAVE_CONCURRENT_INSERT= @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT= 0;
--disable_warnings
DROP TABLE IF EXISTS federated.bug_13118_table;
--enable_warnings
@@ -39,9 +47,12 @@ SELECT LAST_INSERT_ID();
SELECT * from federated.t1;
DROP TABLE federated.t1;
+SET @@GLOBAL.CONCURRENT_INSERT= @OLD_MASTER_CONCURRENT_INSERT;
connection slave;
DROP TABLE federated.t1;
+SET @@GLOBAL.CONCURRENT_INSERT= @OLD_SLAVE_CONCURRENT_INSERT;
source include/federated_cleanup.inc;
+
=== modified file 'mysql-test/t/func_if.test'
--- a/mysql-test/t/func_if.test 2007-02-12 20:59:29 +0000
+++ b/mysql-test/t/func_if.test 2008-07-30 11:07:37 +0000
@@ -108,3 +108,46 @@ drop table t1;
select if(0, 18446744073709551610, 18446744073709551610);
+#
+# Bug #37662: nested if() inside sum() is parsed in exponential time
+#
+
+CREATE TABLE t1(a DECIMAL(10,3));
+
+# check : should be fast. more than few secs means failure.
+SELECT t1.a,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,
+ IF((ROUND(t1.a,2)=1), 2,0)))))))))))))))))))))))))))))) + 1
+FROM t1;
+
+DROP TABLE t1;
+
+--echo End of 5.0 tests
=== modified file 'mysql-test/t/func_misc.test'
--- a/mysql-test/t/func_misc.test 2008-06-02 19:57:11 +0000
+++ b/mysql-test/t/func_misc.test 2008-07-10 01:58:30 +0000
@@ -417,5 +417,24 @@ drop table t1;
#
SELECT NAME_CONST('var', 'value') COLLATE latin1_general_cs;
+#
+# Bug #35848: UUID() returns UUIDs with the wrong time
+#
+select @@session.time_zone into @save_tz;
+
+# make sure all times are UTC so the DayNr won't differ
+set @@session.time_zone='UTC';
+select uuid() into @my_uuid;
+# if version nibble isn't 1, the following calculations will be rubbish
+select mid(@my_uuid,15,1);
+select 24 * 60 * 60 * 1000 * 1000 * 10 into @my_uuid_one_day;
+select concat('0',mid(@my_uuid,16,3),mid(@my_uuid,10,4),left(@my_uuid,8)) into @my_uuidate;
+select floor(conv(@my_uuidate,16,10)/@my_uuid_one_day) into @my_uuid_date;
+select 141427 + datediff(curdate(),'1970-01-01') into @my_uuid_synthetic;
+# these should be identical; date part of UUID should be current date
+select @my_uuid_date - @my_uuid_synthetic;
+
+set @@session.time_zone=@save_tz;
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/func_regexp.test'
--- a/mysql-test/t/func_regexp.test 2007-10-30 08:21:44 +0000
+++ b/mysql-test/t/func_regexp.test 2008-09-05 08:30:01 +0000
@@ -64,4 +64,14 @@ drop table t1;
SELECT 1 REGEXP NULL;
+
+#
+# Bug #39021: SELECT REGEXP BINARY NULL never returns
+#
+
+SELECT '' REGEXP BINARY NULL;
+SELECT NULL REGEXP BINARY NULL;
+SELECT 'A' REGEXP BINARY NULL;
+SELECT "ABC" REGEXP BINARY NULL;
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/group_min_max.test'
--- a/mysql-test/t/group_min_max.test 2007-11-20 14:07:24 +0000
+++ b/mysql-test/t/group_min_max.test 2008-08-27 13:03:17 +0000
@@ -916,3 +916,22 @@ SELECT a, MIN(b), MAX(b), AVG(b) FROM t1
SELECT a, MIN(b), MAX(b), AVG(b) FROM t1 GROUP BY a ORDER BY a DESC;
DROP TABLE t1;
+
+#
+# Bug#38195: Incorrect handling of aggregate functions when loose index scan is
+# used causes server crash.
+#
+create table t1 (a int, b int, primary key (a,b), key `index` (a,b)) engine=MyISAM;
+insert into t1 (a,b) values
+(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),
+ (0,7),(0,8),(0,9),(0,10),(0,11),(0,12),(0,13),
+(1,0),(1,1),(1,2),(1,3),(1,4),(1,5),(1,6),
+ (1,7),(1,8),(1,9),(1,10),(1,11),(1,12),(1,13),
+(2,0),(2,1),(2,2),(2,3),(2,4),(2,5),(2,6),
+ (2,7),(2,8),(2,9),(2,10),(2,11),(2,12),(2,13),
+(3,0),(3,1),(3,2),(3,3),(3,4),(3,5),(3,6),
+ (3,7),(3,8),(3,9),(3,10),(3,11),(3,12),(3,13);
+insert into t1 (a,b) select a, max(b)+1 from t1 where a = 0 group by a;
+select * from t1;
+explain extended select sql_buffer_result a, max(b)+1 from t1 where a = 0 group by a;
+drop table t1;
=== modified file 'mysql-test/t/index_merge.test'
--- a/mysql-test/t/index_merge.test 2007-07-14 18:02:10 +0000
+++ b/mysql-test/t/index_merge.test 2008-10-01 15:50:55 +0000
@@ -463,3 +463,18 @@ select * from t2 where a=4 or b=4;
drop table t1, t2;
+#
+# Bug #37943: Reproducible mysqld crash/sigsegv in sel_trees_can_be_ored
+#
+
+CREATE TABLE t1 (a varchar(8), b set('a','b','c','d','e','f','g','h'),
+ KEY b(b), KEY a(a));
+INSERT INTO t1 VALUES ('y',''), ('z','');
+
+#should not crash
+SELECT b,a from t1 WHERE (b!='c' AND b!='f' && b!='h') OR
+ (a='pure-S') OR (a='DE80337a') OR (a='DE80799');
+
+DROP TABLE t1;
+
+--echo End of 5.0 tests
=== modified file 'mysql-test/t/information_schema_db.test'
--- a/mysql-test/t/information_schema_db.test 2007-03-23 18:24:03 +0000
+++ b/mysql-test/t/information_schema_db.test 2008-10-02 09:37:07 +0000
@@ -82,6 +82,7 @@ drop function func2;
drop database `inf%`;
drop procedure mbase.p1;
drop database mbase;
+disconnect user1;
#
# Bug#18282 INFORMATION_SCHEMA.TABLES provides inconsistent info about invalid views
@@ -210,3 +211,32 @@ drop view testdb_1.v1, v2, testdb_1.v3,
drop database testdb_1;
drop user testdb_1@localhost;
drop user testdb_2@localhost;
+
+#
+# Bug#22763 Disrepancy between SHOW CREATE VIEW and I_S.VIEWS
+#
+create database testdb_1;
+create table testdb_1.t1 (a int);
+create view testdb_1.v1 as select * from testdb_1.t1;
+
+grant show view on testdb_1.* to mysqltest_1@localhost;
+grant select on testdb_1.v1 to mysqltest_1@localhost;
+
+connect (user1,localhost,mysqltest_1,,test);
+connection user1;
+select table_schema, table_name, view_definition from information_schema.views
+where table_name='v1';
+show create view testdb_1.v1;
+
+connection default;
+revoke select on testdb_1.v1 from mysqltest_1@localhost;
+connection user1;
+select table_schema, table_name, view_definition from information_schema.views
+where table_name='v1';
+--error ER_TABLEACCESS_DENIED_ERROR
+show create view testdb_1.v1;
+
+connection default;
+drop user mysqltest_1@localhost;
+drop database testdb_1;
+disconnect user1;
=== added file 'mysql-test/t/innodb-autoinc-optimize.test'
--- a/mysql-test/t/innodb-autoinc-optimize.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/innodb-autoinc-optimize.test 2008-07-31 21:47:57 +0000
@@ -0,0 +1,16 @@
+-- source include/have_innodb.inc
+# embedded server ignores 'delayed', so skip this
+-- source include/not_embedded.inc
+
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+#
+# Bug 34286
+#
+create table t1(a int not null auto_increment primary key) engine=innodb;
+insert into t1 set a = -1;
+# NOTE: The database needs to be shutdown and restarted (here) for
+# the test to work. It's included for reference only.
+optimize table t1;
=== added file 'mysql-test/t/innodb_bug35220.test'
--- a/mysql-test/t/innodb_bug35220.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/innodb_bug35220.test 2008-08-08 00:25:24 +0000
@@ -0,0 +1,16 @@
+#
+# Bug#35220 ALTER TABLE too picky on reserved word "foreign"
+# http://bugs.mysql.com/35220
+#
+
+-- source include/have_innodb.inc
+
+SET storage_engine=InnoDB;
+
+# we care only that the following SQL commands do not produce errors
+-- disable_query_log
+-- disable_result_log
+
+CREATE TABLE bug35220 (foreign_col INT, dummy_cant_delete_all_columns INT);
+ALTER TABLE bug35220 DROP foreign_col;
+DROP TABLE bug35220;
=== modified file 'mysql-test/t/innodb_mysql.test'
--- a/mysql-test/t/innodb_mysql.test 2008-02-07 07:12:49 +0000
+++ b/mysql-test/t/innodb_mysql.test 2008-07-23 11:25:00 +0000
@@ -996,4 +996,22 @@ set @my_innodb_commit_concurrency=@@glob
set global innodb_commit_concurrency=0;
set global innodb_commit_concurrency=@my_innodb_commit_concurrency;
+#
+# Bug #37830: ORDER BY ASC/DESC - no difference
+#
+
+CREATE TABLE t1 (a int, b int, c int, PRIMARY KEY (a), KEY t1_b (b))
+ ENGINE=InnoDB;
+
+INSERT INTO t1 (a,b,c) VALUES (1,1,1), (2,1,1), (3,1,1), (4,1,1);
+INSERT INTO t1 (a,b,c) SELECT a+4,b,c FROM t1;
+
+# should be range access
+EXPLAIN SELECT a, b, c FROM t1 WHERE b = 1 ORDER BY a DESC LIMIT 5;
+
+# should produce '8 7 6 5 4' for a
+SELECT a, b, c FROM t1 WHERE b = 1 ORDER BY a DESC LIMIT 5;
+
+DROP TABLE t1;
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/join.test'
--- a/mysql-test/t/join.test 2007-06-15 17:15:22 +0000
+++ b/mysql-test/t/join.test 2008-10-06 12:18:13 +0000
@@ -546,10 +546,12 @@ select * from v1a join v1b on t1.b = t2.
#
# Bug #17523 natural join and information_schema
#
-# We mask out the Privileges column because it differs with embedded server
---replace_column 31 #
-select * from information_schema.statistics join information_schema.columns
- using(table_name,column_name) where table_name='user';
+# Omit columns.PRIVILIGES as it may vary with embedded server.
+# Omit columns.ORDINAL_POSITION and statistics.CARDINALITY as it may vary with hostname='localhost'.
+select
+ statistics.TABLE_NAME, statistics.COLUMN_NAME, statistics.TABLE_CATALOG, statistics.TABLE_SCHEMA, statistics.NON_UNIQUE, statistics.INDEX_SCHEMA, statistics.INDEX_NAME, statistics.SEQ_IN_INDEX, statistics.COLLATION, statistics.SUB_PART, statistics.PACKED, statistics.NULLABLE, statistics.INDEX_TYPE, statistics.COMMENT,
+ columns.TABLE_CATALOG, columns.TABLE_SCHEMA, columns.COLUMN_DEFAULT, columns.IS_NULLABLE, columns.DATA_TYPE, columns.CHARACTER_MAXIMUM_LENGTH, columns.CHARACTER_OCTET_LENGTH, columns.NUMERIC_PRECISION, columns.NUMERIC_SCALE, columns.CHARACTER_SET_NAME, columns.COLLATION_NAME, columns.COLUMN_TYPE, columns.COLUMN_KEY, columns.EXTRA, columns.COLUMN_COMMENT
+ from information_schema.statistics join information_schema.columns using(table_name,column_name) where table_name='user';
drop table t1;
drop table t2;
=== modified file 'mysql-test/t/loaddata.test'
--- a/mysql-test/t/loaddata.test 2008-03-28 20:39:47 +0000
+++ b/mysql-test/t/loaddata.test 2008-09-18 09:24:50 +0000
@@ -318,4 +318,184 @@ DROP VIEW v3;
###########################################################################
-# End of 5.0 tests
+
+#
+# Bug#37114: sql_mode NO_BACKSLASH_ESCAPES does not work properly with
+# LOAD DATA INFILE
+#
+
+# - For each plain "SELECT id,...", the 1st pair ("before" SELECT...OUTFILE,
+# LOAD...INFILE) and the 2nd pair of lines ("after") in the result should
+# look the same, otherwise we broke the dumpe/restore cycle!
+#
+# - the \r is always { '\\', 'r' } in memory, but on-disk format changes
+#
+# - the \t is { '\t' } or { '\\', 't' } in memory depending on whether \
+# is magic (that is, NO_BACKSLASH_ESCAPES is not set) at INSERT-time.
+# on-disk format varies.
+#
+# - while INFILE/OUTFILE behaviour changes according to NO_BACKSLASH_ESCAPES,
+# we can override these defaults using ESCAPED BY '...'
+# 1: NO_BACKSLASH_ESCAPES default, \ on-disk: \,t,x,\r
+# 2: NO_BACKSLASH_ESCAPES override, \\ on-disk: \,\,t,x,\,\,r
+# 3: !NO_BACKSLASH_ESCAPES default, \\ on-disk: tab,\,\,r
+# 3: !NO_BACKSLASH_ESCAPES override, \ on-disk: tab,\,r
+
+--echo Bug#37114
+
+SET SESSION character_set_client=latin1;
+SET SESSION character_set_server=latin1;
+SET SESSION character_set_connection=latin1;
+SET @OLD_SQL_MODE=@@SESSION.SQL_MODE;
+
+# 0. test LOAD DATA INFILE first; if that works, all issues in
+# SELECT INTO OUTFILE / LOAD DATA INFILE cycles below are
+# arguably in the saving.
+
+--echo test LOAD DATA INFILE
+
+--let $file=$MYSQLTEST_VARDIR/tmp/bug37114.txt
+--let $file2=$MYSQLTEST_VARDIR/tmp/bug37114_out.txt
+
+SET sql_mode = '';
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT '1 \\\\aa\n' INTO DUMPFILE '$file'
+
+CREATE TABLE t1 (id INT, val1 CHAR(3)) ENGINE=MyISAM;
+
+SET sql_mode = 'NO_BACKSLASH_ESCAPES';
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$file' REPLACE INTO TABLE t1 FIELDS TERMINATED BY ' '
+SELECT * FROM t1;
+
+# show we can write this with OUTFILE, forcing the parameters for now
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT * INTO OUTFILE '$file2' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1
+--diff_files $file $file2
+--remove_file $file2
+
+# now show the OUTFILE defaults are correct with NO_BACKSLASH_ESCAPES
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT * INTO OUTFILE '$file2' FIELDS TERMINATED BY ' ' FROM t1
+--diff_files $file $file2
+--remove_file $file2
+
+INSERT INTO t1 (id, val1) VALUES (1, '\aa');
+SELECT * FROM t1;
+
+SET sql_mode='';
+INSERT INTO t1 (id, val1) VALUES (1, '\aa');
+SELECT * FROM t1;
+
+DROP TABLE t1;
+
+--remove_file $file
+
+
+
+--echo test SELECT INTO OUTFILE
+
+CREATE TABLE t1 (id INT PRIMARY KEY, val1 CHAR(4));
+CREATE TABLE t2 LIKE t1;
+
+# 1. with NO_BACKSLASH_ESCAPES on
+
+SET sql_mode = '';
+INSERT INTO t1 (id, val1) VALUES (5, '\ttab');
+INSERT INTO t1 (id, val1) VALUES (4, '\\r');
+SET sql_mode = 'NO_BACKSLASH_ESCAPES';
+INSERT INTO t1 (id, val1) VALUES (3, '\tx');
+
+--echo 1.1 NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT * INTO OUTFILE '$file' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS TERMINATED BY ' '
+
+SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
+ SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
+
+TRUNCATE t2;
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval SELECT LOAD_FILE("$file");
+--remove_file $file
+
+
+
+--echo 1.2 NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT * INTO OUTFILE '$file' FIELDS ESCAPED BY '\' TERMINATED BY ' ' FROM t1 ORDER BY id
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS ESCAPED BY '\' TERMINATED BY ' '
+
+SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
+ SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
+
+TRUNCATE t2;
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval SELECT LOAD_FILE("$file");
+--remove_file $file
+
+
+
+# 2. with NO_BACKSLASH_ESCAPES off
+
+SET sql_mode = '';
+
+--echo 2.1 !NO_BACKSLASH_ESCAPES, use defaults for ESCAPED BY
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT * INTO OUTFILE '$file' FIELDS TERMINATED BY ' ' FROM t1 ORDER BY id
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS TERMINATED BY ' '
+
+SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
+ SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
+
+TRUNCATE t2;
+
+SET sql_mode = 'NO_BACKSLASH_ESCAPES';
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval SELECT LOAD_FILE("$file");
+--remove_file $file
+
+SET sql_mode = '';
+
+
+
+--echo 2.2 !NO_BACKSLASH_ESCAPES, override defaults for ESCAPED BY
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval SELECT * INTO OUTFILE '$file' FIELDS ESCAPED BY '' TERMINATED BY ' ' FROM t1 ORDER BY id
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+--eval LOAD DATA INFILE '$file' INTO TABLE t2 FIELDS ESCAPED BY '' TERMINATED BY ' '
+
+SELECT 'before' AS t, id, val1, hex(val1) FROM t1 UNION
+ SELECT 'after' AS t, id, val1, hex(val1) FROM t2 ORDER BY id,t DESC;
+
+TRUNCATE t2;
+
+SET sql_mode = 'NO_BACKSLASH_ESCAPES';
+
+--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
+eval SELECT LOAD_FILE("$file");
+--remove_file $file
+
+# clean up
+set session sql_mode=@OLD_SQL_MODE;
+DROP TABLE t1,t2;
+
+
+
+--echo End of 5.0 tests
=== modified file 'mysql-test/t/lock_multi.test'
--- a/mysql-test/t/lock_multi.test 2007-11-28 12:18:01 +0000
+++ b/mysql-test/t/lock_multi.test 2008-10-09 15:24:31 +0000
@@ -281,4 +281,325 @@ unlock tables;
connection default;
drop table t1;
+#
+# Bug #38691: segfault/abort in ``UPDATE ...JOIN'' while
+# ``FLUSH TABLES WITH READ LOCK''
+#
+
+--connection default
+CREATE TABLE t1 (
+ a int(11) unsigned default NULL,
+ b varchar(255) default NULL,
+ UNIQUE KEY a (a),
+ KEY b (b)
+);
+
+INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3);
+CREATE TABLE t2 SELECT * FROM t1;
+CREATE TABLE t3 SELECT * FROM t1;
+
+--echo # test altering of columns that multiupdate doesn't use
+
+--echo # normal mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+ send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a)
+ SET a = NULL WHERE t1.b <> t2.b;
+
+--connection locker
+ ALTER TABLE t2 ADD COLUMN (c INT);
+ ALTER TABLE t2 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+
+--echo # PS mode
+
+--connection writer
+PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a)
+ SET a = NULL WHERE t1.b <> t2.b';
+
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+--send EXECUTE stmt
+
+--connection locker
+ ALTER TABLE t2 ADD COLUMN (c INT);
+ ALTER TABLE t2 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+--enable_query_log
+
+
+--echo # test altering of columns that multiupdate uses
+
+--echo # normal mode
+
+--connection default
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,1060
+ ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
+ UPDATE t2 SET a=b;
+
+--connection writer
+--send UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b
+
+--connection locker
+--error 0,1091
+ ALTER TABLE t2 DROP COLUMN a;
+
+--connection writer
+--error 0,1054
+--reap
+}
+--enable_query_log
+
+--echo # PS mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,1060
+ ALTER TABLE t2 ADD COLUMN a int(11) unsigned default NULL;
+ UPDATE t2 SET a=b;
+
+--connection writer
+ PREPARE stmt FROM 'UPDATE t2 INNER JOIN (t1 JOIN t3 USING(a)) USING(a) SET a = NULL WHERE t1.b <> t2.b';
+--send EXECUTE stmt
+
+--connection locker
+--error 0,1091
+ ALTER TABLE t2 DROP COLUMN a;
+
+--connection writer
+--error 0,1054
+--reap
+
+}
+--enable_query_log
+--connection default
+DROP TABLE t1, t2, t3;
+
+#
+# Bug#38499: flush tables and multitable table update with derived table cause
+# crash
+#
+
+CREATE TABLE t1( a INT, b INT );
+INSERT INTO t1 VALUES (1, 1), (2, 2), (3, 3), (4, 4);
+
+--echo # 1. test regular tables
+--echo # 1.1. test altering of columns that multiupdate doesn't use
+--echo # 1.1.1. normal mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+ send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
+
+--connection locker
+ ALTER TABLE t1 ADD COLUMN (c INT);
+ ALTER TABLE t1 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+
+--echo # 1.1.2. PS mode
+
+--connection writer
+PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0';
+
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+--send EXECUTE stmt
+
+--connection locker
+ ALTER TABLE t1 ADD COLUMN (c INT);
+ ALTER TABLE t1 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+--enable_query_log
+
+--echo # 1.2. test altering of columns that multiupdate uses
+--echo # 1.2.1. normal mode
+
+--connection default
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,1060
+ ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
+ UPDATE t1 SET a=b;
+
+--connection writer
+--send UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0;
+
+--connection locker
+--error 0,1091
+ ALTER TABLE t1 DROP COLUMN a;
+
+--connection writer
+--error 0,1054 # unknown column error
+--reap
+}
+--enable_query_log
+
+--echo # 1.2.2. PS mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,1060
+ ALTER TABLE t1 ADD COLUMN a INT;
+ UPDATE t1 SET a=b;
+
+--connection writer
+ PREPARE stmt FROM 'UPDATE t1, (SELECT 1 FROM t1 t1i) d SET a = 0 WHERE 1=0';
+--send EXECUTE stmt
+
+--connection locker
+--error 0,1091
+ ALTER TABLE t1 DROP COLUMN a;
+
+--connection writer
+--error 0,1054 # Unknown column 'a' in 'field list'
+--reap
+}
+--enable_query_log
+--connection default
+ALTER TABLE t1 ADD COLUMN a INT;
+
+--echo # 2. test UNIONs
+--echo # 2.1. test altering of columns that multiupdate doesn't use
+--echo # 2.1.1. normal mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+ send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
+
+--connection locker
+ ALTER TABLE t1 ADD COLUMN (c INT);
+ ALTER TABLE t1 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+
+--echo # 2.1.2. PS mode
+
+--connection writer
+PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0';
+
+let $i = 100;
+while ($i) {
+--dec $i
+
+--connection writer
+--send EXECUTE stmt
+
+--connection locker
+ ALTER TABLE t1 ADD COLUMN (c INT);
+ ALTER TABLE t1 DROP COLUMN c;
+
+--connection writer
+--reap
+}
+--enable_query_log
+
+--echo # 2.2. test altering of columns that multiupdate uses
+--echo # 2.2.1. normal mode
+
+--connection default
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,1060
+ ALTER TABLE t1 ADD COLUMN a int(11) unsigned default NULL;
+ UPDATE t1 SET a=b;
+
+--connection writer
+--send UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0;
+
+--connection locker
+--error 0,1091
+ ALTER TABLE t1 DROP COLUMN a;
+
+--connection writer
+--error 0,1054 # Unknown column 'a' in 'field list'
+--reap
+}
+--enable_query_log
+
+--echo # 2.2.2. PS mode
+
+--disable_query_log
+let $i = 100;
+while ($i) {
+ dec $i;
+
+--connection locker
+--error 0,1060
+ ALTER TABLE t1 ADD COLUMN a INT;
+ UPDATE t1 SET a=b;
+
+--connection writer
+ PREPARE stmt FROM 'UPDATE t1, ((SELECT 1 FROM t1 t1i) UNION (SELECT 2 FROM t1 t1ii)) e SET a = 0 WHERE 1=0';
+--send EXECUTE stmt
+
+--connection locker
+--error 0,1091
+ ALTER TABLE t1 DROP COLUMN a;
+
+--connection writer
+--error 0,1054 # Unknown column 'a' in 'field list'
+--reap
+}
+--enable_query_log
+--connection default
+DROP TABLE t1;
+
# End of 5.0 tests
=== modified file 'mysql-test/t/myisam.test'
--- a/mysql-test/t/myisam.test 2008-01-16 11:15:57 +0000
+++ b/mysql-test/t/myisam.test 2008-08-26 13:48:50 +0000
@@ -1210,4 +1210,19 @@ SELECT * FROM t1;
DROP TABLE t1, t2;
+
+#
+# Bug#37310: 'on update CURRENT_TIMESTAMP' option crashes the table
+#
+CREATE TABLE t1 (a INT) ENGINE=MyISAM CHECKSUM=1 ROW_FORMAT=DYNAMIC;
+INSERT INTO t1 VALUES (0);
+UPDATE t1 SET a=1;
+SELECT a FROM t1;
+CHECK TABLE t1;
+INSERT INTO t1 VALUES (0), (5), (4), (2);
+UPDATE t1 SET a=2;
+SELECT a FROM t1;
+CHECK TABLE t1;
+DROP TABLE t1;
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/mysqldump.test'
--- a/mysql-test/t/mysqldump.test 2008-03-02 18:20:36 +0000
+++ b/mysql-test/t/mysqldump.test 2008-09-15 19:34:39 +0000
@@ -5,6 +5,14 @@
# Binlog is required
--source include/have_log_bin.inc
+
+--echo Bug#37938 - Test "mysqldump" lacks various insert statements
+--echo Turn off concurrent inserts to avoid random errors
+--echo NOTE: We reset the variable back to saved value at the end of test
+SET @OLD_CONCURRENT_INSERT = @@GLOBAL.CONCURRENT_INSERT;
+SET @@GLOBAL.CONCURRENT_INSERT = 0;
+
+
--disable_warnings
DROP TABLE IF EXISTS t1, `"t"1`, t1aa, t2, t2aa, t3;
drop database if exists mysqldump_test_db;
@@ -1594,6 +1602,10 @@ DROP TABLE t1,t2;
--replace_regex /-- [^D][^u][^m][^p].*// /\/\*!.*// / on [0-9 :-]+/ on DATE/
--exec $MYSQL_DUMP test
+# We reset concurrent_inserts value to whatever it was at the start of the test
+SET @@GLOBAL.CONCURRENT_INSERT = @OLD_CONCURRENT_INSERT;
+
+
--echo #
--echo # End of 5.0 tests
--echo #
=== modified file 'mysql-test/t/ndb_autodiscover.test'
--- a/mysql-test/t/ndb_autodiscover.test 2008-02-21 12:23:58 +0000
+++ b/mysql-test/t/ndb_autodiscover.test 2008-09-23 09:24:32 +0000
@@ -24,7 +24,7 @@ create table t1(
insert into t1 values(1, "Autodiscover");
flush tables;
-system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
select * from t1;
show status like 'handler_discover%';
@@ -33,13 +33,13 @@ show status like 'handler_discover%';
#
flush tables;
-system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
insert into t1 values (2, "Auto 2");
show status like 'handler_discover%';
insert into t1 values (3, "Discover 3");
show status like 'handler_discover%';
flush tables;
-system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
select * from t1 order by id;
show status like 'handler_discover%';
@@ -48,7 +48,7 @@ show status like 'handler_discover%';
#
flush tables;
-system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
update t1 set name="Autodiscover" where id = 2;
show status like 'handler_discover%';
select * from t1 order by id;
@@ -59,7 +59,7 @@ show status like 'handler_discover%';
#
flush tables;
-system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm ;
delete from t1 where id = 3;
select * from t1 order by id;
show status like 'handler_discover%';
@@ -111,9 +111,9 @@ show status like 'handler_discover%';
flush tables;
# Remove the frm file from disk
-system rm $MYSQLTEST_VARDIR/master-data/test/t3.frm ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t3.frm ;
---error 1050
+--error ER_TABLE_EXISTS_ERROR
create table t3(
id int not null primary key,
name char(20), a int, b float, c char(24)
@@ -168,14 +168,14 @@ show status like 'handler_discover%';
# Remove the frm file from disk
flush tables;
-system rm $MYSQLTEST_VARDIR/master-data/test/t7.frm ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t7.frm ;
show tables from test;
show status like 'handler_discover%';
# Remove the frm file from disk again
flush tables;
-system rm $MYSQLTEST_VARDIR/master-data/test/t7.frm ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t7.frm ;
--replace_column 7 # 8 # 9 # 12 # 13 # 15 # 18 #
show table status;
@@ -204,13 +204,13 @@ system exec $NDB_TOOLS_DIR/ndb_drop_tabl
#
# Test that correct error is returned
---error 1146
+--error ER_NO_SUCH_TABLE
select * from t4;
---error 1146
+--error ER_NO_SUCH_TABLE
select * from t4;
show status like 'handler_discover%';
---error 1051
+--error ER_BAD_TABLE_ERROR
drop table t4;
create table t4(
@@ -223,14 +223,14 @@ select * from t4;
# Remove the table from NDB
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t4 >> $NDB_TOOLS_OUTPUT ;
---error 1146
+--error ER_NO_SUCH_TABLE
select * from t4;
drop table if exists t4;
# Test that dropping a table that does not exists
# on disk or in NDB gives same result as above
---error 1051
+--error ER_BAD_TABLE_ERROR
drop table t5;
drop table if exists t5;
@@ -257,7 +257,7 @@ system exec $NDB_TOOLS_DIR/ndb_drop_tabl
SHOW TABLES;
---error 1146
+--error ER_NO_SUCH_TABLE
select * from t4;
#######################################################
@@ -290,8 +290,8 @@ insert into t9 values (9);
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t3 >> $NDB_TOOLS_OUTPUT ;
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t5 >> $NDB_TOOLS_OUTPUT ;
# Remove t6, t7 from disk
-system rm $MYSQLTEST_VARDIR/master-data/test/t6.frm > /dev/null ;
-system rm $MYSQLTEST_VARDIR/master-data/test/t7.frm > /dev/null ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t6.frm;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t7.frm;
SHOW TABLES;
@@ -332,8 +332,8 @@ insert into t9 values (9);
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t3 > /dev/null ;
system exec $NDB_TOOLS_DIR/ndb_drop_table --no-defaults -d test t5 > /dev/null ;
# Remove t6, t7 from disk
-system rm $MYSQLTEST_VARDIR/master-data/test/t6.frm > /dev/null ;
-system rm $MYSQLTEST_VARDIR/master-data/test/t7.frm > /dev/null ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t6.frm;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t7.frm;
SHOW TABLES LIKE 't6';
@@ -342,9 +342,9 @@ show status like 'handler_discover%';
# Check that t3 or t5 can't be created
# frm files for these tables is stilll on disk
---error 1050
+--error ER_TABLE_EXISTS_ERROR
create table t3(a int);
---error 1050
+--error ER_TABLE_EXISTS_ERROR
create table t5(a int);
SHOW TABLES LIKE 't%';
@@ -375,9 +375,9 @@ insert into t3 values (3, "ndb table 3")
insert into t4 values (4);
# Remove t1, t2, t3 from disk
-system rm $MYSQLTEST_VARDIR/master-data/test/t1.frm > /dev/null ;
-system rm $MYSQLTEST_VARDIR/master-data/test/t2.frm > /dev/null ;
-system rm $MYSQLTEST_VARDIR/master-data/test/t3.frm > /dev/null ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t1.frm;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t2.frm;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t3.frm;
flush tables;
# Select from the table which only exists in NDB.
@@ -462,7 +462,7 @@ show tables;
create database test2;
use test2;
show tables;
---error 1146
+--error ER_NO_SUCH_TABLE
select * from t1;
create table t2 (b int,c longblob) engine=ndb;
use test;
@@ -487,7 +487,7 @@ create table t1 (a int primary key) engi
select * from t1;
--exec $NDB_MGM --no-defaults -e "all restart -n" > /dev/null
--exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults --not-started > /dev/null
---error 1015
+--error ER_CANT_LOCK
select * from t1;
--exec $NDB_MGM --no-defaults -e "all start" > /dev/null
--exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults > /dev/null
@@ -503,17 +503,17 @@ drop database test_only_ndb_tables;
# discovered( for example a table created via NDBAPI)
# Test disabled since it doesn't work on case insensitive systems
-#--error 1050
+#--error ER_TABLE_EXISTS_ERROR
#CREATE TABLE sys.SYSTAB_0 (a int);
-#--error 1105
+#--error ER_UNKNOWN_ERROR
#select * from sys.SYSTAB_0;
#CREATE TABLE IF NOT EXISTS sys.SYSTAB_0 (a int);
#show warnings;
-#--error 1105
+#--error ER_UNKNOWN_ERROR
#select * from sys.SYSTAB_0;
-#--error 1051
+#--error ER_BAD_TABLE_ERROR
#drop table sys.SYSTAB_0;
#drop table IF EXISTS sys.SYSTAB_0;
@@ -531,7 +531,7 @@ CREATE TABLE t9 (
insert t9 values(1, 2), (2,3), (3, 4), (4, 5);
#Don't drop the table, instead remove the frm file
-system rm $MYSQLTEST_VARDIR/master-data/test/t9.frm ;
+remove_file $MYSQLTEST_VARDIR/master-data/test/t9.frm ;
# Now leave test case, when ndb_autodiscover2 will run, this
# MySQL Server will have been restarted because it has a
=== modified file 'mysql-test/t/ndb_loaddatalocal.test'
--- a/mysql-test/t/ndb_loaddatalocal.test 2006-06-14 18:16:32 +0000
+++ b/mysql-test/t/ndb_loaddatalocal.test 2008-09-20 06:21:28 +0000
@@ -25,7 +25,7 @@ create table t1(a int) engine=ndb;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval load data local infile '$MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile' into table t1;
select count(*) from t1;
-system rm $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile ;
+remove_file $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile ;
drop table t1;
create table t1(a int) engine=myisam;
@@ -37,7 +37,7 @@ drop table t1;
create table t1(a int primary key) engine=ndb;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval load data local infile '$MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile' into table t1;
-system rm $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
+remove_file $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
select * from t1 order by a;
drop table t1;
@@ -50,7 +50,7 @@ drop table t1;
create table t1(a int primary key) engine=ndb;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval load data local infile '$MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile' into table t1;
-system rm $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
+remove_file $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
select * from t1 order by a;
drop table t1;
@@ -63,7 +63,7 @@ drop table t1;
create table t1(a int primary key) engine=ndb;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval load data local infile '$MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile' into table t1;
-system rm $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
+remove_file $MYSQLTEST_VARDIR/master-data/ndb_loaddatalocal.select_outfile;
select * from t1 order by a;
drop table t1;
=== modified file 'mysql-test/t/ndb_restore_print.test'
--- a/mysql-test/t/ndb_restore_print.test 2007-03-08 08:37:53 +0000
+++ b/mysql-test/t/ndb_restore_print.test 2008-09-20 06:21:28 +0000
@@ -134,10 +134,14 @@ insert into t4 values (1,31),(2,32),(3,3
--let ndb_restore_filter=test t1
--source include/ndb_backup_print.inc
---exec rm -f $MYSQLTEST_VARDIR/tmp/t1.txt
---exec rm -f $MYSQLTEST_VARDIR/tmp/t2.txt
---exec rm -f $MYSQLTEST_VARDIR/tmp/t3.txt
---exec rm -f $MYSQLTEST_VARDIR/tmp/t4.txt
+--error 0,1
+--remove_file $MYSQLTEST_VARDIR/tmp/t1.txt
+--error 0,1
+--remove_file $MYSQLTEST_VARDIR/tmp/t2.txt
+--error 0,1
+--remove_file $MYSQLTEST_VARDIR/tmp/t3.txt
+--error 0,1
+--remove_file $MYSQLTEST_VARDIR/tmp/t4.txt
--let ndb_restore_opts=--verbose=0 --print_data --hex --tab $MYSQLTEST_VARDIR/tmp --append
--let ndb_restore_filter=test
@@ -156,10 +160,10 @@ insert into t4 values (1,31),(2,32),(3,3
--source include/show_msg.inc
--exec sort $MYSQLTEST_VARDIR/tmp/t4.txt
---exec rm -f $MYSQLTEST_VARDIR/tmp/t1.txt
---exec rm -f $MYSQLTEST_VARDIR/tmp/t2.txt
---exec rm -f $MYSQLTEST_VARDIR/tmp/t3.txt
---exec rm -f $MYSQLTEST_VARDIR/tmp/t4.txt
+--remove_file $MYSQLTEST_VARDIR/tmp/t1.txt
+--remove_file $MYSQLTEST_VARDIR/tmp/t2.txt
+--remove_file $MYSQLTEST_VARDIR/tmp/t3.txt
+--remove_file $MYSQLTEST_VARDIR/tmp/t4.txt
# now test some other datatypes
drop table t1;
=== modified file 'mysql-test/t/outfile.test'
--- a/mysql-test/t/outfile.test 2007-05-17 20:17:50 +0000
+++ b/mysql-test/t/outfile.test 2008-09-23 09:24:32 +0000
@@ -31,13 +31,13 @@ select load_file(concat(@tmpdir,"/outfil
# the following should give errors
disable_query_log;
---error 1086
+--error ER_FILE_EXISTS_ERROR
eval select * into outfile "../tmp/outfile-test.1" from t1;
---error 1086
+--error ER_FILE_EXISTS_ERROR
eval select * into dumpfile "../tmp/outfile-test.2" from t1;
---error 1086
+--error ER_FILE_EXISTS_ERROR
eval select * into dumpfile "../tmp/outfile-test.3" from t1;
enable_query_log;
select load_file(concat(@tmpdir,"/outfile-test.not-exist"));
@@ -92,7 +92,7 @@ use test;
# It should not be possible to write to a file outside of vardir
create table t1(a int);
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
---error 1290
+--error ER_OPTION_PREVENTS_STATEMENT
eval select * into outfile "$MYSQL_TEST_DIR/outfile-test1" from t1;
drop table t1;
@@ -105,7 +105,7 @@ create user user_1@localhost;
grant all on mysqltest.* to user_1@localhost;
connect (con28181_1,localhost,user_1,,mysqltest);
---error 1044
+--error ER_DBACCESS_DENIED_ERROR
eval select schema_name
into outfile "../tmp/outfile-test.4"
fields terminated by ',' optionally enclosed by '"'
@@ -125,7 +125,7 @@ from information_schema.schemata
where schema_name like 'mysqltest';
connection default;
---exec rm $MYSQLTEST_VARDIR/tmp/outfile-test.4
+--remove_file $MYSQLTEST_VARDIR/tmp/outfile-test.4
use test;
revoke all privileges on *.* from user_1@localhost;
drop user user_1@localhost;
=== added file 'mysql-test/t/parser_stack.test'
--- a/mysql-test/t/parser_stack.test 1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/parser_stack.test 2008-07-14 21:41:30 +0000
@@ -0,0 +1,402 @@
+# Copyright (C) 2008 Sun Microsystems, Inc
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+#
+# These tests are designed to cause an internal parser stack overflow,
+# and trigger my_yyoverflow().
+#
+
+use test;
+
+SELECT
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+1
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+;
+
+prepare stmt from
+"
+SELECT
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+1
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+"
+;
+
+execute stmt;
+
+--disable_warnings
+drop view if exists view_overflow;
+--enable_warnings
+
+CREATE VIEW view_overflow AS
+SELECT
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
+1
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+;
+
+SELECT * from view_overflow;
+
+drop view view_overflow;
+
+--disable_warnings
+drop procedure if exists proc_overflow;
+--enable_warnings
+
+delimiter $$;
+
+CREATE PROCEDURE proc_overflow()
+BEGIN
+
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+
+ select 1;
+ select 2;
+ select 3;
+
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+
+END $$
+
+delimiter ;$$
+
+call proc_overflow();
+
+drop procedure proc_overflow;
+
+--disable_warnings
+drop function if exists func_overflow;
+--enable_warnings
+
+delimiter $$;
+
+create function func_overflow() returns int
+BEGIN
+ DECLARE x int default 0;
+
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+
+ SET x=x+1;
+ SET x=x+2;
+ SET x=x+3;
+
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+
+ return x;
+END $$
+
+delimiter ;$$
+
+select func_overflow();
+
+drop function func_overflow;
+
+--disable_warnings
+drop table if exists table_overflow;
+--enable_warnings
+
+create table table_overflow(a int, b int);
+
+delimiter $$;
+
+create trigger trigger_overflow before insert on table_overflow
+for each row
+BEGIN
+
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+ BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN BEGIN
+
+ SET NEW.b := NEW.a;
+ SET NEW.b := NEW.b + 1;
+ SET NEW.b := NEW.b + 2;
+ SET NEW.b := NEW.b + 3;
+
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+ END; END; END; END; END; END; END; END; END; END; END; END;
+
+END $$
+
+delimiter ;$$
+
+insert into table_overflow set a=10;
+insert into table_overflow set a=20;
+select * from table_overflow;
+
+drop table table_overflow;
+
+--disable_warnings
+drop procedure if exists proc_35577;
+--enable_warnings
+
+delimiter $$;
+
+CREATE PROCEDURE proc_35577()
+BEGIN
+ DECLARE z_done INT DEFAULT 0;
+ DECLARE t_done VARCHAR(5000);
+ outer_loop: LOOP
+ IF t_done=1 THEN
+ LEAVE outer_loop;
+ END IF;
+
+ inner_block:BEGIN
+ DECLARE z_done INT DEFAULT 0;
+ SET z_done = 0;
+ inner_loop: LOOP
+ IF z_done=1 THEN
+ LEAVE inner_loop;
+ END IF;
+ IF (t_done = 'a') THEN
+ IF (t_done <> 0) THEN
+ IF ( t_done > 0) THEN
+ IF (t_done = 'a') THEN
+ SET t_done = 'a';
+ ELSEIF (t_done = 'a') THEN
+ SET t_done = 'a';
+ ELSEIF(t_done = 'a') THEN
+ SET t_done = 'a';
+ ELSEIF(t_done = 'a') THEN
+ SET t_done = 'a';
+ ELSEIF(t_done = 'a') THEN
+ SET t_done = 'a';
+ ELSEIF(t_done = 'a') THEN
+ SET t_done = 'a';
+ ELSEIF(t_done = 'a') THEN
+ SET t_done = 'a';
+ ELSEIF(t_done = 'a') THEN
+ SET t_done = 'a';
+ END IF;
+ END IF;
+ END IF;
+ END IF;
+ END LOOP inner_loop;
+ END inner_block;
+ END LOOP outer_loop;
+END $$
+
+delimiter ;$$
+
+drop procedure proc_35577;
+
+#
+# Bug#37269 (parser crash when creating stored procedure)
+#
+
+--disable_warnings
+drop procedure if exists p_37269;
+--enable_warnings
+
+delimiter $$;
+
+create procedure p_37269()
+begin
+ declare done int default 0;
+ declare varb int default 0;
+ declare vara int default 0;
+
+ repeat
+ select now();
+ until done end repeat;
+ while varb do
+ select now();
+ begin
+ select now();
+ repeat
+ select now();
+ until done end repeat;
+ if vara then
+ select now();
+ repeat
+ select now();
+ loop
+ select now();
+ end loop;
+ repeat
+ select now();
+ label1: while varb do
+ select now();
+ end while label1;
+ if vara then
+ select now();
+ repeat
+ select now();
+ until done end repeat;
+ begin
+ select now();
+ while varb do
+ select now();
+ label1: while varb do
+ select now();
+ end while label1;
+ if vara then
+ select now();
+ while varb do
+ select now();
+ loop
+ select now();
+ end loop;
+ repeat
+ select now();
+ loop
+ select now();
+ while varb do
+ select now();
+ end while;
+ repeat
+ select now();
+ label1: loop
+ select now();
+ if vara then
+ select now();
+ end if;
+ end loop label1;
+ until done end repeat;
+ end loop;
+ until done end repeat;
+ end while;
+ end if;
+ end while;
+ end;
+ end if;
+ until done end repeat;
+ until done end repeat;
+ end if;
+ end;
+ end while;
+end $$
+
+delimiter ;$$
+
+drop procedure p_37269;
+
+#
+# Bug#37228 (Sever crashes when creating stored procedure with more than
+# 10 IF/ELSEIF)
+#
+
+--disable_warnings
+drop procedure if exists p_37228;
+--enable_warnings
+
+delimiter $$;
+
+create procedure p_37228 ()
+BEGIN
+ DECLARE v INT DEFAULT 123;
+
+ IF (v > 1) THEN SET v = 1;
+ ELSEIF (v < 10) THEN SET v = 10;
+ ELSEIF (v < 11) THEN SET v = 11;
+ ELSEIF (v < 12) THEN SET v = 12;
+ ELSEIF (v < 13) THEN SET v = 13;
+ ELSEIF (v < 14) THEN SET v = 14;
+ ELSEIF (v < 15) THEN SET v = 15;
+ ELSEIF (v < 16) THEN SET v = 16;
+ ELSEIF (v < 17) THEN SET v = 17;
+ ELSEIF (v < 18) THEN SET v = 18;
+ ELSEIF (v < 19) THEN SET v = 19;
+ ELSEIF (v < 20) THEN SET v = 20;
+ ELSEIF (v < 21) THEN SET v = 21;
+ ELSEIF (v < 22) THEN SET v = 22;
+ ELSEIF (v < 23) THEN SET v = 23;
+ ELSEIF (v < 24) THEN SET v = 24;
+ ELSEIF (v < 25) THEN SET v = 25;
+ ELSEIF (v < 26) THEN SET v = 26;
+ ELSEIF (v < 27) THEN SET v = 27;
+ ELSEIF (v < 28) THEN SET v = 28;
+ ELSEIF (v < 29) THEN SET v = 29;
+ ELSEIF (v < 30) THEN SET v = 30;
+ ELSEIF (v < 31) THEN SET v = 31;
+ ELSEIF (v < 32) THEN SET v = 32;
+ ELSEIF (v < 33) THEN SET v = 33;
+ ELSEIF (v < 34) THEN SET v = 34;
+ ELSEIF (v < 35) THEN SET v = 35;
+ ELSEIF (v < 36) THEN SET v = 36;
+ ELSEIF (v < 37) THEN SET v = 37;
+ ELSEIF (v < 38) THEN SET v = 38;
+ ELSEIF (v < 39) THEN SET v = 39;
+ END IF;
+END $$
+
+delimiter ;$$
+
+drop procedure p_37228;
+
+
=== modified file 'mysql-test/t/query_cache_merge.test'
--- a/mysql-test/t/query_cache_merge.test 2005-07-28 00:22:47 +0000
+++ b/mysql-test/t/query_cache_merge.test 2008-07-24 14:14:34 +0000
@@ -38,3 +38,59 @@ drop table t1,t2,t3,t4,t5,t6,t7,t8,t9,t1
SET @@global.query_cache_size=0;
# End of 4.1 tests
+
+#
+# Bug#33362: Query cache invalidation (truncate) may hang if cached query uses many tables
+#
+
+let $c= 255;
+
+while ($c)
+{
+ eval CREATE TABLE t$c (a INT);
+ eval INSERT INTO t$c VALUES ($c);
+ dec $c;
+}
+
+let $c= 254;
+let $str= t255;
+
+while ($c)
+{
+ let $str= t$c,$str;
+ dec $c;
+}
+
+eval CREATE TABLE t0 (a INT) ENGINE=MERGE UNION($str);
+SET GLOBAL query_cache_size = 1048576;
+FLUSH STATUS;
+SELECT a FROM t0 WHERE a = 1;
+SHOW STATUS LIKE "Qcache_queries_in_cache";
+
+let $c= 255;
+let $i= 1;
+
+FLUSH TABLES;
+
+while ($c)
+{
+ eval TRUNCATE TABLE t$c;
+ eval SELECT a FROM t$i;
+ dec $c;
+ inc $i;
+}
+
+SELECT a FROM t0;
+DROP TABLE t0;
+
+let $c= 255;
+
+while ($c)
+{
+ eval DROP TABLE t$c;
+ dec $c;
+}
+
+SET @@global.query_cache_size = 0;
+
+--echo End of 5.1 tests
=== modified file 'mysql-test/t/rpl_EE_error.test'
--- a/mysql-test/t/rpl_EE_error.test 2006-01-24 07:30:54 +0000
+++ b/mysql-test/t/rpl_EE_error.test 2008-09-23 09:24:32 +0000
@@ -6,9 +6,11 @@
source include/master-slave.inc;
+
create table t1 (a int) engine=myisam;
flush tables;
-system rm $MYSQLTEST_VARDIR/master-data/test/t1.MYI ;
+--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.MYI
+
drop table if exists t1;
save_master_pos;
connection slave;
@@ -22,7 +24,7 @@ set sql_log_bin=0;
insert into t1 values(2);
set sql_log_bin=1;
save_master_pos;
---error 1062
+--error ER_DUP_ENTRY
insert into t1 values(1),(2);
drop table t1;
save_master_pos;
=== modified file 'mysql-test/t/rpl_ddl.test'
--- a/mysql-test/t/rpl_ddl.test 2005-10-13 09:12:17 +0000
+++ b/mysql-test/t/rpl_ddl.test 2008-08-22 17:49:51 +0000
@@ -55,6 +55,18 @@ DROP DATABASE IF EXISTS mysqltest3;
CREATE DATABASE mysqltest1;
CREATE DATABASE mysqltest2;
CREATE TABLE mysqltest1.t1 (f1 BIGINT) ENGINE= "InnoDB";
+# Prevent Bug#26687 rpl_ddl test fails if run with --innodb option
+# The current testscripts + the expected result need that the slave uses MyISAM
+# for the table mysqltest.t1.
+sync_slave_with_master;
+connection slave;
+if (`SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES
+ WHERE TABLE_SCHEMA = 'mysqltest1' AND TABLE_NAME = 't1'
+ AND ENGINE <> 'MyISAM'`)
+{
+ skip This test needs on slave side: InnoDB disabled, default engine: MyISAM;
+}
+connection master;
INSERT INTO mysqltest1.t1 SET f1= 0;
CREATE TABLE mysqltest1.t2 (f1 BIGINT) ENGINE= "InnoDB";
CREATE TABLE mysqltest1.t3 (f1 BIGINT) ENGINE= "InnoDB";
=== modified file 'mysql-test/t/rpl_grant.test'
--- a/mysql-test/t/rpl_grant.test 2007-06-21 14:55:52 +0000
+++ b/mysql-test/t/rpl_grant.test 2008-09-24 12:59:56 +0000
@@ -10,11 +10,11 @@ CREATE USER dummy@localhost;
CREATE USER dummy1@localhost, dummy2@localhost;
SELECT user, host FROM mysql.user WHERE user != 'root'; # root host non-determ
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
sync_slave_with_master;
--echo **** On Slave ****
SELECT user,host FROM mysql.user WHERE user != 'root'; # root host non-determ
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
--echo **** On Master ****
connection master;
@@ -31,11 +31,11 @@ DROP USER nonexisting@localhost, dummy@l
DROP USER dummy1@localhost, dummy2@localhost;
SELECT user, host FROM mysql.user WHERE user != 'root'; # root host non-determ
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
sync_slave_with_master;
--echo **** On Slave ****
SELECT user,host FROM mysql.user WHERE user != 'root'; # root host non-determ
-SELECT COUNT(*) FROM mysql.user;
+SELECT COUNT(*) FROM mysql.user WHERE user != 'root' or (host != 'localhost' and host != @hostname);
--replace_result $MASTER_MYPORT MASTER_PORT
--replace_column 1 # 8 # 9 # 23 # 33 #
=== modified file 'mysql-test/t/rpl_loaddatalocal.test'
--- a/mysql-test/t/rpl_loaddatalocal.test 2006-10-05 16:45:40 +0000
+++ b/mysql-test/t/rpl_loaddatalocal.test 2008-09-20 06:21:28 +0000
@@ -25,7 +25,7 @@ eval select * into outfile '$MYSQLTEST_V
truncate table t1;
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval load data local infile '$MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile' into table t1;
-system rm $MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile ;
+--remove_file $MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile
save_master_pos;
connection slave;
sync_with_master;
@@ -52,7 +52,7 @@ drop table t1;
create table t1(a int primary key);
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
eval load data local infile '$MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile' into table t1;
-system rm $MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile ;
+remove_file $MYSQLTEST_VARDIR/master-data/rpl_loaddatalocal.select_outfile ;
select * from t1;
save_master_pos;
connection slave;
=== modified file 'mysql-test/t/rpl_log-slave.opt'
--- a/mysql-test/t/rpl_log-slave.opt 2003-08-20 22:23:39 +0000
+++ b/mysql-test/t/rpl_log-slave.opt 2008-04-03 21:16:55 +0000
@@ -1 +1 @@
-
+--log-slave-updates
=== modified file 'mysql-test/t/rpl_log.test'
--- a/mysql-test/t/rpl_log.test 2006-10-19 09:35:10 +0000
+++ b/mysql-test/t/rpl_log.test 2008-04-03 21:16:55 +0000
@@ -13,22 +13,15 @@ save_master_pos;
connection slave;
sync_with_master;
stop slave;
+--source include/wait_for_slave_to_stop.inc
reset master;
reset slave;
-# We are going to read the slave's binlog which contains file_id (for some LOAD
-# DATA INFILE); to make it repeatable (not influenced by other tests), we need
-# to stop and start the slave, to be sure file_id will start from 1.
-# This can be done with 'server_stop slave', but
-# this would require the manager, so most of the time the test will be skipped
-# :(
-# To workaround this, I (Guilhem) add a (empty) rpl_log-slave.opt (because when
-# mysql-test-run finds such a file it restarts the slave before doing the
-# test). That's not very elegant but I could find no better way, sorry.
+start slave;
+--source include/wait_for_slave_to_start.inc
let $VERSION=`select version()`;
connection master;
-reset master;
create table t1(n int not null auto_increment primary key);
insert into t1 values (NULL);
drop table t1;
@@ -37,6 +30,7 @@ load data infile '../std_data_ln/words.d
select count(*) from t1;
drop table t1;
--replace_result $VERSION VERSION
+--replace_regex /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /infile '.+'/infile 'words.dat'/
show binlog events;
show binlog events from 98 limit 1;
show binlog events from 98 limit 2;
@@ -69,10 +63,10 @@ connection slave;
# Note that the above 'slave start' will cause a 3rd rotate event (a fake one)
# to go into the relay log (the master always sends a fake one when replication
# starts).
-start slave;
sync_with_master;
flush logs;
stop slave;
+--source include/wait_for_slave_to_stop.inc
connection master;
# Create some entries for second log
@@ -81,6 +75,7 @@ create table t1 (n int);
insert into t1 values (1);
drop table t1;
--replace_result $VERSION VERSION
+--replace_regex /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /infile '.+'/infile 'words.dat'/
show binlog events;
--replace_result $VERSION VERSION
show binlog events in 'master-bin.000002';
@@ -88,9 +83,11 @@ show binary logs;
save_master_pos;
connection slave;
start slave;
+--source include/wait_for_slave_to_start.inc
sync_with_master;
show binary logs;
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
+--replace_regex /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /INFILE '.+'/INFILE 'words.dat'/
show binlog events in 'slave-bin.000001' from 4;
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
show binlog events in 'slave-bin.000002' from 4;
=== removed file 'mysql-test/t/rpl_view-slave.opt'
--- a/mysql-test/t/rpl_view-slave.opt 2006-04-14 09:13:26 +0000
+++ b/mysql-test/t/rpl_view-slave.opt 1970-01-01 00:00:00 +0000
@@ -1 +0,0 @@
---replicate-ignore-table=test.foo
=== modified file 'mysql-test/t/show_check.test'
--- a/mysql-test/t/show_check.test 2007-08-02 13:23:23 +0000
+++ b/mysql-test/t/show_check.test 2008-08-15 20:13:27 +0000
@@ -844,4 +844,24 @@ show status like 'slow_queries';
#
show variables like 'myisam_recover_options';
+#
+# Bug#37301 Length and Max_length differ with no obvious reason
+#
+CREATE TABLE t1 (
+ Codigo int(10) unsigned NOT NULL auto_increment,
+ Nombre varchar(255) default NULL,
+ Telefono varchar(255) default NULL,
+ Observaciones longtext,
+ Direccion varchar(255) default NULL,
+ Dni varchar(255) default NULL,
+ CP int(11) default NULL,
+ Provincia varchar(255) default NULL,
+ Poblacion varchar(255) default NULL,
+ PRIMARY KEY (Codigo)
+) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
+--enable_metadata
+show create table t1;
+--disable_metadata
+drop table t1;
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/sp-error.test'
--- a/mysql-test/t/sp-error.test 2008-01-23 20:26:41 +0000
+++ b/mysql-test/t/sp-error.test 2008-09-29 14:11:34 +0000
@@ -2173,6 +2173,14 @@ begin
end loop;
end|
+CREATE TABLE t1 (a INT)|
+INSERT INTO t1 VALUES (1),(2)|
+CREATE PROCEDURE p1(a INT) BEGIN END|
+--error ER_SUBQUERY_NO_1_ROW
+CALL p1((SELECT * FROM t1))|
+DROP PROCEDURE IF EXISTS p1|
+DROP TABLE t1|
+
delimiter ;|
#
=== modified file 'mysql-test/t/sp.test'
--- a/mysql-test/t/sp.test 2008-02-17 11:37:39 +0000
+++ b/mysql-test/t/sp.test 2008-09-20 08:51:03 +0000
@@ -7794,6 +7794,48 @@ drop function func30787;
drop table t1;
+#
+# Bug#38291 memory corruption and server crash with view/sp/function
+#
+
+create table t1(c1 INT);
+create function f1(p1 int) returns varchar(32)
+ return 'aaa';
+create view v1 as select f1(c1) as parent_control_name from t1;
+
+delimiter //;
+create procedure p1()
+begin
+ select parent_control_name as c1 from v1;
+end //
+delimiter ;//
+
+call p1();
+call p1();
+
+drop procedure p1;
+drop function f1;
+drop view v1;
+drop table t1;
+
+#
+# Bug#38469 invalid memory read and/or crash with utf8 text field, stored procedure, uservar
+#
+delimiter $;
+--disable_warnings
+drop procedure if exists `p2` $
+--enable_warnings
+create procedure `p2`(in `a` text charset utf8)
+begin
+ declare `pos` int default 1;
+ declare `str` text charset utf8;
+ set `str` := `a`;
+ select substr(`str`, `pos`+ 1 ) into `str`;
+end $
+delimiter ;$
+call `p2`('s s s s s s');
+drop procedure `p2`;
+
--echo # ------------------------------------------------------------------
--echo # -- End of 5.0 tests
--echo # ------------------------------------------------------------------
=== modified file 'mysql-test/t/subselect.test'
--- a/mysql-test/t/subselect.test 2008-06-25 14:59:38 +0000
+++ b/mysql-test/t/subselect.test 2008-07-26 20:44:07 +0000
@@ -3295,5 +3295,17 @@ EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE
EXPLAIN EXTENDED SELECT 1 FROM t1 WHERE 1 IN (SELECT 1 FROM t1 WHERE a > 3 GROUP BY a);
DROP TABLE t1;
+#
+# Bug #38191: Server crash with subquery containing DISTINCT and ORDER BY
+#
+
+CREATE TABLE t1(pk int PRIMARY KEY, a int, INDEX idx(a));
+INSERT INTO t1 VALUES (1, 10), (3, 30), (2, 20);
+CREATE TABLE t2(pk int PRIMARY KEY, a int, b int, INDEX idxa(a));
+INSERT INTO t2 VALUES (2, 20, 700), (1, 10, 200), (4, 10, 100);
+SELECT * FROM t1
+ WHERE EXISTS (SELECT DISTINCT a FROM t2 WHERE t1.a < t2.a ORDER BY b);
+DROP TABLE t1,t2;
+
--echo End of 5.0 tests.
=== modified file 'mysql-test/t/symlink.test'
--- a/mysql-test/t/symlink.test 2008-07-10 18:50:07 +0000
+++ b/mysql-test/t/symlink.test 2008-10-20 11:31:29 +0000
@@ -71,8 +71,6 @@ drop table t1;
SHOW CREATE TABLE t9;
disable_query_log;
---error 1103,1103
-create table t1 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam data directory="tmp";
# Check that we cannot link over a table from another database.
@@ -81,8 +79,9 @@ create database mysqltest;
--error 1,1
create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam index directory="/this-dir-does-not-exist";
---error 1103,1103
-create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam index directory="not-hard-path";
+# temporarily disabled as it returns different result in the embedded server
+# --error ER_WRONG_ARGUMENTS,ER_WRONG_ARGUMENTS
+# create table mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) engine=myisam index directory="not-hard-path";
# Should fail becasue the file t9.MYI already exist in 'run'
--error 1,1,1105
@@ -186,7 +185,12 @@ drop table t1;
#
# Protect ourselves from data left in tmp/ by a previos possibly failed
# test
---system rm -f $MYSQLTEST_VARDIR/tmp/t1.*
+--error 0,1
+--remove_file $MYSQLTEST_VARDIR/tmp/t1.frm
+--error 0,1
+--remove_file $MYSQLTEST_VARDIR/tmp/t1.MYD
+--error 0,1
+--remove_file $MYSQLTEST_VARDIR/tmp/t1.MYI
--disable_query_log
eval prepare stmt from "create table t1 (c char(10)) data directory='$MYSQLTEST_VARDIR/tmp'";
--enable_query_log
@@ -204,19 +208,19 @@ deallocate prepare stmt;
# Bug#32167 another privilege bypass with DATA/INDEX DIRECORY
#
--replace_result $MYSQL_TEST_DIR TEST_DIR
---error 1,1210
+--error 1,ER_WRONG_ARGUMENTS
eval CREATE TABLE t1(a INT)
DATA DIRECTORY='$MYSQL_TEST_DIR/var/master-data/test';
--replace_result $MYSQL_TEST_DIR TEST_DIR
---error 1,1210
+--error 1,ER_WRONG_ARGUMENTS
eval CREATE TABLE t1(a INT)
DATA DIRECTORY='$MYSQL_TEST_DIR/var/master-data/';
--replace_result $MYSQL_TEST_DIR TEST_DIR
---error 1,1210
+--error 1,ER_WRONG_ARGUMENTS
eval CREATE TABLE t1(a INT)
INDEX DIRECTORY='$MYSQL_TEST_DIR/var/master-data';
--replace_result $MYSQL_TEST_DIR TEST_DIR
---error 1,1210
+--error 1,ER_WRONG_ARGUMENTS
eval CREATE TABLE t1(a INT)
INDEX DIRECTORY='$MYSQL_TEST_DIR/var/master-data_var';
@@ -230,6 +234,7 @@ SET SESSION keep_files_on_create = TRUE;
EOF
--disable_abort_on_error
--error 1
+--replace_result $MYSQLTEST_VARDIR . master-data/ ''
CREATE TABLE t1 (a INT) ENGINE MYISAM;
--error 0,1
--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.MYD;
=== modified file 'mysql-test/t/type_bit.test'
--- a/mysql-test/t/type_bit.test 2007-11-21 18:56:42 +0000
+++ b/mysql-test/t/type_bit.test 2008-08-27 21:10:37 +0000
@@ -333,4 +333,23 @@ SELECT 1 FROM t1 GROUP BY a;
DROP TABLE t1;
+#
+# Bug#37799 SELECT with a BIT column in WHERE clause returns unexpected result
+#
+
+CREATE TABLE t1 (b BIT NOT NULL, i2 INTEGER NOT NULL, s VARCHAR(255) NOT NULL);
+INSERT INTO t1 VALUES(0x01,100,''), (0x00,300,''), (0x01,200,''), (0x00,100,'');
+SELECT HEX(b), i2 FROM t1 WHERE (i2>=100 AND i2<201) AND b=TRUE;
+
+CREATE TABLE t2 (b1 BIT NOT NULL, b2 BIT NOT NULL, i2 INTEGER NOT NULL,
+ s VARCHAR(255) NOT NULL);
+INSERT INTO t2 VALUES (0x01,0x00,100,''), (0x00,0x01,300,''),
+ (0x01,0x00,200,''), (0x00,0x01,100,'');
+SELECT HEX(b1), i2 FROM t2 WHERE (i2>=100 AND i2<201) AND b1=TRUE;
+SELECT HEX(b2), i2 FROM t2 WHERE (i2>=100 AND i2<201) AND b2=FALSE;
+SELECT HEX(b1), HEX(b2), i2 FROM t2
+ WHERE (i2>=100 AND i2<201) AND b1=TRUE AND b2=FALSE;
+
+DROP TABLE t1, t2;
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/type_datetime.test'
--- a/mysql-test/t/type_datetime.test 2007-12-13 10:52:49 +0000
+++ b/mysql-test/t/type_datetime.test 2008-09-09 15:05:27 +0000
@@ -388,4 +388,20 @@ where id in (select id from t2 as x1 whe
drop table t1,t2;
+
+#
+# Bug #37526: asymertic operator <=> in trigger
+#
+SELECT
+ CAST('NULL' AS DATE) <=> CAST('2008-01-01' AS DATE) n1,
+ CAST('2008-01-01' AS DATE) <=> CAST('NULL' AS DATE) n2,
+ CAST('NULL' AS DATE) <=> CAST('NULL' AS DATE) n3,
+ CAST('NULL' AS DATE) <> CAST('2008-01-01' AS DATE) n4,
+ CAST('2008-01-01' AS DATE) <> CAST('NULL' AS DATE) n5,
+ CAST('NULL' AS DATE) <> CAST('NULL' AS DATE) n6,
+ CAST('NULL' AS DATE) < CAST('2008-01-01' AS DATE) n7,
+ CAST('2008-01-01' AS DATE) < CAST('NULL' AS DATE) n8,
+ CAST('NULL' AS DATE) < CAST('NULL' AS DATE) n9;
+
+
--echo End of 5.0 tests
=== modified file 'mysql-test/t/type_newdecimal.test'
--- a/mysql-test/t/type_newdecimal.test 2007-11-17 18:05:31 +0000
+++ b/mysql-test/t/type_newdecimal.test 2008-08-15 19:46:21 +0000
@@ -1216,4 +1216,13 @@ DESC t1;
SELECT f1 FROM t1;
DROP TABLE t1;
+#
+# Bug #36270: incorrect calculation result - works in 4.1 but not in 5.0 or 5.1
+#
+
+# show that if we need to truncate the scale of an operand, we pick the
+# right one (that is, we discard the least significant decimal places)
+select (1.20396873 * 0.89550000 * 0.68000000 * 1.08721696 * 0.99500000 *
+ 1.01500000 * 1.01500000 * 0.99500000);
+
--echo End of 5.0 tests
=== modified file 'mysys/mf_keycache.c'
--- a/mysys/mf_keycache.c 2008-03-29 15:50:46 +0000
+++ b/mysys/mf_keycache.c 2008-08-11 21:08:12 +0000
@@ -1382,7 +1382,7 @@ restart:
/* We don't need the page in the cache: we are going to write on disk */
hash_link->requests--;
unlink_hash(keycache, hash_link);
- return 0;
+ DBUG_RETURN(0);
}
if (!(block->status & BLOCK_IN_FLUSH))
{
@@ -1399,7 +1399,7 @@ restart:
flag (see the code below that handles reading requests).
*/
free_block(keycache, block);
- return 0;
+ DBUG_RETURN(0);
}
/* Wait intil the page is flushed on disk */
hash_link->requests--;
@@ -1429,7 +1429,7 @@ restart:
/* Invalidate page in the block if it has not been done yet */
if (block->status)
free_block(keycache, block);
- return 0;
+ DBUG_RETURN(0);
}
if (page_status == PAGE_READ &&
=== modified file 'mysys/mf_pack.c'
--- a/mysys/mf_pack.c 2008-07-16 22:58:45 +0000
+++ b/mysys/mf_pack.c 2008-08-18 17:06:27 +0000
@@ -343,7 +343,7 @@ uint unpack_dirname(my_string to, const
length-=(uint) (suffix-buff)-1;
if (length+(h_length= (uint) strlen(tilde_expansion)) <= FN_REFLEN)
{
- if (tilde_expansion[h_length-1] == FN_LIBCHAR)
+ if ((h_length > 0) && (tilde_expansion[h_length-1] == FN_LIBCHAR))
h_length--;
if (buff+h_length < suffix)
bmove(buff+h_length,suffix,length);
=== modified file 'mysys/my_alloc.c'
--- a/mysys/my_alloc.c 2007-04-18 20:50:32 +0000
+++ b/mysys/my_alloc.c 2008-08-11 16:10:00 +0000
@@ -202,7 +202,7 @@ gptr alloc_root(MEM_ROOT *mem_root,unsig
{
if (mem_root->error_handler)
(*mem_root->error_handler)();
- return((gptr) 0); /* purecov: inspected */
+ DBUG_RETURN((gptr) 0); /* purecov: inspected */
}
mem_root->block_num++;
next->next= *prev;
=== modified file 'mysys/my_symlink.c'
--- a/mysys/my_symlink.c 2008-08-04 11:45:50 +0000
+++ b/mysys/my_symlink.c 2008-10-20 11:31:29 +0000
@@ -108,10 +108,14 @@ int my_symlink(const char *content, cons
int my_is_symlink(const char *filename __attribute__((unused)))
{
-#if defined(HAVE_LSTAT) && defined(S_ISLNK)
+#if defined (HAVE_LSTAT) && defined (S_ISLNK)
struct stat stat_buff;
return !lstat(filename, &stat_buff) && S_ISLNK(stat_buff.st_mode);
-#else
+#elif defined (_WIN32)
+ DWORD dwAttr = GetFileAttributes(filename);
+ return (dwAttr != INVALID_FILE_ATTRIBUTES) &&
+ (dwAttr & FILE_ATTRIBUTE_REPARSE_POINT);
+#else /* No symlinks */
return 0;
#endif
}
@@ -128,7 +132,7 @@ int my_realpath(char *to, const char *fi
DBUG_PRINT("info",("executing realpath"));
if ((ptr=realpath(filename,buff)))
- strmake(to,ptr,FN_REFLEN-1);
+ strmake(to,ptr,FN_REFLEN-1);
else
{
/*
=== modified file 'mysys/thr_lock.c'
--- a/mysys/thr_lock.c 2007-08-05 09:17:07 +0000
+++ b/mysys/thr_lock.c 2008-08-25 13:18:52 +0000
@@ -333,10 +333,10 @@ void thr_lock_init(THR_LOCK *lock)
void thr_lock_delete(THR_LOCK *lock)
{
DBUG_ENTER("thr_lock_delete");
- VOID(pthread_mutex_destroy(&lock->mutex));
pthread_mutex_lock(&THR_LOCK_lock);
thr_lock_thread_list=list_delete(thr_lock_thread_list,&lock->list);
pthread_mutex_unlock(&THR_LOCK_lock);
+ pthread_mutex_destroy(&lock->mutex);
DBUG_VOID_RETURN;
}
=== modified file 'netware/BUILD/compile-linux-tools'
--- a/netware/BUILD/compile-linux-tools 2006-04-03 15:54:09 +0000
+++ b/netware/BUILD/compile-linux-tools 2008-08-06 13:25:03 +0000
@@ -53,6 +53,9 @@ make
# so the file will be linked
(cd sql; make sql_yacc.cc)
+# we need initilizing SQL files.
+(cd netware; make test_db.sql init_db.sql)
+
# copying required linux tools
cp extra/comp_err extra/comp_err.linux
cp libmysql/conf_to_src libmysql/conf_to_src.linux
=== modified file 'netware/BUILD/nwbootstrap'
--- a/netware/BUILD/nwbootstrap 2006-11-28 17:36:53 +0000
+++ b/netware/BUILD/nwbootstrap 2008-08-06 13:25:03 +0000
@@ -91,8 +91,8 @@ done
echo "starting build..."
# check for bk and repo_dir
-bk help > /dev/null
-repo_dir=`bk root $repo_dir`
+bzr help > /dev/null
+repo_dir=`bzr root $repo_dir`
cd $repo_dir
doc_dir="$repo_dir/../mysqldoc"
@@ -100,7 +100,7 @@ doc_dir="$repo_dir/../mysqldoc"
temp_dir="$build_dir/mysql-$$.tmp"
# export the bk tree
-command="bk export";
+command="bzr export";
if test $revision; then command="$command -r$revision"; fi
command="$command $temp_dir"
echo "exporting $repo_dir..."
@@ -178,6 +178,8 @@ awk 'BEGIN{x=0;} END{printf("\n");} x==
# build linux tools
echo "compiling linux tools..."
./netware/BUILD/compile-linux-tools
+test -f ./netware/init_db.sql # this must exist
+test -f ./netware/test_db.sql # this must exist
# compile
if test $build
=== modified file 'netware/Makefile.am'
--- a/netware/Makefile.am 2007-08-24 21:40:36 +0000
+++ b/netware/Makefile.am 2008-08-06 13:25:03 +0000
@@ -103,8 +103,7 @@ init_db.sql: $(top_srcdir)/scripts/mysql
@echo "CREATE DATABASE mysql;" > $@;
@echo "CREATE DATABASE test;" >> $@;
@echo "use mysql;" >> $@;
- @cat $(top_srcdir)/scripts/mysql_system_tables.sql \
- $(top_srcdir)/scripts/mysql_system_tables_fix.sql >> $@;
+ @cat $(top_srcdir)/scripts/mysql_system_tables.sql >> $@;
# Build test_db.sql from init_db.sql plus
# some test data
=== modified file 'netware/mysql_install_db.c'
--- a/netware/mysql_install_db.c 2006-04-03 01:37:43 +0000
+++ b/netware/mysql_install_db.c 2008-08-06 13:25:03 +0000
@@ -324,9 +324,10 @@ void create_paths()
******************************************************************************/
int mysql_install_db(int argc, char *argv[])
{
- arg_list_t al;
- int i, j, err;
- char skip;
+ arg_list_t al;
+ int i, j, err;
+ char skip;
+ struct stat info;
// private options
static char *private_options[] =
@@ -363,6 +364,15 @@ int mysql_install_db(int argc, char *arg
add_arg(&al, "--skip-innodb");
add_arg(&al, "--skip-bdb");
+ if ((err = stat(sql_file, &info)) != 0)
+ {
+ printf("ERROR - %s:\n", strerror(errno));
+ printf("\t%s\n\n", sql_file);
+ // free args
+ free_args(&al);
+ exit(-1);
+ }
+
// spawn mysqld
err = spawn(mysqld, &al, TRUE, sql_file, out_log, err_log);
@@ -395,9 +405,9 @@ int main(int argc, char **argv)
// install the database
if (mysql_install_db(argc, argv))
{
- printf("ERROR - The database creation failed!\n");
+ printf("ERROR - Failed to create the database!\n");
printf(" %s\n", strerror(errno));
- printf("See the following log for more infomration:\n");
+ printf("See the following log for more information:\n");
printf("\t%s\n\n", err_log);
exit(-1);
}
=== modified file 'scripts/make_binary_distribution.sh'
--- a/scripts/make_binary_distribution.sh 2008-04-28 19:53:52 +0000
+++ b/scripts/make_binary_distribution.sh 2008-08-25 19:07:41 +0000
@@ -61,6 +61,7 @@ system=`echo $system | sed -e 's/[a-z]*-
system=`echo $system | sed -e 's/darwin6.*/osx10.2/g'`
system=`echo $system | sed -e 's/darwin7.*/osx10.3/g'`
system=`echo $system | sed -e 's/darwin8.*/osx10.4/g'`
+system=`echo $system | sed -e 's/darwin9.*/osx10.5/g'`
system=`echo $system | sed -e 's/\(aix4.3\).*/\1/g'`
system=`echo $system | sed -e 's/\(aix5.1\).*/\1/g'`
system=`echo $system | sed -e 's/\(aix5.2\).*/\1/g'`
@@ -271,6 +272,8 @@ if [ $BASE_SYSTEM != "netware" ] ; then
if [ -d man ] ; then
$CP man/*.1 $BASE/man/man1
$CP man/*.8 $BASE/man/man8
+ # In a Unix binary package, these tools and their manuals are not useful
+ rm -f $BASE/man/man1/make_win_*
fi
fi
@@ -330,6 +333,7 @@ fi
rm -f $BASE/bin/Makefile* $BASE/bin/*.in $BASE/bin/*.sh \
$BASE/bin/mysql_install_db $BASE/bin/make_binary_distribution \
+ $BASE/bin/make_win_* \
$BASE/bin/setsomevars $BASE/support-files/Makefile* \
$BASE/support-files/*.sh
=== modified file 'scripts/mysql_system_tables_data.sql'
--- a/scripts/mysql_system_tables_data.sql 2007-11-30 05:14:43 +0000
+++ b/scripts/mysql_system_tables_data.sql 2008-09-24 12:59:56 +0000
@@ -21,9 +21,9 @@ DROP TABLE tmp_db;
-- from local machine if "users" table didn't exist before
CREATE TEMPORARY TABLE tmp_user LIKE user;
INSERT INTO tmp_user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
-REPLACE INTO tmp_user VALUES (@current_hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
+REPLACE INTO tmp_user SELECT @current_hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0 FROM dual WHERE LOWER( @current_hostname) != 'localhost';
REPLACE INTO tmp_user VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
INSERT INTO tmp_user (host,user) VALUES ('localhost','');
-INSERT INTO tmp_user (host,user) VALUES (@current_hostname,'');
+INSERT INTO tmp_user (host,user) SELECT @current_hostname,'' FROM dual WHERE LOWER(@current_hostname ) != 'localhost';
INSERT INTO user SELECT * FROM tmp_user WHERE @had_user_table=0;
DROP TABLE tmp_user;
=== removed file 'server-tools/instance-manager/mysqlmanager.vcproj'
--- a/server-tools/instance-manager/mysqlmanager.vcproj 2007-03-19 15:18:10 +0000
+++ b/server-tools/instance-manager/mysqlmanager.vcproj 1970-01-01 00:00:00 +0000
@@ -1,382 +0,0 @@
-<?xml version="1.0" encoding="Windows-1252"?>
-<VisualStudioProject
- ProjectType="Visual C++"
- Version="7.10"
- Name="mysqlmanager"
- ProjectGUID="{6D524B3E-210A-4FCD-8D41-FEC0D21E83AC}"
- Keyword="Win32Proj">
- <Platforms>
- <Platform
- Name="Win32"/>
- </Platforms>
- <Configurations>
- <Configuration
- Name="Debug|Win32"
- OutputDirectory=".\debug_obj"
- IntermediateDirectory=".\debug_obj"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- OptimizeForProcessor="2"
- AdditionalIncludeDirectories="..\..\include,../../extra/yassl/include"
- PreprocessorDefinitions="MYSQL_INSTANCE_MANAGER;MYSQL_SERVER;_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;CONSOLE"
- MinimalRebuild="TRUE"
- ExceptionHandling="FALSE"
- BasicRuntimeChecks="3"
- RuntimeLibrary="1"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="4"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="wsock32.lib"
- OutputFile=".\debug/mysqlmanager.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile=".\debug/mysqlmanager.pdb"
- GenerateMapFile="TRUE"
- MapFileName=".\debug/mysqlmanager.map"
- SubSystem="1"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- <Configuration
- Name="Release|Win32"
- OutputDirectory=".\release_obj"
- IntermediateDirectory=".\release_obj"
- ConfigurationType="1"
- CharacterSet="2">
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- InlineFunctionExpansion="1"
- OptimizeForProcessor="2"
- AdditionalIncludeDirectories="..\..\include,../../extra/yassl/include"
- PreprocessorDefinitions="MYSQL_INSTANCE_MANAGER;MYSQL_SERVER;_WINDOWS;CONSOLE"
- ExceptionHandling="FALSE"
- RuntimeLibrary="0"
- UsePrecompiledHeader="0"
- WarningLevel="3"
- Detect64BitPortabilityProblems="TRUE"
- DebugInformationFormat="3"/>
- <Tool
- Name="VCCustomBuildTool"/>
- <Tool
- Name="VCLinkerTool"
- AdditionalDependencies="wsock32.lib"
- OutputFile=".\release/mysqlmanager.exe"
- LinkIncremental="1"
- GenerateDebugInformation="TRUE"
- ProgramDatabaseFile=".\release/mysqlmanager.pdb"
- GenerateMapFile="TRUE"
- MapFileName=".\release/mysqlmanager.map"
- SubSystem="1"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"/>
- <Tool
- Name="VCMIDLTool"/>
- <Tool
- Name="VCPostBuildEventTool"/>
- <Tool
- Name="VCPreBuildEventTool"/>
- <Tool
- Name="VCPreLinkEventTool"/>
- <Tool
- Name="VCResourceCompilerTool"/>
- <Tool
- Name="VCWebServiceProxyGeneratorTool"/>
- <Tool
- Name="VCXMLDataGeneratorTool"/>
- <Tool
- Name="VCWebDeploymentTool"/>
- <Tool
- Name="VCManagedWrapperGeneratorTool"/>
- <Tool
- Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
- </Configuration>
- </Configurations>
- <References>
- </References>
- <Files>
- <Filter
- Name="Source Files"
- Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx"
- UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}">
- <File
- RelativePath=".\buffer.cpp">
- </File>
- <File
- RelativePath="..\..\sql\client.c">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\command.cpp">
- </File>
- <File
- RelativePath=".\commands.cpp">
- </File>
- <File
- RelativePath="..\..\libmysql\get_password.c">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\guardian.cpp">
- </File>
- <File
- RelativePath=".\IMService.cpp">
- </File>
- <File
- RelativePath=".\instance.cpp">
- </File>
- <File
- RelativePath=".\instance_map.cpp">
- </File>
- <File
- RelativePath=".\instance_options.cpp">
- </File>
- <File
- RelativePath=".\listener.cpp">
- </File>
- <File
- RelativePath=".\log.cpp">
- </File>
- <File
- RelativePath=".\manager.cpp">
- </File>
- <File
- RelativePath=".\messages.cpp">
- </File>
- <File
- RelativePath="..\..\sql\mini_client_errors.c">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\mysql_connection.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\mysqlmanager.cpp">
- </File>
- <File
- RelativePath="..\..\sql\net_serv.cpp">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\options.cpp">
- </File>
- <File
- RelativePath="..\..\sql\pack.c">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\parse.cpp">
- </File>
- <File
- RelativePath=".\parse_output.cpp">
- </File>
- <File
- RelativePath="..\..\sql\password.c">
- <FileConfiguration
- Name="Debug|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32">
- <Tool
- Name="VCCLCompilerTool"
- ObjectFile="$(IntDir)/$(InputName)1.obj"/>
- </FileConfiguration>
- </File>
- <File
- RelativePath=".\priv.cpp">
- </File>
- <File
- RelativePath=".\protocol.cpp">
- </File>
- <File
- RelativePath="..\..\sql\sql_state.c">
- </File>
- <File
- RelativePath=".\thread_registry.cpp">
- </File>
- <File
- RelativePath=".\user_map.cpp">
- </File>
- <File
- RelativePath=".\WindowsService.cpp">
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="h;hpp;hxx;hm;inl;inc;xsd"
- UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
- <File
- RelativePath=".\buffer.h">
- </File>
- <File
- RelativePath=".\command.h">
- </File>
- <File
- RelativePath=".\commands.h">
- </File>
- <File
- RelativePath=".\factory.h">
- </File>
- <File
- RelativePath=".\guardian.h">
- </File>
- <File
- RelativePath=".\IMService.h">
- </File>
- <File
- RelativePath=".\instance.h">
- </File>
- <File
- RelativePath=".\instance_map.h">
- </File>
- <File
- RelativePath=".\instance_options.h">
- </File>
- <File
- RelativePath=".\listener.h">
- </File>
- <File
- RelativePath=".\log.h">
- </File>
- <File
- RelativePath=".\manager.h">
- </File>
- <File
- RelativePath=".\messages.h">
- </File>
- <File
- RelativePath=".\mysql_connection.h">
- </File>
- <File
- RelativePath=".\mysql_manager_error.h">
- </File>
- <File
- RelativePath=".\options.h">
- </File>
- <File
- RelativePath=".\parse.h">
- </File>
- <File
- RelativePath=".\parse_output.h">
- </File>
- <File
- RelativePath=".\portability.h">
- </File>
- <File
- RelativePath=".\priv.h">
- </File>
- <File
- RelativePath=".\protocol.h">
- </File>
- <File
- RelativePath=".\thread_registry.h">
- </File>
- <File
- RelativePath=".\user_map.h">
- </File>
- <File
- RelativePath=".\WindowsService.h">
- </File>
- </Filter>
- </Files>
- <Globals>
- </Globals>
-</VisualStudioProject>
=== modified file 'sql/field.cc'
--- a/sql/field.cc 2008-05-06 16:43:46 +0000
+++ b/sql/field.cc 2008-09-20 08:51:03 +0000
@@ -6992,8 +6992,18 @@ int Field_blob::store(const char *from,u
return 0;
}
- if (from == value.ptr())
+ /*
+ If the 'from' address is in the range of the temporary 'value'-
+ object we need to copy the content to a different location or it will be
+ invalidated when the 'value'-object is reallocated to make room for
+ the new character set.
+ */
+ if (from >= value.ptr() && from <= value.ptr()+value.length())
{
+ /*
+ If content of the 'from'-address is cached in the 'value'-object
+ it is possible that the content needs a character conversion.
+ */
uint32 dummy_offset;
if (!String::needs_conversion(length, cs, field_charset, &dummy_offset))
{
=== modified file 'sql/field.h'
--- a/sql/field.h 2008-05-06 16:43:46 +0000
+++ b/sql/field.h 2008-09-20 08:51:03 +0000
@@ -48,7 +48,8 @@ class Field
Field(const Item &); /* Prevent use of these */
void operator=(Field &);
public:
- static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
+ static void *operator new(size_t size) throw ()
+ { return (void*) sql_alloc((uint) size); }
static void operator delete(void *ptr_arg, size_t size) { TRASH(ptr_arg, size); }
char *ptr; // Position to field in record
@@ -137,7 +138,7 @@ public:
virtual bool eq(Field *field)
{
return (ptr == field->ptr && null_ptr == field->null_ptr &&
- null_bit == field->null_bit);
+ null_bit == field->null_bit && field->type() == type());
}
virtual bool eq_def(Field *field);
@@ -1212,8 +1213,16 @@ public:
class Field_blob :public Field_longstr {
protected:
+ /**
+ The number of bytes used to represent the length of the blob.
+ */
uint packlength;
- String value; // For temporaries
+
+ /**
+ The 'value'-object is a cache fronting the storage engine.
+ */
+ String value;
+
public:
Field_blob(char *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg,
enum utype unireg_check_arg, const char *field_name_arg,
@@ -1488,7 +1497,6 @@ public:
bool eq(Field *field)
{
return (Field::eq(field) &&
- field->type() == type() &&
bit_ptr == ((Field_bit *)field)->bit_ptr &&
bit_ofs == ((Field_bit *)field)->bit_ofs);
}
=== modified file 'sql/filesort.cc'
--- a/sql/filesort.cc 2008-03-12 07:59:15 +0000
+++ b/sql/filesort.cc 2008-07-15 14:13:21 +0000
@@ -402,6 +402,56 @@ static byte *read_buffpek_from_file(IO_C
DBUG_RETURN(tmp);
}
+#ifndef DBUG_OFF
+/*
+ Print a text, SQL-like record representation into dbug trace.
+
+ Note: this function is a work in progress: at the moment
+ - column read bitmap is ignored (can print garbage for unused columns)
+ - there is no quoting
+*/
+static void dbug_print_record(TABLE *table, bool print_rowid)
+{
+ char buff[1024];
+ Field **pfield;
+ String tmp(buff,sizeof(buff),&my_charset_bin);
+ DBUG_LOCK_FILE;
+
+ fprintf(DBUG_FILE, "record (");
+ for (pfield= table->field; *pfield ; pfield++)
+ fprintf(DBUG_FILE, "%s%s", (*pfield)->field_name, (pfield[1])? ", ":"");
+ fprintf(DBUG_FILE, ") = ");
+
+ fprintf(DBUG_FILE, "(");
+ for (pfield= table->field; *pfield ; pfield++)
+ {
+ Field *field= *pfield;
+
+ if (field->is_null())
+ fwrite("NULL", sizeof(char), 4, DBUG_FILE);
+
+ if (field->type() == MYSQL_TYPE_BIT)
+ (void) field->val_int_as_str(&tmp, 1);
+ else
+ field->val_str(&tmp);
+
+ fwrite(tmp.ptr(),sizeof(char),tmp.length(),DBUG_FILE);
+ if (pfield[1])
+ fwrite(", ", sizeof(char), 2, DBUG_FILE);
+ }
+ fprintf(DBUG_FILE, ")");
+ if (print_rowid)
+ {
+ fprintf(DBUG_FILE, " rowid ");
+ for (uint i=0; i < table->file->ref_length; i++)
+ {
+ fprintf(DBUG_FILE, "%x", (uchar)table->file->ref[i]);
+ }
+ }
+ fprintf(DBUG_FILE, "\n");
+ DBUG_UNLOCK_FILE;
+}
+#endif
/*
Search after sort_keys and write them into tempfile.
@@ -475,25 +525,23 @@ static ha_rows find_all_keys(SORTPARAM *
current_thd->variables.read_buff_size);
}
- READ_RECORD read_record_info;
if (quick_select)
{
if (select->quick->reset())
DBUG_RETURN(HA_POS_ERROR);
- init_read_record(&read_record_info, current_thd, select->quick->head,
- select, 1, 1);
}
for (;;)
{
if (quick_select)
{
- if ((error= read_record_info.read_record(&read_record_info)))
+ if ((error= select->quick->get_next()))
{
error= HA_ERR_END_OF_FILE;
break;
}
file->position(sort_form->record[0]);
+ DBUG_EXECUTE_IF("debug_filesort", dbug_print_record(sort_form, TRUE););
}
else /* Not quick-select */
{
@@ -550,15 +598,7 @@ static ha_rows find_all_keys(SORTPARAM *
if (thd->net.report_error)
break;
}
- if (quick_select)
- {
- /*
- index_merge quick select uses table->sort when retrieving rows, so free
- resoures it has allocated.
- */
- end_read_record(&read_record_info);
- }
- else
+ if (!quick_select)
{
(void) file->extra(HA_EXTRA_NO_CACHE); /* End cacheing of records */
if (!next_pos)
=== modified file 'sql/ha_federated.cc'
--- a/sql/ha_federated.cc 2008-07-14 20:16:37 +0000
+++ b/sql/ha_federated.cc 2008-10-20 11:31:29 +0000
@@ -405,6 +405,9 @@ static byte *federated_get_key(FEDERATED
bool federated_db_init()
{
DBUG_ENTER("federated_db_init");
+ /* the federated engine can be disabled by a command line option */
+ if (have_federated_db == SHOW_OPTION_DISABLED)
+ DBUG_RETURN(TRUE);
if (pthread_mutex_init(&federated_mutex, MY_MUTEX_INIT_FAST))
goto error;
if (hash_init(&federated_open_tables, &my_charset_bin, 32, 0, 0,
@@ -728,7 +731,10 @@ uint ha_federated::convert_row_to_intern
old_ptr= (my_ptrdiff_t) (record - table->record[0]);
(*field)->move_field(old_ptr);
if (!row[x])
+ {
(*field)->set_null();
+ (*field)->reset();
+ }
else
{
(*field)->set_notnull();
=== modified file 'sql/ha_innodb.cc'
--- a/sql/ha_innodb.cc 2008-03-29 07:52:16 +0000
+++ b/sql/ha_innodb.cc 2008-07-31 21:47:57 +0000
@@ -244,8 +244,10 @@ struct show_var_st innodb_status_variabl
(char*) &export_vars.innodb_buffer_pool_pages_flushed, SHOW_LONG},
{"buffer_pool_pages_free",
(char*) &export_vars.innodb_buffer_pool_pages_free, SHOW_LONG},
+#ifdef UNIV_DEBUG
{"buffer_pool_pages_latched",
(char*) &export_vars.innodb_buffer_pool_pages_latched, SHOW_LONG},
+#endif /* UNIV_DEBUG */
{"buffer_pool_pages_misc",
(char*) &export_vars.innodb_buffer_pool_pages_misc, SHOW_LONG},
{"buffer_pool_pages_total",
@@ -4250,7 +4252,7 @@ ha_innobase::rnd_pos(
int error;
uint keynr = active_index;
DBUG_ENTER("rnd_pos");
- DBUG_DUMP("key", (uchar *)pos, ref_length);
+ DBUG_DUMP("key", (uchar*) pos, ref_length);
statistic_increment(current_thd->status_var.ha_read_rnd_count,
&LOCK_status);
@@ -6882,6 +6884,12 @@ ha_innobase::innobase_read_and_init_auto
from a table when no table has been locked in ::external_lock(). */
prebuilt->trx->n_mysql_tables_in_use++;
+ /* Since we will perform a MySQL SELECT query to determine the
+ auto-inc value, set prebuilt->sql_stat_start = TRUE so that it
+ is performed like any normal SELECT, regardless of the context
+ we come here. */
+ prebuilt->sql_stat_start = TRUE;
+
error = index_last(table->record[1]);
prebuilt->trx->n_mysql_tables_in_use--;
=== modified file 'sql/item.cc'
--- a/sql/item.cc 2008-06-27 15:56:41 +0000
+++ b/sql/item.cc 2008-10-07 21:34:00 +0000
@@ -429,8 +429,11 @@ uint Item::decimal_precision() const
Item_result restype= result_type();
if ((restype == DECIMAL_RESULT) || (restype == INT_RESULT))
- return min(my_decimal_length_to_precision(max_length, decimals, unsigned_flag),
- DECIMAL_MAX_PRECISION);
+ {
+ uint prec=
+ my_decimal_length_to_precision(max_length, decimals, unsigned_flag);
+ return min(prec, DECIMAL_MAX_PRECISION);
+ }
return min(max_length, DECIMAL_MAX_PRECISION);
}
@@ -1214,10 +1217,12 @@ Item_name_const::Item_name_const(Item *n
if (!(valid_args= name_item->basic_const_item() &&
(value_item->basic_const_item() ||
((value_item->type() == FUNC_ITEM) &&
- (((Item_func *) value_item)->functype() ==
- Item_func::NEG_FUNC) &&
+ ((((Item_func *) value_item)->functype() ==
+ Item_func::COLLATE_FUNC) ||
+ ((((Item_func *) value_item)->functype() ==
+ Item_func::NEG_FUNC) &&
(((Item_func *) value_item)->key_item()->type() !=
- FUNC_ITEM)))))
+ FUNC_ITEM)))))))
my_error(ER_WRONG_ARGUMENTS, MYF(0), "NAME_CONST");
Item::maybe_null= TRUE;
}
@@ -1753,14 +1758,16 @@ Item_field::Item_field(THD *thd, Name_re
We need to copy db_name, table_name and field_name because they must
be allocated in the statement memory, not in table memory (the table
structure can go away and pop up again between subsequent executions
- of a prepared statement).
+ of a prepared statement or after the close_tables_for_reopen() call
+ in mysql_multi_update_prepare()).
*/
- if (thd->stmt_arena->is_stmt_prepare_or_first_sp_execute())
{
if (db_name)
orig_db_name= thd->strdup(db_name);
- orig_table_name= thd->strdup(table_name);
- orig_field_name= thd->strdup(field_name);
+ if (table_name)
+ orig_table_name= thd->strdup(table_name);
+ if (field_name)
+ orig_field_name= thd->strdup(field_name);
/*
We don't restore 'name' in cleanup because it's not changed
during execution. Still we need it to point to persistent
@@ -4217,7 +4224,12 @@ Item *Item_field::equal_fields_propagato
item= this;
else if (field && (field->flags & ZEROFILL_FLAG) && IS_NUM(field->type()))
{
- if (item && cmp_context != INT_RESULT)
+ /*
+ We don't need to zero-fill timestamp columns here because they will be
+ first converted to a string (in date/time format) and compared as such if
+ compared with another string.
+ */
+ if (item && field->type() != FIELD_TYPE_TIMESTAMP && cmp_context != INT_RESULT)
convert_zerofill_number_to_string(&item, (Field_num *)field);
else
item= this;
@@ -5761,6 +5773,10 @@ void Item_ref::make_field(Send_field *fi
field->table_name= table_name;
if (db_name)
field->db_name= db_name;
+ if (orig_field_name)
+ field->org_col_name= orig_field_name;
+ if (orig_table_name)
+ field->org_table_name= orig_table_name;
}
@@ -6039,6 +6055,13 @@ Item *Item_default_value::transform(Item
{
DBUG_ASSERT(!current_thd->is_stmt_prepare());
+ /*
+ If the value of arg is NULL, then this object represents a constant,
+ so further transformation is unnecessary (and impossible).
+ */
+ if (!arg)
+ return 0;
+
Item *new_item= arg->transform(transformer, args);
if (!new_item)
return 0;
@@ -6838,8 +6861,9 @@ bool Item_type_holder::join_types(THD *t
if (Field::result_merge_type(fld_type) == DECIMAL_RESULT)
{
decimals= min(max(decimals, item->decimals), DECIMAL_MAX_SCALE);
- int precision= min(max(prev_decimal_int_part, item->decimal_int_part())
- + decimals, DECIMAL_MAX_PRECISION);
+ int item_int_part= item->decimal_int_part();
+ int item_prec = max(prev_decimal_int_part, item_int_part) + decimals;
+ int precision= min(item_prec, DECIMAL_MAX_PRECISION);
unsigned_flag&= item->unsigned_flag;
max_length= my_decimal_precision_to_length(precision, decimals,
unsigned_flag);
=== modified file 'sql/item.h'
--- a/sql/item.h 2008-03-12 07:59:15 +0000
+++ b/sql/item.h 2008-08-15 20:13:27 +0000
@@ -439,9 +439,9 @@ class Item {
Item(const Item &); /* Prevent use of these */
void operator=(Item &);
public:
- static void *operator new(size_t size)
+ static void *operator new(size_t size) throw ()
{ return (void*) sql_alloc((uint) size); }
- static void *operator new(size_t size, MEM_ROOT *mem_root)
+ static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
{ return (void*) alloc_root(mem_root, (uint) size); }
static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
static void operator delete(void *ptr, MEM_ROOT *mem_root) {}
@@ -1817,7 +1817,7 @@ class Item_empty_string :public Item_str
public:
Item_empty_string(const char *header,uint length, CHARSET_INFO *cs= NULL) :
Item_string("",0, cs ? cs : &my_charset_utf8_general_ci)
- { name=(char*) header; max_length= cs ? length * cs->mbmaxlen : length; }
+ { name=(char*) header; max_length= length * collation.collation->mbmaxlen; }
void make_field(Send_field *field);
};
=== modified file 'sql/item_cmpfunc.cc'
--- a/sql/item_cmpfunc.cc 2008-07-14 20:16:37 +0000
+++ b/sql/item_cmpfunc.cc 2008-10-20 11:31:29 +0000
@@ -966,19 +966,24 @@ get_datetime_value(THD *thd, Item ***ite
1 if items are equal or both are null
0 otherwise
If is_nulls_eq is FALSE:
- -1 a < b or one of items is null
+ -1 a < b or at least one item is null
0 a == b
1 a > b
+ See the table:
+ is_nulls_eq | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
+ a_is_null | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
+ b_is_null | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
+ result | 1 | 0 | 0 |0/1|-1 |-1 |-1 |-1/0/1|
*/
int Arg_comparator::compare_datetime()
{
- bool is_null= FALSE;
+ bool a_is_null, b_is_null;
ulonglong a_value, b_value;
/* Get DATE/DATETIME/TIME value of the 'a' item. */
- a_value= (*get_value_func)(thd, &a, &a_cache, *b, &is_null);
- if (!is_nulls_eq && is_null)
+ a_value= (*get_value_func)(thd, &a, &a_cache, *b, &a_is_null);
+ if (!is_nulls_eq && a_is_null)
{
if (owner)
owner->null_value= 1;
@@ -986,14 +991,15 @@ int Arg_comparator::compare_datetime()
}
/* Get DATE/DATETIME/TIME value of the 'b' item. */
- b_value= (*get_value_func)(thd, &b, &b_cache, *a, &is_null);
- if (is_null)
+ b_value= (*get_value_func)(thd, &b, &b_cache, *a, &b_is_null);
+ if (a_is_null || b_is_null)
{
if (owner)
owner->null_value= is_nulls_eq ? 0 : 1;
- return is_nulls_eq ? 1 : -1;
+ return is_nulls_eq ? (a_is_null == b_is_null) : -1;
}
+ /* Here we have two not-NULL values. */
if (owner)
owner->null_value= 0;
@@ -2098,8 +2104,11 @@ Item_func_ifnull::fix_length_and_dec()
uint Item_func_ifnull::decimal_precision() const
{
- int max_int_part=max(args[0]->decimal_int_part(),args[1]->decimal_int_part());
- return min(max_int_part + decimals, DECIMAL_MAX_PRECISION);
+ int arg0_int_part= args[0]->decimal_int_part();
+ int arg1_int_part= args[1]->decimal_int_part();
+ int max_int_part= max(arg0_int_part, arg1_int_part);
+ int precision= max_int_part + decimals;
+ return min(precision, DECIMAL_MAX_PRECISION);
}
@@ -2281,8 +2290,9 @@ Item_func_if::fix_length_and_dec()
uint Item_func_if::decimal_precision() const
{
- int precision=(max(args[1]->decimal_int_part(),args[2]->decimal_int_part())+
- decimals);
+ int arg1_prec= args[1]->decimal_int_part();
+ int arg2_prec= args[2]->decimal_int_part();
+ int precision=max(arg1_prec,arg2_prec) + decimals;
return min(precision, DECIMAL_MAX_PRECISION);
}
@@ -4337,8 +4347,20 @@ void Item_func_like::cleanup()
#ifdef USE_REGEX
-bool
-Item_func_regex::regcomp(bool send_error)
+/**
+ @brief Compile regular expression.
+
+ @param[in] send_error send error message if any.
+
+ @details Make necessary character set conversion then
+ compile regular expression passed in the args[1].
+
+ @retval 0 success.
+ @retval 1 error occurred.
+ @retval -1 given null regular expression.
+ */
+
+int Item_func_regex::regcomp(bool send_error)
{
char buff[MAX_FIELD_WIDTH];
String tmp(buff,sizeof(buff),&my_charset_bin);
@@ -4346,12 +4368,12 @@ Item_func_regex::regcomp(bool send_error
int error;
if (args[1]->null_value)
- return TRUE;
+ return -1;
if (regex_compiled)
{
if (!stringcmp(res, &prev_regexp))
- return FALSE;
+ return 0;
prev_regexp.copy(*res);
my_regfree(&preg);
regex_compiled= 0;
@@ -4363,7 +4385,7 @@ Item_func_regex::regcomp(bool send_error
uint dummy_errors;
if (conv.copy(res->ptr(), res->length(), res->charset(),
regex_lib_charset, &dummy_errors))
- return TRUE;
+ return 1;
res= &conv;
}
@@ -4375,10 +4397,10 @@ Item_func_regex::regcomp(bool send_error
(void) my_regerror(error, &preg, buff, sizeof(buff));
my_error(ER_REGEXP_ERROR, MYF(0), buff);
}
- return TRUE;
+ return 1;
}
regex_compiled= 1;
- return FALSE;
+ return 0;
}
@@ -4416,13 +4438,14 @@ Item_func_regex::fix_fields(THD *thd, It
const_item_cache=args[0]->const_item() && args[1]->const_item();
if (!regex_compiled && args[1]->const_item())
{
- if (args[1]->null_value)
+ int comp_res= regcomp(TRUE);
+ if (comp_res == -1)
{ // Will always return NULL
maybe_null=1;
fixed= 1;
return FALSE;
}
- if (regcomp(TRUE))
+ else if (comp_res)
return TRUE;
regex_is_const= 1;
maybe_null= args[0]->maybe_null;
=== modified file 'sql/item_cmpfunc.h'
--- a/sql/item_cmpfunc.h 2008-01-23 15:03:58 +0000
+++ b/sql/item_cmpfunc.h 2008-09-05 08:30:01 +0000
@@ -1323,7 +1323,7 @@ class Item_func_regex :public Item_bool_
CHARSET_INFO *regex_lib_charset;
int regex_lib_flags;
String conv;
- bool regcomp(bool send_error);
+ int regcomp(bool send_error);
public:
Item_func_regex(Item *a,Item *b) :Item_bool_func(a,b),
regex_compiled(0),regex_is_const(0) {}
=== modified file 'sql/item_func.cc'
--- a/sql/item_func.cc 2008-07-14 20:16:37 +0000
+++ b/sql/item_func.cc 2008-10-20 11:31:29 +0000
@@ -1156,9 +1156,10 @@ my_decimal *Item_func_plus::decimal_op(m
void Item_func_additive_op::result_precision()
{
decimals= max(args[0]->decimals, args[1]->decimals);
- int max_int_part= max(args[0]->decimal_precision() - args[0]->decimals,
- args[1]->decimal_precision() - args[1]->decimals);
- int precision= min(max_int_part + 1 + decimals, DECIMAL_MAX_PRECISION);
+ int arg1_int= args[0]->decimal_precision() - args[0]->decimals;
+ int arg2_int= args[1]->decimal_precision() - args[1]->decimals;
+ int est_prec= max(arg1_int, arg2_int) + 1 + decimals;
+ int precision= min(est_prec, DECIMAL_MAX_PRECISION);
/* Integer operations keep unsigned_flag if one of arguments is unsigned */
if (result_type() == INT_RESULT)
@@ -1267,8 +1268,8 @@ void Item_func_mul::result_precision()
else
unsigned_flag= args[0]->unsigned_flag & args[1]->unsigned_flag;
decimals= min(args[0]->decimals + args[1]->decimals, DECIMAL_MAX_SCALE);
- int precision= min(args[0]->decimal_precision() + args[1]->decimal_precision(),
- DECIMAL_MAX_PRECISION);
+ uint est_prec = args[0]->decimal_precision() + args[1]->decimal_precision();
+ uint precision= min(est_prec, DECIMAL_MAX_PRECISION);
max_length= my_decimal_precision_to_length(precision, decimals,unsigned_flag);
}
@@ -1315,8 +1316,8 @@ my_decimal *Item_func_div::decimal_op(my
void Item_func_div::result_precision()
{
- uint precision=min(args[0]->decimal_precision() + prec_increment,
- DECIMAL_MAX_PRECISION);
+ uint arg_prec= args[0]->decimal_precision() + prec_increment;
+ uint precision=min(arg_prec, DECIMAL_MAX_PRECISION);
/* Integer operations keep unsigned_flag if one of arguments is unsigned */
if (result_type() == INT_RESULT)
unsigned_flag= args[0]->unsigned_flag | args[1]->unsigned_flag;
=== modified file 'sql/item_strfunc.cc'
--- a/sql/item_strfunc.cc 2008-05-13 15:27:46 +0000
+++ b/sql/item_strfunc.cc 2008-07-10 23:51:58 +0000
@@ -3258,7 +3258,8 @@ static char clock_seq_and_node_str[]="-0
/* number of 100-nanosecond intervals between
1582-10-15 00:00:00.00 and 1970-01-01 00:00:00.00 */
-#define UUID_TIME_OFFSET ((ulonglong) 141427 * 24 * 60 * 60 * 1000 * 10 )
+#define UUID_TIME_OFFSET ((ulonglong) 141427 * 24 * 60 * 60 * \
+ 1000 * 1000 * 10)
#define UUID_VERSION 0x1000
#define UUID_VARIANT 0x8000
@@ -3317,24 +3318,64 @@ String *Item_func_uuid::val_str(String *
set_clock_seq_str();
}
- ulonglong tv=my_getsystime() + UUID_TIME_OFFSET + nanoseq;
- if (unlikely(tv < uuid_time))
- set_clock_seq_str();
- else if (unlikely(tv == uuid_time))
+ ulonglong tv= my_getsystime() + UUID_TIME_OFFSET + nanoseq;
+
+ if (likely(tv > uuid_time))
{
- /* special protection from low-res system clocks */
- nanoseq++;
- tv++;
+ /*
+ Current time is ahead of last timestamp, as it should be.
+ If we "borrowed time", give it back, just as long as we
+ stay ahead of the previous timestamp.
+ */
+ if (nanoseq)
+ {
+ DBUG_ASSERT((tv > uuid_time) && (nanoseq > 0));
+ /*
+ -1 so we won't make tv= uuid_time for nanoseq >= (tv - uuid_time)
+ */
+ ulong delta= min(nanoseq, (ulong) (tv - uuid_time -1));
+ tv-= delta;
+ nanoseq-= delta;
+ }
}
else
{
- if (nanoseq)
+ if (unlikely(tv == uuid_time))
{
- tv-=nanoseq;
- nanoseq=0;
+ /*
+ For low-res system clocks. If several requests for UUIDs
+ end up on the same tick, we add a nano-second to make them
+ different.
+ ( current_timestamp + nanoseq * calls_in_this_period )
+ may end up > next_timestamp; this is OK. Nonetheless, we'll
+ try to unwind nanoseq when we get a chance to.
+ If nanoseq overflows, we'll start over with a new numberspace
+ (so the if() below is needed so we can avoid the ++tv and thus
+ match the follow-up if() if nanoseq overflows!).
+ */
+ if (likely(++nanoseq))
+ ++tv;
+ }
+
+ if (unlikely(tv <= uuid_time))
+ {
+ /*
+ If the admin changes the system clock (or due to Daylight
+ Saving Time), the system clock may be turned *back* so we
+ go through a period once more for which we already gave out
+ UUIDs. To avoid duplicate UUIDs despite potentially identical
+ times, we make a new random component.
+ We also come here if the nanoseq "borrowing" overflows.
+ In either case, we throw away any nanoseq borrowing since it's
+ irrelevant in the new numberspace.
+ */
+ set_clock_seq_str();
+ tv= my_getsystime() + UUID_TIME_OFFSET;
+ nanoseq= 0;
+ DBUG_PRINT("uuid",("making new numberspace"));
}
- DBUG_ASSERT(tv > uuid_time);
}
+
uuid_time=tv;
pthread_mutex_unlock(&LOCK_uuid_generator);
=== modified file 'sql/log.cc'
--- a/sql/log.cc 2008-03-21 14:10:15 +0000
+++ b/sql/log.cc 2008-07-24 12:28:21 +0000
@@ -1193,6 +1193,7 @@ int MYSQL_LOG::purge_logs(const char *to
int error;
bool exit_loop= 0;
LOG_INFO log_info;
+ THD *thd= current_thd;
DBUG_ENTER("purge_logs");
DBUG_PRINT("info",("to_log= %s",to_log));
@@ -1218,10 +1219,13 @@ int MYSQL_LOG::purge_logs(const char *to
/*
It's not fatal if we can't stat a log file that does not exist;
If we could not stat, we won't delete.
- */
- push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
- log_info.log_file_name);
+ */
+ if (thd)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
+ log_info.log_file_name);
+ }
sql_print_information("Failed to execute my_stat on file '%s'",
log_info.log_file_name);
my_errno= 0;
@@ -1231,13 +1235,24 @@ int MYSQL_LOG::purge_logs(const char *to
/*
Other than ENOENT are fatal
*/
- push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
- ER_BINLOG_PURGE_FATAL_ERR,
- "a problem with getting info on being purged %s; "
- "consider examining correspondence "
- "of your binlog index file "
- "to the actual binlog files",
- log_info.log_file_name);
+ if (thd)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
+ ER_BINLOG_PURGE_FATAL_ERR,
+ "a problem with getting info on being purged %s; "
+ "consider examining correspondence "
+ "of your binlog index file "
+ "to the actual binlog files",
+ log_info.log_file_name);
+ }
+ else
+ {
+ sql_print_information("Failed to delete log file '%s'; "
+ "consider examining correspondence "
+ "of your binlog index file "
+ "to the actual binlog files",
+ log_info.log_file_name);
+ }
error= LOG_INFO_FATAL;
goto err;
}
@@ -1254,22 +1269,36 @@ int MYSQL_LOG::purge_logs(const char *to
{
if (my_errno == ENOENT)
{
- push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
- log_info.log_file_name);
+ if (thd)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
+ log_info.log_file_name);
+ }
sql_print_information("Failed to delete file '%s'",
log_info.log_file_name);
my_errno= 0;
}
else
{
- push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
- ER_BINLOG_PURGE_FATAL_ERR,
- "a problem with deleting %s; "
- "consider examining correspondence "
- "of your binlog index file "
- "to the actual binlog files",
- log_info.log_file_name);
+ if (thd)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
+ ER_BINLOG_PURGE_FATAL_ERR,
+ "a problem with deleting %s; "
+ "consider examining correspondence "
+ "of your binlog index file "
+ "to the actual binlog files",
+ log_info.log_file_name);
+ }
+ else
+ {
+ sql_print_information("Failed to delete file '%s'; "
+ "consider examining correspondence "
+ "of your binlog index file "
+ "to the actual binlog files",
+ log_info.log_file_name);
+ }
error= LOG_INFO_FATAL;
goto err;
}
@@ -1316,7 +1345,8 @@ int MYSQL_LOG::purge_logs_before_date(ti
int error;
LOG_INFO log_info;
MY_STAT stat_area;
-
+ THD *thd= current_thd;
+
DBUG_ENTER("purge_logs_before_date");
pthread_mutex_lock(&LOCK_index);
@@ -1338,12 +1368,15 @@ int MYSQL_LOG::purge_logs_before_date(ti
{
/*
It's not fatal if we can't stat a log file that does not exist.
- */
- push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
- log_info.log_file_name);
- sql_print_information("Failed to execute my_stat on file '%s'",
- log_info.log_file_name);
+ */
+ if (thd)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
+ log_info.log_file_name);
+ }
+ sql_print_information("Failed to execute my_stat on file '%s'",
+ log_info.log_file_name);
my_errno= 0;
}
else
@@ -1351,13 +1384,21 @@ int MYSQL_LOG::purge_logs_before_date(ti
/*
Other than ENOENT are fatal
*/
- push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
- ER_BINLOG_PURGE_FATAL_ERR,
- "a problem with getting info on being purged %s; "
- "consider examining correspondence "
- "of your binlog index file "
- "to the actual binlog files",
- log_info.log_file_name);
+ if (thd)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
+ ER_BINLOG_PURGE_FATAL_ERR,
+ "a problem with getting info on being purged %s; "
+ "consider examining correspondence "
+ "of your binlog index file "
+ "to the actual binlog files",
+ log_info.log_file_name);
+ }
+ else
+ {
+ sql_print_information("Failed to delete log file '%s'",
+ log_info.log_file_name);
+ }
error= LOG_INFO_FATAL;
goto err;
}
@@ -1371,22 +1412,33 @@ int MYSQL_LOG::purge_logs_before_date(ti
if (my_errno == ENOENT)
{
/* It's not fatal even if we can't delete a log file */
- push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
- ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
- log_info.log_file_name);
+ if (thd)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
+ log_info.log_file_name);
+ }
sql_print_information("Failed to delete file '%s'",
log_info.log_file_name);
my_errno= 0;
}
else
{
- push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
- ER_BINLOG_PURGE_FATAL_ERR,
- "a problem with deleting %s; "
- "consider examining correspondence "
- "of your binlog index file "
- "to the actual binlog files",
- log_info.log_file_name);
+ if (thd)
+ {
+ push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
+ ER_BINLOG_PURGE_FATAL_ERR,
+ "a problem with deleting %s; "
+ "consider examining correspondence "
+ "of your binlog index file "
+ "to the actual binlog files",
+ log_info.log_file_name);
+ }
+ else
+ {
+ sql_print_information("Failed to delete log file '%s'",
+ log_info.log_file_name);
+ }
error= LOG_INFO_FATAL;
goto err;
}
=== modified file 'sql/mysql_priv.h'
--- a/sql/mysql_priv.h 2008-07-28 14:22:12 +0000
+++ b/sql/mysql_priv.h 2008-10-20 11:31:29 +0000
@@ -632,6 +632,7 @@ LEX_USER *create_definer(THD *thd, LEX_S
LEX_USER *get_current_user(THD *thd, LEX_USER *user);
bool check_string_length(LEX_STRING *str,
const char *err_msg, uint max_length);
+bool check_host_name(LEX_STRING *str);
enum enum_mysql_completiontype {
ROLLBACK_RELEASE=-2, ROLLBACK=1, ROLLBACK_AND_CHAIN=7,
@@ -1284,6 +1285,7 @@ extern char *mysql_data_home,server_vers
mysql_real_data_home[], *opt_mysql_tmpdir, mysql_charsets_dir[],
mysql_unpacked_real_data_home[],
def_ft_boolean_syntax[sizeof(ft_boolean_syntax)];
+extern int mysql_unpacked_real_data_home_len;
#define mysql_tmpdir (my_tmpdir(&mysql_tmpdir_list))
extern MY_TMPDIR mysql_tmpdir_list;
extern const char *command_name[];
@@ -1580,8 +1582,8 @@ ulonglong get_datetime_value(THD *thd, I
int test_if_number(char *str,int *res,bool allow_wildcards);
void change_byte(byte *,uint,char,char);
void init_read_record(READ_RECORD *info, THD *thd, TABLE *reg_form,
- SQL_SELECT *select,
- int use_record_cache, bool print_errors);
+ SQL_SELECT *select, int use_record_cache,
+ bool print_errors, bool disable_rr_cache);
void init_read_record_idx(READ_RECORD *info, THD *thd, TABLE *table,
bool print_error, uint idx);
void end_read_record(READ_RECORD *info);
@@ -1787,6 +1789,8 @@ inline void kill_delayed_threads(void) {
#define check_stack_overrun(A, B, C) 0
#endif
+extern "C" int test_if_data_home_dir(const char *dir);
+
#endif /* MYSQL_CLIENT */
#endif
=== modified file 'sql/mysqld.cc'
--- a/sql/mysqld.cc 2008-07-28 14:22:12 +0000
+++ b/sql/mysqld.cc 2008-10-20 11:31:29 +0000
@@ -480,6 +480,7 @@ char mysql_real_data_home[FN_REFLEN],
*opt_init_file, *opt_tc_log_file,
mysql_unpacked_real_data_home[FN_REFLEN],
def_ft_boolean_syntax[sizeof(ft_boolean_syntax)];
+int mysql_unpacked_real_data_home_len;
char *mysql_data_home= mysql_real_data_home;
const key_map key_map_empty(0);
key_map key_map_full(0); // Will be initialized later
@@ -6712,6 +6713,7 @@ static void mysql_init_variables(void)
/* Things reset to zero */
opt_skip_slave_start= opt_reckless_slave = 0;
mysql_home[0]= pidfile_name[0]= log_error_file[0]= 0;
+ myisam_test_invalid_symlink= test_if_data_home_dir;
opt_log= opt_slow_log= 0;
opt_update_log= 0;
opt_bin_log= 0;
@@ -7762,9 +7764,12 @@ static void fix_paths(void)
pos[1]= 0;
}
convert_dirname(mysql_real_data_home,mysql_real_data_home,NullS);
- (void) fn_format(buff, mysql_real_data_home, "", "",
- (MY_RETURN_REAL_PATH|MY_RESOLVE_SYMLINKS));
- (void) unpack_dirname(mysql_unpacked_real_data_home, buff);
+ my_realpath(mysql_unpacked_real_data_home, mysql_real_data_home, MYF(0));
+ mysql_unpacked_real_data_home_len= strlen(mysql_unpacked_real_data_home);
+ if (mysql_unpacked_real_data_home[mysql_unpacked_real_data_home_len-1] == FN_LIBCHAR)
+ --mysql_unpacked_real_data_home_len;
+
+
convert_dirname(language,language,NullS);
(void) my_load_path(mysql_home,mysql_home,""); // Resolve current dir
(void) my_load_path(mysql_real_data_home,mysql_real_data_home,mysql_home);
=== modified file 'sql/opt_range.cc'
--- a/sql/opt_range.cc 2008-03-28 18:02:27 +0000
+++ b/sql/opt_range.cc 2008-10-01 15:50:55 +0000
@@ -492,6 +492,7 @@ public:
keys_map.clear_all();
bzero((char*) keys,sizeof(keys));
}
+ SEL_TREE(SEL_TREE *arg, struct st_qsel_param *param);
SEL_ARG *keys[MAX_KEY];
key_map keys_map; /* bitmask of non-NULL elements in keys */
@@ -648,6 +649,7 @@ public:
trees_next(trees),
trees_end(trees + PREALLOCED_TREES)
{}
+ SEL_IMERGE (SEL_IMERGE *arg, PARAM *param);
int or_sel_tree(PARAM *param, SEL_TREE *tree);
int or_sel_tree_with_checks(PARAM *param, SEL_TREE *new_tree);
int or_sel_imerge_with_checks(PARAM *param, SEL_IMERGE* imerge);
@@ -764,6 +766,61 @@ int SEL_IMERGE::or_sel_imerge_with_check
}
+SEL_TREE::SEL_TREE(SEL_TREE *arg, PARAM *param): Sql_alloc()
+{
+ keys_map= arg->keys_map;
+ type= arg->type;
+ for (int idx= 0; idx < MAX_KEY; idx++)
+ {
+ if ((keys[idx]= arg->keys[idx]))
+ keys[idx]->increment_use_count(1);
+ }
+
+ List_iterator<SEL_IMERGE> it(arg->merges);
+ for (SEL_IMERGE *el= it++; el; el= it++)
+ {
+ SEL_IMERGE *merge= new SEL_IMERGE(el, param);
+ if (!merge || merge->trees == merge->trees_next)
+ {
+ merges.empty();
+ return;
+ }
+ merges.push_back (merge);
+ }
+}
+
+
+SEL_IMERGE::SEL_IMERGE (SEL_IMERGE *arg, PARAM *param) : Sql_alloc()
+{
+ uint elements= (arg->trees_end - arg->trees);
+ if (elements > PREALLOCED_TREES)
+ {
+ uint size= elements * sizeof (SEL_TREE **);
+ if (!(trees= (SEL_TREE **)alloc_root(param->mem_root, size)))
+ goto mem_err;
+ }
+ else
+ trees= &trees_prealloced[0];
+
+ trees_next= trees;
+ trees_end= trees + elements;
+
+ for (SEL_TREE **tree = trees, **arg_tree= arg->trees; tree < trees_end;
+ tree++, arg_tree++)
+ {
+ if (!(*tree= new SEL_TREE(*arg_tree, param)))
+ goto mem_err;
+ }
+
+ return;
+
+mem_err:
+ trees= &trees_prealloced[0];
+ trees_next= trees;
+ trees_end= trees;
+}
+
+
/*
Perform AND operation on two index_merge lists and store result in *im1.
*/
@@ -823,10 +880,23 @@ int imerge_list_or_tree(PARAM *param,
{
SEL_IMERGE *imerge;
List_iterator<SEL_IMERGE> it(*im1);
+ bool tree_used= FALSE;
while ((imerge= it++))
{
- if (imerge->or_sel_tree_with_checks(param, tree))
+ SEL_TREE *or_tree;
+ if (tree_used)
+ {
+ or_tree= new SEL_TREE (tree, param);
+ if (!or_tree ||
+ (or_tree->keys_map.is_clear_all() && or_tree->merges.is_empty()))
+ return FALSE;
+ }
+ else
+ or_tree= tree;
+
+ if (imerge->or_sel_tree_with_checks(param, or_tree))
it.remove();
+ tree_used= TRUE;
}
return im1->is_empty();
}
@@ -4238,6 +4308,8 @@ get_mm_parts(PARAM *param, COND *cond_fu
}
}
+ if (tree && tree->merges.is_empty() && tree->keys_map.is_clear_all())
+ tree= NULL;
DBUG_RETURN(tree);
}
@@ -6494,7 +6566,7 @@ int QUICK_INDEX_MERGE_SELECT::read_keys_
QUICK_RANGE_SELECT* cur_quick;
int result;
Unique *unique;
- DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::prepare_unique");
+ DBUG_ENTER("QUICK_INDEX_MERGE_SELECT::read_keys_and_merge");
/* We're going to just read rowids. */
if (head->file->extra(HA_EXTRA_KEYREAD))
@@ -6565,13 +6637,17 @@ int QUICK_INDEX_MERGE_SELECT::read_keys_
}
- /* ok, all row ids are in Unique */
+ /*
+ Ok all rowids are in the Unique now. The next call will initialize
+ head->sort structure so it can be used to iterate through the rowids
+ sequence.
+ */
result= unique->get(head);
delete unique;
doing_pk_scan= FALSE;
- /* start table scan */
- init_read_record(&read_record, thd, head, (SQL_SELECT*) 0, 1, 1);
- /* index_merge currently doesn't support "using index" at all */
+
+ /* Start the rnd_pos() scan. */
+ init_read_record(&read_record, thd, head, (SQL_SELECT*) 0, 1 , 1, TRUE);
head->file->extra(HA_EXTRA_NO_KEYREAD);
DBUG_RETURN(result);
@@ -6601,6 +6677,7 @@ int QUICK_INDEX_MERGE_SELECT::get_next()
{
result= HA_ERR_END_OF_FILE;
end_read_record(&read_record);
+ free_io_cache(head);
/* All rows from Unique have been retrieved, do a clustered PK scan */
if (pk_quick_select)
{
@@ -7094,9 +7171,17 @@ bool QUICK_RANGE_SELECT::row_in_ranges()
QUICK_SELECT_DESC::QUICK_SELECT_DESC(QUICK_RANGE_SELECT *q,
uint used_key_parts_arg)
- : QUICK_RANGE_SELECT(*q), rev_it(rev_ranges)
+ : QUICK_RANGE_SELECT(*q), rev_it(rev_ranges),
+ used_key_parts (used_key_parts_arg)
{
QUICK_RANGE *r;
+ /*
+ Use default MRR implementation for reverse scans. No table engine
+ currently can do an MRR scan with output in reverse index order.
+ */
+ multi_range_length= 0;
+ multi_range= NULL;
+ multi_range_buff= NULL;
QUICK_RANGE **pr= (QUICK_RANGE**)ranges.buffer;
QUICK_RANGE **end_range= pr + ranges.elements;
@@ -7136,10 +7221,11 @@ int QUICK_SELECT_DESC::get_next()
int result;
if (last_range)
{ // Already read through key
- result = ((last_range->flag & EQ_RANGE)
- ? file->index_next_same(record, (byte*) last_range->min_key,
- last_range->min_length) :
- file->index_prev(record));
+ result = ((last_range->flag & EQ_RANGE &&
+ used_key_parts <= head->key_info[index].key_parts) ?
+ file->index_next_same(record, (byte*) last_range->min_key,
+ last_range->min_length) :
+ file->index_prev(record));
if (!result)
{
if (cmp_prev(*rev_it.ref()) == 0)
@@ -7163,7 +7249,9 @@ int QUICK_SELECT_DESC::get_next()
continue;
}
- if (last_range->flag & EQ_RANGE)
+ if (last_range->flag & EQ_RANGE &&
+ used_key_parts <= head->key_info[index].key_parts)
+
{
result= file->index_read(record, (byte*) last_range->max_key,
last_range->max_length, HA_READ_KEY_EXACT);
@@ -7171,6 +7259,8 @@ int QUICK_SELECT_DESC::get_next()
else
{
DBUG_ASSERT(last_range->flag & NEAR_MAX ||
+ (last_range->flag & EQ_RANGE &&
+ used_key_parts > head->key_info[index].key_parts) ||
range_reads_after_key(last_range));
result=file->index_read(record, (byte*) last_range->max_key,
last_range->max_length,
@@ -7268,54 +7358,6 @@ bool QUICK_SELECT_DESC::range_reads_afte
}
-/* TRUE if we are reading over a key that may have a NULL value */
-
-#ifdef NOT_USED
-bool QUICK_SELECT_DESC::test_if_null_range(QUICK_RANGE *range_arg,
- uint used_key_parts)
-{
- uint offset, end;
- KEY_PART *key_part = key_parts,
- *key_part_end= key_part+used_key_parts;
-
- for (offset= 0, end = min(range_arg->min_length, range_arg->max_length) ;
- offset < end && key_part != key_part_end ;
- offset+= key_part++->store_length)
- {
- if (!memcmp((char*) range_arg->min_key+offset,
- (char*) range_arg->max_key+offset,
- key_part->store_length))
- continue;
-
- if (key_part->null_bit && range_arg->min_key[offset])
- return 1; // min_key is null and max_key isn't
- // Range doesn't cover NULL. This is ok if there is no more null parts
- break;
- }
- /*
- If the next min_range is > NULL, then we can use this, even if
- it's a NULL key
- Example: SELECT * FROM t1 WHERE a = 2 AND b >0 ORDER BY a DESC,b DESC;
-
- */
- if (key_part != key_part_end && key_part->null_bit)
- {
- if (offset >= range_arg->min_length || range_arg->min_key[offset])
- return 1; // Could be null
- key_part++;
- }
- /*
- If any of the key parts used in the ORDER BY could be NULL, we can't
- use the key to sort the data.
- */
- for (; key_part != key_part_end ; key_part++)
- if (key_part->null_bit)
- return 1; // Covers null part
- return 0;
-}
-#endif
-
-
void QUICK_RANGE_SELECT::add_info_string(String *str)
{
KEY *key_info= head->key_info + index;
=== modified file 'sql/opt_range.h'
--- a/sql/opt_range.h 2007-02-21 12:07:08 +0000
+++ b/sql/opt_range.h 2008-08-25 17:02:54 +0000
@@ -329,14 +329,7 @@ public:
void dbug_dump(int indent, bool verbose);
#endif
private:
- /* Used only by QUICK_SELECT_DESC */
- QUICK_RANGE_SELECT(const QUICK_RANGE_SELECT& org) : QUICK_SELECT_I()
- {
- bcopy(&org, this, sizeof(*this));
- multi_range_length= 0;
- multi_range= NULL;
- multi_range_buff= NULL;
- }
+ /* Default copy ctor used by QUICK_SELECT_DESC */
};
@@ -667,12 +660,10 @@ public:
int get_type() { return QS_TYPE_RANGE_DESC; }
private:
bool range_reads_after_key(QUICK_RANGE *range);
-#ifdef NOT_USED
- bool test_if_null_range(QUICK_RANGE *range, uint used_key_parts);
-#endif
int reset(void) { rev_it.rewind(); return QUICK_RANGE_SELECT::reset(); }
List<QUICK_RANGE> rev_ranges;
List_iterator<QUICK_RANGE> rev_it;
+ uint used_key_parts;
};
=== modified file 'sql/parse_file.cc'
--- a/sql/parse_file.cc 2007-04-06 14:56:39 +0000
+++ b/sql/parse_file.cc 2008-09-30 12:50:28 +0000
@@ -21,6 +21,9 @@
#include <my_sys.h>
#include <my_dir.h>
+/* from sql_db.cc */
+extern long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path);
+
/*
write string with escaping
@@ -265,8 +268,9 @@ sql_create_definition_file(const LEX_STR
DBUG_RETURN(TRUE);
}
- // archive copies management
path[path_end]='\0';
+#ifdef FRM_ARCHIVE
+ // archive copies management: disabled unused feature (see bug #17823).
if (!access(path, F_OK))
{
if (old_version != ULONGLONG_MAX && max_versions != 0)
@@ -313,6 +317,7 @@ sql_create_definition_file(const LEX_STR
}
}
}
+#endif//FRM_ARCHIVE
{
// rename temporary file
@@ -337,6 +342,7 @@ err_w_file:
SYNOPSIS
rename_in_schema_file
+ thd thread handler
schema name of given schema
old_name original file name
new_name new file name
@@ -348,7 +354,8 @@ err_w_file:
1 - Error (only if renaming of frm failed)
*/
-my_bool rename_in_schema_file(const char *schema, const char *old_name,
+my_bool rename_in_schema_file(THD *thd,
+ const char *schema, const char *old_name,
const char *new_name, ulonglong revision,
uint num_view_backups)
{
@@ -365,10 +372,11 @@ my_bool rename_in_schema_file(const char
if (my_rename(old_path, new_path, MYF(MY_WME)))
return 1;
- /* check if arc_dir exists */
+ /* check if arc_dir exists: disabled unused feature (see bug #17823). */
strxnmov(arc_path, FN_REFLEN, mysql_data_home, "/", schema, "/arc", NullS);
(void) unpack_filename(arc_path, arc_path);
+#ifdef FRM_ARCHIVE
if (revision > 0 && !access(arc_path, F_OK))
{
ulonglong limit= ((revision > num_view_backups) ?
@@ -384,6 +392,16 @@ my_bool rename_in_schema_file(const char
my_rename(old_path, new_path, MYF(0));
}
}
+#else//FRM_ARCHIVE
+ { // remove obsolete 'arc' directory and files if any
+ MY_DIR *new_dirp;
+ if ((new_dirp = my_dir(arc_path, MYF(MY_DONT_SORT))))
+ {
+ DBUG_PRINT("my",("Archive subdir found: %s", arc_path));
+ (void) mysql_rm_arc_files(thd, new_dirp, arc_path);
+ }
+ }
+#endif//FRM_ARCHIVE
return 0;
}
=== modified file 'sql/parse_file.h'
--- a/sql/parse_file.h 2006-12-23 19:17:15 +0000
+++ b/sql/parse_file.h 2008-09-30 12:50:28 +0000
@@ -82,8 +82,9 @@ my_bool
sql_create_definition_file(const LEX_STRING *dir, const LEX_STRING *file_name,
const LEX_STRING *type,
gptr base, File_option *parameters, uint versions);
-my_bool rename_in_schema_file(const char *schema, const char *old_name,
- const char *new_name, ulonglong revision,
+my_bool rename_in_schema_file(THD *thd,
+ const char *schema, const char *old_name,
+ const char *new_name, ulonglong revision,
uint num_view_backups);
class File_parser: public Sql_alloc
=== modified file 'sql/records.cc'
--- a/sql/records.cc 2007-10-17 16:08:58 +0000
+++ b/sql/records.cc 2008-07-15 14:13:21 +0000
@@ -72,11 +72,47 @@ void init_read_record_idx(READ_RECORD *i
}
-/* init struct for read with info->read_record */
+/*
+ init struct for read with info->read_record
+
+ SYNOPSIS
+ init_read_record()
+ info OUT read structure
+ thd Thread handle
+ table Table the data [originally] comes from.
+ select SQL_SELECT structure. We may select->quick or
+ select->file as data source
+ use_record_cache Call file->extra_opt(HA_EXTRA_CACHE,...)
+ if we're going to do sequential read and some
+ additional conditions are satisfied.
+ print_error Copy this to info->print_error
+ disable_rr_cache Don't use rr_from_cache (used by sort-union
+ index-merge which produces rowid sequences that
+ are already ordered)
+
+ DESCRIPTION
+ This function sets up reading data via one of the methods:
+
+ rr_unpack_from_tempfile Unpack full records from sequential file
+ rr_unpack_from_buffer ... or from buffer
+
+ rr_from_tempfile Read rowids from tempfile and get full records
+ with handler->rnd_pos() calls.
+ rr_from_pointers ... or get rowids from buffer
+
+ rr_from_cache Read a bunch of rowids from file, sort them,
+ get records in rowid order, return, repeat.
+
+ rr_quick Get data from QUICK_*_SELECT
+
+ rr_sequential Sequentially scan the table using
+ handler->rnd_next() calls
+*/
void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
SQL_SELECT *select,
- int use_record_cache, bool print_error)
+ int use_record_cache, bool print_error,
+ bool disable_rr_cache)
{
IO_CACHE *tempfile;
DBUG_ENTER("init_read_record");
@@ -121,7 +157,8 @@ void init_read_record(READ_RECORD *info,
it doesn't make sense to use cache - we don't read from the table
and table->sort.io_cache is read sequentially
*/
- if (!table->sort.addon_field &&
+ if (!disable_rr_cache &&
+ !table->sort.addon_field &&
! (specialflag & SPECIAL_SAFE_MODE) &&
thd->variables.read_rnd_buff_size &&
!(table->file->table_flags() & HA_FAST_KEY_READ) &&
=== modified file 'sql/share/errmsg.txt'
--- a/sql/share/errmsg.txt 2008-04-10 00:34:38 +0000
+++ b/sql/share/errmsg.txt 2008-07-29 13:58:15 +0000
@@ -4737,7 +4737,7 @@ ER_SLAVE_IGNORED_TABLE
swe "Slav SQL tr�n ignorerade fr�n pga en replicate-*-table regel"
ER_INCORRECT_GLOBAL_LOCAL_VAR
eng "Variable '%-.64s' is a %s variable"
- serbian "Incorrect foreign key definition for '%-.64s': %s"
+ serbian "Promenljiva '%-.64s' je %s promenljiva"
ger "Variable '%-.64s' ist eine %s-Variable"
spa "Variable '%-.64s' es una %s variable"
swe "Variabel '%-.64s' �av typ %s"
=== modified file 'sql/sp.cc'
--- a/sql/sp.cc 2008-05-15 23:13:24 +0000
+++ b/sql/sp.cc 2008-07-14 21:41:30 +0000
@@ -443,11 +443,12 @@ db_load_routine(THD *thd, int type, sp_n
goto end;
{
- Lex_input_stream lip(thd, defstr.c_ptr(), defstr.length());
- thd->m_lip= &lip;
+ Parser_state parser_state(thd, defstr.c_ptr(), defstr.length());
+ thd->m_parser_state= &parser_state;
lex_start(thd);
thd->spcont= NULL;
ret= MYSQLparse(thd);
+ thd->m_parser_state= NULL;
if (ret == 0)
{
=== modified file 'sql/sp_head.cc'
--- a/sql/sp_head.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sp_head.cc 2008-10-20 11:31:29 +0000
@@ -123,6 +123,9 @@ sp_get_item_value(THD *thd, Item *item,
if (cs->escape_with_backslash_is_dangerous)
buf.append(' ');
append_query_string(cs, result, &buf);
+ buf.append(" COLLATE '");
+ buf.append(item->collation.collation->name);
+ buf.append('\'');
str->copy(buf);
return str;
@@ -446,7 +449,7 @@ sp_head::operator new(size_t size) throw
init_sql_alloc(&own_root, MEM_ROOT_BLOCK_SIZE, MEM_ROOT_PREALLOC);
sp= (sp_head *) alloc_root(&own_root, size);
if (sp == NULL)
- return NULL;
+ DBUG_RETURN(NULL);
sp->main_mem_root= own_root;
DBUG_PRINT("info", ("mem_root 0x%lx", (ulong) &sp->mem_root));
DBUG_RETURN(sp);
@@ -591,7 +594,7 @@ sp_head::init_strings(THD *thd, LEX *lex
const char *endp; /* Used to trim the end */
/* During parsing, we must use thd->mem_root */
MEM_ROOT *root= thd->mem_root;
- Lex_input_stream *lip=thd->m_lip;
+ Lex_input_stream *lip= & thd->m_parser_state->m_lip;
if (m_param_begin && m_param_end)
{
@@ -1787,7 +1790,11 @@ sp_head::execute_procedure(THD *thd, Lis
we'll leave it here.
*/
if (!thd->in_sub_stmt)
- close_thread_tables(thd, 0, 0);
+ {
+ thd->lex->unit.cleanup();
+ close_thread_tables(thd);
+ thd->rollback_item_tree_changes();
+ }
DBUG_PRINT("info",(" %.*s: eval args done", m_name.length, m_name.str));
}
=== modified file 'sql/sql_acl.cc'
--- a/sql/sql_acl.cc 2008-03-28 09:26:40 +0000
+++ b/sql/sql_acl.cc 2008-07-29 13:37:09 +0000
@@ -205,7 +205,8 @@ static my_bool acl_load(THD *thd, TABLE_
acl_cache->clear(1); // Clear locked hostname cache
init_sql_alloc(&mem, ACL_ALLOC_BLOCK_SIZE, 0);
- init_read_record(&read_record_info,thd,table= tables[0].table,NULL,1,0);
+ init_read_record(&read_record_info,thd,table= tables[0].table,NULL,1,0,
+ FALSE);
VOID(my_init_dynamic_array(&acl_hosts,sizeof(ACL_HOST),20,50));
while (!(read_record_info.read_record(&read_record_info)))
{
@@ -253,7 +254,7 @@ static my_bool acl_load(THD *thd, TABLE_
end_read_record(&read_record_info);
freeze_size(&acl_hosts);
- init_read_record(&read_record_info,thd,table=tables[1].table,NULL,1,0);
+ init_read_record(&read_record_info,thd,table=tables[1].table,NULL,1,0,FALSE);
VOID(my_init_dynamic_array(&acl_users,sizeof(ACL_USER),50,100));
password_length= table->field[2]->field_length /
table->field[2]->charset()->mbmaxlen;
@@ -426,7 +427,7 @@ static my_bool acl_load(THD *thd, TABLE_
end_read_record(&read_record_info);
freeze_size(&acl_users);
- init_read_record(&read_record_info,thd,table=tables[2].table,NULL,1,0);
+ init_read_record(&read_record_info,thd,table=tables[2].table,NULL,1,0,FALSE);
VOID(my_init_dynamic_array(&acl_dbs,sizeof(ACL_DB),50,100));
while (!(read_record_info.read_record(&read_record_info)))
{
@@ -5429,7 +5430,6 @@ bool mysql_drop_user(THD *thd, List <LEX
while ((tmp_user_name= user_list++))
{
- user_name= get_current_user(thd, tmp_user_name);
if (!(user_name= get_current_user(thd, tmp_user_name)))
{
result= TRUE;
=== modified file 'sql/sql_base.cc'
--- a/sql/sql_base.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_base.cc 2008-10-20 11:31:29 +0000
@@ -3617,8 +3617,21 @@ find_field_in_natural_join(THD *thd, TAB
{
/* This is a base table. */
DBUG_ASSERT(nj_col->view_field == NULL);
- DBUG_ASSERT(nj_col->table_ref->table == nj_col->table_field->table);
- found_field= nj_col->table_field;
+ /*
+ This fix_fields is not necessary (initially this item is fixed by
+ the Item_field constructor; after reopen_tables the Item_func_eq
+ calls fix_fields on that item), it's just a check during table
+ reopening for columns that was dropped by the concurrent connection.
+ */
+ if (!nj_col->table_field->fixed &&
+ nj_col->table_field->fix_fields(thd, (Item **)&nj_col->table_field))
+ {
+ DBUG_PRINT("info", ("column '%s' was dropped by the concurrent connection",
+ nj_col->table_field->name));
+ DBUG_RETURN(NULL);
+ }
+ DBUG_ASSERT(nj_col->table_ref->table == nj_col->table_field->field->table);
+ found_field= nj_col->table_field->field;
update_field_dependencies(thd, found_field, nj_col->table_ref->table);
}
@@ -4450,7 +4463,7 @@ mark_common_columns(THD *thd, TABLE_LIST
const char *field_name_1;
/* true if field_name_1 is a member of using_fields */
bool is_using_column_1;
- if (!(nj_col_1= it_1.get_or_create_column_ref(leaf_1)))
+ if (!(nj_col_1= it_1.get_or_create_column_ref(thd, leaf_1)))
goto err;
field_name_1= nj_col_1->name();
is_using_column_1= using_fields &&
@@ -4471,7 +4484,7 @@ mark_common_columns(THD *thd, TABLE_LIST
{
Natural_join_column *cur_nj_col_2;
const char *cur_field_name_2;
- if (!(cur_nj_col_2= it_2.get_or_create_column_ref(leaf_2)))
+ if (!(cur_nj_col_2= it_2.get_or_create_column_ref(thd, leaf_2)))
goto err;
cur_field_name_2= cur_nj_col_2->name();
DBUG_PRINT ("info", ("cur_field_name_2=%s.%s",
@@ -4957,15 +4970,24 @@ static bool setup_natural_join_row_types
TABLE_LIST *left_neighbor;
/* Table reference to the right of the current. */
TABLE_LIST *right_neighbor= NULL;
+ bool save_first_natural_join_processing=
+ context->select_lex->first_natural_join_processing;
+
+ context->select_lex->first_natural_join_processing= FALSE;
/* Note that tables in the list are in reversed order */
for (left_neighbor= table_ref_it++; left_neighbor ; )
{
table_ref= left_neighbor;
left_neighbor= table_ref_it++;
- /* For stored procedures do not redo work if already done. */
- if (context->select_lex->first_execution)
+ /*
+ Do not redo work if already done:
+ 1) for stored procedures,
+ 2) for multitable update after lock failure and table reopening.
+ */
+ if (save_first_natural_join_processing)
{
+ context->select_lex->first_natural_join_processing= FALSE;
if (store_top_level_join_columns(thd, table_ref,
left_neighbor, right_neighbor))
return TRUE;
=== modified file 'sql/sql_cache.cc'
--- a/sql/sql_cache.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_cache.cc 2008-10-20 11:31:29 +0000
@@ -2528,7 +2528,7 @@ my_bool Query_cache::register_all_tables
tmp++)
unlink_table(tmp);
}
- return (n);
+ return test(n);
}
/*
=== modified file 'sql/sql_class.cc'
--- a/sql/sql_class.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_class.cc 2008-10-20 11:31:29 +0000
@@ -191,7 +191,8 @@ THD::THD()
rand_used(0), time_zone_used(0),
last_insert_id_used(0), last_insert_id_used_bin_log(0), insert_id_used(0),
clear_next_insert_id(0), in_lock_tables(0), bootstrap(0),
- derived_tables_processing(FALSE), spcont(NULL), m_lip(NULL)
+ derived_tables_processing(FALSE), spcont(NULL),
+ m_parser_state(NULL)
{
ulong tmp;
@@ -990,6 +991,12 @@ sql_exchange::sql_exchange(char *name,bo
cs= NULL;
}
+bool sql_exchange::escaped_given(void)
+{
+ return escaped != &default_escaped;
+}
+
+
bool select_send::send_fields(List<Item> &list, uint flags)
{
bool res;
@@ -1250,8 +1257,11 @@ select_export::prepare(List<Item> &list,
exchange->line_term=exchange->field_term; // Use this if it exists
field_sep_char= (exchange->enclosed->length() ?
(int) (uchar) (*exchange->enclosed)[0] : field_term_char);
- escape_char= (exchange->escaped->length() ?
- (int) (uchar) (*exchange->escaped)[0] : -1);
+ if (exchange->escaped->length() && (exchange->escaped_given() ||
+ !(thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)))
+ escape_char= (int) (uchar) (*exchange->escaped)[0];
+ else
+ escape_char= -1;
is_ambiguous_field_sep= test(strchr(ESCAPE_CHARS, field_sep_char));
is_unsafe_field_sep= test(strchr(NUMERIC_CHARS, field_sep_char));
line_sep_char= (exchange->line_term->length() ?
=== modified file 'sql/sql_class.h'
--- a/sql/sql_class.h 2008-07-10 18:50:07 +0000
+++ b/sql/sql_class.h 2008-10-20 11:31:29 +0000
@@ -28,7 +28,7 @@ class Slave_log_event;
class Format_description_log_event;
class sp_rcontext;
class sp_cache;
-class Lex_input_stream;
+class Parser_state;
enum enum_enable_or_disable { LEAVE_AS_IS, ENABLE, DISABLE };
enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY, RNEXT_SAME };
@@ -1583,13 +1583,11 @@ public:
} binlog_evt_union;
/**
- Character input stream consumed by the lexical analyser,
- used during parsing.
- Note that since the parser is not re-entrant, we keep only one input
- stream here. This member is valid only when executing code during parsing,
- and may point to invalid memory after that.
+ Internal parser state.
+ Note that since the parser is not re-entrant, we keep only one parser
+ state here. This member is valid only when executing code during parsing.
*/
- Lex_input_stream *m_lip;
+ Parser_state *m_parser_state;
THD();
~THD();
@@ -1906,6 +1904,7 @@ public:
ulong skip_lines;
CHARSET_INFO *cs;
sql_exchange(char *name,bool dumpfile_flag);
+ bool escaped_given(void);
};
#include "log_event.h"
=== modified file 'sql/sql_cursor.cc'
--- a/sql/sql_cursor.cc 2008-02-20 19:45:24 +0000
+++ b/sql/sql_cursor.cc 2008-08-11 09:40:54 +0000
@@ -111,7 +111,8 @@ class Select_materialize: public select_
select_result *result; /* the result object of the caller (PS or SP) */
public:
Materialized_cursor *materialized_cursor;
- Select_materialize(select_result *result_arg) :result(result_arg) {}
+ Select_materialize(select_result *result_arg) :result(result_arg),
+ materialized_cursor(0) {}
virtual bool send_fields(List<Item> &list, uint flags);
};
@@ -155,6 +156,7 @@ int mysql_open_cursor(THD *thd, uint fla
if (! (sensitive_cursor= new (thd->mem_root) Sensitive_cursor(thd, result)))
{
delete result_materialize;
+ result_materialize= NULL;
return 1;
}
@@ -212,6 +214,7 @@ int mysql_open_cursor(THD *thd, uint fla
if ((rc= materialized_cursor->open(0)))
{
delete materialized_cursor;
+ materialized_cursor= NULL;
goto err_open;
}
=== modified file 'sql/sql_db.cc'
--- a/sql/sql_db.cc 2008-03-21 15:23:17 +0000
+++ b/sql/sql_db.cc 2008-09-30 12:50:28 +0000
@@ -35,7 +35,7 @@ static long mysql_rm_known_files(THD *th
const char *db, const char *path, uint level,
TABLE_LIST **dropped_tables);
-static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path);
+long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path);
static my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error);
/* Database options hash */
static HASH dboptions;
@@ -906,7 +906,11 @@ static long mysql_rm_known_files(THD *th
else if (file->name[0] == 'a' && file->name[1] == 'r' &&
file->name[2] == 'c' && file->name[3] == '\0')
{
- /* .frm archive */
+ /* .frm archive:
+ Those archives are obsolete, but following code should
+ exist to remove existent "arc" directories.
+ See #ifdef FRM_ARCHIVE directives for obsolete code.
+ */
char newpath[FN_REFLEN];
MY_DIR *new_dirp;
strxmov(newpath, org_path, "/", "arc", NullS);
@@ -1061,9 +1065,13 @@ static my_bool rm_dir_w_symlink(const ch
RETURN
> 0 number of removed files
-1 error
+
+ NOTE
+ A support of "arc" directories is obsolete, however this
+ function should exist to remove existent "arc" directories.
+ See #ifdef FRM_ARCHIVE directives for obsolete code.
*/
-static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp,
- const char *org_path)
+long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path)
{
long deleted= 0;
ulong found_other_files= 0;
@@ -1105,6 +1113,7 @@ static long mysql_rm_arc_files(THD *thd,
{
goto err;
}
+ deleted++;
}
if (thd->killed)
goto err;
=== modified file 'sql/sql_delete.cc'
--- a/sql/sql_delete.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_delete.cc 2008-10-20 11:31:29 +0000
@@ -214,7 +214,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *
DBUG_RETURN(TRUE);
}
if (usable_index==MAX_KEY)
- init_read_record(&info,thd,table,select,1,1);
+ init_read_record(&info, thd, table, select, 1, 1, FALSE);
else
init_read_record_idx(&info, thd, table, 1, usable_index);
@@ -772,7 +772,7 @@ int multi_delete::do_deletes()
}
READ_RECORD info;
- init_read_record(&info,thd,table,NULL,0,1);
+ init_read_record(&info, thd, table, NULL, 0, 1, FALSE);
/*
Ignore any rows not found in reference tables as they may already have
been deleted by foreign key handling
=== modified file 'sql/sql_help.cc'
--- a/sql/sql_help.cc 2007-10-17 16:08:58 +0000
+++ b/sql/sql_help.cc 2008-07-15 14:13:21 +0000
@@ -181,7 +181,7 @@ int search_topics(THD *thd, TABLE *topic
int count= 0;
READ_RECORD read_record_info;
- init_read_record(&read_record_info, thd, topics, select,1,0);
+ init_read_record(&read_record_info, thd, topics, select, 1, 0, FALSE);
while (!read_record_info.read_record(&read_record_info))
{
if (!select->cond->val_int()) // Doesn't match like
@@ -221,7 +221,7 @@ int search_keyword(THD *thd, TABLE *keyw
int count= 0;
READ_RECORD read_record_info;
- init_read_record(&read_record_info, thd, keywords, select,1,0);
+ init_read_record(&read_record_info, thd, keywords, select, 1, 0, FALSE);
while (!read_record_info.read_record(&read_record_info) && count<2)
{
if (!select->cond->val_int()) // Dosn't match like
@@ -346,7 +346,7 @@ int search_categories(THD *thd, TABLE *c
DBUG_ENTER("search_categories");
- init_read_record(&read_record_info, thd, categories, select,1,0);
+ init_read_record(&read_record_info, thd, categories, select,1,0,FALSE);
while (!read_record_info.read_record(&read_record_info))
{
if (select && !select->cond->val_int())
@@ -380,7 +380,7 @@ void get_all_items_for_category(THD *thd
DBUG_ENTER("get_all_items_for_category");
READ_RECORD read_record_info;
- init_read_record(&read_record_info, thd, items, select,1,0);
+ init_read_record(&read_record_info, thd, items, select,1,0,FALSE);
while (!read_record_info.read_record(&read_record_info))
{
if (!select->cond->val_int())
=== modified file 'sql/sql_insert.cc'
--- a/sql/sql_insert.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_insert.cc 2008-10-20 11:31:29 +0000
@@ -2901,7 +2901,11 @@ bool select_insert::send_data(List<Item>
DBUG_RETURN(1);
}
}
- if (!(error= write_record(thd, table, &info)))
+
+ error= write_record(thd, table, &info);
+ table->auto_increment_field_not_null= FALSE;
+
+ if (!error)
{
if (table->triggers || info.handle_duplicates == DUP_UPDATE)
{
=== modified file 'sql/sql_lex.cc'
--- a/sql/sql_lex.cc 2008-08-15 09:43:44 +0000
+++ b/sql/sql_lex.cc 2008-10-20 11:31:29 +0000
@@ -192,7 +192,6 @@ void lex_start(THD *thd)
lex->select_lex.order_list.empty();
lex->select_lex.udf_list.empty();
lex->current_select= &lex->select_lex;
- lex->yacc_yyss=lex->yacc_yyvs=0;
lex->sql_command= lex->orig_sql_command= SQLCOM_END;
lex->duplicates= DUP_ERROR;
lex->ignore= 0;
@@ -210,11 +209,16 @@ void lex_start(THD *thd)
void lex_end(LEX *lex)
{
- DBUG_ENTER("lex_end");
- DBUG_PRINT("enter", ("lex: 0x%lx", (long) lex));
- x_free(lex->yacc_yyss);
- x_free(lex->yacc_yyvs);
- DBUG_VOID_RETURN;
+ /* Empty in 5.0, non empty in 5.1 */
+}
+
+Yacc_state::~Yacc_state()
+{
+ if (yacc_yyss)
+ {
+ x_free(yacc_yyss);
+ x_free(yacc_yyvs);
+ }
}
@@ -531,7 +535,7 @@ int MYSQLlex(void *arg, void *yythd)
uint length;
enum my_lex_states state;
THD *thd= (THD *)yythd;
- Lex_input_stream *lip= thd->m_lip;
+ Lex_input_stream *lip= & thd->m_parser_state->m_lip;
LEX *lex= thd->lex;
YYSTYPE *yylval=(YYSTYPE*) arg;
CHARSET_INFO *cs= thd->charset();
@@ -1201,6 +1205,7 @@ void st_select_lex::init_query()
subquery_in_having= explicit_limit= 0;
is_item_list_lookup= 0;
first_execution= 1;
+ first_natural_join_processing= 1;
first_cond_optimization= 1;
parsing_place= NO_MATTER;
exclude_from_table_unique_test= no_wrap_view_item= FALSE;
@@ -1781,7 +1786,7 @@ void Query_tables_list::destroy_query_ta
*/
st_lex::st_lex()
- :result(0), yacc_yyss(0), yacc_yyvs(0),
+ :result(0),
sql_command(SQLCOM_END)
{
reset_query_tables_list(TRUE);
=== modified file 'sql/sql_lex.h'
--- a/sql/sql_lex.h 2008-07-14 20:16:37 +0000
+++ b/sql/sql_lex.h 2008-10-20 11:31:29 +0000
@@ -336,11 +336,11 @@ public:
bool no_table_names_allowed; /* used for global order by */
bool no_error; /* suppress error message (convert it to warnings) */
- static void *operator new(size_t size)
+ static void *operator new(size_t size) throw ()
{
return (void*) sql_alloc((uint) size);
}
- static void *operator new(size_t size, MEM_ROOT *mem_root)
+ static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
{ return (void*) alloc_root(mem_root, (uint) size); }
static void operator delete(void *ptr,size_t size) { TRASH(ptr, size); }
static void operator delete(void *ptr, MEM_ROOT *mem_root) {}
@@ -591,6 +591,7 @@ public:
case of an error during prepare the PS is not created.
*/
bool first_execution;
+ bool first_natural_join_processing;
bool first_cond_optimization;
/* do not wrap view fields with Item_ref */
bool no_wrap_view_item;
@@ -1009,7 +1010,6 @@ typedef struct st_lex : public Query_tab
LEX_STRING comment, ident;
LEX_USER *grant_user;
XID *xid;
- gptr yacc_yyss,yacc_yyvs;
THD *thd;
CHARSET_INFO *charset, *underscore_charset;
bool text_string_is_7bit;
@@ -1298,6 +1298,59 @@ typedef struct st_lex : public Query_tab
}
} LEX;
+
+/**
+ The internal state of the syntax parser.
+ This object is only available during parsing,
+ and is private to the syntax parser implementation (sql_yacc.yy).
+*/
+class Yacc_state
+{
+public:
+ Yacc_state()
+ : yacc_yyss(NULL), yacc_yyvs(NULL)
+ {}
+
+ ~Yacc_state();
+
+ /**
+ Bison internal state stack, yyss, when dynamically allocated using
+ my_yyoverflow().
+ */
+ gptr yacc_yyss;
+
+ /**
+ Bison internal semantic value stack, yyvs, when dynamically allocated using
+ my_yyoverflow().
+ */
+ gptr yacc_yyvs;
+
+ /*
+ TODO: move more attributes from the LEX structure here.
+ */
+};
+
+/**
+ Internal state of the parser.
+ The complete state consist of:
+ - state data used during lexical parsing,
+ - state data used during syntactic parsing.
+*/
+class Parser_state
+{
+public:
+ Parser_state(THD *thd, const char* buff, unsigned int length)
+ : m_lip(thd, buff, length), m_yacc()
+ {}
+
+ ~Parser_state()
+ {}
+
+ Lex_input_stream m_lip;
+ Yacc_state m_yacc;
+};
+
+
struct st_lex_local: public st_lex
{
static void *operator new(size_t size) throw()
=== modified file 'sql/sql_list.h'
--- a/sql/sql_list.h 2007-03-29 06:35:28 +0000
+++ b/sql/sql_list.h 2008-08-11 16:10:00 +0000
@@ -27,7 +27,7 @@ public:
{
return (void*) sql_alloc((uint) size);
}
- static void *operator new[](size_t size)
+ static void *operator new[](size_t size) throw ()
{
return (void*) sql_alloc((uint) size);
}
@@ -466,7 +466,7 @@ public:
struct ilink
{
struct ilink **prev,*next;
- static void *operator new(size_t size)
+ static void *operator new(size_t size) throw ()
{
return (void*)my_malloc((uint)size, MYF(MY_WME | MY_FAE));
}
=== modified file 'sql/sql_load.cc'
--- a/sql/sql_load.cc 2008-03-28 15:59:13 +0000
+++ b/sql/sql_load.cc 2008-09-17 06:34:00 +0000
@@ -325,7 +325,9 @@ int mysql_load(THD *thd,sql_exchange *ex
bzero((char*) &info,sizeof(info));
info.ignore= ignore;
info.handle_duplicates=handle_duplicates;
- info.escape_char=escaped->length() ? (*escaped)[0] : INT_MAX;
+ info.escape_char= (escaped->length() && (ex->escaped_given() ||
+ !(thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)))
+ ? (*escaped)[0] : INT_MAX;
READ_INFO read_info(file,tot_length,
ex->cs ? ex->cs : thd->variables.collation_database,
=== modified file 'sql/sql_parse.cc'
--- a/sql/sql_parse.cc 2008-08-15 09:43:44 +0000
+++ b/sql/sql_parse.cc 2008-10-20 11:31:29 +0000
@@ -76,7 +76,6 @@ static void remove_escape(char *name);
static bool append_file_to_dir(THD *thd, const char **filename_ptr,
const char *table_name);
static bool check_show_create_table_access(THD *thd, TABLE_LIST *table);
-static bool test_if_data_home_dir(const char *dir);
const char *any_db="*any*"; // Special symbol for check_access
@@ -3097,13 +3096,13 @@ mysql_execute_command(THD *thd)
if (test_if_data_home_dir(lex->create_info.data_file_name))
{
- my_error(ER_WRONG_ARGUMENTS,MYF(0),"DATA DIRECORY");
+ my_error(ER_WRONG_ARGUMENTS,MYF(0),"DATA DIRECTORY");
res= -1;
break;
}
if (test_if_data_home_dir(lex->create_info.index_file_name))
{
- my_error(ER_WRONG_ARGUMENTS,MYF(0),"INDEX DIRECORY");
+ my_error(ER_WRONG_ARGUMENTS,MYF(0),"INDEX DIRECTORY");
res= -1;
break;
}
@@ -5930,29 +5929,35 @@ bool check_stack_overrun(THD *thd, long
bool my_yyoverflow(short **yyss, YYSTYPE **yyvs, ulong *yystacksize)
{
- LEX *lex= current_thd->lex;
+ Yacc_state *state= & current_thd->m_parser_state->m_yacc;
ulong old_info=0;
+ DBUG_ASSERT(state);
if ((uint) *yystacksize >= MY_YACC_MAX)
return 1;
- if (!lex->yacc_yyvs)
+ if (!state->yacc_yyvs)
old_info= *yystacksize;
*yystacksize= set_zone((*yystacksize)*2,MY_YACC_INIT,MY_YACC_MAX);
- if (!(lex->yacc_yyvs= (char*)
- my_realloc((gptr) lex->yacc_yyvs,
+ if (!(state->yacc_yyvs= (char*)
+ my_realloc(state->yacc_yyvs,
*yystacksize*sizeof(**yyvs),
MYF(MY_ALLOW_ZERO_PTR | MY_FREE_ON_ERROR))) ||
- !(lex->yacc_yyss= (char*)
- my_realloc((gptr) lex->yacc_yyss,
+ !(state->yacc_yyss= (char*)
+ my_realloc(state->yacc_yyss,
*yystacksize*sizeof(**yyss),
MYF(MY_ALLOW_ZERO_PTR | MY_FREE_ON_ERROR))))
return 1;
if (old_info)
- { // Copy old info from stack
- memcpy(lex->yacc_yyss, (gptr) *yyss, old_info*sizeof(**yyss));
- memcpy(lex->yacc_yyvs, (gptr) *yyvs, old_info*sizeof(**yyvs));
+ {
+ /*
+ Only copy the old stack on the first call to my_yyoverflow(),
+ when replacing a static stack (YYINITDEPTH) by a dynamic stack.
+ For subsequent calls, my_realloc already did preserve the old stack.
+ */
+ memcpy(state->yacc_yyss, *yyss, old_info*sizeof(**yyss));
+ memcpy(state->yacc_yyvs, *yyvs, old_info*sizeof(**yyvs));
}
- *yyss=(short*) lex->yacc_yyss;
- *yyvs=(YYSTYPE*) lex->yacc_yyvs;
+ *yyss= (short*) state->yacc_yyss;
+ *yyvs= (YYSTYPE*) state->yacc_yyvs;
return 0;
}
@@ -6191,11 +6196,12 @@ void mysql_parse(THD *thd, const char *i
sp_cache_flush_obsolete(&thd->sp_proc_cache);
sp_cache_flush_obsolete(&thd->sp_func_cache);
- Lex_input_stream lip(thd, inBuf, length);
- thd->m_lip= &lip;
+ Parser_state parser_state(thd, inBuf, length);
+ thd->m_parser_state= &parser_state;
int err= MYSQLparse(thd);
- *found_semicolon= lip.found_semicolon;
+ *found_semicolon= parser_state.m_lip.found_semicolon;
+ thd->m_parser_state= NULL;
if (!err && ! thd->is_fatal_error)
{
@@ -6220,8 +6226,9 @@ void mysql_parse(THD *thd, const char *i
PROCESSLIST.
Note that we don't need LOCK_thread_count to modify query_length.
*/
- if (lip.found_semicolon &&
- (thd->query_length= (ulong)(lip.found_semicolon - thd->query)))
+ if (parser_state.m_lip.found_semicolon &&
+ (thd->query_length= (ulong)(parser_state.m_lip.found_semicolon
+ - thd->query)))
thd->query_length--;
/* Actually execute the query */
if (*found_semicolon)
@@ -6280,11 +6287,13 @@ bool mysql_test_parse_for_slave(THD *thd
bool error= 0;
DBUG_ENTER("mysql_test_parse_for_slave");
- Lex_input_stream lip(thd, inBuf, length);
- thd->m_lip= &lip;
+ Parser_state parser_state(thd, inBuf, length);
+ thd->m_parser_state= &parser_state;
+
lex_start(thd);
mysql_reset_thd_for_next_command(thd);
int err= MYSQLparse((void*) thd);
+ thd->m_parser_state= NULL;
if (!err && ! thd->is_fatal_error &&
all_tables_not_ok(thd,(TABLE_LIST*) lex->select_lex.table_list.first))
@@ -7114,11 +7123,23 @@ bool reload_acl_and_cache(THD *thd, ulon
thd->thread_stack= (char*) &tmp_thd;
thd->store_globals();
}
+
if (thd)
{
- (void)acl_reload(thd);
- (void)grant_reload(thd);
+ bool reload_acl_failed= acl_reload(thd);
+ bool reload_grants_failed= grant_reload(thd);
+
+ if (reload_acl_failed || reload_grants_failed)
+ {
+ result= 1;
+ /*
+ When an error is returned, my_message may have not been called and
+ the client will hang waiting for a response.
+ */
+ my_error(ER_UNKNOWN_ERROR, MYF(0), "FLUSH PRIVILEGES failed");
+ }
}
+
if (tmp_thd)
{
delete tmp_thd;
@@ -7204,8 +7225,10 @@ bool reload_acl_and_cache(THD *thd, ulon
tmp_write_to_binlog= 0;
if (lock_global_read_lock(thd))
return 1; // Killed
- result=close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1,
- tables);
+ if (close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1,
+ tables))
+ result= 1;
+
if (make_global_read_lock_block_commit(thd)) // Killed
{
/* Don't leave things in a half-locked state */
@@ -7214,7 +7237,10 @@ bool reload_acl_and_cache(THD *thd, ulon
}
}
else
- result=close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1, tables);
+ {
+ if (close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1, tables))
+ result= 1;
+ }
my_dbopt_cleanup();
}
if (options & REFRESH_HOSTS)
@@ -7238,8 +7264,8 @@ bool reload_acl_and_cache(THD *thd, ulon
#ifdef OPENSSL
if (options & REFRESH_DES_KEY_FILE)
{
- if (des_key_file)
- result=load_des_key_file(des_key_file);
+ if (des_key_file && load_des_key_file(des_key_file))
+ result= 1;
}
#endif
#ifdef HAVE_REPLICATION
@@ -7350,7 +7376,7 @@ bool check_simple_select()
if (lex->current_select != &lex->select_lex)
{
char command[80];
- Lex_input_stream *lip= thd->m_lip;
+ Lex_input_stream *lip= & thd->m_parser_state->m_lip;
strmake(command, lip->yylval->symbol.str,
min(lip->yylval->symbol.length, sizeof(command)-1));
my_error(ER_CANT_USE_OPTION_HERE, MYF(0), command);
@@ -7974,10 +8000,12 @@ bool check_string_length(LEX_STRING *str
1 error
*/
-static bool test_if_data_home_dir(const char *dir)
+C_MODE_START
+
+int test_if_data_home_dir(const char *dir)
{
- char path[FN_REFLEN], conv_path[FN_REFLEN];
- uint dir_len, home_dir_len= strlen(mysql_unpacked_real_data_home);
+ char path[FN_REFLEN];
+ int dir_len;
DBUG_ENTER("test_if_data_home_dir");
if (!dir)
@@ -7985,21 +8013,59 @@ static bool test_if_data_home_dir(const
(void) fn_format(path, dir, "", "",
(MY_RETURN_REAL_PATH|MY_RESOLVE_SYMLINKS));
- dir_len= unpack_dirname(conv_path, dir);
-
- if (home_dir_len <= dir_len)
+ dir_len= strlen(path);
+ if (mysql_unpacked_real_data_home_len<= dir_len)
{
+ if (dir_len > mysql_unpacked_real_data_home_len &&
+ path[mysql_unpacked_real_data_home_len] != FN_LIBCHAR)
+ DBUG_RETURN(0);
+
if (lower_case_file_system)
{
- if (!my_strnncoll(default_charset_info, (const uchar*) conv_path,
- home_dir_len,
+ if (!my_strnncoll(default_charset_info, (const uchar*) path,
+ mysql_unpacked_real_data_home_len,
(const uchar*) mysql_unpacked_real_data_home,
- home_dir_len))
+ mysql_unpacked_real_data_home_len))
DBUG_RETURN(1);
}
- else if (!memcmp(conv_path, mysql_unpacked_real_data_home, home_dir_len))
+ else if (!memcmp(path, mysql_unpacked_real_data_home,
+ mysql_unpacked_real_data_home_len))
DBUG_RETURN(1);
}
DBUG_RETURN(0);
}
+C_MODE_END
+
+
+/**
+ Check that host name string is valid.
+
+ @param[in] str string to be checked
+
+ @return Operation status
+ @retval FALSE host name is ok
+ @retval TRUE host name string is longer than max_length or
+ has invalid symbols
+*/
+
+bool check_host_name(LEX_STRING *str)
+{
+ const char *name= str->str;
+ const char *end= str->str + str->length;
+ if (check_string_length(str, ER(ER_HOSTNAME), HOSTNAME_LENGTH))
+ return TRUE;
+
+ while (name != end)
+ {
+ if (*name == '@')
+ {
+ my_printf_error(ER_UNKNOWN_ERROR,
+ "Malformed hostname (illegal symbol: '%c')", MYF(0),
+ *name);
+ return TRUE;
+ }
+ name++;
+ }
+ return FALSE;
+}
=== modified file 'sql/sql_prepare.cc'
--- a/sql/sql_prepare.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_prepare.cc 2008-10-20 11:31:29 +0000
@@ -2852,12 +2852,13 @@ bool Prepared_statement::prepare(const c
old_stmt_arena= thd->stmt_arena;
thd->stmt_arena= this;
- Lex_input_stream lip(thd, thd->query, thd->query_length);
- lip.stmt_prepare_mode= TRUE;
- thd->m_lip= &lip;
+ Parser_state parser_state(thd, thd->query, thd->query_length);
+ parser_state.m_lip.stmt_prepare_mode= TRUE;
+ thd->m_parser_state= &parser_state;
lex_start(thd);
lex->safe_to_cache_query= FALSE;
int err= MYSQLparse((void *)thd);
+ thd->m_parser_state= NULL;
lex->set_trg_event_type_for_tables();
error= err || thd->is_fatal_error ||
=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_select.cc 2008-10-20 11:31:29 +0000
@@ -1735,7 +1735,8 @@ JOIN::exec()
if (!items1)
{
items1= items0 + all_fields.elements;
- if (sort_and_group || curr_tmp_table->group)
+ if (sort_and_group || curr_tmp_table->group ||
+ tmp_table_param.precomputed_group_by)
{
if (change_to_use_tmp_fields(thd, items1,
tmp_fields_list1, tmp_all_fields1,
@@ -6481,6 +6482,12 @@ void JOIN::cleanup(bool full)
if (tmp_join)
tmp_table_param.copy_field= 0;
group_fields.delete_elements();
+ /*
+ Ensure that the above delete_elements() would not be called
+ twice for the same list.
+ */
+ if (tmp_join && tmp_join != this)
+ tmp_join->group_fields= group_fields;
/*
We can't call delete_elements() on copy_funcs as this will cause
problems in free_elements() as some of the elements are then deleted.
@@ -9265,6 +9272,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARA
MI_COLUMNDEF *recinfo;
uint total_uneven_bit_length= 0;
bool force_copy_fields= param->force_copy_fields;
+ /* Treat sum functions as normal ones when loose index scan is used. */
+ save_sum_fields|= param->precomputed_group_by;
DBUG_ENTER("create_tmp_table");
DBUG_PRINT("enter",("distinct: %d save_sum_fields: %d rows_limit: %lu group: %d",
(int) distinct, (int) save_sum_fields,
@@ -11321,7 +11330,7 @@ join_init_read_record(JOIN_TAB *tab)
if (tab->select && tab->select->quick && tab->select->quick->reset())
return 1;
init_read_record(&tab->read_record, tab->join->thd, tab->table,
- tab->select,1,1);
+ tab->select,1,1, FALSE);
return (*tab->read_record.read_record)(&tab->read_record);
}
@@ -12100,26 +12109,25 @@ part_of_refkey(TABLE *table,Field *field
}
-/*****************************************************************************
- Test if one can use the key to resolve ORDER BY
-
- SYNOPSIS
- test_if_order_by_key()
- order Sort order
- table Table to sort
- idx Index to check
- used_key_parts Return value for used key parts.
-
-
- NOTES
- used_key_parts is set to correct key parts used if return value != 0
- (On other cases, used_key_part may be changed)
+/**
+ Test if a key can be used to resolve ORDER BY
- RETURN
- 1 key is ok.
- 0 Key can't be used
- -1 Reverse key can be used
-*****************************************************************************/
+ used_key_parts is set to correct key parts used if return value != 0
+ (On other cases, used_key_part may be changed).
+ Note that the value may actually be greater than the number of index
+ key parts. This can happen for storage engines that have the primary
+ key parts as a suffix for every secondary key.
+
+ @param order Sort order
+ @param table Table to sort
+ @param idx Index to check
+ @param[out] used_key_parts Return value for used key parts.
+
+ @return indication if the key can be used for sorting
+ @retval 1 key can be used for reading data in order.
+ @retval 0 Key can't be used
+ @retval -1 Reverse read on the key can be used
+*/
static int test_if_order_by_key(ORDER *order, TABLE *table, uint idx,
uint *used_key_parts)
@@ -12184,11 +12192,27 @@ static int test_if_order_by_key(ORDER *o
reverse=flag; // Remember if reverse
key_part++;
}
- *used_key_parts= on_primary_key ? table->key_info[idx].key_parts :
- (uint) (key_part - table->key_info[idx].key_part);
- if (reverse == -1 && !(table->file->index_flags(idx, *used_key_parts-1, 1) &
- HA_READ_PREV))
- reverse= 0; // Index can't be used
+ if (on_primary_key)
+ {
+ uint used_key_parts_secondary= table->key_info[idx].key_parts;
+ uint used_key_parts_pk=
+ (uint) (key_part - table->key_info[table->s->primary_key].key_part);
+ *used_key_parts= used_key_parts_pk + used_key_parts_secondary;
+
+ if (reverse == -1 &&
+ (!(table->file->index_flags(idx, used_key_parts_secondary - 1, 1) &
+ HA_READ_PREV) ||
+ !(table->file->index_flags(table->s->primary_key,
+ used_key_parts_pk - 1, 1) & HA_READ_PREV)))
+ reverse= 0; // Index can't be used
+ }
+ else
+ {
+ *used_key_parts= (uint) (key_part - table->key_info[idx].key_part);
+ if (reverse == -1 &&
+ !(table->file->index_flags(idx, *used_key_parts-1, 1) & HA_READ_PREV))
+ reverse= 0; // Index can't be used
+ }
DBUG_RETURN(reverse);
}
=== modified file 'sql/sql_show.cc'
--- a/sql/sql_show.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_show.cc 2008-10-20 11:31:29 +0000
@@ -3174,6 +3174,27 @@ static int get_schema_views_record(THD *
!my_strcasecmp(system_charset_info, tables->definer.host.str,
sctx->priv_host))
tables->allowed_show= TRUE;
+#ifndef NO_EMBEDDED_ACCESS_CHECKS
+ else
+ {
+ if ((thd->col_access & (SHOW_VIEW_ACL|SELECT_ACL)) ==
+ (SHOW_VIEW_ACL|SELECT_ACL))
+ tables->allowed_show= TRUE;
+ else
+ {
+ TABLE_LIST table_list;
+ uint view_access;
+ memset(&table_list, 0, sizeof(table_list));
+ table_list.db= tables->view_db.str;
+ table_list.table_name= tables->view_name.str;
+ table_list.grant.privilege= thd->col_access;
+ view_access= get_table_grant(thd, &table_list);
+ if ((view_access & (SHOW_VIEW_ACL|SELECT_ACL)) ==
+ (SHOW_VIEW_ACL|SELECT_ACL))
+ tables->allowed_show= TRUE;
+ }
+ }
+#endif
}
restore_record(table, s->default_values);
table->field[1]->store(tables->view_db.str, tables->view_db.length, cs);
@@ -3694,16 +3715,10 @@ TABLE *create_schema_table(THD *thd, TAB
DBUG_ASSERT(fields_info->field_type == MYSQL_TYPE_STRING ||
fields_info->field_type == MYSQL_TYPE_DECIMAL);
- /**
- @todo Change when Item_empty_string is fixed (in 4.1). [Presumably,
- this means removing the first of two steps: setting a useless, bogus
- value; and then setting the attributes.]
- */
- if (!(item= new Item_empty_string("", 0, cs)))
+ if (!(item= new Item_empty_string("", fields_info->field_length, cs)))
{
DBUG_RETURN(0);
}
- item->max_length= fields_info->field_length * cs->mbmaxlen;
item->set_name(fields_info->field_name,
strlen(fields_info->field_name), cs);
break;
=== modified file 'sql/sql_string.h'
--- a/sql/sql_string.h 2007-01-22 12:10:46 +0000
+++ b/sql/sql_string.h 2008-08-11 16:10:00 +0000
@@ -78,7 +78,7 @@ public:
Alloced_length=str.Alloced_length; alloced=0;
str_charset=str.str_charset;
}
- static void *operator new(size_t size, MEM_ROOT *mem_root)
+ static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
{ return (void*) alloc_root(mem_root, (uint) size); }
static void operator delete(void *ptr_arg,size_t size)
{ TRASH(ptr_arg, size); }
=== modified file 'sql/sql_table.cc'
--- a/sql/sql_table.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_table.cc 2008-10-20 11:31:29 +0000
@@ -4177,7 +4177,7 @@ copy_data_between_tables(TABLE *from,TAB
current query id
*/
from->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS);
- init_read_record(&info, thd, from, (SQL_SELECT *) 0, 1,1);
+ init_read_record(&info, thd, from, (SQL_SELECT *) 0, 1, 1, FALSE);
if (ignore)
to->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
thd->row_count= 0;
=== modified file 'sql/sql_trigger.cc'
--- a/sql/sql_trigger.cc 2007-09-04 22:40:27 +0000
+++ b/sql/sql_trigger.cc 2008-07-14 21:41:30 +0000
@@ -968,11 +968,13 @@ bool Table_triggers_list::check_n_load(T
thd->variables.sql_mode= (ulong)*trg_sql_mode;
- Lex_input_stream lip(thd, trg_create_str->str, trg_create_str->length);
- thd->m_lip= &lip;
+ Parser_state parser_state(thd, trg_create_str->str,
+ trg_create_str->length);
+ thd->m_parser_state= &parser_state;
lex_start(thd);
thd->spcont= NULL;
int err= MYSQLparse((void *)thd);
+ thd->m_parser_state= NULL;
if (err || thd->is_fatal_error)
{
=== modified file 'sql/sql_udf.cc'
--- a/sql/sql_udf.cc 2008-07-28 14:22:12 +0000
+++ b/sql/sql_udf.cc 2008-10-20 11:31:29 +0000
@@ -176,7 +176,7 @@ void udf_init()
}
table= tables.table;
- init_read_record(&read_record_info, new_thd, table, NULL,1,0);
+ init_read_record(&read_record_info, new_thd, table, NULL,1,0,FALSE);
while (!(error = read_record_info.read_record(&read_record_info)))
{
DBUG_PRINT("info",("init udf record"));
=== modified file 'sql/sql_union.cc'
--- a/sql/sql_union.cc 2008-03-29 14:12:23 +0000
+++ b/sql/sql_union.cc 2008-10-09 15:24:31 +0000
@@ -399,7 +399,6 @@ bool st_select_lex_unit::prepare(THD *th
}
else
{
- DBUG_ASSERT(!thd->stmt_arena->is_conventional());
/*
We're in execution of a prepared statement or stored procedure:
reset field items to point at fields from the created temporary table.
=== modified file 'sql/sql_update.cc'
--- a/sql/sql_update.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_update.cc 2008-10-20 11:31:29 +0000
@@ -358,7 +358,7 @@ int mysql_update(THD *thd,
Full index scan must be started with init_read_record_idx
*/
if (used_index == MAX_KEY || (select && select->quick))
- init_read_record(&info,thd,table,select,0,1);
+ init_read_record(&info, thd, table, select, 0, 1, FALSE);
else
init_read_record_idx(&info, thd, table, 1, used_index);
@@ -422,7 +422,7 @@ int mysql_update(THD *thd,
if (select && select->quick && select->quick->reset())
goto err;
- init_read_record(&info,thd,table,select,0,1);
+ init_read_record(&info, thd, table, select, 0, 1, FALSE);
updated= found= 0;
thd->count_cuted_fields= CHECK_FIELD_WARN; /* calc cuted fields */
@@ -852,11 +852,14 @@ reopen_tables:
}
/* now lock and fill tables */
- if (lock_tables(thd, table_list, table_count, &need_reopen))
+ if (!thd->stmt_arena->is_stmt_prepare() &&
+ lock_tables(thd, table_list, table_count, &need_reopen))
{
if (!need_reopen)
DBUG_RETURN(TRUE);
+ DBUG_PRINT("info", ("lock_tables failed, reopening"));
+
/*
We have to reopen tables since some of them were altered or dropped
during lock_tables() or something was done with their triggers.
@@ -872,6 +875,34 @@ reopen_tables:
for (TABLE_LIST *tbl= table_list; tbl; tbl= tbl->next_global)
tbl->cleanup_items();
+ /*
+ To not to hog memory (as a result of the
+ unit->reinit_exec_mechanism() call below):
+ */
+ lex->unit.cleanup();
+
+ for (SELECT_LEX *sl= lex->all_selects_list;
+ sl;
+ sl= sl->next_select_in_list())
+ {
+ SELECT_LEX_UNIT *unit= sl->master_unit();
+ unit->reinit_exec_mechanism(); // reset unit->prepared flags
+ /*
+ Reset 'clean' flag back to force normal execution of
+ unit->cleanup() in Prepared_statement::cleanup_stmt()
+ (call to lex->unit.cleanup() above sets this flag to TRUE).
+ */
+ unit->unclean();
+ }
+
+ /*
+ Also we need to cleanup Natural_join_column::table_field items.
+ To not to traverse a join tree we will cleanup whole
+ thd->free_list (in PS execution mode that list may not contain
+ items from 'fields' list, so the cleanup above is necessary to.
+ */
+ cleanup_items(thd->free_list);
+
close_tables_for_reopen(thd, &table_list);
goto reopen_tables;
}
=== modified file 'sql/sql_view.cc'
--- a/sql/sql_view.cc 2008-07-14 20:16:37 +0000
+++ b/sql/sql_view.cc 2008-10-20 11:31:29 +0000
@@ -1081,8 +1081,7 @@ bool mysql_make_view(THD *thd, File_pars
char old_db_buf[NAME_LEN+1];
LEX_STRING old_db= { old_db_buf, sizeof(old_db_buf) };
bool dbchanged;
- Lex_input_stream lip(thd, table->query.str, table->query.length);
- thd->m_lip= &lip;
+ Parser_state parser_state(thd, table->query.str, table->query.length);
/*
Use view db name as thread default database, in order to ensure
@@ -1091,6 +1090,7 @@ bool mysql_make_view(THD *thd, File_pars
if ((result= sp_use_new_db(thd, table->view_db, &old_db, 1, &dbchanged)))
goto end;
+ thd->m_parser_state= &parser_state;
lex_start(thd);
view_select= &lex->select_lex;
view_select->select_number= ++thd->select_number;
@@ -1125,6 +1125,7 @@ bool mysql_make_view(THD *thd, File_pars
CHARSET_INFO *save_cs= thd->variables.character_set_client;
thd->variables.character_set_client= system_charset_info;
res= MYSQLparse((void *)thd);
+ thd->m_parser_state= NULL;
if ((old_lex->sql_command == SQLCOM_SHOW_FIELDS) ||
(old_lex->sql_command == SQLCOM_SHOW_CREATE))
@@ -1857,7 +1858,7 @@ mysql_rename_view(THD *thd,
goto err;
/* rename view and it's backups */
- if (rename_in_schema_file(view->db, view->table_name, new_name,
+ if (rename_in_schema_file(thd, view->db, view->table_name, new_name,
view_def.revision - 1, num_view_backups))
goto err;
@@ -1876,7 +1877,7 @@ mysql_rename_view(THD *thd,
num_view_backups))
{
/* restore renamed view in case of error */
- rename_in_schema_file(view->db, new_name, view->table_name,
+ rename_in_schema_file(thd, view->db, new_name, view->table_name,
view_def.revision - 1, num_view_backups);
goto err;
}
=== modified file 'sql/sql_yacc.yy'
--- a/sql/sql_yacc.yy 2008-08-15 09:43:44 +0000
+++ b/sql/sql_yacc.yy 2008-10-20 11:31:29 +0000
@@ -23,6 +23,7 @@
#define YYPARSE_PARAM yythd
#define YYLEX_PARAM yythd
#define YYTHD ((THD *)yythd)
+#define YYLIP (& YYTHD->m_parser_state->m_lip)
#define MYSQL_YACC
#define YYINITDEPTH 100
@@ -86,7 +87,7 @@ const LEX_STRING null_lex_str={0,0};
void my_parse_error(const char *s)
{
THD *thd= current_thd;
- Lex_input_stream *lip= thd->m_lip;
+ Lex_input_stream *lip= & thd->m_parser_state->m_lip;
const char *yytext= lip->tok_start;
/* Push an error into the error stack */
@@ -1226,11 +1227,11 @@ query:
MYSQL_YYABORT;
}
thd->lex->sql_command= SQLCOM_EMPTY_QUERY;
- thd->m_lip->found_semicolon= NULL;
+ YYLIP->found_semicolon= NULL;
}
| verb_clause
{
- Lex_input_stream *lip = YYTHD->m_lip;
+ Lex_input_stream *lip = YYLIP;
if ((YYTHD->client_capabilities & CLIENT_MULTI_QUERIES) &&
! lip->stmt_prepare_mode &&
@@ -1256,7 +1257,7 @@ query:
| verb_clause END_OF_INPUT
{
/* Single query, not terminated. */
- YYTHD->m_lip->found_semicolon= NULL;
+ YYLIP->found_semicolon= NULL;
}
;
@@ -1552,6 +1553,8 @@ create:
{
LEX *lex=Lex;
Key *key= new Key($2, $4.str, $5, 0, lex->col_list);
+ if (key == NULL)
+ MYSQL_YYABORT;
lex->alter_info.key_list.push_back(key);
lex->col_list.empty();
@@ -1611,6 +1614,8 @@ sp_name:
MYSQL_YYABORT;
}
$$= new sp_name($1, $3, true);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
$$->init_qname(YYTHD);
}
| ident
@@ -1626,8 +1631,9 @@ sp_name:
if (lex->copy_db_to(&db.str, &db.length))
MYSQL_YYABORT;
$$= new sp_name(db, $1, false);
- if ($$)
- $$->init_qname(YYTHD);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ $$->init_qname(YYTHD);
}
;
@@ -1878,6 +1884,8 @@ sp_decl:
if (!dflt_value_item)
{
dflt_value_item= new Item_null();
+ if (dflt_value_item == NULL)
+ MYSQL_YYABORT;
/* QQ Set to the var_type with null_value? */
}
@@ -1903,10 +1911,17 @@ sp_decl:
/* The last instruction is responsible for freeing LEX. */
- lex->sphead->add_instr(
- new sp_instr_set(lex->sphead->instructions(), pctx, var_idx,
- dflt_value_item, var_type, lex,
- (i == num_vars - 1)));
+ sp_instr_set *is= new sp_instr_set(lex->sphead->instructions(),
+ pctx,
+ var_idx,
+ dflt_value_item,
+ var_type,
+ lex,
+ (i == num_vars - 1));
+ if (is == NULL)
+ MYSQL_YYABORT;
+
+ lex->sphead->add_instr(is);
}
pctx->declare_var_boundary(0);
@@ -1940,6 +1955,8 @@ sp_decl:
sp_instr_hpush_jump *i=
new sp_instr_hpush_jump(sp->instructions(), ctx, $2,
ctx->current_var_count());
+ if (i == NULL)
+ MYSQL_YYABORT;
sp->add_instr(i);
sp->push_backpatch(i, ctx->push_label((char *)"", 0));
@@ -1992,7 +2009,7 @@ sp_decl:
}
i= new sp_instr_cpush(sp->instructions(), ctx, $5,
ctx->current_cursor_count());
- if ( i==NULL )
+ if (i == NULL)
MYSQL_YYABORT;
sp->add_instr(i);
ctx->push_cursor(&$2);
@@ -2073,6 +2090,8 @@ sp_cond:
ulong_num
{ /* mysql errno */
$$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
+ if ($$ == NULL)
+ YYABORT;
$$->type= sp_cond_type_t::number;
$$->mysqlerr= $1;
}
@@ -2084,6 +2103,8 @@ sp_cond:
MYSQL_YYABORT;
}
$$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
+ if ($$ == NULL)
+ YYABORT;
$$->type= sp_cond_type_t::state;
memcpy($$->sqlstate, $3.str, 5);
$$->sqlstate[5]= '\0';
@@ -2112,16 +2133,22 @@ sp_hcond:
| SQLWARNING_SYM /* SQLSTATEs 01??? */
{
$$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
+ if ($$ == NULL)
+ YYABORT;
$$->type= sp_cond_type_t::warning;
}
| not FOUND_SYM /* SQLSTATEs 02??? */
{
$$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
+ if ($$ == NULL)
+ YYABORT;
$$->type= sp_cond_type_t::notfound;
}
| SQLEXCEPTION_SYM /* All other SQLSTATEs */
{
$$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
+ if ($$ == NULL)
+ YYABORT;
$$->type= sp_cond_type_t::exception;
}
;
@@ -2168,7 +2195,7 @@ sp_proc_stmt:
{
THD *thd= YYTHD;
LEX *lex= thd->lex;
- Lex_input_stream *lip= thd->m_lip;
+ Lex_input_stream *lip= YYLIP;
if (lex->sphead->reset_lex(thd))
MYSQL_YYABORT;
@@ -2178,7 +2205,7 @@ sp_proc_stmt:
{
THD *thd= YYTHD;
LEX *lex= thd->lex;
- Lex_input_stream *lip= thd->m_lip;
+ Lex_input_stream *lip= YYLIP;
sp_head *sp= lex->sphead;
sp->m_flags|= sp_get_flags_for_command(lex);
@@ -3097,6 +3124,8 @@ key_def:
{
LEX *lex=Lex;
Key *key= new Key($1, $2, $7 ? $7 : $3, 0, lex->col_list);
+ if (key == NULL)
+ MYSQL_YYABORT;
lex->alter_info.key_list.push_back(key);
lex->col_list.empty(); /* Alloced by sql_alloc */
@@ -3106,6 +3135,8 @@ key_def:
LEX *lex=Lex;
const char *key_name= $3 ? $3:$1;
Key *key= new Key($2, key_name, $4, 0, lex->col_list);
+ if (key == NULL)
+ MYSQL_YYABORT;
lex->alter_info.key_list.push_back(key);
lex->col_list.empty(); /* Alloced by sql_alloc */
}
@@ -3119,10 +3150,14 @@ key_def:
lex->fk_delete_opt,
lex->fk_update_opt,
lex->fk_match_option);
+ if (key == NULL)
+ MYSQL_YYABORT;
lex->alter_info.key_list.push_back(key);
key= new Key(Key::MULTIPLE, key_name,
HA_KEY_ALG_UNDEF, 1,
lex->col_list);
+ if (key == NULL)
+ MYSQL_YYABORT;
lex->alter_info.key_list.push_back(key);
lex->col_list.empty(); /* Alloced by sql_alloc */
}
@@ -3412,7 +3447,12 @@ attribute:
;
now_or_signed_literal:
- NOW_SYM optional_braces { $$= new Item_func_now_local(); }
+ NOW_SYM optional_braces
+ {
+ $$= new Item_func_now_local();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| signed_literal { $$=$1; }
;
@@ -3538,8 +3578,21 @@ opt_ref_list:
| '(' ref_list ')' opt_on_delete {};
ref_list:
- ref_list ',' ident { Lex->ref_list.push_back(new key_part_spec($3.str)); }
- | ident { Lex->ref_list.push_back(new key_part_spec($1.str)); };
+ ref_list ',' ident
+ {
+ key_part_spec *key= new key_part_spec($3.str);
+ if (key == NULL)
+ MYSQL_YYABORT;
+ Lex->ref_list.push_back(key);
+ }
+ | ident
+ {
+ key_part_spec *key= new key_part_spec($1.str);
+ if (key == NULL)
+ MYSQL_YYABORT;
+ Lex->ref_list.push_back(key);
+ }
+ ;
opt_on_delete:
@@ -3630,16 +3683,24 @@ key_list:
| key_part order_dir { Lex->col_list.push_back($1); };
key_part:
- ident { $$=new key_part_spec($1.str); }
- | ident '(' NUM ')'
- {
- int key_part_len= atoi($3.str);
- if (!key_part_len)
+ ident
{
- my_error(ER_KEY_PART_0, MYF(0), $1.str);
+ $$= new key_part_spec($1.str);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
- $$=new key_part_spec($1.str,(uint) key_part_len);
- };
+ | ident '(' NUM ')'
+ {
+ int key_part_len= atoi($3.str);
+ if (!key_part_len)
+ {
+ my_error(ER_KEY_PART_0, MYF(0), $1.str);
+ }
+ $$=new key_part_spec($1.str,(uint) key_part_len);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ ;
opt_ident:
/* empty */ { $$=(char*) 0; } /* Defaultlength */
@@ -3809,8 +3870,10 @@ alter_list_item:
| DROP opt_column field_ident opt_restrict
{
LEX *lex=Lex;
- lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::COLUMN,
- $3.str));
+ Alter_drop *ad= new Alter_drop(Alter_drop::COLUMN, $3.str);
+ if (ad == NULL)
+ MYSQL_YYABORT;
+ lex->alter_info.drop_list.push_back(ad);
lex->alter_info.flags|= ALTER_DROP_COLUMN;
}
| DROP FOREIGN KEY_SYM opt_ident
@@ -3820,15 +3883,19 @@ alter_list_item:
| DROP PRIMARY_SYM KEY_SYM
{
LEX *lex=Lex;
- lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY,
- primary_key_name));
+ Alter_drop *ad= new Alter_drop(Alter_drop::KEY, primary_key_name);
+ if (ad == NULL)
+ MYSQL_YYABORT;
+ lex->alter_info.drop_list.push_back(ad);
lex->alter_info.flags|= ALTER_DROP_INDEX;
}
| DROP key_or_index field_ident
{
LEX *lex=Lex;
- lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY,
- $3.str));
+ Alter_drop *ad= new Alter_drop(Alter_drop::KEY, $3.str);
+ if (ad == NULL)
+ MYSQL_YYABORT;
+ lex->alter_info.drop_list.push_back(ad);
lex->alter_info.flags|= ALTER_DROP_INDEX;
}
| DISABLE_SYM KEYS
@@ -3846,14 +3913,19 @@ alter_list_item:
| ALTER opt_column field_ident SET DEFAULT signed_literal
{
LEX *lex=Lex;
- lex->alter_info.alter_list.push_back(new Alter_column($3.str,$6));
+ Alter_column *ac= new Alter_column($3.str, $6);
+ if (ac == NULL)
+ MYSQL_YYABORT;
+ lex->alter_info.alter_list.push_back(ac);
lex->alter_info.flags|= ALTER_CHANGE_COLUMN_DEFAULT;
}
| ALTER opt_column field_ident DROP DEFAULT
{
LEX *lex=Lex;
- lex->alter_info.alter_list.push_back(new Alter_column($3.str,
- (Item*) 0));
+ Alter_column *ac= new Alter_column($3.str, (Item*) 0);
+ if (ac == NULL)
+ MYSQL_YYABORT;
+ lex->alter_info.alter_list.push_back(ac);
lex->alter_info.flags|= ALTER_CHANGE_COLUMN_DEFAULT;
}
| RENAME opt_to table_ident
@@ -4479,10 +4551,11 @@ select_item_list:
| '*'
{
THD *thd= YYTHD;
- if (add_item_to_list(thd,
- new Item_field(&thd->lex->current_select->
- context,
- NULL, NULL, "*")))
+ Item *item= new Item_field(&thd->lex->current_select->context,
+ NULL, NULL, "*");
+ if (item == NULL)
+ MYSQL_YYABORT;
+ if (add_item_to_list(thd, item))
MYSQL_YYABORT;
(thd->lex->current_select->with_wild)++;
};
@@ -4516,16 +4589,12 @@ select_item:
remember_name:
{
- THD *thd= YYTHD;
- Lex_input_stream *lip= thd->m_lip;
- $$= (char*) lip->tok_start;
+ $$= (char*) YYLIP->tok_start;
};
remember_end:
{
- THD *thd= YYTHD;
- Lex_input_stream *lip= thd->m_lip;
- $$=(char*) lip->tok_end;
+ $$=(char*) YYLIP->tok_end;
};
select_item2:
@@ -4593,12 +4662,16 @@ expr:
{
/* X OR Y */
$$ = new (YYTHD->mem_root) Item_cond_or($1, $3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
}
| expr XOR expr %prec XOR
{
/* XOR is a proprietary extension */
$$ = new (YYTHD->mem_root) Item_cond_xor($1, $3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| expr and expr %prec AND_SYM
{
@@ -4639,62 +4712,124 @@ expr:
{
/* X AND Y */
$$ = new (YYTHD->mem_root) Item_cond_and($1, $3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
}
| NOT_SYM expr %prec NOT_SYM
- { $$= negate_expression(YYTHD, $2); }
+ {
+ $$= negate_expression(YYTHD, $2);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri IS TRUE_SYM %prec IS
- { $$= new (YYTHD->mem_root) Item_func_istrue($1); }
+ {
+ $$= new (YYTHD->mem_root) Item_func_istrue($1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri IS not TRUE_SYM %prec IS
- { $$= new (YYTHD->mem_root) Item_func_isnottrue($1); }
+ {
+ $$= new (YYTHD->mem_root) Item_func_isnottrue($1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri IS FALSE_SYM %prec IS
- { $$= new (YYTHD->mem_root) Item_func_isfalse($1); }
+ {
+ $$= new (YYTHD->mem_root) Item_func_isfalse($1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri IS not FALSE_SYM %prec IS
- { $$= new (YYTHD->mem_root) Item_func_isnotfalse($1); }
+ {
+ $$= new (YYTHD->mem_root) Item_func_isnotfalse($1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri IS UNKNOWN_SYM %prec IS
- { $$= new Item_func_isnull($1); }
+ {
+ $$= new Item_func_isnull($1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri IS not UNKNOWN_SYM %prec IS
- { $$= new Item_func_isnotnull($1); }
+ {
+ $$= new Item_func_isnotnull($1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri
;
bool_pri:
bool_pri IS NULL_SYM %prec IS
- { $$= new Item_func_isnull($1); }
+ {
+ $$= new Item_func_isnull($1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri IS not NULL_SYM %prec IS
- { $$= new Item_func_isnotnull($1); }
+ {
+ $$= new Item_func_isnotnull($1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri EQUAL_SYM predicate %prec EQUAL_SYM
- { $$= new Item_func_equal($1,$3); }
+ {
+ $$= new Item_func_equal($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri comp_op predicate %prec EQ
- { $$= (*$2)(0)->create($1,$3); }
+ {
+ $$= (*$2)(0)->create($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bool_pri comp_op all_or_any '(' subselect ')' %prec EQ
- { $$= all_any_subquery_creator($1, $2, $3, $5); }
+ {
+ $$= all_any_subquery_creator($1, $2, $3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| predicate ;
predicate:
bit_expr IN_SYM '(' subselect ')'
{
$$= new (YYTHD->mem_root) Item_in_subselect($1, $4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| bit_expr not IN_SYM '(' subselect ')'
{
THD *thd= YYTHD;
Item *item= new (thd->mem_root) Item_in_subselect($1, $5);
+ if (item == NULL)
+ MYSQL_YYABORT;
$$= negate_expression(thd, item);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| bit_expr IN_SYM '(' expr ')'
{
$$= handle_sql2003_note184_exception(YYTHD, $1, true, $4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| bit_expr IN_SYM '(' expr ',' expr_list ')'
{
$6->push_front($4);
$6->push_front($1);
$$= new (YYTHD->mem_root) Item_func_in(*$6);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| bit_expr not IN_SYM '(' expr ')'
{
$$= handle_sql2003_note184_exception(YYTHD, $1, false, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| bit_expr not IN_SYM '(' expr ',' expr_list ')'
{
@@ -4707,54 +4842,146 @@ predicate:
$$= item;
}
| bit_expr BETWEEN_SYM bit_expr AND_SYM predicate
- { $$= new Item_func_between($1,$3,$5); }
+ {
+ $$= new Item_func_between($1,$3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr not BETWEEN_SYM bit_expr AND_SYM predicate
{
Item_func_between *item= new Item_func_between($1,$4,$6);
+ if (item == NULL)
+ MYSQL_YYABORT;
item->negate();
$$= item;
}
| bit_expr SOUNDS_SYM LIKE bit_expr
- { $$= new Item_func_eq(new Item_func_soundex($1),
- new Item_func_soundex($4)); }
+ {
+ Item *item1= new Item_func_soundex($1);
+ Item *item4= new Item_func_soundex($4);
+ if ((item1 == NULL) || (item4 == NULL))
+ MYSQL_YYABORT;
+ $$= new Item_func_eq(item1, item4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr LIKE simple_expr opt_escape
- { $$= new Item_func_like($1,$3,$4,Lex->escape_used); }
+ {
+ $$= new Item_func_like($1,$3,$4,Lex->escape_used);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr not LIKE simple_expr opt_escape
- { $$= new Item_func_not(new Item_func_like($1,$4,$5, Lex->escape_used)); }
- | bit_expr REGEXP bit_expr { $$= new Item_func_regex($1,$3); }
+ {
+ Item *item= new Item_func_like($1,$4,$5, Lex->escape_used);
+ if (item == NULL)
+ MYSQL_YYABORT;
+ $$= new Item_func_not(item);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | bit_expr REGEXP bit_expr
+ {
+ $$= new Item_func_regex($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr not REGEXP bit_expr
- { $$= negate_expression(YYTHD, new Item_func_regex($1,$4)); }
+ {
+ Item *item= new Item_func_regex($1,$4);
+ if (item == NULL)
+ MYSQL_YYABORT;
+ $$= negate_expression(YYTHD, item);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr ;
bit_expr:
bit_expr '|' bit_expr %prec '|'
- { $$= new Item_func_bit_or($1,$3); }
+ {
+ $$= new Item_func_bit_or($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr '&' bit_expr %prec '&'
- { $$= new Item_func_bit_and($1,$3); }
+ {
+ $$= new Item_func_bit_and($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr SHIFT_LEFT bit_expr %prec SHIFT_LEFT
- { $$= new Item_func_shift_left($1,$3); }
+ {
+ $$= new Item_func_shift_left($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr SHIFT_RIGHT bit_expr %prec SHIFT_RIGHT
- { $$= new Item_func_shift_right($1,$3); }
+ {
+ $$= new Item_func_shift_right($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr '+' bit_expr %prec '+'
- { $$= new Item_func_plus($1,$3); }
+ {
+ $$= new Item_func_plus($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr '-' bit_expr %prec '-'
- { $$= new Item_func_minus($1,$3); }
+ {
+ $$= new Item_func_minus($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr '+' interval_expr interval %prec '+'
- { $$= new Item_date_add_interval($1,$3,$4,0); }
+ {
+ $$= new Item_date_add_interval($1,$3,$4,0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr '-' interval_expr interval %prec '-'
- { $$= new Item_date_add_interval($1,$3,$4,1); }
+ {
+ $$= new Item_date_add_interval($1,$3,$4,1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr '*' bit_expr %prec '*'
- { $$= new Item_func_mul($1,$3); }
+ {
+ $$= new Item_func_mul($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr '/' bit_expr %prec '/'
- { $$= new Item_func_div($1,$3); }
+ {
+ $$= new Item_func_div($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr '%' bit_expr %prec '%'
- { $$= new Item_func_mod($1,$3); }
+ {
+ $$= new Item_func_mod($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr DIV_SYM bit_expr %prec DIV_SYM
- { $$= new Item_func_int_div($1,$3); }
+ {
+ $$= new Item_func_int_div($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr MOD_SYM bit_expr %prec MOD_SYM
- { $$= new Item_func_mod($1,$3); }
+ {
+ $$= new Item_func_mod($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| bit_expr '^' bit_expr
- { $$= new Item_func_bit_xor($1,$3); }
+ {
+ $$= new Item_func_bit_xor($1,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| simple_expr
;
@@ -4784,67 +5011,118 @@ simple_expr:
simple_ident
| simple_expr COLLATE_SYM ident_or_text %prec NEG
{
- $$= new Item_func_set_collation($1,
- new Item_string($3.str,
- $3.length,
- YYTHD->charset()));
+ Item *item= new Item_string($3.str, $3.length, YYTHD->charset());
+ if (item == NULL)
+ MYSQL_YYABORT;
+ $$= new Item_func_set_collation($1, item);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| literal
| param_marker
| variable
| sum_expr
| simple_expr OR_OR_SYM simple_expr
- { $$= new Item_func_concat($1, $3); }
- | '+' simple_expr %prec NEG { $$= $2; }
- | '-' simple_expr %prec NEG { $$= new Item_func_neg($2); }
- | '~' simple_expr %prec NEG { $$= new Item_func_bit_neg($2); }
- | not2 simple_expr %prec NEG { $$= negate_expression(YYTHD, $2); }
+ {
+ $$= new Item_func_concat($1, $3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | '+' simple_expr %prec NEG
+ { $$= $2; }
+ | '-' simple_expr %prec NEG
+ {
+ $$= new Item_func_neg($2);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | '~' simple_expr %prec NEG
+ {
+ $$= new Item_func_bit_neg($2);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | not2 simple_expr %prec NEG
+ {
+ $$= negate_expression(YYTHD, $2);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| '(' subselect ')'
{
$$= new Item_singlerow_subselect($2);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| '(' expr ')' { $$= $2; }
| '(' expr ',' expr_list ')'
{
$4->push_front($2);
$$= new Item_row(*$4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| ROW_SYM '(' expr ',' expr_list ')'
{
$5->push_front($3);
$$= new Item_row(*$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| EXISTS '(' subselect ')'
{
$$= new Item_exists_subselect($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
- | '{' ident expr '}' { $$= $3; }
+ | '{' ident expr '}'
+ { $$= $3; }
| MATCH ident_list_arg AGAINST '(' bit_expr fulltext_options ')'
- { $2->push_front($5);
- Select->add_ftfunc_to_list((Item_func_match*)
- ($$=new Item_func_match(*$2,$6))); }
- | ASCII_SYM '(' expr ')' { $$= new Item_func_ascii($3); }
+ {
+ $2->push_front($5);
+ Item_func_match *item= new Item_func_match(*$2,$6);
+ if (item == NULL)
+ MYSQL_YYABORT;
+ Select->add_ftfunc_to_list(item);
+ $$= item;
+ }
+ | ASCII_SYM '(' expr ')'
+ {
+ $$= new Item_func_ascii($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| BINARY simple_expr %prec NEG
{
$$= create_func_cast($2, ITEM_CAST_CHAR, NULL, NULL, &my_charset_bin);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| CAST_SYM '(' expr AS cast_type ')'
{
LEX *lex= Lex;
$$= create_func_cast($3, $5, lex->length, lex->dec, lex->charset);
- if (!$$)
+ if ($$ == NULL)
MYSQL_YYABORT;
}
| CASE_SYM opt_expr when_list opt_else END
- { $$= new Item_func_case(* $3, $2, $4 ); }
+ {
+ $$= new Item_func_case(* $3, $2, $4 );
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| CONVERT_SYM '(' expr ',' cast_type ')'
{
$$= create_func_cast($3, $5, Lex->length, Lex->dec, Lex->charset);
- if (!$$)
+ if ($$ == NULL)
MYSQL_YYABORT;
}
| CONVERT_SYM '(' expr USING charset_name ')'
- { $$= new Item_func_conv_charset($3,$5); }
+ {
+ $$= new Item_func_conv_charset($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DEFAULT '(' simple_ident ')'
{
if ($3->is_splocal())
@@ -4855,9 +5133,15 @@ simple_expr:
MYSQL_YYABORT;
}
$$= new Item_default_value(Lex->current_context(), $3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| VALUES '(' simple_ident_nospvar ')'
- { $$= new Item_insert_value(Lex->current_context(), $3); }
+ {
+ $$= new Item_insert_value(Lex->current_context(), $3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| FUNC_ARG0 '(' ')'
{
if (!$1.symbol->create_func)
@@ -4868,6 +5152,8 @@ simple_expr:
MYSQL_YYABORT;
}
$$= ((Item*(*)(void))($1.symbol->create_func))();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| FUNC_ARG1 '(' expr ')'
{
@@ -4879,6 +5165,8 @@ simple_expr:
MYSQL_YYABORT;
}
$$= ((Item*(*)(Item*))($1.symbol->create_func))($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| FUNC_ARG2 '(' expr ',' expr ')'
{
@@ -4890,6 +5178,8 @@ simple_expr:
MYSQL_YYABORT;
}
$$= ((Item*(*)(Item*,Item*))($1.symbol->create_func))($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| FUNC_ARG3 '(' expr ',' expr ',' expr ')'
{
@@ -4901,106 +5191,264 @@ simple_expr:
MYSQL_YYABORT;
}
$$= ((Item*(*)(Item*,Item*,Item*))($1.symbol->create_func))($3,$5,$7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| ADDDATE_SYM '(' expr ',' expr ')'
- { $$= new Item_date_add_interval($3, $5, INTERVAL_DAY, 0);}
+ {
+ $$= new Item_date_add_interval($3, $5, INTERVAL_DAY, 0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')'
- { $$= new Item_date_add_interval($3, $6, $7, 0); }
+ {
+ $$= new Item_date_add_interval($3, $6, $7, 0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| REPEAT_SYM '(' expr ',' expr ')'
- { $$= new Item_func_repeat($3,$5); }
+ {
+ $$= new Item_func_repeat($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| ATAN '(' expr ')'
- { $$= new Item_func_atan($3); }
+ {
+ $$= new Item_func_atan($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| ATAN '(' expr ',' expr ')'
- { $$= new Item_func_atan($3,$5); }
+ {
+ $$= new Item_func_atan($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| CHAR_SYM '(' expr_list ')'
- { $$= new Item_func_char(*$3); }
+ {
+ $$= new Item_func_char(*$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| CHAR_SYM '(' expr_list USING charset_name ')'
- { $$= new Item_func_char(*$3, $5); }
+ {
+ $$= new Item_func_char(*$3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| CHARSET '(' expr ')'
- { $$= new Item_func_charset($3); }
+ {
+ $$= new Item_func_charset($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| COALESCE '(' expr_list ')'
- { $$= new Item_func_coalesce(* $3); }
+ {
+ $$= new Item_func_coalesce(* $3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| COLLATION_SYM '(' expr ')'
- { $$= new Item_func_collation($3); }
+ {
+ $$= new Item_func_collation($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| CONCAT '(' expr_list ')'
- { $$= new Item_func_concat(* $3); }
+ {
+ $$= new Item_func_concat(* $3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| CONCAT_WS '(' expr ',' expr_list ')'
- { $5->push_front($3); $$= new Item_func_concat_ws(*$5); }
+ {
+ $5->push_front($3);
+ $$= new Item_func_concat_ws(*$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| CONVERT_TZ_SYM '(' expr ',' expr ',' expr ')'
{
if (Lex->add_time_zone_tables_to_query_tables(YYTHD))
MYSQL_YYABORT;
$$= new Item_func_convert_tz($3, $5, $7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| CURDATE optional_braces
- { $$= new Item_func_curdate_local(); Lex->safe_to_cache_query=0; }
+ {
+ $$= new Item_func_curdate_local();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->safe_to_cache_query=0;
+ }
| CURTIME optional_braces
- { $$= new Item_func_curtime_local(); Lex->safe_to_cache_query=0; }
+ {
+ $$= new Item_func_curtime_local();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->safe_to_cache_query=0;
+ }
| CURTIME '(' expr ')'
{
$$= new Item_func_curtime_local($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query=0;
}
| CURRENT_USER optional_braces
{
$$= new Item_func_current_user(Lex->current_context());
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query= 0;
}
| DATE_ADD_INTERVAL '(' expr ',' interval_expr interval ')'
- { $$= new Item_date_add_interval($3,$5,$6,0); }
+ {
+ $$= new Item_date_add_interval($3,$5,$6,0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DATE_SUB_INTERVAL '(' expr ',' interval_expr interval ')'
- { $$= new Item_date_add_interval($3,$5,$6,1); }
+ {
+ $$= new Item_date_add_interval($3,$5,$6,1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DATABASE '(' ')'
{
$$= new Item_func_database();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query=0;
}
| DATE_SYM '(' expr ')'
- { $$= new Item_date_typecast($3); }
- | DAY_SYM '(' expr ')'
- { $$= new Item_func_dayofmonth($3); }
+ {
+ $$= new Item_date_typecast($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | DAY_SYM '(' expr ')'
+ {
+ $$= new Item_func_dayofmonth($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| ELT_FUNC '(' expr ',' expr_list ')'
- { $5->push_front($3); $$= new Item_func_elt(*$5); }
+ {
+ $5->push_front($3);
+ $$= new Item_func_elt(*$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| MAKE_SET_SYM '(' expr ',' expr_list ')'
- { $$= new Item_func_make_set($3, *$5); }
+ {
+ $$= new Item_func_make_set($3, *$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| ENCRYPT '(' expr ')'
{
$$= new Item_func_encrypt($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->uncacheable(UNCACHEABLE_RAND);
}
- | ENCRYPT '(' expr ',' expr ')' { $$= new Item_func_encrypt($3,$5); }
+ | ENCRYPT '(' expr ',' expr ')'
+ {
+ $$= new Item_func_encrypt($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DECODE_SYM '(' expr ',' TEXT_STRING_literal ')'
- { $$= new Item_func_decode($3,$5.str); }
+ {
+ $$= new Item_func_decode($3,$5.str);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| ENCODE_SYM '(' expr ',' TEXT_STRING_literal ')'
- { $$= new Item_func_encode($3,$5.str); }
+ {
+ $$= new Item_func_encode($3,$5.str);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DES_DECRYPT_SYM '(' expr ')'
- { $$= new Item_func_des_decrypt($3); }
+ {
+ $$= new Item_func_des_decrypt($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DES_DECRYPT_SYM '(' expr ',' expr ')'
- { $$= new Item_func_des_decrypt($3,$5); }
+ {
+ $$= new Item_func_des_decrypt($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DES_ENCRYPT_SYM '(' expr ')'
- { $$= new Item_func_des_encrypt($3); }
+ {
+ $$= new Item_func_des_encrypt($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DES_ENCRYPT_SYM '(' expr ',' expr ')'
- { $$= new Item_func_des_encrypt($3,$5); }
+ {
+ $$= new Item_func_des_encrypt($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| EXPORT_SET '(' expr ',' expr ',' expr ')'
- { $$= new Item_func_export_set($3, $5, $7); }
+ {
+ $$= new Item_func_export_set($3, $5, $7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| EXPORT_SET '(' expr ',' expr ',' expr ',' expr ')'
- { $$= new Item_func_export_set($3, $5, $7, $9); }
+ {
+ $$= new Item_func_export_set($3, $5, $7, $9);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| EXPORT_SET '(' expr ',' expr ',' expr ',' expr ',' expr ')'
- { $$= new Item_func_export_set($3, $5, $7, $9, $11); }
+ {
+ $$= new Item_func_export_set($3, $5, $7, $9, $11);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| FORMAT_SYM '(' expr ',' NUM ')'
- { $$= new Item_func_format($3,atoi($5.str)); }
+ {
+ $$= new Item_func_format($3,atoi($5.str));
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| FROM_UNIXTIME '(' expr ')'
- { $$= new Item_func_from_unixtime($3); }
+ {
+ $$= new Item_func_from_unixtime($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| FROM_UNIXTIME '(' expr ',' expr ')'
{
- $$= new Item_func_date_format (new Item_func_from_unixtime($3),$5,0);
+ Item *item= new Item_func_from_unixtime($3);
+ if (item == NULL)
+ MYSQL_YYABORT;
+ $$= new Item_func_date_format (item, $5, 0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| FIELD_FUNC '(' expr ',' expr_list ')'
- { $5->push_front($3); $$= new Item_func_field(*$5); }
+ {
+ $5->push_front($3);
+ $$= new Item_func_field(*$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| geometry_function
{
#ifdef HAVE_SPATIAL
$$= $1;
+ /* $1 may be NULL, GEOM_NEW not tested for out of memory */
+ if ($$ == NULL)
+ MYSQL_YYABORT;
#else
my_error(ER_FEATURE_DISABLED, MYF(0),
sym_group_geom.name, sym_group_geom.needed_define);
@@ -5008,16 +5456,36 @@ simple_expr:
#endif
}
| GET_FORMAT '(' date_time_type ',' expr ')'
- { $$= new Item_func_get_format($3, $5); }
+ {
+ $$= new Item_func_get_format($3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| HOUR_SYM '(' expr ')'
- { $$= new Item_func_hour($3); }
+ {
+ $$= new Item_func_hour($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| IF '(' expr ',' expr ',' expr ')'
- { $$= new Item_func_if($3,$5,$7); }
+ {
+ $$= new Item_func_if($3,$5,$7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| INSERT '(' expr ',' expr ',' expr ',' expr ')'
- { $$= new Item_func_insert($3,$5,$7,$9); }
+ {
+ $$= new Item_func_insert($3,$5,$7,$9);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| interval_expr interval '+' expr
/* we cannot put interval before - */
- { $$= new Item_date_add_interval($4,$1,$2,0); }
+ {
+ $$= new Item_date_add_interval($4,$1,$2,0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| interval_expr
{
if ($1->type() != Item::ROW_ITEM)
@@ -5026,102 +5494,248 @@ simple_expr:
MYSQL_YYABORT;
}
$$= new Item_func_interval((Item_row *)$1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| LAST_INSERT_ID '(' ')'
{
$$= new Item_func_last_insert_id();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query= 0;
}
| LAST_INSERT_ID '(' expr ')'
{
$$= new Item_func_last_insert_id($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query= 0;
}
| LEFT '(' expr ',' expr ')'
- { $$= new Item_func_left($3,$5); }
+ {
+ $$= new Item_func_left($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| LOCATE '(' expr ',' expr ')'
- { $$= new Item_func_locate($5,$3); }
+ {
+ $$= new Item_func_locate($5,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| LOCATE '(' expr ',' expr ',' expr ')'
- { $$= new Item_func_locate($5,$3,$7); }
+ {
+ $$= new Item_func_locate($5,$3,$7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| GREATEST_SYM '(' expr ',' expr_list ')'
- { $5->push_front($3); $$= new Item_func_max(*$5); }
+ {
+ $5->push_front($3);
+ $$= new Item_func_max(*$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| LEAST_SYM '(' expr ',' expr_list ')'
- { $5->push_front($3); $$= new Item_func_min(*$5); }
+ {
+ $5->push_front($3);
+ $$= new Item_func_min(*$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| LOG_SYM '(' expr ')'
- { $$= new Item_func_log($3); }
+ {
+ $$= new Item_func_log($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| LOG_SYM '(' expr ',' expr ')'
- { $$= new Item_func_log($3, $5); }
+ {
+ $$= new Item_func_log($3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| MASTER_POS_WAIT '(' expr ',' expr ')'
{
$$= new Item_master_pos_wait($3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query=0;
- }
+ }
| MASTER_POS_WAIT '(' expr ',' expr ',' expr ')'
{
$$= new Item_master_pos_wait($3, $5, $7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query=0;
}
| MICROSECOND_SYM '(' expr ')'
- { $$= new Item_func_microsecond($3); }
+ {
+ $$= new Item_func_microsecond($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| MINUTE_SYM '(' expr ')'
- { $$= new Item_func_minute($3); }
+ {
+ $$= new Item_func_minute($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| MOD_SYM '(' expr ',' expr ')'
- { $$ = new Item_func_mod( $3, $5); }
+ {
+ $$= new Item_func_mod( $3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| MONTH_SYM '(' expr ')'
- { $$= new Item_func_month($3); }
+ {
+ $$= new Item_func_month($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| NOW_SYM optional_braces
- { $$= new Item_func_now_local(); Lex->safe_to_cache_query=0;}
+ {
+ $$= new Item_func_now_local();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->safe_to_cache_query=0;
+ }
| NOW_SYM '(' expr ')'
- { $$= new Item_func_now_local($3); Lex->safe_to_cache_query=0;}
+ {
+ $$= new Item_func_now_local($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->safe_to_cache_query=0;
+ }
| PASSWORD '(' expr ')'
{
$$= YYTHD->variables.old_passwords ?
(Item *) new Item_func_old_password($3) :
(Item *) new Item_func_password($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| OLD_PASSWORD '(' expr ')'
- { $$= new Item_func_old_password($3); }
+ {
+ $$= new Item_func_old_password($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| POSITION_SYM '(' bit_expr IN_SYM expr ')'
- { $$ = new Item_func_locate($5,$3); }
+ {
+ $$= new Item_func_locate($5,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| QUARTER_SYM '(' expr ')'
- { $$ = new Item_func_quarter($3); }
+ {
+ $$= new Item_func_quarter($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| RAND '(' expr ')'
- { $$= new Item_func_rand($3); Lex->uncacheable(UNCACHEABLE_RAND);}
+ {
+ $$= new Item_func_rand($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->uncacheable(UNCACHEABLE_RAND);
+ }
| RAND '(' ')'
- { $$= new Item_func_rand(); Lex->uncacheable(UNCACHEABLE_RAND);}
+ {
+ $$= new Item_func_rand();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->uncacheable(UNCACHEABLE_RAND);
+ }
| REPLACE '(' expr ',' expr ',' expr ')'
- { $$= new Item_func_replace($3,$5,$7); }
+ {
+ $$= new Item_func_replace($3,$5,$7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| RIGHT '(' expr ',' expr ')'
- { $$= new Item_func_right($3,$5); }
+ {
+ $$= new Item_func_right($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| ROUND '(' expr ')'
- { $$= new Item_func_round($3, new Item_int((char*)"0",0,1),0); }
- | ROUND '(' expr ',' expr ')' { $$= new Item_func_round($3,$5,0); }
+ {
+ Item *item= new Item_int((char*)"0",0,1);
+ if (item == NULL)
+ MYSQL_YYABORT;
+ $$= new Item_func_round($3, item, 0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | ROUND '(' expr ',' expr ')'
+ {
+ $$= new Item_func_round($3,$5,0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| ROW_COUNT_SYM '(' ')'
{
$$= new Item_func_row_count();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query= 0;
}
| SUBDATE_SYM '(' expr ',' expr ')'
- { $$= new Item_date_add_interval($3, $5, INTERVAL_DAY, 1);}
+ {
+ $$= new Item_date_add_interval($3, $5, INTERVAL_DAY, 1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')'
- { $$= new Item_date_add_interval($3, $6, $7, 1); }
+ {
+ $$= new Item_date_add_interval($3, $6, $7, 1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SECOND_SYM '(' expr ')'
- { $$= new Item_func_second($3); }
+ {
+ $$= new Item_func_second($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SUBSTRING '(' expr ',' expr ',' expr ')'
- { $$= new Item_func_substr($3,$5,$7); }
+ {
+ $$= new Item_func_substr($3,$5,$7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SUBSTRING '(' expr ',' expr ')'
- { $$= new Item_func_substr($3,$5); }
+ {
+ $$= new Item_func_substr($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SUBSTRING '(' expr FROM expr FOR_SYM expr ')'
- { $$= new Item_func_substr($3,$5,$7); }
+ {
+ $$= new Item_func_substr($3,$5,$7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SUBSTRING '(' expr FROM expr ')'
- { $$= new Item_func_substr($3,$5); }
+ {
+ $$= new Item_func_substr($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SUBSTRING_INDEX '(' expr ',' expr ',' expr ')'
- { $$= new Item_func_substr_index($3,$5,$7); }
+ {
+ $$= new Item_func_substr_index($3,$5,$7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SYSDATE optional_braces
{
if (global_system_variables.sysdate_is_now == 0)
$$= new Item_func_sysdate_local();
else $$= new Item_func_now_local();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query=0;
}
| SYSDATE '(' expr ')'
@@ -5129,36 +5743,94 @@ simple_expr:
if (global_system_variables.sysdate_is_now == 0)
$$= new Item_func_sysdate_local($3);
else $$= new Item_func_now_local($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query=0;
}
| TIME_SYM '(' expr ')'
- { $$= new Item_time_typecast($3); }
+ {
+ $$= new Item_time_typecast($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TIMESTAMP '(' expr ')'
- { $$= new Item_datetime_typecast($3); }
+ {
+ $$= new Item_datetime_typecast($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TIMESTAMP '(' expr ',' expr ')'
- { $$= new Item_func_add_time($3, $5, 1, 0); }
+ {
+ $$= new Item_func_add_time($3, $5, 1, 0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TIMESTAMP_ADD '(' interval_time_stamp ',' expr ',' expr ')'
- { $$= new Item_date_add_interval($7,$5,$3,0); }
+ {
+ $$= new Item_date_add_interval($7,$5,$3,0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TIMESTAMP_DIFF '(' interval_time_stamp ',' expr ',' expr ')'
- { $$= new Item_func_timestamp_diff($5,$7,$3); }
+ {
+ $$= new Item_func_timestamp_diff($5,$7,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TRIM '(' expr ')'
- { $$= new Item_func_trim($3); }
+ {
+ $$= new Item_func_trim($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TRIM '(' LEADING expr FROM expr ')'
- { $$= new Item_func_ltrim($6,$4); }
+ {
+ $$= new Item_func_ltrim($6,$4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TRIM '(' TRAILING expr FROM expr ')'
- { $$= new Item_func_rtrim($6,$4); }
+ {
+ $$= new Item_func_rtrim($6,$4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TRIM '(' BOTH expr FROM expr ')'
- { $$= new Item_func_trim($6,$4); }
+ {
+ $$= new Item_func_trim($6,$4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TRIM '(' LEADING FROM expr ')'
- { $$= new Item_func_ltrim($5); }
+ {
+ $$= new Item_func_ltrim($5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TRIM '(' TRAILING FROM expr ')'
- { $$= new Item_func_rtrim($5); }
+ {
+ $$= new Item_func_rtrim($5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TRIM '(' BOTH FROM expr ')'
- { $$= new Item_func_trim($5); }
+ {
+ $$= new Item_func_trim($5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TRIM '(' expr FROM expr ')'
- { $$= new Item_func_trim($5,$3); }
+ {
+ $$= new Item_func_trim($5,$3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| TRUNCATE_SYM '(' expr ',' expr ')'
- { $$= new Item_func_round($3,$5,1); }
+ {
+ $$= new Item_func_round($3,$5,1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| ident '.' ident '(' opt_expr_list ')'
{
LEX *lex= Lex;
@@ -5171,6 +5843,8 @@ simple_expr:
$$= new Item_func_sp(Lex->current_context(), name, *$5);
else
$$= new Item_func_sp(Lex->current_context(), name);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
lex->safe_to_cache_query=0;
}
| IDENT_sys '('
@@ -5311,47 +5985,110 @@ simple_expr:
else
$$= new Item_func_sp(Lex->current_context(), name);
}
- lex->safe_to_cache_query=0;
+ lex->safe_to_cache_query=0;
+
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| UNIQUE_USERS '(' text_literal ',' NUM ',' NUM ',' expr_list ')'
{
$$= new Item_func_unique_users($3,atoi($5.str),atoi($7.str), * $9);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| UNIX_TIMESTAMP '(' ')'
{
$$= new Item_func_unix_timestamp();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->safe_to_cache_query=0;
}
| UNIX_TIMESTAMP '(' expr ')'
- { $$= new Item_func_unix_timestamp($3); }
+ {
+ $$= new Item_func_unix_timestamp($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| USER '(' ')'
- { $$= new Item_func_user(); Lex->safe_to_cache_query=0; }
+ {
+ $$= new Item_func_user();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->safe_to_cache_query=0;
+ }
| UTC_DATE_SYM optional_braces
- { $$= new Item_func_curdate_utc(); Lex->safe_to_cache_query=0;}
+ {
+ $$= new Item_func_curdate_utc();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->safe_to_cache_query=0;
+ }
| UTC_TIME_SYM optional_braces
- { $$= new Item_func_curtime_utc(); Lex->safe_to_cache_query=0;}
+ {
+ $$= new Item_func_curtime_utc();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->safe_to_cache_query=0;
+ }
| UTC_TIMESTAMP_SYM optional_braces
- { $$= new Item_func_now_utc(); Lex->safe_to_cache_query=0;}
+ {
+ $$= new Item_func_now_utc();
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ Lex->safe_to_cache_query=0;
+ }
| WEEK_SYM '(' expr ')'
{
- $$= new Item_func_week($3,new Item_int((char*) "0",
- YYTHD->variables.default_week_format,1));
+ Item *item= new Item_int((char*) "0",
+ YYTHD->variables.default_week_format,
+ 1);
+ if (item == NULL)
+ MYSQL_YYABORT;
+ $$= new Item_func_week($3, item);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| WEEK_SYM '(' expr ',' expr ')'
- { $$= new Item_func_week($3,$5); }
+ {
+ $$= new Item_func_week($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| YEAR_SYM '(' expr ')'
- { $$= new Item_func_year($3); }
+ {
+ $$= new Item_func_year($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| YEARWEEK '(' expr ')'
- { $$= new Item_func_yearweek($3,new Item_int((char*) "0",0,1)); }
+ {
+ Item *item= new Item_int((char*) "0",0,1);
+ if (item == NULL)
+ MYSQL_YYABORT;
+ $$= new Item_func_yearweek($3, item);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| YEARWEEK '(' expr ',' expr ')'
- { $$= new Item_func_yearweek($3, $5); }
+ {
+ $$= new Item_func_yearweek($3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| BENCHMARK_SYM '(' ulong_num ',' expr ')'
{
$$=new Item_func_benchmark($3,$5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
Lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
}
| EXTRACT_SYM '(' interval FROM expr ')'
- { $$=new Item_extract( $3, $5); };
+ {
+ $$=new Item_extract( $3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ ;
geometry_function:
CONTAINS_SYM '(' expr ',' expr ')'
@@ -5427,7 +6164,12 @@ udf_expr_list:
;
udf_expr_list2:
- { Select->expr_list.push_front(new List<Item>); }
+ {
+ List<Item> *list= new List<Item>;
+ if (list == NULL)
+ MYSQL_YYABORT;
+ Select->expr_list.push_front(list);
+ }
udf_expr_list3
{ $$= Select->expr_list.pop(); }
;
@@ -5475,53 +6217,132 @@ udf_expr:
;
sum_expr:
- AVG_SYM '(' in_sum_expr ')'
- { $$=new Item_sum_avg($3); }
+ AVG_SYM '(' in_sum_expr ')'
+ {
+ $$=new Item_sum_avg($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| AVG_SYM '(' DISTINCT in_sum_expr ')'
- { $$=new Item_sum_avg_distinct($4); }
+ {
+ $$=new Item_sum_avg_distinct($4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| BIT_AND '(' in_sum_expr ')'
- { $$=new Item_sum_and($3); }
+ {
+ $$=new Item_sum_and($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| BIT_OR '(' in_sum_expr ')'
- { $$=new Item_sum_or($3); }
+ {
+ $$=new Item_sum_or($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| BIT_XOR '(' in_sum_expr ')'
- { $$=new Item_sum_xor($3); }
+ {
+ $$=new Item_sum_xor($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| COUNT_SYM '(' opt_all '*' ')'
- { $$=new Item_sum_count(new Item_int((int32) 0L,1)); }
+ {
+ Item *item= new Item_int((int32) 0L,1);
+ if (item == NULL)
+ MYSQL_YYABORT;
+ $$=new Item_sum_count(new Item_int((int32) 0L,1));
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| COUNT_SYM '(' in_sum_expr ')'
- { $$=new Item_sum_count($3); }
+ {
+ $$=new Item_sum_count($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| COUNT_SYM '(' DISTINCT
{ Select->in_sum_expr++; }
expr_list
{ Select->in_sum_expr--; }
')'
- { $$=new Item_sum_count_distinct(* $5); }
+ {
+ $$=new Item_sum_count_distinct(* $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| GROUP_UNIQUE_USERS '(' text_literal ',' NUM ',' NUM ',' in_sum_expr ')'
- { $$= new Item_sum_unique_users($3,atoi($5.str),atoi($7.str),$9); }
+ {
+ $$= new Item_sum_unique_users($3,atoi($5.str),atoi($7.str),$9);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| MIN_SYM '(' in_sum_expr ')'
- { $$=new Item_sum_min($3); }
+ {
+ $$=new Item_sum_min($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
/*
According to ANSI SQL, DISTINCT is allowed and has
no sence inside MIN and MAX grouping functions; so MIN|MAX(DISTINCT ...)
is processed like an ordinary MIN | MAX()
*/
| MIN_SYM '(' DISTINCT in_sum_expr ')'
- { $$=new Item_sum_min($4); }
+ {
+ $$=new Item_sum_min($4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| MAX_SYM '(' in_sum_expr ')'
- { $$=new Item_sum_max($3); }
+ {
+ $$=new Item_sum_max($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| MAX_SYM '(' DISTINCT in_sum_expr ')'
- { $$=new Item_sum_max($4); }
+ {
+ $$=new Item_sum_max($4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| STD_SYM '(' in_sum_expr ')'
- { $$=new Item_sum_std($3, 0); }
+ {
+ $$=new Item_sum_std($3, 0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| VARIANCE_SYM '(' in_sum_expr ')'
- { $$=new Item_sum_variance($3, 0); }
+ {
+ $$=new Item_sum_variance($3, 0);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| STDDEV_SAMP_SYM '(' in_sum_expr ')'
- { $$=new Item_sum_std($3, 1); }
+ {
+ $$=new Item_sum_std($3, 1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| VAR_SAMP_SYM '(' in_sum_expr ')'
- { $$=new Item_sum_variance($3, 1); }
+ {
+ $$=new Item_sum_variance($3, 1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SUM_SYM '(' in_sum_expr ')'
- { $$=new Item_sum_sum($3); }
+ {
+ $$=new Item_sum_sum($3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| SUM_SYM '(' DISTINCT in_sum_expr ')'
- { $$=new Item_sum_sum_distinct($4); }
+ {
+ $$=new Item_sum_sum_distinct($4);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| GROUP_CONCAT_SYM '(' opt_distinct
{ Select->in_sum_expr++; }
expr_list opt_gorder_clause
@@ -5532,6 +6353,8 @@ sum_expr:
sel->in_sum_expr--;
$$=new Item_func_group_concat(Lex->current_context(), $3, $5,
sel->gorder_list, $7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
$5->empty();
};
@@ -5554,12 +6377,16 @@ variable_aux:
ident_or_text SET_VAR expr
{
$$= new Item_func_set_user_var($1, $3);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
LEX *lex= Lex;
lex->uncacheable(UNCACHEABLE_RAND);
}
| ident_or_text
{
$$= new Item_func_get_user_var($1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
LEX *lex= Lex;
lex->uncacheable(UNCACHEABLE_RAND);
}
@@ -5580,11 +6407,14 @@ opt_distinct:
|DISTINCT { $$ = 1; };
opt_gconcat_separator:
- /* empty */
- {
- $$= new (YYTHD->mem_root) String(",", 1, &my_charset_latin1);
- }
- | SEPARATOR_SYM text_string { $$ = $2; };
+ /* empty */
+ {
+ $$= new (YYTHD->mem_root) String(",", 1, &my_charset_latin1);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | SEPARATOR_SYM text_string { $$ = $2; }
+ ;
opt_gorder_clause:
@@ -5598,6 +6428,8 @@ opt_gorder_clause:
select->gorder_list=
(SQL_LIST*) sql_memdup((char*) &select->order_list,
sizeof(st_sql_list));
+ if (select->gorder_list == NULL)
+ MYSQL_YYABORT;
select->order_list.empty();
};
@@ -5638,7 +6470,12 @@ opt_expr_list:
;
expr_list:
- { Select->expr_list.push_front(new List<Item>); }
+ {
+ List<Item> *list= new List<Item>;
+ if (list == NULL)
+ MYSQL_YYABORT;
+ Select->expr_list.push_front(list);
+ }
expr_list2
{ $$= Select->expr_list.pop(); };
@@ -5651,7 +6488,12 @@ ident_list_arg:
| '(' ident_list ')' { $$= $2; };
ident_list:
- { Select->expr_list.push_front(new List<Item>); }
+ {
+ List<Item> *list= new List<Item>;
+ if (list == NULL)
+ MYSQL_YYABORT;
+ Select->expr_list.push_front(new List<Item>);
+ }
ident_list2
{ $$= Select->expr_list.pop(); };
@@ -5671,6 +6513,8 @@ when_list:
WHEN_SYM expr THEN_SYM expr
{
$$= new List<Item>;
+ if ($$ == NULL)
+ MYSQL_YYABORT;
$$->push_back($2);
$$->push_back($4);
}
@@ -6077,32 +6921,53 @@ key_list_or_empty:
key_usage_list2:
key_usage_list2 ',' ident
- { Select->
- interval_list.push_back(new (YYTHD->mem_root) String((const char*) $3.str, $3.length,
- system_charset_info)); }
+ {
+ String *s= new (YYTHD->mem_root) String((const char*) $3.str,
+ $3.length,
+ system_charset_info);
+ if (s == NULL)
+ MYSQL_YYABORT;
+ Select->interval_list.push_back(s);
+ }
| ident
- { Select->
- interval_list.push_back(new (YYTHD->mem_root) String((const char*) $1.str, $1.length,
- system_charset_info)); }
+ {
+ String *s= new (YYTHD->mem_root) String((const char*) $1.str,
+ $1.length,
+ system_charset_info);
+ if (s == NULL)
+ MYSQL_YYABORT;
+ Select->interval_list.push_back(s);
+ }
| PRIMARY_SYM
- { Select->
- interval_list.push_back(new (YYTHD->mem_root) String("PRIMARY", 7,
- system_charset_info)); };
+ {
+ String *s= new (YYTHD->mem_root) String("PRIMARY", 7,
+ system_charset_info);
+ if (s == NULL)
+ MYSQL_YYABORT;
+ Select->interval_list.push_back(s);
+ }
+ ;
using_list:
ident
{
if (!($$= new List<String>))
MYSQL_YYABORT;
- $$->push_back(new (YYTHD->mem_root)
- String((const char *) $1.str, $1.length,
- system_charset_info));
+ String *s= new (YYTHD->mem_root) String((const char *) $1.str,
+ $1.length,
+ system_charset_info);
+ if (s == NULL)
+ MYSQL_YYABORT;
+ $$->push_back(s);
}
| using_list ',' ident
{
- $1->push_back(new (YYTHD->mem_root)
- String((const char *) $3.str, $3.length,
- system_charset_info));
+ String *s= new (YYTHD->mem_root) String((const char *) $3.str,
+ $3.length,
+ system_charset_info);
+ if (s == NULL)
+ MYSQL_YYABORT;
+ $1->push_back(s);
$$= $1;
};
@@ -6167,7 +7032,12 @@ table_alias:
opt_table_alias:
/* empty */ { $$=0; }
| table_alias ident
- { $$= (LEX_STRING*) sql_memdup(&$2,sizeof(LEX_STRING)); };
+ {
+ $$= (LEX_STRING*) sql_memdup(&$2,sizeof(LEX_STRING));
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ ;
opt_all:
/* empty */
@@ -6218,6 +7088,8 @@ opt_escape:
$$= ((YYTHD->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES) ?
new Item_string("", 0, &my_charset_latin1) :
new Item_string("\\", 1, &my_charset_latin1));
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
;
@@ -6388,9 +7260,24 @@ limit_option:
{
((Item_param *) $1)->limit_clause_param= TRUE;
}
- | ULONGLONG_NUM { $$= new Item_uint($1.str, $1.length); }
- | LONG_NUM { $$= new Item_uint($1.str, $1.length); }
- | NUM { $$= new Item_uint($1.str, $1.length); }
+ | ULONGLONG_NUM
+ {
+ $$= new Item_uint($1.str, $1.length);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | LONG_NUM
+ {
+ $$= new Item_uint($1.str, $1.length);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | NUM
+ {
+ $$= new Item_uint($1.str, $1.length);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
;
delete_limit_clause:
@@ -6443,10 +7330,11 @@ procedure_clause:
lex->proc_list.elements=0;
lex->proc_list.first=0;
lex->proc_list.next= (byte**) &lex->proc_list.first;
- if (add_proc_to_list(lex->thd, new Item_field(&lex->
- current_select->
- context,
- NULL,NULL,$2.str)))
+ Item_field *item= new Item_field(&lex->current_select->context,
+ NULL,NULL,$2.str);
+ if (item == NULL)
+ MYSQL_YYABORT;
+ if (add_proc_to_list(lex->thd, item))
MYSQL_YYABORT;
Lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
}
@@ -6465,7 +7353,7 @@ procedure_item:
remember_name expr
{
THD *thd= YYTHD;
- Lex_input_stream *lip= thd->m_lip;
+ Lex_input_stream *lip= YYLIP;
if (add_proc_to_list(thd, $2))
MYSQL_YYABORT;
@@ -6497,13 +7385,20 @@ select_var_ident:
{
LEX *lex=Lex;
if (lex->result)
- ((select_dumpvar *)lex->result)->var_list.push_back( new my_var($2,0,0,(enum_field_types)0));
+ {
+ my_var *var= new my_var($2,0,0,(enum_field_types)0);
+ if (var == NULL)
+ MYSQL_YYABORT;
+ ((select_dumpvar *)lex->result)->var_list.push_back(var);
+ }
else
+ {
/*
The parser won't create select_result instance only
if it's an EXPLAIN.
*/
DBUG_ASSERT(lex->describe);
+ }
}
| ident_or_text
{
@@ -6517,12 +7412,12 @@ select_var_ident:
}
if (lex->result)
{
- my_var *var;
- ((select_dumpvar *)lex->result)->
- var_list.push_back(var= new my_var($1,1,t->offset,t->type));
+ my_var *var= new my_var($1,1,t->offset,t->type);
+ if (var == NULL)
+ MYSQL_YYABORT;
+ ((select_dumpvar *)lex->result)->var_list.push_back(var);
#ifndef DBUG_OFF
- if (var)
- var->sp= lex->sphead;
+ var->sp= lex->sphead;
#endif
}
else
@@ -6607,11 +7502,13 @@ drop:
| DROP INDEX_SYM ident ON table_ident {}
{
LEX *lex=Lex;
+ Alter_drop *ad= new Alter_drop(Alter_drop::KEY, $3.str);
+ if (ad == NULL)
+ MYSQL_YYABORT;
lex->sql_command= SQLCOM_DROP_INDEX;
lex->alter_info.reset();
lex->alter_info.flags= ALTER_DROP_INDEX;
- lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY,
- $3.str));
+ lex->alter_info.drop_list.push_back(ad);
if (!lex->current_select->add_table_to_list(lex->thd, $5, NULL,
TL_OPTION_UPDATING))
MYSQL_YYABORT;
@@ -6636,6 +7533,8 @@ drop:
lex->sql_command = SQLCOM_DROP_FUNCTION;
lex->drop_if_exists= $3;
spname= new sp_name($4, $6, true);
+ if (spname == NULL)
+ MYSQL_YYABORT;
spname->init_qname(thd);
lex->spname= spname;
}
@@ -6655,6 +7554,8 @@ drop:
lex->sql_command = SQLCOM_DROP_FUNCTION;
lex->drop_if_exists= $3;
spname= new sp_name(db, $4, false);
+ if (spname == NULL)
+ MYSQL_YYABORT;
spname->init_qname(thd);
lex->spname= spname;
}
@@ -6869,7 +7770,12 @@ values:
expr_or_default:
expr { $$= $1;}
- | DEFAULT {$$= new Item_default_value(Lex->current_context()); }
+ | DEFAULT
+ {
+ $$= new Item_default_value(Lex->current_context());
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
;
opt_insert_update:
@@ -6987,15 +7893,21 @@ table_wild_list:
table_wild_one:
ident opt_wild opt_table_alias
{
- if (!Select->add_table_to_list(YYTHD, new Table_ident($1), $3,
+ Table_ident *ti= new Table_ident($1);
+ if (ti == NULL)
+ MYSQL_YYABORT;
+ if (!Select->add_table_to_list(YYTHD, ti, $3,
TL_OPTION_UPDATING |
TL_OPTION_ALIAS, Lex->lock_option))
MYSQL_YYABORT;
}
| ident '.' ident opt_wild opt_table_alias
{
+ Table_ident *ti= new Table_ident(YYTHD, $1, $3, 0);
+ if (ti == NULL)
+ MYSQL_YYABORT;
if (!Select->add_table_to_list(YYTHD,
- new Table_ident(YYTHD, $1, $3, 0),
+ ti,
$5,
TL_OPTION_UPDATING |
TL_OPTION_ALIAS,
@@ -7441,8 +8353,12 @@ binlog_from:
wild_and_where:
/* empty */
| LIKE TEXT_STRING_sys
- { Lex->wild= new (YYTHD->mem_root) String($2.str, $2.length,
- system_charset_info); }
+ {
+ Lex->wild= new (YYTHD->mem_root) String($2.str, $2.length,
+ system_charset_info);
+ if (Lex->wild == NULL)
+ MYSQL_YYABORT;
+ }
| WHERE expr
{
Select->where= $2;
@@ -7490,7 +8406,14 @@ opt_describe_column:
/* empty */ {}
| text_string { Lex->wild= $1; }
| ident
- { Lex->wild= new (YYTHD->mem_root) String((const char*) $1.str,$1.length,system_charset_info); };
+ {
+ Lex->wild= new (YYTHD->mem_root) String((const char*) $1.str,
+ $1.length,
+ system_charset_info);
+ if (Lex->wild == NULL)
+ MYSQL_YYABORT;
+ }
+ ;
/* flush things */
@@ -7605,7 +8528,7 @@ load: LOAD DATA_SYM
{
THD *thd= YYTHD;
LEX *lex= thd->lex;
- Lex_input_stream *lip= thd->m_lip;
+ Lex_input_stream *lip= YYLIP;
if (lex->sphead)
{
@@ -7647,10 +8570,7 @@ load_data:
}
opt_duplicate INTO
{
- THD *thd= YYTHD;
- LEX *lex= thd->lex;
- Lex_input_stream *lip= thd->m_lip;
- lex->fname_end= lip->ptr;
+ Lex->fname_end= YYLIP->ptr;
}
TABLE_SYM table_ident
{
@@ -7777,7 +8697,11 @@ fields_or_vars:
field_or_var:
simple_ident_nospvar {$$= $1;}
| '@' ident_or_text
- { $$= new Item_user_var_as_out_param($2); }
+ {
+ $$= new Item_user_var_as_out_param($2);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
;
opt_load_data_set_spec:
@@ -7802,9 +8726,14 @@ text_literal:
my_charset_is_ascii_based(cs_con)))
tmp= $1;
else
- thd->convert_string(&tmp, cs_con, $1.str, $1.length, cs_cli);
+ {
+ if (thd->convert_string(&tmp, cs_con, $1.str, $1.length, cs_cli))
+ MYSQL_YYABORT;
+ }
$$= new Item_string(tmp.str, tmp.length, cs_con,
DERIVATION_COERCIBLE, repertoire);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| NCHAR_STRING
{
@@ -7813,10 +8742,14 @@ text_literal:
DBUG_ASSERT(my_charset_is_ascii_based(national_charset_info));
$$= new Item_string($1.str, $1.length, national_charset_info,
DERIVATION_COERCIBLE, repertoire);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
}
| UNDERSCORE_CHARSET TEXT_STRING
{
$$= new Item_string($2.str, $2.length, Lex->underscore_charset);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
((Item_string*) $$)->set_repertoire_from_value();
}
| text_literal TEXT_STRING_literal
@@ -7838,28 +8771,37 @@ text_literal:
;
text_string:
- TEXT_STRING_literal
- { $$= new (YYTHD->mem_root) String($1.str,$1.length,YYTHD->variables.collation_connection); }
+ TEXT_STRING_literal
+ {
+ $$= new (YYTHD->mem_root) String($1.str,
+ $1.length,
+ YYTHD->variables.colla