summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.bzrignore7
-rw-r--r--BUILD/FINISH.sh2
-rwxr-xr-xBUILD/compile-pentium-debug-max2
-rw-r--r--BitKeeper/etc/logging_ok1
-rwxr-xr-xBuild-tools/Bootstrap369
-rwxr-xr-xBuild-tools/Do-pkg207
-rw-r--r--Build-tools/logger.pm106
-rw-r--r--Docs/Makefile.am2
-rw-r--r--configure.in9
-rw-r--r--include/my_base.h15
-rw-r--r--include/my_pthread.h5
-rw-r--r--innobase/ibuf/ibuf0ibuf.c43
-rw-r--r--innobase/page/page0cur.c71
-rw-r--r--innobase/row/row0sel.c14
-rw-r--r--innobase/ut/ut0mem.c10
-rw-r--r--myisam/myisamchk.c11
-rw-r--r--mysql-test/mysql-test-run.sh2
-rw-r--r--mysql-test/r/bigint.result3
-rw-r--r--mysql-test/r/handler.result5
-rw-r--r--mysql-test/r/innodb.result6
-rw-r--r--mysql-test/r/innodb_handler.result11
-rw-r--r--mysql-test/r/query_cache.result11
-rw-r--r--mysql-test/t/bigint.test7
-rw-r--r--mysql-test/t/handler.test8
-rw-r--r--mysql-test/t/innodb.test6
-rw-r--r--mysql-test/t/innodb_handler.test14
-rw-r--r--mysql-test/t/query_cache.test12
-rw-r--r--mysql-test/t/rpl000015.slave-mi (renamed from mysql-test/t/rpl000015-slave-master-info.opt)0
-rw-r--r--mysql-test/t/rpl_rotate_logs.slave-mi (renamed from mysql-test/t/rpl_rotate_logs-slave-master-info.opt)0
-rw-r--r--mysys/my_pthread.c12
-rw-r--r--mysys/thr_alarm.c2
-rw-r--r--netware/mw/mwasmnlm5
-rw-r--r--netware/mw/mwccnlm7
-rw-r--r--netware/mw/mwenv12
-rw-r--r--netware/mw/mwldnlm5
-rw-r--r--netware/mysql_test_run.c2
-rwxr-xr-xnetware/nwbootstrap145
-rw-r--r--netware/nwconfigure23
-rw-r--r--scripts/make_binary_distribution.sh2
-rw-r--r--scripts/mysqlhotcopy.sh19
-rw-r--r--sql/field.cc2
-rw-r--r--sql/handler.cc2
-rw-r--r--sql/item_func.cc27
-rw-r--r--sql/item_sum.cc3
-rw-r--r--sql/lex.h2
-rw-r--r--sql/mysqld.cc12
-rw-r--r--sql/opt_sum.cc3
-rw-r--r--sql/protocol.cc6
-rw-r--r--sql/set_var.cc54
-rw-r--r--sql/set_var.h17
-rw-r--r--sql/share/czech/errmsg.txt8
-rw-r--r--sql/share/danish/errmsg.txt8
-rw-r--r--sql/share/dutch/errmsg.txt6
-rw-r--r--sql/share/english/errmsg.txt4
-rw-r--r--sql/share/french/errmsg.txt8
-rw-r--r--sql/share/german/errmsg.txt12
-rw-r--r--sql/share/greek/errmsg.txt4
-rw-r--r--sql/share/hungarian/errmsg.txt6
-rw-r--r--sql/share/italian/errmsg.txt6
-rw-r--r--sql/share/japanese/errmsg.txt4
-rw-r--r--sql/share/korean/errmsg.txt6
-rw-r--r--sql/share/norwegian-ny/errmsg.txt8
-rw-r--r--sql/share/norwegian/errmsg.txt8
-rw-r--r--sql/share/polish/errmsg.txt10
-rw-r--r--sql/share/portuguese/errmsg.txt2
-rw-r--r--sql/share/romanian/errmsg.txt2
-rw-r--r--sql/share/russian/errmsg.txt6
-rw-r--r--sql/share/slovak/errmsg.txt6
-rw-r--r--sql/share/spanish/errmsg.txt6
-rw-r--r--sql/share/swedish/errmsg.txt14
-rw-r--r--sql/share/ukrainian/errmsg.txt2
-rw-r--r--sql/spatial.cc3
-rw-r--r--sql/sql_analyse.cc20
-rw-r--r--sql/sql_analyse.h2
-rw-r--r--sql/sql_class.h1
-rw-r--r--sql/sql_handler.cc11
-rw-r--r--sql/sql_load.cc1
-rw-r--r--sql/sql_parse.cc2
-rw-r--r--sql/sql_select.cc36
-rw-r--r--sql/sql_show.cc14
-rw-r--r--sql/sql_string.h4
-rw-r--r--sql/sql_table.cc3
-rw-r--r--sql/sql_test.cc6
-rw-r--r--sql/sql_udf.cc4
-rw-r--r--sql/sql_update.cc2
-rw-r--r--sql/sql_yacc.yy26
-rw-r--r--sql/table.h1
-rw-r--r--support-files/MacOSX/Description.plist.sh2
-rw-r--r--support-files/MacOSX/Makefile.am21
-rw-r--r--support-files/MacOSX/ReadMe.txt80
-rw-r--r--support-files/MacOSX/StartupParameters.plist.sh19
-rw-r--r--support-files/MacOSX/postinstall.sh21
-rw-r--r--support-files/MacOSX/preinstall.sh18
93 files changed, 1535 insertions, 219 deletions
diff --git a/.bzrignore b/.bzrignore
index 28264672c82..c34c46116c5 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -486,6 +486,8 @@ repl-tests/test-repl/sum-wlen-slave.master.re
repl-tests/test-repl/sum-wlen-slave.master.reje
scripts/fill_func_tables
scripts/fill_func_tables.sql
+scripts/fill_help_tables
+scripts/fill_help_tables.sql
scripts/make_binary_distribution
scripts/msql2mysql
scripts/mysql_config
@@ -570,6 +572,9 @@ strings/ctype_autoconf.c
strings/ctype_extra_sources.c
support-files/MacOSX/Description.plist
support-files/MacOSX/Info.plist
+support-files/MacOSX/StartupParameters.plist
+support-files/MacOSX/postinstall
+support-files/MacOSX/preinstall
support-files/binary-configure
support-files/my-huge.cnf
support-files/my-large.cnf
@@ -596,5 +601,3 @@ vio/test-ssl
vio/test-sslclient
vio/test-sslserver
vio/viotest-ssl
-scripts/fill_help_tables.sql
-scripts/fill_help_tables
diff --git a/BUILD/FINISH.sh b/BUILD/FINISH.sh
index 2c2b4925c3d..32a4efefdfb 100644
--- a/BUILD/FINISH.sh
+++ b/BUILD/FINISH.sh
@@ -11,7 +11,7 @@ done
commands="\
$make -k clean || true
-/bin/rm -f */.deps/*.P config.cache innobase/config.cache bdb/build_unix/config.cache
+/bin/rm -rf */.deps/*.P config.cache innobase/config.cache bdb/build_unix/config.cache bdb/dist/autom4te.cache autom4te.cache innobase/autom4te.cache;
aclocal || (echo \"Can't execute aclocal\" && exit 1)
autoheader || (echo \"Can't execute autoheader\" && exit 1)
diff --git a/BUILD/compile-pentium-debug-max b/BUILD/compile-pentium-debug-max
index 1684686ce8c..f71b849384f 100755
--- a/BUILD/compile-pentium-debug-max
+++ b/BUILD/compile-pentium-debug-max
@@ -3,7 +3,7 @@
path=`dirname $0`
. "$path/SETUP.sh"
-extra_flags="$pentium_cflags $debug_cflags"
+extra_flags="$pentium_cflags $debug_cflags -DBIG_TABLES"
c_warnings="$c_warnings $debug_extra_warnings"
cxx_warnings="$cxx_warnings $debug_extra_warnings"
extra_configs="$pentium_configs $debug_configs"
diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok
index e06e7ccef50..c28491c9e33 100644
--- a/BitKeeper/etc/logging_ok
+++ b/BitKeeper/etc/logging_ok
@@ -18,6 +18,7 @@ bk@admin.bk
davida@isil.mysql.com
gluh@gluh.(none)
gluh@gluh.mysql.r18.ru
+greg@mysql.com
guilhem@mysql.com
gweir@work.mysql.com
heikki@donna.mysql.fi
diff --git a/Build-tools/Bootstrap b/Build-tools/Bootstrap
new file mode 100755
index 00000000000..969ab748e80
--- /dev/null
+++ b/Build-tools/Bootstrap
@@ -0,0 +1,369 @@
+#!/usr/bin/perl -w
+#
+# Bootstrap
+#
+# Script to export a given BK source tree into a separate directory
+# and create the source distribution to be used for all binary builds
+#
+# Use the "--help" option for more info!
+#
+# written by Lenz Grimmer <lenz@mysql.com>
+#
+
+use Getopt::Long;
+Getopt::Long::Configure ("bundling");
+
+# Include helper functions
+$LOGGER= "$ENV{HOME}/bin/logger.pm";
+if (-f $LOGGER)
+{
+ do "$LOGGER";
+}
+else
+{
+ die "ERROR: $LOGGER cannot be found!\n";
+}
+
+# Some predefined settings
+$build_command= "BUILD/compile-pentium-max";
+chomp ($LOGFILE= `pwd`);
+$LOGFILE.= "/Bootstrap.log";
+chomp ($opt_directory= `pwd`);
+$opt_docdir= $opt_directory . "/mysqldoc";
+$opt_changelog= undef;
+$opt_delete= undef;
+$opt_dry_run= undef;
+$opt_export_only= undef;
+$opt_help= $opt_verbose= 0;
+$opt_log= undef;
+$opt_mail= "";
+$opt_suffix= "";
+$opt_test= undef;
+$opt_skip_check= undef;
+$opt_skip_manual= undef;
+$version= "unknown";
+
+GetOptions(
+ "changelog|c:s",
+ "directory|d=s",
+ "delete",
+ "docdir=s",
+ "dry-run",
+ "export-only|e",
+ "help|h",
+ "log|l:s",
+ "mail|m=s",
+ "revision|r=s",
+ "revision|r=s",
+ "skip-check|s",
+ "skip-manual",
+ "suffix=s",
+ "test|t",
+ "verbose|v"
+) || print_help("");
+
+#
+# Override predefined Log file name
+#
+if (defined $opt_log)
+{
+ if ($opt_log ne "")
+ {
+ if ($opt_log =~ /^\/.*/)
+ {
+ $LOGFILE= $opt_log;
+ }
+ else
+ {
+ chomp ($LOGFILE= `pwd`);
+ $LOGFILE.= "/" . $opt_log;
+ }
+ }
+}
+
+print_help("") if ($opt_help);
+defined($REPO=$ARGV[0]) || print_help("Please enter the BK repository to be used!");
+
+&logger("Starting build");
+&abort("The directory \"$REPO\" could not be found!") if (!-d $REPO);
+&logger("Using $REPO as the BK parent repository");
+system ("bk help > /dev/null") == 0 or &abort("Cannot execute BitKeeper binary!");
+system ("bk root $REPO > /dev/null 2>&1") == 0 or &abort("$REPO does not seem to be a valid BK repository!");
+
+if (($opt_directory ne ".") && (!-d $opt_directory && !$opt_dry_run))
+{
+ &abort("Could not find target directory \"$opt_directory\"!");
+}
+
+&logger("Logging to $LOGFILE") if (defined $opt_log);
+
+#
+# Use a temporary name until we know the version number
+#
+$target_dir= $opt_directory . "/mysql-" . $$ . "-" . time() . ".tmp";
+&logger("Using temporary directory $target_dir");
+&abort("Target directory $target_dir already exists!") if (-d $target_dir && !$opt_dry_run);
+
+#
+# Export the BK tree
+#
+$command= "bk export ";
+$command.= "-r " . $opt_revision . " " if $opt_revision;
+$command.= "-v " if ($opt_verbose || defined $opt_log);
+$command.= $REPO . " " . $target_dir;
+&logger("Exporting $REPO");
+&run_command($command, "Could not create $target_dir!");
+
+#
+# Make sure we can write all files
+#
+$command= "find $target_dir -type f -print0 | xargs --null chmod u+w";
+&run_command($command, "Failed to fix file permissions!");
+
+#
+# Try to obtain version number from newly extracted configure.in
+#
+$CONF="$target_dir/configure.in";
+&abort("Could not find \"$CONF\" to determine version!") if (!-f $CONF && !$opt_dry_run);
+
+#
+# The following can only be done, if the tree has actually been
+# exported - it cannot be performed in a dry run.
+#
+if (!$opt_dry_run)
+{
+ open (CONF, $CONF) or &abort("Unable to open \"$CONF\": $!");
+ @conf= <CONF>;
+ close CONF;
+
+ foreach (@conf)
+ {
+ m/^AM_INIT_AUTOMAKE\(mysql, ([1-9]\.[0-9]{1,2}\.[0-9]{1,2}.*)\)/;
+ $version= $1;
+ }
+ &logger("Found version string: $version");
+
+ #
+ # Add suffix to version string and write out the modified file
+ #
+ if ($opt_suffix)
+ {
+ $opt_suffix= "-" . &ymd() if ($opt_suffix eq "YMD");
+
+ &logger("Replacing $version with $version$opt_suffix");
+ foreach (@conf)
+ {
+ s/^AM_INIT_AUTOMAKE.*/AM_INIT_AUTOMAKE\(mysql, $version$opt_suffix\)/;
+ }
+ open(CONF,">$CONF") or &abort("Unable to open \"$CONF\": $!");
+ print CONF @conf;
+ close(CONF);
+ }
+}
+
+#
+# Rename directory according to the version number found in configure.in
+# of the extracted tree (plus suffix, if requested)
+#
+$temp_name= $target_dir;
+$target_dir= $opt_directory . "/mysql-" . $version . $opt_suffix . "-build";
+if (-d $target_dir)
+{
+ &logger("Target directory $target_dir already exists!");
+ if ($opt_delete)
+ {
+ &logger("Deleting $target_dir...");
+ $command= "rm ";
+ $command.= "-v " if ($opt_verbose || defined $opt_log);
+ $command.= "$target_dir";
+ &run_command($command, "Could not delete $target_dir!");
+ }
+ else
+ {
+ &logger("Renaming $target_dir to $target_dir.old." . $$);
+ $command= "mv ";
+ $command.= "-v " if ($opt_verbose || defined $opt_log);
+ $command.= "$target_dir $target_dir.old." . $$;
+ &run_command($command, "Could not rename $target_dir!");
+ }
+}
+
+&logger("Renaming temporary directory to $target_dir");
+$command= "mv ";
+$command.= "-v " if ($opt_verbose || defined $opt_log);
+$command.= "$temp_name $target_dir";
+&run_command($command, "Could not rename $temp_name!");
+
+#
+# Add a ChangeLog (make dist will pick it up automatically)
+#
+if (defined $opt_changelog)
+{
+ #
+ # Use some magic to obtain the correct ChangeSet number that identifies
+ # the last tagged ChangeSet (this relies heavily on our current tagging
+ # practice!)
+ #
+ my $revision= "";
+ if ($opt_changelog eq "last")
+ {
+ if (!$opt_revision)
+ {
+ $revision= `bk changes -t -d':REV:' -n $REPO | head -1`;
+ }
+ else
+ {
+ $revision= `bk changes -r..$opt_revision -t -d':REV:' -n $REPO | head -2 | tail -1`;
+ }
+ chomp($revision);
+ $opt_changelog= $revision;
+ }
+
+ $msg= "Adding $target_dir/ChangeLog";
+ $msg.= " (down to revision $opt_changelog)" if $opt_changelog ne "";
+ &logger($msg);
+ $command= "bk changes -v";
+ $command.= " -r" if ($opt_changelog ne "" || $opt_revision);
+ $command.= $opt_changelog if $opt_changelog ne "";
+ $command.= ".." if ($opt_changelog ne "" && !$opt_revision);
+ $command.= ".." . $opt_revision if $opt_revision;
+ $command.= " " . $REPO . " > $target_dir/ChangeLog";
+ &logger($command);
+ # We cannot use run_command here because of output redirection
+ if (!$opt_dry_run)
+ {
+ system($command) == 0 or &abort("Could not create $target_dir/ChangeLog!");
+ }
+}
+
+#
+# Add the latest manual from the mysqldoc tree
+#
+if (!$opt_skip_manual)
+{
+ $msg= "Adding manual.texi";
+ &logger($msg);
+ $command= "install -m 644 $opt_docdir/Docs/{manual,reservedwords}.texi";
+ $command.= " $target_dir/Docs/";
+ &run_command($command, "Could not update the manual in $target_dir/Docs/!");
+}
+
+#
+# Abort here, if we just wanted to export the tree
+#
+if ($opt_export_only)
+{
+ &logger("SUCCESS: Export finished successfully.");
+ exit 0;
+}
+
+#
+# Enter the target directory first
+#
+&logger("Entering $target_dir");
+if (!$opt_dry_run)
+{
+ chdir($target_dir) or &abort("Cannot chdir to $target_dir: $!");
+}
+
+#
+# Now build the source distribution
+#
+&logger("Compiling");
+$command= $build_command;
+&run_command($command, "Compilation failed!");
+
+#
+# Testing the built binary by running "make test" (optional)
+#
+if ($opt_test)
+{
+ &logger ("Running test suite");
+ $command= "make test";
+ &run_command($command, "\"make test\" failed!");
+}
+
+#
+# Pack it all up
+#
+&logger("Creating source distribution");
+$command= "make dist";
+&run_command($command, "make dist failed!");
+
+#
+# Run "make distcheck" to verify the source archive
+#
+if (!$opt_skip_check)
+{
+ &logger ("Checking source distribution");
+ $command= "make distcheck";
+ &run_command($command, "make distcheck failed!");
+}
+
+#
+# All done when we came down here
+#
+&logger("SUCCESS: Build finished successfully.") if (!$opt_dry_run);
+exit 0;
+
+#
+# Print the help text message (with an optional message on top)
+#
+sub print_help
+{
+ my $message= $_[0];
+ if ($message ne "")
+ {
+ print "\n";
+ print "ERROR: $message\n";
+ }
+ print <<EOF;
+
+Usage: Bootstrap [options] <bk repository>
+
+Checks out (exports) a clear-text version of the given local BitKeeper
+repository, creates and adds a Changelog file (if requested), adds the
+latest manual.texi from the mysqldoc tree and builds a source distribution
+(*.tar.gz) file. Optionally, the test suite can be run before the source
+archive is being created.
+
+Options:
+
+-c, --changelog[=<rev>] Add a ChangeLog [down to revision <rev>]
+ This will automatically be included in the source
+ distribution. To get a ChangeLog down to the last
+ tagged Changeset, simply use "last" as the revision
+ number.
+--delete Delete an already existing distribution directory
+ in the target directory instead of renaming it.
+-d, --directory=<dir> Specify the target directory
+ (default is "$opt_directory")
+--docdir=<dir> Use the MySQL documentation BK tree located in in <dir>
+ (default is "$opt_docdir")
+--dry-run Dry run without executing
+-e, --export-only Just export (and add the ChangeLog, if requested),
+ do not build or test the source distribution
+-h, --help Print this help message
+-l, --log[=<filename>] Write a log file [to <filename>]
+ (default is "$LOGFILE")
+-m, --mail=<address> Mail a failure report to the given address (and
+ include a log file snippet, if logging is enabled)
+ Note that the \@-Sign needs to be quoted!
+ Example: --mail=user\\\@domain.com
+-r, --revision=<rev> Export the tree as of revision <rev>
+ (default is up to the latest revision)
+-s, --skip-check Skip checking the distribution with "make distcheck"
+--skip-manual Skip updating the manual from the mysqldoc tree
+--suffix=<suffix> Append <suffix> to the version number in configure.in.
+ Using the special suffix "YMD" will add the current
+ date as the suffix (e.g. "-20020518").
+-t, --test Run the test suite after build
+-v, --verbose Be verbose
+
+Example:
+
+ Bootstrap -c last -v -l -- mysql-4.0
+
+EOF
+ exit 1;
+}
diff --git a/Build-tools/Do-pkg b/Build-tools/Do-pkg
new file mode 100755
index 00000000000..67c0e612828
--- /dev/null
+++ b/Build-tools/Do-pkg
@@ -0,0 +1,207 @@
+#!/usr/bin/perl -w
+#
+# Do-pkg - convert a binary distribution into a Mac OS X PKG and put it
+# inside a Disk Image (.dmg)
+#
+# Use the "--help" option for more info!
+#
+# written by Lenz Grimmer <lenz@mysql.com>
+#
+
+use Getopt::Long;
+Getopt::Long::Configure ("bundling");
+
+$opt_dry_run= undef;
+$opt_help= undef;
+$opt_log= undef;
+$opt_mail= "";
+$opt_suffix= undef;
+$opt_verbose= undef;
+$opt_version= undef;
+
+GetOptions(
+ "dry-run",
+ "help|h",
+ "log|l:s",
+ "mail|m=s",
+ "suffix=s",
+ "verbose|v",
+ "version=s",
+) || &print_help;
+
+# Include helper functions
+chomp($PWD= `pwd`);
+$LOGGER= "$PWD/logger.pm";
+if (-f $LOGGER)
+{
+ do "$LOGGER";
+}
+else
+{
+ die "ERROR: $LOGGER cannot be found!\n";
+}
+
+$PM= "/Developer/Applications/PackageMaker.app/Contents/MacOS/PackageMaker";
+$TMP= "/tmp/PKGBUILD";
+$PKGROOT= "$TMP/PMROOT";
+$PKGDEST= "$TMP/PKG";
+$RESOURCE_DIR= "$TMP/Resources";
+$SUFFIX= $opt_suffix;
+$VERSION= $opt_version;
+($MAJOR, $MINOR, $RELEASE)= split(/\./, $VERSION);
+$NAME= "mysql$SUFFIX-$VERSION";
+chomp($HOST= `hostname`);
+chomp($ID= `whoami`);
+$HOST=~ /^([^.-]*)/;
+$HOST= $1;
+$LOGFILE= "$PWD/Logs/$HOST-$MAJOR.$MINOR$SUFFIX.log";
+$BUILDDIR= "$PWD/$HOST";
+$SUPFILEDIR= <$BUILDDIR/mysql*-$VERSION/support-files/MacOSX>;
+$TAR= <$BUILDDIR/$NAME-apple-darwin*-powerpc.tar.gz>;
+$INFO= <$SUPFILEDIR/Info.plist>;
+$DESC= <$SUPFILEDIR/Description.plist>;
+@RESOURCES= qw/ ReadMe.txt postinstall preinstall /;
+
+&print_help("") if ($opt_help || !$opt_suffix || !$opt_version);
+
+#
+# Override predefined Log file name
+#
+if (defined $opt_log)
+{
+ if ($opt_log ne "")
+ {
+ if ($opt_log =~ /^\/.*/)
+ {
+ $LOGFILE= $opt_log;
+ }
+ else
+ {
+ $LOGFILE= $PWD . "/" . $opt_log;
+ }
+ }
+}
+
+# Creating the UFS disk image requires root privileges
+die("You must be root to run this script!") if ($ID ne "root" && !$opt_dry_run);
+
+foreach $file ($TAR, $INFO, $DESC)
+{
+ &abort("Unable to find $file!") if (!-f $file);
+}
+
+# Remove old temporary build directories first
+&logger("Cleaning up temporary build directories");
+&run_command("rm -rf $TMP", "Could not clean up $TMP!");
+&logger("Creating temp directories");
+foreach $dir ($TMP, $PKGROOT, $PKGDEST, $RESOURCE_DIR)
+{
+ if (!-d $dir)
+ {
+ &run_command("mkdir $dir", "Could not make directory $dir!");
+ }
+}
+
+foreach $resfile (@RESOURCES)
+{
+ $command= "cp $SUPFILEDIR/$resfile $RESOURCE_DIR";
+ &run_command($command, "Error while copying $SUPFILEDIR/$resfile to $RESOURCE_DIR");
+}
+
+# Extract the binary tarball and create the "mysql" symlink
+&logger("Extracting $TAR to $PKGROOT");
+&run_command("gnutar zxf $TAR -C $PKGROOT", "Unable to extract $TAR!");
+&run_command("cd $PKGROOT ; ln -s mysql* ./mysql", "Unable to create symlink!");
+&run_command("chown -R root.wheel $PKGROOT/*", "Cannot chown $PKGROOT!");
+
+# Now build the PGK using PackageMaker
+# The "|| true" is a nasty hack to work around a problem with Package Maker
+# returning a non-zero value, even though the package was created correctly
+&logger("Running PackageMaker");
+$command= "$PM -build -p $PKGDEST/$NAME.pkg -f $PKGROOT -r $RESOURCE_DIR -i $INFO -d $DESC || true";
+&run_command($command, "Error while building package!");
+
+&logger("Removing $PKGROOT");
+&run_command("rm -rf $PKGROOT", "Unable to remove $PKGROOT!");
+
+# Determine the size of the Disk image to be created and add a 5% safety
+# margin for filesystem overhead
+&logger("Determining required disk image size for $PKGDEST");
+if (! $opt_dry_run)
+{
+ chomp($_= `du -sk $PKGDEST`);
+ @size= split();
+ $size= int($size[0]+($size[0]*0.05));
+ &logger("Disk image size: $size KB");
+}
+
+&abort("Zero bytes? Something is wrong here!") if ($size == 0);
+
+# Now create and mount the disk image
+$TMPNAME= $NAME . ".tmp";
+&logger("Creating temporary Disk image $TMPNAME.dmg");
+$command= "hdiutil create $TMPNAME -size ${size}k -ov -fs UFS -volname $NAME";
+&run_command($command, "Unable to create disk image $TMPNAME.dmg!");
+&logger("Attaching Disk image $TMPNAME.dmg");
+&run_command("hdid $TMPNAME.dmg", "Unable to attach $TMPNAME.dmg!");
+
+# Install the PKG into the .dmg
+chomp($mountpoint=`mount | grep "\/Volumes\/$NAME" | cut -f3 -d" "`) if (!$opt_dry_run);
+&logger("Copying $PKGDEST/$NAME.pkg to Disk image /Volumes/$NAME");
+&run_command("ditto $PKGDEST /Volumes/$NAME", "Could not copy $PKGDEST to /Volumes/$NAME!");
+&run_command("ditto $RESOURCE_DIR/ReadMe.txt /Volumes/$NAME", "Could not copy $RESOURCE_DIR/ReadMe.txt to /Volumes/$NAME!");
+chomp($mountpoint=`mount | grep "\/Volumes\/$NAME" | cut -f1 -d" "`) if (!$opt_dry_run);
+&abort("/Volumes/$NAME not attached!") if (!$mountpoint && !$opt_dry_run);
+&logger("Unmounting $mountpoint");
+&run_command("hdiutil detach $mountpoint", "Unable to detach $mountpoint");
+&run_command("rm -f $NAME.dmg", "Unable to remove $NAME.dmg!") if (-f "$NAME.dmg");
+&logger("Compressing disk image");
+$command= "hdiutil convert $TMPNAME.dmg -format UDZO -imagekey zlib-level=9 -o $NAME.dmg";
+&run_command($command, "Unable to compress disk image!");
+
+# Final cleanups
+&logger("Removing $TMPNAME.dmg");
+&run_command("rm -f $TMPNAME.dmg", "Unable to remove $TMPNAME.dmg!");
+&logger("Removing $TMP");
+&run_command("rm -rf $TMP", "Unable to remove $TMP!");
+
+&logger("SUCCESS: $NAME.dmg created.") if (!$opt_dry_run);
+exit 0;
+
+sub print_help
+{
+ my $message= $_[0];
+ if ($message ne "")
+ {
+ print "\n";
+ print "ERROR: $message\n";
+ }
+ print <<EOF;
+
+Usage: Do-pkg <options> --suffix=<suffix> --version=<version>
+
+Creates a Mac OS X installation package (PKG) and stores it inside
+a Disk Image (.dmg) file. You need to create a binary distribution
+tarball with scripts/make_binary_distribution first!
+
+NOTE: You need to run this script with root privileges (required
+ to create the disk image)
+
+Options:
+
+ --dry-run Dry run without executing
+-h, --help Print this help
+-l, --log[=<filename>] Write a log file [to <filename>]
+ (default is "$LOGFILE")
+-m, --mail=<address> Mail a failure report to the given address
+ (and include a log file snippet, if logging
+ is enabled)
+ Note that the \@-Sign needs to be quoted!
+ Example: --mail=user\\\@domain.com
+ --suffix=<suffix> The package suffix (e.g. "-standard" or "-pro)
+ --version=<version> The MySQL version number (e.g. 4.0.11-gamma)
+-v, --verbose Verbose execution
+
+EOF
+ exit 1;
+}
diff --git a/Build-tools/logger.pm b/Build-tools/logger.pm
new file mode 100644
index 00000000000..becde95df18
--- /dev/null
+++ b/Build-tools/logger.pm
@@ -0,0 +1,106 @@
+# Helper functions
+
+#
+# Create a log entry
+#
+sub logger
+{
+ my $message=$_[0];
+ print timestamp() . " " . $message . "\n" if $opt_verbose;
+ if (defined $opt_log && !$opt_dry_run)
+ {
+ open LOG, ">>$LOGFILE" or die "Can't open logfile $LOGFILE!";
+ print LOG timestamp() . " " . $message . "\n";
+ close LOG;
+ }
+}
+
+#
+# run_command(<command>,<error message>)
+# Execute the given command or die with the respective error message
+# Just print out the command when doing a dry run
+#
+sub run_command
+{
+ my $command= $_[0];
+ my $errormsg= $_[1];
+ if ($opt_dry_run)
+ {
+ print "$command\n";
+ }
+ else
+ {
+ &logger($command);
+ $command.= " >> $LOGFILE 2>&1" if defined $opt_log;
+ $command.= " > /dev/null" if (!$opt_verbose && !$opt_log);
+ system($command) == 0 or &abort("$errormsg\n");
+ }
+}
+
+#
+# abort(<message>)
+# Exit with giving out the given error message or by sending
+# it via email to the given mail address (including a log file snippet,
+# if available)
+#
+sub abort
+{
+ my $message= $_[0];
+ my $messagefile;
+ $message= "ERROR: " . $message;
+ &logger($message);
+
+ if ($opt_mail && !$opt_dry_run)
+ {
+ $messagefile= "/tmp/message.$$";
+ $subject= "Bootstrap of $REPO failed";
+ open(TMP,">$messagefile");
+ print TMP "$message\n\n";
+ close TMP;
+ if (defined $opt_log)
+ {
+ system("tail -n 40 $LOGFILE >> $messagefile");
+ }
+ system("mail -s \"$subject\" $opt_mail < $messagefile");
+ unlink($messagefile);
+ }
+
+ exit 1;
+}
+
+# Create a time stamp for logging purposes
+sub timestamp
+{
+ return &ymd() . " " . &hms();
+}
+
+#
+# return the current time as a string (HH:MM:SS)
+#
+sub hms
+{
+ my @ta= localtime(time());
+ my $h= $ta[2];
+ $h= "0" . "$h" if ($h <= 9);
+ my $m= $ta[1];
+ $m= "0" . "$m" if ($m <= 9);
+ my $s= $ta[0];
+ $s="0" . "$s" if ($s <= 9);
+
+ return "$h:$m:$s";
+}
+
+#
+# return the current date as a string (YYYYMMDD)
+#
+sub ymd
+{
+ my @ta=localtime(time());
+ my $d=$ta[3];
+ $d="0" . "$d" if ($d <= 9);
+ my $m=$ta[4]+1;
+ $m="0" . "$m" if ($m <= 9);
+ my $y=1900+$ta[5];
+
+ return "$y$m$d";
+}
diff --git a/Docs/Makefile.am b/Docs/Makefile.am
index 7d1d2ee8cbd..af771a5728d 100644
--- a/Docs/Makefile.am
+++ b/Docs/Makefile.am
@@ -22,7 +22,7 @@ targets = manual.txt mysql.info manual.html
BUILT_SOURCES = $(targets) manual_toc.html include.texi
EXTRA_DIST = $(noinst_SCRIPTS) $(BUILT_SOURCES) mysqld_error.txt \
- INSTALL-BINARY mirrors.texi
+ INSTALL-BINARY reservedwords.texi
all: $(targets) txt_files
diff --git a/configure.in b/configure.in
index c8fe87fa0af..bddbfcc8619 100644
--- a/configure.in
+++ b/configure.in
@@ -987,8 +987,8 @@ case $SYSTEM_TYPE in
# Fixes for HPUX 11.0 compiler
if test "$ac_cv_prog_gcc" = "no"
then
- CFLAGS="$CFLAGS +DD64 -DHAVE_BROKEN_INLINE"
- CXXFLAGS="$CXXFLAGS +DD64 +O2"
+ CFLAGS="$CFLAGS -DHAVE_BROKEN_INLINE"
+ CXXFLAGS="$CXXFLAGS +O2"
MAX_C_OPTIMIZE=""
MAX_CXX_OPTIMIZE=""
fi
@@ -2274,7 +2274,9 @@ AC_ARG_WITH(extra-charsets,
AC_MSG_CHECKING("character sets")
-if test "$extra_charsets" = none; then
+if test "$extra_charsets" = no; then
+ CHARSETS=""
+elif test "$extra_charsets" = none; then
CHARSETS=""
elif test "$extra_charsets" = complex; then
CHARSETS="$CHARSETS_COMPLEX"
@@ -2669,7 +2671,6 @@ AC_OUTPUT(Makefile extra/Makefile mysys/Makefile isam/Makefile dnl
include/Makefile sql-bench/Makefile tools/Makefile dnl
tests/Makefile Docs/Makefile support-files/Makefile dnl
support-files/MacOSX/Makefile mysql-test/Makefile dnl
- netware/Makefile dnl
include/mysql_version.h dnl
, , [
test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
diff --git a/include/my_base.h b/include/my_base.h
index f167ae3d30e..b806436fe0e 100644
--- a/include/my_base.h
+++ b/include/my_base.h
@@ -49,6 +49,21 @@
/* The following is parameter to ha_rkey() how to use key */
+/* We define a complete-field prefix of a key value as a prefix where the
+last included field in the prefix contains the full field, not just some bytes
+from the start of the field. A partial-field prefix is allowed to
+contain only a few first bytes from the last included field.
+
+Below HA_READ_KEY_EXACT, ..., HA_READ_BEFORE_KEY can take a
+complete-field prefix of a key value as the search key. HA_READ_PREFIX
+and HA_READ_PREFIX_LAST could also take a partial-field prefix, but
+currently (4.0.10) they are only used with complete-field prefixes. MySQL uses
+a padding trick to implement LIKE 'abc%' queries.
+
+NOTE that in InnoDB HA_READ_PREFIX_LAST will NOT work with a partial-field
+prefix because InnoDB currently strips spaces from the end of varchar
+fields! */
+
enum ha_rkey_function {
HA_READ_KEY_EXACT, /* Find first record else error */
HA_READ_KEY_OR_NEXT, /* Record or next record */
diff --git a/include/my_pthread.h b/include/my_pthread.h
index ad4bb21ce00..5176d0f8f86 100644
--- a/include/my_pthread.h
+++ b/include/my_pthread.h
@@ -444,6 +444,11 @@ int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
struct timespec *abstime);
#endif
+#if defined(HPUX10)
+#define pthread_attr_getstacksize(A,B) my_pthread_attr_getstacksize(A,B)
+void my_pthread_attr_getstacksize(pthread_attr_t *attrib, size_t *size);
+#endif
+
#if defined(HAVE_POSIX1003_4a_MUTEX) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS)
#undef pthread_mutex_trylock
#define pthread_mutex_trylock(a) my_pthread_mutex_trylock((a))
diff --git a/innobase/ibuf/ibuf0ibuf.c b/innobase/ibuf/ibuf0ibuf.c
index 668e9419c24..5cd066afc27 100644
--- a/innobase/ibuf/ibuf0ibuf.c
+++ b/innobase/ibuf/ibuf0ibuf.c
@@ -2488,7 +2488,9 @@ ibuf_merge_or_delete_for_page(
ulint old_bits;
ulint new_bits;
dulint max_trx_id;
+ ibool corruption_noticed = FALSE;
mtr_t mtr;
+ char err_buf[500];
if (srv_force_recovery >= SRV_FORCE_NO_IBUF_MERGE) {
@@ -2540,7 +2542,38 @@ ibuf_merge_or_delete_for_page(
block = buf_block_align(page);
rw_lock_x_lock_move_ownership(&(block->lock));
- ut_a(fil_page_get_type(page) == FIL_PAGE_INDEX);
+ if (fil_page_get_type(page) != FIL_PAGE_INDEX) {
+
+ corruption_noticed = TRUE;
+
+ ut_print_timestamp(stderr);
+
+ mtr_start(&mtr);
+
+ fprintf(stderr,
+" InnoDB: Dump of the ibuf bitmap page:\n");
+
+ bitmap_page = ibuf_bitmap_get_map_page(space, page_no,
+ &mtr);
+ buf_page_print(bitmap_page);
+
+ mtr_commit(&mtr);
+
+ fprintf(stderr, "\nInnoDB: Dump of the page:\n");
+
+ buf_page_print(page);
+
+ fprintf(stderr,
+"InnoDB: Error: corruption in the tablespace. Bitmap shows insert\n"
+"InnoDB: buffer records to page n:o %lu though the page\n"
+"InnoDB: type is %lu, which is not an index page!\n"
+"InnoDB: We try to resolve the problem by skipping the insert buffer\n"
+"InnoDB: merge for this page. Please run CHECK TABLE on your tables\n"
+"InnoDB: to determine if they are corrupt after this.\n\n"
+"InnoDB: Please make a detailed bug report and send it to\n"
+"InnoDB: mysql@lists.mysql.com\n\n",
+ page_no, fil_page_get_type(page));
+ }
}
n_inserts = 0;
@@ -2583,8 +2616,14 @@ loop:
goto reset_bit;
}
+
+ if (corruption_noticed) {
+ rec_sprintf(err_buf, 450, ibuf_rec);
+
+ fprintf(stderr,
+"InnoDB: Discarding record\n %s\n from the insert buffer!\n\n", err_buf);
- if (page) {
+ } else if (page) {
/* Now we have at pcur a record which should be
inserted to the index page; NOTE that the call below
copies pointers to fields in ibuf_rec, and we must
diff --git a/innobase/page/page0cur.c b/innobase/page/page0cur.c
index 0e65dc8b1de..d3a40668c4b 100644
--- a/innobase/page/page0cur.c
+++ b/innobase/page/page0cur.c
@@ -121,6 +121,53 @@ page_cur_try_search_shortcut(
#endif
/********************************************************************
+Checks if the nth field in a record is a character type field which extends
+the nth field in tuple, i.e., the field is longer or equal in length and has
+common first characters. */
+static
+ibool
+page_cur_rec_field_extends(
+/*=======================*/
+ /* out: TRUE if rec field extends tuple
+ field */
+ dtuple_t* tuple, /* in: data tuple */
+ rec_t* rec, /* in: record */
+ ulint n) /* in: compare nth field */
+{
+ dtype_t* type;
+ dfield_t* dfield;
+ byte* rec_f;
+ ulint rec_f_len;
+
+ dfield = dtuple_get_nth_field(tuple, n);
+
+ type = dfield_get_type(dfield);
+
+ rec_f = rec_get_nth_field(rec, n, &rec_f_len);
+
+ if (type->mtype == DATA_VARCHAR
+ || type->mtype == DATA_CHAR
+ || type->mtype == DATA_FIXBINARY
+ || type->mtype == DATA_BINARY
+ || type->mtype == DATA_BLOB
+ || type->mtype == DATA_VARMYSQL
+ || type->mtype == DATA_MYSQL) {
+
+ if (dfield_get_len(dfield) != UNIV_SQL_NULL
+ && rec_f_len != UNIV_SQL_NULL
+ && rec_f_len >= dfield_get_len(dfield)
+ && 0 == cmp_data_data_slow(type, dfield_get_data(dfield),
+ dfield_get_len(dfield),
+ rec_f, dfield_get_len(dfield))) {
+
+ return(TRUE);
+ }
+ }
+
+ return(FALSE);
+}
+
+/********************************************************************
Searches the right position for a page cursor. */
void
@@ -239,16 +286,8 @@ page_cur_search_with_match(
} else if (cmp == -1) {
if (mode == PAGE_CUR_LE_OR_EXTENDS
- && dfield_get_len(dtuple_get_nth_field(tuple,
- cur_matched_fields))
- == cur_matched_bytes
- && rec_get_nth_field_len(mid_rec,
- cur_matched_fields)
- != UNIV_SQL_NULL) {
-
- /* This means current dfield is not SQL
- NULL, and the current rec field extends it */
-
+ && page_cur_rec_field_extends(tuple, mid_rec,
+ cur_matched_fields)) {
low = mid;
low_matched_fields = cur_matched_fields;
low_matched_bytes = cur_matched_bytes;
@@ -296,16 +335,8 @@ page_cur_search_with_match(
} else if (cmp == -1) {
if (mode == PAGE_CUR_LE_OR_EXTENDS
- && dfield_get_len(dtuple_get_nth_field(tuple,
- cur_matched_fields))
- == cur_matched_bytes
- && rec_get_nth_field_len(mid_rec,
- cur_matched_fields)
- != UNIV_SQL_NULL) {
-
- /* This means current dfield is not SQL
- NULL, and the current rec field extends it */
-
+ && page_cur_rec_field_extends(tuple, mid_rec,
+ cur_matched_fields)) {
low_rec = mid_rec;
low_matched_fields = cur_matched_fields;
low_matched_bytes = cur_matched_bytes;
diff --git a/innobase/row/row0sel.c b/innobase/row/row0sel.c
index 34f951b0c8a..1fc329fe2ca 100644
--- a/innobase/row/row0sel.c
+++ b/innobase/row/row0sel.c
@@ -1926,7 +1926,19 @@ row_sel_convert_mysql_key_to_innobase(
if (key_ptr > key_end) {
/* The last field in key was not a complete
- field but a prefix of it */
+ field but a prefix of it.
+
+ Print a warning about this! HA_READ_PREFIX_LAST
+ does not currently work in InnoDB with partial-field
+ key value prefixes. Since MySQL currently uses a
+ padding trick to calculate LIKE 'abc%' type queries
+ there should never be partial-field prefixes
+ in searches. */
+
+ ut_print_timestamp(stderr);
+
+ fprintf(stderr,
+ " InnoDB: Warning: using a partial-field key prefix in search\n");
ut_ad(dfield_get_len(dfield) != UNIV_SQL_NULL);
diff --git a/innobase/ut/ut0mem.c b/innobase/ut/ut0mem.c
index a5991d5683d..23deed0fa55 100644
--- a/innobase/ut/ut0mem.c
+++ b/innobase/ut/ut0mem.c
@@ -81,7 +81,7 @@ ut_malloc_low(
fprintf(stderr,
" InnoDB: Fatal error: cannot allocate %lu bytes of\n"
"InnoDB: memory with malloc! Total allocated memory\n"
- "InnoDB: by InnoDB %lu bytes. Operating system errno: %d\n"
+ "InnoDB: by InnoDB %lu bytes. Operating system errno: %lu\n"
"InnoDB: Cannot continue operation!\n"
"InnoDB: Check if you should increase the swap file or\n"
"InnoDB: ulimits of your operating system.\n"
@@ -89,7 +89,13 @@ ut_malloc_low(
"InnoDB: a big enough maximum process size.\n"
"InnoDB: We now intentionally generate a seg fault so that\n"
"InnoDB: on Linux we get a stack trace.\n",
- n, ut_total_allocated_memory, errno);
+ n, ut_total_allocated_memory,
+#ifdef __WIN__
+ (ulint)GetLastError()
+#else
+ (ulint)errno
+#endif
+ );
/* Flush stderr to make more probable that the error
message gets in the error file before we generate a seg
diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c
index 0a5aa889a1a..104b344a9e2 100644
--- a/myisam/myisamchk.c
+++ b/myisam/myisamchk.c
@@ -962,11 +962,11 @@ static int myisamchk(MI_CHECK *param, my_string filename)
uint key;
/*
We can't update the index in mi_sort_records if we have a
- prefix compressed index
+ prefix compressed or fulltext index
*/
my_bool update_index=1;
for (key=0 ; key < share->base.keys; key++)
- if (share->keyinfo[key].flag & HA_BINARY_PACK_KEY)
+ if (share->keyinfo[key].flag & (HA_BINARY_PACK_KEY|HA_FULLTEXT))
update_index=0;
error=mi_sort_records(param,info,filename,param->opt_sort_key,
@@ -1417,6 +1417,13 @@ static int mi_sort_records(MI_CHECK *param,
param->error_printed=0;
DBUG_RETURN(-1);
}
+ if (keyinfo->flag & HA_FULLTEXT)
+ {
+ mi_check_print_error(param,"Can't sort table '%s' on FULLTEXT key %d",
+ name,sort_key+1);
+ param->error_printed=0;
+ DBUG_RETURN(-1);
+ }
if (!(param->testflag & T_SILENT))
{
printf("- Sorting records for MyISAM-table '%s'\n",name);
diff --git a/mysql-test/mysql-test-run.sh b/mysql-test/mysql-test-run.sh
index 60c352e5e52..db1fab7a50d 100644
--- a/mysql-test/mysql-test-run.sh
+++ b/mysql-test/mysql-test-run.sh
@@ -1120,7 +1120,7 @@ run_testcase ()
slave_opt_file=$TESTDIR/$tname-slave.opt
master_init_script=$TESTDIR/$tname-master.sh
slave_init_script=$TESTDIR/$tname-slave.sh
- slave_master_info_file=$TESTDIR/$tname-slave-master-info.opt
+ slave_master_info_file=$TESTDIR/$tname.slave-mi
echo $tname > $CURRENT_TEST
SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0`
if [ $USE_MANAGER = 1 ] ; then
diff --git a/mysql-test/r/bigint.result b/mysql-test/r/bigint.result
index 2037085dfdb..e49e39bbbf6 100644
--- a/mysql-test/r/bigint.result
+++ b/mysql-test/r/bigint.result
@@ -8,6 +8,9 @@ select 9223372036854775807,-009223372036854775808;
select +9999999999999999999,-9999999999999999999;
+9999999999999999999 -9999999999999999999
10000000000000000000 -10000000000000000000
+select cast(9223372036854775808 as unsigned)+1;
+cast(9223372036854775808 as unsigned)+1
+9223372036854775809
select 9223372036854775808+1;
9223372036854775808+1
9223372036854775808
diff --git a/mysql-test/r/handler.result b/mysql-test/r/handler.result
index 9d3383efd8f..d8381ccc626 100644
--- a/mysql-test/r/handler.result
+++ b/mysql-test/r/handler.result
@@ -131,7 +131,6 @@ a b
handler t2 read next;
a b
18 eee
-alter table t1 type=MyISAM;
handler t2 read next;
a b
19 fff
@@ -144,4 +143,8 @@ create table t1 (a int);
insert into t1 values (17);
handler t2 read first;
Unknown table 't2' in HANDLER
+handler t1 open as t2;
+alter table t1 type=MyISAM;
+handler t2 read first;
+Unknown table 't2' in HANDLER
drop table t1;
diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result
index 47ed1f99b0e..5bc21501eca 100644
--- a/mysql-test/r/innodb.result
+++ b/mysql-test/r/innodb.result
@@ -1057,6 +1057,12 @@ create table t2 (b varchar(10) not null unique) type=innodb;
select t1.a from t1,t2 where t1.a=t2.b;
a
drop table t1,t2;
+create table t1 (a int not null, b int, primary key (a)) type = innodb;
+create table t2 (a int not null, b int, primary key (a)) type = innodb;
+insert into t1 values (10, 20);
+insert into t2 values (10, 20);
+update t1, t2 set t1.b = 150, t2.b = t1.b where t2.a = t1.a and t1.a = 10;
+drop table t1,t2;
CREATE TABLE t1 (id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE t2 (id INT PRIMARY KEY, t1_id INT, INDEX par_ind (t1_id), FOREIGN KEY (t1_id) REFERENCES t1(id) ON DELETE CASCADE ) TYPE=INNODB;
insert into t1 set id=1;
diff --git a/mysql-test/r/innodb_handler.result b/mysql-test/r/innodb_handler.result
index dc6a265fb29..4ce104506f1 100644
--- a/mysql-test/r/innodb_handler.result
+++ b/mysql-test/r/innodb_handler.result
@@ -129,11 +129,14 @@ a b
handler t2 read next;
a b
18 eee
-alter table t1 type=innodb;
-handler t2 read next;
-a b
-19 fff
handler t2 read last;
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
handler t2 close;
+handler t1 open as t2;
+handler t2 read first;
+a b
+17 ddd
+alter table t1 type=innodb;
+handler t2 read first;
+Unknown table 't2' in HANDLER
drop table if exists t1;
diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result
index 7114c251e03..30a0cd01c51 100644
--- a/mysql-test/r/query_cache.result
+++ b/mysql-test/r/query_cache.result
@@ -555,3 +555,14 @@ Table 'test.t1' doesn't exist
drop table t2;
select * from t1 where id=2;
Table 'test.t1' doesn't exist
+create table t1 (word char(20) not null);
+select * from t1;
+word
+show status like "Qcache_queries_in_cache";
+Variable_name Value
+Qcache_queries_in_cache 1
+load data infile '../../std_data/words.dat' into table t1;
+show status like "Qcache_queries_in_cache";
+Variable_name Value
+Qcache_queries_in_cache 0
+drop table t1;
diff --git a/mysql-test/t/bigint.test b/mysql-test/t/bigint.test
index f627614c049..f583045cea9 100644
--- a/mysql-test/t/bigint.test
+++ b/mysql-test/t/bigint.test
@@ -11,6 +11,13 @@ drop table if exists t1;
select 0,256,00000000000000065536,2147483647,-2147483648,2147483648,+4294967296;
select 9223372036854775807,-009223372036854775808;
select +9999999999999999999,-9999999999999999999;
+select cast(9223372036854775808 as unsigned)+1;
+
+#
+# We need to do a REPLACE here as the atof() function returns different
+# values on True64 and HPUX11
+#
+--replace_result 9223372036854775800 9223372036854775808
select 9223372036854775808+1;
#
# In 3.23 we have to disable the test of column to bigint as
diff --git a/mysql-test/t/handler.test b/mysql-test/t/handler.test
index 657185f5e2d..30746f10c62 100644
--- a/mysql-test/t/handler.test
+++ b/mysql-test/t/handler.test
@@ -65,15 +65,13 @@ handler t2 read a=(19) where b="yyy";
handler t2 read first;
handler t2 read next;
-alter table t1 type=MyISAM;
handler t2 read next;
--error 1064
handler t2 read last;
-
handler t2 close;
#
-# DROP TABLE
+# DROP TABLE / ALTER TABLE
#
handler t1 open as t2;
drop table t1;
@@ -81,5 +79,9 @@ create table t1 (a int);
insert into t1 values (17);
--error 1109
handler t2 read first;
+handler t1 open as t2;
+alter table t1 type=MyISAM;
+--error 1109
+handler t2 read first;
drop table t1;
diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test
index 109a34e3068..b8ba55d9230 100644
--- a/mysql-test/t/innodb.test
+++ b/mysql-test/t/innodb.test
@@ -698,6 +698,12 @@ create table t1 (a varchar(10) not null) type=myisam;
create table t2 (b varchar(10) not null unique) type=innodb;
select t1.a from t1,t2 where t1.a=t2.b;
drop table t1,t2;
+create table t1 (a int not null, b int, primary key (a)) type = innodb;
+create table t2 (a int not null, b int, primary key (a)) type = innodb;
+insert into t1 values (10, 20);
+insert into t2 values (10, 20);
+update t1, t2 set t1.b = 150, t2.b = t1.b where t2.a = t1.a and t1.a = 10;
+drop table t1,t2;
#
# Test of multi-table-delete with foreign key constraints
diff --git a/mysql-test/t/innodb_handler.test b/mysql-test/t/innodb_handler.test
index 49178a6b6b7..32c8741577c 100644
--- a/mysql-test/t/innodb_handler.test
+++ b/mysql-test/t/innodb_handler.test
@@ -65,15 +65,15 @@ handler t2 read a=(19) where b="yyy";
handler t2 read first;
handler t2 read next;
-#
-# We alter the table even if it's still in use by to test the Innodb
-# delayed-drop code. This will generate a warning in the master.err log.
-#
-alter table t1 type=innodb;
-handler t2 read next;
--error 1064
handler t2 read last;
-
handler t2 close;
+
+handler t1 open as t2;
+handler t2 read first;
+alter table t1 type=innodb;
+--error 1109
+handler t2 read first;
+
drop table if exists t1;
diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test
index 5f2cf8b5f56..47ea2d06d0a 100644
--- a/mysql-test/t/query_cache.test
+++ b/mysql-test/t/query_cache.test
@@ -388,7 +388,6 @@ select * from mysql.db;
enable_result_log;
show status like "Qcache_queries_in_cache";
-
#
# simple rename test
#
@@ -401,3 +400,14 @@ select * from t1 where id=2;
drop table t2;
-- error 1146
select * from t1 where id=2;
+
+#
+# Load data invalidation test
+#
+
+create table t1 (word char(20) not null);
+select * from t1;
+show status like "Qcache_queries_in_cache";
+load data infile '../../std_data/words.dat' into table t1;
+show status like "Qcache_queries_in_cache";
+drop table t1; \ No newline at end of file
diff --git a/mysql-test/t/rpl000015-slave-master-info.opt b/mysql-test/t/rpl000015.slave-mi
index 28bc753dd56..28bc753dd56 100644
--- a/mysql-test/t/rpl000015-slave-master-info.opt
+++ b/mysql-test/t/rpl000015.slave-mi
diff --git a/mysql-test/t/rpl_rotate_logs-slave-master-info.opt b/mysql-test/t/rpl_rotate_logs.slave-mi
index 80190bf6d29..80190bf6d29 100644
--- a/mysql-test/t/rpl_rotate_logs-slave-master-info.opt
+++ b/mysql-test/t/rpl_rotate_logs.slave-mi
diff --git a/mysys/my_pthread.c b/mysys/my_pthread.c
index 0de7041fae7..7ad4852558e 100644
--- a/mysys/my_pthread.c
+++ b/mysys/my_pthread.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000 MySQL AB
+/* Copyright (C) 2000-2003 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -393,6 +393,7 @@ int pthread_signal(int sig, void (*func)())
#undef pthread_cond_wait
#undef pthread_cond_timedwait
#undef pthread_cond_t
+#undef pthread_attr_getstacksize
/*****************************************************************************
** Patches for AIX and DEC OSF/1 3.2
@@ -465,6 +466,15 @@ int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
}
#endif
+#if defined(HPUX10)
+
+void my_pthread_attr_getstacksize(pthread_attr_t *connection_attrib,
+ size_t *stack_size)
+{
+ *stack_size= pthread_attr_getstacksize(*connection_attrib);
+}
+#endif
+
#ifdef HAVE_POSIX1003_4a_MUTEX
/*
diff --git a/mysys/thr_alarm.c b/mysys/thr_alarm.c
index 6697b9d3360..add5335a7af 100644
--- a/mysys/thr_alarm.c
+++ b/mysys/thr_alarm.c
@@ -402,6 +402,8 @@ void end_thr_alarm(void)
void thr_alarm_kill(pthread_t thread_id)
{
uint i;
+ if (alarm_aborted)
+ return;
pthread_mutex_lock(&LOCK_alarm);
for (i=0 ; i < alarm_queue.elements ; i++)
{
diff --git a/netware/mw/mwasmnlm b/netware/mw/mwasmnlm
new file mode 100644
index 00000000000..c3501112aa5
--- /dev/null
+++ b/netware/mw/mwasmnlm
@@ -0,0 +1,5 @@
+#! /bin/sh
+
+args=" $*"
+
+wine --debugmsg -all -- mwasmnlm $args
diff --git a/netware/mw/mwccnlm b/netware/mw/mwccnlm
new file mode 100644
index 00000000000..9e989485bd9
--- /dev/null
+++ b/netware/mw/mwccnlm
@@ -0,0 +1,7 @@
+#! /bin/sh
+
+# mwccnlm is having a hard time understanding "-I./../include"
+# convert it to "-I../include"
+args=" "`echo $* | sed -e 's/-I.\/../-I../g'`
+
+wine --debugmsg -all -- mwccnlm $args
diff --git a/netware/mw/mwenv b/netware/mw/mwenv
new file mode 100644
index 00000000000..b82dbdc0c7f
--- /dev/null
+++ b/netware/mw/mwenv
@@ -0,0 +1,12 @@
+#! /bin/sh
+
+export MYDEV="F:/mysql"
+
+export MWCNWx86Includes="$MYDEV/libc/include"
+export MWNWx86Libraries="$MYDEV/libc/imports;$MYDEV/mw/lib"
+export MWNWx86LibraryFiles="libcpre.o;libc.imp;netware.imp;mwcrtl.lib;mwcpp.lib"
+
+export WINEPATH="$MYDEV/mw/bin"
+
+export PATH="$PATH:$HOME/mysql/mysql-4.0/netware/mw"
+
diff --git a/netware/mw/mwldnlm b/netware/mw/mwldnlm
new file mode 100644
index 00000000000..7ad2872ccbb
--- /dev/null
+++ b/netware/mw/mwldnlm
@@ -0,0 +1,5 @@
+#! /bin/sh
+
+args=" $*"
+
+wine --debugmsg -all -- mwldnlm $args
diff --git a/netware/mysql_test_run.c b/netware/mysql_test_run.c
index 7392a96cc73..f19cee32e92 100644
--- a/netware/mysql_test_run.c
+++ b/netware/mysql_test_run.c
@@ -760,7 +760,7 @@ void run_test(char *test)
// create files
snprintf(master_opt_file, PATH_MAX, "%s/%s-master.opt", test_dir, test);
snprintf(slave_opt_file, PATH_MAX, "%s/%s-slave.opt", test_dir, test);
- snprintf(slave_master_info_file, PATH_MAX, "%s/%s-slave-master-info.opt", test_dir, test);
+ snprintf(slave_master_info_file, PATH_MAX, "%s/%s.slave-mi", test_dir, test);
snprintf(reject_file, PATH_MAX, "%s/%s%s", result_dir, test, REJECT_SUFFIX);
snprintf(out_file, PATH_MAX, "%s/%s%s", result_dir, test, OUT_SUFFIX);
snprintf(err_file, PATH_MAX, "%s/%s%s", result_dir, test, ERR_SUFFIX);
diff --git a/netware/nwbootstrap b/netware/nwbootstrap
new file mode 100755
index 00000000000..3e4b03de0f5
--- /dev/null
+++ b/netware/nwbootstrap
@@ -0,0 +1,145 @@
+#! /bin/sh
+
+# show executed commands
+# set -x
+
+# stop on errors
+set -e
+
+BD=`pwd`
+
+build=0
+build_debug=0
+skip_linux=0
+
+# parse arguments
+for arg do
+ case "$arg" in
+ --build) build=1 ;;
+ --build-debug) build_debug=1 ;;
+ --skip-linux) skip_linux=1 ;;
+ *) echo "$0: unrecognized option: $arg" ;;
+ esac
+done
+
+# run the auto tools
+autotools()
+{
+ for package in $BD $BD/innobase
+ do
+ echo "cd $package"
+ cd $package
+ rm -f config.cache
+ echo "aclocal"
+ aclocal
+ echo "autoheader"
+ autoheader
+ echo "libtoolize --force"
+ libtoolize --force
+ echo "aclocal"
+ aclocal
+ echo "automake --add-missing --force-missing"
+ automake --add-missing --force-missing
+ echo "autoconf"
+ autoconf
+ done
+
+ cd $BD
+}
+
+# check the source direcotry
+echo "looking for \"$BD/sql/mysqld.cc\"..."
+if test ! -r ./sql/mysqld.cc
+then
+ echo "./netware/nwbootstrap must be started from the top source directory"
+ exit 1
+fi
+
+# clean
+# make -j 2 -k distclean
+rm -f NEW-RPMS/*
+rm -f */.deps/*.P
+
+# make files writeable
+chmod -R u+rw,g+rw .
+
+# skip linux?
+if test $skip_linux -ne 1
+then
+ echo "starting linux build..."
+
+ echo "autotools..."
+ autotools
+
+ echo "configuring for linux..."
+ ./configure --without-docs --without-innodb
+
+ echo "building for linux..."
+ make clean all
+
+ echo "copying required linux binaries..."
+ rm -f */*.linux
+ cp extra/comp_err extra/comp_err.linux
+ cp libmysql/conf_to_src libmysql/conf_to_src.linux
+ cp libmysql/conf_to_src libmysql_r/conf_to_src.linux
+ cp sql/gen_lex_hash sql/gen_lex_hash.linux
+ cp strings/conf_to_src strings/conf_to_src.linux
+
+ echo "cleaning linux build..."
+ make clean distclean
+fi
+
+echo "starting netware build..."
+
+# remove stale Makefile.in.bk files
+rm -rf Makefile.in.bk
+
+# start mw enviornment
+chmod +x ./netware/nwconfigure
+chmod +x ./netware/mw/mwenv
+chmod +x ./netware/mw/mwasmnlm
+chmod +x ./netware/mw/mwccnlm
+chmod +x ./netware/mw/mwldnlm
+
+. ./netware/mw/mwenv
+
+# link nwconfigure
+rm -f ./nwconfigure
+ln ./netware/nwconfigure ./nwconfigure
+
+# save old builds from previous run
+if test -e *.tar.gz
+then
+ rm -f *.tar.gz.old
+ rename .tar.gz .tar.gz.old *.tar.gz
+fi
+
+echo "autotools..."
+autotools
+
+# debug build
+if test $build_debug -eq 1
+then
+ echo "configuring for netware (debug)..."
+ ./nwconfigure --with-debug=full
+
+ echo "building for netware (debug)..."
+ make clean bin-dist
+
+ # mark the debug build
+ rename .tar.gz -debug.tar.gz *.tar.gz
+fi
+
+# release build
+if test $build -eq 1
+then
+ echo "configuring for netware..."
+ ./nwconfigure
+
+ echo "building for netware..."
+ make clean bin-dist
+fi
+
+echo "done"
+
+
diff --git a/netware/nwconfigure b/netware/nwconfigure
new file mode 100644
index 00000000000..aeb68ada5b8
--- /dev/null
+++ b/netware/nwconfigure
@@ -0,0 +1,23 @@
+#! /bin/sh
+CMD="\
+ AR='mwldnlm' \
+ AR_FLAGS='-type library -o' \
+ AS='mwasmnlm' \
+ CC='mwccnlm -gccincludes' \
+ CFLAGS='-dialect c -proc 686 -bool on -relax_pointers -DUSE_OLD_FUNCTIONS' \
+ CXX='mwccnlm -gccincludes' \
+ CXXFLAGS='-dialect c++ -proc 686 -bool on -relax_pointers' \
+ LD='mwldnlm' \
+ LDFLAGS='-entry _LibCPrelude -exit _LibCPostlude -flags pseudopreemption' \
+ RANLIB=: \
+ STRIP=: \
+ ./configure --host=i686-pc-netware $* \
+ --without-docs \
+ --enable-local-infile \
+ --with-extra-charsets=all \
+ --prefix=N:/mysql \
+ "
+#rm -f config.cache config.log config.status
+echo $CMD
+eval $CMD
+
diff --git a/scripts/make_binary_distribution.sh b/scripts/make_binary_distribution.sh
index 1bdf5b86fdf..78eb1343f47 100644
--- a/scripts/make_binary_distribution.sh
+++ b/scripts/make_binary_distribution.sh
@@ -183,7 +183,7 @@ done
$CP mysql-test/include/*.inc $BASE/mysql-test/include
$CP mysql-test/std_data/*.dat mysql-test/std_data/*.001 $BASE/mysql-test/std_data
-$CP mysql-test/t/*test mysql-test/t/*.opt mysql-test/t/*.sh $BASE/mysql-test/t
+$CP mysql-test/t/*test mysql-test/t/*.opt mysql-test/t/*.slave-mi mysql-test/t/*.sh $BASE/mysql-test/t
$CP mysql-test/r/*result mysql-test/r/*.require $BASE/mysql-test/r
if [ $BASE_SYSTEM != "netware" ] ; then
diff --git a/scripts/mysqlhotcopy.sh b/scripts/mysqlhotcopy.sh
index 1a694247461..ec76aa479f3 100644
--- a/scripts/mysqlhotcopy.sh
+++ b/scripts/mysqlhotcopy.sh
@@ -37,7 +37,7 @@ WARNING: THIS PROGRAM IS STILL IN BETA. Comments/patches welcome.
# Documentation continued at end of file
-my $VERSION = "1.17";
+my $VERSION = "1.18";
my $opt_tmpdir = $ENV{TMPDIR} || "/tmp";
@@ -173,6 +173,7 @@ my $dbh = DBI->connect("dbi:mysql:$dsn;mysql_read_default_group=mysqlhotcopy",
# --- check that checkpoint table exists if specified ---
if ( $opt{checkpoint} ) {
+ $opt{checkpoint} = quote_names( $opt{checkpoint} );
eval { $dbh->do( qq{ select time_stamp, src, dest, msg
from $opt{checkpoint} where 1 != 1} );
};
@@ -183,6 +184,8 @@ if ( $opt{checkpoint} ) {
# --- check that log_pos table exists if specified ---
if ( $opt{record_log_pos} ) {
+ $opt{record_log_pos} = quote_names( $opt{record_log_pos} );
+
eval { $dbh->do( qq{ select host, time_stamp, log_file, log_pos, master_host, master_log_file, master_log_pos
from $opt{record_log_pos} where 1 != 1} );
};
@@ -309,7 +312,7 @@ foreach my $rdb ( @db_desc ) {
$rdb->{files} = [ @db_files ];
$rdb->{index} = [ @index_files ];
- my @hc_tables = map { "`$db`.`$_`" } @dbh_tables;
+ my @hc_tables = map { quote_names("$db.$_") } @dbh_tables;
$rdb->{tables} = [ @hc_tables ];
$rdb->{raid_dirs} = [ get_raid_dirs( $rdb->{files} ) ];
@@ -569,7 +572,7 @@ sub copy_files {
my @non_raid = map { "'$_'" } grep { ! m:/\d{2}/[^/]+$: } @$files;
# add files to copy and the destination directory
- safe_system( @cp, @non_raid, "'$target'" );
+ safe_system( @cp, @non_raid, "'$target'" ) if (@non_raid);
foreach my $rd ( @$raid_dirs ) {
my @raid = map { "'$_'" } grep { m:$rd/: } @$files;
@@ -758,6 +761,16 @@ sub get_list_of_tables {
return @dbh_tables;
}
+sub quote_names {
+ my ( $name ) = @_;
+ # given a db.table name, add quotes
+
+ my ($db, $table, @cruft) = split( /\./, $name );
+ die "Invalid db.table name '$name'" if (@cruft || !defined $db || !defined $table );
+
+ return "`$db`.`$table`";
+}
+
__END__
=head1 DESCRIPTION
diff --git a/sql/field.cc b/sql/field.cc
index e6de2dc5224..d4f48cc3ddd 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -4549,7 +4549,7 @@ void Field_geom::set_key_image(char *buff,uint length,CHARSET_INFO *cs)
void Field_geom::sql_type(String &res) const
{
- res.set("geometry", 8, default_charset_info);
+ res.set("geometry", 8, &my_charset_latin1);
}
int Field_blob::key_cmp(const byte *key_ptr, uint max_key_length)
diff --git a/sql/handler.cc b/sql/handler.cc
index dcc732ba25a..af9b2fd4a35 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -689,7 +689,7 @@ void handler::print_error(int error, myf errflag)
{
/* Write the dupplicated key in the error message */
char key[MAX_KEY_LENGTH];
- String str(key,sizeof(key),default_charset_info);
+ String str(key,sizeof(key),system_charset_info);
key_unpack(&str,table,(uint) key_nr);
uint max_length=MYSQL_ERRMSG_SIZE-(uint) strlen(ER(ER_DUP_ENTRY));
if (str.length() >= max_length)
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 3954b53c063..67ff3bb92af 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -105,11 +105,6 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
return 0; // Fatal error if flag is set!
if (arg_count)
{ // Print purify happy
- CHARSET_INFO *charset= 0;
- /*
- Set return character set to first argument if we are returning a
- string.
- */
for (arg=args, arg_end=args+arg_count; arg != arg_end ; arg++)
{
if ((*arg)->fix_fields(thd, tables, arg) ||
@@ -117,20 +112,22 @@ Item_func::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
return 1; /* purecov: inspected */
if ((*arg)->maybe_null)
maybe_null=1;
- if ((*arg)->binary())
- charset= &my_charset_bin;
- else if (!charset && (*arg)->result_type() == STRING_RESULT)
- charset= (*arg)->charset();
+
+ if ((*arg)->result_type() == STRING_RESULT)
+ {
+ /*
+ Set return character set to first argument if we are returning a
+ string.
+ */
+ if (args == arg)
+ set_charset(args[0]->charset());
+ else if ((*arg)->binary() || (charset() != (*arg)->charset()) )
+ set_charset(&my_charset_bin);
+ }
with_sum_func= with_sum_func || (*arg)->with_sum_func;
used_tables_cache|=(*arg)->used_tables();
const_item_cache&= (*arg)->const_item();
}
- /*
- We must set charset here as fix_length_and_dec() may want to change
- charset
- */
- if (charset && result_type() == STRING_RESULT)
- set_charset(charset);
}
fix_length_and_dec();
fixed= 1;
diff --git a/sql/item_sum.cc b/sql/item_sum.cc
index ae0559e2249..ca6f17d486a 100644
--- a/sql/item_sum.cc
+++ b/sql/item_sum.cc
@@ -188,12 +188,13 @@ Item_sum_hybrid::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
max_length=float_length(decimals);
else
{
- str_cmp_function= binary() ? stringcmp : sortcmp;
+ str_cmp_function= item->binary() ? stringcmp : sortcmp;
max_length=item->max_length;
}
decimals=item->decimals;
maybe_null=item->maybe_null;
unsigned_flag=item->unsigned_flag;
+ set_charset(item->charset());
result_field=0;
null_value=1;
fix_length_and_dec();
diff --git a/sql/lex.h b/sql/lex.h
index 287439a9fe7..82d8ed6f82c 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -93,6 +93,7 @@ static SYMBOL symbols[] = {
{ "CLIENT", SYM(CLIENT_SYM),0,0},
{ "CLOSE", SYM(CLOSE_SYM),0,0},
{ "COLLATE", SYM(COLLATE_SYM),0,0},
+ { "COLLATION", SYM(COLLATION_SYM),0,0},
{ "COLUMN", SYM(COLUMN_SYM),0,0},
{ "COLUMNS", SYM(COLUMNS),0,0},
{ "COMMENT", SYM(COMMENT_SYM),0,0},
@@ -267,6 +268,7 @@ static SYMBOL symbols[] = {
{ "MULTIPOLYGON", SYM(MULTIPOLYGON),0,0},
{ "MRG_MYISAM", SYM(MERGE_SYM),0,0},
{ "MYISAM", SYM(MYISAM_SYM),0,0},
+ { "NAMES", SYM(NAMES_SYM),0,0},
{ "NATURAL", SYM(NATURAL),0,0},
{ "NATIONAL", SYM(NATIONAL_SYM),0,0},
{ "NEXT", SYM(NEXT_SYM),0,0},
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 10f51598c0a..982bf897c43 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -267,6 +267,9 @@ bool opt_large_files= sizeof(my_off_t) > 4;
#define GET_HA_ROWS GET_ULONG
#endif
+#ifdef HAVE_LIBWRAP
+char *libwrapName= NULL;
+#endif
/*
Variables to store startup options
@@ -1883,14 +1886,13 @@ struct utsname
char nodename[FN_REFLEN];
};
+
int uname(struct utsname *a)
{
return -1;
}
-#endif
-#ifdef __WIN__
extern "C" pthread_handler_decl(handle_shutdown,arg)
{
MSG msg;
@@ -1906,7 +1908,7 @@ extern "C" pthread_handler_decl(handle_shutdown,arg)
return 0;
}
-int __stdcall handle_kill(ulong ctrl_type)
+int STDCALL handle_kill(ulong ctrl_type)
{
if (ctrl_type == CTRL_CLOSE_EVENT ||
ctrl_type == CTRL_SHUTDOWN_EVENT)
@@ -1948,10 +1950,6 @@ extern "C" pthread_handler_decl(handle_shutdown,arg)
const char *load_default_groups[]= { "mysqld","server",0 };
-#ifdef HAVE_LIBWRAP
-char *libwrapName=NULL;
-#endif
-
bool open_log(MYSQL_LOG *log, const char *hostname,
const char *opt_name, const char *extension,
const char *index_file_name,
diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc
index d8c61fa1a1d..03dcfbeda28 100644
--- a/sql/opt_sum.cc
+++ b/sql/opt_sum.cc
@@ -70,7 +70,8 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
if (tl->table->map & where_tables)
return 0;
}
- used_tables|= tl->table->map;
+ else
+ used_tables|= tl->table->map;
}
/*
diff --git a/sql/protocol.cc b/sql/protocol.cc
index 9a7a913f874..6bd5c4534e9 100644
--- a/sql/protocol.cc
+++ b/sql/protocol.cc
@@ -508,7 +508,7 @@ bool Protocol::send_fields(List<Item> *list, uint flag)
List_iterator_fast<Item> it(*list);
Item *item;
char buff[80];
- String tmp((char*) buff,sizeof(buff),default_charset_info);
+ String tmp((char*) buff,sizeof(buff),&my_charset_bin);
Protocol_simple prot(thd);
String *packet= prot.storage_packet();
DBUG_ENTER("send_fields");
@@ -655,7 +655,7 @@ bool Protocol::store(const char *from)
bool Protocol::store(I_List<i_string>* str_list)
{
char buf[256];
- String tmp(buf, sizeof(buf), default_charset_info);
+ String tmp(buf, sizeof(buf), &my_charset_bin);
uint32 len;
I_List_iterator<i_string> it(*str_list);
i_string* s;
@@ -794,7 +794,7 @@ bool Protocol_simple::store(Field *field)
field_pos++;
#endif
char buff[MAX_FIELD_WIDTH];
- String tmp(buff,sizeof(buff),default_charset_info);
+ String tmp(buff,sizeof(buff), &my_charset_bin);
field->val_str(&tmp,&tmp);
if (convert)
return convert_str(tmp.ptr(), tmp.length());
diff --git a/sql/set_var.cc b/sql/set_var.cc
index 0449e048a2f..1f31633980a 100644
--- a/sql/set_var.cc
+++ b/sql/set_var.cc
@@ -104,6 +104,7 @@ sys_var_str sys_charset("character_set",
sys_check_charset,
sys_update_charset,
sys_set_default_charset);
+sys_var_thd_client_charset sys_client_charset("client_character_set");
sys_var_thd_conv_charset sys_convert_charset("convert_character_set");
sys_var_bool_ptr sys_concurrent_insert("concurrent_insert",
&myisam_concurrent_insert);
@@ -331,6 +332,7 @@ sys_var *sys_variables[]=
&sys_binlog_cache_size,
&sys_buffer_results,
&sys_bulk_insert_buff_size,
+ &sys_client_charset,
&sys_concurrent_insert,
&sys_connect_timeout,
&sys_convert_charset,
@@ -437,6 +439,7 @@ struct show_var_st init_vars[]= {
{sys_bulk_insert_buff_size.name,(char*) &sys_bulk_insert_buff_size,SHOW_SYS},
{sys_charset.name, (char*) &sys_charset, SHOW_SYS},
{"character_sets", (char*) &charsets_list, SHOW_CHAR_PTR},
+ {sys_client_charset.name, (char*) &sys_client_charset, SHOW_SYS},
{sys_concurrent_insert.name,(char*) &sys_concurrent_insert, SHOW_SYS},
{sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS},
{sys_convert_charset.name, (char*) &sys_convert_charset, SHOW_SYS},
@@ -1074,7 +1077,7 @@ byte *sys_var_thd_sql_mode::value_ptr(THD *thd, enum_var_type type)
{
ulong val;
char buff[256];
- String tmp(buff, sizeof(buff), default_charset_info);
+ String tmp(buff, sizeof(buff), &my_charset_latin1);
my_bool found= 0;
tmp.length(0);
@@ -1174,6 +1177,55 @@ byte *sys_var_thd_conv_charset::value_ptr(THD *thd, enum_var_type type)
}
+bool sys_var_thd_client_charset::check(THD *thd, set_var *var)
+{
+ CHARSET_INFO *tmp;
+ char buff[80];
+ String str(buff,sizeof(buff), system_charset_info), *res;
+
+ if (!var->value) // Default value
+ {
+ var->save_result.charset= (var->type != OPT_GLOBAL ?
+ global_system_variables.thd_charset
+ : default_charset_info);
+ return 0;
+ }
+
+ if (!(res=var->value->val_str(&str)))
+ res= &empty_string;
+
+ if (!(tmp=get_charset_by_csname(res->c_ptr(),MYF(0))))
+ {
+ my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), res->c_ptr());
+ return 1;
+ }
+ var->save_result.charset= tmp; // Save for update
+ return 0;
+}
+
+bool sys_var_thd_client_charset::update(THD *thd, set_var *var)
+{
+ if (var->type == OPT_GLOBAL)
+ global_system_variables.thd_charset= var->save_result.charset;
+ else
+ {
+ thd->variables.thd_charset= var->save_result.charset;
+ thd->protocol_simple.init(thd);
+ thd->protocol_prep.init(thd);
+ }
+ return 0;
+}
+
+
+byte *sys_var_thd_client_charset::value_ptr(THD *thd, enum_var_type type)
+{
+ CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
+ global_system_variables.thd_charset :
+ thd->variables.thd_charset);
+ return cs ? (byte*) cs->csname : (byte*) "";
+}
+
+
bool sys_var_timestamp::update(THD *thd, set_var *var)
{
diff --git a/sql/set_var.h b/sql/set_var.h
index 3b4ec9d5bfe..d80285d0e40 100644
--- a/sql/set_var.h
+++ b/sql/set_var.h
@@ -423,6 +423,22 @@ public:
bool check_default(enum_var_type type) { return 0; }
};
+class sys_var_thd_client_charset :public sys_var_thd
+{
+public:
+ sys_var_thd_client_charset(const char *name_arg) :sys_var_thd(name_arg)
+ {}
+ bool check(THD *thd, set_var *var);
+ bool update(THD *thd, set_var *var);
+ SHOW_TYPE type() { return SHOW_CHAR; }
+ byte *value_ptr(THD *thd, enum_var_type type);
+ bool check_update_type(Item_result type)
+ {
+ return type != STRING_RESULT; /* Only accept strings */
+ }
+ bool check_default(enum_var_type type) { return 0; }
+};
+
/* Variable that you can only read from */
@@ -473,6 +489,7 @@ public:
enum_var_type type;
union
{
+ CHARSET_INFO *charset;
CONVERT *convert;
ulong ulong_value;
} save_result;
diff --git a/sql/share/czech/errmsg.txt b/sql/share/czech/errmsg.txt
index 6c3196bfeba..1ab299495b9 100644
--- a/sql/share/czech/errmsg.txt
+++ b/sql/share/czech/errmsg.txt
@@ -1,7 +1,7 @@
v/*
- Modifikoval Petr -B©najdr, snajdr@pvt.net, snajdr@cpress.cz v.0.01 -A
+ Modifikoval Petr -B©najdr, snajdr@pvt.net, snajdr@cpress.cz v.0.01
ISO LATIN-8852-2
- Dal-B¹í verze Jan Pazdziora, adelton@fi.muni.cz-A
+ Dal-B¹í verze Jan Pazdziora, adelton@fi.muni.cz
Tue Nov 18 17:53:55 MET 1997
Tue Dec 2 19:08:54 MET 1997 podle 3.21.15c
Thu May 7 17:40:49 MET DST 1998 podle 3.21.29
@@ -147,7 +147,7 @@ v/*
"Nalezen-Bých øádkù: %ld Zmìnìno: %ld Varování: %ld",
"Nemohu vytvo-Bøit nový thread (errno %d). Pokud je je¹tì nìjaká volná pamì», podívejte se do manuálu na èást o chybách specifických pro jednotlivé operaèní systémy",
"Po-Bèet sloupcù neodpovídá poètu hodnot na øádku %ld",
-"Nemohu znovuotev-Bøít tabulku: '%-.64s',
+"Nemohu znovuotev-Bøít tabulku: '%-.64s",
"Neplatn-Bé u¾ití hodnoty NULL",
"Regul-Bární výraz vrátil chybu '%-.64s'",
"Pokud nen-Bí ¾ádná GROUP BY klauzule, není dovoleno souèasné pou¾ití GROUP polo¾ek (MIN(),MAX(),COUNT()...) s ne GROUP polo¾kami",
@@ -207,7 +207,7 @@ v/*
"Tabulka '%-.64s' je ozna-Bèena jako poru¹ená a mìla by být opravena",
"Tabulka '%-.64s' je ozna-Bèena jako poru¹ená a poslední (automatická?) oprava se nezdaøila",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/danish/errmsg.txt b/sql/share/danish/errmsg.txt
index dcc016511dd..c0a36a38935 100644
--- a/sql/share/danish/errmsg.txt
+++ b/sql/share/danish/errmsg.txt
@@ -108,7 +108,7 @@
"BLOB feltet '%-.64s' kan ikke have en standard værdi",
"Ugyldigt database navn '%-.64s'",
"Ugyldigt tabel navn '%-.64s'",
-"SELECT ville undersøge for mange poster og ville sandsynligvis tage meget lang tid. Undersøg WHERE delen og brug SET OPTION SQL_BIG_SELECTS=1 hvis udtrykket er korrekt"
+"SELECT ville undersøge for mange poster og ville sandsynligvis tage meget lang tid. Undersøg WHERE delen og brug SET OPTION SQL_BIG_SELECTS=1 hvis udtrykket er korrekt",
"Ukendt fejl",
"Ukendt procedure %s",
"Forkert antal parametre til proceduren %s",
@@ -141,7 +141,7 @@
"Poster fundet: %ld Ændret: %ld Advarsler: %ld",
"Kan ikke danne en ny tråd (fejl nr. %d). Hvis computeren ikke er løbet tør for hukommelse, kan du se i brugervejledningen for en mulig operativ-system - afhængig fejl",
"Kolonne antallet stemmer ikke overens med antallet af værdier i post %ld",
-"Kan ikke genåbne tabel '%-.64s',
+"Kan ikke genåbne tabel '%-.64s",
"Forkert brug af nulværdi (NULL)",
"Fik fejl '%-.64s' fra regexp",
"Sammenblanding af GROUP kolonner (MIN(),MAX(),COUNT()...) uden GROUP kolonner er ikke tilladt, hvis der ikke er noget GROUP BY prædikat",
@@ -162,7 +162,7 @@
"Fik fejlmeddelelse fra fcntl()",
"Modtog ikke datapakker i korrekt rækkefølge",
"Kunne ikke dekomprimere kommunikations-pakke (communication packet)",
-"Fik fejlmeddelelse ved læsning af kommunikations-pakker (communication packets)"
+"Fik fejlmeddelelse ved læsning af kommunikations-pakker (communication packets)",
"Timeout-fejl ved læsning af kommunukations-pakker (communication packets)",
"Fik fejlmeddelelse ved skrivning af kommunukations-pakker (communication packets)",
"Timeout-fejl ved skrivning af kommunukations-pakker (communication packets)",
@@ -201,7 +201,7 @@
"Tabellen '%-.64s' er markeret med fejl og bør repareres",
"Tabellen '%-.64s' er markeret med fejl og sidste (automatiske?) REPAIR fejlede",
"Advarsel: Visse data i tabeller der ikke understøtter transaktioner kunne ikke tilbagestilles",
-"Fler-udtryks transaktion krævede mere plads en 'max_binlog_cache_size' bytes. Forhøj værdien af denne variabel og prøv igen',
+"Fler-udtryks transaktion krævede mere plads en 'max_binlog_cache_size' bytes. Forhøj værdien af denne variabel og prøv igen",
"Denne handling kunne ikke udføres med kørende slave, brug først kommandoen STOP SLAVE",
"Denne handling kræver en kørende slave. Konfigurer en slave og brug kommandoen START SLAVE",
"Denne server er ikke konfigureret som slave. Ret in config-filen eller brug kommandoen CHANGE MASTER TO",
diff --git a/sql/share/dutch/errmsg.txt b/sql/share/dutch/errmsg.txt
index 6091616fc4a..677762403f6 100644
--- a/sql/share/dutch/errmsg.txt
+++ b/sql/share/dutch/errmsg.txt
@@ -149,7 +149,7 @@
"Passende rijen: %ld Gewijzigd: %ld Waarschuwingen: %ld",
"Kan geen nieuwe thread aanmaken (Errcode: %d). Indien er geen tekort aan geheugen is kunt u de handleiding consulteren over een mogelijke OS afhankelijke fout",
"Kolom aantal komt niet overeen met waarde aantal in rij %ld",
-"Kan tabel niet opnieuw openen: '%-.64s',
+"Kan tabel niet opnieuw openen: '%-.64s",
"Foutief gebruik van de NULL waarde",
"Fout '%-.64s' ontvangen van regexp",
"Het mixen van GROUP kolommen (MIN(),MAX(),COUNT()...) met no-GROUP kolommen is foutief indien er geen GROUP BY clausule is",
@@ -170,7 +170,7 @@
"Kreeg fout van fcntl()",
"Pakketten in verkeerde volgorde ontvangen",
"Communicatiepakket kon niet worden gedecomprimeerd",
-"Fout bij het lezen van communicatiepakketten"
+"Fout bij het lezen van communicatiepakketten",
"Timeout bij het lezen van communicatiepakketten",
"Fout bij het schrijven van communicatiepakketten",
"Timeout bij het schrijven van communicatiepakketten",
@@ -209,7 +209,7 @@
"Tabel '%-.64s' staat als gecrashed gemarkeerd en dient te worden gerepareerd",
"Tabel '%-.64s' staat als gecrashed gemarkeerd en de laatste (automatische?) reparatie poging mislukte",
"Waarschuwing: Roll back mislukt voor sommige buiten transacties gewijzigde tabellen",
-"Multi-statement transactie vereist meer dan 'max_binlog_cache_size' bytes opslag. Verhoog deze mysqld variabele en probeer opnieuw',
+"Multi-statement transactie vereist meer dan 'max_binlog_cache_size' bytes opslag. Verhoog deze mysqld variabele en probeer opnieuw",
"Deze operatie kan niet worden uitgevoerd met een actieve slave, doe eerst STOP SLAVE",
"Deze operatie vereist een actieve slave, configureer slave en doe dan START SLAVE",
"De server is niet geconfigureerd als slave, fix in configuratie bestand of met CHANGE MASTER TO",
diff --git a/sql/share/english/errmsg.txt b/sql/share/english/errmsg.txt
index 954b7cd2fb3..84d100cfae9 100644
--- a/sql/share/english/errmsg.txt
+++ b/sql/share/english/errmsg.txt
@@ -166,7 +166,7 @@
"Result string is longer than max_allowed_packet",
"The used table type doesn't support BLOB/TEXT columns",
"The used table type doesn't support AUTO_INCREMENT columns",
-"INSERT DELAYED can't be used with table '%-.64s', because it is locked with LOCK TABLES",
+"INSERT DELAYED can't be used with table '%-.64s' because it is locked with LOCK TABLES",
"Incorrect column name '%-.100s'",
"The used table handler can't index column '%-.64s'",
"All tables in the MERGE table are not identically defined",
@@ -198,7 +198,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/french/errmsg.txt b/sql/share/french/errmsg.txt
index d7bb19c2876..518af36ea53 100644
--- a/sql/share/french/errmsg.txt
+++ b/sql/share/french/errmsg.txt
@@ -122,7 +122,7 @@
"Ligne trop grande. Le taille maximale d'une ligne, sauf les BLOBs, est %d. Changez le type de quelques colonnes en BLOB",
"Débordement de la pile des tâches (Thread stack). Utilisées: %ld pour une pile de %ld. Essayez 'mysqld -O thread_stack=#' pour indiquer une plus grande valeur",
"Dépendance croisée dans une clause OUTER JOIN. Vérifiez la condition ON",
-"La colonne '%-.32s' fait partie d'un index UNIQUE ou INDEX mais n'est pas définie comme NOT NULL"
+"La colonne '%-.32s' fait partie d'un index UNIQUE ou INDEX mais n'est pas définie comme NOT NULL",
"Imposible de charger la fonction '%-.64s'",
"Impossible d'initialiser la fonction '%-.64s'; %-.80s",
"Chemin interdit pour les bibliothèques partagées",
@@ -138,7 +138,7 @@
"Enregistrements correspondants: %ld Modifiés: %ld Warnings: %ld",
"Impossible de créer une nouvelle tâche (errno %d). S'il reste de la mémoire libre, consultez le manual pour trouver un éventuel bug dépendant de l'OS",
"Column count doesn't match value count at row %ld",
-"Impossible de réouvrir la table: '%-.64s',
+"Impossible de réouvrir la table: '%-.64s",
"Utilisation incorrecte de la valeur NULL",
"Erreur '%-.64s' provenant de regexp",
"Mélanger les colonnes GROUP (MIN(),MAX(),COUNT()...) avec des colonnes normales est interdit s'il n'y a pas de clause GROUP BY",
@@ -159,7 +159,7 @@
"Erreur reçue de fcntl() ",
"Paquets reçus dans le désordre",
"Impossible de décompresser le paquet reçu",
-"Erreur de lecture des paquets reçus"
+"Erreur de lecture des paquets reçus",
"Timeout en lecture des paquets reçus",
"Erreur d'écriture des paquets envoyés",
"Timeout d'écriture des paquets envoyés",
@@ -198,7 +198,7 @@
"La table '%-.64s' est marquée 'crashed' et devrait être réparée",
"La table '%-.64s' est marquée 'crashed' et le dernier 'repair' a échoué",
"Attention: certaines tables ne supportant pas les transactions ont été changées et elles ne pourront pas être restituées",
-"Cette transaction à commandes multiples nécessite plus de 'max_binlog_cache_size' octets de stockage, augmentez cette variable de mysqld et réessayez',
+"Cette transaction à commandes multiples nécessite plus de 'max_binlog_cache_size' octets de stockage, augmentez cette variable de mysqld et réessayez",
"Cette opération ne peut être réalisée avec un esclave actif, faites STOP SLAVE d'abord",
"Cette opération nécessite un esclave actif, configurez les esclaves et faites START SLAVE",
"Le server n'est pas configuré comme un esclave, changez le fichier de configuration ou utilisez CHANGE MASTER TO",
diff --git a/sql/share/german/errmsg.txt b/sql/share/german/errmsg.txt
index 765fbd875e2..e4ff723e01d 100644
--- a/sql/share/german/errmsg.txt
+++ b/sql/share/german/errmsg.txt
@@ -45,7 +45,7 @@
"Kann Datensatz nicht finden.",
"Falsche Information in Datei: '%-.64s'",
"Falsche Schlüssel-Datei für Tabelle '%-.64s'. Versuche zu reparieren!",
-"Alte Schlüssel-Datei für Tabelle '%-.64s'. Repariere!
+"Alte Schlüssel-Datei für Tabelle '%-.64s'. Repariere!",
"'%-.64s' ist nur lesbar.",
"Kein Speicher vorhanden (benötigt %d bytes). Server neu starten.",
"Kein Speicher zum Sortieren. sort_buffer_size sollte erhöht werden.",
@@ -168,7 +168,7 @@
"Fehler von fcntl()",
"Empfangenes Paket ist nicht in Reihenfolge",
"Kommunikationspaket läßt sich nicht entpacken",
-"Fehler beim Lesen eines Kommunikationspakets"
+"Fehler beim Lesen eines Kommunikationspakets",
"Zeitüberschreitung beim Lesen eines Kommunikationspakets.",
"Fehler beim Schreiben eines Kommunikationspakets.",
"Zeitüberschreitung beim Schreiben eines Kommunikationspakets.",
@@ -207,7 +207,7 @@
"Tabelle '%-.64s' ist als defekt makiert und sollte repariert werden",
"Tabelle '%-.64s' ist als defekt makiert und der letzte (automatische) Reparaturversuch schlug fehl.",
"Warnung: Das Rollback konnte bei einigen Tabellen, die nicht mittels Transaktionen geändert wurden, nicht ausgeführt werden.",
-"Multi-Statement Transaktionen benötigen mehr als 'max_binlog_cache_size' Bytes An Speicher. Diese mysqld-Variable vergrössern und erneut versuchen.',
+"Multi-Statement Transaktionen benötigen mehr als 'max_binlog_cache_size' Bytes An Speicher. Diese mysqld-Variable vergrössern und erneut versuchen.",
"Diese Operation kann nicht bei einem aktiven Slave durchgeführt werden. Das Kommand STOP SLAVE muss zuerst ausgeführt werden.",
"Diese Operation benötigt einen aktiven Slave. Slave konfigurieren und mittels START SLAVE aktivieren.",
"Der Server ist nicht als Slave konfigiriert. Im Konfigurations-File oder mittel CHANGE MASTER TO beheben.",
@@ -225,7 +225,7 @@
"Falsche Tabellendefinition: Sämtliche MERGE-Tabellen müssen in derselben Datenbank sein.",
"Beim Versuch einen Lock anzufordern ist ein Deadlock aufgetreten. Es wird versucht die Transaktion erneut zu starten.",
"Der verwendete Tabellentyp unterstützt keinen FULLTEXT-Index.",
-"Foreign_Key Beschränkung konnte nicht hinzugefügt werden."
+"Foreign_Key Beschränkung konnte nicht hinzugefügt werden.",
"Hinzufügen eines Kind-Datensatzes schlug aufgrund einer Foreign-Key Beschränkung fehl.",
"Löschen eines Eltern-Datensatzes schlug aufgrund einer Foreign-Key Beschränkung fehl.",
"Datensatz kann aufgrund einer Foreign-Key Beschränkung nicht gelöscht werden.",
@@ -259,5 +259,5 @@
"Referenz '%-.64s' wird nicht unterstützt (%s)",
"Für jede abgeleitete Tabelle muss ein eigener Alias angegeben werden.",
"Select %u wurde während der Optimierung reduziert.",
-"Tabelle '%-.64s', die in einem der SELECT-Befehle verwendet wurde kann nicht in %-.32s verwendet werden."
-"Client does not support authentication protocol requested by server. Consider upgrading MySQL client" \ No newline at end of file
+"Tabelle '%-.64s', die in einem der SELECT-Befehle verwendet wurde kann nicht in %-.32s verwendet werden",
+"Client does not support authentication protocol requested by server. Consider upgrading MySQL client",
diff --git a/sql/share/greek/errmsg.txt b/sql/share/greek/errmsg.txt
index 8831d4e47b9..9dd3d0a254b 100644
--- a/sql/share/greek/errmsg.txt
+++ b/sql/share/greek/errmsg.txt
@@ -159,7 +159,7 @@
"Got an error from fcntl()",
"Got packets out of order",
"Couldn't uncompress communication packet",
-"Got an error reading communication packets"
+"Got an error reading communication packets",
"Got timeout reading communication packets",
"Got an error writing communication packets",
"Got timeout writing communication packets",
@@ -198,7 +198,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/hungarian/errmsg.txt b/sql/share/hungarian/errmsg.txt
index 8d6c321d316..7fec6ddb040 100644
--- a/sql/share/hungarian/errmsg.txt
+++ b/sql/share/hungarian/errmsg.txt
@@ -140,7 +140,7 @@
"Megegyezo sorok szama: %ld Valtozott: %ld Warnings: %ld",
"Uj thread letrehozasa nem lehetseges (Hibakod: %d). Amenyiben van meg szabad memoria, olvassa el a kezikonyv operacios rendszerfuggo hibalehetosegekrol szolo reszet",
"Az oszlopban talalhato ertek nem egyezik meg a %ld sorban szamitott ertekkel",
-"Nem lehet ujra-megnyitni a tablat: '%-.64s',
+"Nem lehet ujra-megnyitni a tablat: '%-.64s",
"A NULL ervenytelen hasznalata",
"'%-.64s' hiba a regularis kifejezes hasznalata soran (regexp)",
"A GROUP mezok (MIN(),MAX(),COUNT()...) kevert hasznalata nem lehetseges GROUP BY hivatkozas nelkul",
@@ -161,7 +161,7 @@
"Hiba a fcntl() fuggvenyben",
"Helytelen sorrendben erkezett adatcsomagok",
"A kommunikacios adatcsomagok nem tomorithetok ki",
-"HIba a kommunikacios adatcsomagok olvasasa soran"
+"HIba a kommunikacios adatcsomagok olvasasa soran",
"Idotullepes a kommunikacios adatcsomagok olvasasa soran",
"Hiba a kommunikacios csomagok irasa soran",
"Idotullepes a kommunikacios csomagok irasa soran",
@@ -200,7 +200,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/italian/errmsg.txt b/sql/share/italian/errmsg.txt
index 451ad3e058b..3687fde0591 100644
--- a/sql/share/italian/errmsg.txt
+++ b/sql/share/italian/errmsg.txt
@@ -29,7 +29,7 @@
"Errore durante la rinominazione da '%-.64s' a '%-.64s' (errno: %d)",
"Errore durante la scrittura del file '%-.64s' (errno: %d)",
"'%-.64s' e` soggetto a lock contro i cambiamenti",
-"Operazione di ordinamento abbandonata" ,
+"Operazione di ordinamento abbandonata",
"La view '%-.64s' non esiste per '%-.64s'",
"Rilevato l'errore %d dal gestore delle tabelle",
"Il gestore delle tabelle per '%-.64s' non ha questa opzione",
@@ -84,7 +84,7 @@
"%s: Forzata la chiusura del thread %ld utente: '%-.64s'\n",
"Impossibile creare il socket IP",
"La tabella '%-.64s' non ha nessun indice come quello specificatato dalla CREATE INDEX. Ricrea la tabella",
-"L'argomento 'Field separator' non e` quello atteso. Controlla il manuale","
+"L'argomento 'Field separator' non e` quello atteso. Controlla il manuale",
"Non possono essere usate righe a lunghezza fissa con i BLOB. Usa 'FIELDS TERMINATED BY'.",
"Il file '%-.64s' deve essere nella directory del database e deve essere leggibile da tutti",
"Il file '%-.64s' esiste gia`",
@@ -198,7 +198,7 @@
"La tabella '%-.64s' e` segnalata come corrotta e deve essere riparata",
"La tabella '%-.64s' e` segnalata come corrotta e l'ultima ricostruzione (automatica?) e` fallita",
"Attenzione: Alcune delle modifiche alle tabelle non transazionali non possono essere ripristinate (roll back impossibile)",
-"La transazione a comandi multipli (multi-statement) ha richiesto piu` di 'max_binlog_cache_size' bytes di disco: aumentare questa variabile di mysqld e riprovare',
+"La transazione a comandi multipli (multi-statement) ha richiesto piu` di 'max_binlog_cache_size' bytes di disco: aumentare questa variabile di mysqld e riprovare",
"Questa operazione non puo' essere eseguita con un database 'slave' che gira, lanciare prima STOP SLAVE",
"Questa operaione richiede un database 'slave', configurarlo ed eseguire START SLAVE",
"Il server non e' configurato come 'slave', correggere il file di configurazione cambiando CHANGE MASTER TO",
diff --git a/sql/share/japanese/errmsg.txt b/sql/share/japanese/errmsg.txt
index 70ab2d6d42d..612af3e1069 100644
--- a/sql/share/japanese/errmsg.txt
+++ b/sql/share/japanese/errmsg.txt
@@ -161,7 +161,7 @@
"Got an error from fcntl()",
"Got packets out of order",
"Couldn't uncompress communication packet",
-"Got an error reading communication packets"
+"Got an error reading communication packets",
"Got timeout reading communication packets",
"Got an error writing communication packets",
"Got timeout writing communication packets",
@@ -200,7 +200,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/korean/errmsg.txt b/sql/share/korean/errmsg.txt
index c18c3ed3873..107dcbdbe07 100644
--- a/sql/share/korean/errmsg.txt
+++ b/sql/share/korean/errmsg.txt
@@ -138,7 +138,7 @@
"ÀÏÄ¡ÇÏ´Â Rows : %ld°³ º¯°æµÊ: %ld°³ °æ°í: %ld°³",
"»õ·Î¿î ¾²·¹µå¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù.(¿¡·¯¹øÈ£ %d). ¸¸¾à ¿©À¯¸Þ¸ð¸®°¡ ÀÖ´Ù¸é OS-dependent¹ö±× ÀÇ ¸Þ´º¾ó ºÎºÐÀ» ã¾Æº¸½Ã¿À.",
"Row %ld¿¡¼­ Ä®·³ Ä«¿îÆ®¿Í value Ä«¿îÅÍ¿Í ÀÏÄ¡ÇÏÁö ¾Ê½À´Ï´Ù.",
-"Å×À̺íÀ» ´Ù½Ã ¿­¼ö ¾ø±º¿ä: '%-.64s',
+"Å×À̺íÀ» ´Ù½Ã ¿­¼ö ¾ø±º¿ä: '%-.64s",
"NULL °ªÀ» À߸ø »ç¿ëÇϼ̱º¿ä...",
"regexp¿¡¼­ '%-.64s'°¡ ³µ½À´Ï´Ù.",
"Mixing of GROUP Ä®·³s (MIN(),MAX(),COUNT()...) with no GROUP Ä®·³s is illegal if there is no GROUP BY clause",
@@ -159,7 +159,7 @@
"fcntl() ÇÔ¼ö·ÎºÎÅÍ ¿¡·¯°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.",
"¼ø¼­°¡ ¸ÂÁö¾Ê´Â ÆÐŶÀ» ¹Þ¾Ò½À´Ï´Ù.",
"Åë½Å ÆÐŶÀÇ ¾ÐÃàÇØÁ¦¸¦ ÇÒ ¼ö ¾ø¾ú½À´Ï´Ù.",
-"Åë½Å ÆÐŶÀ» Àд Áß ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù."
+"Åë½Å ÆÐŶÀ» Àд Áß ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.",
"Åë½Å ÆÐŶÀ» Àд Áß timeoutÀÌ ¹ß»ýÇÏ¿´½À´Ï´Ù.",
"Åë½Å ÆÐŶÀ» ±â·ÏÇÏ´Â Áß ¿À·ù°¡ ¹ß»ýÇÏ¿´½À´Ï´Ù.",
"Åë½Å ÆÐÆÂÀ» ±â·ÏÇÏ´Â Áß timeoutÀÌ ¹ß»ýÇÏ¿´½À´Ï´Ù.",
@@ -198,7 +198,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/norwegian-ny/errmsg.txt b/sql/share/norwegian-ny/errmsg.txt
index 9cd99613f52..9c9e33edca9 100644
--- a/sql/share/norwegian-ny/errmsg.txt
+++ b/sql/share/norwegian-ny/errmsg.txt
@@ -107,7 +107,7 @@
"Blob feltet '%-.64s' kan ikkje ha ein standard verdi",
"Ugyldig database namn '%-.64s'",
"Ugyldig tabell namn '%-.64s'",
-"SELECT ville undersøkje for mange postar og ville sannsynligvis ta veldig lang tid. Undersøk WHERE klausulen og bruk SET OPTION SQL_BIG_SELECTS=1 om SELECTen er korrekt"
+"SELECT ville undersøkje for mange postar og ville sannsynligvis ta veldig lang tid. Undersøk WHERE klausulen og bruk SET OPTION SQL_BIG_SELECTS=1 om SELECTen er korrekt",
"Ukjend feil",
"Ukjend prosedyre %s",
"Feil parameter tal til prosedyra %s",
@@ -140,7 +140,7 @@
"Rows matched: %ld Changed: %ld Warnings: %ld",
"Can't create a new thread (errno %d). If you are not out of available memory you can consult the manual for any possible OS dependent bug",
"Column count doesn't match value count at row %ld",
-"Can't reopen table: '%-.64s',
+"Can't reopen table: '%-.64s",
"Invalid use of NULL value",
"Got error '%-.64s' from regexp",
"Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause",
@@ -161,7 +161,7 @@
"Got an error from fcntl()",
"Got packets out of order",
"Couldn't uncompress communication packet",
-"Got an error reading communication packets"
+"Got an error reading communication packets",
"Got timeout reading communication packets",
"Got an error writing communication packets",
"Got timeout writing communication packets",
@@ -200,7 +200,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/norwegian/errmsg.txt b/sql/share/norwegian/errmsg.txt
index 32fe6c30b34..805d54c422a 100644
--- a/sql/share/norwegian/errmsg.txt
+++ b/sql/share/norwegian/errmsg.txt
@@ -107,7 +107,7 @@
"Blob feltet '%-.64s' kan ikke ha en standard verdi",
"Ugyldig database navn '%-.64s'",
"Ugyldig tabell navn '%-.64s'",
-"SELECT ville undersøke for mange poster og ville sannsynligvis ta veldig lang tid. Undersøk WHERE klausulen og bruk SET OPTION SQL_BIG_SELECTS=1 om SELECTen er korrekt"
+"SELECT ville undersøke for mange poster og ville sannsynligvis ta veldig lang tid. Undersøk WHERE klausulen og bruk SET OPTION SQL_BIG_SELECTS=1 om SELECTen er korrekt",
"Ukjent feil",
"Ukjent prosedyre %s",
"Feil parameter antall til prosedyren %s",
@@ -140,7 +140,7 @@
"Rows matched: %ld Changed: %ld Warnings: %ld",
"Can't create a new thread (errno %d). If you are not out of available memory you can consult the manual for any possible OS dependent bug",
"Column count doesn't match value count at row %ld",
-"Can't reopen table: '%-.64s',
+"Can't reopen table: '%-.64s",
"Invalid use of NULL value",
"Got error '%-.64s' from regexp",
"Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause",
@@ -161,7 +161,7 @@
"Got an error from fcntl()",
"Got packets out of order",
"Couldn't uncompress communication packet",
-"Got an error reading communication packets"
+"Got an error reading communication packets",
"Got timeout reading communication packets",
"Got an error writing communication packets",
"Got timeout writing communication packets",
@@ -200,7 +200,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/polish/errmsg.txt b/sql/share/polish/errmsg.txt
index 4b59a62f991..578d206fda8 100644
--- a/sql/share/polish/errmsg.txt
+++ b/sql/share/polish/errmsg.txt
@@ -85,10 +85,10 @@
"%s: Standardowe zakoñczenie dzia³ania\n",
"%s: Otrzymano sygna³ %d. Koñczenie dzia³ania!\n",
"%s: Zakoñczenie dzia³ania wykonane\n",
-"%s: Wymuszenie zamkniêcia w?tku %ld u¿ytkownik: '%-.64s'\n",
+"%s: Wymuszenie zamkniêcia w?tku %ld u¿ytkownik: '%-.64s'\n",
"Nie mo¿na stworzyæ socket'u IP",
"Tabela '%-.64s' nie ma indeksu takiego jak w CREATE INDEX. Stwórz tabelê",
-"Nie oczekiwano separatora. Sprawd¥ podrêcznik","
+"Nie oczekiwano separatora. Sprawd¥ podrêcznik",
"Nie mo¿na u¿yæ sta³ej d³ugo?ci wiersza z polami typu BLOB. U¿yj 'fields terminated by'.",
"Plik '%-.64s' musi znajdowaæ sie w katalogu bazy danych lub mieæ prawa czytania przez wszystkich",
"Plik '%-.64s' ju¿ istnieje",
@@ -142,7 +142,7 @@
"Rows matched: %ld Changed: %ld Warnings: %ld",
"Can't create a new thread (errno %d). If you are not out of available memory you can consult the manual for any possible OS dependent bug",
"Column count doesn't match value count at row %ld",
-"Can't reopen table: '%-.64s',
+"Can't reopen table: '%-.64s",
"Invalid use of NULL value",
"Got error '%-.64s' from regexp",
"Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause",
@@ -163,7 +163,7 @@
"Got an error from fcntl()",
"Got packets out of order",
"Couldn't uncompress communication packet",
-"Got an error reading communication packets"
+"Got an error reading communication packets",
"Got timeout reading communication packets",
"Got an error writing communication packets",
"Got timeout writing communication packets",
@@ -202,7 +202,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/portuguese/errmsg.txt b/sql/share/portuguese/errmsg.txt
index 7236bd86652..ac46736c7da 100644
--- a/sql/share/portuguese/errmsg.txt
+++ b/sql/share/portuguese/errmsg.txt
@@ -138,7 +138,7 @@
"Linhas que combinaram: %ld - Alteradas: %ld - Avisos: %ld",
"Não pode criar uma nova 'thread' (erro no. %d). Se você não estiver sem memória disponível, você pode consultar o manual sobre um possível 'bug' dependente do sistema operacional",
"Contagem de colunas não confere com a contagem de valores na linha %ld",
-"Não pode reabrir a tabela '%-.64s',
+"Não pode reabrir a tabela '%-.64s",
"Uso inválido do valor NULL",
"Obteve erro '%-.64s' em regexp",
"Mistura de colunas agrupadas (com MIN(), MAX(), COUNT(), ...) com colunas não agrupadas é ilegal, se não existir uma cláusula de agrupamento (cláusula GROUP BY)",
diff --git a/sql/share/romanian/errmsg.txt b/sql/share/romanian/errmsg.txt
index 0b8bbe1c219..3df02805a14 100644
--- a/sql/share/romanian/errmsg.txt
+++ b/sql/share/romanian/errmsg.txt
@@ -202,7 +202,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/russian/errmsg.txt b/sql/share/russian/errmsg.txt
index 2f1eedd207c..e0bae3166db 100644
--- a/sql/share/russian/errmsg.txt
+++ b/sql/share/russian/errmsg.txt
@@ -62,7 +62,7 @@
" '%-.64s' ÉÓÐÏÌØÚÏ×ÁÎÏ ×ÎÅ ×ÙÒÁÖÅÎÉÑ GROUP BY",
"îÅ ÍÏÇÕ ÐÒÏÉÚ×ÅÓÔÉ ÇÒÕÐÐÉÒÏ×ËÕ ÐÏ '%-.64s'",
"÷ ÏÄÎÏÍ ×ÙÒÁÖÅÎÉÉ ÓÏÄÅÒÖÁÔØÓÑ É ÉÍÅÎÁ ÐÏÌÅÊ, É ÓÕÍÍÉÒÕÀÝÉÅ ÆÕÎËÃÉÉ",
-"þÉÓÌÏ ÓÔÏÌÂÃÏ× ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÞÉÓÌÕ ÚÎÁÞÅÎÉÊ"
+"þÉÓÌÏ ÓÔÏÌÂÃÏ× ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÞÉÓÌÕ ÚÎÁÞÅÎÉÊ",
"óÌÉÛËÏÍ ÄÌÉÎÎÙÊ ÉÄÅÎÔÉÆÉËÁÔÏÒ: '%-.64s'",
"äÕÂÌÉÒÏ×ÁÎÎÏÅ ÉÍÑ ÐÏÌÑ '%-.64s'",
"äÕÂÌÉÒÏ×ÁÎÎÏÅ ÉÍÑ ËÌÀÞÁ '%-.64s'",
@@ -141,7 +141,7 @@
"óÏÏÔ×ÅÔÓÔ×ÕÀÝÉÈ ÚÁÐÉÓÅÊ: %ld éÚÍÅÎÅÎÏ: %ld ðÒÅÄÕÐÒÅÖÄÅÎÉÊ: %ld",
"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ ÎÏ×ÕÀ ÎÉÔØ (ÏÛÉÂËÁ %d). åÓÌÉ ÜÔÏ ÎÅ ÉÚ-ÚÁ ÎÅÈ×ÁÔËÉ ÐÁÍÑÔÉ, ÐÏÓÍÏÔÒÉÔÅ × ÒÕËÏ×ÏÄÓÔ×Å ×ÏÚÍÏÖÎÙÅ OS-ÚÁ×ÉÓÉÍÙÅ ÇÌÀËÉ",
"þÉÓÌÏ ÓÔÏÌÂÃÏ× ÎÅ ÓÏÏÔ×ÅÔÓÔ×ÕÅÔ ÞÉÓÌÕ ÚÎÁÞÅÎÉÊ × ÓÔÒÏËÅ %ld",
-"îÅ ÍÏÇÕ ÚÁÎÏ×Ï ÏÔËÒÙÔØ ÔÁÂÌÉÃÕ: '%-.64s',
+"îÅ ÍÏÇÕ ÚÁÎÏ×Ï ÏÔËÒÙÔØ ÔÁÂÌÉÃÕ: '%-.64s",
"îÅÐÒÁ×ÉÌØÎÏÅ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÚÎÁÞÅÎÉÑ NULL",
"REGEXP ×ÅÒÎÕÌ ÏÛÉÂËÕ '%-.64s'",
"éÓÐÏÌØÚÏ×ÁÎÉÅ ÁÇÒÅÇÁÔÎÙÈ ÆÕÎËÃÉÊ (MIN(),MAX(),COUNT()...) ÓÏ×ÍÅÓÔÎÏ Ó ÏÂÙÞÎÙÍÉ ÚÎÁÞÅÎÉÑÍÉ ×ÏÚÍÏÖÎÏ ÔÏÌØËÏ ÐÒÉ ÎÁÌÉÞÉÉ ÒÁÚÄÅÌÁ GROUP BY",
@@ -162,7 +162,7 @@
"fcntl() ×ÅÒÎÕÌ ÏÛÉÂËÕ",
"ðÏÌÕÞÅÎ ÐÁËÅÔ × ÎÅÐÒÁ×ÉÌØÎÏÍ ÐÏÒÑÄËÅ",
"îÅ ÍÏÇÕ ÒÁÓÐÁËÏ×ÁÔØ ÐÁËÅÔ",
-"ïÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ÐÁËÅÔÏ×"
+"ïÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ÐÁËÅÔÏ×",
"ôÁÊÍÁÕÔ ÐÒÉ ÞÔÅÎÉÉ ÐÁËÅÔÏ×",
"ïÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÐÁËÅÔÏ×",
"ïÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÐÁËÅÔÏ×",
diff --git a/sql/share/slovak/errmsg.txt b/sql/share/slovak/errmsg.txt
index de354f234c7..f699e811352 100644
--- a/sql/share/slovak/errmsg.txt
+++ b/sql/share/slovak/errmsg.txt
@@ -146,7 +146,7 @@
"Rows matched: %ld Changed: %ld Warnings: %ld",
"Can't create a new thread (errno %d). If you are not out of available memory, you can consult the manual for a possible OS-dependent bug",
"Column count doesn't match value count at row %ld",
-"Can't reopen table: '%-.64s',
+"Can't reopen table: '%-.64s",
"Invalid use of NULL value",
"Got error '%-.64s' from regexp",
"Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause",
@@ -167,7 +167,7 @@
"Got an error from fcntl()",
"Got packets out of order",
"Couldn't uncompress communication packet",
-"Got an error reading communication packets"
+"Got an error reading communication packets",
"Got timeout reading communication packets",
"Got an error writing communication packets",
"Got timeout writing communication packets",
@@ -206,7 +206,7 @@
"Table '%-.64s' is marked as crashed and should be repaired",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed",
"Some non-transactional changed tables couldn't be rolled back",
-"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again',
+"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again",
"This operation cannot be performed with a running slave, run STOP SLAVE first",
"This operation requires a running slave, configure slave and do START SLAVE",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO",
diff --git a/sql/share/spanish/errmsg.txt b/sql/share/spanish/errmsg.txt
index a528c3e6b36..0965d1ab3eb 100644
--- a/sql/share/spanish/errmsg.txt
+++ b/sql/share/spanish/errmsg.txt
@@ -139,7 +139,7 @@
"Líneas correspondientes: %ld Cambiadas: %ld Avisos: %ld",
"No puedo crear un nuevo thread (errno %d). Si tu está con falta de memoria disponible, tu puedes consultar el Manual para posibles problemas con SO",
"El número de columnas no corresponde al número en la línea %ld",
-"No puedo reabrir tabla: '%-.64s',
+"No puedo reabrir tabla: '%-.64s",
"Invalido uso de valor NULL",
"Obtenido error '%-.64s' de regexp",
"Mezcla de columnas GROUP (MIN(),MAX(),COUNT()...) con no GROUP columnas es ilegal si no hat la clausula GROUP BY",
@@ -160,7 +160,7 @@
"Obtenido un error de fcntl()",
"Obtenido paquetes desordenados",
"No puedo descomprimir paquetes de comunicación",
-"Obtenido un error leyendo paquetes de comunicación"
+"Obtenido un error leyendo paquetes de comunicación",
"Obtenido timeout leyendo paquetes de comunicación",
"Obtenido un error de escribiendo paquetes de comunicación",
"Obtenido timeout escribiendo paquetes de comunicación",
@@ -199,7 +199,7 @@
"Tabla '%-.64s' está marcada como crashed y debe ser reparada",
"Tabla '%-.64s' está marcada como crashed y la última reparación (automactica?) falló",
"Aviso: Algunas tablas no transancionales no pueden tener rolled back",
-"Multipla transición necesita mas que 'max_binlog_cache_size' bytes de almacenamiento. Aumente esta variable mysqld y tente de nuevo',
+"Multipla transición necesita mas que 'max_binlog_cache_size' bytes de almacenamiento. Aumente esta variable mysqld y tente de nuevo",
"Esta operación no puede ser hecha con el esclavo funcionando, primero use STOP SLAVE",
"Esta operación necesita el esclavo funcionando, configure esclavo y haga el START SLAVE",
"El servidor no está configurado como esclavo, edite el archivo config file o con CHANGE MASTER TO",
diff --git a/sql/share/swedish/errmsg.txt b/sql/share/swedish/errmsg.txt
index 5473f4e8e42..7ea172996c6 100644
--- a/sql/share/swedish/errmsg.txt
+++ b/sql/share/swedish/errmsg.txt
@@ -85,7 +85,7 @@
"Kan inte skapa IP socket",
"Tabellen '%-.64s' har inget index som motsvarar det angivna i CREATE INDEX. Skapa om tabellen",
"Fält separatorerna är inte emotsägande eller för långa. Kontrollera mot manualen",
-"Man kan inte använda fast radlängd med blobs. Använd 'fields terminated by'."
+"Man kan inte använda fast radlängd med blobs. Använd 'fields terminated by'",
"Textfilen '%' måste finnas i databas biblioteket eller vara läsbar för alla",
"Filen '%-.64s' existerar redan",
"Rader: %ld Bortagna: %ld Dubletter: %ld Varningar: %ld",
@@ -102,7 +102,7 @@
"Kan inte generera ett unikt filnamn %s.(1-999)\n",
"Tabell '%-.64s' kan inte uppdateras emedan den är låst för läsning",
"Tabell '%-.64s' är inte låst med LOCK TABLES",
-"BLOB fält '%-.64s' kan inte ha ett DEFAULT värde"
+"BLOB fält '%-.64s' kan inte ha ett DEFAULT värde",
"Felaktigt databas namn '%-.64s'",
"Felaktigt tabell namn '%-.64s'",
"Den angivna frågan skulle troligen ta mycket long tid! Kontrollar din WHERE och använd SET OPTION SQL_BIG_SELECTS=1 ifall du vill hantera stora joins",
@@ -117,7 +117,7 @@
"Tabeller måste ha minst 1 kolumn",
"Tabellen '%-.64s' är full",
"Okänt karaktärset: '%-.64s'",
-"För många tabeller. MySQL can ha högst %d tabeller i en och samma join"
+"För många tabeller. MySQL can ha högst %d tabeller i en och samma join",
"För många fält",
"För stor total rad längd. Den högst tillåtna rad-längden, förutom BLOBs, är %d. Ändra några av dina fält till BLOB",
"Tråd-stacken tog slut: Har använt %ld av %ld bytes. Använd 'mysqld -O thread_stack=#' ifall du behöver en större stack",
@@ -136,9 +136,9 @@
"För att ändra lösenord för andra måste du ha rättigheter att uppdatera mysql databasen",
"Hittade inte användaren i 'user' tabellen",
"Rader: %ld Uppdaterade: %ld Varningar: %ld",
-"Kan inte skapa en ny tråd (errno %d)"
+"Kan inte skapa en ny tråd (errno %d)",
"Antalet kolumner motsvarar inte antalet värden på rad: %ld",
-"Kunde inte stänga och öppna tabell: '%-.64s',
+"Kunde inte stänga och öppna tabell: '%-.64s",
"Felaktig använding av NULL",
"Fix fel '%-.64s' från REGEXP",
"Man får ha både GROUP kolumner (MIN(),MAX(),COUNT()...) och fält i en fråga om man inte har en GROUP BY del",
@@ -147,7 +147,7 @@
"%-.16s ej tillåtet för '%-.32s@%-.64s'\n för kolumn '%-.64s' i tabell '%-.64s'",
"Felaktigt GRANT privilegium använt",
"Felaktigt maskinnamn eller användarnamn använt med GRANT",
-"Det finns ingen tabell som heter '%-.64s.%s'"
+"Det finns ingen tabell som heter '%-.64s.%s'",
"Det finns inget privilegium definierat för användare '%-.32s' på '%-.64s' för tabell '%-.64s'",
"Du kan inte använda detta kommando med denna MySQL version",
"Du har något fel i din syntax",
@@ -160,7 +160,7 @@
"Kommunikationspaketen kom i fel ordning",
"Kunde inte packa up kommunikationspaketet",
"Fick ett fel vid läsning från klienten",
-"Fick 'timeout' vid läsning från klienten",
+"Fick 'timeout' vid läsning från klienten",
"Fick ett fel vid skrivning till klienten",
"Fick 'timeout' vid skrivning till klienten",
"Resultat strängen är längre än max_allowed_packet",
diff --git a/sql/share/ukrainian/errmsg.txt b/sql/share/ukrainian/errmsg.txt
index 0b91786d1f3..8b981351d8b 100644
--- a/sql/share/ukrainian/errmsg.txt
+++ b/sql/share/ukrainian/errmsg.txt
@@ -203,7 +203,7 @@
"ôÁÂÌÉÃÀ '%-.64s' ÍÁÒËÏ×ÁÎÏ ÑË Ú¦ÐÓÏ×ÁÎÕ ÔÁ §§ ÐÏÔÒ¦ÂÎÏ ×¦ÄÎÏ×ÉÔÉ",
"ôÁÂÌÉÃÀ '%-.64s' ÍÁÒËÏ×ÁÎÏ ÑË Ú¦ÐÓÏ×ÁÎÕ ÔÁ ÏÓÔÁÎΤ (Á×ÔÏÍÁÔÉÞÎÅ?) צÄÎÏ×ÌÅÎÎÑ ÎÅ ×ÄÁÌÏÓÑ",
"úÁÓÔÅÒÅÖÅÎÎÑ: äÅÑ˦ ÎÅÔÒÁÎÚÁËæÊΦ ÚͦÎÉ ÔÁÂÌÉÃØ ÎÅ ÍÏÖÎÁ ÂÕÄÅ ÐÏ×ÅÒÎÕÔÉ",
-"ôÒÁÎÚÁËÃ¦Ñ Ú ÂÁÇÁÔØÍÁ ×ÉÒÁÚÁÍÉ ×ÉÍÁÇÁ¤ ¦ÌØÛÅ Î¦Ö 'max_binlog_cache_size' ÂÁÊÔ¦× ÄÌÑ ÚÂÅÒ¦ÇÁÎÎÑ. ú¦ÌØÛÔÅ ÃÀ ÚͦÎÎÕ mysqld ÔÁ ÓÐÒÏÂÕÊÔÅ ÚÎÏ×Õ',
+"ôÒÁÎÚÁËÃ¦Ñ Ú ÂÁÇÁÔØÍÁ ×ÉÒÁÚÁÍÉ ×ÉÍÁÇÁ¤ ¦ÌØÛÅ Î¦Ö 'max_binlog_cache_size' ÂÁÊÔ¦× ÄÌÑ ÚÂÅÒ¦ÇÁÎÎÑ. ú¦ÌØÛÔÅ ÃÀ ÚͦÎÎÕ mysqld ÔÁ ÓÐÒÏÂÕÊÔÅ ÚÎÏ×Õ",
"ïÐÅÒÁÃ¦Ñ ÎÅ ÍÏÖÅ ÂÕÔÉ ×ÉËÏÎÁÎÁ Ú ÚÁÐÕÝÅÎÉÍ Ð¦ÄÌÅÇÌÉÍ, ÓÐÏÞÁÔËÕ ×ÉËÏÎÁÊÔÅ STOP SLAVE",
"ïÐÅÒÁÃ¦Ñ ×ÉÍÁÇÁ¤ ÚÁÐÕÝÅÎÏÇÏ Ð¦ÄÌÅÇÌÏÇÏ, ÚËÏÎƦÇÕÒÕÊÔŠЦÄÌÅÇÌÏÇÏ ÔÁ ×ÉËÏÎÁÊÔÅ START SLAVE",
"óÅÒ×ÅÒ ÎÅ ÚËÏÎƦÇÕÒÏ×ÁÎÏ ÑË Ð¦ÄÌÅÇÌÉÊ, ×ÉÐÒÁ×ÔÅ ÃÅ Õ ÆÁÊ̦ ËÏÎƦÇÕÒÁæ§ ÁÂÏ Ú CHANGE MASTER TO",
diff --git a/sql/spatial.cc b/sql/spatial.cc
index 171716df061..a2feabeec78 100644
--- a/sql/spatial.cc
+++ b/sql/spatial.cc
@@ -66,8 +66,7 @@ Geometry::GClassInfo *Geometry::find_class(const char *name, size_t len)
cur_rt < ci_collection_end; ++cur_rt)
{
if ((cur_rt->m_name[len] == 0) &&
- (default_charset_info->strncasecmp(default_charset_info,
- cur_rt->m_name, name, len) == 0))
+ (my_strncasecmp(&my_charset_latin1, cur_rt->m_name, name, len) == 0))
{
return cur_rt;
}
diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc
index 192ef247177..9e9d7a08925 100644
--- a/sql/sql_analyse.cc
+++ b/sql/sql_analyse.cc
@@ -278,7 +278,7 @@ void free_string(String *s)
void field_str::add()
{
char buff[MAX_FIELD_WIDTH], *ptr;
- String s(buff, sizeof(buff),default_charset_info), *res;
+ String s(buff, sizeof(buff),&my_charset_bin), *res;
ulong length;
if (!(res = item->val_str(&s)))
@@ -581,9 +581,9 @@ bool analyse::end_of_records()
{
field_info **f = f_info;
char buff[MAX_FIELD_WIDTH];
- String *res, s_min(buff, sizeof(buff),default_charset_info),
- s_max(buff, sizeof(buff),default_charset_info),
- ans(buff, sizeof(buff),default_charset_info);
+ String *res, s_min(buff, sizeof(buff),&my_charset_bin),
+ s_max(buff, sizeof(buff),&my_charset_bin),
+ ans(buff, sizeof(buff),&my_charset_bin);
for (; f != f_end; f++)
{
@@ -629,14 +629,14 @@ bool analyse::end_of_records()
((*f)->tree.elements_in_tree * 3 - 1 + 6))))
{
char tmp[331]; //331, because one double prec. num. can be this long
- String tmp_str(tmp, sizeof(tmp),default_charset_info);
+ String tmp_str(tmp, sizeof(tmp),&my_charset_bin);
TREE_INFO tree_info;
tree_info.str = &tmp_str;
tree_info.found = 0;
tree_info.item = (*f)->item;
- tmp_str.set("ENUM(", 5,default_charset_info);
+ tmp_str.set("ENUM(", 5,&my_charset_bin);
tree_walk(&(*f)->tree, (*f)->collect_enum(), (char*) &tree_info,
left_root_right);
tmp_str.append(')');
@@ -919,14 +919,14 @@ int collect_longlong(longlong *element,
TREE_INFO *info)
{
char buff[MAX_FIELD_WIDTH];
- String s(buff, sizeof(buff),default_charset_info);
+ String s(buff, sizeof(buff),&my_charset_bin);
if (info->found)
info->str->append(',');
else
info->found = 1;
info->str->append('\'');
- s.set(*element,default_charset_info);
+ s.set(*element, current_thd->variables.thd_charset);
info->str->append(s);
info->str->append('\'');
return 0;
@@ -938,14 +938,14 @@ int collect_ulonglong(ulonglong *element,
TREE_INFO *info)
{
char buff[MAX_FIELD_WIDTH];
- String s(buff, sizeof(buff),default_charset_info);
+ String s(buff, sizeof(buff),&my_charset_bin);
if (info->found)
info->str->append(',');
else
info->found = 1;
info->str->append('\'');
- s.set(*element,default_charset_info);
+ s.set(*element, current_thd->variables.thd_charset);
info->str->append(s);
info->str->append('\'');
return 0;
diff --git a/sql/sql_analyse.h b/sql/sql_analyse.h
index 5f0058c3ad9..d40811a2911 100644
--- a/sql/sql_analyse.h
+++ b/sql/sql_analyse.h
@@ -312,8 +312,10 @@ public:
~analyse()
{
if (f_info)
+ {
for (field_info **f=f_info; f != f_end; f++)
delete (*f);
+ }
}
virtual void add() {}
virtual bool change_columns(List<Item> &fields);
diff --git a/sql/sql_class.h b/sql/sql_class.h
index a19c980772d..f943a611d08 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -677,6 +677,7 @@ public:
is_fatal_error= 1;
net.report_error= 1;
}
+ inline CHARSET_INFO *charset() { return variables.thd_charset; }
};
/*
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index 0505d2409d4..7c07c08bcac 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -163,10 +163,13 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
{
switch (mode) {
case RFIRST:
- err=keyname ?
- table->file->index_first(table->record[0]) :
- table->file->rnd_init(1) ||
- table->file->rnd_next(table->record[0]);
+ if (keyname)
+ err=table->file->index_first(table->record[0]);
+ else
+ {
+ if (!(err=table->file->rnd_init(1)))
+ err=table->file->rnd_next(table->record[0]);
+ }
mode=RNEXT;
break;
case RLAST:
diff --git a/sql/sql_load.cc b/sql/sql_load.cc
index 49b4f2f7c2f..9415618c561 100644
--- a/sql/sql_load.cc
+++ b/sql/sql_load.cc
@@ -341,6 +341,7 @@ int mysql_load(THD *thd,sql_exchange *ex,TABLE_LIST *table_list,
}
if (transactional_table)
error=ha_autocommit_or_rollback(thd,error);
+ query_cache_invalidate3(thd, table_list, 0);
err:
if (thd->lock)
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index ce782b0480c..1b673531e68 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2432,7 +2432,7 @@ mysql_execute_command(THD *thd)
0, (ORDER *)NULL, (ORDER *)NULL, (Item *)NULL,
(ORDER *)NULL,
select_lex->options | thd->options |
- SELECT_NO_JOIN_CACHE,
+ SELECT_NO_JOIN_CACHE | SELECT_NO_UNLOCK,
result, unit, select_lex, 0, 0);
if (thd->net.report_error)
res= -1;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 47fe271f2b6..5e3874bf038 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -7874,6 +7874,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
SELECT_LEX *select_lex = &(join->thd->lex.select_lex);
select_result *result=join->result;
Item *item_null= new Item_null();
+ CHARSET_INFO *cs= &my_charset_latin1;
DBUG_ENTER("select_describe");
DBUG_PRINT("info", ("Select 0x%lx, type %s, message %s",
(ulong)join->select_lex, join->select_lex->type,
@@ -7886,12 +7887,10 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
{
item_list.push_back(new Item_int((int32) join->select_lex->select_number));
item_list.push_back(new Item_string(join->select_lex->type,
- strlen(join->select_lex->type),
- default_charset_info));
+ strlen(join->select_lex->type), cs));
for (uint i=0 ; i < 7; i++)
item_list.push_back(item_null);
- item_list.push_back(new Item_string(message,strlen(message),
- default_charset_info));
+ item_list.push_back(new Item_string(message,strlen(message),cs));
if (result->send_data(item_list))
join->error= 1;
}
@@ -7904,8 +7903,8 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
TABLE *table=tab->table;
char buff[512],*buff_ptr=buff;
char buff1[512], buff2[512];
- String tmp1(buff1,sizeof(buff1),default_charset_info);
- String tmp2(buff2,sizeof(buff2),default_charset_info);
+ String tmp1(buff1,sizeof(buff1),cs);
+ String tmp2(buff2,sizeof(buff2),cs);
tmp1.length(0);
tmp2.length(0);
@@ -7914,7 +7913,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
join->select_lex->select_number));
item_list.push_back(new Item_string(join->select_lex->type,
strlen(join->select_lex->type),
- default_charset_info));
+ cs));
if (tab->type == JT_ALL && tab->select && tab->select->quick)
tab->type= JT_RANGE;
if (table->tmp_table == TMP_TABLE && table->derived_select_number != 0)
@@ -7923,15 +7922,15 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
char buff[512];
int len= my_snprintf(buff, 512, "<derived%u>",
table->derived_select_number);
- item_list.push_back(new Item_string(buff, len, default_charset_info));
+ item_list.push_back(new Item_string(buff, len, cs));
}
else
item_list.push_back(new Item_string(table->table_name,
strlen(table->table_name),
- default_charset_info));
+ cs));
item_list.push_back(new Item_string(join_type_str[tab->type],
strlen(join_type_str[tab->type]),
- default_charset_info));
+ cs));
key_map bits;
uint j;
for (j=0,bits=tab->keys ; bits ; j++,bits>>=1)
@@ -7944,8 +7943,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
}
}
if (tmp1.length())
- item_list.push_back(new Item_string(tmp1.ptr(),tmp1.length(),
- default_charset_info));
+ item_list.push_back(new Item_string(tmp1.ptr(),tmp1.length(),cs));
else
item_list.push_back(item_null);
if (tab->ref.key_parts)
@@ -7961,15 +7959,13 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
tmp2.append(',');
tmp2.append((*ref)->name());
}
- item_list.push_back(new Item_string(tmp2.ptr(),tmp2.length(),
- default_charset_info));
+ item_list.push_back(new Item_string(tmp2.ptr(),tmp2.length(),cs));
}
else if (tab->type == JT_NEXT)
{
KEY *key_info=table->key_info+ tab->index;
item_list.push_back(new Item_string(key_info->name,
- strlen(key_info->name),
- default_charset_info));
+ strlen(key_info->name),cs));
item_list.push_back(new Item_int((int32) key_info->key_length));
item_list.push_back(item_null);
}
@@ -7977,8 +7973,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
{
KEY *key_info=table->key_info+ tab->select->quick->index;
item_list.push_back(new Item_string(key_info->name,
- strlen(key_info->name),
- default_charset_info));
+ strlen(key_info->name),cs));
item_list.push_back(new Item_int((int32) tab->select->quick->
max_used_key_length));
item_list.push_back(item_null);
@@ -7998,8 +7993,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
key_read=1;
if (tab->info)
- item_list.push_back(new Item_string(tab->info,strlen(tab->info),
- default_charset_info));
+ item_list.push_back(new Item_string(tab->info,strlen(tab->info),cs));
else
{
if (tab->select)
@@ -8032,7 +8026,7 @@ static void select_describe(JOIN *join, bool need_tmp_table, bool need_order,
if (buff_ptr == buff)
buff_ptr+= 2; // Skip inital "; "
item_list.push_back(new Item_string(buff+2,(uint) (buff_ptr - buff)-2,
- default_charset_info));
+ cs));
}
// For next iteration
used_tables|=table->map;
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 888aecebd8d..54921806507 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -56,7 +56,7 @@ extern struct st_VioSSLAcceptorFd * ssl_acceptor_fd;
int
mysqld_show_dbs(THD *thd,const char *wild)
{
- Item_string *field=new Item_string("",0,default_charset_info);
+ Item_string *field=new Item_string("",0,thd->charset());
List<Item> field_list;
char *end;
List<char> files;
@@ -141,7 +141,7 @@ int mysqld_show_open_tables(THD *thd,const char *wild)
int mysqld_show_tables(THD *thd,const char *db,const char *wild)
{
- Item_string *field=new Item_string("",0,default_charset_info);
+ Item_string *field=new Item_string("",0,thd->charset());
List<Item> field_list;
char path[FN_LEN],*end;
List<char> files;
@@ -734,7 +734,7 @@ mysqld_show_fields(THD *thd, TABLE_LIST *table_list,const char *wild,
null_default_value=1;
if (!null_default_value && !field->is_null())
{ // Not null by default
- type.set(tmp,sizeof(tmp),default_charset_info);
+ type.set(tmp,sizeof(tmp),&my_charset_bin);
field->val_str(&type,&type);
protocol->store(type.ptr(),type.length());
}
@@ -1041,7 +1041,7 @@ store_create_info(THD *thd, TABLE *table, String *packet)
List<Item> field_list;
char tmp[MAX_FIELD_WIDTH];
- String type(tmp, sizeof(tmp),default_charset_info);
+ String type(tmp, sizeof(tmp),&my_charset_bin);
if (table->tmp_table)
packet->append("CREATE TEMPORARY TABLE ", 23);
else
@@ -1061,7 +1061,7 @@ store_create_info(THD *thd, TABLE *table, String *packet)
packet->append(' ');
// check for surprises from the previous call to Field::sql_type()
if (type.ptr() != tmp)
- type.set(tmp, sizeof(tmp),default_charset_info);
+ type.set(tmp, sizeof(tmp),&my_charset_bin);
field->sql_type(type);
packet->append(type.ptr(),type.length());
@@ -1088,7 +1088,7 @@ store_create_info(THD *thd, TABLE *table, String *packet)
packet->append(" default ", 9);
if (!field->is_null())
{ // Not null by default
- type.set(tmp,sizeof(tmp),default_charset_info);
+ type.set(tmp,sizeof(tmp),&my_charset_bin);
field->val_str(&type,&type);
if (type.length())
append_unescaped(packet, type.ptr(), type.length());
@@ -1409,7 +1409,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
int mysqld_show_charsets(THD *thd, const char *wild)
{
char buff[8192];
- String packet2(buff,sizeof(buff),default_charset_info);
+ String packet2(buff,sizeof(buff),thd->charset());
List<Item> field_list;
CHARSET_INFO **cs;
Protocol *protocol= thd->protocol;
diff --git a/sql/sql_string.h b/sql/sql_string.h
index 6d54373f642..047faf3e3db 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -39,12 +39,12 @@ public:
String()
{
Ptr=0; str_length=Alloced_length=0; alloced=0;
- str_charset=default_charset_info;
+ str_charset= &my_charset_bin;
}
String(uint32 length_arg)
{
alloced=0; Alloced_length=0; (void) real_alloc(length_arg);
- str_charset=default_charset_info;
+ str_charset= &my_charset_bin;
}
String(const char *str, CHARSET_INFO *cs)
{
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index a5e07379f59..699818b19fd 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -247,7 +247,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
{
if (wrong_tables.length())
wrong_tables.append(',');
- wrong_tables.append(String(table->real_name,default_charset_info));
+ wrong_tables.append(String(table->real_name,system_charset_info));
}
}
thd->tmp_table_used= tmp_table_deleted;
@@ -1649,6 +1649,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
new_db=db;
used_fields=create_info->used_fields;
+ mysql_ha_closeall(thd, table_list);
if (!(table=open_ltable(thd,table_list,TL_WRITE_ALLOW_READ)))
DBUG_RETURN(-1);
diff --git a/sql/sql_test.cc b/sql/sql_test.cc
index 8984bcc6463..88ed86732f1 100644
--- a/sql/sql_test.cc
+++ b/sql/sql_test.cc
@@ -52,7 +52,7 @@ print_where(COND *cond,const char *info)
if (cond)
{
char buff[256];
- String str(buff,(uint32) sizeof(buff), default_charset_info);
+ String str(buff,(uint32) sizeof(buff), system_charset_info);
str.length(0);
cond->print(&str);
str.append('\0');
@@ -116,8 +116,8 @@ void print_cached_tables(void)
void TEST_filesort(SORT_FIELD *sortorder,uint s_length)
{
char buff[256],buff2[256];
- String str(buff,sizeof(buff),default_charset_info);
- String out(buff2,sizeof(buff2),default_charset_info);
+ String str(buff,sizeof(buff),system_charset_info);
+ String out(buff2,sizeof(buff2),system_charset_info);
const char *sep;
DBUG_ENTER("TEST_filesort");
diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc
index 387c9970e34..450f1dd09ae 100644
--- a/sql/sql_udf.cc
+++ b/sql/sql_udf.cc
@@ -431,9 +431,9 @@ int mysql_create_function(THD *thd,udf_func *udf)
goto err;
restore_record(table,2); // Get default values for fields
- table->field[0]->store(u_d->name.str, u_d->name.length, default_charset_info);
+ table->field[0]->store(u_d->name.str, u_d->name.length, system_charset_info);
table->field[1]->store((longlong) u_d->returns);
- table->field[2]->store(u_d->dl,(uint) strlen(u_d->dl), default_charset_info);
+ table->field[2]->store(u_d->dl,(uint) strlen(u_d->dl), system_charset_info);
if (table->fields >= 4) // If not old func format
table->field[3]->store((longlong) u_d->type);
error = table->file->write_row(table->record[0]);
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index 88f677938ad..65f07293c77 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -427,7 +427,7 @@ int mysql_multi_update(THD *thd,
table_list, select_lex->with_wild, total_list,
conds, 0, (ORDER *) NULL, (ORDER *)NULL, (Item *) NULL,
(ORDER *)NULL,
- options | SELECT_NO_JOIN_CACHE,
+ options | SELECT_NO_JOIN_CACHE | SELECT_NO_UNLOCK,
result, unit, select_lex, 0, 0);
delete result;
DBUG_RETURN(res);
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 741ec375fdd..c74ca65709e 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -194,6 +194,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token CHECK_SYM
%token COMMITTED_SYM
%token COLLATE_SYM
+%token COLLATION_SYM
%token COLUMNS
%token COLUMN_SYM
%token CONCURRENT
@@ -284,6 +285,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token MERGE_SYM
%token MIN_ROWS
%token MYISAM_SYM
+%token NAMES_SYM
%token NATIONAL_SYM
%token NATURAL
%token NEW_SYM
@@ -650,7 +652,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
show describe load alter optimize flush
reset purge begin commit rollback slave master_def master_defs
repair restore backup analyze check start
- field_list field_list_item field_spec kill
+ field_list field_list_item field_spec kill column_def key_def
select_item_list select_item values_list no_braces
opt_limit_clause delete_limit_clause fields opt_values values
procedure_list procedure_list2 procedure_item
@@ -1049,12 +1051,20 @@ field_list:
field_list_item:
+ column_def
+ | key_def
+ ;
+
+column_def:
field_spec check_constraint
| field_spec references
{
Lex->col_list.empty(); /* Alloced by sql_alloc */
}
- | key_type opt_ident key_alg '(' key_list ')'
+ ;
+
+key_def:
+ key_type opt_ident key_alg '(' key_list ')'
{
LEX *lex=Lex;
lex->key_list.push_back(new Key($1,$2, $3, lex->col_list));
@@ -1468,7 +1478,8 @@ add_column:
ADD opt_column { Lex->change=0; };
alter_list_item:
- add_column field_list_item opt_place { Lex->simple_alter=0; }
+ add_column column_def opt_place { Lex->simple_alter=0; }
+ | ADD key_def { Lex->simple_alter=0; }
| add_column '(' field_list ')' { Lex->simple_alter=0; }
| CHANGE opt_column field_ident
{
@@ -3954,6 +3965,7 @@ keyword:
| CIPHER_SYM {}
| CLIENT_SYM {}
| CLOSE_SYM {}
+ | COLLATION_SYM {}
| COMMENT_SYM {}
| COMMITTED_SYM {}
| COMMIT_SYM {}
@@ -4031,6 +4043,7 @@ keyword:
| MULTIPOINT {}
| MULTIPOLYGON {}
| MYISAM_SYM {}
+ | NAMES_SYM {}
| NATIONAL_SYM {}
| NCHAR_SYM {}
| NEXT_SYM {}
@@ -4177,6 +4190,13 @@ option_value:
find_sys_var("convert_character_set"),
$4));
}
+ | NAMES_SYM opt_equal set_expr_or_default
+ {
+ LEX *lex=Lex;
+ lex->var_list.push_back(new set_var(lex->option_type,
+ find_sys_var("client_character_set"),
+ $3));
+ }
| PASSWORD equal text_or_password
{
THD *thd=YYTHD;
diff --git a/sql/table.h b/sql/table.h
index 1f7df0c6d64..33e2db98d5a 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -170,7 +170,6 @@ typedef struct st_table_list
uint32 db_length, real_name_length;
bool straight; /* optimize with prev table */
bool updating; /* for replicate-do/ignore table */
- bool do_redirect; /* To get the struct in UNION's */
bool force_index; /* Prefer index over table scan */
} TABLE_LIST;
diff --git a/support-files/MacOSX/Description.plist.sh b/support-files/MacOSX/Description.plist.sh
index 4f388235eee..03212dfdeff 100644
--- a/support-files/MacOSX/Description.plist.sh
+++ b/support-files/MacOSX/Description.plist.sh
@@ -5,7 +5,7 @@
<key>IFPkgDescriptionDeleteWarning</key>
<string></string>
<key>IFPkgDescriptionDescription</key>
- <string>This package provides a binary installation of MySQL @VERSION@@MYSQL_SERVER_SUFFIX@ for Mac OS X.</string>
+ <string>MySQL @VERSION@@MYSQL_SERVER_SUFFIX@ for Mac OS X</string>
<key>IFPkgDescriptionTitle</key>
<string>MySQL @VERSION@@MYSQL_SERVER_SUFFIX@ for Mac OS X</string>
<key>IFPkgDescriptionVersion</key>
diff --git a/support-files/MacOSX/Makefile.am b/support-files/MacOSX/Makefile.am
index 0702d104e7e..d030ff39d84 100644
--- a/support-files/MacOSX/Makefile.am
+++ b/support-files/MacOSX/Makefile.am
@@ -17,19 +17,34 @@
## Process this file with automake to create Makefile.in
-EXTRA_DIST = Info.plist.sh Description.plist.sh
+EXTRA_DIST = Info.plist.sh \
+ Description.plist.sh \
+ StartupParameters.plist.sh \
+ postinstall.sh \
+ preinstall.sh \
+ ReadMe.txt
-pkgdata_DATA = Info.plist Description.plist
+pkgdata_DATA = Info.plist \
+ Description.plist \
+ StartupParameters.plist \
+ postinstall \
+ preinstall
-CLEANFILES = Info.plist Description.plist
+CLEANFILES = Info.plist \
+ Description.plist \
+ StartupParameters.plist \
+ postinstall \
+ preinstall
SUFFIXES = .sh
.sh:
@RM@ -f $@ $@-t
@SED@ \
+ -e 's!@''prefix''@!$(prefix)!g' \
-e 's!@''VERSION''@!@VERSION@!' \
-e 's!@''MYSQL_SERVER_SUFFIX''@!@MYSQL_SERVER_SUFFIX@!' \
+ -e 's!@''MYSQLD_USER''@!@MYSQLD_USER@!' \
$< > $@-t
@MV@ $@-t $@
diff --git a/support-files/MacOSX/ReadMe.txt b/support-files/MacOSX/ReadMe.txt
new file mode 100644
index 00000000000..ed2d2b4c714
--- /dev/null
+++ b/support-files/MacOSX/ReadMe.txt
@@ -0,0 +1,80 @@
+Installation notes for MySQL on Mac OS X
+
+PLEASE READ!
+
+For more details about installing and running
+MySQL on Mac OS X, also refer to the manual,
+which is available online:
+
+http://www.mysql.com/doc/en/Mac_OS_X_installation.html
+
+NOTE: Before proceeding with the installation, please
+make sure that no other MySQL server is running!
+
+Please shut down all running MySQL instances before
+continuing by either using the MySQL Manager
+Application (on Mac OS X Server) or via "mysqladmin
+shutdown" on the command line.
+
+This MySQL package will be installed into
+"/usr/local/mysql-<version>" and will also create a
+symbolic link "/usr/local/mysql", pointing to the new
+location.
+
+A previously existing /usr/local/mysql directory will
+be renamed to /usr/local/mysql.bak before proceeding
+with the installation.
+
+Additionally, it will install the mysql grant tables by
+executing "mysql_install_db" after the installation.
+
+If you are running Mac OS X Server, you already have a
+version MySQL installed. Make sure to read Apple's help
+about installing MySQL (Run the "Help View" application,
+select "Mac OS X Server help", and do a search for MySQL
+and read the item entitled "Installing MySQL").
+
+If you previously used Marc Liyanage's MySQL packages
+for MacOS X from http://www.entropy.ch, you can simply
+follow the update instructions given on his pages.
+
+After the installation (and restoring the old database
+files, if necessary), you can start up MySQL by running
+the following commands in a terminal window:
+
+ cd /usr/local/mysql
+ sudo ./bin/mysqld_safe
+ (Enter your password)
+ (Press CTRL+Z)
+ (Press CTRL+D to exit the shell)
+ bg
+
+You should now be able to connect to the MySQL server,
+e.g. by running /usr/local/mysql/bin/mysql
+
+If you installed MySQL for the first time,
+PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER!
+This is done with the following two commands:
+
+/usr/local/mysql/bin/mysqladmin -u root password 'new-password'
+
+/usr/local/mysql/bin/mysqladmin -u root -h $hostname password 'new-password'
+
+Please note, that after upgrading from MySQL 3.23 to
+MySQL 4.0 it is recommended to convert the MySQL
+privilege tables using the mysql_fix_privilege_tables
+script, since some new security privileges have been
+added.
+
+Please see
+http://www.mysql.com/doc/en/Upgrading-from-3.23.html
+for more information on how to upgrade from MySQL 3.23.
+
+If you do not want to have to type the full path
+"/usr/local/mysql/bin" in front of every command, you
+can to add this directory to your PATH environment
+variable in your login script. For the default shell
+"tcsh", you can do this by running this command once:
+
+echo 'setenv PATH $PATH:/usr/local/mysql/bin' >> ~/.tcshrc
+
diff --git a/support-files/MacOSX/StartupParameters.plist.sh b/support-files/MacOSX/StartupParameters.plist.sh
new file mode 100644
index 00000000000..f5620c73f5f
--- /dev/null
+++ b/support-files/MacOSX/StartupParameters.plist.sh
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Description</key>
+ <string>MySQL @VERSION@@MYSQL_SERVER_SUFFIX@</string>
+ <key>OrderPreference</key>
+ <string>None</string>
+ <key>Provides</key>
+ <array>
+ <string>MySQL</string>
+ </array>
+ <key>Uses</key>
+ <array>
+ <string>Network</string>
+ <string>Resolver</string>
+ </array>
+ </dict>
+</plist>
diff --git a/support-files/MacOSX/postinstall.sh b/support-files/MacOSX/postinstall.sh
new file mode 100644
index 00000000000..daaf10bda8f
--- /dev/null
+++ b/support-files/MacOSX/postinstall.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# postinstall - this script will be executed after the MySQL PKG
+# installation has been performed.
+#
+# This script will install the MySQL privilege tables using the
+# "mysql_install_db" script and will correct the ownerships of these files
+# afterwards.
+#
+
+if cd @prefix@ ; then
+ if [ ! -f data/mysql/db.frm ] ; then
+ ./scripts/mysql_install_db
+ fi
+
+ if [ -d data ] ; then
+ chown -R @MYSQLD_USER@ data
+ fi
+else
+ exit $?
+fi
diff --git a/support-files/MacOSX/preinstall.sh b/support-files/MacOSX/preinstall.sh
new file mode 100644
index 00000000000..62772573c46
--- /dev/null
+++ b/support-files/MacOSX/preinstall.sh
@@ -0,0 +1,18 @@
+#!/bin/sh
+#
+# preinstall - this script will be executed before the MySQL PKG
+# installation will be performed.
+#
+# If this package has been compiled with a prefix ending with "mysql" (e.g.
+# /usr/local/mysql or /opt/mysql), it will rename any previosuly existing
+# directory with this name before installing the new package (which includes
+# a symlink named "mysql", pointing to the newly installed directory, which
+# is named mysql-<version>)
+#
+
+PREFIX="@prefix@"
+BASENAME=`basename $PREFIX`
+
+if [ -d $PREFIX -a ! -L $PREFIX -a $BASENAME = "mysql" ] ; then
+ mv $PREFIX $PREFIX.bak
+fi