summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <jonas@perch.ndb.mysql.com>2005-11-23 07:53:04 +0100
committerunknown <jonas@perch.ndb.mysql.com>2005-11-23 07:53:04 +0100
commit40ec24036c7ee3c1d0b898de58a83e71bae0aee6 (patch)
tree6d179b65c21107eb4b03aac4f465d9e967ba86a1
parent0122cd486bd1b21c3e8917f54bb757661787ea69 (diff)
parent9f2a2b9a3b43c0ac0f69c09299202cbbecf8d949 (diff)
downloadmariadb-git-40ec24036c7ee3c1d0b898de58a83e71bae0aee6.tar.gz
Merge joreland@bk-internal.mysql.com:/home/bk/mysql-4.1
into perch.ndb.mysql.com:/home/jonas/src/mysql-4.1-push
-rwxr-xr-xBUILD/compile-pentium64-debug-max13
-rw-r--r--Docs/Makefile.am24
-rw-r--r--Makefile.am35
-rw-r--r--client/Makefile.am4
-rw-r--r--client/mysql.cc10
-rw-r--r--cmd-line-utils/libedit/Makefile.am16
-rw-r--r--configure.in28
-rw-r--r--include/Makefile.am16
-rw-r--r--include/my_base.h2
-rw-r--r--libmysql/Makefile.am32
-rw-r--r--libmysql_r/Makefile.am4
-rw-r--r--libmysqld/Makefile.am16
-rw-r--r--libmysqld/examples/Makefile.am15
-rw-r--r--myisam/ft_parser.c4
-rw-r--r--myisam/mi_key.c3
-rw-r--r--mysql-test/Makefile.am3
-rw-r--r--mysql-test/mysql-test-run.sh6
-rw-r--r--mysql-test/r/analyze.result7
-rw-r--r--mysql-test/r/create.result79
-rw-r--r--mysql-test/r/csv.result47
-rw-r--r--mysql-test/r/ctype_cp932.result16
-rw-r--r--mysql-test/r/ctype_cp932_binlog.result19
-rw-r--r--mysql-test/r/fulltext.result4
-rw-r--r--mysql-test/r/handler.result18
-rw-r--r--mysql-test/r/mix_innodb_myisam_binlog.result51
-rw-r--r--mysql-test/r/myisam.result28
-rw-r--r--mysql-test/r/ndb_alter_table.result3
-rw-r--r--mysql-test/r/ndb_basic.result4
-rw-r--r--mysql-test/r/ndb_charset.result22
-rw-r--r--mysql-test/t/analyze.test9
-rw-r--r--mysql-test/t/create.test71
-rw-r--r--mysql-test/t/csv.test37
-rw-r--r--mysql-test/t/ctype_cp932.test23
-rw-r--r--mysql-test/t/ctype_cp932_binlog.test35
-rw-r--r--mysql-test/t/fulltext.test6
-rw-r--r--mysql-test/t/handler.test28
-rw-r--r--mysql-test/t/mix_innodb_myisam_binlog.test30
-rw-r--r--mysql-test/t/myisam.test30
-rw-r--r--mysql-test/t/ndb_alter_table.test4
-rw-r--r--mysql-test/t/ndb_basic.test8
-rw-r--r--mysql-test/t/ndb_charset.test19
-rw-r--r--ndb/docs/Makefile.am4
-rw-r--r--ndb/include/kernel/AttributeDescriptor.hpp9
-rw-r--r--ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp23
-rw-r--r--ndb/tools/ndb_size.pl87
-rw-r--r--ndb/tools/ndb_size.tmpl46
-rw-r--r--netware/Makefile.am6
-rw-r--r--pstack/Makefile.am2
-rw-r--r--scripts/Makefile.am5
-rw-r--r--scripts/mysql_fix_privilege_tables.sql2
-rw-r--r--sql-bench/Makefile.am2
-rw-r--r--sql-common/client.c6
-rw-r--r--sql/Makefile.am12
-rw-r--r--sql/examples/ha_tina.cc22
-rw-r--r--sql/ha_ndbcluster.cc46
-rw-r--r--sql/handler.cc2
-rw-r--r--sql/item_func.cc2
-rw-r--r--sql/item_func.h4
-rw-r--r--sql/item_strfunc.h2
-rw-r--r--sql/item_timefunc.h8
-rw-r--r--sql/mysql_priv.h3
-rw-r--r--sql/share/Makefile.am7
-rw-r--r--sql/spatial.h4
-rw-r--r--sql/sql_base.cc7
-rw-r--r--sql/sql_class.cc2
-rw-r--r--sql/sql_handler.cc49
-rw-r--r--sql/sql_select.cc8
-rw-r--r--sql/sql_show.cc11
-rw-r--r--sql/sql_table.cc17
-rw-r--r--support-files/Makefile.am2
-rw-r--r--support-files/mysql.spec.sh1
-rw-r--r--vio/vio.c2
-rw-r--r--vio/vio_priv.h1
-rw-r--r--vio/viossl.c19
74 files changed, 995 insertions, 257 deletions
diff --git a/BUILD/compile-pentium64-debug-max b/BUILD/compile-pentium64-debug-max
new file mode 100755
index 00000000000..f0745c88c90
--- /dev/null
+++ b/BUILD/compile-pentium64-debug-max
@@ -0,0 +1,13 @@
+#! /bin/sh
+
+path=`dirname $0`
+. "$path/SETUP.sh" $@ --with-debug=full
+
+extra_flags="$pentium64_cflags $debug_cflags $max_cflags"
+c_warnings="$c_warnings $debug_extra_warnings"
+cxx_warnings="$cxx_warnings $debug_extra_warnings"
+extra_configs="$pentium_configs $debug_configs $max_configs"
+
+extra_configs="$extra_configs "
+
+. "$path/FINISH.sh"
diff --git a/Docs/Makefile.am b/Docs/Makefile.am
index b1f69381774..685eaeef7d1 100644
--- a/Docs/Makefile.am
+++ b/Docs/Makefile.am
@@ -18,11 +18,11 @@ noinst_SCRIPTS = Support/generate-text-files.pl
EXTRA_DIST = $(noinst_SCRIPTS) mysql.info INSTALL-BINARY
-all: txt_files
-
-txt_files: ../INSTALL-SOURCE ../INSTALL-WIN-SOURCE ../EXCEPTIONS-CLIENT \
+TXT_FILES= ../INSTALL-SOURCE ../INSTALL-WIN-SOURCE ../EXCEPTIONS-CLIENT \
INSTALL-BINARY ../support-files/MacOSX/ReadMe.txt
+all-local: $(TXT_FILES)
+
# make sure that "make install" installs the info page, too
# automake only seems to take care of this automatically,
# if we're building the info page from texi directly.
@@ -30,28 +30,32 @@ install-data-hook: mysql.info
$(mkinstalldirs) $(DESTDIR)$(infodir)
$(INSTALL_DATA) $(srcdir)/mysql.info $(DESTDIR)$(infodir)
-CLEAN_FILES: $(txt_files)
- touch $(txt_files)
+uninstall-local:
+ @RM@ -f $(DESTDIR)$(infodir)/mysql.info
+
+# This target is not used in builds, just for convinience
+CLEAN_FILES: $(TXT_FILES)
+ touch $(TXT_FILES)
GT = $(srcdir)/Support/generate-text-files.pl
../INSTALL-SOURCE: mysql.info $(GT)
- perl -w $(GT) mysql.info "installing-source" "windows-source-build" > $@
+ perl -w $(GT) $< "installing-source" "windows-source-build" > $@
../INSTALL-WIN-SOURCE: mysql.info $(GT)
- perl -w $(GT) mysql.info "windows-source-build" "post-installation" > $@
+ perl -w $(GT) $< "windows-source-build" "post-installation" > $@
# We put the description for the binary installation here so that
# people who download source wont have to see it. It is moved up to
# the toplevel by the script that makes the binary tar files.
INSTALL-BINARY: mysql.info $(GT)
- perl -w $(GT) mysql.info "installing-binary" "installing-source" > $@
+ perl -w $(GT) $< "installing-binary" "installing-source" > $@
../EXCEPTIONS-CLIENT: mysql.info $(GT)
- perl -w $(GT) mysql.info "mysql-floss-license-exception" "function-index" > $@
+ perl -w $(GT) $< "mysql-floss-license-exception" "function-index" > $@
../support-files/MacOSX/ReadMe.txt: mysql.info $(GT)
- perl -w $(GT) mysql.info "mac-os-x-installation" "netware-installation" > $@
+ perl -w $(GT) $< "mac-os-x-installation" "netware-installation" > $@
# Don't update the files from bitkeeper
%::SCCS/s.%
diff --git a/Makefile.am b/Makefile.am
index eada6e08c50..2aefbd05283 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -19,7 +19,8 @@
AUTOMAKE_OPTIONS = foreign
# These are built from source in the Docs directory
-EXTRA_DIST = INSTALL-SOURCE README COPYING EXCEPTIONS-CLIENT
+EXTRA_DIST = INSTALL-SOURCE INSTALL-WIN-SOURCE \
+ README COPYING EXCEPTIONS-CLIENT
SUBDIRS = . include @docs_dirs@ @zlib_dir@ \
@readline_topdir@ sql-common \
@thread_dirs@ pstack \
@@ -34,16 +35,19 @@ DIST_SUBDIRS = . include @docs_dirs@ zlib \
BUILD netware os2 @libmysqld_dirs@ \
@bench_dirs@ support-files @fs_dirs@ @tools_dirs@
-# Relink after clean
-linked_sources = linked_client_sources linked_server_sources \
- linked_libmysql_sources linked_libmysql_r_sources \
- linked_libmysqld_sources linked_libmysqldex_sources \
+# Run these targets before any others, also make part of clean target,
+# to make sure we create new links after a clean.
+BUILT_SOURCES = linked_client_sources linked_server_sources \
+ @linked_client_targets@ \
+ @linked_libmysqld_targets@ \
linked_include_sources @linked_netware_sources@
-CLEANFILES = $(linked_sources)
-
-# This is just so that the linking is done early.
-all-local: $(linked_sources)
+# The db.h file is a bit special, see note in "configure.in".
+# In the case we didn't compile with bdb, a dummy file is put
+# there, but will not be removed by the bdb make file becuase
+# it will never be called.
+CLEANFILES = $(BUILT_SOURCES) bdb/build_unix/db.h
+DISTCLEANFILES = ac_available_languages_fragment
linked_include_sources:
cd include; $(MAKE) link_sources
@@ -73,13 +77,8 @@ linked_netware_sources:
cd @netware_dir@; $(MAKE) link_sources
echo timestamp > linked_netware_sources
-#avoid recursive make calls in sql directory
linked_server_sources:
- cd sql; rm -f mini_client_errors.c;\
- @LN_CP_F@ ../libmysql/errmsg.c mini_client_errors.c;\
- rm -f pack.c;@LN_CP_F@ ../sql-common/pack.c pack.c;\
- rm -f client.c;@LN_CP_F@ ../sql-common/client.c client.c;\
- rm -f my_time.c;@LN_CP_F@ ../sql-common/my_time.c my_time.c
+ cd sql; $(MAKE) link_sources
echo timestamp > linked_server_sources
# Create permission databases
@@ -91,7 +90,7 @@ bin-dist: all
# Remove BK's "SCCS" subdirectories from source distribution
dist-hook:
- rm -rf `find $(distdir) -type d -name SCCS`
+ rm -rf `find $(distdir) -type d -name SCCS -print`
tags:
support-files/build-tags
@@ -112,7 +111,7 @@ test:
test-force:
cd mysql-test; \
- ./mysql-test-run --force ; \
+ ./mysql-test-run --force && \
./mysql-test-run --ps-protocol --force
# We are testing a new Perl version of the test script
@@ -123,5 +122,5 @@ test-pl:
test-force-pl:
cd mysql-test; \
- ./mysql-test-run.pl --force ; \
+ ./mysql-test-run.pl --force && \
./mysql-test-run.pl --ps-protocol --force
diff --git a/client/Makefile.am b/client/Makefile.am
index 1e8851fb3b9..c0569d5fa6f 100644
--- a/client/Makefile.am
+++ b/client/Makefile.am
@@ -41,8 +41,8 @@ DEFS = -DUNDEF_THREADS_HACK
link_sources:
for f in $(sql_src) ; do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(top_srcdir)/sql/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/sql/$$f $$f; \
done;
# Don't update the files from bitkeeper
diff --git a/client/mysql.cc b/client/mysql.cc
index d408e8a5423..1c4fbf8f06f 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -1813,9 +1813,13 @@ com_help(String *buffer __attribute__((unused)),
if (help_arg)
return com_server_help(buffer,line,help_arg+1);
- put_info("\nFor the complete MySQL Manual online, visit:\n http://www.mysql.com/documentation\n", INFO_INFO);
- put_info("For info on technical support from MySQL developers, visit:\n http://www.mysql.com/support\n", INFO_INFO);
- put_info("For info on MySQL books, utilities, consultants, etc., visit:\n http://www.mysql.com/portal\n", INFO_INFO);
+ put_info("\nFor information about MySQL products and services, visit:\n"
+ " http://www.mysql.com/\n"
+ "For developer information, including the MySQL Reference Manual, "
+ "visit:\n"
+ " http://dev.mysql.com/\n"
+ "To buy MySQL Network Support, training, or other products, visit:\n"
+ " https://shop.mysql.com/\n", INFO_INFO);
put_info("List of all MySQL commands:", INFO_INFO);
if (!named_cmds)
put_info("Note that all text commands must be first on line and end with ';'",INFO_INFO);
diff --git a/cmd-line-utils/libedit/Makefile.am b/cmd-line-utils/libedit/Makefile.am
index af1bf8b2c97..ae6755f1c5c 100644
--- a/cmd-line-utils/libedit/Makefile.am
+++ b/cmd-line-utils/libedit/Makefile.am
@@ -2,8 +2,8 @@
# Makefile for the GNU readline library.
# Copyright (C) 1994,1996,1997 Free Software Foundation, Inc.
-ASRC=vi.c emacs.c common.c
-AHDR=vi.h emacs.h common.h
+ASRC = $(srcdir)/vi.c $(srcdir)/emacs.c $(srcdir)/common.c
+AHDR = vi.h emacs.h common.h
INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include \
-I$(srcdir)/../.. -I..
@@ -42,16 +42,16 @@ SUFFIXES = .sh
$< > $@-t
@MV@ $@-t $@
-vi.h: vi.c makelist
- sh ./makelist -h ./vi.c > $@.tmp && \
+vi.h: $(srcdir)/vi.c makelist
+ sh ./makelist -h $(srcdir)/vi.c > $@.tmp && \
mv $@.tmp $@
-emacs.h: emacs.c makelist
- sh ./makelist -h ./emacs.c > $@.tmp && \
+emacs.h: $(srcdir)/emacs.c makelist
+ sh ./makelist -h $(srcdir)/emacs.c > $@.tmp && \
mv $@.tmp $@
-common.h: common.c makelist
- sh ./makelist -h ./common.c > $@.tmp && \
+common.h: $(srcdir)/common.c makelist
+ sh ./makelist -h $(srcdir)/common.c > $@.tmp && \
mv $@.tmp $@
help.c: ${ASRC} makelist
diff --git a/configure.in b/configure.in
index f3354cfa981..41475ffcd4a 100644
--- a/configure.in
+++ b/configure.in
@@ -37,7 +37,7 @@ romanian russian serbian slovak spanish swedish ukrainian"
# Generate make rules for all error messages
AVAILABLE_LANGUAGES_ERRORS=
-AVAILABLE_LANGUAGES_ERRORS_RULES=$srcdir/ac_available_languages_fragment
+AVAILABLE_LANGUAGES_ERRORS_RULES=ac_available_languages_fragment
rm -f $AVAILABLE_LANGUAGES_ERRORS_RULES
for i in $AVAILABLE_LANGUAGES
do
@@ -1672,6 +1672,19 @@ if expr "$SYSTEM_TYPE" : ".*netware.*" > /dev/null; then
OPTIMIZE_CXXFLAGS="$OPTIMIZE_CXXFLAGS -DNDEBUG"
fi
+# If the user specified CFLAGS, we won't add any optimizations
+if test -n "$SAVE_CFLAGS"
+then
+ OPTIMIZE_CFLAGS=""
+ DEBUG_OPTIMIZE_CC=""
+fi
+# Ditto for CXXFLAGS
+if test -n "$SAVE_CXXFLAGS"
+then
+ OPTIMIZE_CXXFLAGS=""
+ DEBUG_OPTIMIZE_CXX=""
+fi
+
AC_ARG_WITH(debug,
[ --without-debug Build a production version without debugging code],
[with_debug=$withval],
@@ -2300,6 +2313,7 @@ then
echo "Warning: extra-tools disabled because --enable-thread-safe-client wasn't used"
else
tools_dirs="tools"
+ AC_CONFIG_FILES(tools/Makefile)
fi
fi
AC_SUBST(tools_dirs)
@@ -2310,9 +2324,12 @@ MYSQL_CHECK_VIO
MYSQL_CHECK_OPENSSL
libmysqld_dirs=
+linked_libmysqld_targets=
if test "$with_embedded_server" = "yes"
then
libmysqld_dirs=libmysqld
+ linked_libmysqld_targets="linked_libmysqld_sources linked_libmysqldex_sources"
+ AC_CONFIG_FILES(libmysqld/Makefile libmysqld/examples/Makefile)
# We can't build embedded library without building the server, because
# we depend on libmysys, libmystrings, libmyisam, etc.
with_server=yes
@@ -2321,6 +2338,7 @@ fi
# mysql_config --libmysqld-libs will print out something like
# -L/path/to/lib/mysql -lmysqld -lmyisam -lmysys -lmystrings -ldbug ...
AC_SUBST([libmysqld_dirs])
+AC_SUBST([linked_libmysqld_targets])
# Shall we build the docs?
AC_ARG_WITH(docs,
@@ -2424,7 +2442,7 @@ then
readline_basedir="libedit"
readline_dir="$readline_topdir/$readline_basedir"
readline_link="\$(top_builddir)/cmd-line-utils/libedit/libedit.a"
- readline_h_ln_cmd="\$(LN) -s \$(top_builddir)/cmd-line-utils/libedit/readline readline"
+ readline_h_ln_cmd="\$(LN) -s \$(top_srcdir)/cmd-line-utils/libedit/readline readline"
compile_libedit=yes
AC_DEFINE_UNQUOTED(HAVE_HIST_ENTRY, 1)
AC_DEFINE_UNQUOTED(USE_LIBEDIT_INTERFACE, 1)
@@ -2434,7 +2452,7 @@ then
readline_basedir="readline"
readline_dir="$readline_topdir/$readline_basedir"
readline_link="\$(top_builddir)/cmd-line-utils/readline/libreadline.a"
- readline_h_ln_cmd="\$(LN) -s \$(top_builddir)/cmd-line-utils/readline readline"
+ readline_h_ln_cmd="\$(LN) -s \$(top_srcdir)/cmd-line-utils/readline readline"
compile_readline=yes
AC_DEFINE_UNQUOTED(USE_NEW_READLINE_INTERFACE, 1)
else
@@ -2915,6 +2933,7 @@ if test "$THREAD_SAFE_CLIENT" != "no"
then
sql_client_dirs="libmysql_r $sql_client_dirs"
linked_client_targets="$linked_client_targets linked_libmysql_r_sources"
+ AC_CONFIG_FILES(libmysql_r/Makefile)
AC_DEFINE([THREAD_SAFE_CLIENT], [1], [Should be client be thread safe])
fi
@@ -3269,12 +3288,11 @@ AC_CONFIG_FILES(Makefile extra/Makefile mysys/Makefile dnl
myisam/Makefile myisammrg/Makefile dnl
os2/Makefile os2/include/Makefile os2/include/sys/Makefile dnl
man/Makefile BUILD/Makefile vio/Makefile dnl
- libmysql_r/Makefile libmysqld/Makefile libmysqld/examples/Makefile dnl
libmysql/Makefile client/Makefile dnl
pstack/Makefile pstack/aout/Makefile sql/Makefile sql/share/Makefile dnl
sql-common/Makefile SSL/Makefile dnl
dbug/Makefile scripts/Makefile dnl
- include/Makefile sql-bench/Makefile tools/Makefile dnl
+ include/Makefile sql-bench/Makefile dnl
tests/Makefile Docs/Makefile support-files/Makefile dnl
support-files/MacOSX/Makefile mysql-test/Makefile dnl
netware/Makefile dnl
diff --git a/include/Makefile.am b/include/Makefile.am
index 0c845900a4f..3fa7b04d69a 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -38,23 +38,15 @@ SUPERCLEANFILES = mysql_version.h my_config.h
# Some include files that may be moved and patched by configure
DISTCLEANFILES = sched.h $(SUPERCLEANFILES)
-clean:
+clean-local:
$(RM) -fr readline
-distclean:
+distclean-local:
$(RM) -fr readline
-all-local: my_config.h
-
-# Since we include my_config.h it better exist from the beginning
-link_sources:
- $(CP) ../config.h my_config.h
- -$(RM) -fr readline
- @readline_h_ln_cmd@
-
-# Keep automake happy
-
my_config.h: ../config.h
$(CP) ../config.h my_config.h
+
+link_sources:
-$(RM) -fr readline
@readline_h_ln_cmd@
diff --git a/include/my_base.h b/include/my_base.h
index d702ec45140..271e7cd23ba 100644
--- a/include/my_base.h
+++ b/include/my_base.h
@@ -231,6 +231,7 @@ enum ha_base_keytype {
#define HA_OPTION_CHECKSUM 32
#define HA_OPTION_DELAY_KEY_WRITE 64
#define HA_OPTION_NO_PACK_KEYS 128 /* Reserved for MySQL */
+#define HA_OPTION_CREATE_FROM_ENGINE 256
#define HA_OPTION_TEMP_COMPRESS_RECORD ((uint) 16384) /* set by isamchk */
#define HA_OPTION_READ_ONLY_DATA ((uint) 32768) /* Set by isamchk */
@@ -241,7 +242,6 @@ enum ha_base_keytype {
#define HA_CREATE_TMP_TABLE 4
#define HA_CREATE_CHECKSUM 8
#define HA_CREATE_DELAY_KEY_WRITE 64
-#define HA_CREATE_FROM_ENGINE 128
/* Bits in flag to _status */
diff --git a/libmysql/Makefile.am b/libmysql/Makefile.am
index 4bd9eddafb0..8e76d0f125d 100644
--- a/libmysql/Makefile.am
+++ b/libmysql/Makefile.am
@@ -43,33 +43,33 @@ link_sources:
vs=`echo $(vio_objects) | sed "s;\.lo;.c;g"`; \
scs=`echo $(sql_cmn_objects) | sed "s;\.lo;.c;g"`; \
for f in $$ss; do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../strings/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/strings/$$f $$f; \
done; \
for f in $$vs $(vioheaders); do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../vio/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/vio/$$f $$f; \
done; \
for f in $$scs; do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../sql-common/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/sql-common/$$f $$f; \
done; \
for f in $(mystringsextra); do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../strings/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/strings/$$f $$f; \
done; \
for f in $$ds; do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../dbug/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/dbug/$$f $$f; \
done; \
for f in $$ms $(mysysheaders); do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../mysys/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/mysys/$$f $$f; \
done; \
- rm -f $(srcdir)/net.c; \
- @LN_CP_F@ $(srcdir)/../sql/net_serv.cc $(srcdir)/net.c ; \
- rm -f $(srcdir)/password.c; \
- @LN_CP_F@ $(srcdir)/../sql/password.c $(srcdir)/password.c
+ rm -f net.c; \
+ @LN_CP_F@ $(top_srcdir)/sql/net_serv.cc net.c ; \
+ rm -f password.c; \
+ @LN_CP_F@ $(top_srcdir)/sql/password.c password.c
# This part requires GNUmake
#
diff --git a/libmysql_r/Makefile.am b/libmysql_r/Makefile.am
index a76ef675189..f7cf00321cb 100644
--- a/libmysql_r/Makefile.am
+++ b/libmysql_r/Makefile.am
@@ -41,6 +41,6 @@ libmysqlclient_r_la_LDFLAGS = $(target_ldflags)
link_sources:
set -x; \
for f in `cd $(libmysql_dir) && echo *.[ch]`; do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(libmysql_dir)/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(libmysql_dir)/$$f $$f; \
done
diff --git a/libmysqld/Makefile.am b/libmysqld/Makefile.am
index f4e9d4e6b39..d6f68047296 100644
--- a/libmysqld/Makefile.am
+++ b/libmysqld/Makefile.am
@@ -122,19 +122,19 @@ endif
link_sources:
set -x; \
for f in $(sqlsources); do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../sql/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/sql/$$f $$f; \
done; \
for f in $(libmysqlsources); do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../libmysql/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/libmysql/$$f $$f; \
done; \
for f in $(sqlexamplessources); do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../sql/examples/$$f $(srcdir)/$$f; \
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/sql/examples/$$f $$f; \
done; \
- rm -f $(srcdir)/client_settings.h; \
- @LN_CP_F@ $(srcdir)/../libmysql/client_settings.h $(srcdir)/client_settings.h;
+ rm -f client_settings.h; \
+ @LN_CP_F@ $(top_srcdir)/libmysql/client_settings.h client_settings.h
clean-local:
diff --git a/libmysqld/examples/Makefile.am b/libmysqld/examples/Makefile.am
index d19023c100f..588a6153a3b 100644
--- a/libmysqld/examples/Makefile.am
+++ b/libmysqld/examples/Makefile.am
@@ -20,14 +20,15 @@ client_sources = $(mysqltest_embedded_SOURCES) $(mysql_SOURCES)
tests_sources= $(mysql_client_test_embedded_SOURCES)
link_sources:
+ set -x; \
for f in $(client_sources); do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../../client/$$f $(srcdir)/$$f; \
- done;
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/client/$$f $$f; \
+ done; \
for f in $(tests_sources); do \
- rm -f $(srcdir)/$$f; \
- @LN_CP_F@ $(srcdir)/../../tests/$$f $(srcdir)/$$f; \
- done;
+ rm -f $$f; \
+ @LN_CP_F@ $(top_srcdir)/tests/$$f $$f; \
+ done
DEFS = -DEMBEDDED_LIBRARY
INCLUDES = @MT_INCLUDES@ \
@@ -48,7 +49,7 @@ mysql_LDADD = @readline_link@ @TERMCAP_LIB@ $(LDADD)
mysql_client_test_embedded_LINK = $(CXXLINK)
mysql_client_test_embedded_SOURCES = mysql_client_test.c
-clean:
+clean-local:
rm -f $(client_sources)
rm -f $(tests_sources)
diff --git a/myisam/ft_parser.c b/myisam/ft_parser.c
index 0b1e68b0d70..8e4769ebc75 100644
--- a/myisam/ft_parser.c
+++ b/myisam/ft_parser.c
@@ -188,8 +188,10 @@ byte ft_simple_get_word(CHARSET_INFO *cs, byte **start, byte *end,
for (word->pos=doc; doc<end; length++, mbl=my_mbcharlen(cs, *(uchar *)doc), doc+=(mbl ? mbl : 1))
if (true_word_char(cs,*doc))
mwc= 0;
- else if (!misc_word_char(*doc) || mwc++)
+ else if (!misc_word_char(*doc) || mwc)
break;
+ else
+ mwc++;
word->len= (uint)(doc-word->pos) - mwc;
diff --git a/myisam/mi_key.c b/myisam/mi_key.c
index 9df22889b22..f4b92f969db 100644
--- a/myisam/mi_key.c
+++ b/myisam/mi_key.c
@@ -217,7 +217,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old,
{
k_length-=length;
if (keyseg->flag & (HA_VAR_LENGTH | HA_BLOB_PART))
+ {
+ old+= 2;
k_length-=2; /* Skip length */
+ }
continue; /* Found NULL */
}
}
diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am
index d062ee79827..9a88aff8300 100644
--- a/mysql-test/Makefile.am
+++ b/mysql-test/Makefile.am
@@ -87,6 +87,9 @@ install-data-local:
$(INSTALL_DATA) $(srcdir)/lib/init_db.sql $(DESTDIR)$(testdir)/lib
$(INSTALL_DATA) $(srcdir)/lib/*.pl $(DESTDIR)$(testdir)/lib
+uninstall-local:
+ @RM@ -f -r $(DESTDIR)$(testdir)
+
std_data/client-key.pem:
@CP@ $(top_srcdir)/SSL/$(@F) $(srcdir)/std_data
std_data/client-cert.pem:
diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh
index dcbd74549d3..3f303911d11 100644
--- a/mysql-test/mysql-test-run.sh
+++ b/mysql-test/mysql-test-run.sh
@@ -216,10 +216,10 @@ MYSQL_MANAGER_USER=root
# number is to be used, 0 - 16 or similar.
#
if [ -n "$MTR_BUILD_THREAD" ] ; then
- MASTER_MYPORT=`expr $MTR_BUILD_THREAD '*' 40 + 8120`
+ MASTER_MYPORT=`expr $MTR_BUILD_THREAD '*' 5 + 10000`
MYSQL_MANAGER_PORT=`expr $MASTER_MYPORT + 2`
- SLAVE_MYPORT=`expr $MASTER_MYPORT + 16`
- NDBCLUSTER_PORT=`expr $MASTER_MYPORT + 24`
+ SLAVE_MYPORT=`expr $MASTER_MYPORT + 3`
+ NDBCLUSTER_PORT=`expr $MASTER_MYPORT + 4`
echo "Using MTR_BUILD_THREAD = $MTR_BUILD_THREAD"
echo "Using MASTER_MYPORT = $MASTER_MYPORT"
diff --git a/mysql-test/r/analyze.result b/mysql-test/r/analyze.result
index 0b44a502b13..796b382f5d6 100644
--- a/mysql-test/r/analyze.result
+++ b/mysql-test/r/analyze.result
@@ -30,3 +30,10 @@ check table t1;
Table Op Msg_type Msg_text
test.t1 check status OK
drop table t1;
+CREATE TABLE t1 (a int);
+prepare stmt1 from "SELECT * FROM t1 PROCEDURE ANALYSE()";
+execute stmt1;
+Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
+execute stmt1;
+Field_name Min_value Max_value Min_length Max_length Empties_or_zeros Nulls Avg_value_or_avg_length Std Optimal_fieldtype
+deallocate prepare stmt1;
diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result
index 55ad6e3304a..a933027cdb1 100644
--- a/mysql-test/r/create.result
+++ b/mysql-test/r/create.result
@@ -1,4 +1,4 @@
-drop table if exists t1,t2,t3;
+drop table if exists t1,t2,t3,t4,t5;
drop database if exists mysqltest;
create table t1 (b char(0));
insert into t1 values (""),(null);
@@ -632,3 +632,80 @@ t1 CREATE TABLE `t1` (
PRIMARY KEY (`a`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1;
+CREATE TABLE t2 (
+a int(11) default NULL
+);
+insert into t2 values(111);
+create table t1 (
+a varchar(12) charset utf8 collate utf8_bin not null,
+b int not null, primary key (a)
+) select a, 1 as b from t2 ;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(12) character set utf8 collate utf8_bin NOT NULL default '',
+ `b` int(11) NOT NULL default '0',
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
+create table t1 (
+a varchar(12) charset utf8 collate utf8_bin not null,
+b int not null, primary key (a)
+) select 'a' as a , 1 as b from t2 ;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(12) character set utf8 collate utf8_bin NOT NULL default '',
+ `b` int(11) NOT NULL default '0',
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1;
+create table t1 (
+a varchar(12) charset utf8 collate utf8_bin,
+b int not null, primary key (a)
+) select 'a' as a , 1 as b from t2 ;
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` varchar(12) character set utf8 collate utf8_bin NOT NULL default '',
+ `b` int(11) NOT NULL default '0',
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1, t2;
+create table t1 (
+a1 int not null,
+a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int
+);
+insert into t1 values (1,1,1, 1,1,1, 1,1,1);
+create table t2 (
+a1 varchar(12) charset utf8 collate utf8_bin not null,
+a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int,
+primary key (a1)
+) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1 ;
+drop table t2;
+create table t2 (
+a1 varchar(12) charset utf8 collate utf8_bin,
+a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int
+) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1;
+drop table t1, t2;
+create table t1 (
+a1 int, a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int
+);
+insert into t1 values (1,1,1, 1,1,1, 1,1,1);
+create table t2 (
+a1 varchar(12) charset utf8 collate utf8_bin not null,
+a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int,
+primary key (a1)
+) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1 ;
+drop table t2;
+create table t2 ( a int default 3, b int default 3)
+select a1,a2 from t1;
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` int(11) default '3',
+ `b` int(11) default '3',
+ `a1` int(11) default NULL,
+ `a2` int(11) default NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+drop table t1, t2;
diff --git a/mysql-test/r/csv.result b/mysql-test/r/csv.result
index ea0d34271b5..2e3d11ad461 100644
--- a/mysql-test/r/csv.result
+++ b/mysql-test/r/csv.result
@@ -4929,3 +4929,50 @@ Warnings:
Note 1051 Unknown table 't2'
Note 1051 Unknown table 't3'
Note 1051 Unknown table 't4'
+DROP TABLE IF EXISTS bug13894;
+CREATE TABLE bug13894 ( val integer ) ENGINE = CSV;
+INSERT INTO bug13894 VALUES (5);
+INSERT INTO bug13894 VALUES (10);
+INSERT INTO bug13894 VALUES (11);
+INSERT INTO bug13894 VALUES (10);
+SELECT * FROM bug13894;
+val
+5
+10
+11
+10
+UPDATE bug13894 SET val=6 WHERE val=10;
+SELECT * FROM bug13894;
+val
+5
+11
+6
+6
+DROP TABLE bug13894;
+DROP TABLE IF EXISTS bug14672;
+CREATE TABLE bug14672 (c1 integer) engine = CSV;
+INSERT INTO bug14672 VALUES (1), (2), (3);
+SELECT * FROM bug14672;
+c1
+1
+2
+3
+DELETE FROM bug14672 WHERE c1 = 2;
+SELECT * FROM bug14672;
+c1
+1
+3
+INSERT INTO bug14672 VALUES (4);
+SELECT * FROM bug14672;
+c1
+1
+3
+4
+INSERT INTO bug14672 VALUES (5);
+SELECT * FROM bug14672;
+c1
+1
+3
+4
+5
+DROP TABLE bug14672;
diff --git a/mysql-test/r/ctype_cp932.result b/mysql-test/r/ctype_cp932.result
index 8763055647c..b384eaa144d 100644
--- a/mysql-test/r/ctype_cp932.result
+++ b/mysql-test/r/ctype_cp932.result
@@ -8576,22 +8576,6 @@ FC4B
DROP TABLE t1;
DROP TABLE t2;
DROP TABLE t3;
-RESET MASTER;
-CREATE TABLE t1(f1 blob);
-PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
-SET @var1= x'8300';
-EXECUTE stmt1 USING @var1;
-SHOW BINLOG EVENTS FROM 79;
-Log_name Pos Event_type Server_id Orig_log_pos Info
-master-bin.000001 # Query 1 # use `test`; SET ONE_SHOT CHARACTER_SET_CLIENT=95,COLLATION_CONNECTION=95,COLLATION_DATABASE=95,COLLATION_SERVER=8
-master-bin.000001 # Query 1 # use `test`; CREATE TABLE t1(f1 blob)
-master-bin.000001 # Query 1 # use `test`; SET ONE_SHOT CHARACTER_SET_CLIENT=95,COLLATION_CONNECTION=95,COLLATION_DATABASE=95,COLLATION_SERVER=8
-master-bin.000001 # User var 1 # @`var1`=_binary 0x8300 COLLATE binary
-master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES(@'var1')
-SELECT HEX(f1) FROM t1;
-HEX(f1)
-8300
-DROP table t1;
SET collation_connection='cp932_japanese_ci';
create table t1 select repeat('a',4000) a;
delete from t1;
diff --git a/mysql-test/r/ctype_cp932_binlog.result b/mysql-test/r/ctype_cp932_binlog.result
new file mode 100644
index 00000000000..89f0ae71f4f
--- /dev/null
+++ b/mysql-test/r/ctype_cp932_binlog.result
@@ -0,0 +1,19 @@
+drop table if exists t1;
+set names cp932;
+set character_set_database = cp932;
+RESET MASTER;
+CREATE TABLE t1(f1 blob);
+PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
+SET @var1= x'8300';
+EXECUTE stmt1 USING @var1;
+SHOW BINLOG EVENTS FROM 79;
+Log_name Pos Event_type Server_id Orig_log_pos Info
+master-bin.000001 # Query 1 # use `test`; SET ONE_SHOT CHARACTER_SET_CLIENT=95,COLLATION_CONNECTION=95,COLLATION_DATABASE=95,COLLATION_SERVER=8
+master-bin.000001 # Query 1 # use `test`; CREATE TABLE t1(f1 blob)
+master-bin.000001 # Query 1 # use `test`; SET ONE_SHOT CHARACTER_SET_CLIENT=95,COLLATION_CONNECTION=95,COLLATION_DATABASE=95,COLLATION_SERVER=8
+master-bin.000001 # User var 1 # @`var1`=_binary 0x8300 COLLATE binary
+master-bin.000001 # Query 1 # use `test`; INSERT INTO t1 VALUES(@'var1')
+SELECT HEX(f1) FROM t1;
+HEX(f1)
+8300
+DROP table t1;
diff --git a/mysql-test/r/fulltext.result b/mysql-test/r/fulltext.result
index 8fa2df2e756..87551f96a13 100644
--- a/mysql-test/r/fulltext.result
+++ b/mysql-test/r/fulltext.result
@@ -428,4 +428,8 @@ REPAIR TABLE t1;
Table Op Msg_type Msg_text
test.t1 repair status OK
SET myisam_repair_threads=@@global.myisam_repair_threads;
+INSERT INTO t1 VALUES('testword\'\'');
+SELECT a FROM t1 WHERE MATCH a AGAINST('testword' IN BOOLEAN MODE);
+a
+testword''
DROP TABLE t1;
diff --git a/mysql-test/r/handler.result b/mysql-test/r/handler.result
index 072d4582cbc..9b0c6dbc263 100644
--- a/mysql-test/r/handler.result
+++ b/mysql-test/r/handler.result
@@ -445,3 +445,21 @@ drop table t2;
drop table t3;
drop table t4;
drop table t5;
+create table t1 (c1 int);
+insert into t1 values (1);
+handler t1 open;
+handler t1 read first;
+c1
+1
+send the below to another connection, do not wait for the result
+ optimize table t1;
+proceed with the normal connection
+handler t1 read next;
+c1
+1
+handler t1 close;
+read the result from the other connection
+Table Op Msg_type Msg_text
+test.t1 optimize status OK
+proceed with the normal connection
+drop table t1;
diff --git a/mysql-test/r/mix_innodb_myisam_binlog.result b/mysql-test/r/mix_innodb_myisam_binlog.result
index 72288d1027b..e9613bac833 100644
--- a/mysql-test/r/mix_innodb_myisam_binlog.result
+++ b/mysql-test/r/mix_innodb_myisam_binlog.result
@@ -93,6 +93,7 @@ master-bin.000001 79 Query 1 79 use `test`; BEGIN
master-bin.000001 119 Query 1 79 use `test`; insert into t1 values(8)
master-bin.000001 178 Query 1 79 use `test`; insert into t2 select * from t1
master-bin.000001 244 Query 1 244 use `test`; ROLLBACK
+master-bin.000001 287 Query 1 287 use `test`; DO RELEASE_LOCK("a")
delete from t1;
delete from t2;
reset master;
@@ -202,3 +203,53 @@ select (@after-@before) >= 2;
(@after-@before) >= 2
1
drop table t1,t2;
+commit;
+begin;
+create temporary table ti (a int) engine=innodb;
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+insert into ti values(1);
+set autocommit=0;
+create temporary table t1 (a int) engine=myisam;
+commit;
+insert t1 values (1);
+rollback;
+create table t0 (n int);
+insert t0 select * from t1;
+set autocommit=1;
+insert into t0 select GET_LOCK("lock1",null);
+set autocommit=0;
+create table t2 (n int) engine=innodb;
+insert into t2 values (3);
+select get_lock("lock1",60);
+get_lock("lock1",60)
+1
+show binlog events from 79;
+Log_name Pos Event_type Server_id Orig_log_pos Info
+master-bin.000001 79 Query 1 79 use `test`; BEGIN
+master-bin.000001 119 Query 1 79 use `test`; insert into t1 values(16)
+master-bin.000001 179 Query 1 79 use `test`; insert into t1 values(18)
+master-bin.000001 239 Query 1 239 use `test`; COMMIT
+master-bin.000001 280 Query 1 280 use `test`; delete from t1
+master-bin.000001 329 Query 1 329 use `test`; delete from t2
+master-bin.000001 378 Query 1 378 use `test`; alter table t2 type=MyISAM
+master-bin.000001 439 Query 1 439 use `test`; insert into t1 values (1)
+master-bin.000001 499 Query 1 499 use `test`; insert into t2 values (20)
+master-bin.000001 560 Query 1 560 use `test`; drop table t1,t2
+master-bin.000001 611 Query 1 611 use `test`; BEGIN
+master-bin.000001 651 Query 1 611 use `test`; create temporary table ti (a int) engine=innodb
+master-bin.000001 733 Query 1 733 use `test`; ROLLBACK
+master-bin.000001 776 Query 1 776 use `test`; insert into ti values(1)
+master-bin.000001 835 Query 1 835 use `test`; BEGIN
+master-bin.000001 875 Query 1 835 use `test`; create temporary table t1 (a int) engine=myisam
+master-bin.000001 957 Query 1 957 use `test`; COMMIT
+master-bin.000001 998 Query 1 998 use `test`; create table t0 (n int)
+master-bin.000001 1056 Query 1 1056 use `test`; insert t0 select * from t1
+master-bin.000001 1117 Query 1 1117 use `test`; DO RELEASE_LOCK("a")
+master-bin.000001 1172 Query 1 1172 use `test`; insert into t0 select GET_LOCK("lock1",null)
+master-bin.000001 1251 Query 1 1251 use `test`; create table t2 (n int) engine=innodb
+master-bin.000001 1323 Query 1 1323 use `test`; DROP /*!40005 TEMPORARY */ TABLE IF EXISTS `test`.`t1`,`test`.`ti`
+master-bin.000001 1424 Query 1 1424 use `test`; DO RELEASE_LOCK("lock1")
+do release_lock("lock1");
+drop table t0,t2;
diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result
index 17dba82dc00..d2d0417f6e6 100644
--- a/mysql-test/r/myisam.result
+++ b/mysql-test/r/myisam.result
@@ -498,6 +498,16 @@ id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE t1 system NULL NULL NULL NULL 1 Using temporary
1 SIMPLE t2 index NULL PRIMARY 4 NULL 2 Using index; Distinct
drop table t1,t2;
+create table t1 (
+c1 varchar(32),
+key (c1)
+) engine=myisam;
+alter table t1 disable keys;
+insert into t1 values ('a'), ('b');
+select c1 from t1 order by c1 limit 1;
+c1
+a
+drop table t1;
CREATE TABLE t1 (`a` int(11) NOT NULL default '0', `b` int(11) NOT NULL default '0', UNIQUE KEY `a` USING RTREE (`a`,`b`)) ENGINE=MyISAM;
Got one of the listed errors
create table t1 (a int, b varchar(200), c text not null) checksum=1;
@@ -702,3 +712,21 @@ t1 1 a 2 b A 0 NULL NULL YES BTREE
t1 1 a 3 c A 0 NULL NULL YES BTREE
t1 1 a 4 d A 0 NULL NULL YES BTREE
set myisam_stats_method=DEFAULT;
+drop table t1;
+create table t1(
+cip INT NOT NULL,
+time TIME NOT NULL,
+score INT NOT NULL DEFAULT 0,
+bob TINYBLOB
+);
+insert into t1 (cip, time) VALUES (1, '00:01'), (2, '00:02'), (3,'00:03');
+insert into t1 (cip, bob, time) VALUES (4, 'a', '00:04'), (5, 'b', '00:05'),
+(6, 'c', '00:06');
+select * from t1 where bob is null and cip=1;
+cip time score bob
+1 00:01:00 0 NULL
+create index bug on t1 (bob(22), cip, time);
+select * from t1 where bob is null and cip=1;
+cip time score bob
+1 00:01:00 0 NULL
+drop table t1;
diff --git a/mysql-test/r/ndb_alter_table.result b/mysql-test/r/ndb_alter_table.result
index 3714ea14e16..62e8455ae9f 100644
--- a/mysql-test/r/ndb_alter_table.result
+++ b/mysql-test/r/ndb_alter_table.result
@@ -179,8 +179,7 @@ a b c
2 two two
alter table t1 drop index c;
select * from t1 where b = 'two';
-a b c
-2 two two
+ERROR HY000: Table definition has changed, please retry transaction
select * from t1 where b = 'two';
a b c
2 two two
diff --git a/mysql-test/r/ndb_basic.result b/mysql-test/r/ndb_basic.result
index 3712fa2b5ca..42b5a39d3d8 100644
--- a/mysql-test/r/ndb_basic.result
+++ b/mysql-test/r/ndb_basic.result
@@ -667,3 +667,7 @@ counter datavalue
57 newval
58 newval
drop table t1;
+CREATE TABLE t1 ( b INT ) PACK_KEYS = 0 ENGINE = ndb;
+select * from t1;
+b
+drop table t1;
diff --git a/mysql-test/r/ndb_charset.result b/mysql-test/r/ndb_charset.result
index 00bc36a7c0d..b8d881fca83 100644
--- a/mysql-test/r/ndb_charset.result
+++ b/mysql-test/r/ndb_charset.result
@@ -190,12 +190,22 @@ p a
6 AAA
drop table t1;
create table t1 (
-a varchar(10) primary key
-) engine=ndb;
-insert into t1 values ('jonas % ');
-replace into t1 values ('jonas % ');
-replace into t1 values ('jonas % ');
+a char(10) primary key
+) engine=ndbcluster default charset=latin1;
+insert into t1 values ('aaabb');
+select * from t1;
+a
+aaabb
+replace into t1 set a = 'AAABB';
+select * from t1;
+a
+AAABB
+replace into t1 set a = 'aAaBb';
+select * from t1;
+a
+aAaBb
+replace into t1 set a = 'aaabb';
select * from t1;
a
-jonas %
+aaabb
drop table t1;
diff --git a/mysql-test/t/analyze.test b/mysql-test/t/analyze.test
index 3c3b3933bc3..5d653b65579 100644
--- a/mysql-test/t/analyze.test
+++ b/mysql-test/t/analyze.test
@@ -39,4 +39,13 @@ check table t1;
drop table t1;
+#
+# procedure in PS BUG#13673
+#
+CREATE TABLE t1 (a int);
+prepare stmt1 from "SELECT * FROM t1 PROCEDURE ANALYSE()";
+execute stmt1;
+execute stmt1;
+deallocate prepare stmt1;
+
# End of 4.1 tests
diff --git a/mysql-test/t/create.test b/mysql-test/t/create.test
index 966be8b58a3..c9d16916f8a 100644
--- a/mysql-test/t/create.test
+++ b/mysql-test/t/create.test
@@ -3,7 +3,7 @@
#
--disable_warnings
-drop table if exists t1,t2,t3;
+drop table if exists t1,t2,t3,t4,t5;
drop database if exists mysqltest;
--enable_warnings
@@ -534,4 +534,73 @@ create table t1 (
show create table t1;
drop table t1;
+#
+# BUG#14480: assert failure in CREATE ... SELECT because of wrong
+# calculation of number of NULLs.
+#
+CREATE TABLE t2 (
+ a int(11) default NULL
+);
+insert into t2 values(111);
+
+create table t1 (
+ a varchar(12) charset utf8 collate utf8_bin not null,
+ b int not null, primary key (a)
+) select a, 1 as b from t2 ;
+show create table t1;
+drop table t1;
+
+create table t1 (
+ a varchar(12) charset utf8 collate utf8_bin not null,
+ b int not null, primary key (a)
+) select 'a' as a , 1 as b from t2 ;
+show create table t1;
+drop table t1;
+
+create table t1 (
+ a varchar(12) charset utf8 collate utf8_bin,
+ b int not null, primary key (a)
+) select 'a' as a , 1 as b from t2 ;
+show create table t1;
+drop table t1, t2;
+
+create table t1 (
+ a1 int not null,
+ a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int
+);
+insert into t1 values (1,1,1, 1,1,1, 1,1,1);
+
+create table t2 (
+ a1 varchar(12) charset utf8 collate utf8_bin not null,
+ a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int,
+ primary key (a1)
+) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1 ;
+drop table t2;
+
+create table t2 (
+ a1 varchar(12) charset utf8 collate utf8_bin,
+ a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int
+) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1;
+
+drop table t1, t2;
+create table t1 (
+ a1 int, a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int
+);
+insert into t1 values (1,1,1, 1,1,1, 1,1,1);
+
+create table t2 (
+ a1 varchar(12) charset utf8 collate utf8_bin not null,
+ a2 int, a3 int, a4 int, a5 int, a6 int, a7 int, a8 int, a9 int,
+ primary key (a1)
+) select a1,a2,a3,a4,a5,a6,a7,a8,a9 from t1 ;
+
+# Test the default value
+drop table t2;
+
+create table t2 ( a int default 3, b int default 3)
+ select a1,a2 from t1;
+show create table t2;
+
+drop table t1, t2;
+
# End of 4.1 tests
diff --git a/mysql-test/t/csv.test b/mysql-test/t/csv.test
index 2ac46d75f9a..5b693335a43 100644
--- a/mysql-test/t/csv.test
+++ b/mysql-test/t/csv.test
@@ -1314,4 +1314,41 @@ select period from t1;
drop table if exists t1,t2,t3,t4;
+#
+# Bug #13894 Server crashes on update of CSV table
+#
+
+--disable_warnings
+DROP TABLE IF EXISTS bug13894;
+--enable_warnings
+
+CREATE TABLE bug13894 ( val integer ) ENGINE = CSV;
+INSERT INTO bug13894 VALUES (5);
+INSERT INTO bug13894 VALUES (10);
+INSERT INTO bug13894 VALUES (11);
+INSERT INTO bug13894 VALUES (10);
+SELECT * FROM bug13894;
+UPDATE bug13894 SET val=6 WHERE val=10;
+SELECT * FROM bug13894;
+DROP TABLE bug13894;
+
+#
+# Bug #14672 Bug in deletion
+#
+
+--disable_warnings
+DROP TABLE IF EXISTS bug14672;
+--enable_warnings
+
+CREATE TABLE bug14672 (c1 integer) engine = CSV;
+INSERT INTO bug14672 VALUES (1), (2), (3);
+SELECT * FROM bug14672;
+DELETE FROM bug14672 WHERE c1 = 2;
+SELECT * FROM bug14672;
+INSERT INTO bug14672 VALUES (4);
+SELECT * FROM bug14672;
+INSERT INTO bug14672 VALUES (5);
+SELECT * FROM bug14672;
+DROP TABLE bug14672;
+
# End of 4.1 tests
diff --git a/mysql-test/t/ctype_cp932.test b/mysql-test/t/ctype_cp932.test
index d6c3c226140..3ea8be211df 100644
--- a/mysql-test/t/ctype_cp932.test
+++ b/mysql-test/t/ctype_cp932.test
@@ -401,29 +401,6 @@ DROP TABLE t2;
DROP TABLE t3;
#DROP TABLE t4;
-# Test prepared statement with 0x8300 sequence in parameter while
-# running with cp932 client character set.
-RESET MASTER;
-CREATE TABLE t1(f1 blob);
-PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
-SET @var1= x'8300';
-# TODO: Note that this doesn't actually test the code which was added for
-# bug#11338 because this syntax for prepared statements causes the PS to
-# be replicated differently than if we executed the PS from C or Java.
-# Using this syntax, variable names are inserted into the binlog instead
-# of values. The real goal of this test is to check the code that was
-# added to Item_param::query_val_str() in order to do hex encoding of
-# PS parameters when the client character set is cp932;
-# Bug#11338 has an example java program which can be used to verify this
-# code (and I have used it to test the fix) until there is some way to
-# exercise this code from mysql-test-run.
-EXECUTE stmt1 USING @var1;
---replace_column 2 # 5 #
-SHOW BINLOG EVENTS FROM 79;
-SELECT HEX(f1) FROM t1;
-DROP table t1;
-# end test for bug#11338
-
SET collation_connection='cp932_japanese_ci';
-- source include/ctype_filesort.inc
-- source include/ctype_innodb_like.inc
diff --git a/mysql-test/t/ctype_cp932_binlog.test b/mysql-test/t/ctype_cp932_binlog.test
new file mode 100644
index 00000000000..e8ec0d46caf
--- /dev/null
+++ b/mysql-test/t/ctype_cp932_binlog.test
@@ -0,0 +1,35 @@
+-- source include/not_embedded.inc
+-- source include/have_cp932.inc
+
+--character_set cp932
+--disable_warnings
+drop table if exists t1;
+--enable_warnings
+
+set names cp932;
+set character_set_database = cp932;
+
+# Test prepared statement with 0x8300 sequence in parameter while
+# running with cp932 client character set.
+RESET MASTER;
+CREATE TABLE t1(f1 blob);
+PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
+SET @var1= x'8300';
+# TODO: Note that this doesn't actually test the code which was added for
+# bug#11338 because this syntax for prepared statements causes the PS to
+# be replicated differently than if we executed the PS from C or Java.
+# Using this syntax, variable names are inserted into the binlog instead
+# of values. The real goal of this test is to check the code that was
+# added to Item_param::query_val_str() in order to do hex encoding of
+# PS parameters when the client character set is cp932;
+# Bug#11338 has an example java program which can be used to verify this
+# code (and I have used it to test the fix) until there is some way to
+# exercise this code from mysql-test-run.
+EXECUTE stmt1 USING @var1;
+--replace_column 2 # 5 #
+SHOW BINLOG EVENTS FROM 79;
+SELECT HEX(f1) FROM t1;
+DROP table t1;
+# end test for bug#11338
+
+# End of 4.1 tests
diff --git a/mysql-test/t/fulltext.test b/mysql-test/t/fulltext.test
index fa63778c4c1..7c7927b638b 100644
--- a/mysql-test/t/fulltext.test
+++ b/mysql-test/t/fulltext.test
@@ -348,6 +348,12 @@ INSERT INTO t1 VALUES('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
SET myisam_repair_threads=2;
REPAIR TABLE t1;
SET myisam_repair_threads=@@global.myisam_repair_threads;
+
+#
+# BUG#5686 - #1034 - Incorrect key file for table - only utf8
+#
+INSERT INTO t1 VALUES('testword\'\'');
+SELECT a FROM t1 WHERE MATCH a AGAINST('testword' IN BOOLEAN MODE);
DROP TABLE t1;
# End of 4.1 tests
diff --git a/mysql-test/t/handler.test b/mysql-test/t/handler.test
index 1bb9b1d3504..a78800d3d5a 100644
--- a/mysql-test/t/handler.test
+++ b/mysql-test/t/handler.test
@@ -347,4 +347,32 @@ drop table t3;
drop table t4;
drop table t5;
+#
+# Bug#14397 - OPTIMIZE TABLE with an open HANDLER causes a crash
+#
+create table t1 (c1 int);
+insert into t1 values (1);
+# client 1
+handler t1 open;
+handler t1 read first;
+# client 2
+connect (con2,localhost,root,,);
+connection con2;
+--exec echo send the below to another connection, do not wait for the result
+send optimize table t1;
+--sleep 1
+# client 1
+--exec echo proceed with the normal connection
+connection default;
+handler t1 read next;
+handler t1 close;
+# client 2
+--exec echo read the result from the other connection
+connection con2;
+reap;
+# client 1
+--exec echo proceed with the normal connection
+connection default;
+drop table t1;
+
# End of 4.1 tests
diff --git a/mysql-test/t/mix_innodb_myisam_binlog.test b/mysql-test/t/mix_innodb_myisam_binlog.test
index 6eb9eae2d99..4581736ac8c 100644
--- a/mysql-test/t/mix_innodb_myisam_binlog.test
+++ b/mysql-test/t/mix_innodb_myisam_binlog.test
@@ -206,7 +206,35 @@ select (@after:=unix_timestamp())*0; # always give repeatable output
# the bug, the reap would return immediately after the insert into t2.
select (@after-@before) >= 2;
-# cleanup
drop table t1,t2;
+commit;
+
+# test for BUG#7947 - DO RELEASE_LOCK() not written to binlog on rollback in the middle
+# of a transaction
+
+connection con2;
+begin;
+create temporary table ti (a int) engine=innodb;
+rollback;
+insert into ti values(1);
+set autocommit=0;
+create temporary table t1 (a int) engine=myisam;
+commit;
+insert t1 values (1);
+rollback;
+create table t0 (n int);
+insert t0 select * from t1;
+set autocommit=1;
+insert into t0 select GET_LOCK("lock1",null);
+set autocommit=0;
+create table t2 (n int) engine=innodb;
+insert into t2 values (3);
+disconnect con2;
+connection con3;
+select get_lock("lock1",60);
+show binlog events from 79;
+do release_lock("lock1");
+drop table t0,t2;
+
# End of 4.1 tests
diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test
index fbde658660d..ce40cae3266 100644
--- a/mysql-test/t/myisam.test
+++ b/mysql-test/t/myisam.test
@@ -474,6 +474,18 @@ explain select distinct t1.a from t1,t2 order by t2.a;
drop table t1,t2;
#
+# Bug#14616 - Freshly imported table returns error 124 when using LIMIT
+#
+create table t1 (
+ c1 varchar(32),
+ key (c1)
+) engine=myisam;
+alter table t1 disable keys;
+insert into t1 values ('a'), ('b');
+select c1 from t1 order by c1 limit 1;
+drop table t1;
+
+#
# Test RTREE index
#
--error 1235, 1289
@@ -656,4 +668,22 @@ analyze table t1;
show index from t1;
set myisam_stats_method=DEFAULT;
+drop table t1;
+
+# BUG#13814 - key value packed incorrectly for TINYBLOBs
+
+create table t1(
+ cip INT NOT NULL,
+ time TIME NOT NULL,
+ score INT NOT NULL DEFAULT 0,
+ bob TINYBLOB
+);
+
+insert into t1 (cip, time) VALUES (1, '00:01'), (2, '00:02'), (3,'00:03');
+insert into t1 (cip, bob, time) VALUES (4, 'a', '00:04'), (5, 'b', '00:05'),
+ (6, 'c', '00:06');
+select * from t1 where bob is null and cip=1;
+create index bug on t1 (bob(22), cip, time);
+select * from t1 where bob is null and cip=1;
+drop table t1;
# End of 4.1 tests
diff --git a/mysql-test/t/ndb_alter_table.test b/mysql-test/t/ndb_alter_table.test
index 5c792f76316..d89b81859e7 100644
--- a/mysql-test/t/ndb_alter_table.test
+++ b/mysql-test/t/ndb_alter_table.test
@@ -138,6 +138,7 @@ INSERT INTO t1 VALUES (1,2,0),(18,19,4),(20,21,0);
select c from t1 order by c;
drop table t1;
+--disable_ps_protocol
create table t1 ( a int primary key, b varchar(10), c varchar(10), index (b) )
engine=ndb;
insert into t1 values (1,'one','one'), (2,'two','two'), (3,'three','three');
@@ -147,10 +148,13 @@ select * from t1 where b = 'two';
connection server1;
alter table t1 drop index c;
connection server2;
+# This should fail since index information is not automatically refreshed
+--error 1105
select * from t1 where b = 'two';
select * from t1 where b = 'two';
connection server1;
drop table t1;
+--enable_ps_protocol
#--disable_warnings
#DROP TABLE IF EXISTS t2;
diff --git a/mysql-test/t/ndb_basic.test b/mysql-test/t/ndb_basic.test
index 144e466d937..c8cf5823500 100644
--- a/mysql-test/t/ndb_basic.test
+++ b/mysql-test/t/ndb_basic.test
@@ -606,4 +606,12 @@ select * from t1 order by counter;
drop table t1;
+#
+# BUG#14514 Creating table with packed key fails silently
+#
+
+CREATE TABLE t1 ( b INT ) PACK_KEYS = 0 ENGINE = ndb;
+select * from t1;
+drop table t1;
+
# End of 4.1 tests
diff --git a/mysql-test/t/ndb_charset.test b/mysql-test/t/ndb_charset.test
index 89f1ed17cfb..a885427f593 100644
--- a/mysql-test/t/ndb_charset.test
+++ b/mysql-test/t/ndb_charset.test
@@ -159,14 +159,17 @@ select * from t1 where a = 'AaA' order by p;
select * from t1 where a = 'AAA' order by p;
drop table t1;
-# bug
+# bug#14007
create table t1 (
- a varchar(10) primary key
-) engine=ndb;
-insert into t1 values ('jonas % ');
-replace into t1 values ('jonas % ');
-replace into t1 values ('jonas % ');
+ a char(10) primary key
+) engine=ndbcluster default charset=latin1;
+
+insert into t1 values ('aaabb');
+select * from t1;
+replace into t1 set a = 'AAABB';
+select * from t1;
+replace into t1 set a = 'aAaBb';
+select * from t1;
+replace into t1 set a = 'aaabb';
select * from t1;
drop table t1;
-
-# End of 4.1 tests
diff --git a/ndb/docs/Makefile.am b/ndb/docs/Makefile.am
index 1399ce3b6a5..9b7ec213e26 100644
--- a/ndb/docs/Makefile.am
+++ b/ndb/docs/Makefile.am
@@ -1,14 +1,12 @@
DOXYDIR = doxygen
noinst_HEADERS = $(DOXYDIR)/predoxy.pl $(DOXYDIR)/postdoxy.pl $(DOXYDIR)/Doxyfile.ndbapi $(DOXYDIR)/Doxyfile.mgmapi $(DOXYDIR)/header.ndbapi.tex $(DOXYDIR)/header.mgmapi.tex
-all: do-check ndbapidoc mgmapidoc
-
DOXYTMP = .doxytmp
DOXYOUT = .doxyout
NDB_RELEASE = @NDB_VERSION_MAJOR@.@NDB_VERSION_MINOR@.@NDB_VERSION_BUILD@-@NDB_VERSION_STATUS@
-clean:
+clean-local:
rm -rf ndbapi.pdf ndbapi.html mgmapi.pdf mgmapi.html
rm -rf $(DOXYTMP) $(DOXYOUT)
diff --git a/ndb/include/kernel/AttributeDescriptor.hpp b/ndb/include/kernel/AttributeDescriptor.hpp
index 071d45e2607..9d7de21d904 100644
--- a/ndb/include/kernel/AttributeDescriptor.hpp
+++ b/ndb/include/kernel/AttributeDescriptor.hpp
@@ -36,6 +36,7 @@ private:
static Uint32 getType(const Uint32 &);
static Uint32 getSize(const Uint32 &);
+ static Uint32 getSizeInBytes(const Uint32 &);
static Uint32 getSizeInWords(const Uint32 &);
static Uint32 getArrayType(const Uint32 &);
static Uint32 getArraySize(const Uint32 &);
@@ -79,6 +80,7 @@ private:
#define AD_SIZE_SHIFT (4)
#define AD_SIZE_MASK (7)
+#define AD_SIZE_IN_BYTES_SHIFT (3)
#define AD_SIZE_IN_WORDS_OFFSET (31)
#define AD_SIZE_IN_WORDS_SHIFT (5)
@@ -187,6 +189,13 @@ AttributeDescriptor::getSize(const Uint32 & desc){
inline
Uint32
+AttributeDescriptor::getSizeInBytes(const Uint32 & desc){
+ return (getArraySize(desc) << getSize(desc))
+ >> AD_SIZE_IN_BYTES_SHIFT;
+}
+
+inline
+Uint32
AttributeDescriptor::getSizeInWords(const Uint32 & desc){
return ((getArraySize(desc) << getSize(desc))
+ AD_SIZE_IN_WORDS_OFFSET)
diff --git a/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp b/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
index cbb165c3eb1..7b642f90a17 100644
--- a/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
+++ b/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp
@@ -700,6 +700,27 @@ Dbtup::checkUpdateOfPrimaryKey(Uint32* updateBuffer, Tablerec* const regTabPtr)
Uint32 attrDescriptorIndex = regTabPtr->tabDescriptor + (attributeId << ZAD_LOG_SIZE);
Uint32 attrDescriptor = tableDescriptor[attrDescriptorIndex].tabDescr;
Uint32 attributeOffset = tableDescriptor[attrDescriptorIndex + 1].tabDescr;
+
+ Uint32 xfrmBuffer[1 + MAX_KEY_SIZE_IN_WORDS * 1]; // strxfrm_multiply == 1
+ Uint32 charsetFlag = AttributeOffset::getCharsetFlag(attributeOffset);
+ if (charsetFlag) {
+ Uint32 csPos = AttributeOffset::getCharsetPos(attributeOffset);
+ CHARSET_INFO* cs = regTabPtr->charsetArray[csPos];
+ Uint32 sizeInBytes = AttributeDescriptor::getSizeInBytes(attrDescriptor);
+ Uint32 sizeInWords = AttributeDescriptor::getSizeInWords(attrDescriptor);
+ const uchar* srcPtr = (uchar*)&updateBuffer[1];
+ uchar* dstPtr = (uchar*)&xfrmBuffer[1];
+ Uint32 n =
+ (*cs->coll->strnxfrm)(cs, dstPtr, sizeInBytes, srcPtr, sizeInBytes);
+ // pad with blanks (unlikely) and zeroes to match NDB API behaviour
+ while (n < sizeInBytes)
+ dstPtr[n++] = 0x20;
+ while (n < 4 * sizeInWords)
+ dstPtr[n++] = 0;
+ xfrmBuffer[0] = ahIn.m_value;
+ updateBuffer = xfrmBuffer;
+ }
+
ReadFunction f = regTabPtr->readFunctionArray[attributeId];
AttributeHeader::init(&attributeHeader, attributeId, 0);
@@ -707,7 +728,7 @@ Dbtup::checkUpdateOfPrimaryKey(Uint32* updateBuffer, Tablerec* const regTabPtr)
tMaxRead = MAX_KEY_SIZE_IN_WORDS;
bool tmp = tXfrmFlag;
- tXfrmFlag = false;
+ tXfrmFlag = true;
ndbrequire((this->*f)(&keyReadBuffer[0], ahOut, attrDescriptor, attributeOffset));
tXfrmFlag = tmp;
ndbrequire(tOutBufIndex == ahOut->getDataSize());
diff --git a/ndb/tools/ndb_size.pl b/ndb/tools/ndb_size.pl
index 64a20423636..ece0901e0b2 100644
--- a/ndb/tools/ndb_size.pl
+++ b/ndb/tools/ndb_size.pl
@@ -26,24 +26,33 @@ use HTML::Template;
# BUGS
# ----
# - enum/set is 0 byte storage! Woah - efficient!
+# - DECIMAL is 0 byte storage. A bit too efficient.
# - some float stores come out weird (when there's a comma e.g. 'float(4,1)')
# - no disk data values
# - computes the storage requirements of views (and probably MERGE)
# - ignores character sets.
my $template = HTML::Template->new(filename => 'ndb_size.tmpl',
- die_on_bad_params => 0);
+ die_on_bad_params => 0)
+ or die "Could not open ndb_size.tmpl.";
my $dbh;
+if(@ARGV < 3 || $ARGV[0] eq '--usage' || $ARGV[0] eq '--help')
+{
+ print STDERR "Usage:\n";
+ print STDERR "\tndb_size.pl database hostname user password\n\n";
+ print STDERR "If you need to specify a port number, use host:port\n\n";
+ exit(1);
+}
+
{
my $database= $ARGV[0];
my $hostname= $ARGV[1];
- my $port= $ARGV[2];
- my $user= $ARGV[3];
- my $password= $ARGV[4];
- my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
- $dbh= DBI->connect($dsn, $user, $password);
+ my $user= $ARGV[2];
+ my $password= $ARGV[3];
+ my $dsn = "DBI:mysql:database=$database;host=$hostname";
+ $dbh= DBI->connect($dsn, $user, $password) or exit(1);
$template->param(db => $database);
$template->param(dsn => $dsn);
}
@@ -55,6 +64,14 @@ my $tables = $dbh->selectall_arrayref("show tables");
my @table_size;
+my @dbDataMemory;
+my @dbIndexMemory;
+my @NoOfAttributes;
+my @NoOfIndexes;
+my @NoOfTables;
+$NoOfTables[$_]{val} = @{$tables} foreach 0..$#releases;
+
+
sub align {
my($to,@unaligned) = @_;
my @aligned;
@@ -68,9 +85,8 @@ foreach(@{$tables})
{
my $table= @{$_}[0];
my @columns;
- my $info= $dbh->selectall_hashref("describe ".$dbh->quote($table),"Field");
- my @count = $dbh->selectrow_array("select count(*) from "
- .$dbh->quote($table));
+ my $info= $dbh->selectall_hashref('describe `'.$table.'`',"Field");
+ my @count = $dbh->selectrow_array('select count(*) from `'.$table.'`');
my %columnsize; # used for index calculations
# We now work out the DataMemory usage
@@ -132,14 +148,17 @@ foreach(@{$tables})
my $fixed= 1+$size;
my @dynamic=$dbh->selectrow_array("select avg(length("
.$dbh->quote($name)
- .")) from ".$dbh->quote($table));
+ .")) from `".$table.'`');
$dynamic[0]=0 if !$dynamic[0];
@realsize= ($fixed,$fixed,ceil($dynamic[0]));
}
elsif($type =~ /binary/ || $type =~ /char/)
{@realsize=($size,$size,$size)}
elsif($type =~ /text/ || $type =~ /blob/)
- {@realsize=(256,256,1)} # FIXME check if 5.1 is correct
+ {
+ @realsize=(256,256,1);
+ $NoOfTables[$_]{val} += 1 foreach 0..$#releases; # blob uses table
+ } # FIXME check if 5.1 is correct
@realsize= align(4,@realsize);
@@ -166,7 +185,7 @@ foreach(@{$tables})
# we can still connect to pre-5.0 mysqlds.
my %indexes;
{
- my $sth= $dbh->prepare("show index from "$dbh->quote($table));
+ my $sth= $dbh->prepare("show index from `".$table.'`');
$sth->execute;
while(my $i = $sth->fetchrow_hashref)
{
@@ -257,7 +276,51 @@ foreach(@{$tables})
IndexMemory=>\@IndexMemory,
};
+
+ $dbDataMemory[$_]{val} += $DataMemory[$_]{val} foreach 0..$#releases;
+ $dbIndexMemory[$_]{val} += $IndexMemory[$_]{val} foreach 0..$#releases;
+ $NoOfAttributes[$_]{val} += @columns foreach 0..$#releases;
+ $NoOfIndexes[$_]{val} += @indexes foreach 0..$#releases;
+}
+
+my @NoOfTriggers;
+# for unique hash indexes
+$NoOfTriggers[$_]{val} += $NoOfIndexes[$_]{val}*3 foreach 0..$#releases;
+# for ordered index
+$NoOfTriggers[$_]{val} += $NoOfIndexes[$_]{val} foreach 0..$#releases;
+
+my @ParamMemory;
+foreach (0..$#releases) {
+ $ParamMemory[0]{releases}[$_]{val}= POSIX::ceil(200*$NoOfAttributes[$_]{val}/1024);
+ $ParamMemory[0]{name}= 'Attributes';
+
+ $ParamMemory[1]{releases}[$_]{val}= 20*$NoOfTables[$_]{val};
+ $ParamMemory[1]{name}= 'Tables';
+
+ $ParamMemory[2]{releases}[$_]{val}= 10*$NoOfIndexes[$_]{val};
+ $ParamMemory[2]{name}= 'OrderedIndexes';
+
+ $ParamMemory[3]{releases}[$_]{val}= 15*$NoOfIndexes[$_]{val};
+ $ParamMemory[3]{name}= 'UniqueHashIndexes';
}
$template->param(tables => \@table_size);
+$template->param(Parameters => [{name=>'DataMemory (kb)',
+ releases=>\@dbDataMemory},
+ {name=>'IndexMemory (kb)',
+ releases=>\@dbIndexMemory},
+ {name=>'MaxNoOfTables',
+ releases=>\@NoOfTables},
+ {name=>'MaxNoOfAttributes',
+ releases=>\@NoOfAttributes},
+ {name=>'MaxNoOfOrderedIndexes',
+ releases=>\@NoOfIndexes},
+ {name=>'MaxNoOfUniqueHashIndexes',
+ releases=>\@NoOfIndexes},
+ {name=>'MaxNoOfTriggers',
+ releases=>\@NoOfTriggers}
+ ]
+ );
+$template->param(ParamMemory => \@ParamMemory);
+
print $template->output;
diff --git a/ndb/tools/ndb_size.tmpl b/ndb/tools/ndb_size.tmpl
index d83d5d2c6af..dc02b5a5970 100644
--- a/ndb/tools/ndb_size.tmpl
+++ b/ndb/tools/ndb_size.tmpl
@@ -13,18 +13,58 @@ td,th { border: 1px solid black }
<h1>MySQL Cluster analysis for <TMPL_VAR NAME="db" escape="html"></h1>
<p>This is an automated analysis of the <TMPL_VAR NAME="DSN" escape="html"> database for migration into <a href="http://www.mysql.com/">MySQL</a> Cluster. No warranty is made to the accuracy of the information.</p>
-<p>This information should be valid for MySQL 4.1</p>
+<p>This information should be valid for MySQL 4.1 and 5.0. Since 5.1 is not a final release yet, the numbers should be used as a guide only.</p>
+<h2>Parameter Settings</h2>
+<p><b>NOTE</b> the configuration parameters below do not take into account system tables and other requirements.</p>
+<table>
+ <tr>
+ <th>Parameter</th>
+ <TMPL_LOOP NAME=releases>
+ <th><TMPL_VAR NAME=rel></th>
+ </TMPL_LOOP>
+ </tr>
+<TMPL_LOOP NAME=Parameters>
+ <tr>
+ <td><TMPL_VAR NAME=name></td>
+ <TMPL_LOOP NAME=releases>
+ <td><TMPL_VAR NAME=val></td>
+ </TMPL_LOOP>
+ </tr>
+</TMPL_LOOP>
+</table>
+
+<h2>Memory usage because of parameters</h2>
+
+<p>Usage is in kilobytes. Actual usage will vary as you should set the parameters larger than those listed in the table above.</p>
+<table>
+ <tr>
+ <th>Parameter</th>
+ <TMPL_LOOP NAME=releases>
+ <th><TMPL_VAR NAME=rel></th>
+ </TMPL_LOOP>
+ </tr>
+<TMPL_LOOP NAME=ParamMemory>
+ <tr>
+ <td><TMPL_VAR NAME=name></td>
+ <TMPL_LOOP NAME=releases>
+ <td><TMPL_VAR NAME=val></td>
+ </TMPL_LOOP>
+ </tr>
+</TMPL_LOOP>
+</table>
+
+<h2>Table List</h2>
<ul>
<TMPL_LOOP NAME="tables">
-<li><TMPL_VAR NAME="table"></li>
+<li><a href="#<TMPL_VAR NAME="table">"><TMPL_VAR NAME="table"></a></li>
</TMPL_LOOP>
</ul>
<hr/>
<TMPL_LOOP NAME="tables">
-<h2><TMPL_VAR NAME="table"></h2>
+<h2><a name="<TMPL_VAR NAME="table">"><TMPL_VAR NAME="table"></a></h2>
<table>
<tr>
<th>Column</th>
diff --git a/netware/Makefile.am b/netware/Makefile.am
index aeb93d1575d..0588e6b1ade 100644
--- a/netware/Makefile.am
+++ b/netware/Makefile.am
@@ -42,10 +42,10 @@ netware_build_files = client/mysql.def client/mysqladmin.def \
link_sources:
set -x; \
for f in $(netware_build_files); do \
- rm -f $(srcdir)/../$$f; \
+ rm -f ../$$f; \
org=`echo $$f | sed -e 's/.*\/\(.*\)/\1/g'`; \
- @LN_CP_F@ $(srcdir)/$$org $(srcdir)/../$$f; \
- done;
+ @LN_CP_F@ $(srcdir)/$$org ../$$f; \
+ done
else
EXTRA_DIST= comp_err.def init_db.sql install_test_db.ncf \
isamchk.def isamlog.def libmysql.def libmysql.imp \
diff --git a/pstack/Makefile.am b/pstack/Makefile.am
index 77f84d212cd..20d5d8314ce 100644
--- a/pstack/Makefile.am
+++ b/pstack/Makefile.am
@@ -20,7 +20,7 @@
#
SUBDIRS = aout
-INCLUDES = -I$(top_srcdir)/include
+INCLUDES = -I$(top_builddir)/include -I$(top_srcdir)/include
noinst_HEADERS = bucomm.h debug.h ieee.h budbg.h demangle.h \
linuxthreads.h pstack.h pstacktrace.h
SRC= bucomm.c filemode.c linuxthreads.c rddbg.c \
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 27b42314273..30ba75c551d 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -85,12 +85,13 @@ CLEANFILES = @server_scripts@ \
mysql_find_rows \
mysqlhotcopy \
mysqldumpslow \
+ mysql_explain_log \
+ mysql_tableinfo \
mysqld_multi \
make_win_src_distribution \
- make_win_binary_distribution \
mysql_create_system_tables
-SUPERCLEANFILES = mysqlbug
+DISTCLEANFILES = mysqlbug
# We want the right version and configure comand line in mysqlbug
mysqlbug: ${top_builddir}/config.status mysqlbug.sh
diff --git a/scripts/mysql_fix_privilege_tables.sql b/scripts/mysql_fix_privilege_tables.sql
index 0d7d32fd6a9..a72bd2799aa 100644
--- a/scripts/mysql_fix_privilege_tables.sql
+++ b/scripts/mysql_fix_privilege_tables.sql
@@ -29,7 +29,7 @@ ALTER TABLE user add Grant_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,a
ALTER TABLE host add Grant_priv enum('N','Y') NOT NULL,add References_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Index_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Alter_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
ALTER TABLE db add Grant_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add References_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Index_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL,add Alter_priv enum('N','Y') COLLATE utf8_general_ci NOT NULL;
---- Fix privileges for old tables
+-- Fix privileges for old tables
UPDATE user SET Grant_priv=File_priv,References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
UPDATE db SET References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
UPDATE host SET References_priv=Create_priv,Index_priv=Create_priv,Alter_priv=Create_priv WHERE @hadGrantPriv = 0;
diff --git a/sql-bench/Makefile.am b/sql-bench/Makefile.am
index 579a2a9f7fe..12f3d5550b3 100644
--- a/sql-bench/Makefile.am
+++ b/sql-bench/Makefile.am
@@ -60,6 +60,8 @@ install-data-local:
for i in $(srcdir)/limits/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/limits; done
for i in $(srcdir)/Comments/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/Comments; done
+uninstall-local:
+ @RM@ -f -r $(DESTDIR)$(benchdir)
SUFFIXES = .sh
diff --git a/sql-common/client.c b/sql-common/client.c
index 3979b9304f7..3a598832253 100644
--- a/sql-common/client.c
+++ b/sql-common/client.c
@@ -1487,11 +1487,15 @@ mysql_ssl_set(MYSQL *mysql __attribute__((unused)) ,
static void
mysql_ssl_free(MYSQL *mysql __attribute__((unused)))
{
+ struct st_VioSSLConnectorFd *st=
+ (struct st_VioSSLConnectorFd*) mysql->connector_fd;
my_free(mysql->options.ssl_key, MYF(MY_ALLOW_ZERO_PTR));
my_free(mysql->options.ssl_cert, MYF(MY_ALLOW_ZERO_PTR));
my_free(mysql->options.ssl_ca, MYF(MY_ALLOW_ZERO_PTR));
my_free(mysql->options.ssl_capath, MYF(MY_ALLOW_ZERO_PTR));
- my_free(mysql->options.ssl_cipher, MYF(MY_ALLOW_ZERO_PTR));
+ my_free(mysql->options.ssl_cipher, MYF(MY_ALLOW_ZERO_PTR));
+ if (st)
+ SSL_CTX_free(st->ssl_context);
my_free(mysql->connector_fd,MYF(MY_ALLOW_ZERO_PTR));
mysql->options.ssl_key = 0;
mysql->options.ssl_cert = 0;
diff --git a/sql/Makefile.am b/sql/Makefile.am
index ea7cea9c7b9..218cf5dbca5 100644
--- a/sql/Makefile.am
+++ b/sql/Makefile.am
@@ -111,17 +111,17 @@ AM_YFLAGS = -d
mysql_tzinfo_to_sql.cc:
rm -f mysql_tzinfo_to_sql.cc
- @LN_CP_F@ tztime.cc mysql_tzinfo_to_sql.cc
+ @LN_CP_F@ $(srcdir)/tztime.cc mysql_tzinfo_to_sql.cc
link_sources: mysql_tzinfo_to_sql.cc
rm -f mini_client_errors.c
- @LN_CP_F@ ../libmysql/errmsg.c mini_client_errors.c
+ @LN_CP_F@ $(top_srcdir)/libmysql/errmsg.c mini_client_errors.c
rm -f pack.c
- @LN_CP_F@ ../sql-common/pack.c pack.c
+ @LN_CP_F@ $(top_srcdir)/sql-common/pack.c pack.c
rm -f client.c
- @LN_CP_F@ ../sql-common/client.c client.c
+ @LN_CP_F@ $(top_srcdir)/sql-common/client.c client.c
rm -f my_time.c
- @LN_CP_F@ ../sql-common/my_time.c my_time.c
+ @LN_CP_F@ $(top_srcdir)/sql-common/my_time.c my_time.c
mysql_tzinfo_to_sql.o: $(mysql_tzinfo_to_sql_SOURCES)
$(CXXCOMPILE) -c $(INCLUDES) -DTZINFO2SQL $<
@@ -145,7 +145,7 @@ lex_hash.h: gen_lex_hash$(EXEEXT)
udf_example.so: udf_example.cc
$(CXXCOMPILE) -shared -o $@ $<
-distclean:
+distclean-local:
rm -f lex_hash.h
# Don't update the files from bitkeeper
diff --git a/sql/examples/ha_tina.cc b/sql/examples/ha_tina.cc
index 8a9aa91c680..91e42bfea31 100644
--- a/sql/examples/ha_tina.cc
+++ b/sql/examples/ha_tina.cc
@@ -58,12 +58,16 @@ static int tina_init= 0;
** TINA tables
*****************************************************************************/
-/*
- Used for sorting chains.
+/*
+ Used for sorting chains with qsort().
*/
int sort_set (tina_set *a, tina_set *b)
{
- return ( a->begin > b->begin ? 1 : ( a->begin < b->begin ? -1 : 0 ) );
+ /*
+ We assume that intervals do not intersect. So, it is enought to compare
+ any two points. Here we take start of intervals for comparison.
+ */
+ return ( a->begin > b->begin ? -1 : ( a->begin < b->begin ? 1 : 0 ) );
}
static byte* tina_get_key(TINA_SHARE *share,uint *length,
@@ -162,7 +166,8 @@ static TINA_SHARE *get_share(const char *table_name, TABLE *table)
thr_lock_init(&share->lock);
pthread_mutex_init(&share->mutex,MY_MUTEX_INIT_FAST);
- if ((share->data_file= my_open(data_file_name, O_RDWR, MYF(0))) == -1)
+ if ((share->data_file= my_open(data_file_name, O_RDWR|O_APPEND,
+ MYF(0))) == -1)
goto error2;
/* We only use share->data_file for writing, so we scan to the end to append */
@@ -739,13 +744,8 @@ int ha_tina::rnd_end()
qsort(chain, (size_t)(chain_ptr - chain), sizeof(tina_set), (qsort_cmp)sort_set);
for (ptr= chain; ptr < chain_ptr; ptr++)
{
- /* We peek a head to see if this is the last chain */
- if (ptr+1 == chain_ptr)
- memmove(share->mapped_file + ptr->begin, share->mapped_file + ptr->end,
- length - (size_t)ptr->end);
- else
- memmove((caddr_t)share->mapped_file + ptr->begin, (caddr_t)share->mapped_file + ptr->end,
- (size_t)((ptr++)->begin - ptr->end));
+ memmove(share->mapped_file + ptr->begin, share->mapped_file + ptr->end,
+ length - (size_t)ptr->end);
length= length - (size_t)(ptr->end - ptr->begin);
}
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 608dc3eaa54..4dc113ed443 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -50,6 +50,8 @@ static const char *ha_ndb_ext=".ndb";
#define NDB_FAILED_AUTO_INCREMENT ~(Uint64)0
#define NDB_AUTO_INCREMENT_RETRIES 10
+#define NDB_INVALID_SCHEMA_OBJECT 241
+
#define ERR_PRINT(err) \
DBUG_PRINT("error", ("%d message: %s", err.code, err.message))
@@ -212,7 +214,21 @@ Thd_ndb::Thd_ndb()
Thd_ndb::~Thd_ndb()
{
if (ndb)
+ {
+#ifndef DBUG_OFF
+ Ndb::Free_list_usage tmp; tmp.m_name= 0;
+ while (ndb->get_free_list_usage(&tmp))
+ {
+ uint leaked= (uint) tmp.m_created - tmp.m_free;
+ if (leaked)
+ fprintf(stderr, "NDB: Found %u %s%s that %s not been released\n",
+ leaked, tmp.m_name,
+ (leaked == 1)?"":"'s",
+ (leaked == 1)?"has":"have");
+ }
+#endif
delete ndb;
+ }
ndb= 0;
}
@@ -3269,15 +3285,19 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type)
DBUG_PRINT("info", ("Table schema version: %d",
tab->getObjectVersion()));
}
- if (m_table != (void *)tab || m_table_version < tab->getObjectVersion())
+ if (m_table != (void *)tab)
{
- /*
- The table has been altered, refresh the index list
- */
- build_index_list(ndb, table, ILBP_OPEN);
m_table= (void *)tab;
m_table_version = tab->getObjectVersion();
}
+ else if (m_table_version < tab->getObjectVersion())
+ {
+ /*
+ The table has been altered, caller has to retry
+ */
+ NdbError err= ndb->getNdbError(NDB_INVALID_SCHEMA_OBJECT);
+ DBUG_RETURN(ndb_to_mysql_error(&err));
+ }
m_table_info= tab_info;
}
no_uncommitted_rows_init(thd);
@@ -3711,7 +3731,7 @@ int ha_ndbcluster::create(const char *name,
const void *data, *pack_data;
const char **key_names= form->keynames.type_names;
char name2[FN_HEADLEN];
- bool create_from_engine= (info->table_options & HA_CREATE_FROM_ENGINE);
+ bool create_from_engine= (info->table_options & HA_OPTION_CREATE_FROM_ENGINE);
DBUG_ENTER("create");
DBUG_PRINT("enter", ("name: %s", name));
@@ -4657,7 +4677,21 @@ bool ndbcluster_end()
{
DBUG_ENTER("ndbcluster_end");
if(g_ndb)
+ {
+#ifndef DBUG_OFF
+ Ndb::Free_list_usage tmp; tmp.m_name= 0;
+ while (g_ndb->get_free_list_usage(&tmp))
+ {
+ uint leaked= (uint) tmp.m_created - tmp.m_free;
+ if (leaked)
+ fprintf(stderr, "NDB: Found %u %s%s that %s not been released\n",
+ leaked, tmp.m_name,
+ (leaked == 1)?"":"'s",
+ (leaked == 1)?"has":"have");
+ }
+#endif
delete g_ndb;
+ }
g_ndb= NULL;
if (g_ndb_cluster_connection)
delete g_ndb_cluster_connection;
diff --git a/sql/handler.cc b/sql/handler.cc
index e6bc1496a00..e166f9885fc 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -1382,7 +1382,7 @@ int ha_create_table_from_engine(THD* thd,
DBUG_RETURN(3);
update_create_info_from_table(&create_info, &table);
- create_info.table_options|= HA_CREATE_FROM_ENGINE;
+ create_info.table_options|= HA_OPTION_CREATE_FROM_ENGINE;
if (lower_case_table_names == 2 &&
!(table.file->table_flags() & HA_FILE_BASED))
diff --git a/sql/item_func.cc b/sql/item_func.cc
index df32672e12b..d0a68e9f93e 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -1974,7 +1974,7 @@ void item_user_lock_release(User_level_lock *ull)
tmp.copy(command, strlen(command), tmp.charset());
tmp.append(ull->key,ull->key_length);
tmp.append("\")", 2);
- Query_log_event qev(current_thd, tmp.ptr(), tmp.length(),1, FALSE);
+ Query_log_event qev(current_thd, tmp.ptr(), tmp.length(),0, FALSE);
qev.error_code=0; // this query is always safe to run on slave
mysql_bin_log.write(&qev);
}
diff --git a/sql/item_func.h b/sql/item_func.h
index 5d6cc445317..2c4976d1152 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -938,7 +938,6 @@ class user_var_entry;
class Item_func_set_user_var :public Item_func
{
enum Item_result cached_result_type;
- LEX_STRING name;
user_var_entry *entry;
char buffer[MAX_FIELD_WIDTH];
String value;
@@ -952,6 +951,7 @@ class Item_func_set_user_var :public Item_func
public:
+ LEX_STRING name; // keep it public
Item_func_set_user_var(LEX_STRING a,Item *b)
:Item_func(b), cached_result_type(INT_RESULT), name(a)
{}
@@ -972,10 +972,10 @@ public:
class Item_func_get_user_var :public Item_func
{
- LEX_STRING name;
user_var_entry *var_entry;
public:
+ LEX_STRING name; // keep it public
Item_func_get_user_var(LEX_STRING a):
Item_func(), name(a) {}
double val();
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index 5525c046b95..87aee9ac25c 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -614,8 +614,8 @@ public:
class Item_func_conv_charset :public Item_str_func
{
- CHARSET_INFO *conv_charset;
public:
+ CHARSET_INFO *conv_charset; // keep it public
Item_func_conv_charset(Item *a, CHARSET_INFO *cs) :Item_str_func(a)
{ conv_charset=cs; }
String *val_str(String *);
diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h
index 16c64620369..ce9d6b0a7aa 100644
--- a/sql/item_timefunc.h
+++ b/sql/item_timefunc.h
@@ -607,12 +607,12 @@ enum interval_type
class Item_date_add_interval :public Item_date_func
{
- const interval_type int_type;
String value;
- const bool date_sub_interval;
enum_field_types cached_field_type;
public:
+ const interval_type int_type; // keep it public
+ const bool date_sub_interval; // keep it public
Item_date_add_interval(Item *a,Item *b,interval_type type_arg,bool neg_arg)
:Item_date_func(a,b),int_type(type_arg), date_sub_interval(neg_arg) {}
String *val_str(String *);
@@ -628,10 +628,10 @@ public:
class Item_extract :public Item_int_func
{
- const interval_type int_type;
String value;
bool date_value;
public:
+ const interval_type int_type; // keep it public
Item_extract(interval_type type_arg, Item *a)
:Item_int_func(a), int_type(type_arg) {}
longlong val_int();
@@ -856,8 +856,8 @@ enum date_time_format
class Item_func_get_format :public Item_str_func
{
- const timestamp_type type;
public:
+ const timestamp_type type; // keep it public
Item_func_get_format(timestamp_type type_arg, Item *a)
:Item_str_func(a), type(type_arg)
{}
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 5961d57e83f..a9057ae24f6 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -701,7 +701,8 @@ int mysql_ha_open(THD *thd, TABLE_LIST *tables, bool reopen= 0);
int mysql_ha_close(THD *thd, TABLE_LIST *tables);
int mysql_ha_read(THD *, TABLE_LIST *,enum enum_ha_read_modes,char *,
List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows);
-int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags);
+int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags,
+ bool is_locked);
/* mysql_ha_flush mode_flags bits */
#define MYSQL_HA_CLOSE_FINAL 0x00
#define MYSQL_HA_REOPEN_ON_USAGE 0x01
diff --git a/sql/share/Makefile.am b/sql/share/Makefile.am
index f0207fdef03..3b13d73e8da 100644
--- a/sql/share/Makefile.am
+++ b/sql/share/Makefile.am
@@ -43,6 +43,13 @@ install-data-local:
$(INSTALL_DATA) $(srcdir)/charsets/README $(DESTDIR)$(pkgdatadir)/charsets/README
$(INSTALL_DATA) $(srcdir)/charsets/*.xml $(DESTDIR)$(pkgdatadir)/charsets
+# FIXME maybe shouldn't remove, could be needed by other installation?
+uninstall-local:
+ @RM@ -f -r $(DESTDIR)$(pkgdatadir)
+
+# Do nothing
+link_sources:
+
fix_errors:
for lang in @AVAILABLE_LANGUAGES@; \
do \
diff --git a/sql/spatial.h b/sql/spatial.h
index acd16172fcc..ec5e80e00fd 100644
--- a/sql/spatial.h
+++ b/sql/spatial.h
@@ -240,8 +240,8 @@ public:
static Geometry *create_from_wkt(Geometry_buffer *buffer,
Gis_read_stream *trs, String *wkt,
bool init_stream=1);
- static int Geometry::create_from_wkb(Geometry_buffer *buffer,
- const char *wkb, uint32 len, String *res);
+ static int create_from_wkb(Geometry_buffer *buffer,
+ const char *wkb, uint32 len, String *res);
int as_wkt(String *wkt, const char **end)
{
uint32 len= get_class_info()->m_name.length;
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index b48f2537069..8b1fa754929 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -306,7 +306,8 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
thd->proc_info="Flushing tables";
close_old_data_files(thd,thd->open_tables,1,1);
- mysql_ha_flush(thd, tables, MYSQL_HA_REOPEN_ON_USAGE | MYSQL_HA_FLUSH_ALL);
+ mysql_ha_flush(thd, tables, MYSQL_HA_REOPEN_ON_USAGE | MYSQL_HA_FLUSH_ALL,
+ TRUE);
bool found=1;
/* Wait until all threads has closed all the tables we had locked */
DBUG_PRINT("info",
@@ -860,7 +861,7 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
}
/* close handler tables which are marked for flush */
- mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE);
+ mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE, TRUE);
for (table=(TABLE*) hash_search(&open_cache,(byte*) key,key_length) ;
table && table->in_use ;
@@ -1265,7 +1266,7 @@ bool wait_for_tables(THD *thd)
{
thd->some_tables_deleted=0;
close_old_data_files(thd,thd->open_tables,0,dropping_tables != 0);
- mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE);
+ mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE, TRUE);
if (!table_is_used(thd->open_tables,1))
break;
(void) pthread_cond_wait(&COND_refresh,&LOCK_open);
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 947da6b10d6..ef938a13489 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -353,7 +353,7 @@ void THD::cleanup(void)
close_thread_tables(this);
}
mysql_ha_flush(this, (TABLE_LIST*) 0,
- MYSQL_HA_CLOSE_FINAL | MYSQL_HA_FLUSH_ALL);
+ MYSQL_HA_CLOSE_FINAL | MYSQL_HA_FLUSH_ALL, FALSE);
hash_free(&handler_tables_hash);
delete_dynamic(&user_var_events);
hash_free(&user_vars);
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index 491b82c1c1d..12acf344c31 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -354,6 +354,7 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
ha_rows select_limit,ha_rows offset_limit)
{
TABLE_LIST *hash_tables;
+ TABLE **table_ptr;
TABLE *table;
MYSQL_LOCK *lock;
List<Item> list;
@@ -383,6 +384,27 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
DBUG_PRINT("info-in-hash",("'%s'.'%s' as '%s' tab %p",
hash_tables->db, hash_tables->real_name,
hash_tables->alias, table));
+ /* Table might have been flushed. */
+ if (table && (table->version != refresh_version))
+ {
+ /*
+ We must follow the thd->handler_tables chain, as we need the
+ address of the 'next' pointer referencing this table
+ for close_thread_table().
+ */
+ for (table_ptr= &(thd->handler_tables);
+ *table_ptr && (*table_ptr != table);
+ table_ptr= &(*table_ptr)->next)
+ {}
+ VOID(pthread_mutex_lock(&LOCK_open));
+ if (close_thread_table(thd, table_ptr))
+ {
+ /* Tell threads waiting for refresh that something has happened */
+ VOID(pthread_cond_broadcast(&COND_refresh));
+ }
+ VOID(pthread_mutex_unlock(&LOCK_open));
+ table= hash_tables->table= NULL;
+ }
if (!table)
{
/*
@@ -616,6 +638,7 @@ err0:
MYSQL_HA_REOPEN_ON_USAGE mark for reopen.
MYSQL_HA_FLUSH_ALL flush all tables, not only
those marked for flush.
+ is_locked If LOCK_open is locked.
DESCRIPTION
The list of HANDLER tables may be NULL, in which case all HANDLER
@@ -623,7 +646,6 @@ err0:
If 'tables' is NULL and MYSQL_HA_FLUSH_ALL is not set,
all HANDLER tables marked for flush are closed.
Broadcasts a COND_refresh condition, for every table closed.
- The caller must lock LOCK_open.
NOTE
Since mysql_ha_flush() is called when the base table has to be closed,
@@ -633,10 +655,12 @@ err0:
0 ok
*/
-int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags)
+int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags,
+ bool is_locked)
{
TABLE_LIST *tmp_tables;
TABLE **table_ptr;
+ bool did_lock= FALSE;
DBUG_ENTER("mysql_ha_flush");
DBUG_PRINT("enter", ("tables: %p mode_flags: 0x%02x", tables, mode_flags));
@@ -662,6 +686,12 @@ int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags)
(*table_ptr)->table_cache_key,
(*table_ptr)->real_name,
(*table_ptr)->table_name));
+ /* The first time it is required, lock for close_thread_table(). */
+ if (! did_lock && ! is_locked)
+ {
+ VOID(pthread_mutex_lock(&LOCK_open));
+ did_lock= TRUE;
+ }
mysql_ha_flush_table(thd, table_ptr, mode_flags);
continue;
}
@@ -680,6 +710,12 @@ int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags)
if ((mode_flags & MYSQL_HA_FLUSH_ALL) ||
((*table_ptr)->version != refresh_version))
{
+ /* The first time it is required, lock for close_thread_table(). */
+ if (! did_lock && ! is_locked)
+ {
+ VOID(pthread_mutex_lock(&LOCK_open));
+ did_lock= TRUE;
+ }
mysql_ha_flush_table(thd, table_ptr, mode_flags);
continue;
}
@@ -687,6 +723,10 @@ int mysql_ha_flush(THD *thd, TABLE_LIST *tables, uint mode_flags)
}
}
+ /* Release the lock if it was taken by this function. */
+ if (did_lock)
+ VOID(pthread_mutex_unlock(&LOCK_open));
+
DBUG_RETURN(0);
}
@@ -718,8 +758,8 @@ static int mysql_ha_flush_table(THD *thd, TABLE **table_ptr, uint mode_flags)
table->table_name, mode_flags));
if ((hash_tables= (TABLE_LIST*) hash_search(&thd->handler_tables_hash,
- (byte*) (*table_ptr)->table_name,
- strlen((*table_ptr)->table_name) + 1)))
+ (byte*) table->table_name,
+ strlen(table->table_name) + 1)))
{
if (! (mode_flags & MYSQL_HA_REOPEN_ON_USAGE))
{
@@ -733,6 +773,7 @@ static int mysql_ha_flush_table(THD *thd, TABLE **table_ptr, uint mode_flags)
}
}
+ safe_mutex_assert_owner(&LOCK_open);
(*table_ptr)->file->ha_index_or_rnd_end();
if (close_thread_table(thd, table_ptr))
{
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 5ef3f4d9fda..5e29c98e2c8 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -7354,8 +7354,12 @@ test_if_skip_sort_order(JOIN_TAB *tab,ORDER *order,ha_rows select_limit,
DBUG_ENTER("test_if_skip_sort_order");
LINT_INIT(ref_key_parts);
- /* Check which keys can be used to resolve ORDER BY */
- usable_keys.set_all();
+ /*
+ Check which keys can be used to resolve ORDER BY.
+ We must not try to use disabled keys.
+ */
+ usable_keys= table->keys_in_use;
+
for (ORDER *tmp_order=order; tmp_order ; tmp_order=tmp_order->next)
{
if ((*tmp_order->item)->type() != Item::FIELD_ITEM)
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index d6ceca5f23c..268292022e4 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -1890,7 +1890,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables,
case SHOW_SLAVE_RUNNING:
{
pthread_mutex_lock(&LOCK_active_mi);
- end= strmov(buff, (active_mi->slave_running &&
+ end= strmov(buff, (active_mi && active_mi->slave_running &&
active_mi->rli.slave_running) ? "ON" : "OFF");
pthread_mutex_unlock(&LOCK_active_mi);
break;
@@ -1902,9 +1902,12 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables,
SLAVE STATUS, and have the sum over all lines here.
*/
pthread_mutex_lock(&LOCK_active_mi);
- pthread_mutex_lock(&active_mi->rli.data_lock);
- end= int10_to_str(active_mi->rli.retried_trans, buff, 10);
- pthread_mutex_unlock(&active_mi->rli.data_lock);
+ if (active_mi)
+ {
+ pthread_mutex_lock(&active_mi->rli.data_lock);
+ end= int10_to_str(active_mi->rli.retried_trans, buff, 10);
+ pthread_mutex_unlock(&active_mi->rli.data_lock);
+ }
pthread_mutex_unlock(&LOCK_active_mi);
break;
}
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index dcbc2018b49..0e0a05ea099 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -220,7 +220,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
for (table=tables ; table ; table=table->next)
{
char *db=table->db;
- mysql_ha_flush(thd, table, MYSQL_HA_CLOSE_FINAL);
+ mysql_ha_flush(thd, table, MYSQL_HA_CLOSE_FINAL, TRUE);
if (!close_temporary_table(thd, db, table->real_name))
{
tmp_table_deleted=1;
@@ -639,6 +639,7 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
else
{
/* Field redefined */
+ sql_field->def= dup_field->def;
sql_field->sql_type= dup_field->sql_type;
sql_field->charset= (dup_field->charset ?
dup_field->charset :
@@ -647,8 +648,15 @@ int mysql_prepare_table(THD *thd, HA_CREATE_INFO *create_info,
sql_field->pack_length= dup_field->pack_length;
sql_field->create_length_to_internal_length();
sql_field->decimals= dup_field->decimals;
- sql_field->flags= dup_field->flags;
sql_field->unireg_check= dup_field->unireg_check;
+ /*
+ We're making one field from two, the result field will have
+ dup_field->flags as flags. If we've incremented null_fields
+ because of sql_field->flags, decrement it back.
+ */
+ if (!(sql_field->flags & NOT_NULL_FLAG))
+ null_fields--;
+ sql_field->flags= dup_field->flags;
it2.remove(); // Remove first (create) definition
select_field_pos--;
break;
@@ -1920,7 +1928,7 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
if (protocol->send_fields(&field_list, 1))
DBUG_RETURN(-1);
- mysql_ha_flush(thd, tables, MYSQL_HA_CLOSE_FINAL);
+ mysql_ha_flush(thd, tables, MYSQL_HA_CLOSE_FINAL, FALSE);
for (table = tables; table; table = table->next)
{
char table_name[NAME_LEN*2+2];
@@ -2772,8 +2780,9 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
if (!new_db || !my_strcasecmp(table_alias_charset, new_db, db))
new_db= db;
used_fields=create_info->used_fields;
+
+ mysql_ha_flush(thd, table_list, MYSQL_HA_CLOSE_FINAL, FALSE);
- mysql_ha_flush(thd, table_list, MYSQL_HA_CLOSE_FINAL);
/* DISCARD/IMPORT TABLESPACE is always alone in an ALTER TABLE */
if (alter_info->tablespace_op != NO_TABLESPACE_OP)
DBUG_RETURN(mysql_discard_or_import_tablespace(thd,table_list,
diff --git a/support-files/Makefile.am b/support-files/Makefile.am
index 972d1dc7038..26d51438a1b 100644
--- a/support-files/Makefile.am
+++ b/support-files/Makefile.am
@@ -107,7 +107,5 @@ SUFFIXES = .sh
$< > $@-t
@MV@ $@-t $@
-all: binary-configure
-
# Don't update the files from bitkeeper
%::SCCS/s.%
diff --git a/support-files/mysql.spec.sh b/support-files/mysql.spec.sh
index 5cd9d1646a4..7a1219736ae 100644
--- a/support-files/mysql.spec.sh
+++ b/support-files/mysql.spec.sh
@@ -249,6 +249,7 @@ sh -c "PATH=\"${MYSQL_BUILD_PATH:-$PATH}\" \
--includedir=%{_includedir} \
--mandir=%{_mandir} \
--enable-thread-safe-client \
+ --with-zlib-dir=bundled \
--with-readline ;
# Add this for more debugging support
# --with-debug
diff --git a/vio/vio.c b/vio/vio.c
index 427c52e29d3..6174acd7024 100644
--- a/vio/vio.c
+++ b/vio/vio.c
@@ -83,7 +83,7 @@ void vio_reset(Vio* vio, enum enum_vio_type type,
#ifdef HAVE_OPENSSL
if (type == VIO_TYPE_SSL)
{
- vio->viodelete =vio_ssl_delete;
+ vio->viodelete =vio_delete;
vio->vioerrno =vio_ssl_errno;
vio->read =vio_ssl_read;
vio->write =vio_ssl_write;
diff --git a/vio/vio_priv.h b/vio/vio_priv.h
index c1c78cc6efa..eb495025ddd 100644
--- a/vio/vio_priv.h
+++ b/vio/vio_priv.h
@@ -28,7 +28,6 @@ void vio_ignore_timeout(Vio *vio, uint which, uint timeout);
#ifdef HAVE_OPENSSL
#include "my_net.h" /* needed because of struct in_addr */
-void vio_ssl_delete(Vio* vio);
int vio_ssl_read(Vio *vio,gptr buf, int size);
int vio_ssl_write(Vio *vio,const gptr buf,int size);
void vio_ssl_timeout(Vio *vio, uint which, uint timeout);
diff --git a/vio/viossl.c b/vio/viossl.c
index a3a2e7190bd..62145fe5006 100644
--- a/vio/viossl.c
+++ b/vio/viossl.c
@@ -69,25 +69,6 @@ report_errors()
DBUG_VOID_RETURN;
}
-/*
- Delete a vio object
-
- SYNPOSIS
- vio_ssl_delete()
- vio Vio object. May be 0.
-*/
-
-
-void vio_ssl_delete(Vio * vio)
-{
- if (vio)
- {
- if (vio->type != VIO_CLOSED)
- vio_close(vio);
- my_free((gptr) vio,MYF(0));
- }
-}
-
int vio_ssl_errno(Vio *vio __attribute__((unused)))
{