diff options
author | unknown <monty@donna.mysql.com> | 2000-08-29 19:38:32 +0300 |
---|---|---|
committer | unknown <monty@donna.mysql.com> | 2000-08-29 19:38:32 +0300 |
commit | 848445418a4881d5f7cd47da7a5d6a415cd72a89 (patch) | |
tree | 11ed770fa863e0b50af0b27d2c231817f7655ef8 | |
parent | f98f62b3b35ae0ff1416f1ed24ccd0ffa89d4122 (diff) | |
download | mariadb-git-848445418a4881d5f7cd47da7a5d6a415cd72a89.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-x | BUILD/compile-alpha-ccc | 2 | ||||
-rw-r--r-- | Docs/bk.txt | 64 | ||||
-rw-r--r-- | Docs/manual.texi | 150 | ||||
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | client/mysql.cc | 15 | ||||
-rw-r--r-- | myisam/Makefile.am | 2 | ||||
-rw-r--r-- | myisam/mi_check.c | 3 | ||||
-rw-r--r-- | myisam/mi_dbug.c | 23 | ||||
-rw-r--r-- | myisammrg/myrg_rkey.c | 4 | ||||
-rw-r--r-- | myisammrg/myrg_rnext.c | 4 | ||||
-rw-r--r-- | myisammrg/myrg_rprev.c | 7 | ||||
-rw-r--r-- | sql/mini_client.cc | 2 | ||||
-rw-r--r-- | sql/mysqld.cc | 6 | ||||
-rw-r--r-- | sql/sql_parse.cc | 11 | ||||
-rw-r--r-- | tests/grant.pl | 29 | ||||
-rw-r--r-- | tests/grant.res | 40 |
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 |