Commit ce145789 authored by monty@mysql.com's avatar monty@mysql.com

Merge with 4.0.18

parents 0c6a0b9a efb134f3
...@@ -74,6 +74,7 @@ Docs/safe-mysql.xml ...@@ -74,6 +74,7 @@ Docs/safe-mysql.xml
Docs/tex.fmt Docs/tex.fmt
Docs/texi2dvi.out Docs/texi2dvi.out
INSTALL-SOURCE INSTALL-SOURCE
INSTALL-WIN-SOURCE
Logs/* Logs/*
MIRRORS MIRRORS
Makefile Makefile
...@@ -436,6 +437,7 @@ linked_libmysqldex_sources ...@@ -436,6 +437,7 @@ linked_libmysqldex_sources
linked_server_sources linked_server_sources
linked_tools_sources linked_tools_sources
locked locked
man/*.1
mit-pthreads/config.flags mit-pthreads/config.flags
mit-pthreads/include/bits mit-pthreads/include/bits
mit-pthreads/include/pthread/machdep.h mit-pthreads/include/pthread/machdep.h
...@@ -458,6 +460,7 @@ myisam/mi_test2 ...@@ -458,6 +460,7 @@ myisam/mi_test2
myisam/mi_test3 myisam/mi_test3
myisam/mi_test_all myisam/mi_test_all
myisam/myisam.log myisam/myisam.log
myisam/myisam_ftdump
myisam/myisamchk myisam/myisamchk
myisam/myisamlog myisam/myisamlog
myisam/myisampack myisam/myisampack
...@@ -640,4 +643,3 @@ vio/test-ssl ...@@ -640,4 +643,3 @@ vio/test-ssl
vio/test-sslclient vio/test-sslclient
vio/test-sslserver vio/test-sslserver
vio/viotest-ssl vio/viotest-ssl
INSTALL-WIN-SOURCE
...@@ -37,6 +37,7 @@ EXTRA_DIST = FINISH.sh \ ...@@ -37,6 +37,7 @@ EXTRA_DIST = FINISH.sh \
compile-pentium-pgcc \ compile-pentium-pgcc \
compile-solaris-sparc \ compile-solaris-sparc \
compile-solaris-sparc-debug \ compile-solaris-sparc-debug \
compile-irix-mips64-mipspro \
compile-solaris-sparc-forte \ compile-solaris-sparc-forte \
compile-solaris-sparc-purify compile-solaris-sparc-purify
......
#!/bin/sh
if [ ! -f "sql/mysqld.cc" ]; then
echo "You must run this script from the MySQL top-level directory."
exit 1
fi
cflags="-64 -mips4"
if [ "$#" != 0 ]; then
case "$1" in
--help)
echo "Usage: $0 [options]"
echo "Options:"
echo "--help print this message"
echo "-32 build 32-bit binary"
echo "-64 build 64-bit binary [default]"
exit 0
;;
-64)
echo "Building 64-bit binary"
;;
-32)
echo "Building 32-bit binary"
cflags=""
;;
*)
echo "$0: invalid option '$1'; use --help to show usage"
exit 1
;;
esac
else
echo "Building 64-bit binary"
fi
set -x
make distclean
aclocal
autoheader
libtoolize --automake --force
automake --force --add-missing
autoconf
(cd bdb/dist && sh s_all)
(cd innobase && aclocal && autoheader && aclocal && automake && autoconf)
# C options:
# -apo - auto-parallize for multiprocessors (implies -mp)
# -mp - generate multiprocessor code
# These two common optimization options apparently use 'sproc' model of
# threading, which is not compatible with PTHREADS: don't add them unless you
# know what you're doing.
#
# -c99 - enable C features standardized in C99, such as long long,
# strtoll, stroull etc.
# This option is vital to compile MySQL.
# -woff - turn off some warnings
# -64 - generate 64 bit object (implies -mips4)
# -mips4 - produce code for MIPS R10000, MIPS R12000 and further 64 bit
# processors
# -OPT:Olimit=0 - no limits exists to size of function for compiler to optimize
# it
nowarn="-woff 1064,1188,1460,1552,1681,1682,3303"
cflags="$cflags $nowarn -O3 -c99 -OPT:Olimit=0"
# C++ only options:
# -LANG:exceptions=OFF - don't generate exception handling code
# MySQL doesn't use exceptions.
# -LANG:std=OFF - don't link standard C++ library, such as
# <iostream>, <complex>, etc.
# -LANG:libc_in_namespace_std=OFF - libstdc functions can be
# declared in namespace 'std', when included
# into C++ code. Switch this feature off.
# This option is vital to compile MySQL
cxxflags="$cflags -LANG:exceptions=OFF -LANG:std=OFF"
cxxflags="$cxxflags -LANG:libc_in_namespace_std=OFF"
CC=cc CXX=CC CFLAGS="$cflags" CXXFLAGS="$cxxflags" \
./configure --prefix=/usr/local/mysql --disable-shared \
--with-extra-charsets=complex --enable-thread-safe-client \
--without-extra-tools --disable-dependency-tracking
make
...@@ -9,6 +9,6 @@ extra_configs="$pentium_configs" ...@@ -9,6 +9,6 @@ extra_configs="$pentium_configs"
extra_configs="$extra_configs --with-innodb --with-berkeley-db \ extra_configs="$extra_configs --with-innodb --with-berkeley-db \
--with-embedded-server --enable-thread-safe-client \ --with-embedded-server --enable-thread-safe-client \
--with-openssl --with-vio" --with-openssl --with-vio --with-raid"
. "$path/FINISH.sh" . "$path/FINISH.sh"
...@@ -117,6 +117,7 @@ root@x3.internalnet ...@@ -117,6 +117,7 @@ root@x3.internalnet
salle@banica.(none) salle@banica.(none)
salle@geopard.(none) salle@geopard.(none)
salle@geopard.online.bg salle@geopard.online.bg
salle@vafla.home
salle@vafla.online.bg salle@vafla.online.bg
sasha@mysql.sashanet.com sasha@mysql.sashanet.com
serg@build.mysql2.com serg@build.mysql2.com
......
...@@ -257,7 +257,7 @@ if (defined $opt_changelog) ...@@ -257,7 +257,7 @@ if (defined $opt_changelog)
$msg= "Adding $target_dir/ChangeLog"; $msg= "Adding $target_dir/ChangeLog";
$msg.= " (down to revision $opt_changelog)" if $opt_changelog ne ""; $msg.= " (down to revision $opt_changelog)" if $opt_changelog ne "";
&logger($msg); &logger($msg);
$command= "bk changes -v"; $command= "bk changes -mv";
$command.= " -r" if ($opt_changelog ne "" || $opt_revision); $command.= " -r" if ($opt_changelog ne "" || $opt_revision);
$command.= $opt_changelog if $opt_changelog ne ""; $command.= $opt_changelog if $opt_changelog ne "";
$command.= ".." if ($opt_changelog ne "" && !$opt_revision); $command.= ".." if ($opt_changelog ne "" && !$opt_revision);
......
...@@ -282,7 +282,7 @@ if ($opt_stage <= 3) ...@@ -282,7 +282,7 @@ if ($opt_stage <= 3)
{ {
my $flags= ""; my $flags= "";
log_timestamp(); log_timestamp();
log_system("rm -fr mysql-3* mysql-4* $pwd/$host/*.tar.gz"); log_system("rm -fr mysql-{3,4,5}* $pwd/$host/mysql*.t*gz");
# No need to add the debug symbols, if the binaries are not stripped (saves space) # No need to add the debug symbols, if the binaries are not stripped (saves space)
unless ($opt_with_debug || $opt_no_strip) unless ($opt_with_debug || $opt_no_strip)
{ {
...@@ -291,7 +291,7 @@ if ($opt_stage <= 3) ...@@ -291,7 +291,7 @@ if ($opt_stage <= 3)
$flags.= "--no-strip" if ($opt_no_strip || $opt_with_debug); $flags.= "--no-strip" if ($opt_no_strip || $opt_with_debug);
check_system("scripts/make_binary_distribution --tmp=$opt_tmp --suffix=$opt_suffix $flags",".tar.gz created"); check_system("scripts/make_binary_distribution --tmp=$opt_tmp --suffix=$opt_suffix $flags",".tar.gz created");
safe_system("mv mysql*.tar.gz $pwd/$host"); safe_system("mv mysql*.t*gz $pwd/$host");
if (-f "client/.libs/mysqladmin") if (-f "client/.libs/mysqladmin")
{ {
safe_system("cp client/.libs/mysqladmin $pwd/$host/bin"); safe_system("cp client/.libs/mysqladmin $pwd/$host/bin");
...@@ -303,11 +303,8 @@ if ($opt_stage <= 3) ...@@ -303,11 +303,8 @@ if ($opt_stage <= 3)
safe_system("$make clean") if ($opt_with_small_disk); safe_system("$make clean") if ($opt_with_small_disk);
} }
$tar_file=<$pwd/$host/*.tar.gz>; $tar_file=<$pwd/$host/mysql*.t*gz>;
if (!defined($tar_file)) abort ("Could not find tarball!") unless ($tar_file);
{
$tar_file=<$pwd/$host/*.tgz>;
}
# #
# Unpack the binary distribution # Unpack the binary distribution
...@@ -320,7 +317,7 @@ if ($opt_stage <= 4 && !$opt_no_test) ...@@ -320,7 +317,7 @@ if ($opt_stage <= 4 && !$opt_no_test)
safe_system("gunzip < $tar_file | $tar xf -"); safe_system("gunzip < $tar_file | $tar xf -");
} }
$tar_file =~ /(mysql[^\/]*)\.tar/; $tar_file =~ /(mysql[^\/]*)\.(tar\.gz|tgz)/;
$ver=$1; $ver=$1;
$test_dir="$pwd/$host/test/$ver"; $test_dir="$pwd/$host/test/$ver";
$ENV{"LD_LIBRARY_PATH"}= ("$test_dir/lib" . $ENV{"LD_LIBRARY_PATH"}= ("$test_dir/lib" .
......
...@@ -115,10 +115,12 @@ if (defined $opt_log) ...@@ -115,10 +115,12 @@ if (defined $opt_log)
if (-x "/usr/bin/rpmbuild") if (-x "/usr/bin/rpmbuild")
{ {
$RPM= "/usr/bin/rpmbuild"; $RPM= "/usr/bin/rpmbuild";
$RMSOURCE= "--rmsource --rmspec";
} }
else else
{ {
$RPM= "/bin/rpm"; $RPM= "/bin/rpm";
$RMSOURCE= "--rmspec";
} }
if ($RPM) if ($RPM)
...@@ -177,7 +179,7 @@ $ENV{MYSQL_BUILD_CXX}=$opt_cxx if ($opt_cxx); ...@@ -177,7 +179,7 @@ $ENV{MYSQL_BUILD_CXX}=$opt_cxx if ($opt_cxx);
$command= "$RPM"; $command= "$RPM";
$command.= " -v" if ($opt_verbose); $command.= " -v" if ($opt_verbose);
$command.= " -ba"; $command.= " -ba";
$command.= " --clean" if $opt_clean; $command.= " --clean $RMSOURCE" if $opt_clean;
$command.= " $SPECDIR/"; $command.= " $SPECDIR/";
$command.= basename($SPECFILE); $command.= basename($SPECFILE);
&logger("Building RPM."); &logger("Building RPM.");
...@@ -188,7 +190,7 @@ $command.= basename($SPECFILE); ...@@ -188,7 +190,7 @@ $command.= basename($SPECFILE);
# #
$command= "mv"; $command= "mv";
$command.= " -v " if ($opt_verbose); $command.= " -v " if ($opt_verbose);
$command.= "$SRCRPMDIR/MySQL*$VERSION*.src.rpm $PWD"; $command.= " $SRCRPMDIR/MySQL*$VERSION*.src.rpm $PWD";
&logger("Moving source RPM to current dir."); &logger("Moving source RPM to current dir.");
&run_command($command, "Error moving source RPM!"); &run_command($command, "Error moving source RPM!");
...@@ -198,19 +200,6 @@ $command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION*.$RPMARCH.rpm $PWD"; ...@@ -198,19 +200,6 @@ $command.= " $RPMDIR/$RPMARCH/MySQL*$VERSION*.$RPMARCH.rpm $PWD";
&logger("Moving binary RPMs to current dir."); &logger("Moving binary RPMs to current dir.");
&run_command($command, "Error moving binary RPMs!"); &run_command($command, "Error moving binary RPMs!");
#
# Clean up
#
if ($opt_clean)
{
&logger("Removing spec file and source package");
unless ($opt_dry_run)
{
unlink("$SPECDIR/" . basename($SPECFILE));
unlink("$SOURCEDIR/$SOURCEFILE");
}
}
&logger("SUCCESS: RPM files successfully created.") unless ($opt_dry_run); &logger("SUCCESS: RPM files successfully created.") unless ($opt_dry_run);
exit 0; exit 0;
......
#!/usr/bin/perl -w
use Getopt::Long;
$opt_help=0;
$opt_tarball=$opt_builddir="";
GetOptions(
"help",
"tarball=s",
"builddir=s",
) || print_help();
print_help() if ($opt_help);
chomp($MSDEV=`which msdev`);
if (!$opt_builddir) {
$opt_builddir = "/cygdrive/c/mysql-win-build";
}
$opt_tarball =~ /(mysql[^\/]*)-win-src\.tar/;
$mysqlver=$1;
$basedir = "$opt_builddir/$mysqlver";
# Make sure build dir exists
mkdir($opt_builddir);
# Clean out any previous build
system("rm -rf $basedir");
mkdir($basedir);
mkdir("$basedir/tarball");
system("cp $opt_tarball $basedir/tarball");
if (!chdir($basedir))
{
print "Do-win-build error: Could not change to $opt_builddir";
exit 1;
}
mkdir("build");
chdir("build");
system("tar -zxvf ../tarball/$mysqlver-win-src.tar.gz");
chdir($mysqlver);
system("\"$MSDEV\" mysql.dsw /MAKE \"ALL\" /OUT $mysqlver-build.log");
#
# Print a help text message
#
sub print_help
{
print <<EOF;
Usage: Do-compile-win [options] source-tarball
Unpacks a Windows source distribution on the local machine and
compiles it using VC++ 6.0.
This script is intended for Cygwin Perl. You must have a working
MSDEV.EXE in your path for compilation.
Options:
--help
Print this text.
--builddir=<dir>
Set the Cygwin path to build under; the tarball will actually
be moved to <builddir>/mysql-<version>/tarball and extracted under
<builddir>/mysql-<version>/build.
Default: /cygdrive/c/mysql-win-build
--tarball=<file>
Windows source tarball to use for this build. Must be of the form
mysql[com]-x.x.x-win-src.tar.gz (REQUIRED)
EOF
exit 1;
}
This diff is collapsed.
...@@ -185,7 +185,10 @@ static struct my_option my_long_options[] = ...@@ -185,7 +185,10 @@ static struct my_option my_long_options[] =
{"first-slave", 'x', "Locks all tables across all databases.", {"first-slave", 'x', "Locks all tables across all databases.",
(gptr*) &opt_first_slave, (gptr*) &opt_first_slave, 0, GET_BOOL, NO_ARG, (gptr*) &opt_first_slave, (gptr*) &opt_first_slave, 0, GET_BOOL, NO_ARG,
0, 0, 0, 0, 0, 0}, 0, 0, 0, 0, 0, 0},
{"flush-logs", 'F', "Flush logs file in server before starting dump.", {"flush-logs", 'F', "Flush logs file in server before starting dump. "
"Note that if you dump many databases at once (using the option "
"--databases= or --all-databases), the logs will be flushed for "
"each database dumped.",
(gptr*) &flush_logs, (gptr*) &flush_logs, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, (gptr*) &flush_logs, (gptr*) &flush_logs, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
0, 0}, 0, 0},
{"force", 'f', "Continue even if we get an sql-error.", {"force", 'f', "Continue even if we get an sql-error.",
...@@ -1662,7 +1665,7 @@ static int dump_all_tables_in_db(char *database) ...@@ -1662,7 +1665,7 @@ static int dump_all_tables_in_db(char *database)
if (opt_xml) if (opt_xml)
fputs("</database>\n", md_result_file); fputs("</database>\n", md_result_file);
if (lock_tables) if (lock_tables)
mysql_query(sock,"UNLOCK_TABLES"); mysql_query(sock,"UNLOCK TABLES");
return 0; return 0;
} /* dump_all_tables_in_db */ } /* dump_all_tables_in_db */
...@@ -1708,7 +1711,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables) ...@@ -1708,7 +1711,7 @@ static int dump_selected_tables(char *db, char **table_names, int tables)
if (opt_xml) if (opt_xml)
fputs("</database>\n", md_result_file); fputs("</database>\n", md_result_file);
if (lock_tables) if (lock_tables)
mysql_query(sock,"UNLOCK_TABLES"); mysql_query(sock,"UNLOCK TABLES");
return 0; return 0;
} /* dump_selected_tables */ } /* dump_selected_tables */
......
...@@ -441,10 +441,10 @@ static void free_used_memory() ...@@ -441,10 +441,10 @@ static void free_used_memory()
my_free((gptr) (*q),MYF(0)); my_free((gptr) (*q),MYF(0));
} }
for (i=0; i < 10; i++) for (i=0; i < 10; i++)
{ {
if (var_reg[i].alloced_len) if (var_reg[i].alloced_len)
my_free(var_reg[i].str_val, MYF(MY_WME)); my_free(var_reg[i].str_val, MYF(MY_WME));
} }
while (embedded_server_arg_count > 1) while (embedded_server_arg_count > 1)
my_free(embedded_server_args[--embedded_server_arg_count],MYF(0)); my_free(embedded_server_args[--embedded_server_arg_count],MYF(0));
delete_dynamic(&q_lines); delete_dynamic(&q_lines);
......
This diff is collapsed.
This diff is collapsed.
...@@ -346,7 +346,7 @@ AC_SUBST(CXXFLAGS) ...@@ -346,7 +346,7 @@ AC_SUBST(CXXFLAGS)
AC_SUBST(LD) AC_SUBST(LD)
AC_SUBST(INSTALL_SCRIPT) AC_SUBST(INSTALL_SCRIPT)
export CC CFLAGS LD LDFLAGS export CC CXX CFLAGS LD LDFLAGS AR
if test "$GXX" = "yes" if test "$GXX" = "yes"
then then
...@@ -1051,7 +1051,7 @@ case $SYSTEM_TYPE in ...@@ -1051,7 +1051,7 @@ case $SYSTEM_TYPE in
echo "Using --with-named-thread=-lpthread" echo "Using --with-named-thread=-lpthread"
with_named_thread="-lpthread" with_named_thread="-lpthread"
fi fi
CXXFLAGS="-D_BOOL" CXXFLAGS="$CXXFLAGS -D_BOOL"
;; ;;
*aix4.3*) *aix4.3*)
echo "Adding defines for AIX" echo "Adding defines for AIX"
...@@ -1830,7 +1830,7 @@ AC_CHECK_FUNCS(alarm bmove \ ...@@ -1830,7 +1830,7 @@ AC_CHECK_FUNCS(alarm bmove \
sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \ sigset sigthreadmask pthread_sigmask pthread_setprio pthread_setprio_np \
pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \ pthread_setschedparam pthread_attr_setprio pthread_attr_setschedparam \
pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \ pthread_attr_create pthread_getsequence_np pthread_attr_setstacksize \
pthread_attr_getstacksize \ pthread_attr_getstacksize pthread_key_delete \
pthread_condattr_create rwlock_init pthread_rwlock_rdlock \ pthread_condattr_create rwlock_init pthread_rwlock_rdlock \
fsync fdatasync fchmod getpass getpassphrase initgroups mlockall) fsync fdatasync fchmod getpass getpassphrase initgroups mlockall)
......
...@@ -47,13 +47,14 @@ ulong heap_position_old(HP_INFO *info) ...@@ -47,13 +47,14 @@ ulong heap_position_old(HP_INFO *info)
int heap_info(reg1 HP_INFO *info,reg2 HEAPINFO *x, int flag ) int heap_info(reg1 HP_INFO *info,reg2 HEAPINFO *x, int flag )
{ {
DBUG_ENTER("heap_info"); DBUG_ENTER("heap_info");
x->records = info->s->records; x->records = info->s->records;
x->deleted = info->s->deleted; x->deleted = info->s->deleted;
x->reclength = info->s->reclength; x->reclength = info->s->reclength;
x->data_length = info->s->data_length; x->data_length = info->s->data_length;
x->index_length= info->s->index_length; x->index_length = info->s->index_length;
x->max_records = info->s->max_records; x->max_records = info->s->max_records;
x->errkey = info->errkey; x->errkey = info->errkey;
x->implicit_emptied= info->implicit_emptied;
if (flag & HA_STATUS_AUTO) if (flag & HA_STATUS_AUTO)
x->auto_increment= info->s->auto_increment + 1; x->auto_increment= info->s->auto_increment + 1;
DBUG_RETURN(0); DBUG_RETURN(0);
......
...@@ -63,6 +63,7 @@ HP_INFO *heap_open(const char *name, int mode) ...@@ -63,6 +63,7 @@ HP_INFO *heap_open(const char *name, int mode)
#ifndef DBUG_OFF #ifndef DBUG_OFF
info->opt_flag= READ_CHECK_USED; /* Check when changing */ info->opt_flag= READ_CHECK_USED; /* Check when changing */
#endif #endif
info->implicit_emptied= 0;
DBUG_PRINT("exit",("heap: %lx reclength: %d records_in_block: %d", DBUG_PRINT("exit",("heap: %lx reclength: %d records_in_block: %d",
info,share->reclength,share->block.records_in_block)); info,share->reclength,share->block.records_in_block));
DBUG_RETURN(info); DBUG_RETURN(info);
......
...@@ -51,6 +51,7 @@ typedef struct st_heapinfo /* Struct from heap_info */ ...@@ -51,6 +51,7 @@ typedef struct st_heapinfo /* Struct from heap_info */
uint reclength; /* Length of one record */ uint reclength; /* Length of one record */
int errkey; int errkey;
ulonglong auto_increment; ulonglong auto_increment;
my_bool implicit_emptied;
} HEAPINFO; } HEAPINFO;
...@@ -138,6 +139,7 @@ typedef struct st_heap_info ...@@ -138,6 +139,7 @@ typedef struct st_heap_info
TREE_ELEMENT *parents[MAX_TREE_HEIGHT+1]; TREE_ELEMENT *parents[MAX_TREE_HEIGHT+1];
TREE_ELEMENT **last_pos; TREE_ELEMENT **last_pos;
uint lastkey_len; uint lastkey_len;
my_bool implicit_emptied;
#ifdef THREAD #ifdef THREAD
THR_LOCK_DATA lock; THR_LOCK_DATA lock;
#endif #endif
......
...@@ -293,7 +293,9 @@ C_MODE_END ...@@ -293,7 +293,9 @@ C_MODE_END
#ifndef CONFIG_SMP #ifndef CONFIG_SMP
#define CONFIG_SMP #define CONFIG_SMP
#endif #endif
C_MODE_START
#include <asm/atomic.h> #include <asm/atomic.h>
C_MODE_END
#endif #endif
#include <errno.h> /* Recommended by debian */ #include <errno.h> /* Recommended by debian */
/* We need the following to go around a problem with openssl on solaris */ /* We need the following to go around a problem with openssl on solaris */
......
...@@ -392,6 +392,11 @@ struct tm *gmtime_r(const time_t *clock, struct tm *res); ...@@ -392,6 +392,11 @@ struct tm *gmtime_r(const time_t *clock, struct tm *res);
#define pthread_condattr_destroy pthread_condattr_delete #define pthread_condattr_destroy pthread_condattr_delete
#endif #endif
/* FSU THREADS */
#if !defined(HAVE_PTHREAD_KEY_DELETE) && !defined(pthread_key_delete)
#define pthread_key_delete(A) pthread_dummy(0)
#endif
#ifdef HAVE_CTHREADS_WRAPPER /* For MacOSX */ #ifdef HAVE_CTHREADS_WRAPPER /* For MacOSX */
#define pthread_cond_destroy(A) pthread_dummy(0) #define pthread_cond_destroy(A) pthread_dummy(0)
#define pthread_mutex_destroy(A) pthread_dummy(0) #define pthread_mutex_destroy(A) pthread_dummy(0)
......
...@@ -730,6 +730,8 @@ extern void init_alloc_root(MEM_ROOT *mem_root, uint block_size, ...@@ -730,6 +730,8 @@ extern void init_alloc_root(MEM_ROOT *mem_root, uint block_size,
extern gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size); extern gptr alloc_root(MEM_ROOT *mem_root,unsigned int Size);
extern void free_root(MEM_ROOT *root, myf MyFLAGS); extern void free_root(MEM_ROOT *root, myf MyFLAGS);
extern void set_prealloc_root(MEM_ROOT *root, char *ptr); extern void set_prealloc_root(MEM_ROOT *root, char *ptr);
extern void reset_root_defaults(MEM_ROOT *mem_root, uint block_size,
uint prealloc_size);
extern char *strdup_root(MEM_ROOT *root,const char *str); extern char *strdup_root(MEM_ROOT *root,const char *str);
extern char *strmake_root(MEM_ROOT *root,const char *str,uint len); extern char *strmake_root(MEM_ROOT *root,const char *str,uint len);
extern char *memdup_root(MEM_ROOT *root,const char *str,uint len); extern char *memdup_root(MEM_ROOT *root,const char *str,uint len);
......
...@@ -93,7 +93,7 @@ typedef struct st_mi_isaminfo /* Struct from h_info */ ...@@ -93,7 +93,7 @@ typedef struct st_mi_isaminfo /* Struct from h_info */
typedef struct st_mi_create_info typedef struct st_mi_create_info
{ {
char *index_file_name, *data_file_name; /* If using symlinks */ const char *index_file_name, *data_file_name; /* If using symlinks */
ha_rows max_rows; ha_rows max_rows;
ha_rows reloc_rows; ha_rows reloc_rows;
ulonglong auto_increment; ulonglong auto_increment;
......
...@@ -254,56 +254,57 @@ ...@@ -254,56 +254,57 @@
#define ER_NOT_SUPPORTED_YET 1235 #define ER_NOT_SUPPORTED_YET 1235
#define ER_MASTER_FATAL_ERROR_READING_BINLOG 1236 #define ER_MASTER_FATAL_ERROR_READING_BINLOG 1236
#define ER_SLAVE_IGNORED_TABLE 1237 #define ER_SLAVE_IGNORED_TABLE 1237
#define ER_WRONG_FK_DEF 1238 #define ER_INCORRECT_GLOBAL_LOCAL_VAR 1238
#define ER_KEY_REF_DO_NOT_MATCH_TABLE_REF 1239 #define ER_WRONG_FK_DEF 1239
#define ER_OPERAND_COLUMNS 1240 #define ER_KEY_REF_DO_NOT_MATCH_TABLE_REF 1240
#define ER_SUBQUERY_NO_1_ROW 1241 #define ER_OPERAND_COLUMNS 1241
#define ER_UNKNOWN_STMT_HANDLER 1242 #define ER_SUBQUERY_NO_1_ROW 1242
#define ER_CORRUPT_HELP_DB 1243 #define ER_UNKNOWN_STMT_HANDLER 1243
#define ER_CYCLIC_REFERENCE 1244 #define ER_CORRUPT_HELP_DB 1244
#define ER_AUTO_CONVERT 1245 #define ER_CYCLIC_REFERENCE 1245
#define ER_ILLEGAL_REFERENCE 1246 #define ER_AUTO_CONVERT 1246
#define ER_DERIVED_MUST_HAVE_ALIAS 1247 #define ER_ILLEGAL_REFERENCE 1247
#define ER_SELECT_REDUCED 1248 #define ER_DERIVED_MUST_HAVE_ALIAS 1248
#define ER_TABLENAME_NOT_ALLOWED_HERE 1249 #define ER_SELECT_REDUCED 1249
#define ER_NOT_SUPPORTED_AUTH_MODE 1250 #define ER_TABLENAME_NOT_ALLOWED_HERE 1250
#define ER_SPATIAL_CANT_HAVE_NULL 1251 #define ER_NOT_SUPPORTED_AUTH_MODE 1251
#define ER_COLLATION_CHARSET_MISMATCH 1252 #define ER_SPATIAL_CANT_HAVE_NULL 1252
#define ER_SLAVE_WAS_RUNNING 1253 #define ER_COLLATION_CHARSET_MISMATCH 1253
#define ER_SLAVE_WAS_NOT_RUNNING 1254 #define ER_SLAVE_WAS_RUNNING 1254
#define ER_TOO_BIG_FOR_UNCOMPRESS 1255 #define ER_SLAVE_WAS_NOT_RUNNING 1255
#define ER_ZLIB_Z_MEM_ERROR 1256 #define ER_TOO_BIG_FOR_UNCOMPRESS 1256
#define ER_ZLIB_Z_BUF_ERROR 1257 #define ER_ZLIB_Z_MEM_ERROR 1257
#define ER_ZLIB_Z_DATA_ERROR 1258 #define ER_ZLIB_Z_BUF_ERROR 1258
#define ER_CUT_VALUE_GROUP_CONCAT 1259 #define ER_ZLIB_Z_DATA_ERROR 1259
#define ER_WARN_TOO_FEW_RECORDS 1260 #define ER_CUT_VALUE_GROUP_CONCAT 1260
#define ER_WARN_TOO_MANY_RECORDS 1261 #define ER_WARN_TOO_FEW_RECORDS 1261
#define ER_WARN_NULL_TO_NOTNULL 1262 #define ER_WARN_TOO_MANY_RECORDS 1262
#define ER_WARN_DATA_OUT_OF_RANGE 1263 #define ER_WARN_NULL_TO_NOTNULL 1263
#define ER_WARN_DATA_TRUNCATED 1264 #define ER_WARN_DATA_OUT_OF_RANGE 1264
#define ER_WARN_USING_OTHER_HANDLER 1265 #define ER_WARN_DATA_TRUNCATED 1265
#define ER_CANT_AGGREGATE_2COLLATIONS 1266 #define ER_WARN_USING_OTHER_HANDLER 1266
#define ER_DROP_USER 1267 #define ER_CANT_AGGREGATE_2COLLATIONS 1267
#define ER_REVOKE_GRANTS 1268 #define ER_DROP_USER 1268
#define ER_CANT_AGGREGATE_3COLLATIONS 1269 #define ER_REVOKE_GRANTS 1269
#define ER_CANT_AGGREGATE_NCOLLATIONS 1270 #define ER_CANT_AGGREGATE_3COLLATIONS 1270
#define ER_VARIABLE_IS_NOT_STRUCT 1271 #define ER_CANT_AGGREGATE_NCOLLATIONS 1271
#define ER_UNKNOWN_COLLATION 1272 #define ER_VARIABLE_IS_NOT_STRUCT 1272
#define ER_SLAVE_IGNORED_SSL_PARAMS 1273 #define ER_UNKNOWN_COLLATION 1273
#define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1274 #define ER_SLAVE_IGNORED_SSL_PARAMS 1274
#define ER_WARN_FIELD_RESOLVED 1275 #define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1275
#define ER_BAD_SLAVE_UNTIL_COND 1276 #define ER_WARN_FIELD_RESOLVED 1276
#define ER_MISSING_SKIP_SLAVE 1277 #define ER_BAD_SLAVE_UNTIL_COND 1277
#define ER_UNTIL_COND_IGNORED 1278 #define ER_MISSING_SKIP_SLAVE 1278
#define ER_WRONG_NAME_FOR_INDEX 1279 #define ER_UNTIL_COND_IGNORED 1279
#define ER_WRONG_NAME_FOR_CATALOG 1280 #define ER_WRONG_NAME_FOR_INDEX 1280
#define ER_WARN_QC_RESIZE 1281 #define ER_WRONG_NAME_FOR_CATALOG 1281
#define ER_BAD_FT_COLUMN 1282 #define ER_WARN_QC_RESIZE 1282
#define ER_UNKNOWN_KEY_CACHE 1283 #define ER_BAD_FT_COLUMN 1283
#define ER_WARN_HOSTNAME_WONT_WORK 1284 #define ER_UNKNOWN_KEY_CACHE 1284
#define ER_UNKNOWN_STORAGE_ENGINE 1285 #define ER_WARN_HOSTNAME_WONT_WORK 1285
#define ER_WARN_DEPRECATED_SYNTAX 1286 #define ER_UNKNOWN_STORAGE_ENGINE 1286
#define ER_NON_UPDATABLE_TABLE 1287 #define ER_WARN_DEPRECATED_SYNTAX 1287
#define ER_FEATURE_DISABLED 1288 #define ER_NON_UPDATABLE_TABLE 1288
#define ER_SKIP_GRANT_TABLES 1289 #define ER_FEATURE_DISABLED 1289
#define ER_ERROR_MESSAGES 290 #define ER_SKIP_GRANT_TABLES 1290
#define ER_ERROR_MESSAGES 291
...@@ -2709,7 +2709,7 @@ btr_estimate_number_of_different_key_vals( ...@@ -2709,7 +2709,7 @@ btr_estimate_number_of_different_key_vals(
ulint n_cols; ulint n_cols;
ulint matched_fields; ulint matched_fields;
ulint matched_bytes; ulint matched_bytes;
ulint* n_diff; ib_longlong* n_diff;
ulint not_empty_flag = 0; ulint not_empty_flag = 0;
ulint total_external_size = 0; ulint total_external_size = 0;
ulint i; ulint i;
...@@ -2781,7 +2781,8 @@ btr_estimate_number_of_different_key_vals( ...@@ -2781,7 +2781,8 @@ btr_estimate_number_of_different_key_vals(
for (j = 0; j <= n_cols; j++) { for (j = 0; j <= n_cols; j++) {
index->stat_n_diff_key_vals[j] = index->stat_n_diff_key_vals[j] =
(n_diff[j] * index->stat_n_leaf_pages (n_diff[j]
* (ib_longlong)index->stat_n_leaf_pages
+ BTR_KEY_VAL_ESTIMATE_N_PAGES - 1 + BTR_KEY_VAL_ESTIMATE_N_PAGES - 1
+ total_external_size + total_external_size
+ not_empty_flag) + not_empty_flag)
......
...@@ -299,7 +299,7 @@ buf_LRU_get_free_block(void) ...@@ -299,7 +299,7 @@ buf_LRU_get_free_block(void)
buf_block_t* block = NULL; buf_block_t* block = NULL;
ibool freed; ibool freed;
ulint n_iterations = 1; ulint n_iterations = 1;
ibool mon_value_was = 0; /* remove bug */ ibool mon_value_was = FALSE;
ibool started_monitor = FALSE; ibool started_monitor = FALSE;
loop: loop:
mutex_enter(&(buf_pool->mutex)); mutex_enter(&(buf_pool->mutex));
...@@ -318,12 +318,14 @@ loop: ...@@ -318,12 +318,14 @@ loop:
} else if (!recv_recovery_on && UT_LIST_GET_LEN(buf_pool->free) } else if (!recv_recovery_on && UT_LIST_GET_LEN(buf_pool->free)
+ UT_LIST_GET_LEN(buf_pool->LRU) < buf_pool->max_size / 5) { + UT_LIST_GET_LEN(buf_pool->LRU) < buf_pool->max_size / 5) {
if (!srv_print_innodb_monitor) {
/* Over 80 % of the buffer pool is occupied by lock heaps /* Over 80 % of the buffer pool is occupied by lock
or the adaptive hash index. This may be a memory leak! */ heaps or the adaptive hash index. This may be a memory
leak! */
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
fprintf(stderr, fprintf(stderr,
" InnoDB: WARNING: over 4 / 5 of the buffer pool is occupied by\n" " InnoDB: WARNING: over 4 / 5 of the buffer pool is occupied by\n"
"InnoDB: lock heaps or the adaptive hash index! Check that your\n" "InnoDB: lock heaps or the adaptive hash index! Check that your\n"
"InnoDB: transactions do not set too many row locks.\n" "InnoDB: transactions do not set too many row locks.\n"
...@@ -333,8 +335,9 @@ loop: ...@@ -333,8 +335,9 @@ loop:
"InnoDB: lock heap and hash index sizes.\n", "InnoDB: lock heap and hash index sizes.\n",
(ulong) (buf_pool->curr_size / (1024 * 1024 / UNIV_PAGE_SIZE))); (ulong) (buf_pool->curr_size / (1024 * 1024 / UNIV_PAGE_SIZE)));
srv_print_innodb_monitor = TRUE; srv_print_innodb_monitor = TRUE;
os_event_set(srv_lock_timeout_thread_event);
}
} else if (!recv_recovery_on && UT_LIST_GET_LEN(buf_pool->free) } else if (!recv_recovery_on && UT_LIST_GET_LEN(buf_pool->free)
+ UT_LIST_GET_LEN(buf_pool->LRU) < buf_pool->max_size / 4) { + UT_LIST_GET_LEN(buf_pool->LRU) < buf_pool->max_size / 4) {
...@@ -423,6 +426,7 @@ loop: ...@@ -423,6 +426,7 @@ loop:
mon_value_was = srv_print_innodb_monitor; mon_value_was = srv_print_innodb_monitor;
started_monitor = TRUE; started_monitor = TRUE;
srv_print_innodb_monitor = TRUE; srv_print_innodb_monitor = TRUE;
os_event_set(srv_lock_timeout_thread_event);
} }
/* No free block was found: try to flush the LRU list */ /* No free block was found: try to flush the LRU list */
......
...@@ -1210,23 +1210,36 @@ dict_create_or_check_foreign_constraint_tables(void) ...@@ -1210,23 +1210,36 @@ dict_create_or_check_foreign_constraint_tables(void)
} }
/************************************************************************ /************************************************************************
Adds foreign key definitions to data dictionary tables in the database. */ Adds foreign key definitions to data dictionary tables in the database. We
look at table->foreign_list, and also generate names to constraints that were
not named by the user. A generated constraint has a name of the format
databasename/tablename_ibfk_<number>, where the numbers start from 1, and are
given locally for this table, that is, the number is not global, as in the
old format constraints < 4.0.18 it used to be. */
ulint ulint
dict_create_add_foreigns_to_dictionary( dict_create_add_foreigns_to_dictionary(
/*===================================*/ /*===================================*/
/* out: error code or DB_SUCCESS */ /* out: error code or DB_SUCCESS */
ulint start_id,/* in: if we are actually doing ALTER TABLE
ADD CONSTRAINT, we want to generate constraint
numbers which are bigger than in the table so
far; we number the constraints from
start_id + 1 up; start_id should be set to 0 if
we are creating a new table, or if the table
so far has no constraints for which the name
was generated here */
dict_table_t* table, /* in: table */ dict_table_t* table, /* in: table */
trx_t* trx) /* in: transaction */ trx_t* trx) /* in: transaction */
{ {
dict_foreign_t* foreign; dict_foreign_t* foreign;
que_thr_t* thr; que_thr_t* thr;
que_t* graph; que_t* graph;
dulint id; ulint number = start_id + 1;
ulint len; ulint len;
ulint error; ulint error;
char* ebuf = dict_foreign_err_buf;
ulint i; ulint i;
char buf2[50];
char buf[10000]; char buf[10000];
ut_ad(mutex_own(&(dict_sys->mutex))); ut_ad(mutex_own(&(dict_sys->mutex)));
...@@ -1254,18 +1267,18 @@ loop: ...@@ -1254,18 +1267,18 @@ loop:
"PROCEDURE ADD_FOREIGN_DEFS_PROC () IS\n" "PROCEDURE ADD_FOREIGN_DEFS_PROC () IS\n"
"BEGIN\n"); "BEGIN\n");
/* We allocate the new id from the sequence of table id's */ if (foreign->id == NULL) {
id = dict_hdr_get_new_id(DICT_HDR_TABLE_ID); /* Generate a new constraint id */
foreign->id = mem_heap_alloc(foreign->heap,
ut_strlen(table->name)
+ 20);
sprintf(foreign->id, "%s_ibfk_%lu", table->name, (ulong) number);
number++;
}
sprintf(buf2, "%lu_%lu", (ulong) ut_dulint_get_high(id),
(ulong) ut_dulint_get_low(id));
foreign->id = mem_heap_alloc(foreign->heap, ut_strlen(buf2) + 1);
ut_memcpy(foreign->id, buf2, ut_strlen(buf2) + 1);
len += sprintf(buf + len, len += sprintf(buf + len,
"INSERT INTO SYS_FOREIGN VALUES('%lu_%lu', '%s', '%s', %lu);\n", "INSERT INTO SYS_FOREIGN VALUES('%s', '%s', '%s', %lu);\n",
(ulong) ut_dulint_get_high(id), foreign->id,
(ulong) ut_dulint_get_low(id),
table->name, table->name,
foreign->referenced_table_name, foreign->referenced_table_name,
(ulong) (foreign->n_fields (ulong) (foreign->n_fields
...@@ -1274,9 +1287,8 @@ loop: ...@@ -1274,9 +1287,8 @@ loop:
for (i = 0; i < foreign->n_fields; i++) { for (i = 0; i < foreign->n_fields; i++) {
len += sprintf(buf + len, len += sprintf(buf + len,
"INSERT INTO SYS_FOREIGN_COLS VALUES('%lu_%lu', %lu, '%s', '%s');\n", "INSERT INTO SYS_FOREIGN_COLS VALUES('%s', %lu, '%s', '%s');\n",
(ulong) ut_dulint_get_high(id), foreign->id,
(ulong) ut_dulint_get_low(id),
(ulong) i, (ulong) i,
foreign->foreign_col_names[i], foreign->foreign_col_names[i],
foreign->referenced_col_names[i]); foreign->referenced_col_names[i]);
...@@ -1301,29 +1313,30 @@ loop: ...@@ -1301,29 +1313,30 @@ loop:
que_graph_free(graph); que_graph_free(graph);
if (error == DB_DUPLICATE_KEY) {
mutex_enter(&dict_foreign_err_mutex);
ut_sprintf_timestamp(dict_foreign_err_buf);
sprintf(ebuf + strlen(ebuf),
" Error in foreign key constraint creation for table %.500s.\n"
"A foreign key constraint of name %.500s\n"
"already exists (note that internally InnoDB adds 'databasename/'\n"
"in front of the user-defined constraint name).\n", table->name, foreign->id);
ut_a(strlen(ebuf) < DICT_FOREIGN_ERR_BUF_LEN);
mutex_exit(&dict_foreign_err_mutex);
return(error);
}
if (error != DB_SUCCESS) { if (error != DB_SUCCESS) {
fprintf(stderr, fprintf(stderr,
"InnoDB: Foreign key constraint creation failed:\n" "InnoDB: Foreign key constraint creation failed:\n"
"InnoDB: internal error number %lu\n", (ulong) error); "InnoDB: internal error number %lu\n", (ulong) error);
if (error == DB_DUPLICATE_KEY) {
fprintf(stderr,
"InnoDB: Duplicate key error in system table %s index %s\n",
((dict_index_t*)trx->error_info)->table_name,
((dict_index_t*)trx->error_info)->name);
fprintf(stderr, "%s\n", buf);
fprintf(stderr,
"InnoDB: Maybe the internal data dictionary of InnoDB is\n"
"InnoDB: out-of-sync from the .frm files of your tables.\n"
"InnoDB: See section 15.1 Troubleshooting data dictionary operations\n"
"InnoDB: at http://www.innodb.com/ibman.html\n");
}
mutex_enter(&dict_foreign_err_mutex); mutex_enter(&dict_foreign_err_mutex);
ut_sprintf_timestamp(buf); ut_sprintf_timestamp(ebuf);
sprintf(buf + strlen(buf), sprintf(ebuf + strlen(ebuf),
" Internal error in foreign key constraint creation for table %.500s.\n" " Internal error in foreign key constraint creation for table %.500s.\n"
"See the MySQL .err log in the datadir for more information.\n", table->name); "See the MySQL .err log in the datadir for more information.\n", table->name);
mutex_exit(&dict_foreign_err_mutex); mutex_exit(&dict_foreign_err_mutex);
......
This diff is collapsed.
...@@ -3045,6 +3045,14 @@ loop: ...@@ -3045,6 +3045,14 @@ loop:
goto reset_bit; goto reset_bit;
} }
/* Do NOT merge to the 4.1 code base! */
if (trx_sys_downgrading_from_4_1_1) {
fprintf(stderr,
"InnoDB: Fatal error: you are downgrading from >= 4.1.1 to 4.0, but\n"
"InnoDB: the insert buffer was not empty.\n");
ut_a(0);
}
if (corruption_noticed) { if (corruption_noticed) {
rec_sprintf(err_buf, 450, ibuf_rec); rec_sprintf(err_buf, 450, ibuf_rec);
fprintf(stderr, fprintf(stderr,
......
...@@ -262,6 +262,14 @@ dtuple_set_types_binary( ...@@ -262,6 +262,14 @@ dtuple_set_types_binary(
/*====================*/ /*====================*/
dtuple_t* tuple, /* in: data tuple */ dtuple_t* tuple, /* in: data tuple */
ulint n); /* in: number of fields to set */ ulint n); /* in: number of fields to set */
/**************************************************************************
Checks if a dtuple contains an SQL null value. */
UNIV_INLINE
ibool
dtuple_contains_null(
/*=================*/
/* out: TRUE if some field is SQL null */
dtuple_t* tuple); /* in: dtuple */
/************************************************************** /**************************************************************
Checks that a data field is typed. Asserts an error if not. */ Checks that a data field is typed. Asserts an error if not. */
......
...@@ -406,3 +406,28 @@ data_write_sql_null( ...@@ -406,3 +406,28 @@ data_write_sql_null(
data[j] = '\0'; data[j] = '\0';
} }
} }
/**************************************************************************
Checks if a dtuple contains an SQL null value. */
UNIV_INLINE
ibool
dtuple_contains_null(
/*=================*/
/* out: TRUE if some field is SQL null */
dtuple_t* tuple) /* in: dtuple */
{
ulint n;
ulint i;
n = dtuple_get_n_fields(tuple);
for (i = 0; i < n; i++) {
if (dfield_get_len(dtuple_get_nth_field(tuple, i))
== UNIV_SQL_NULL) {
return(TRUE);
}
}
return(FALSE);
}
...@@ -81,12 +81,25 @@ dict_create_or_check_foreign_constraint_tables(void); ...@@ -81,12 +81,25 @@ dict_create_or_check_foreign_constraint_tables(void);
/*================================================*/ /*================================================*/
/* out: DB_SUCCESS or error code */ /* out: DB_SUCCESS or error code */
/************************************************************************ /************************************************************************
Adds foreign key definitions to data dictionary tables in the database. */ Adds foreign key definitions to data dictionary tables in the database. We
look at table->foreign_list, and also generate names to constraints that were
not named by the user. A generated constraint has a name of the format
databasename/tablename_ibfk_<number>, where the numbers start from 1, and are
given locally for this table, that is, the number is not global, as in the
old format constraints < 4.0.18 it used to be. */
ulint ulint
dict_create_add_foreigns_to_dictionary( dict_create_add_foreigns_to_dictionary(
/*===================================*/ /*===================================*/
/* out: error code or DB_SUCCESS */ /* out: error code or DB_SUCCESS */
ulint start_id,/* in: if we are actually doing ALTER TABLE
ADD CONSTRAINT, we want to generate constraint
numbers which are bigger than in the table so
far; we number the constraints from
start_id + 1 up; start_id should be set to 0 if
we are creating a new table, or if the table
so far has no constraints for which the name
was generated here */
dict_table_t* table, /* in: table */ dict_table_t* table, /* in: table */
trx_t* trx); /* in: transaction */ trx_t* trx); /* in: transaction */
......
...@@ -26,6 +26,14 @@ Created 1/8/1996 Heikki Tuuri ...@@ -26,6 +26,14 @@ Created 1/8/1996 Heikki Tuuri
#include "ut0byte.h" #include "ut0byte.h"
#include "trx0types.h" #include "trx0types.h"
/************************************************************************
Get the database name length in a table name. */
ulint
dict_get_db_name_len(
/*=================*/
/* out: database name length */
char* name); /* in: table name in the form dbname '/' tablename */
/************************************************************************* /*************************************************************************
Accepts a specified string. Comparisons are case-insensitive. */ Accepts a specified string. Comparisons are case-insensitive. */
...@@ -217,6 +225,15 @@ dict_foreign_add_to_cache( ...@@ -217,6 +225,15 @@ dict_foreign_add_to_cache(
/* out: DB_SUCCESS or error code */ /* out: DB_SUCCESS or error code */
dict_foreign_t* foreign); /* in, own: foreign key constraint */ dict_foreign_t* foreign); /* in, own: foreign key constraint */
/************************************************************************* /*************************************************************************
Checks if a table is referenced by foreign keys. */
ibool
dict_table_referenced_by_foreign_key(
/*=================================*/
/* out: TRUE if table is referenced by a
foreign key */
dict_table_t* table); /* in: InnoDB table */
/*************************************************************************
Scans a table create SQL string and adds to the data dictionary Scans a table create SQL string and adds to the data dictionary
the foreign key constraints declared in the string. This function the foreign key constraints declared in the string. This function
should be called after the indexes for a table have been created. should be called after the indexes for a table have been created.
......
...@@ -95,10 +95,17 @@ ut_str_catenate( ...@@ -95,10 +95,17 @@ ut_str_catenate(
/* out, own: catenated null-terminated string */ /* out, own: catenated null-terminated string */
char* str1, /* in: null-terminated string */ char* str1, /* in: null-terminated string */
char* str2); /* in: null-terminated string */ char* str2); /* in: null-terminated string */
/**************************************************************************
Checks if a null-terminated string contains a certain character. */
ibool
ut_str_contains(
/*============*/
char* str, /* in: null-terminated string */
char c); /* in: character */
#ifndef UNIV_NONINL #ifndef UNIV_NONINL
#include "ut0mem.ic" #include "ut0mem.ic"
#endif #endif
#endif #endif
...@@ -655,7 +655,18 @@ failure: ...@@ -655,7 +655,18 @@ failure:
if (!success) { if (!success) {
fprintf(stderr, fprintf(stderr,
"InnoDB: Error: log file group too small for innodb_thread_concurrency\n"); "InnoDB: Error: ib_logfiles are too small for innodb_thread_concurrency %lu.\n"
"InnoDB: The combined size of ib_logfiles should be bigger than\n"
"InnoDB: 200 kB * innodb_thread_concurrency.\n"
"InnoDB: To get mysqld to start up, set innodb_thread_concurrency in my.cnf\n"
"InnoDB: to a lower value, for example, to 8. After an ERROR-FREE shutdown\n"
"InnoDB: of mysqld you can adjust the size of ib_logfiles, as explained in\n"
"InnoDB: section 5 of http://www.innodb.com/ibman.php",
(ulong)srv_thread_concurrency);
fprintf(stderr,
"InnoDB: Cannot continue operation. Calling exit(1).\n");
exit(1);
} }
return(success); return(success);
......
...@@ -682,14 +682,6 @@ row_ins_foreign_check_on_constraint( ...@@ -682,14 +682,6 @@ row_ins_foreign_check_on_constraint(
(DICT_FOREIGN_ON_DELETE_CASCADE (DICT_FOREIGN_ON_DELETE_CASCADE
| DICT_FOREIGN_ON_DELETE_SET_NULL))) { | DICT_FOREIGN_ON_DELETE_SET_NULL))) {
/* No action is defined: return a foreign key error if
NO ACTION is not specified */
if (foreign->type & DICT_FOREIGN_ON_DELETE_NO_ACTION) {
return(DB_SUCCESS);
}
row_ins_foreign_report_err((char*)"Trying to delete", row_ins_foreign_report_err((char*)"Trying to delete",
thr, foreign, thr, foreign,
btr_pcur_get_rec(pcur), entry); btr_pcur_get_rec(pcur), entry);
...@@ -703,14 +695,6 @@ row_ins_foreign_check_on_constraint( ...@@ -703,14 +695,6 @@ row_ins_foreign_check_on_constraint(
/* This is an UPDATE */ /* This is an UPDATE */
/* No action is defined: return a foreign key error if
NO ACTION is not specified */
if (foreign->type & DICT_FOREIGN_ON_UPDATE_NO_ACTION) {
return(DB_SUCCESS);
}
row_ins_foreign_report_err((char*)"Trying to update", row_ins_foreign_report_err((char*)"Trying to update",
thr, foreign, thr, foreign,
btr_pcur_get_rec(pcur), entry); btr_pcur_get_rec(pcur), entry);
......
...@@ -2085,6 +2085,7 @@ row_drop_table_for_mysql( ...@@ -2085,6 +2085,7 @@ row_drop_table_for_mysql(
char* name, /* in: table name */ char* name, /* in: table name */
trx_t* trx) /* in: transaction handle */ trx_t* trx) /* in: transaction handle */
{ {
dict_foreign_t* foreign;
dict_table_t* table; dict_table_t* table;
ulint space_id; ulint space_id;
que_thr_t* thr; que_thr_t* thr;
...@@ -2282,6 +2283,38 @@ row_drop_table_for_mysql( ...@@ -2282,6 +2283,38 @@ row_drop_table_for_mysql(
goto funct_exit; goto funct_exit;
} }
/* Check if the table is referenced by foreign key constraints from
some other table (not the table itself) */
foreign = UT_LIST_GET_FIRST(table->referenced_list);
while (foreign && foreign->foreign_table == table) {
foreign = UT_LIST_GET_NEXT(referenced_list, foreign);
}
if (foreign && trx->check_foreigns) {
char* buf = dict_foreign_err_buf;
/* We only allow dropping a referenced table if
FOREIGN_KEY_CHECKS is set to 0 */
err = DB_CANNOT_DROP_CONSTRAINT;
mutex_enter(&dict_foreign_err_mutex);
ut_sprintf_timestamp(buf);
sprintf(buf + strlen(buf),
" Cannot drop table %.500s\n", name);
sprintf(buf + strlen(buf),
"because it is referenced by %.500s\n", foreign->foreign_table_name);
ut_a(strlen(buf) < DICT_FOREIGN_ERR_BUF_LEN);
mutex_exit(&dict_foreign_err_mutex);
goto funct_exit;
}
if (table->n_mysql_handles_opened > 0) { if (table->n_mysql_handles_opened > 0) {
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
...@@ -2469,7 +2502,7 @@ row_is_mysql_tmp_table_name( ...@@ -2469,7 +2502,7 @@ row_is_mysql_tmp_table_name(
{ {
ulint i; ulint i;
for (i = 0; i <= ut_strlen(name) - 5; i++) { for (i = 0; i + 5 <= ut_strlen(name); i++) {
if (ut_memcmp(name + i, (char*)"/#sql", 5) == 0) { if (ut_memcmp(name + i, (char*)"/#sql", 5) == 0) {
return(TRUE); return(TRUE);
...@@ -2505,6 +2538,7 @@ row_rename_table_for_mysql( ...@@ -2505,6 +2538,7 @@ row_rename_table_for_mysql(
ulint keywordlen; ulint keywordlen;
ulint len; ulint len;
ulint i; ulint i;
char* db_name;
ibool success; ibool success;
char buf[2 * OS_FILE_MAX_PATH]; char buf[2 * OS_FILE_MAX_PATH];
...@@ -2593,6 +2627,15 @@ row_rename_table_for_mysql( ...@@ -2593,6 +2627,15 @@ row_rename_table_for_mysql(
"PROCEDURE RENAME_TABLE_PROC () IS\n" "PROCEDURE RENAME_TABLE_PROC () IS\n"
"new_table_name CHAR;\n" "new_table_name CHAR;\n"
"old_table_name CHAR;\n" "old_table_name CHAR;\n"
"gen_constr_prefix CHAR;\n"
"new_db_name CHAR;\n"
"foreign_id CHAR;\n"
"new_foreign_id CHAR;\n"
"old_db_name_len INT;\n"
"old_t_name_len INT;\n"
"new_db_name_len INT;\n"
"id_len INT;\n"
"found INT;\n"
"BEGIN\n" "BEGIN\n"
"new_table_name :='"; "new_table_name :='";
...@@ -2619,32 +2662,94 @@ row_rename_table_for_mysql( ...@@ -2619,32 +2662,94 @@ row_rename_table_for_mysql(
} }
str3 = mem_heap_alloc(heap, str3 = mem_heap_alloc(heap,
1000 + 500 * n_constraints_to_drop); 1000 + 1000 * n_constraints_to_drop);
*str3 = '\0'; *str3 = '\0';
sprintf(str3, sprintf(str3,
"';\n" "';\n"
"UPDATE SYS_TABLES SET NAME = new_table_name\n" "UPDATE SYS_TABLES SET NAME = new_table_name\n"
"WHERE NAME = old_table_name;\n"); "WHERE NAME = old_table_name;\n");
db_name = mem_heap_alloc(heap, 1 + dict_get_db_name_len(
old_name));
ut_memcpy(db_name, old_name, dict_get_db_name_len(old_name));
db_name[dict_get_db_name_len(old_name)] = '\0';
/* Internally, old format < 4.0.18 constraints have as the
constraint id <number>_<number>, while new format constraints
have <databasename>/<constraintname>. */
for (i = 0; i < n_constraints_to_drop; i++) { for (i = 0; i < n_constraints_to_drop; i++) {
sprintf(str3 + strlen(str3), sprintf(str3 + strlen(str3),
"DELETE FROM SYS_FOREIGN_COLS WHERE ID = '%s';\n" "DELETE FROM SYS_FOREIGN_COLS WHERE ID = '%s/%s';\n"
"DELETE FROM SYS_FOREIGN WHERE ID = '%s';\n", "DELETE FROM SYS_FOREIGN WHERE ID = '%s/%s';\n",
db_name, constraints_to_drop[i],
db_name, constraints_to_drop[i]);
if (!ut_str_contains(constraints_to_drop[i], '/')) {
/* If this happens to be an old format
constraint, let us delete it. Since all new
format constraints contain '/', it does no
harm to run these DELETEs anyway. */
sprintf(str3 + strlen(str3),
"DELETE FROM SYS_FOREIGN_COLS WHERE ID = '%s';\n"
"DELETE FROM SYS_FOREIGN WHERE ID = '%s';\n",
constraints_to_drop[i], constraints_to_drop[i],
constraints_to_drop[i]); constraints_to_drop[i]);
}
} }
sprintf(str3 + strlen(str3), sprintf(str3 + strlen(str3),
"END;\n"); "END;\n");
ut_a(strlen(str3) < 1000 + 500 * n_constraints_to_drop); ut_a(strlen(str3) < 1000 + 1000 * n_constraints_to_drop);
} else { } else {
str3 = (char*) str3 = (char*)
"';\n" "';\n"
"UPDATE SYS_TABLES SET NAME = new_table_name\n" "UPDATE SYS_TABLES SET NAME = new_table_name\n"
"WHERE NAME = old_table_name;\n" "WHERE NAME = old_table_name;\n"
"UPDATE SYS_FOREIGN SET FOR_NAME = new_table_name\n" "found := 1;\n"
"WHERE FOR_NAME = old_table_name;\n" "old_db_name_len := INSTR(old_table_name, '/') - 1;\n"
"new_db_name_len := INSTR(new_table_name, '/') - 1;\n"
"new_db_name := SUBSTR(new_table_name, 0, new_db_name_len);\n"
"old_t_name_len := LENGTH(old_table_name);\n"
"gen_constr_prefix := CONCAT(old_table_name, '_ibfk_');\n"
"WHILE found = 1 LOOP\n"
" SELECT ID INTO foreign_id\n"
" FROM SYS_FOREIGN\n"
" WHERE FOR_NAME = old_table_name;\n"
" IF (SQL % NOTFOUND) THEN\n"
" found := 0;\n"
" ELSE\n"
" UPDATE SYS_FOREIGN\n"
" SET FOR_NAME = new_table_name\n"
" WHERE ID = foreign_id;\n"
" id_len := LENGTH(foreign_id);\n"
" IF (INSTR(foreign_id, '/') > 0) THEN\n"
" IF (INSTR(foreign_id,\n"
" gen_constr_prefix) > 0)\n"
" THEN\n"
" new_foreign_id :=\n"
" CONCAT(new_table_name,\n"
" SUBSTR(foreign_id, old_t_name_len,\n"
" id_len - old_t_name_len));\n"
" ELSE\n"
" new_foreign_id :=\n"
" CONCAT(new_db_name,\n"
" SUBSTR(foreign_id,\n"
" old_db_name_len,\n"
" id_len - old_db_name_len));\n"
" END IF;\n"
" UPDATE SYS_FOREIGN\n"
" SET ID = new_foreign_id\n"
" WHERE ID = foreign_id;\n"
" UPDATE SYS_FOREIGN_COLS\n"
" SET ID = new_foreign_id\n"
" WHERE ID = foreign_id;\n"
" END IF;\n"
" END IF;\n"
"END LOOP;\n"
"UPDATE SYS_FOREIGN SET REF_NAME = new_table_name\n" "UPDATE SYS_FOREIGN SET REF_NAME = new_table_name\n"
"WHERE REF_NAME = old_table_name;\n" "WHERE REF_NAME = old_table_name;\n"
"END;\n"; "END;\n";
......
...@@ -2886,7 +2886,16 @@ row_search_for_mysql( ...@@ -2886,7 +2886,16 @@ row_search_for_mysql(
if (match_mode == ROW_SEL_EXACT if (match_mode == ROW_SEL_EXACT
&& index->type & DICT_UNIQUE && index->type & DICT_UNIQUE
&& dtuple_get_n_fields(search_tuple) && dtuple_get_n_fields(search_tuple)
== dict_index_get_n_unique(index)) { == dict_index_get_n_unique(index)
&& (index->type & DICT_CLUSTERED
|| !dtuple_contains_null(search_tuple))) {
/* Note above that a UNIQUE secondary index can contain many
rows with the same key value if one of the columns is the SQL
null. A clustered index under MySQL can never contain null
columns because we demand that all the columns in primary key
are non-null. */
unique_search = TRUE; unique_search = TRUE;
/* Even if the condition is unique, MySQL seems to try to /* Even if the condition is unique, MySQL seems to try to
......
...@@ -1587,6 +1587,31 @@ NetWare. */ ...@@ -1587,6 +1587,31 @@ NetWare. */
os_fast_mutex_free(&srv_os_test_mutex); os_fast_mutex_free(&srv_os_test_mutex);
/***********************************************************/
/* Do NOT merge to the 4.1 code base! */
if (trx_sys_downgrading_from_4_1_1) {
fprintf(stderr,
"InnoDB: You are downgrading from an InnoDB version which allows multiple\n"
"InnoDB: tablespaces. Wait that purge and insert buffer merge run to\n"
"InnoDB: completion...\n");
for (;;) {
os_thread_sleep(10000000);
if (0 == strcmp(srv_main_thread_op_info,
"waiting for server activity")) {
break;
}
}
fprintf(stderr,
"InnoDB: Full purge and insert buffer merge completed.\n");
trx_sys_mark_downgraded_from_4_1_1();
fprintf(stderr,
"InnoDB: Downgraded from >= 4.1.1 to 4.0\n");
}
/***********************************************************/
if (srv_print_verbose_log) { if (srv_print_verbose_log) {
ut_print_timestamp(stderr); ut_print_timestamp(stderr);
fprintf(stderr, fprintf(stderr,
......
...@@ -159,7 +159,7 @@ struct sync_thread_struct{ ...@@ -159,7 +159,7 @@ struct sync_thread_struct{
}; };
/* Number of slots reserved for each OS thread in the sync level array */ /* Number of slots reserved for each OS thread in the sync level array */
#define SYNC_THREAD_N_LEVELS 7000 #define SYNC_THREAD_N_LEVELS 10000
struct sync_level_struct{ struct sync_level_struct{
void* latch; /* pointer to a mutex or an rw-lock; NULL means that void* latch; /* pointer to a mutex or an rw-lock; NULL means that
......
...@@ -45,6 +45,43 @@ or there was no master log position info inside InnoDB. */ ...@@ -45,6 +45,43 @@ or there was no master log position info inside InnoDB. */
char trx_sys_mysql_master_log_name[TRX_SYS_MYSQL_LOG_NAME_LEN]; char trx_sys_mysql_master_log_name[TRX_SYS_MYSQL_LOG_NAME_LEN];
ib_longlong trx_sys_mysql_master_log_pos = -1; ib_longlong trx_sys_mysql_master_log_pos = -1;
/* Do NOT merge this to the 4.1 code base! */
ibool trx_sys_downgrading_from_4_1_1 = FALSE;
/********************************************************************
Do NOT merge this to the 4.1 code base!
Marks the trx sys header when we have successfully downgraded from the >= 4.1.1
multiple tablespace format back to the 4.0 format. */
void
trx_sys_mark_downgraded_from_4_1_1(void)
/*====================================*/
{
page_t* page;
byte* doublewrite;
mtr_t mtr;
/* Let us mark to the trx_sys header that the downgrade has been
done. */
mtr_start(&mtr);
page = buf_page_get(TRX_SYS_SPACE, TRX_SYS_PAGE_NO, RW_X_LATCH, &mtr);
buf_page_dbg_add_level(page, SYNC_NO_ORDER_CHECK);
doublewrite = page + TRX_SYS_DOUBLEWRITE;
mlog_write_ulint(doublewrite + TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED,
TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED_N + 1,
MLOG_4BYTES, &mtr);
mtr_commit(&mtr);
/* Flush the modified pages to disk and make a checkpoint */
log_make_checkpoint_at(ut_dulint_max, TRUE);
trx_sys_downgrading_from_4_1_1 = FALSE;
}
/******************************************************************** /********************************************************************
Determines if a page number is located inside the doublewrite buffer. */ Determines if a page number is located inside the doublewrite buffer. */
...@@ -187,7 +224,7 @@ start_again: ...@@ -187,7 +224,7 @@ start_again:
just read in some numbers */ just read in some numbers */
trx_doublewrite_init(doublewrite); trx_doublewrite_init(doublewrite);
mtr_commit(&mtr); mtr_commit(&mtr);
} else { } else {
fprintf(stderr, fprintf(stderr,
...@@ -351,6 +388,31 @@ trx_sys_doublewrite_init_or_restore_pages( ...@@ -351,6 +388,31 @@ trx_sys_doublewrite_init_or_restore_pages(
== TRX_SYS_DOUBLEWRITE_MAGIC_N) { == TRX_SYS_DOUBLEWRITE_MAGIC_N) {
/* The doublewrite buffer has been created */ /* The doublewrite buffer has been created */
/* Do NOT merge to the 4.1 code base! */
if (mach_read_from_4(doublewrite
+ TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED)
== TRX_SYS_DOUBLEWRITE_SPACE_ID_STORED_N) {
fprintf(stderr,
"InnoDB: You are downgrading from the multiple tablespace format of\n"
"InnoDB: >= MySQL-4.1.1 back to the old format of MySQL-4.0.\n"
"InnoDB:\n"
"InnoDB: MAKE SURE that the mysqld server is idle, and purge and the insert\n"
"InnoDB: buffer merge have run to completion under >= 4.1.1 before trying to\n"
"InnoDB: downgrade! You can determine this by looking at SHOW INNODB STATUS:\n"
"InnoDB: if the Main thread is 'waiting for server activity' and SHOW\n"
"InnoDB: PROCESSLIST shows that you have ended all other connections\n"
"InnoDB: to mysqld, then purge and the insert buffer merge have been\n"
"InnoDB: completed.\n"
"InnoDB: If you have already created tables in >= 4.1.1, then those\n"
"InnoDB: tables cannot be used under 4.0.\n"
"InnoDB: NOTE THAT this downgrade procedure has not been properly tested!\n"
"InnoDB: The safe way to downgrade is to dump all InnoDB tables and recreate\n"
"InnoDB: the whole tablespace.\n");
trx_sys_downgrading_from_4_1_1 = TRUE;
}
trx_doublewrite_init(doublewrite); trx_doublewrite_init(doublewrite);
block1 = trx_doublewrite->block1; block1 = trx_doublewrite->block1;
......
...@@ -258,3 +258,27 @@ ut_str_catenate( ...@@ -258,3 +258,27 @@ ut_str_catenate(
return(str); return(str);
} }
/**************************************************************************
Checks if a null-terminated string contains a certain character. */
ibool
ut_str_contains(
/*============*/
char* str, /* in: null-terminated string */
char c) /* in: character */
{
ulint len;
ulint i;
len = ut_strlen(str);
for (i = 0; i < len; i++) {
if (str[i] == c) {
return(TRUE);
}
}
return(FALSE);
}
\ No newline at end of file
...@@ -28,8 +28,8 @@ EXPORTS ...@@ -28,8 +28,8 @@ EXPORTS
my_print_variables my_print_variables
my_realloc my_realloc
my_strdup my_strdup
my_thread_end mysql_thread_end
my_thread_init mysql_thread_init
myodbc_remove_escape myodbc_remove_escape
mysql_affected_rows mysql_affected_rows
mysql_autocommit mysql_autocommit
......
This diff is collapsed.
...@@ -21,7 +21,26 @@ man_MANS = mysql.1 isamchk.1 isamlog.1 mysql_zap.1 mysqlaccess.1 \ ...@@ -21,7 +21,26 @@ man_MANS = mysql.1 isamchk.1 isamlog.1 mysql_zap.1 mysqlaccess.1 \
mysqladmin.1 mysqld.1 mysqld_multi.1 mysqldump.1 mysqlshow.1 \ mysqladmin.1 mysqld.1 mysqld_multi.1 mysqldump.1 mysqlshow.1 \
perror.1 replace.1 mysqld_safe.1 mysql_fix_privilege_tables.1 perror.1 replace.1 mysqld_safe.1 mysql_fix_privilege_tables.1
EXTRA_DIST = $(man_MANS) EXTRA_DIST = mysql.1.in isamchk.1.in isamlog.1.in mysql_zap.1.in \
mysqlaccess.1.in mysqladmin.1.in mysqld.1.in mysqld_multi.1.in \
mysqldump.1.in mysqlshow.1.in perror.1.in replace.1.in \
mysqld_safe.1.in mysql_fix_privilege_tables.1.in
CLEANFILES = $(man_MANS)
SUFFIXES = .in
.in:
@RM@ -f $@ $@-t
@SED@ \
-e 's!@''MYSQL_BASE_VERSION''@!@MYSQL_BASE_VERSION@!' \
-e 's!@''sysconfdir''@!@sysconfdir@!' \
-e 's!@''bindir''@!$(bindir)!g' \
-e 's!@''libexecdir''@!$(libexecdir)!g' \
-e 's!@''localstatedir''@!$(localstatedir)!g' \
-e 's!@''MYSQL_NO_DASH_VERSION''@!@MYSQL_NO_DASH_VERSION@!' \
$< > $@-t
@MV@ $@-t $@
# Don't update the files from bitkeeper # Don't update the files from bitkeeper
%::SCCS/s.% %::SCCS/s.%
.TH isamchk 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH isamchk 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
.BR isamchk .BR isamchk
\- Description, check and repair of ISAM tables. \- Description, check and repair of ISAM tables.
...@@ -114,24 +114,29 @@ Print version and exit. ...@@ -114,24 +114,29 @@ Print version and exit.
.BR \-w | \-\-wait .BR \-w | \-\-wait
Wait if table is locked. Wait if table is locked.
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk (1), isamlog(1),
isamlog (1), mysql(1),
mysqlaccess (1), mysqlaccess(1),
mysqladmin (1), mysqladmin(1),
mysqlbug (1), mysqld(1),
mysqld (1), mysqld_multi(1),
mysqldump (1), mysqld_safe(1),
mysqlshow (1), mysqldump(1),
msql2mysql (1), mysql_fix_privilege_tables(1),
perror (1), mysqlshow(1),
replace (1), mysql_zap(1),
mysqld_safe (1), perror(1),
which1 (1), replace(1)
zap (1), .P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@tcx.se), Michael (Monty) Widenius (monty@mysql.com),
TCX Datakonsult AB (http://www.tcx.se). MySQL AB (http://www.mysql.com/).
This software comes with no warranty. This software comes with no warranty.
Manual page by L. (Kill-9) Pedersen Manual page by L. (Kill-9) Pedersen
(kill-9@kill\-9.dk), Mercurmedia Data Model Architect / (kill-9@kill\-9.dk), Mercurmedia Data Model Architect /
......
.TH isamlog 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH isamlog 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
isamlog - Write info about whats in a nisam log file. isamlog - Write info about whats in a nisam log file.
.SH USAGE .SH USAGE
...@@ -71,27 +71,31 @@ If one gives table names as arguments only these tables will be updated ...@@ -71,27 +71,31 @@ If one gives table names as arguments only these tables will be updated
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk(1),
isamchk (1), mysql(1),
isamlog (1), mysqlaccess(1),
mysqlaccess (1), mysqladmin(1),
mysqladmin (1), mysqld(1),
mysqlbug (1), mysqld_multi(1),
mysqld (1), mysqld_safe(1),
mysqldump (1), mysqldump(1),
mysqlshow (1), mysql_fix_privilege_tables(1),
msql2mysql (1), mysqlshow(1),
perror (1), mysql_zap(1),
replace (1), perror(1),
mysqld_safe (1), replace(1)
which1 (1), .P
zap (1), For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@tcx.se), Michael (Monty) Widenius (monty@mysql.com),
TCX Datakonsult AB (http://www.tcx.se). MySQL AB (http://www.mysql.com/).
This software comes with no warranty. This software comes with no warranty.
Manual page by L. (Kill-9) Pedersen Manual page by L. (Kill-9) Pedersen
(kill-9@kill-9.dk), Mercurmedia Data Model Architect / (kill-9@kill-9.dk), Mercurmedia Data Model Architect /
......
.TH mysql 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH mysql 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
mysql \- text-based client for mysqld, a SQL-based relational database daemon mysql \- text-based client for mysqld, a SQL-based relational database daemon
.SH USAGE
mysql [OPTIONS] [Database]
.SH SYNOPSIS .SH SYNOPSIS
.B mysql .B mysql
.RB [ \-B | \-\-batch ] .RB [ \-B | \-\-batch ]
...@@ -105,16 +107,19 @@ version number and exit. ...@@ -105,16 +107,19 @@ version number and exit.
Wait and retry if the database server connection is down. Wait and retry if the database server connection is down.
.SH FILES .SH FILES
.TP 2.2i .TP 2.2i
.I /depot/bin/mysql .I @sysconfdir@/my.cnf
executable MySQL configuration file
.TP .TP
.I /depot/bin/mysqld .I @bindir@/mysql
executable Client executable
.TP .TP
.I /depot/bin/mysqld_safe .I @libexecdir@/mysqld
Server executable
.TP
.I @bindir@/mysqld_safe
executable shell script for starting mysqld safely executable shell script for starting mysqld safely
.TP .TP
.I /site/var/mysql/data .I @localstatedir@
location of database files location of database files
.SH EXAMPLE .SH EXAMPLE
You can also read a backup dump file back into MySQL with: You can also read a backup dump file back into MySQL with:
...@@ -124,24 +129,29 @@ You can also read a backup dump file back into MySQL with: ...@@ -124,24 +129,29 @@ You can also read a backup dump file back into MySQL with:
.BR < .BR <
backup-file.sql backup-file.sql
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk (1), isamchk(1),
isamlog (1), isamlog(1),
mysqlaccess (1), mysqlaccess(1),
mysqladmin (1), mysqladmin(1),
mysqlbug (1), mysqld(1),
mysqld (1), mysqld_multi(1),
mysqldump (1), mysqld_safe(1),
mysqlshow (1), mysqldump(1),
msql2mysql (1), mysql_fix_privilege_tables(1),
perror (1), mysqlshow(1),
replace (1), mysql_zap(1),
mysqld_safe (1), perror(1),
which1 (1), replace(1)
zap (1), .P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 6.3, distribution 3.20.20 Ver 6.3, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@tcx.se), Michael (Monty) Widenius (monty@mysql.com),
TCX Datakonsult AB (http://www.tcx.se). MySQL AB (http://www.mysql.com/)
This software comes with no warranty. This software comes with no warranty.
Manual page by R. P. C. Rodgers, Manual page by R. P. C. Rodgers,
Lister Hill National Center for Biomedical Communication, Lister Hill National Center for Biomedical Communication,
......
.TH mysql 1 "17 March 2003" "MySQL 4.0" "MySQL database" .TH mysql 1 "17 March 2003" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
mysql_fix_privilege_tables \- Fixes MySQL privilege tables. mysql_fix_privilege_tables \- Fixes MySQL privilege tables.
.SH SYNOPSIS .SH SYNOPSIS
...@@ -14,7 +14,25 @@ If you get 'Access denied' errors, run the script again ...@@ -14,7 +14,25 @@ If you get 'Access denied' errors, run the script again
and give the MySQL root user password as an argument. and give the MySQL root user password as an argument.
.SH "SEE ALSO" .SH "SEE ALSO"
mysql (1), mysqld (1) isamchk(1),
isamlog(1),
mysql(1),
mysqlaccess(1),
mysqladmin(1),
mysqld(1),
mysqld_multi(1),
mysqld_safe(1),
mysqldump(1),
mysqlshow(1),
mysql_zap(1),
perror(1),
replace(1)
.P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
This manpage was written by Christian Hammers <ch@debian.org>. This manpage was written by Christian Hammers <ch@debian.org>.
......
.TH zap 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH zap 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
zap - a perl script used to kill processes zap - a perl script used to kill processes
.SH USAGE .SH USAGE
...@@ -28,7 +28,25 @@ isn't given, ask user for confirmation for each process to kill. If signal isn't ...@@ -28,7 +28,25 @@ isn't given, ask user for confirmation for each process to kill. If signal isn't
.BR -t .BR -t
is given the processes is only shown on stdout. is given the processes is only shown on stdout.
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk (1), isamlog (1), mysqlaccess (1), mysqladmin (1), mysqlbug (1), mysqld (1), mysqldump (1), mysqlshow (1), msql2mysql (1), perror (1), replace (1), mysqld_safe (1), which1 (1), zap (1), isamchk(1),
isamlog(1),
mysql(1),
mysqlaccess(1),
mysqladmin(1),
mysqld(1),
mysqld_multi(1),
mysqld_safe(1),
mysqldump(1),
mysql_fix_privilege_tables(1),
mysqlshow(1),
perror(1),
replace(1)
.P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Michael (Monty) Widenius (monty@tcx.se), TCX Datakonsult AB (http://www.tcx.se). This software comes with no warranty. Manual page by L. (Kill-9) Pedersen (kill-9@kill-9.dk), Mercurmedia Data Model Architect / system developer (http://www.mercurmedia.com) Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@ Michael (Monty) Widenius (monty@mysql.com), MySQL AB (http://www.mysql.com/). This software comes with no warranty. Manual page by L. (Kill-9) Pedersen (kill-9@kill-9.dk), Mercurmedia Data Model Architect / system developer (http://www.mercurmedia.com)
.\" end of man page .\" end of man page
\ No newline at end of file
.TH mysqlaccess 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH mysqlaccess 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
.BR mysqlaccess .BR mysqlaccess
\- Create new users to mysql. \- Create new users to mysql.
...@@ -95,24 +95,29 @@ If no host is given, `localhost' is assumed ...@@ -95,24 +95,29 @@ If no host is given, `localhost' is assumed
Wildcards (*,?,%,_) are allowed for host, user and db, but be sure Wildcards (*,?,%,_) are allowed for host, user and db, but be sure
to escape them from your shell!! (i.e., type \\* or '*') to escape them from your shell!! (i.e., type \\* or '*')
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk (1), isamchk(1),
isamlog (1), isamlog(1),
mysqlaccess (1), mysql(1),
mysqladmin (1), mysqladmin(1),
mysqlbug (1), mysqld(1),
mysqld (1), mysqld_multi(1),
mysqldump (1), mysqld_safe(1),
mysqlshow (1), mysqldump(1),
msql2mysql (1), mysql_fix_privilege_tables(1),
perror (1), mysqlshow(1),
replace (1), mysql_zap(1),
mysqld_safe (1), perror(1),
which1 (1), replace(1)
zap (1), .P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@tcx.se), Michael (Monty) Widenius (monty@mysql.com),
TCX Datakonsult AB (http://www.tcx.se). MySQL AB (http://www.mysql.com/).
This software comes with no warranty. This software comes with no warranty.
Manual page by L. (Kill-9) Pedersen Manual page by L. (Kill-9) Pedersen
(kill-9@kill\-9.dk), Mercurmedia Data Model Architect / (kill-9@kill\-9.dk), Mercurmedia Data Model Architect /
......
.TH mysqladmin 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH mysqladmin 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
mysqladmin [OPTIONS] command command.... \- A utility for performing administrative operations mysqladmin [OPTIONS] command command.... \- A utility for performing administrative operations
.SH OPTION SYNOPSIS .SH OPTION SYNOPSIS
...@@ -178,31 +178,32 @@ Prints variables available ...@@ -178,31 +178,32 @@ Prints variables available
.BR version .BR version
Get version info from server Get version info from server
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk (1), isamchk(1),
isamlog (1), isamlog(1),
mysqlaccess (1), mysql(1),
mysqladmin (1), mysqlaccess(1),
mysqlbug (1), mysqld(1),
mysqld (1), mysqld_multi(1),
mysqldump (1), mysqld_safe(1),
mysqlshow (1), mysqldump(1),
msql2mysql (1), mysql_fix_privilege_tables(1),
perror (1), mysqlshow(1),
replace (1), mysql_zap(1),
mysqld_safe (1), perror(1),
which1 (1), replace(1)
zap (1), .P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@tcx.se), Michael (Monty) Widenius (monty@mysql.com),
TCX Datakonsult AB (http://www.tcx.se). MySQL AB (http://www.mysql.com/).
This software comes with no warranty. This software comes with no warranty.
Manual page by L. (Kill-9) Pedersen Manual page by L. (Kill-9) Pedersen
(kill-9@kill-9.dk), Mercurmedia Data Model Architect / (kill-9@kill-9.dk), Mercurmedia Data Model Architect /
system developer (http://www.mercurmedia.com) system developer (http://www.mercurmedia.com)
.\" end of man page .\" end of man page
.TH mysqld 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH mysqld 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
.BR mysqld mysqld \- The MySQL server demon
\- Starts the MySQL server demon
.SH USAGE .SH USAGE
mysqld [OPTIONS] mysqld [OPTIONS]
.SH SYNOPSIS .SH SYNOPSIS
...@@ -204,24 +203,29 @@ Output version information and exit. ...@@ -204,24 +203,29 @@ Output version information and exit.
.SH NOTE .SH NOTE
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk (1), isamchk(1),
isamlog (1), isamlog(1),
mysqlaccess (1), mysql(1),
mysqladmin (1), mysqlaccess(1),
mysqlbug (1), mysqladmin(1),
mysqld (1), mysqld_multi(1),
mysqldump (1), mysqld_safe(1),
mysqlshow (1), mysqldump(1),
msql2mysql (1), mysql_fix_privilege_tables(1),
perror (1), mysqlshow(1),
replace (1), mysql_zap(1),
mysqld_safe (1), perror(1),
which1 (1), replace(1)
zap (1), .P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@tcx.se), Michael (Monty) Widenius (monty@mysql.com),
TCX Datakonsult AB (http://www.tcx.se). MySQL AB (http://www.mysql.com/).
This software comes with no warranty. This software comes with no warranty.
Manual page by L. (Kill-9) Pedersen Manual page by L. (Kill-9) Pedersen
(kill-9@kill\-9.dk), Mercurmedia Data Model Architect / (kill-9@kill\-9.dk), Mercurmedia Data Model Architect /
......
.TH mysqld_multi 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH mysqld_multi 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
mysqld_multi - is meant for managing several mysqld processes running in different UNIX sockets and TCP/IP ports. mysqld_multi - is meant for managing several mysqld processes running in different UNIX sockets and TCP/IP ports.
.SH USAGE .SH USAGE
...@@ -58,27 +58,31 @@ Please see the mysql manual for more detailed information on this. ...@@ -58,27 +58,31 @@ Please see the mysql manual for more detailed information on this.
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk(1),
isamchk (1), isamlog(1),
isamlog (1), mysql(1),
mysqlaccess (1), mysqlaccess(1),
mysqladmin (1), mysqladmin(1),
mysqlbug (1), mysqld(1),
mysqld (1), mysqld_safe(1),
mysqldump (1), mysqldump(1),
mysqlshow (1), mysql_fix_privilege_tables(1),
msql2mysql (1), mysqlshow(1),
perror (1), mysql_zap(1),
replace (1), perror(1),
mysqld_safe (1), replace(1)
which1 (1), .P
zap (1), For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@tcx.se), Michael (Monty) Widenius (monty@mysql.com),
TCX Datakonsult AB (http://www.tcx.se). MySQL AB (http://www.mysql.com/).
This software comes with no warranty. This software comes with no warranty.
Manual page by L. (Kill-9) Pedersen Manual page by L. (Kill-9) Pedersen
(kill-9@kill-9.dk), Mercurmedia Data Model Architect / (kill-9@kill-9.dk), Mercurmedia Data Model Architect /
......
.TH safe_mysqld 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH safe_mysqld 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
mysqld_safe \- start the mysqld daemon on Unix. mysqld_safe \- start the mysqld daemon on Unix.
.SH SYNOPSIS .SH SYNOPSIS
...@@ -60,22 +60,27 @@ Set the timezone (the TZ) variable to the value of this parameter. ...@@ -60,22 +60,27 @@ Set the timezone (the TZ) variable to the value of this parameter.
.SH NOTE .SH NOTE
Note that all options on the command line to mysqld_safe are passed to mysqld. If you wants to use any options in mysqld_safe that mysqld doesn't support, you must specify these in the option file. Note that all options on the command line to mysqld_safe are passed to mysqld. If you wants to use any options in mysqld_safe that mysqld doesn't support, you must specify these in the option file.
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk (1), isamchk(1),
isamlog (1), isamlog(1),
mysqlaccess (1), mysql(1),
mysqladmin (1), mysqlaccess(1),
mysqlbug (1), mysqladmin(1),
mysqld (1), mysqld(1),
mysqldump (1), mysqld_multi(1),
mysqlshow (1), mysqldump(1),
msql2mysql (1), mysql_fix_privilege_tables(1),
perror (1), mysqlshow(1),
replace (1), mysql_zap(1),
mysqld_safe (1), perror(1),
which1 (1), replace(1)
zap (1), .P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@mysql.com), Michael (Monty) Widenius (monty@mysql.com),
MySQL AB (http://www.mysql.com). MySQL AB (http://www.mysql.com).
This software comes with no warranty. This software comes with no warranty.
......
.TH mysqldump 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH mysqldump 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
mysqldump \- text-based client for dumping or backing up mysql databases , tables and or data. mysqldump \- text-based client for dumping or backing up mysql databases , tables and or data.
...@@ -247,24 +247,29 @@ If all the databases are wanted, one can use: ...@@ -247,24 +247,29 @@ If all the databases are wanted, one can use:
mysqldump \fP\fI\-\-all\-databases\fP > all_databases.sql mysqldump \fP\fI\-\-all\-databases\fP > all_databases.sql
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk (1), isamchk(1),
isamlog (1), isamlog(1),
mysqlaccess (1), mysql(1),
mysqladmin (1), mysqlaccess(1),
mysqlbug (1), mysqladmin(1),
mysqld (1), mysqld(1),
mysqldump (1), mysqld_multi(1),
mysqlshow (1), mysqld_safe(1),
msql2mysql (1), mysql_fix_privilege_tables(1),
perror (1), mysqlshow(1),
replace (1), mysql_zap(1),
mysqld_safe (1), perror(1),
which1 (1), replace(1)
zap (1), .P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@tcx.se), Michael (Monty) Widenius (monty@mysql.com),
TCX Datakonsult AB (http://www.tcx.se). MySQL AB (http://www.mysql.com/).
This software comes with no warranty. This software comes with no warranty.
Manual page by L. (Kill-9) Pedersen Manual page by L. (Kill-9) Pedersen
(kill-9@kill-9.dk), Mercurmedia Data Model Architect / (kill-9@kill-9.dk), Mercurmedia Data Model Architect /
......
.TH mysqlshow 1 "19 December 2000" "MySQL 4.0" "MySQL database" .TH mysqlshow 1 "19 December 2000" "MySQL @MYSQL_BASE_VERSION@" "MySQL database"
.SH NAME .SH NAME
.BR mysqlshow .BR mysqlshow
\- Shows the structure of a mysql database (databases,tables and columns) \- Shows the structure of a mysql database (databases,tables and columns)
...@@ -67,24 +67,29 @@ If no column is given then all matching columns and columntypes in table ...@@ -67,24 +67,29 @@ If no column is given then all matching columns and columntypes in table
are shown are shown
.SH "SEE ALSO" .SH "SEE ALSO"
isamchk (1), isamchk(1),
isamlog (1), isamlog(1),
mysqlaccess (1), mysql(1),
mysqladmin (1), mysqlaccess(1),
mysqlbug (1), mysqladmin(1),
mysqld (1), mysqld(1),
mysqldump (1), mysqld_multi(1),
mysqlshow (1), mysqld_safe(1),
msql2mysql (1), mysqldump(1),
perror (1), mysql_fix_privilege_tables(1),
replace (1), mysql_zap(1),
mysqld_safe (1), perror(1),
which1 (1), replace(1)
zap (1), .P
For more information please refer to the MySQL reference
manual, which may already be installed locally and which
is also available online at http://www.mysql.com/doc/en/
.SH BUGS
Please refer to http://bugs.mysql.com/ to report bugs.
.SH AUTHOR .SH AUTHOR
Ver 1.0, distribution 3.23.29a Ver 1.0, distribution @MYSQL_NO_DASH_VERSION@
Michael (Monty) Widenius (monty@tcx.se), Michael (Monty) Widenius (monty@mysql.com),
TCX Datakonsult AB (http://www.tcx.se). MySQL AB (http://www.mysql.com/).
This software comes with no warranty. This software comes with no warranty.
Manual page by L. (Kill-9) Pedersen Manual page by L. (Kill-9) Pedersen
(kill-9@kill\-9.dk), Mercurmedia Data Model Architect / (kill-9@kill\-9.dk), Mercurmedia Data Model Architect /
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment