merged
BitKeeper/etc/logging_ok: auto-union BitKeeper/etc/ignore: auto-union acinclude.m4: Auto merged BitKeeper/deleted/.del-rpc_server_ext.h~952741fb85de2b80: Auto merged client/mysqlbinlog.cc: Auto merged mysql-test/r/innodb.result: Auto merged sql-bench/Makefile.am: Auto merged sql/ha_myisam.cc: Auto merged sql/ha_myisammrg.cc: Auto merged sql/sql_list.h: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_show.cc: Auto merged Docs/manual.texi: merge include/mysql_com.h: merge include/mysqld_error.h: merge mysql-test/install_test_db.sh: merge sql/mysql_priv.h: merge sql/mysqld.cc: merge sql/share/czech/errmsg.txt: merge sql/share/danish/errmsg.txt: merge sql/share/dutch/errmsg.txt: merge sql/share/english/errmsg.txt: merge sql/share/estonian/errmsg.txt: merge sql/share/french/errmsg.txt: merge sql/share/german/errmsg.txt: merge sql/share/greek/errmsg.txt: merge sql/share/hungarian/errmsg.txt: merge sql/share/italian/errmsg.txt: merge sql/share/japanese/errmsg.txt: merge sql/share/korean/errmsg.txt: merge sql/share/norwegian-ny/errmsg.txt: merge sql/share/norwegian/errmsg.txt: merge sql/share/polish/errmsg.txt: merge sql/share/portuguese/errmsg.txt: merge sql/share/romanian/errmsg.txt: merge sql/share/russian/errmsg.txt: merge sql/share/slovak/errmsg.txt: merge sql/share/spanish/errmsg.txt: merge sql/share/swedish/errmsg.txt: merge sql/sql_base.cc: merge sql/sql_table.cc: merge
This commit is contained in:
commit
c9dbb4b726
@ -8,6 +8,8 @@
|
|||||||
*.lo
|
*.lo
|
||||||
*.o
|
*.o
|
||||||
*.spec
|
*.spec
|
||||||
|
*/*_pure_*warnings
|
||||||
|
*/.pure
|
||||||
*~
|
*~
|
||||||
.*.swp
|
.*.swp
|
||||||
.deps
|
.deps
|
||||||
@ -121,6 +123,7 @@ bdb/include/gen_server_ext.h
|
|||||||
bdb/include/hash_auto.h
|
bdb/include/hash_auto.h
|
||||||
bdb/include/log_auto.h
|
bdb/include/log_auto.h
|
||||||
bdb/include/qam_auto.h
|
bdb/include/qam_auto.h
|
||||||
|
bdb/include/rpc_client_ext.h
|
||||||
bdb/include/rpc_server_ext.h
|
bdb/include/rpc_server_ext.h
|
||||||
bdb/include/txn_auto.h
|
bdb/include/txn_auto.h
|
||||||
bdb/java/src/com/sleepycat/db/DbConstants.java
|
bdb/java/src/com/sleepycat/db/DbConstants.java
|
||||||
@ -175,6 +178,7 @@ heap/hp_test2
|
|||||||
include/my_config.h
|
include/my_config.h
|
||||||
include/my_global.h
|
include/my_global.h
|
||||||
include/mysql_version.h
|
include/mysql_version.h
|
||||||
|
include/widec.h
|
||||||
innobase/ib_config.h
|
innobase/ib_config.h
|
||||||
innobase/ib_config.h.in
|
innobase/ib_config.h.in
|
||||||
isam/isamchk
|
isam/isamchk
|
||||||
|
@ -1,9 +1,16 @@
|
|||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
path=`dirname $0`
|
gmake -k clean || true
|
||||||
. "$path/SETUP.sh"
|
/bin/rm -f */.deps/*.P config.cache
|
||||||
|
|
||||||
extra_flags="$sparc_cflags $fast_cflags"
|
aclocal && autoheader && aclocal && automake && autoconf
|
||||||
extra_configs="$sparc_configs"
|
(cd bdb/dist && sh s_all)
|
||||||
|
(cd innobase && aclocal && autoheader && aclocal && automake && autoconf)
|
||||||
|
if [ -d gemini ]
|
||||||
|
then
|
||||||
|
(cd gemini && aclocal && autoheader && aclocal && automake && autoconf)
|
||||||
|
fi
|
||||||
|
|
||||||
. "$path/FINISH.sh"
|
CFLAGS="-g -Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -O3 -fno-omit-frame-pointer -mcpu=v8 -Wa,-xarch=v8plusa" CXX=gcc CXXFLAGS="-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wextern-inline -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -O3 -fno-omit-frame-pointer -mcpu=v8 -Wa,-xarch=v8plusa -g" ./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client
|
||||||
|
|
||||||
|
gmake -j 4
|
||||||
|
@ -6,6 +6,8 @@ aclocal && autoheader && aclocal && automake && autoconf
|
|||||||
(cd bdb/dist && sh s_all)
|
(cd bdb/dist && sh s_all)
|
||||||
(cd innobase && aclocal && autoheader && aclocal && automake && autoconf)
|
(cd innobase && aclocal && autoheader && aclocal && automake && autoconf)
|
||||||
|
|
||||||
CFLAGS="-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -DHAVE_purify -O2" CXX=gcc CXXFLAGS="-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wextern-inline -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -DHAVE_PURIFY -O2" ./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-debug=full
|
CFLAGS="-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Wunused -DHAVE_purify -DEXTRA_DEBUG -O2" CXX=gcc CXXLD=g++ CXXFLAGS="-Wimplicit -Wreturn-type -Wid-clash-51 -Wswitch -Wtrigraphs -Wcomment -W -Wchar-subscripts -Wformat -Wimplicit-function-dec -Wimplicit-int -Wparentheses -Wsign-compare -Wwrite-strings -Woverloaded-virtual -Wextern-inline -Wsign-promo -Wreorder -Wctor-dtor-privacy -Wnon-virtual-dtor -felide-constructors -fno-exceptions -fno-rtti -DHAVE_purify -DEXTRA_DEBUG -O2" ./configure --prefix=/usr/local/mysql --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-debug=full --with-berkeley-db --with-innodb
|
||||||
|
|
||||||
gmake -j 4
|
gmake -j 4
|
||||||
|
|
||||||
|
cd sql ; rm mysqld ; make CXXLD="purify -best-effort g++" mysqld
|
||||||
|
@ -7,6 +7,7 @@ jcole@abel.spaceapes.com
|
|||||||
jcole@main.burghcom.com
|
jcole@main.burghcom.com
|
||||||
jcole@tetra.spaceapes.com
|
jcole@tetra.spaceapes.com
|
||||||
miguel@light.local
|
miguel@light.local
|
||||||
|
monty@bitch.mysql.fi
|
||||||
monty@donna.mysql.fi
|
monty@donna.mysql.fi
|
||||||
monty@hundin.mysql.fi
|
monty@hundin.mysql.fi
|
||||||
monty@tik.mysql.fi
|
monty@tik.mysql.fi
|
||||||
@ -17,6 +18,7 @@ paul@teton.kitebird.com
|
|||||||
root@x3.internalnet
|
root@x3.internalnet
|
||||||
sasha@mysql.sashanet.com
|
sasha@mysql.sashanet.com
|
||||||
serg@serg.mysql.com
|
serg@serg.mysql.com
|
||||||
|
tim@bitch.mysql.fi
|
||||||
tim@black.box
|
tim@black.box
|
||||||
tim@hundin.mysql.fi
|
tim@hundin.mysql.fi
|
||||||
tim@threads.polyesthetic.msg
|
tim@threads.polyesthetic.msg
|
||||||
|
432
acinclude.m4
432
acinclude.m4
@ -1299,3 +1299,435 @@ AC_DEFUN(AC_SYS_LARGEFILE,
|
|||||||
esac])
|
esac])
|
||||||
fi
|
fi
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*-
|
||||||
|
## Copyright (C) 1996-1999 Free Software Foundation, Inc.
|
||||||
|
## Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||||
|
##
|
||||||
|
## This program is free software; you can redistribute it and/or modify
|
||||||
|
## it under the terms of the GNU General Public License as published by
|
||||||
|
## the Free Software Foundation; either version 2 of the License, or
|
||||||
|
## (at your option) any later version.
|
||||||
|
##
|
||||||
|
## This program is distributed in the hope that it will be useful, but
|
||||||
|
## WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
## General Public License for more details.
|
||||||
|
##
|
||||||
|
## You should have received a copy of the GNU General Public License
|
||||||
|
## along with this program; if not, write to the Free Software
|
||||||
|
## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
##
|
||||||
|
## As a special exception to the GNU General Public License, if you
|
||||||
|
## distribute this file as part of a program that contains a
|
||||||
|
## configuration script generated by Autoconf, you may include it under
|
||||||
|
## the same distribution terms that you use for the rest of that program.
|
||||||
|
|
||||||
|
# serial 40 AC_PROG_LIBTOOL
|
||||||
|
AC_DEFUN(AC_PROG_LIBTOOL,
|
||||||
|
[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
|
||||||
|
|
||||||
|
# Save cache, so that ltconfig can load it
|
||||||
|
AC_CACHE_SAVE
|
||||||
|
|
||||||
|
# Actually configure libtool. ac_aux_dir is where install-sh is found.
|
||||||
|
CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \
|
||||||
|
LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \
|
||||||
|
LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \
|
||||||
|
DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \
|
||||||
|
${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \
|
||||||
|
$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \
|
||||||
|
|| AC_MSG_ERROR([libtool configure failed])
|
||||||
|
|
||||||
|
# Reload cache, that may have been modified by ltconfig
|
||||||
|
AC_CACHE_LOAD
|
||||||
|
|
||||||
|
# This can be used to rebuild libtool when needed
|
||||||
|
LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh"
|
||||||
|
|
||||||
|
# Always use our own libtool.
|
||||||
|
LIBTOOL='$(SHELL) $(top_builddir)/libtool'
|
||||||
|
AC_SUBST(LIBTOOL)dnl
|
||||||
|
|
||||||
|
# Redirect the config.log output again, so that the ltconfig log is not
|
||||||
|
# clobbered by the next message.
|
||||||
|
exec 5>>./config.log
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN(AC_LIBTOOL_SETUP,
|
||||||
|
[AC_PREREQ(2.13)dnl
|
||||||
|
AC_REQUIRE([AC_ENABLE_SHARED])dnl
|
||||||
|
AC_REQUIRE([AC_ENABLE_STATIC])dnl
|
||||||
|
AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||||
|
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_RANLIB])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_CC])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_LD])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_NM])dnl
|
||||||
|
AC_REQUIRE([AC_PROG_LN_S])dnl
|
||||||
|
dnl
|
||||||
|
|
||||||
|
case "$target" in
|
||||||
|
NONE) lt_target="$host" ;;
|
||||||
|
*) lt_target="$target" ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Check for any special flags to pass to ltconfig.
|
||||||
|
libtool_flags="--cache-file=$cache_file"
|
||||||
|
test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared"
|
||||||
|
test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static"
|
||||||
|
test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install"
|
||||||
|
test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc"
|
||||||
|
test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld"
|
||||||
|
ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN],
|
||||||
|
[libtool_flags="$libtool_flags --enable-dlopen"])
|
||||||
|
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
|
||||||
|
[libtool_flags="$libtool_flags --enable-win32-dll"])
|
||||||
|
AC_ARG_ENABLE(libtool-lock,
|
||||||
|
[ --disable-libtool-lock avoid locking (might break parallel builds)])
|
||||||
|
test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock"
|
||||||
|
test x"$silent" = xyes && libtool_flags="$libtool_flags --silent"
|
||||||
|
|
||||||
|
# Some flags need to be propagated to the compiler or linker for good
|
||||||
|
# libtool support.
|
||||||
|
case "$lt_target" in
|
||||||
|
*-*-irix6*)
|
||||||
|
# Find out which ABI we are using.
|
||||||
|
echo '[#]line __oline__ "configure"' > conftest.$ac_ext
|
||||||
|
if AC_TRY_EVAL(ac_compile); then
|
||||||
|
case "`/usr/bin/file conftest.o`" in
|
||||||
|
*32-bit*)
|
||||||
|
LD="${LD-ld} -32"
|
||||||
|
;;
|
||||||
|
*N32*)
|
||||||
|
LD="${LD-ld} -n32"
|
||||||
|
;;
|
||||||
|
*64-bit*)
|
||||||
|
LD="${LD-ld} -64"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
rm -rf conftest*
|
||||||
|
;;
|
||||||
|
|
||||||
|
*-*-sco3.2v5*)
|
||||||
|
# On SCO OpenServer 5, we need -belf to get full-featured binaries.
|
||||||
|
SAVE_CFLAGS="$CFLAGS"
|
||||||
|
CFLAGS="$CFLAGS -belf"
|
||||||
|
AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
|
||||||
|
[AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])])
|
||||||
|
if test x"$lt_cv_cc_needs_belf" != x"yes"; then
|
||||||
|
# this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
|
||||||
|
CFLAGS="$SAVE_CFLAGS"
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
|
||||||
|
ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
|
||||||
|
[*-*-cygwin* | *-*-mingw*)
|
||||||
|
AC_CHECK_TOOL(DLLTOOL, dlltool, false)
|
||||||
|
AC_CHECK_TOOL(AS, as, false)
|
||||||
|
AC_CHECK_TOOL(OBJDUMP, objdump, false)
|
||||||
|
;;
|
||||||
|
])
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
|
||||||
|
AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
|
||||||
|
|
||||||
|
# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
|
||||||
|
AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
|
||||||
|
|
||||||
|
# AC_ENABLE_SHARED - implement the --enable-shared flag
|
||||||
|
# Usage: AC_ENABLE_SHARED[(DEFAULT)]
|
||||||
|
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||||
|
# `yes'.
|
||||||
|
AC_DEFUN(AC_ENABLE_SHARED, [dnl
|
||||||
|
define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||||
|
AC_ARG_ENABLE(shared,
|
||||||
|
changequote(<<, >>)dnl
|
||||||
|
<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
|
||||||
|
changequote([, ])dnl
|
||||||
|
[p=${PACKAGE-default}
|
||||||
|
case "$enableval" in
|
||||||
|
yes) enable_shared=yes ;;
|
||||||
|
no) enable_shared=no ;;
|
||||||
|
*)
|
||||||
|
enable_shared=no
|
||||||
|
# Look at the argument we got. We use all the common list separators.
|
||||||
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
||||||
|
for pkg in $enableval; do
|
||||||
|
if test "X$pkg" = "X$p"; then
|
||||||
|
enable_shared=yes
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$ac_save_ifs"
|
||||||
|
;;
|
||||||
|
esac],
|
||||||
|
enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
|
||||||
|
AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
|
AC_ENABLE_SHARED(no)])
|
||||||
|
|
||||||
|
# AC_ENABLE_STATIC - implement the --enable-static flag
|
||||||
|
# Usage: AC_ENABLE_STATIC[(DEFAULT)]
|
||||||
|
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||||
|
# `yes'.
|
||||||
|
AC_DEFUN(AC_ENABLE_STATIC, [dnl
|
||||||
|
define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||||
|
AC_ARG_ENABLE(static,
|
||||||
|
changequote(<<, >>)dnl
|
||||||
|
<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
|
||||||
|
changequote([, ])dnl
|
||||||
|
[p=${PACKAGE-default}
|
||||||
|
case "$enableval" in
|
||||||
|
yes) enable_static=yes ;;
|
||||||
|
no) enable_static=no ;;
|
||||||
|
*)
|
||||||
|
enable_static=no
|
||||||
|
# Look at the argument we got. We use all the common list separators.
|
||||||
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
||||||
|
for pkg in $enableval; do
|
||||||
|
if test "X$pkg" = "X$p"; then
|
||||||
|
enable_static=yes
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$ac_save_ifs"
|
||||||
|
;;
|
||||||
|
esac],
|
||||||
|
enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_DISABLE_STATIC - set the default static flag to --disable-static
|
||||||
|
AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
|
AC_ENABLE_STATIC(no)])
|
||||||
|
|
||||||
|
|
||||||
|
# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
|
||||||
|
# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
|
||||||
|
# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to
|
||||||
|
# `yes'.
|
||||||
|
AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl
|
||||||
|
define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
|
||||||
|
AC_ARG_ENABLE(fast-install,
|
||||||
|
changequote(<<, >>)dnl
|
||||||
|
<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
|
||||||
|
changequote([, ])dnl
|
||||||
|
[p=${PACKAGE-default}
|
||||||
|
case "$enableval" in
|
||||||
|
yes) enable_fast_install=yes ;;
|
||||||
|
no) enable_fast_install=no ;;
|
||||||
|
*)
|
||||||
|
enable_fast_install=no
|
||||||
|
# Look at the argument we got. We use all the common list separators.
|
||||||
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
|
||||||
|
for pkg in $enableval; do
|
||||||
|
if test "X$pkg" = "X$p"; then
|
||||||
|
enable_fast_install=yes
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$ac_save_ifs"
|
||||||
|
;;
|
||||||
|
esac],
|
||||||
|
enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install
|
||||||
|
AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
|
AC_ENABLE_FAST_INSTALL(no)])
|
||||||
|
|
||||||
|
# AC_PROG_LD - find the path to the GNU or non-GNU linker
|
||||||
|
AC_DEFUN(AC_PROG_LD,
|
||||||
|
[AC_ARG_WITH(gnu-ld,
|
||||||
|
[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]],
|
||||||
|
test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
|
||||||
|
AC_REQUIRE([AC_PROG_CC])dnl
|
||||||
|
AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||||
|
AC_REQUIRE([AC_CANONICAL_BUILD])dnl
|
||||||
|
ac_prog=ld
|
||||||
|
if test "$ac_cv_prog_gcc" = yes; then
|
||||||
|
# Check if gcc -print-prog-name=ld gives a path.
|
||||||
|
AC_MSG_CHECKING([for ld used by GCC])
|
||||||
|
ac_prog=`($CC -print-prog-name=ld) 2>&5`
|
||||||
|
case "$ac_prog" in
|
||||||
|
# Accept absolute paths.
|
||||||
|
changequote(,)dnl
|
||||||
|
[\\/]* | [A-Za-z]:[\\/]*)
|
||||||
|
re_direlt='/[^/][^/]*/\.\./'
|
||||||
|
changequote([,])dnl
|
||||||
|
# Canonicalize the path of ld
|
||||||
|
ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
|
||||||
|
while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
|
||||||
|
ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
|
||||||
|
done
|
||||||
|
test -z "$LD" && LD="$ac_prog"
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
# If it fails, then pretend we aren't using GCC.
|
||||||
|
ac_prog=ld
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# If it is relative, then search for the first ld in PATH.
|
||||||
|
with_gnu_ld=unknown
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
elif test "$with_gnu_ld" = yes; then
|
||||||
|
AC_MSG_CHECKING([for GNU ld])
|
||||||
|
else
|
||||||
|
AC_MSG_CHECKING([for non-GNU ld])
|
||||||
|
fi
|
||||||
|
AC_CACHE_VAL(ac_cv_path_LD,
|
||||||
|
[if test -z "$LD"; then
|
||||||
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||||
|
for ac_dir in $PATH; do
|
||||||
|
test -z "$ac_dir" && ac_dir=.
|
||||||
|
if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
|
||||||
|
ac_cv_path_LD="$ac_dir/$ac_prog"
|
||||||
|
# Check to see if the program is GNU ld. I'd rather use --version,
|
||||||
|
# but apparently some GNU ld's only accept -v.
|
||||||
|
# Break only if it was the GNU/non-GNU ld that we prefer.
|
||||||
|
if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
|
||||||
|
test "$with_gnu_ld" != no && break
|
||||||
|
else
|
||||||
|
test "$with_gnu_ld" != yes && break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$ac_save_ifs"
|
||||||
|
else
|
||||||
|
ac_cv_path_LD="$LD" # Let the user override the test with a path.
|
||||||
|
fi])
|
||||||
|
LD="$ac_cv_path_LD"
|
||||||
|
if test -n "$LD"; then
|
||||||
|
AC_MSG_RESULT($LD)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
|
||||||
|
AC_PROG_LD_GNU
|
||||||
|
])
|
||||||
|
|
||||||
|
AC_DEFUN(AC_PROG_LD_GNU,
|
||||||
|
[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld,
|
||||||
|
[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
|
||||||
|
if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
|
||||||
|
ac_cv_prog_gnu_ld=yes
|
||||||
|
else
|
||||||
|
ac_cv_prog_gnu_ld=no
|
||||||
|
fi])
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_PROG_NM - find the path to a BSD-compatible name lister
|
||||||
|
AC_DEFUN(AC_PROG_NM,
|
||||||
|
[AC_MSG_CHECKING([for BSD-compatible nm])
|
||||||
|
AC_CACHE_VAL(ac_cv_path_NM,
|
||||||
|
[if test -n "$NM"; then
|
||||||
|
# Let the user override the test.
|
||||||
|
ac_cv_path_NM="$NM"
|
||||||
|
else
|
||||||
|
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
|
||||||
|
for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
|
||||||
|
test -z "$ac_dir" && ac_dir=.
|
||||||
|
if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then
|
||||||
|
# Check to see if the nm accepts a BSD-compat flag.
|
||||||
|
# Adding the `sed 1q' prevents false positives on HP-UX, which says:
|
||||||
|
# nm: unknown option "B" ignored
|
||||||
|
if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
|
||||||
|
ac_cv_path_NM="$ac_dir/nm -B"
|
||||||
|
break
|
||||||
|
elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
|
||||||
|
ac_cv_path_NM="$ac_dir/nm -p"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but
|
||||||
|
continue # so that we can try to find one that supports BSD flags
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
IFS="$ac_save_ifs"
|
||||||
|
test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm
|
||||||
|
fi])
|
||||||
|
NM="$ac_cv_path_NM"
|
||||||
|
AC_MSG_RESULT([$NM])
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_CHECK_LIBM - check for math library
|
||||||
|
AC_DEFUN(AC_CHECK_LIBM,
|
||||||
|
[AC_REQUIRE([AC_CANONICAL_HOST])dnl
|
||||||
|
LIBM=
|
||||||
|
case "$lt_target" in
|
||||||
|
*-*-beos* | *-*-cygwin*)
|
||||||
|
# These system don't have libm
|
||||||
|
;;
|
||||||
|
*-ncr-sysv4.3*)
|
||||||
|
AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
|
||||||
|
AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_CHECK_LIB(m, main, LIBM="-lm")
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
|
||||||
|
# the libltdl convenience library, adds --enable-ltdl-convenience to
|
||||||
|
# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor
|
||||||
|
# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed
|
||||||
|
# to be `${top_builddir}/libltdl'. Make sure you start DIR with
|
||||||
|
# '${top_builddir}/' (note the single quotes!) if your package is not
|
||||||
|
# flat, and, if you're not using automake, define top_builddir as
|
||||||
|
# appropriate in the Makefiles.
|
||||||
|
AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
|
case "$enable_ltdl_convenience" in
|
||||||
|
no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
|
||||||
|
"") enable_ltdl_convenience=yes
|
||||||
|
ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
|
||||||
|
esac
|
||||||
|
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdlc.la
|
||||||
|
INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
|
||||||
|
])
|
||||||
|
|
||||||
|
# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
|
||||||
|
# the libltdl installable library, and adds --enable-ltdl-install to
|
||||||
|
# the configure arguments. Note that LIBLTDL is not AC_SUBSTed, nor
|
||||||
|
# is AC_CONFIG_SUBDIRS called. If DIR is not provided, it is assumed
|
||||||
|
# to be `${top_builddir}/libltdl'. Make sure you start DIR with
|
||||||
|
# '${top_builddir}/' (note the single quotes!) if your package is not
|
||||||
|
# flat, and, if you're not using automake, define top_builddir as
|
||||||
|
# appropriate in the Makefiles.
|
||||||
|
# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
|
||||||
|
AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
|
||||||
|
AC_CHECK_LIB(ltdl, main,
|
||||||
|
[test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
|
||||||
|
[if test x"$enable_ltdl_install" = xno; then
|
||||||
|
AC_MSG_WARN([libltdl not installed, but installation disabled])
|
||||||
|
else
|
||||||
|
enable_ltdl_install=yes
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
if test x"$enable_ltdl_install" = x"yes"; then
|
||||||
|
ac_configure_args="$ac_configure_args --enable-ltdl-install"
|
||||||
|
LIBLTDL=ifelse($#,1,$1,['${top_builddir}/libltdl'])/libltdl.la
|
||||||
|
INCLTDL=ifelse($#,1,-I$1,['-I${top_builddir}/libltdl'])
|
||||||
|
else
|
||||||
|
ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
|
||||||
|
LIBLTDL="-lltdl"
|
||||||
|
INCLTDL=
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
|
dnl old names
|
||||||
|
AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl
|
||||||
|
AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl
|
||||||
|
AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl
|
||||||
|
AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl
|
||||||
|
AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl
|
||||||
|
AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl
|
||||||
|
AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl
|
||||||
|
|
||||||
|
dnl This is just to silence aclocal about the macro not being used
|
||||||
|
ifelse([AC_DISABLE_FAST_INSTALL])dnl
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
/* DO NOT EDIT: automatically built by dist/s_include. */
|
|
||||||
#ifndef _rpc_client_ext_h_
|
|
||||||
#define _rpc_client_ext_h_
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
int __dbcl_envserver __P((DB_ENV *, char *, long, long, u_int32_t));
|
|
||||||
int __dbcl_refresh __P((DB_ENV *));
|
|
||||||
int __dbcl_txn_close __P((DB_ENV *));
|
|
||||||
void __dbcl_txn_end __P((DB_TXN *));
|
|
||||||
int __dbcl_c_destroy __P((DBC *));
|
|
||||||
void __dbcl_c_refresh __P((DBC *));
|
|
||||||
int __dbcl_c_setup __P((long, DB *, DBC **));
|
|
||||||
int __dbcl_retcopy __P((DB_ENV *, DBT *, void *, u_int32_t));
|
|
||||||
int __dbcl_dbclose_common __P((DB *));
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
#endif /* _rpc_client_ext_h_ */
|
|
@ -137,7 +137,7 @@ the mysql command line client\n\n");
|
|||||||
-o, --offset=N Skip the first N entries\n\
|
-o, --offset=N Skip the first N entries\n\
|
||||||
-h, --host=server Get the binlog from server\n\
|
-h, --host=server Get the binlog from server\n\
|
||||||
-P, --port=port Use port to connect to the remote server\n\
|
-P, --port=port Use port to connect to the remote server\n\
|
||||||
-u, --user=username Connect to the remove server as username\n\
|
-u, --user=username Connect to the remote server as username\n\
|
||||||
-p, --password=password Password to connect to remote server\n\
|
-p, --password=password Password to connect to remote server\n\
|
||||||
-r, --result-file=file Direct output to a given file\n\
|
-r, --result-file=file Direct output to a given file\n\
|
||||||
-j, --position=N Start reading the binlog at position N\n\
|
-j, --position=N Start reading the binlog at position N\n\
|
||||||
@ -467,4 +467,8 @@ int main(int argc, char** argv)
|
|||||||
the server
|
the server
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef __WIN__
|
||||||
|
#include "log_event.cpp"
|
||||||
|
#else
|
||||||
#include "log_event.cc"
|
#include "log_event.cc"
|
||||||
|
#endif
|
||||||
|
@ -226,6 +226,8 @@ void hash_password(unsigned long *result, const char *password);
|
|||||||
void my_init(void);
|
void my_init(void);
|
||||||
void load_defaults(const char *conf_file, const char **groups,
|
void load_defaults(const char *conf_file, const char **groups,
|
||||||
int *argc, char ***argv);
|
int *argc, char ***argv);
|
||||||
|
my_bool my_thread_init(void);
|
||||||
|
void my_thread_end(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -216,4 +216,5 @@
|
|||||||
#define ER_ERROR_WHEN_EXECUTING_COMMAND 1213
|
#define ER_ERROR_WHEN_EXECUTING_COMMAND 1213
|
||||||
#define ER_WRONG_USAGE 1214
|
#define ER_WRONG_USAGE 1214
|
||||||
#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1215
|
#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1215
|
||||||
#define ER_ERROR_MESSAGES 216
|
#define ER_NO_PERSMISSION_TO_CREATE_USER 1216
|
||||||
|
#define ER_ERROR_MESSAGES 217
|
||||||
|
@ -10,6 +10,7 @@ Created 11/11/1995 Heikki Tuuri
|
|||||||
|
|
||||||
#ifdef UNIV_NONINL
|
#ifdef UNIV_NONINL
|
||||||
#include "buf0flu.ic"
|
#include "buf0flu.ic"
|
||||||
|
#include "trx0sys.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "ut0byte.h"
|
#include "ut0byte.h"
|
||||||
|
@ -9,12 +9,10 @@ Created 1/20/1994 Heikki Tuuri
|
|||||||
#ifndef univ_i
|
#ifndef univ_i
|
||||||
#define univ_i
|
#define univ_i
|
||||||
|
|
||||||
#if (defined(_WIN32) || defined(_WIN64))
|
#if (defined(_WIN32) || defined(_WIN64)) && !defined(MYSQL_SERVER)
|
||||||
#define __WIN__
|
#define __WIN__
|
||||||
|
|
||||||
#ifndef MYSQL_SERVER
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
/* If you want to check for errors with compiler level -W4,
|
/* If you want to check for errors with compiler level -W4,
|
||||||
comment out the above include of windows.h and let the following defines
|
comment out the above include of windows.h and let the following defines
|
||||||
|
@ -167,3 +167,9 @@ a sec_to_time(sum(time_to_sec(t)))
|
|||||||
a sec_to_time(sum(time_to_sec(t)))
|
a sec_to_time(sum(time_to_sec(t)))
|
||||||
1 00:06:15
|
1 00:06:15
|
||||||
1 00:36:30
|
1 00:36:30
|
||||||
|
a
|
||||||
|
4
|
||||||
|
3
|
||||||
|
a c
|
||||||
|
4 NULL
|
||||||
|
3 NULL
|
||||||
|
2
mysql-test/r/fulltext_update.result
Normal file
2
mysql-test/r/fulltext_update.result
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.test check status OK
|
@ -438,7 +438,7 @@ hello 1
|
|||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 optimize error The handler for the table doesn't support check/repair
|
test.t1 optimize error The handler for the table doesn't support check/repair
|
||||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
|
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Comment
|
||||||
t1 0 PRIMARY 1 a A 1 NULL NULL
|
t1 0 PRIMARY 1 a A 2 NULL NULL
|
||||||
i j
|
i j
|
||||||
1 2
|
1 2
|
||||||
i j
|
i j
|
||||||
|
@ -198,3 +198,12 @@ insert into t2 values (1,1),(2,2),(3,3);
|
|||||||
select t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
|
select t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
|
||||||
select distinct t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
|
select distinct t1.a,sec_to_time(sum(time_to_sec(t))) from t1 left join t2 on (t1.b=t2.a) group by t1.a,t2.b;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test problem with DISTINCT and HAVING
|
||||||
|
#
|
||||||
|
create table t1 (a int not null,b char(5), c text);
|
||||||
|
insert into t1 (a) values (1),(2),(3),(4),(1),(2),(3),(4);
|
||||||
|
select distinct a from t1 group by b,a having a > 2 order by a desc;
|
||||||
|
select distinct a,c from t1 group by b,c,a having a > 2 order by a desc;
|
||||||
|
drop table t1;
|
||||||
|
25
mysql-test/t/fulltext_update.test
Normal file
25
mysql-test/t/fulltext_update.test
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
#
|
||||||
|
# Test for bug by voi@ims.at
|
||||||
|
#
|
||||||
|
|
||||||
|
drop table if exists test;
|
||||||
|
CREATE TABLE test (
|
||||||
|
gnr INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
url VARCHAR(80) DEFAULT '' NOT NULL,
|
||||||
|
shortdesc VARCHAR(200) DEFAULT '' NOT NULL,
|
||||||
|
longdesc text DEFAULT '' NOT NULL,
|
||||||
|
description VARCHAR(80) DEFAULT '' NOT NULL,
|
||||||
|
name VARCHAR(80) DEFAULT '' NOT NULL,
|
||||||
|
FULLTEXT(url,description,shortdesc,longdesc),
|
||||||
|
PRIMARY KEY(gnr)
|
||||||
|
);
|
||||||
|
|
||||||
|
insert into test (url,shortdesc,longdesc,description,name) VALUES
|
||||||
|
("http:/test.at", "kurz", "lang","desc", "name");
|
||||||
|
insert into test (url,shortdesc,longdesc,description,name) VALUES
|
||||||
|
("http:/test.at", "kurz", "","desc", "name");
|
||||||
|
update test set url='test', description='ddd', name='nam' where gnr=2;
|
||||||
|
update test set url='test', shortdesc='ggg', longdesc='mmm',
|
||||||
|
description='ddd', name='nam' where gnr=2;
|
||||||
|
check table test;
|
||||||
|
drop table test;
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
# Original version by Tim Bunce, sometime in 2000.
|
# Original version by Tim Bunce, sometime in 2000.
|
||||||
# Further changes by Tim Bunce, 8th March 2001.
|
# Further changes by Tim Bunce, 8th March 2001.
|
||||||
|
# Handling of strings with \ and double '' by Monty 11 Aug 2001.
|
||||||
|
|
||||||
use strict;
|
use strict;
|
||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
@ -95,8 +96,8 @@ while ( defined($_ = shift @pending) or defined($_ = <>) ) {
|
|||||||
unless ($opt{a}) {
|
unless ($opt{a}) {
|
||||||
s/\b\d+\b/N/g;
|
s/\b\d+\b/N/g;
|
||||||
s/\b0x[0-9A-Fa-f]+\b/N/g;
|
s/\b0x[0-9A-Fa-f]+\b/N/g;
|
||||||
s/'.*?'/'S'/g;
|
s/'([^\\\']|\\.|\'\')+'/'S'/g;
|
||||||
s/".*?"/"S"/g;
|
s/"([^\\\"]|\\.|\"\")+"/"S"/g;
|
||||||
# -n=8: turn log_20001231 into log_NNNNNNNN
|
# -n=8: turn log_20001231 into log_NNNNNNNN
|
||||||
s/([a-z_]+)(\d{$opt{n},})/$1.('N' x length($2))/ieg if $opt{n};
|
s/([a-z_]+)(\d{$opt{n},})/$1.('N' x length($2))/ieg if $opt{n};
|
||||||
# abbreviate massive "in (...)" statements and similar
|
# abbreviate massive "in (...)" statements and similar
|
||||||
|
@ -37,12 +37,12 @@ dist-hook:
|
|||||||
mkdir -p $(distdir)/Data/ATIS $(distdir)/Data/Wisconsin \
|
mkdir -p $(distdir)/Data/ATIS $(distdir)/Data/Wisconsin \
|
||||||
$(distdir)/Results $(distdir)/Results-win32 \
|
$(distdir)/Results $(distdir)/Results-win32 \
|
||||||
$(distdir)/limits $(distdir)/Comments
|
$(distdir)/limits $(distdir)/Comments
|
||||||
$(INSTALL_DATA) $(srcdir)/Data/ATIS/*.* $(distdir)/Data/ATIS
|
for i in $(srcdir)/Data/ATIS/*.* ; do $(INSTALL_DATA) $$i $(distdir)/Data/ATIS ; done
|
||||||
$(INSTALL_DATA) $(srcdir)/Data/Wisconsin/*.* $(distdir)/Data/Wisconsin
|
for i in $(srcdir)/Data/Wisconsin/*.* ; do $(INSTALL_DATA) $$i $(distdir)/Data/Wisconsin ; done
|
||||||
$(INSTALL_DATA) $(srcdir)/Results/*-* $(distdir)/Results
|
for i in $(srcdir)/Results/*-* ; do $(INSTALL_DATA) $$i $(distdir)/Results; done
|
||||||
$(INSTALL_DATA) $(srcdir)/Results-win32/*-* $(distdir)/Results-win32
|
for i in $(srcdir)/Results-win32/*-* ; do $(INSTALL_DATA) $$i $(distdir)/Results-win32; done
|
||||||
$(INSTALL_DATA) $(srcdir)/limits/*.* $(distdir)/limits
|
for i in $(srcdir)/limits/*.* ; do $(INSTALL_DATA) $$i $(distdir)/limits; done
|
||||||
$(INSTALL_DATA) $(srcdir)/Comments/*.* $(distdir)/Comments
|
for i in $(srcdir)/Comments/*.* ; do $(INSTALL_DATA) $$i $(distdir)/Comments; done
|
||||||
|
|
||||||
install-data-local:
|
install-data-local:
|
||||||
$(mkinstalldirs) \
|
$(mkinstalldirs) \
|
||||||
@ -54,12 +54,13 @@ install-data-local:
|
|||||||
$(DESTDIR)$(benchdir)/limits \
|
$(DESTDIR)$(benchdir)/limits \
|
||||||
$(DESTDIR)$(benchdir)/Comments
|
$(DESTDIR)$(benchdir)/Comments
|
||||||
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(benchdir)
|
$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(benchdir)
|
||||||
$(INSTALL_DATA) $(srcdir)/Data/ATIS/*.* $(DESTDIR)$(benchdir)/Data/ATIS
|
for i in $(srcdir)/Data/ATIS/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/Data/ATIS ; done
|
||||||
$(INSTALL_DATA) $(srcdir)/Data/Wisconsin/*.* $(DESTDIR)$(benchdir)/Data/Wisconsin
|
for i in $(srcdir)/Data/Wisconsin/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/Data/Wisconsin ; done
|
||||||
$(INSTALL_DATA) $(srcdir)/Results/*-* $(DESTDIR)$(benchdir)/Results
|
for i in $(srcdir)/Results/*-* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/Results; done
|
||||||
$(INSTALL_DATA) $(srcdir)/Results-win32/*-* $(DESTDIR)$(benchdir)/Results-win32
|
for i in $(srcdir)/Results-win32/*-* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/Results-win32; done
|
||||||
$(INSTALL_DATA) $(srcdir)/limits/*.* $(DESTDIR)$(benchdir)/limits
|
for i in $(srcdir)/limits/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/limits; done
|
||||||
$(INSTALL_DATA) $(srcdir)/Comments/*.* $(DESTDIR)$(benchdir)/Comments
|
for i in $(srcdir)/Comments/*.* ; do $(INSTALL_DATA) $$i $(DESTDIR)$(benchdir)/Comments; done
|
||||||
|
|
||||||
|
|
||||||
SUFFIXES = .sh
|
SUFFIXES = .sh
|
||||||
|
|
||||||
|
@ -229,6 +229,7 @@ void ha_myisammrg::update_create_info(HA_CREATE_INFO *create_info)
|
|||||||
MYRG_TABLE *table;
|
MYRG_TABLE *table;
|
||||||
THD *thd=current_thd;
|
THD *thd=current_thd;
|
||||||
create_info->merge_list.next= &create_info->merge_list.first;
|
create_info->merge_list.next= &create_info->merge_list.first;
|
||||||
|
create_info->merge_list.elements=0;
|
||||||
|
|
||||||
for (table=file->open_tables ; table != file->end_table ; table++)
|
for (table=file->open_tables ; table != file->end_table ; table++)
|
||||||
{
|
{
|
||||||
@ -240,6 +241,7 @@ void ha_myisammrg::update_create_info(HA_CREATE_INFO *create_info)
|
|||||||
fn_format(buff,name,"","",3);
|
fn_format(buff,name,"","",3);
|
||||||
if (!(ptr->real_name=thd->strdup(buff)))
|
if (!(ptr->real_name=thd->strdup(buff)))
|
||||||
goto err;
|
goto err;
|
||||||
|
create_info->merge_list.elements++;
|
||||||
(*create_info->merge_list.next) = (byte*) ptr;
|
(*create_info->merge_list.next) = (byte*) ptr;
|
||||||
create_info->merge_list.next= (byte**) &ptr->next;
|
create_info->merge_list.next= (byte**) &ptr->next;
|
||||||
}
|
}
|
||||||
|
@ -1532,9 +1532,13 @@ static void open_log(MYSQL_LOG *log, const char *hostname,
|
|||||||
// get rid of extention if the log is binary to avoid problems
|
// get rid of extention if the log is binary to avoid problems
|
||||||
if (type == LOG_BIN)
|
if (type == LOG_BIN)
|
||||||
{
|
{
|
||||||
char* p = strrchr((char*) opt_name, FN_EXTCHAR);
|
char *p = fn_ext(opt_name);
|
||||||
if (p)
|
if (p)
|
||||||
*p = 0;
|
{
|
||||||
|
uint length=(uint) (p-opt_name);
|
||||||
|
strmake(tmp,opt_name,min(length,FN_REFLEN));
|
||||||
|
opt_name=tmp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
log->open(opt_name,type);
|
log->open(opt_name,type);
|
||||||
}
|
}
|
||||||
@ -2818,6 +2822,8 @@ CHANGEABLE_VAR changeable_vars[] = {
|
|||||||
0, MALLOC_OVERHEAD, (long) ~0, MALLOC_OVERHEAD, IO_SIZE },
|
0, MALLOC_OVERHEAD, (long) ~0, MALLOC_OVERHEAD, IO_SIZE },
|
||||||
{ "record_buffer", (long*) &my_default_record_cache_size,
|
{ "record_buffer", (long*) &my_default_record_cache_size,
|
||||||
128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE },
|
128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE },
|
||||||
|
{ "record_rnd_buffer", (long*) &record_rnd_cache_size,
|
||||||
|
0, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE },
|
||||||
{ "slave_net_timeout", (long*) &slave_net_timeout,
|
{ "slave_net_timeout", (long*) &slave_net_timeout,
|
||||||
SLAVE_NET_TIMEOUT, 1, 65535, 0, 1 },
|
SLAVE_NET_TIMEOUT, 1, 65535, 0, 1 },
|
||||||
{ "slow_launch_time", (long*) &slow_launch_time,
|
{ "slow_launch_time", (long*) &slow_launch_time,
|
||||||
@ -2907,6 +2913,7 @@ struct show_var_st init_vars[]= {
|
|||||||
{"log_update", (char*) &opt_update_log, SHOW_BOOL},
|
{"log_update", (char*) &opt_update_log, SHOW_BOOL},
|
||||||
{"log_bin", (char*) &opt_bin_log, SHOW_BOOL},
|
{"log_bin", (char*) &opt_bin_log, SHOW_BOOL},
|
||||||
{"log_slave_updates", (char*) &opt_log_slave_updates, SHOW_BOOL},
|
{"log_slave_updates", (char*) &opt_log_slave_updates, SHOW_BOOL},
|
||||||
|
{"log_long_queries", (char*) &opt_slow_log, SHOW_BOOL},
|
||||||
{"long_query_time", (char*) &long_query_time, SHOW_LONG},
|
{"long_query_time", (char*) &long_query_time, SHOW_LONG},
|
||||||
{"low_priority_updates", (char*) &low_priority_updates, SHOW_BOOL},
|
{"low_priority_updates", (char*) &low_priority_updates, SHOW_BOOL},
|
||||||
{"lower_case_table_names", (char*) &lower_case_table_names, SHOW_LONG},
|
{"lower_case_table_names", (char*) &lower_case_table_names, SHOW_LONG},
|
||||||
@ -2937,6 +2944,7 @@ struct show_var_st init_vars[]= {
|
|||||||
{"port", (char*) &mysql_port, SHOW_INT},
|
{"port", (char*) &mysql_port, SHOW_INT},
|
||||||
{"protocol_version", (char*) &protocol_version, SHOW_INT},
|
{"protocol_version", (char*) &protocol_version, SHOW_INT},
|
||||||
{"record_buffer", (char*) &my_default_record_cache_size,SHOW_LONG},
|
{"record_buffer", (char*) &my_default_record_cache_size,SHOW_LONG},
|
||||||
|
{"record_rnd_buffer", (char*) &record_rnd_cache_size, SHOW_LONG},
|
||||||
{"query_buffer_size", (char*) &query_buff_size, SHOW_LONG},
|
{"query_buffer_size", (char*) &query_buff_size, SHOW_LONG},
|
||||||
{"safe_show_database", (char*) &opt_safe_show_db, SHOW_BOOL},
|
{"safe_show_database", (char*) &opt_safe_show_db, SHOW_BOOL},
|
||||||
{"server_id", (char*) &server_id, SHOW_LONG},
|
{"server_id", (char*) &server_id, SHOW_LONG},
|
||||||
@ -2947,7 +2955,7 @@ struct show_var_st init_vars[]= {
|
|||||||
{"slow_launch_time", (char*) &slow_launch_time, SHOW_LONG},
|
{"slow_launch_time", (char*) &slow_launch_time, SHOW_LONG},
|
||||||
{"socket", (char*) &mysql_unix_port, SHOW_CHAR_PTR},
|
{"socket", (char*) &mysql_unix_port, SHOW_CHAR_PTR},
|
||||||
{"sort_buffer", (char*) &sortbuff_size, SHOW_LONG},
|
{"sort_buffer", (char*) &sortbuff_size, SHOW_LONG},
|
||||||
{"sql_mode", (char*) &sql_mode_str, SHOW_CHAR_PTR},
|
{"sql_mode", (char*) &opt_sql_mode, SHOW_LONG},
|
||||||
{"table_cache", (char*) &table_cache_size, SHOW_LONG},
|
{"table_cache", (char*) &table_cache_size, SHOW_LONG},
|
||||||
{"table_type", (char*) &default_table_type_name, SHOW_CHAR_PTR},
|
{"table_type", (char*) &default_table_type_name, SHOW_CHAR_PTR},
|
||||||
{"thread_cache_size", (char*) &thread_cache_size, SHOW_LONG},
|
{"thread_cache_size", (char*) &thread_cache_size, SHOW_LONG},
|
||||||
@ -3109,6 +3117,8 @@ static void usage(void)
|
|||||||
--safe-mode Skip some optimize stages (for testing)\n\
|
--safe-mode Skip some optimize stages (for testing)\n\
|
||||||
--safe-show-database Don't show databases for which the user has no\n\
|
--safe-show-database Don't show databases for which the user has no\n\
|
||||||
privileges\n\
|
privileges\n\
|
||||||
|
--safe-user-create Don't new users cretaion without privileges to the\n\
|
||||||
|
mysql.user table\n\
|
||||||
--skip-concurrent-insert\n\
|
--skip-concurrent-insert\n\
|
||||||
Don't use concurrent insert with MyISAM\n\
|
Don't use concurrent insert with MyISAM\n\
|
||||||
--skip-delay-key-write\n\
|
--skip-delay-key-write\n\
|
||||||
@ -3817,6 +3827,20 @@ static void get_options(int argc,char **argv)
|
|||||||
ha_open_options|=HA_OPEN_ABORT_IF_CRASHED;
|
ha_open_options|=HA_OPEN_ABORT_IF_CRASHED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case OPT_SQL_MODE:
|
||||||
|
{
|
||||||
|
sql_mode_str = optarg;
|
||||||
|
if ((opt_sql_mode =
|
||||||
|
find_bit_type(optarg, &sql_mode_typelib)) == ~(ulong) 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Unknown option to sql-mode: %s\n", optarg);
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
default_tx_isolation= ((opt_sql_mode & MODE_SERIALIZABLE) ?
|
||||||
|
ISO_SERIALIZABLE :
|
||||||
|
ISO_READ_COMMITTED);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case OPT_MASTER_HOST:
|
case OPT_MASTER_HOST:
|
||||||
master_host=optarg;
|
master_host=optarg;
|
||||||
break;
|
break;
|
||||||
@ -3850,6 +3874,9 @@ static void get_options(int argc,char **argv)
|
|||||||
case OPT_SAFE_SHOW_DB:
|
case OPT_SAFE_SHOW_DB:
|
||||||
opt_safe_show_db=1;
|
opt_safe_show_db=1;
|
||||||
break;
|
break;
|
||||||
|
case OPT_SAFE_USER_CREATE:
|
||||||
|
opt_safe_user_create=1;
|
||||||
|
break;
|
||||||
case OPT_SKIP_SAFEMALLOC:
|
case OPT_SKIP_SAFEMALLOC:
|
||||||
#ifdef SAFEMALLOC
|
#ifdef SAFEMALLOC
|
||||||
sf_malloc_quick=1;
|
sf_malloc_quick=1;
|
||||||
@ -3874,6 +3901,9 @@ static void get_options(int argc,char **argv)
|
|||||||
fix_paths();
|
fix_paths();
|
||||||
default_table_type_name=ha_table_typelib.type_names[default_table_type-1];
|
default_table_type_name=ha_table_typelib.type_names[default_table_type-1];
|
||||||
default_tx_isolation_name=tx_isolation_typelib.type_names[default_tx_isolation];
|
default_tx_isolation_name=tx_isolation_typelib.type_names[default_tx_isolation];
|
||||||
|
/* To be deleted in MySQL 4.0 */
|
||||||
|
if (!record_rnd_cache_size)
|
||||||
|
record_rnd_cache_size=my_default_record_cache_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -4149,7 +4179,7 @@ static int get_service_parameters()
|
|||||||
}
|
}
|
||||||
else if ( lstrcmp(szKeyValueName, TEXT("KeyBufferSize")) == 0 )
|
else if ( lstrcmp(szKeyValueName, TEXT("KeyBufferSize")) == 0 )
|
||||||
{
|
{
|
||||||
SET_CHANGEABLE_VARVAL( "key_buffer_size" );
|
SET_CHANGEABLE_VARVAL( "key_buffer" );
|
||||||
}
|
}
|
||||||
else if ( lstrcmp(szKeyValueName, TEXT("LongQueryTime")) == 0 )
|
else if ( lstrcmp(szKeyValueName, TEXT("LongQueryTime")) == 0 )
|
||||||
{
|
{
|
||||||
@ -4463,7 +4493,9 @@ static ulong find_bit_type(const char *x, TYPELIB *bit_lib)
|
|||||||
found=0;
|
found=0;
|
||||||
found_end= 0;
|
found_end= 0;
|
||||||
pos=(my_string) x;
|
pos=(my_string) x;
|
||||||
do
|
while (*pos == ' ') pos++;
|
||||||
|
found_end= *pos == 0;
|
||||||
|
while (!found_end)
|
||||||
{
|
{
|
||||||
if (!*(end=strcend(pos,','))) /* Let end point at fieldend */
|
if (!*(end=strcend(pos,','))) /* Let end point at fieldend */
|
||||||
{
|
{
|
||||||
@ -4496,7 +4528,7 @@ skipp: ;
|
|||||||
DBUG_RETURN(~(ulong) 0); // No unique value
|
DBUG_RETURN(~(ulong) 0); // No unique value
|
||||||
found|=found_int;
|
found|=found_int;
|
||||||
pos=end+1;
|
pos=end+1;
|
||||||
} while (! found_end);
|
}
|
||||||
|
|
||||||
DBUG_PRINT("exit",("bit-field: %ld",(ulong) found));
|
DBUG_PRINT("exit",("bit-field: %ld",(ulong) found));
|
||||||
DBUG_RETURN(found);
|
DBUG_RETURN(found);
|
||||||
|
@ -66,7 +66,7 @@ void init_read_record(READ_RECORD *info,THD *thd, TABLE *table,
|
|||||||
table->file->rnd_init(0);
|
table->file->rnd_init(0);
|
||||||
|
|
||||||
if (! (specialflag & SPECIAL_SAFE_MODE) &&
|
if (! (specialflag & SPECIAL_SAFE_MODE) &&
|
||||||
my_default_record_cache_size &&
|
record_rnd_cache_size &&
|
||||||
!table->file->fast_key_read() &&
|
!table->file->fast_key_read() &&
|
||||||
(table->db_stat & HA_READ_ONLY ||
|
(table->db_stat & HA_READ_ONLY ||
|
||||||
table->reginfo.lock_type <= TL_READ_NO_INSERT) &&
|
table->reginfo.lock_type <= TL_READ_NO_INSERT) &&
|
||||||
@ -216,7 +216,7 @@ static int init_rr_cache(READ_RECORD *info)
|
|||||||
info->reclength=ALIGN_SIZE(info->struct_length);
|
info->reclength=ALIGN_SIZE(info->struct_length);
|
||||||
|
|
||||||
info->error_offset=info->table->reclength;
|
info->error_offset=info->table->reclength;
|
||||||
info->cache_records=my_default_record_cache_size/
|
info->cache_records=record_rnd_cache_size/
|
||||||
(info->reclength+info->struct_length);
|
(info->reclength+info->struct_length);
|
||||||
rec_cache_size=info->cache_records*info->reclength;
|
rec_cache_size=info->cache_records*info->reclength;
|
||||||
info->rec_cache_size=info->cache_records*info->ref_length;
|
info->rec_cache_size=info->cache_records*info->ref_length;
|
||||||
|
@ -943,16 +943,41 @@ end:
|
|||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Return 1 if we are allowed to create new users */
|
||||||
|
|
||||||
|
static bool test_if_create_new_users(THD *thd)
|
||||||
|
{
|
||||||
|
bool create_new_users=1; // Assume that we are allowed to create new users
|
||||||
|
if (opt_safe_user_create && !(thd->master_access & INSERT_ACL))
|
||||||
|
{
|
||||||
|
TABLE_LIST tl;
|
||||||
|
uint db_access;
|
||||||
|
bzero((char*) &tl,sizeof(tl));
|
||||||
|
tl.db= (char*) "mysql";
|
||||||
|
tl.real_name= (char*) "user";
|
||||||
|
db_access=acl_get(thd->host, thd->ip, (char*) &thd->remote.sin_addr,
|
||||||
|
thd->priv_user, tl.db);
|
||||||
|
if (!(db_access & INSERT_ACL))
|
||||||
|
{
|
||||||
|
if (check_grant(thd,INSERT_ACL,&tl,0,1))
|
||||||
|
create_new_users=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return create_new_users;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
** Handle GRANT commands
|
** Handle GRANT commands
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
||||||
uint rights, char what)
|
uint rights, char what, bool create_user)
|
||||||
{
|
{
|
||||||
int error = -1;
|
int error = -1;
|
||||||
uint i,j;
|
uint i,j;
|
||||||
bool ima=0;
|
bool old_row_exists=0;
|
||||||
char *password,empty_string[1];
|
char *password,empty_string[1];
|
||||||
DBUG_ENTER("replace_user_table");
|
DBUG_ENTER("replace_user_table");
|
||||||
|
|
||||||
@ -971,14 +996,21 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
|||||||
(byte*) table->field[0]->ptr,0,
|
(byte*) table->field[0]->ptr,0,
|
||||||
HA_READ_KEY_EXACT))
|
HA_READ_KEY_EXACT))
|
||||||
{
|
{
|
||||||
if (what == 'N')
|
if (!create_user)
|
||||||
{
|
{
|
||||||
|
THD *thd=current_thd;
|
||||||
|
if (what == 'N')
|
||||||
my_printf_error(ER_NONEXISTING_GRANT,ER(ER_NONEXISTING_GRANT),
|
my_printf_error(ER_NONEXISTING_GRANT,ER(ER_NONEXISTING_GRANT),
|
||||||
MYF(0),combo.user.str,combo.host.str);
|
MYF(0),combo.user.str,combo.host.str);
|
||||||
|
else
|
||||||
|
my_printf_error(ER_NO_PERMISSON_TO_CREATE_USER,
|
||||||
|
ER(ER_NO_PERMISSON_TO_CREATE_USER),
|
||||||
|
MYF(0),thd->user,
|
||||||
|
thd->host ? thd->host : thd->ip ? thd->ip: "");
|
||||||
error= -1;
|
error= -1;
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
ima = 0; // no row; ima on Serbian means 'there is something'
|
old_row_exists = 0;
|
||||||
restore_record(table,2); // cp empty row from record[2]
|
restore_record(table,2); // cp empty row from record[2]
|
||||||
table->field[0]->store(combo.host.str,combo.host.length);
|
table->field[0]->store(combo.host.str,combo.host.length);
|
||||||
table->field[1]->store(combo.user.str,combo.user.length);
|
table->field[1]->store(combo.user.str,combo.user.length);
|
||||||
@ -986,7 +1018,7 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ima = 1;
|
old_row_exists = 1;
|
||||||
store_record(table,1); // Save copy for update
|
store_record(table,1); // Save copy for update
|
||||||
if (combo.password.str) // If password given
|
if (combo.password.str) // If password given
|
||||||
table->field[2]->store(password,(uint) strlen(password));
|
table->field[2]->store(password,(uint) strlen(password));
|
||||||
@ -1001,7 +1033,7 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
|||||||
}
|
}
|
||||||
rights=get_access(table,3);
|
rights=get_access(table,3);
|
||||||
|
|
||||||
if (ima) // there is a row, therefore go to update, instead of insert
|
if (old_row_exists)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
We should NEVER delete from the user table, as a uses can still
|
We should NEVER delete from the user table, as a uses can still
|
||||||
@ -1033,7 +1065,7 @@ static int replace_user_table(TABLE *table, const LEX_USER &combo,
|
|||||||
acl_cache->clear(1); // Clear privilege cache
|
acl_cache->clear(1); // Clear privilege cache
|
||||||
if (!combo.password.str)
|
if (!combo.password.str)
|
||||||
password=0; // No password given on command
|
password=0; // No password given on command
|
||||||
if (ima)
|
if (old_row_exists)
|
||||||
acl_update_user(combo.user.str,combo.host.str,password,rights);
|
acl_update_user(combo.user.str,combo.host.str,password,rights);
|
||||||
else
|
else
|
||||||
acl_insert_user(combo.user.str,combo.host.str,password,rights);
|
acl_insert_user(combo.user.str,combo.host.str,password,rights);
|
||||||
@ -1052,7 +1084,7 @@ static int replace_db_table(TABLE *table, const char *db,
|
|||||||
uint rights, char what)
|
uint rights, char what)
|
||||||
{
|
{
|
||||||
uint i,j,store_rights;
|
uint i,j,store_rights;
|
||||||
bool ima=0;
|
bool old_row_exists=0;
|
||||||
int error;
|
int error;
|
||||||
DBUG_ENTER("replace_db_table");
|
DBUG_ENTER("replace_db_table");
|
||||||
|
|
||||||
@ -1076,7 +1108,7 @@ static int replace_db_table(TABLE *table, const char *db,
|
|||||||
combo.user.str,combo.host.str);
|
combo.user.str,combo.host.str);
|
||||||
goto abort;
|
goto abort;
|
||||||
}
|
}
|
||||||
ima = 0; // no row
|
old_row_exists = 0;
|
||||||
restore_record(table,2); // cp empty row from record[2]
|
restore_record(table,2); // cp empty row from record[2]
|
||||||
table->field[0]->store(combo.host.str,combo.host.length);
|
table->field[0]->store(combo.host.str,combo.host.length);
|
||||||
table->field[1]->store(db,(uint) strlen(db));
|
table->field[1]->store(db,(uint) strlen(db));
|
||||||
@ -1084,7 +1116,7 @@ static int replace_db_table(TABLE *table, const char *db,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ima = 1;
|
old_row_exists = 1;
|
||||||
store_record(table,1);
|
store_record(table,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1097,8 +1129,9 @@ static int replace_db_table(TABLE *table, const char *db,
|
|||||||
rights=get_access(table,3);
|
rights=get_access(table,3);
|
||||||
rights=fix_rights_for_db(rights);
|
rights=fix_rights_for_db(rights);
|
||||||
|
|
||||||
if (ima) // there is a row, therefore go update, else insert
|
if (old_row_exists)
|
||||||
{
|
{
|
||||||
|
// update old existing row
|
||||||
if (rights)
|
if (rights)
|
||||||
{
|
{
|
||||||
if ((error=table->file->update_row(table->record[1],table->record[0])))
|
if ((error=table->file->update_row(table->record[1],table->record[0])))
|
||||||
@ -1117,7 +1150,7 @@ static int replace_db_table(TABLE *table, const char *db,
|
|||||||
}
|
}
|
||||||
|
|
||||||
acl_cache->clear(1); // Clear privilege cache
|
acl_cache->clear(1); // Clear privilege cache
|
||||||
if (ima)
|
if (old_row_exists)
|
||||||
acl_update_db(combo.user.str,combo.host.str,db,rights);
|
acl_update_db(combo.user.str,combo.host.str,db,rights);
|
||||||
else
|
else
|
||||||
acl_insert_db(combo.user.str,combo.host.str,db,rights);
|
acl_insert_db(combo.user.str,combo.host.str,db,rights);
|
||||||
@ -1324,7 +1357,7 @@ static int replace_column_table(GRANT_TABLE *g_t,
|
|||||||
while ((xx=iter++))
|
while ((xx=iter++))
|
||||||
{
|
{
|
||||||
uint privileges = xx->rights;
|
uint privileges = xx->rights;
|
||||||
bool ima=0;
|
bool old_row_exists=0;
|
||||||
key_restore(table,key,0,key_length);
|
key_restore(table,key,0,key_length);
|
||||||
table->field[4]->store(xx->column.ptr(),xx->column.length());
|
table->field[4]->store(xx->column.ptr(),xx->column.length());
|
||||||
|
|
||||||
@ -1339,7 +1372,7 @@ static int replace_column_table(GRANT_TABLE *g_t,
|
|||||||
result= -1; /* purecov: inspected */
|
result= -1; /* purecov: inspected */
|
||||||
continue; /* purecov: inspected */
|
continue; /* purecov: inspected */
|
||||||
}
|
}
|
||||||
ima = 0;
|
old_row_exists = 0;
|
||||||
restore_record(table,2); // Get empty record
|
restore_record(table,2); // Get empty record
|
||||||
key_restore(table,key,0,key_length);
|
key_restore(table,key,0,key_length);
|
||||||
table->field[4]->store(xx->column.ptr(),xx->column.length());
|
table->field[4]->store(xx->column.ptr(),xx->column.length());
|
||||||
@ -1353,13 +1386,13 @@ static int replace_column_table(GRANT_TABLE *g_t,
|
|||||||
privileges = tmp & ~(privileges | rights);
|
privileges = tmp & ~(privileges | rights);
|
||||||
else
|
else
|
||||||
privileges |= tmp;
|
privileges |= tmp;
|
||||||
ima = 1;
|
old_row_exists = 1;
|
||||||
store_record(table,1); // copy original row
|
store_record(table,1); // copy original row
|
||||||
}
|
}
|
||||||
|
|
||||||
table->field[6]->store((longlong) get_rights_for_column(privileges));
|
table->field[6]->store((longlong) get_rights_for_column(privileges));
|
||||||
|
|
||||||
if (ima) // there is a row, therefore go update, else insert
|
if (old_row_exists)
|
||||||
{
|
{
|
||||||
if (privileges)
|
if (privileges)
|
||||||
error=table->file->update_row(table->record[1],table->record[0]);
|
error=table->file->update_row(table->record[1],table->record[0]);
|
||||||
@ -1465,7 +1498,7 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
|
|||||||
uint rights, uint kolone, bool revoke_grant)
|
uint rights, uint kolone, bool revoke_grant)
|
||||||
{
|
{
|
||||||
char grantor[HOSTNAME_LENGTH+1+USERNAME_LENGTH];
|
char grantor[HOSTNAME_LENGTH+1+USERNAME_LENGTH];
|
||||||
int ima = 1;
|
int old_row_exists = 1;
|
||||||
int error=0;
|
int error=0;
|
||||||
uint store_table_rights,store_col_rights;
|
uint store_table_rights,store_col_rights;
|
||||||
DBUG_ENTER("replace_table_table");
|
DBUG_ENTER("replace_table_table");
|
||||||
@ -1505,13 +1538,13 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
|
|||||||
table_name); /* purecov: deadcode */
|
table_name); /* purecov: deadcode */
|
||||||
DBUG_RETURN(-1); /* purecov: deadcode */
|
DBUG_RETURN(-1); /* purecov: deadcode */
|
||||||
}
|
}
|
||||||
ima = 0; // no row
|
old_row_exists = 0;
|
||||||
restore_record(table,1); // Get saved record
|
restore_record(table,1); // Get saved record
|
||||||
}
|
}
|
||||||
|
|
||||||
store_table_rights=get_rights_for_table(rights);
|
store_table_rights=get_rights_for_table(rights);
|
||||||
store_col_rights=get_rights_for_column(kolone);
|
store_col_rights=get_rights_for_column(kolone);
|
||||||
if (ima)
|
if (old_row_exists)
|
||||||
{
|
{
|
||||||
uint j,k;
|
uint j,k;
|
||||||
store_record(table,1);
|
store_record(table,1);
|
||||||
@ -1536,7 +1569,7 @@ static int replace_table_table(THD *thd, GRANT_TABLE *grant_table,
|
|||||||
rights=fix_rights_for_table(store_table_rights);
|
rights=fix_rights_for_table(store_table_rights);
|
||||||
kolone=fix_rights_for_column(store_col_rights);
|
kolone=fix_rights_for_column(store_col_rights);
|
||||||
|
|
||||||
if (ima) // there is a row, therefore go update, else insert
|
if (old_row_exists)
|
||||||
{
|
{
|
||||||
if (store_table_rights || store_col_rights)
|
if (store_table_rights || store_col_rights)
|
||||||
{
|
{
|
||||||
@ -1668,10 +1701,12 @@ int mysql_table_grant (THD *thd, TABLE_LIST *table_list,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
/* Create user if needed */
|
/* Create user if needed */
|
||||||
if ((replace_user_table(tables[0].table,
|
if (replace_user_table(tables[0].table,
|
||||||
*Str,
|
*Str,
|
||||||
0,
|
0,
|
||||||
revoke_grant ? 'N' : 'Y')))
|
revoke_grant ? 'N' : 'Y',
|
||||||
|
(revoke_grant ? 0 :
|
||||||
|
test_if_create_new_users(thd))))
|
||||||
{
|
{
|
||||||
result= -1; // Remember error
|
result= -1; // Remember error
|
||||||
continue; // Add next user
|
continue; // Add next user
|
||||||
@ -1773,6 +1808,7 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights,
|
|||||||
List_iterator <LEX_USER> str_list (list);
|
List_iterator <LEX_USER> str_list (list);
|
||||||
LEX_USER *Str;
|
LEX_USER *Str;
|
||||||
char what;
|
char what;
|
||||||
|
bool create_new_users=0;
|
||||||
TABLE_LIST tables[2];
|
TABLE_LIST tables[2];
|
||||||
DBUG_ENTER("mysql_grant");
|
DBUG_ENTER("mysql_grant");
|
||||||
|
|
||||||
@ -1799,8 +1835,10 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights,
|
|||||||
DBUG_RETURN(-1); /* purecov: deadcode */
|
DBUG_RETURN(-1); /* purecov: deadcode */
|
||||||
}
|
}
|
||||||
|
|
||||||
// go through users in user_list
|
if (!revoke_grant)
|
||||||
|
create_new_users= test_if_create_new_users(thd);
|
||||||
|
|
||||||
|
// go through users in user_list
|
||||||
pthread_mutex_lock(&LOCK_grant);
|
pthread_mutex_lock(&LOCK_grant);
|
||||||
VOID(pthread_mutex_lock(&acl_cache->lock));
|
VOID(pthread_mutex_lock(&acl_cache->lock));
|
||||||
grant_version++;
|
grant_version++;
|
||||||
@ -1822,12 +1860,15 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights,
|
|||||||
}
|
}
|
||||||
if ((replace_user_table(tables[0].table,
|
if ((replace_user_table(tables[0].table,
|
||||||
*Str,
|
*Str,
|
||||||
(!db ? rights : 0), what)))
|
(!db ? rights : 0), what, create_new_users)))
|
||||||
result= -1;
|
result= -1;
|
||||||
|
else
|
||||||
|
{
|
||||||
if (db && replace_db_table(tables[1].table, db, *Str, rights & DB_ACLS,
|
if (db && replace_db_table(tables[1].table, db, *Str, rights & DB_ACLS,
|
||||||
what))
|
what))
|
||||||
result= -1;
|
result= -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
VOID(pthread_mutex_unlock(&acl_cache->lock));
|
VOID(pthread_mutex_unlock(&acl_cache->lock));
|
||||||
pthread_mutex_unlock(&LOCK_grant);
|
pthread_mutex_unlock(&LOCK_grant);
|
||||||
close_thread_tables(thd);
|
close_thread_tables(thd);
|
||||||
@ -1978,7 +2019,7 @@ void grant_reload(void)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
bool check_grant(THD *thd, uint want_access, TABLE_LIST *tables,
|
bool check_grant(THD *thd, uint want_access, TABLE_LIST *tables,
|
||||||
uint show_table)
|
uint show_table, bool no_errors)
|
||||||
{
|
{
|
||||||
TABLE_LIST *table;
|
TABLE_LIST *table;
|
||||||
char *user = thd->priv_user;
|
char *user = thd->priv_user;
|
||||||
@ -2026,7 +2067,7 @@ bool check_grant(THD *thd, uint want_access, TABLE_LIST *tables,
|
|||||||
|
|
||||||
err:
|
err:
|
||||||
pthread_mutex_unlock(&LOCK_grant);
|
pthread_mutex_unlock(&LOCK_grant);
|
||||||
if (show_table != 1) // Not a silent skip of table
|
if (!no_errors) // Not a silent skip of table
|
||||||
{
|
{
|
||||||
const char *command="";
|
const char *command="";
|
||||||
if (want_access & SELECT_ACL)
|
if (want_access & SELECT_ACL)
|
||||||
|
@ -74,7 +74,7 @@ int grant_init(void);
|
|||||||
void grant_free(void);
|
void grant_free(void);
|
||||||
void grant_reload(void);
|
void grant_reload(void);
|
||||||
bool check_grant(THD *thd, uint want_access, TABLE_LIST *tables,
|
bool check_grant(THD *thd, uint want_access, TABLE_LIST *tables,
|
||||||
uint show_command=0);
|
uint show_command=0, bool dont_print_error=0);
|
||||||
bool check_grant_column (THD *thd,TABLE *table, const char *name,uint length,
|
bool check_grant_column (THD *thd,TABLE *table, const char *name,uint length,
|
||||||
uint show_command=0);
|
uint show_command=0);
|
||||||
bool check_grant_all_columns(THD *thd, uint want_access, TABLE *table);
|
bool check_grant_all_columns(THD *thd, uint want_access, TABLE *table);
|
||||||
|
@ -27,8 +27,15 @@ class Sql_alloc
|
|||||||
public:
|
public:
|
||||||
static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
|
static void *operator new(size_t size) {return (void*) sql_alloc((uint) size); }
|
||||||
static void operator delete(void *ptr, size_t size) {} /*lint -e715 */
|
static void operator delete(void *ptr, size_t size) {} /*lint -e715 */
|
||||||
inline Sql_alloc() {};
|
#ifdef HAVE_purify
|
||||||
inline ~Sql_alloc() {};
|
bool dummy;
|
||||||
|
inline Sql_alloc() :dummy(0) {}
|
||||||
|
inline ~Sql_alloc() {}
|
||||||
|
#else
|
||||||
|
inline Sql_alloc() {}
|
||||||
|
inline ~Sql_alloc() {}
|
||||||
|
#endif
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1413,25 +1413,28 @@ add_ft_keys(DYNAMIC_ARRAY *keyuse_array,
|
|||||||
|
|
||||||
if (cond->type() == Item::FUNC_ITEM)
|
if (cond->type() == Item::FUNC_ITEM)
|
||||||
{
|
{
|
||||||
Item_func *func=(Item_func *)cond,
|
Item_func *func=(Item_func *)cond;
|
||||||
*arg0=(Item_func *)(func->arguments()[0]),
|
Item_func::Functype functype= func->functype();
|
||||||
*arg1=(Item_func *)(func->arguments()[1]);
|
if (functype == Item_func::FT_FUNC)
|
||||||
|
|
||||||
if (func->functype() == Item_func::FT_FUNC)
|
|
||||||
cond_func=(Item_func_match *)cond;
|
cond_func=(Item_func_match *)cond;
|
||||||
else if ((func->functype() == Item_func::GE_FUNC ||
|
else if (func->arg_count == 2)
|
||||||
func->functype() == Item_func::GT_FUNC) &&
|
{
|
||||||
|
Item_func *arg0=(Item_func *)(func->arguments()[0]),
|
||||||
|
*arg1=(Item_func *)(func->arguments()[1]);
|
||||||
|
if ((functype == Item_func::GE_FUNC ||
|
||||||
|
functype == Item_func::GT_FUNC) &&
|
||||||
arg0->type() == Item::FUNC_ITEM &&
|
arg0->type() == Item::FUNC_ITEM &&
|
||||||
arg0->functype() == Item_func::FT_FUNC &&
|
arg0->functype() == Item_func::FT_FUNC &&
|
||||||
arg1->const_item() && arg1->val()>=0)
|
arg1->const_item() && arg1->val()>=0)
|
||||||
cond_func=(Item_func_match *) arg0;
|
cond_func=(Item_func_match *) arg0;
|
||||||
else if ((func->functype() == Item_func::LE_FUNC ||
|
else if ((functype == Item_func::LE_FUNC ||
|
||||||
func->functype() == Item_func::LT_FUNC) &&
|
functype == Item_func::LT_FUNC) &&
|
||||||
arg1->type() == Item::FUNC_ITEM &&
|
arg1->type() == Item::FUNC_ITEM &&
|
||||||
arg1->functype() == Item_func::FT_FUNC &&
|
arg1->functype() == Item_func::FT_FUNC &&
|
||||||
arg0->const_item() && arg0->val()>=0)
|
arg0->const_item() && arg0->val()>=0)
|
||||||
cond_func=(Item_func_match *) arg1;
|
cond_func=(Item_func_match *) arg1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (cond->type() == Item::COND_ITEM)
|
else if (cond->type() == Item::COND_ITEM)
|
||||||
{
|
{
|
||||||
List_iterator_fast<Item> li(*((Item_cond*) cond)->argument_list());
|
List_iterator_fast<Item> li(*((Item_cond*) cond)->argument_list());
|
||||||
@ -1439,12 +1442,14 @@ add_ft_keys(DYNAMIC_ARRAY *keyuse_array,
|
|||||||
if (((Item_cond*) cond)->functype() == Item_func::COND_AND_FUNC)
|
if (((Item_cond*) cond)->functype() == Item_func::COND_AND_FUNC)
|
||||||
{
|
{
|
||||||
Item *item;
|
Item *item;
|
||||||
/* I'm too lazy to implement proper recursive descent here,
|
/*
|
||||||
|
I', (Sergei) too lazy to implement proper recursive descent here,
|
||||||
and anyway, nobody will use such a stupid queries
|
and anyway, nobody will use such a stupid queries
|
||||||
that will require it :-)
|
that will require it :-)
|
||||||
May be later...
|
May be later...
|
||||||
*/
|
*/
|
||||||
while ((item=li++))
|
while ((item=li++))
|
||||||
|
{
|
||||||
if (item->type() == Item::FUNC_ITEM &&
|
if (item->type() == Item::FUNC_ITEM &&
|
||||||
((Item_func *)item)->functype() == Item_func::FT_FUNC)
|
((Item_func *)item)->functype() == Item_func::FT_FUNC)
|
||||||
{
|
{
|
||||||
@ -1453,6 +1458,7 @@ add_ft_keys(DYNAMIC_ARRAY *keyuse_array,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!cond_func)
|
if(!cond_func)
|
||||||
return;
|
return;
|
||||||
|
@ -217,7 +217,7 @@ mysql_find_files(THD *thd,List<char> *files, const char *db,const char *path,
|
|||||||
table_list.db= (char*) db;
|
table_list.db= (char*) db;
|
||||||
table_list.real_name=file->name;
|
table_list.real_name=file->name;
|
||||||
table_list.grant.privilege=col_access;
|
table_list.grant.privilege=col_access;
|
||||||
if (check_grant(thd,TABLE_ACLS,&table_list,1))
|
if (check_grant(thd,TABLE_ACLS,&table_list,1,1))
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (files->push_back(thd->strdup(file->name)))
|
if (files->push_back(thd->strdup(file->name)))
|
||||||
|
@ -1128,11 +1128,15 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
|
|||||||
{
|
{
|
||||||
strmov(new_name_buff,new_name);
|
strmov(new_name_buff,new_name);
|
||||||
fn_same(new_name_buff,table_name,3);
|
fn_same(new_name_buff,table_name,3);
|
||||||
// Check if name changed
|
|
||||||
#ifdef FN_LOWER_CASE
|
#ifdef FN_LOWER_CASE
|
||||||
if (!strcmp(db,new_db) && !my_strcasecmp(new_name_buff,table_name))
|
if (lower_case_table_names)
|
||||||
|
casedn_str(new_name);
|
||||||
|
if ((lower_case_table_names &&
|
||||||
|
!my_strcasecmp(new_name_buff,table_name)) ||
|
||||||
|
(!lower_case_table_names &&
|
||||||
|
!strcmp(new_name_buff,table_name)))
|
||||||
#else
|
#else
|
||||||
if (!strcmp(db,new_db) && !strcmp(new_name_buff,table_name))
|
if (!strcmp(new_name_buff,table_name)) // Check if name changed
|
||||||
#endif
|
#endif
|
||||||
new_name=table_name; // No. Make later check easier
|
new_name=table_name; // No. Make later check easier
|
||||||
else
|
else
|
||||||
|
Loading…
x
Reference in New Issue
Block a user