summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.com>2000-08-29 19:38:32 +0300
committerunknown <monty@donna.mysql.com>2000-08-29 19:38:32 +0300
commit463016ee2740fa00e56039bc0b1f8122019c982a (patch)
tree11ed770fa863e0b50af0b27d2c231817f7655ef8
parent3776743da299b4229fe12a36cd6a6c0f6fb6b1e6 (diff)
downloadmariadb-git-463016ee2740fa00e56039bc0b1f8122019c982a.tar.gz
Updates for release
BitKeeper/deleted/.del-mi_debug.c: ***MISSING WEAVE*** BUILD/compile-alpha-ccc: Added thread safe libraries Docs/manual.texi: Added information about --log-slow-queries Makefile.am: Fix for thread safe libraries client/mysql.cc: Allow commands without ; on first line myisam/Makefile.am: Removed mi_debug.c myisam/mi_check.c: Removed compiler warnings myisam/mi_dbug.c: Extra debugging myisammrg/myrg_rkey.c: Removed compiler warnings myisammrg/myrg_rnext.c: Removed compiler warnings myisammrg/myrg_rprev.c: Removed compiler warnings sql/mini_client.cc: Removed compiler warnings sql/mysqld.cc: Updated help sql/sql_parse.cc: Fix permission checking for RENAME tests/grant.pl: Added more grant tests tests/grant.res: New results
-rwxr-xr-xBUILD/compile-alpha-ccc2
-rw-r--r--Docs/bk.txt64
-rw-r--r--Docs/manual.texi150
-rw-r--r--Makefile.am4
-rw-r--r--client/mysql.cc15
-rw-r--r--myisam/Makefile.am2
-rw-r--r--myisam/mi_check.c3
-rw-r--r--myisam/mi_dbug.c23
-rw-r--r--myisammrg/myrg_rkey.c4
-rw-r--r--myisammrg/myrg_rnext.c4
-rw-r--r--myisammrg/myrg_rprev.c7
-rw-r--r--sql/mini_client.cc2
-rw-r--r--sql/mysqld.cc6
-rw-r--r--sql/sql_parse.cc11
-rw-r--r--tests/grant.pl29
-rw-r--r--tests/grant.res40
16 files changed, 260 insertions, 106 deletions
diff --git a/BUILD/compile-alpha-ccc b/BUILD/compile-alpha-ccc
index 194ed099541..9a92de2590d 100755
--- a/BUILD/compile-alpha-ccc
+++ b/BUILD/compile-alpha-ccc
@@ -4,7 +4,7 @@ make -k clean
/bin/rm -f config.cache mysql-*.tar.gz
aclocal; autoheader; aclocal; automake; autoconf
-CC=ccc CFLAGS="-fast -O3 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti -mcpu=ev6 -Wa,-mev6" CXXLDFLAGS='/usr/lib/compaq/libots-2.2.7/libots.so /usr/lib/compaq/cpml-5.0.0/libcpml_ev6.a' ./configure --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex
+CC=ccc CFLAGS="-fast -O3 -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti -mcpu=ev6 -Wa,-mev6" CXXLDFLAGS='/usr/lib/compaq/libots-2.2.7/libots.so /usr/lib/compaq/cpml-5.0.0/libcpml_ev6.a' ./configure --prefix=/usr/local/mysql --disable-shared --with-extra-charsets=complex --enable-thread-safe-client
make
if [ $? = 0 ]
then
diff --git a/Docs/bk.txt b/Docs/bk.txt
new file mode 100644
index 00000000000..17bab4453c3
--- /dev/null
+++ b/Docs/bk.txt
@@ -0,0 +1,64 @@
+Mail by sasha, should be rewritten as a HOWTO sometimes
+-----------
+
+I have set up a repository with BitKeeper on work. There are still some things
+about it that I would like to learn, but I have gotten far enough with it to
+replace CVS functionality were are currently using, so let's just go ahead and
+get started on it. Please follow the instructions below (make sure to save the
+message for future reference):
+
+a) http://www.bitmover.com/download
+ user: beta
+ password: get bitkeeper
+
+ get the version appropriate for your platform - download it to a temp
+directory, chmod +x and then run it. You will have to tell it which directory
+to install, for consistency, let's use /usr/local/bin
+
+b) we will take advantage of bk capablity of working with master/slave
+repositories. The master will be on work.mysql.com, the slaves will be our
+individual machines. The master repository has already been set up on work, so
+you will need just to set up a slave repository on your machine:
+
+ mkdir bk
+ cd bk
+ bk clone yourusername@work:/home/bk/mysql mysql
+ cd mysql
+ bk -r edit
+
+Now you have the entire source tree in the current directory. Let's compile it:
+
+ BUILD/compile-pentium-debug
+
+After you edit a file, you need to check it in using bk citool or bk ci
+filename. Note that ci is different than commit - you ci a file, but you commit
+a change set. This is a very nice concept - instead of thinking of each
+individual file as CVS does, bk groups the changes you are making and allows you
+to document what you actually did between the commits as a whole, rather than
+just commenting on every file. When you commit, bk will ask you to comment on
+the change set.
+
+Commit is done just to your local repository. To make your changes global, you
+will need to run bk push. Be careful with that - it is a good idea to run bk
+push -l -n first too see what you are just about to push to the master
+repository.
+
+When somebody does a push, you will be getting a email ( I will set this up to
+day). You will then need to execute bk pull to update your sources. If there are
+any conflicts, bk will force you to resolve them by asking you questions on what
+to do with each conflict.
+
+To learn more about bk, use bk helptool - I will be doing this a lot in the next
+couple of days :-) If you find bugs or have questions/feature
+suggestions/comments for developers, feel free to e-mail dev@bitmover.com .
+Their developers, and especially the president of the company Larry McCoy really
+like MySQL and are very anxious to help us. Make sure it is obvious that you
+work for MySQL, of course. And, of course, do not bug them with little things
+that you can figure out on your own or with my help - they were nice to offer us
+support, but we should not abuse it.
+
+If you are working on 3.23 MySQL source, please make sure to convert to bk ASAP
+before you do any further developement - otherwise, things will get
+exponentially worse as the code mass increases. I will work on mysql-4.0 next
+and try to set it up so that when we update 3.23 source tree, the update makes
+it to mysql-4.0.
diff --git a/Docs/manual.texi b/Docs/manual.texi
index 05df67c3371..a409e442b68 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -180,7 +180,7 @@ Installing MySQL
* Source install system issues:: System-specific issues
* Windows:: Windows notes
* OS/2:: OS/2 notes
-* MySQL binaries::
+* MySQL binaries::
* Post-installation:: Post-installation setup and testing
* Upgrade:: Is there anything special to do when upgrading/downgrading @strong{MySQL}?
@@ -238,7 +238,7 @@ Linux notes (all Linux versions)
* Linux-Alpha:: Linux-Alpha notes
* MKLinux:: MkLinux notes
* Qube2:: Qube2 Linux notes
-* Linux-Ia64::
+* Linux-Ia64::
BSD/OS notes
@@ -253,7 +253,7 @@ Windows notes
* NT start:: Starting @strong{MySQL} on NT / Win2000
* Windows running:: Running @strong{MySQL} on Windows
* Windows and SSH:: Connecting to a remote @strong{MySQL} from Windows with SSH
-* Windows symbolic links:: Splitting data across different disks under Windows
+* Windows symbolic links:: Splitting data across different disks under Win32
* Windows compiling:: Compiling MySQL clients on Windows.
* Windows vs Unix:: @strong{MySQL}-Windows compared to Unix @strong{MySQL}
@@ -411,13 +411,13 @@ Functions for use in @code{SELECT} and @code{WHERE} clauses
@code{SHOW} syntax (Get information about tables, columns,...)
-* SHOW DATABASE INFO::
-* SHOW TABLE STATUS::
-* SHOW STATUS::
-* SHOW VARIABLES::
-* SHOW PROCESSLIST::
-* SHOW GRANTS::
-* SHOW CREATE TABLE::
+* SHOW DATABASE INFO::
+* SHOW TABLE STATUS::
+* SHOW STATUS::
+* SHOW VARIABLES::
+* SHOW PROCESSLIST::
+* SHOW GRANTS::
+* SHOW CREATE TABLE::
MySQL table types
@@ -567,10 +567,10 @@ Using @code{myisamchk} for table maintenance and crash recovery
@code{myisamchk} invocation syntax
-* myisamchk general options::
-* myisamchk check options::
-* myisamchk repair options::
-* myisamchk other options::
+* myisamchk general options::
+* myisamchk check options::
+* myisamchk repair options::
+* myisamchk other options::
Using @code{myisamchk} for crash recovery
@@ -643,16 +643,17 @@ Some common errors when using MySQL
* Packet too large:: @code{Packet too large} error
* Communication errors:: Communication errors / Aborted connection
* Full table:: @code{The table is full} error
-* Cannot create::
+* Cannot create::
* Commands out of sync:: @code{Commands out of sync} error in client
* Ignoring user:: @code{Ignoring user} error
* Cannot find table:: @code{Table 'xxx' doesn't exist} error
Solving some common problems with MySQL
-* Log Replication:: Database replication with update log
+* Log Replication:: Database replication with update log
* Backup:: Database backups
* Update log:: The update log
+* Slow query log::
* Multiple servers:: Running multiple @strong{MySQL} servers on the same machine
MySQL client tools and APIs
@@ -753,6 +754,7 @@ How MySQL compares to @code{mSQL}
MySQL internals
* MySQL threads:: MySQL threads
+* MySQL full-text search:: MySQL full-text search
MySQL change history
@@ -900,7 +902,7 @@ Comments on porting to other systems
* Debugging server:: Debugging a @strong{MySQL} server
* Debugging client:: Debugging a @strong{MySQL} client
* The DBUG package:: The DBUG package
-* Locking methods::
+* Locking methods::
* RTS-threads:: Comments about RTS threads
* Thread packages:: Differences between different thread packages
@@ -3359,7 +3361,7 @@ encounter per year, but we are as always very flexible towards our customers!
* Source install system issues:: System-specific issues
* Windows:: Windows notes
* OS/2:: OS/2 notes
-* MySQL binaries::
+* MySQL binaries::
* Post-installation:: Post-installation setup and testing
* Upgrade:: Is there anything special to do when upgrading/downgrading @strong{MySQL}?
@end menu
@@ -6026,7 +6028,7 @@ CC=fcc CFLAGS="-O -K fast -K lib -K omitfp -Kpreex -D_GNU_SOURCE -DCONST=const -
* Linux-Alpha:: Linux-Alpha notes
* MKLinux:: MkLinux notes
* Qube2:: Qube2 Linux notes
-* Linux-Ia64::
+* Linux-Ia64::
@end menu
@node Linux-x86, Linux-RedHat50, Linux, Linux
@@ -8368,13 +8370,17 @@ Client error messages in given language. May be given as a full path.
@item -l, --log[=file]
Log connections and queries to file
+@item --log-isam[=file]
+Log all ISAM/MyISAM changes to file (only used when debugging ISAM/MyISAM).
+
+@item --log-slow-queries[=file]
+Log all queries that has taken more than @code{long_query_time} to execute
+to file. @xref{Slow query log}.
+
@item --log-update[=file]
Log updates to @code{file.#} where @code{#} is a unique number if not given.
@xref{Update log}.
-@item --log-isam[=file]
-Log all isam changes to file.
-
@item --log-long-format
Log some extra information to update log.
@@ -8692,6 +8698,7 @@ The following lists tell what you have to watch out for when upgrading to 3.23:
(-g) by default. This option can be disabled with --enable-named-commands
(-G). This may cause incompatibility problems in some cases, for example
in SQL scripts that use named commands without a semicolon, etc. !
+Long format commands still work from the first line.
@item The default return type of @code{IF} will now depend on both arguments
and not only the first argument.
@item @code{AUTO_INCREMENT} will not work with negative numbers.
@@ -16872,7 +16879,7 @@ RENAME TABLE current_database.table_name TO other_database.table_name;
@end example
When you execute @code{RENAME}, you can't have any locked tables or
-active transactions. You must also have the @code{ALTER TABLE}
+active transactions. You must also have the @code{ALTER} and @code{DROP}
privilege on the original table and @code{CREATE} and @code{INSERT}
privilege on the new table.
@@ -18353,13 +18360,13 @@ and @samp{_} wildcard characters.
@findex SHOW INDEX
@findex SHOW KEYS
@menu
-* SHOW DATABASE INFO::
-* SHOW TABLE STATUS::
-* SHOW STATUS::
-* SHOW VARIABLES::
-* SHOW PROCESSLIST::
-* SHOW GRANTS::
-* SHOW CREATE TABLE::
+* SHOW DATABASE INFO::
+* SHOW TABLE STATUS::
+* SHOW STATUS::
+* SHOW VARIABLES::
+* SHOW PROCESSLIST::
+* SHOW GRANTS::
+* SHOW CREATE TABLE::
@end menu
@node SHOW DATABASE INFO, SHOW TABLE STATUS, SHOW, SHOW
@@ -18543,7 +18550,7 @@ have..
@item @code{Opened_tables} @tab Number of tables that have been opened.
@item @code{Questions} @tab Number of queries sent to the server.
@item @code{Slow_launch_threads} @tab Number of threads that has taken more than @code{slow_launch_time} to connect.
-@item @code{Slow_queries} @tab Number of queries that has taken more than @code{long_query_time}
+@item @code{Slow_queries} @tab Number of queries that has taken more than @code{long_query_time}. @xref{Slow query log}.
@item @code{Threads_cached} @tab Number of threads in the thread cache.
@item @code{Threads_connected} @tab Number of currently open connections.
@item @code{Threads_running} @tab Number of threads that are not sleeping.
@@ -18773,7 +18780,8 @@ Change all table names to lower case on disk.
@item @code{long_query_time}
If a query takes longer than this (in seconds), the @code{Slow_queries} counter
-will be incremented.
+will be incremented. If you are using @code{--log-slow-queries}, the query
+will be logged to the slow query logfile. @xref{Slow query log}.
@item @code{max_allowed_packet}
The maximum size of one packet. The message buffer is initialized to
@@ -18929,7 +18937,7 @@ threads. Otherwise, you can see only your own threads. @xref{KILL, ,
@code{KILL}}. If you don't use the the @code{FULL} option, then only
the first 100 characters of each query will be shown.
-@node SHOW GRANTS,SHOW CREATE TABLE , SHOW PROCESSLIST, SHOW
+@node SHOW GRANTS, SHOW CREATE TABLE, SHOW PROCESSLIST, SHOW
@subsection SHOW GRANTS (privileges) for a user
@code{SHOW GRANTS FOR user} lists the grant commands that must be issued to
@@ -18944,7 +18952,7 @@ mysql> SHOW GRANTS FOR root@@localhost;
+---------------------------------------------------------------------+
@end example
-@node SHOW CREATE TABLE,,SHOW GRANTS, SHOW
+@node SHOW CREATE TABLE, , SHOW GRANTS, SHOW
@subsection SHOW CREATE TABLE
Shows a @code{CREATE TABLE} statement that will create the given table
@example
@@ -25569,7 +25577,7 @@ Continue even if we get an SQL error.
Named commands are disabled. Use \* form only, or use named commands
only in the beginning of a line ending with a semicolon (;) Since
version 10.9 the client now starts with this option ENABLED by default!
-Disable with '-G'
+Disable with '-G'. Long format commands still work from the first line.
@item -i, --ignore-space
Ignore space after function names.
@item -h, --host=...
@@ -25736,7 +25744,7 @@ The @code{mysqladmin status} command result has the following columns:
@item Uptime @tab Number of seconds the @strong{MySQL} server has been up.
@item Threads @tab Number of active threads (clients).
@item Questions @tab Number of questions from clients since @code{mysqld} was started.
-@item Slow queries @tab Queries that have taken more than @code{long_query_time} seconds.
+@item Slow queries @tab Queries that have taken more than @code{long_query_time} seconds. @xref{Slow query log}.
@item Opens @tab How many tables @code{mysqld} has opened.
@item Flush tables @tab Number of @code{flush ...}, @code{refresh} and @code{reload} commands.
@item Open tables @tab Number of tables that are open now.
@@ -26558,10 +26566,10 @@ shell> myisamchk /path/to/datadir/*/*.MYI
@code{myisamchk} supports the following options:
@menu
-* myisamchk general options::
-* myisamchk check options::
-* myisamchk repair options::
-* myisamchk other options::
+* myisamchk general options::
+* myisamchk check options::
+* myisamchk repair options::
+* myisamchk other options::
@end menu
@node myisamchk general options, myisamchk check options, myisamchk syntax, myisamchk syntax
@@ -27482,8 +27490,9 @@ The above command does the following:
@itemize @bullet
@item
-If standard logging (@code{--log}) is used, closes and reopens the log file.
-(@file{mysql.log} as default).
+If standard logging (@code{--log}) or slow query logging
+@code{--log-slow-queries} is used, closes and reopens the log file.
+(@file{mysql.log} and @file{mysql-slow.log} as default).
@item
If update logging (@code{--log-update}) is used, closes the update log and
opens a new log file with a higher sequence number.
@@ -28901,7 +28910,7 @@ sure that no other programs is using the dynamic libraries!
* Packet too large:: @code{Packet too large} error
* Communication errors:: Communication errors / Aborted connection
* Full table:: @code{The table is full} error
-* Cannot create::
+* Cannot create::
* Commands out of sync:: @code{Commands out of sync} error in client
* Ignoring user:: @code{Ignoring user} error
* Cannot find table:: @code{Table 'xxx' doesn't exist} error
@@ -29945,6 +29954,7 @@ Drop or rename @code{old_table}
* Log Replication:: Database replication with update log
* Backup:: Database backups
* Update log:: The update log
+* Slow query log::
* Multiple servers:: Running multiple @strong{MySQL} servers on the same machine
@end menu
@@ -30050,7 +30060,7 @@ to be replaced with new ones when a new record duplicates an old record on
a unique key value.
@cindex Update log
-@node Update log, Multiple servers, Backup, Common problems
+@node Update log, Slow query log, Backup, Common problems
@section The update log
When started with the @code{--log-update[=file_name]} option,
@@ -30104,6 +30114,20 @@ This can be useful if you have to revert to backup files after a crash
and you want to redo the updates that occurred between the time of the backup
and the crash.
+@cindex Slow query log
+@node Slow query log, Multiple servers, Update log, Common problems
+@section The slow query log
+
+When started with the @code{--log-slow-queries[=file_name]} option,
+@code{mysqld} writes a log file containing all SQL commands that took
+more than @code{long_query_time} to execute. data. If no file name is
+given, it defaults to the name of the host machine suffixed with
+@code{-slow.log}. If file name is given, but it doesn't contain a path
+the file is written in the data directory.
+
+The slow query log can be used to find queries that takes a long time to
+execute and are thus candidates for optimization.
+
@cindex Database replication
@cindex Replication, database
@cindex Database mirroring
@@ -30113,7 +30137,7 @@ another host and you want to replicate the changes that have been made
to the master database. @xref{Log Replication}.
@cindex Multiple servers
-@node Multiple servers, , Update log, Common problems
+@node Multiple servers, , Slow query log, Common problems
@section Running multiple MySQL servers on the same machine
There are circumstances when you might want to run multiple servers on the same
@@ -30163,10 +30187,11 @@ by specifying them at runtime as options to @code{safe_mysqld}:
shell> /path/to/safe_mysqld --socket=file_name --port=port_number
@end example
-If you run the new server on the same database directory as another server
-with logging enabled, you should also specify the name of the log files
-to @code{safe_mysqld} with @code{--log} and @code{--log-update}. Otherwise,
-both servers may be trying to write to the same log file.
+If you run the new server on the same database directory as another
+server with logging enabled, you should also specify the name of the log
+files to @code{safe_mysqld} with @code{--log}, @code{--log-update} or
+@code{--log-slow-queries}. Otherwise, both servers may be trying to
+write to the same log file.
@strong{Warning}: Normally you should never have two servers that update
data in the same database! If your OS doesn't support fault-free system
@@ -34165,7 +34190,7 @@ started to read and apply updates from the master.
@code{mysqladmin processlist} only shows the connection and @code{INSERT
DELAYED} threads.
-@node MySQL full-text search, , MySQL threads, MySQL internals
+@node MySQL full-text search, , MySQL threads, MySQL internals
@section MySQL full-text search
Since version 3.23.23, @strong{MySQL} has support for full-text indexing
@@ -35665,6 +35690,7 @@ though, so 3.23 is not released as a stable version yet.
(-g) by default. This option can be disabled with --enable-named-commands
(-G). This may cause incompatibility problems in some cases, for example
in SQL scripts that use named commands without a semicolon, etc. !
+Long format commands still work from the first line.
@item
Fixed a problem when using many pending @code{DROP TABLE} statement at
the same time.
@@ -40215,7 +40241,7 @@ will ensure that your thread installation has even a remote chance to work!
* Debugging server:: Debugging a @strong{MySQL} server
* Debugging client:: Debugging a @strong{MySQL} client
* The DBUG package:: The DBUG package
-* Locking methods::
+* Locking methods::
* RTS-threads:: Comments about RTS threads
* Thread packages:: Differences between different thread packages
@end menu
@@ -40362,15 +40388,19 @@ mysqld are using indexes properly. @xref{EXPLAIN, , @code{EXPLAIN}}. You
should also test complicated queries that didn't complete within the
@code{mysql} command line tool.
-If you find the text @code{mysqld restarted} in the error log file (normally
-named @file{hostname.err}) you have probably found a query that causes
-@code{mysqld} to fail. If this happens you should check all your tables with
-@code{myisamchk} (@pxref{Maintenance}), and test the queries in the
-@strong{MySQL} log files to see if one doesn't work. If you find such a query,
-try first upgrading to the newest @strong{MySQL} version. If this doesn't
-help and you can't find anything in the @code{mysql} mail archive, you should
-report the bug to @email{mysql@@lists.mysql.com}. Links to mail archives are
-available online at the @uref{http://www.mysql.com/documentation/, @strong{MySQL}
+You can find the queries that takes a long time to run by starting
+@code{mysqld} with @code{--log-slow-queries}. @xref{Slow query log}.
+
+If you find the text @code{mysqld restarted} in the error log file
+(normally named @file{hostname.err}) you have probably found a query
+that causes @code{mysqld} to fail. If this happens you should check all
+your tables with @code{myisamchk} (@pxref{Maintenance}), and test the
+queries in the @strong{MySQL} log files to see if one doesn't work. If
+you find such a query, try first upgrading to the newest @strong{MySQL}
+version. If this doesn't help and you can't find anything in the
+@code{mysql} mail archive, you should report the bug to
+@email{mysql@@lists.mysql.com}. Links to mail archives are available
+online at the @uref{http://www.mysql.com/documentation/, @strong{MySQL}
documentation page}.
If you get corrupted tables or if @code{mysqld} always fails after some
diff --git a/Makefile.am b/Makefile.am
index f4240ac94f0..9f74861ce48 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -26,7 +26,7 @@ SUBDIRS = include @docs_dirs@ @readline_dir@ @sql_client_dirs@ \
@bench_dirs@ support-files
# Relink after clean
-CLEANFILES = linked_client_sources linked_server_sources
+CLEANFILES = linked_client_sources linked_server_sources linked_libmysql_sources linked_libmysql_r_sources
# This is just so that the linking is done early.
config.h: linked_client_sources linked_server_sources
@@ -36,9 +36,11 @@ linked_client_sources: @linked_client_targets@
linked_libmysql_sources:
cd libmysql; $(MAKE) link_sources
+ echo timestamp > linked_libmysql_sources
linked_libmysql_r_sources: linked_libmysql_sources
cd libmysql_r; $(MAKE) link_sources
+ echo timestamp > linked_libmysql_r_sources
#avoid recursive make calls in sql directory
linked_server_sources:
diff --git a/client/mysql.cc b/client/mysql.cc
index 9dac9a7694c..1353e0daeb8 100644
--- a/client/mysql.cc
+++ b/client/mysql.cc
@@ -402,7 +402,7 @@ CHANGEABLE_VAR changeable_vars[] = {
static void usage(int version)
{
- printf("%s Ver 10.10 Distrib %s, for %s (%s)\n",
+ printf("%s Ver 10.11 Distrib %s, for %s (%s)\n",
my_progname, MYSQL_SERVER_VERSION, SYSTEM_TYPE, MACHINE_TYPE);
if (version)
return;
@@ -435,9 +435,10 @@ static void usage(int version)
-g, --no-named-commands\n\
Named commands are disabled. Use \\* form only, or\n\
use named commands only in the beginning of a line\n\
- ending with a semicolon (;)\n\
- Since version 10.9 the client now starts with this\n\
- option ENABLED by default! Disable with '-G'\n\
+ ending with a semicolon (;) Since version 10.9 the\n\
+ client now starts with this option ENABLED by\n\
+ default! Disable with '-G'. Long format commands\n\
+ still work from the first line.\n\
-i, --ignore-space Ignore space after function names.\n\
-h, --host=... Connect to host.\n\
-H, --html Produce HTML output.\n\
@@ -690,12 +691,12 @@ static int read_lines(bool execute_commands)
if (!in_string && (line[0] == '#' ||
(line[0] == '-' && line[1] == '-') ||
line[0] == 0))
- continue; // Skipp comment lines
+ continue; // Skip comment lines
/* Check if line is a mysql command line */
/* (We want to allow help, print and clear anywhere at line start */
- if (execute_commands && !no_named_cmds && !in_string &&
- (com=find_command(line,0)))
+ if (execute_commands && (!no_named_cmds || glob_buffer.is_empty())
+ && !in_string && (com=find_command(line,0)))
{
if ((*com->func)(&glob_buffer,line) > 0)
break;
diff --git a/myisam/Makefile.am b/myisam/Makefile.am
index aff1b670f33..6c5767640c8 100644
--- a/myisam/Makefile.am
+++ b/myisam/Makefile.am
@@ -43,7 +43,7 @@ libmyisam_a_SOURCES = mi_open.c mi_extra.c mi_info.c mi_rkey.c \
mi_rsamepos.c mi_panic.c mi_close.c mi_create.c\
mi_range.c mi_dbug.c mi_checksum.c mi_log.c \
mi_changed.c mi_static.c mi_delete_all.c \
- mi_delete_table.c mi_rename.c mi_check.c mi_debug.c \
+ mi_delete_table.c mi_rename.c mi_check.c \
ft_parser.c ft_search.c ft_stopwords.c ft_static.c \
ft_update.c sort.c
CLEANFILES = test?.IS? isam.log mi_test_all
diff --git a/myisam/mi_check.c b/myisam/mi_check.c
index 2b5a14f1e87..ab3d986980c 100644
--- a/myisam/mi_check.c
+++ b/myisam/mi_check.c
@@ -16,8 +16,7 @@
/* Descript, check and repair of ISAM tables */
-#include "myisamdef.h"
-
+#include "fulltext.h"
#include <m_ctype.h>
#include <stdarg.h>
#include <getopt.h>
diff --git a/myisam/mi_dbug.c b/myisam/mi_dbug.c
index 62d6e039059..c424d65f7ec 100644
--- a/myisam/mi_dbug.c
+++ b/myisam/mi_dbug.c
@@ -147,3 +147,26 @@ void _mi_print_key(FILE *stream, register MI_KEYSEG *keyseg,
VOID(fputs("\"\n",stream));
return;
} /* print_key */
+
+
+#ifdef EXTRA_DEBUG
+
+my_bool check_table_is_closed(const char *name, const char *where)
+{
+ char filename[FN_REFLEN];
+ LIST *pos;
+
+ (void) fn_format(filename,name,"",MI_NAME_IEXT,4+16+32);
+ for (pos=myisam_open_list ; pos ; pos=pos->next)
+ {
+ MI_INFO *info=(MI_INFO*) pos->data;
+ MYISAM_SHARE *share=info->s;
+ if (!strcmp(share->filename,filename))
+ {
+ fprintf(stderr,"Warning: Table: %s is open on %s\n", name,where);
+ return 1;
+ }
+ }
+ return 0;
+}
+#endif /* EXTRA_DEBUG */
diff --git a/myisammrg/myrg_rkey.c b/myisammrg/myrg_rkey.c
index 2f4cfb60068..c0123588a06 100644
--- a/myisammrg/myrg_rkey.c
+++ b/myisammrg/myrg_rkey.c
@@ -28,7 +28,7 @@
int myrg_rkey(MYRG_INFO *info,byte *record,int inx, const byte *key,
uint key_len, enum ha_rkey_function search_flag)
{
- uchar *key_buff;
+ byte *key_buff;
uint pack_key_length;
MYRG_TABLE *table;
MI_INFO *mi;
@@ -45,7 +45,7 @@ int myrg_rkey(MYRG_INFO *info,byte *record,int inx, const byte *key,
if (table == info->open_tables)
{
err=mi_rkey(mi,buf,inx,key,key_len,search_flag);
- key_buff=mi->lastkey+mi->s->base.max_key_length;
+ key_buff=(byte*) mi->lastkey+mi->s->base.max_key_length;
pack_key_length=mi->last_rkey_length;
}
else
diff --git a/myisammrg/myrg_rnext.c b/myisammrg/myrg_rnext.c
index 2bfa59be3ef..e714ce3b139 100644
--- a/myisammrg/myrg_rnext.c
+++ b/myisammrg/myrg_rnext.c
@@ -24,7 +24,7 @@ int myrg_rnext(MYRG_INFO *info, byte *buf, int inx)
{
MYRG_TABLE *table;
MI_INFO *mi;
- uchar *key_buff;
+ byte *key_buff;
uint pack_key_length;
int err;
@@ -50,7 +50,7 @@ int myrg_rnext(MYRG_INFO *info, byte *buf, int inx)
if (table < info->end_table)
{
mi=info->last_used_table->table;
- key_buff=mi->lastkey+mi->s->base.max_key_length;
+ key_buff=(byte*) mi->lastkey+mi->s->base.max_key_length;
pack_key_length=mi->last_rkey_length;
for (; table < info->end_table ; table++)
{
diff --git a/myisammrg/myrg_rprev.c b/myisammrg/myrg_rprev.c
index 3ee0894b42c..0523dc7f4e7 100644
--- a/myisammrg/myrg_rprev.c
+++ b/myisammrg/myrg_rprev.c
@@ -24,7 +24,7 @@ int myrg_rprev(MYRG_INFO *info, byte *buf, int inx)
{
MYRG_TABLE *table;
MI_INFO *mi;
- uchar *key_buff;
+ byte *key_buff;
uint pack_key_length;
int err;
@@ -50,12 +50,13 @@ int myrg_rprev(MYRG_INFO *info, byte *buf, int inx)
if (table < info->end_table)
{
mi=info->last_used_table->table;
- key_buff=mi->lastkey+mi->s->base.max_key_length;
+ key_buff=(byte*) mi->lastkey+mi->s->base.max_key_length;
pack_key_length=mi->last_rkey_length;
for (; table < info->end_table ; table++)
{
mi=table->table;
- err=_mi_rkey(mi,NULL,inx,key_buff,pack_key_length,HA_READ_KEY_OR_PREV,FALSE);
+ err=_mi_rkey(mi,NULL,inx,key_buff,pack_key_length,
+ HA_READ_KEY_OR_PREV,FALSE);
info->last_used_table=table;
if (err == HA_ERR_KEY_NOT_FOUND)
diff --git a/sql/mini_client.cc b/sql/mini_client.cc
index 90024f1ff47..5cd0fe2c680 100644
--- a/sql/mini_client.cc
+++ b/sql/mini_client.cc
@@ -232,7 +232,7 @@ static int mc_sock_connect(my_socket s, const struct sockaddr *name,
return connect(s, (struct sockaddr*) name, namelen);
#else
int flags, res, s_err;
- socklen_t s_err_size = sizeof(uint);
+ size_socket s_err_size = sizeof(uint);
fd_set sfds;
struct timeval tv;
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 2a7a0575fad..37b03ef4a67 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -2460,11 +2460,15 @@ static void usage(void)
--log-isam[=file] Log all isam changes to file\n\
--log-long-format Log some extra information to update log\n\
--low-priority-updates INSERT/DELETE/UPDATE has lower priority than selects\n\
+ --log-slow-queries=[file]\n\
+ Log slow queries to this log file\n\
--pid-file=path Pid file used by safe_mysqld\n\
-P, --port=... Port number to use for connection\n\
-n, --new Use very new possible 'unsafe' functions\n\
-o, --old-protocol Use the old (3.20) protocol\n\
- --one-thread Only use one thread (for debugging under Linux)\n\
+ --one-thread Only use one thread (for debugging under Linux)\n");
+ /* We have to break the string here because of VC++ limits */
+ puts("\
-O, --set-variable var=option\n\
Give a variable an value. --help lists variables\n\
-Sg, --skip-grant-tables\n\
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 97e67127fd0..3fb96857007 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -1137,16 +1137,21 @@ mysql_execute_command(void)
goto error;
for (table=tables ; table ; table=table->next->next)
{
- if (check_access(thd, ALTER_ACL, table->db, &table->grant.privilege) ||
+ if (check_access(thd, ALTER_ACL | DROP_ACL, table->db,
+ &table->grant.privilege) ||
check_access(thd, INSERT_ACL | CREATE_ACL, table->next->db,
&table->next->grant.privilege))
goto error;
if (grant_option)
{
- if (check_grant(thd,ALTER_ACL,table) ||
+ TABLE_LIST old_list,new_list;
+ old_list=table[0];
+ new_list=table->next[0];
+ old_list.next=new_list.next=0;
+ if (check_grant(thd,ALTER_ACL,&old_list) ||
(!test_all_bits(table->next->grant.privilege,
INSERT_ACL | CREATE_ACL) &&
- check_grant(thd,INSERT_ACL | CREATE_ACL, table->next)))
+ check_grant(thd,INSERT_ACL | CREATE_ACL, &new_list)))
goto error;
}
}
diff --git a/tests/grant.pl b/tests/grant.pl
index a34a2909897..0219fdb71ee 100644
--- a/tests/grant.pl
+++ b/tests/grant.pl
@@ -40,9 +40,9 @@ $columns_cols="Host, Db, User, Table_name, Column_name, Column_priv";
# clear grant tables
#
-$dbh = DBI->connect("DBI:mysql:mysql:$opt_host;mysql_read_default_group=perl",
+$dbh = DBI->connect("DBI:mysql:mysql:$opt_host",
$opt_root_user,$opt_password,
- { PrintError => 0}) || die "Can't connect to mysql server: $DBI::errstr\n";
+ { PrintError => 0}) || die "Can't connect to mysql server with user '$opt_root_user': $DBI::errstr\n";
safe_query("delete from user where user='$opt_user' or user='${opt_user}2'");
safe_query("delete from db where user='$opt_user'");
@@ -171,8 +171,7 @@ user_query("create table $opt_database.test2 (a int not null)");
user_query("alter table $opt_database.test2 add b int");
user_query("create index dummy on $opt_database.test2 (a)");
user_query("drop table $opt_database.test2");
-user_query("show tables");
-
+user_query("show tables from grant_test");
# These should fail
user_query("insert into mysql.user (host,user) values ('error','$opt_user',0)",1);
@@ -242,7 +241,22 @@ user_query("grant select on $opt_database.test2 to $user with grant option",1);
safe_query("grant drop on $opt_database.test2 to $user with grant option");
user_query("grant drop on $opt_database.test2 to $user with grant option");
user_query("grant select on $opt_database.test2 to $user with grant option",1);
-user_query("drop table $opt_database.test2");
+
+# check rename privileges
+user_query("rename table $opt_database.test2 to $opt_database.test3",1);
+safe_query("grant CREATE,DROP on $opt_database.test3 to $user");
+user_query("rename table $opt_database.test2 to $opt_database.test3",1);
+user_query("create table $opt_database.test3 (a int)");
+safe_query("grant INSERT on $opt_database.test3 to $user");
+user_query("drop table $opt_database.test3");
+user_query("rename table $opt_database.test2 to $opt_database.test3");
+user_query("rename table $opt_database.test3 to $opt_database.test2",1);
+safe_query("grant ALTER on $opt_database.test3 to $user");
+user_query("rename table $opt_database.test3 to $opt_database.test2");
+safe_query("revoke DROP on $opt_database.test2 from $user");
+user_query("rename table $opt_database.test2 to $opt_database.test3");
+user_query("drop table if exists $opt_database.test2,$opt_database.test3",1);
+safe_query("drop table if exists $opt_database.test2,$opt_database.test3");
# Check that the user doesn't have some user privileges
user_query("create database $opt_database",1);
@@ -253,9 +267,9 @@ safe_query("flush privileges");
safe_query("select $tables_cols from mysql.tables_priv");
safe_query("revoke ALL PRIVILEGES on $opt_database.test from $user");
safe_query("revoke ALL PRIVILEGES on $opt_database.test2 from $user");
+safe_query("revoke ALL PRIVILEGES on $opt_database.test3 from $user");
safe_query("revoke GRANT OPTION on $opt_database.test2 from $user");
safe_query("select $tables_cols from mysql.tables_priv");
-
user_query("select count(a) from test",1);
#
@@ -435,7 +449,8 @@ sub print_info
my $tmp;
print <<EOF;
This test will clear your table and column grant table and recreate the
-$opt_database database ! All privileges for $user will be destroyed !
+$opt_database database !
+All privileges for $user will be destroyed !
Don\'t run this test if you have done any GRANT commands that you want to keep!
EOF
diff --git a/tests/grant.res b/tests/grant.res
index 7cc08807fd1..37266facc61 100644
--- a/tests/grant.res
+++ b/tests/grant.res
@@ -119,7 +119,7 @@ Error in execute: Access denied for user: 'grant_user@localhost' to database 'gr
drop table grant_test.test
Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test'
grant ALL PRIVILEGES on grant_test.* to grant_user2@localhost
-Error in execute: Access denied for user: 'grant_user@localhost' (Using password: NO)
+Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test'
grant ALL PRIVILEGES on grant_test.* to grant_user@localhost WITH GRANT OPTION
Connecting grant_user
insert into grant_test.test values (5,0)
@@ -145,7 +145,9 @@ create table grant_test.test2 (a int not null)
alter table grant_test.test2 add b int
create index dummy on grant_test.test2 (a)
drop table grant_test.test2
-show tables
+show tables from grant_test
+test
+
insert into mysql.user (host,user) values ('error','grant_user',0)
Error in execute: Access denied for user: 'grant_user@localhost' to database 'mysql'
revoke ALL PRIVILEGES on grant_test.* from grant_user@localhost
@@ -239,7 +241,24 @@ grant drop on grant_test.test2 to grant_user@localhost with grant option
grant drop on grant_test.test2 to grant_user@localhost with grant option
grant select on grant_test.test2 to grant_user@localhost with grant option
Error in execute: select command denied to user: 'grant_user@localhost' for table 'test2'
-drop table grant_test.test2
+rename table grant_test.test2 to grant_test.test3
+Error in execute: insert command denied to user: 'grant_user@localhost' for table 'test3'
+grant CREATE,DROP on grant_test.test3 to grant_user@localhost
+rename table grant_test.test2 to grant_test.test3
+Error in execute: insert command denied to user: 'grant_user@localhost' for table 'test3'
+create table grant_test.test3 (a int)
+grant INSERT on grant_test.test3 to grant_user@localhost
+drop table grant_test.test3
+rename table grant_test.test2 to grant_test.test3
+rename table grant_test.test3 to grant_test.test2
+Error in execute: alter command denied to user: 'grant_user@localhost' for table 'test3'
+grant ALTER on grant_test.test3 to grant_user@localhost
+rename table grant_test.test3 to grant_test.test2
+revoke DROP on grant_test.test2 from grant_user@localhost
+rename table grant_test.test2 to grant_test.test3
+drop table if exists grant_test.test2,grant_test.test3
+Error in execute: drop command denied to user: 'grant_user@localhost' for table 'test2'
+drop table if exists grant_test.test2,grant_test.test3
create database grant_test
Error in execute: Access denied for user: 'grant_user@localhost' to database 'grant_test'
drop database grant_test
@@ -248,15 +267,15 @@ flush tables
Error in execute: Access denied for user: 'grant_user@localhost' (Using password: NO)
flush privileges
select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv
-localhost grant_test grant_user test2 grant_user@localhost Update,Delete,Create,Drop,Grant,Index,Alter Insert
+localhost grant_test grant_user test2 root@localhost Update,Delete,Create,Grant,Index,Alter Insert
localhost grant_test grant_user test root@localhost Select,Insert,Update,Delete
+localhost grant_test grant_user test3 root@localhost Insert,Create,Drop,Alter
revoke ALL PRIVILEGES on grant_test.test from grant_user@localhost
revoke ALL PRIVILEGES on grant_test.test2 from grant_user@localhost
+revoke ALL PRIVILEGES on grant_test.test3 from grant_user@localhost
revoke GRANT OPTION on grant_test.test2 from grant_user@localhost
select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv
-localhost grant_test grant_user test2 root@localhost Grant,Index,Alter
-
select count(a) from test
Error in execute: select command denied to user: 'grant_user@localhost' for table 'test'
delete from grant_test.test where a=2
@@ -284,13 +303,10 @@ select a,A from test
7 7
select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv
-localhost grant_test grant_user test2 root@localhost Grant,Index,Alter
localhost grant_test grant_user test root@localhost Delete Select,Update
revoke ALL PRIVILEGES on grant_test.test from grant_user@localhost
select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv
-localhost grant_test grant_user test2 root@localhost Grant,Index,Alter
-
revoke GRANT OPTION on grant_test.test from grant_user@localhost
Error in execute: There is no such grant defined for user 'grant_user' on host 'localhost' on table 'test'
grant select(a) on grant_test.test to grant_user@localhost
@@ -328,7 +344,6 @@ Error in execute: select command denied to user: 'grant_user@localhost' for colu
update test set b=3 where b > 0
Error in execute: select command denied to user: 'grant_user@localhost' for column 'b' in table 'test'
select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv
-localhost grant_test grant_user test2 root@localhost Grant,Index,Alter
localhost grant_test grant_user test root@localhost Select,Insert,Update
select Host, Db, User, Table_name, Column_name, Column_priv from mysql.columns_priv
@@ -337,7 +352,6 @@ localhost grant_test grant_user test a Select
revoke select(a), update (b) on grant_test.test from grant_user@localhost
select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv
-localhost grant_test grant_user test2 root@localhost Grant,Index,Alter
localhost grant_test grant_user test root@localhost Insert
select Host, Db, User, Table_name, Column_name, Column_priv from mysql.columns_priv
@@ -355,7 +369,6 @@ insert into test (b) values (9)
update test set b=6 where b > 0
flush privileges
select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv
-localhost grant_test grant_user test2 root@localhost Grant,Index,Alter
localhost grant_test grant_user test root@localhost Select,Insert,Update
select Host, Db, User, Table_name, Column_name, Column_priv from mysql.columns_priv
@@ -402,7 +415,6 @@ select * from mysql.db where user = 'grant_user'
localhost grant_test grant_user N Y N N N N N N N N
select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv where user = 'grant_user'
-localhost grant_test grant_user test2 root@localhost Grant,Index,Alter
localhost grant_test grant_user test root@localhost Select,Insert,Update
select Host, Db, User, Table_name, Column_name, Column_priv from mysql.columns_priv where user = 'grant_user'
@@ -418,8 +430,6 @@ select * from mysql.db where user = 'grant_user'
localhost grant_test grant_user N Y N N N N N N N N
select Host, Db, User, Table_name, Grantor, Table_priv, Column_priv from mysql.tables_priv where user = 'grant_user'
-localhost grant_test grant_user test2 root@localhost Grant,Index,Alter
-
select Host, Db, User, Table_name, Column_name, Column_priv from mysql.columns_priv where user = 'grant_user'
delete from user where user='grant_user'
flush privileges