diff options
70 files changed, 1289 insertions, 435 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index 1475219be19..3cf3fa15c1d 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -2758,8 +2758,8 @@ entity relationship diagram (ERD). @subheading Web Servers with @strong{MySQL} Tools @table @asis -@item @uref{http://bourbon.netvision.net.il/mysql/mod_auth_mysql/} -An Apache authentication module. +@item @uref{ftp://ftp.kcilink.com/pub/} +mod_auth_mysql, An Apache authentication module. @item @uref{http://www.roxen.com/} The Roxen Challenger Web server. @@ -3170,6 +3170,10 @@ unsubscribe from the @code{myodbc} list, send a message to @email{myodbc-subscribe@@lists.mysql.com} or @email{myodbc-unsubscribe@@lists.mysql.com}. +If you can't get an answer for your questions from the mailing list, one +option is to pay for support from @strong{MySQL AB}, which will put you +in direct contact with @strong{MySQL} developers. @xref{Support}. + The following table shows some @strong{MySQL} mailing in other languages than English. Note that these are not operated by @strong{MySQL AB}, so we can't guarantee the quality on these. @@ -3599,12 +3603,15 @@ A license is required if: @itemize @minus @item -You link a part of the of @strong{MySQL} that has a GPL Copyright to a -program that is not free software (embedded usage of the @strong{MySQL} -server). In this case your application would also become GPL through the -clause in the GPL license that acts as a virus. By licensing @strong{MySQL} -from us under a commercial license you will avoid this problem. - +You link a program, that is not free software, with code from the +@strong{MySQL} server or clients that has the GPL copyright. This +happens for example when you use @strong{MySQL} as an embedded server +in your applications or when you add not free extensions to the +@strong{MySQL} server. In this case your application/code would also +become GPL through the GPL license that acts as a virus. By licensing +@strong{MySQL} server from @strong{MySQL AB} under a commercial +license you will avoid this problem. +See @uref{http://www.gnu.org/copyleft/gpl-faq.html}. @item You have a commercial application that ONLY works with @strong{MySQL} and ships the application with the @strong{MySQL} server. This is @@ -6563,8 +6570,8 @@ shell> make A collection of our standard configure scripts is located in the @file{BUILD/} subdirectory. If you are lazy, you can use -@file{BUILD/compile-pentium-debug}. It will actually work on a lot of -non-x86 machines despite its name. +@file{BUILD/compile-pentium-debug}. To compile on a different architecture, +modify the script removing flags that are Pentium-specific. @item When the build is done, run @code{make install}. Be careful with this @@ -7608,7 +7615,7 @@ You should also add /etc/my.cnf: open_files_limit=8192 @end example -The above should allow @strong{MySQL} to create up to 8192 connections + files. +The above should allow @strong{MySQL} to create up to 8192 connections/files. The @code{STACK_SIZE} constant in LinuxThreads controls the spacing of thread stacks in the address space. It needs to be large enough so that there will @@ -19305,7 +19312,7 @@ key that can have @code{NULL} values (In this case the packed key length will be stored in the same byte that is used to mark if a key is @code{NULL}.) @item -If you specify a @code{SELECT} after the @code{CREATE STATEMENT}, +If you specify a @code{SELECT} after the @code{CREATE} statement, @strong{MySQL} will create new fields for all elements in the @code{SELECT}. For example: @@ -19315,9 +19322,37 @@ mysql> CREATE TABLE test (a int not null auto_increment, TYPE=MyISAM SELECT b,c from test2; @end example -This will create a @code{MyISAM} table with 3 columns. Note that the -table will automatically be deleted if any errors occur while copying -data into the table. +This will create a @code{MyISAM} table with three columns, a, b, and c. +Notice that the columns from the @code{SELECT} statement are appended to +the right side of the table, not overlapped onto it. Take the following +example: + +@example +mysql> select * from foo; ++---+ +| n | ++---+ +| 1 | ++---+ + +mysql> create table bar (m int) select n from foo; +Query OK, 1 row affected (0.02 sec) +Records: 1 Duplicates: 0 Warnings: 0 + +mysql> select * from bar; ++------+---+ +| m | n | ++------+---+ +| NULL | 1 | ++------+---+ +1 row in set (0.00 sec) +@end example + +For each row in table @code{foo}, a row is inserted in @code{bar} with +the values from @code{foo} and default values for the new columns. + +If any errors occur while copying the data to the table, it will +automatically be deleted. To ensure that the update log/binary log can be used to re-create the original tables, @strong{MySQL} will not allow concurrent inserts during @@ -19875,6 +19910,28 @@ still get strange errors from a table when @strong{MySQL} tries to update a row or find a row by key (this is VERY unlikely to happen if a normal check has succeeded!). +Some things reported by check table, can't be corrected automaticly: + +@itemize @bullet +@item +@code{Found row where the auto_increment column has the value 0}. + +This means that you have in the table a row where the +@code{auto_increment} index column contains the value 0. +(It's possible to create a row where the auto_increment column is 0 by +explicitely setting the column to 0 with an @code{UPDATE} statement) + +This isn't an error in itself, but could cause trouble if you decide to +dump the table and restore it or do an @code{ALTER TABLE} on the +table. In this case the auto_increment column will change value, +according to the rules of auto_increment columns, which could cause +problems like a duplicate key error. + +To get rid of the warning, just execute an @code{UPDATE} statement +to set the column to some other value than 0. +@end itemize + + @findex BACKUP TABLE @node BACKUP TABLE, RESTORE TABLE, CHECK TABLE, Reference @section @code{BACKUP TABLE} Syntax @@ -20534,8 +20591,6 @@ or INSERT [LOW_PRIORITY | DELAYED] [IGNORE] or INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=expression, col_name=expression, ... -or INSERT [LOW_PRIORITY] [IGNORE] [INTO] tbl_name - SELECT ... @end example @@ -21478,7 +21533,8 @@ If you have specified the update log file or a binary log file without an extension, the extension number of the log file will be incremented by one relative to the previous file. If you have used an extension in the file name, @strong{MySQL} will close and reopen the update log file. -@xref{Update log}. +@xref{Update log}. This is the same thing as sending the @code{SIGHUP} +signal to the @code{mysqld} server. @item @code{PRIVILEGES} @tab Reloads the privileges from the grant tables in the @code{mysql} database. @@ -21489,13 +21545,16 @@ the @code{mysql} database. @item @code{TABLES WITH READ LOCK} @tab Closes all open tables and locks all tables for all databases with a read until one executes @code{UNLOCK TABLES}. This is very convenient way to get backups if you have a file system, like Veritas,that can take snapshots in time. -@item @code{STATUS} @tab Resets most status variables to zero. +@item @code{STATUS} @tab Resets most status variables to zero. This is something one should only use when debugging a query. @end multitable You can also access each of the commands shown above with the @code{mysqladmin} utility, using the @code{flush-hosts}, @code{flush-logs}, @code{reload}, or @code{flush-tables} commands. +Take also a look at the @code{RESET} command used with +replication. @xref{Replication SQL}. + @cindex @code{mysqladmin} @findex KILL @node KILL, SHOW, FLUSH, Reference @@ -22314,7 +22373,7 @@ is automatically enlarged, up to @code{max_allowed_packet} bytes.) @item @code{net_read_timeout} Number of seconds to wait for more data from a connection before aborting the read. Note that when we don't expect data from a connection, the timeout -is defined by @code{write_timeout}. +is defined by @code{write_timeout}. See also @code{slave_read_timeout}. @item @code{net_retry_count} If a read on a communication port is interrupted, retry this many times @@ -22372,6 +22431,10 @@ the @code{PROCESS_PRIV} privilege. This can improve security if you're concerned about people being able to see what databases other users have. See also @code{safe_show_databases}. +@item @code{slave_read_timeout} +Number of seconds to wait for more data from a master/slave connection +before aborting the read. + @item @code{slow_launch_time} If creating the thread takes longer than this value (in seconds), the @code{Slow_launch_threads} counter will be incremented. @@ -23211,7 +23274,8 @@ for replication of tables with fancy column names to work. @item TIMESTAMP = timestamp_value | DEFAULT Set the time for this client. This is used to get the original timestamp if -you use the update log to restore rows. +you use the update log to restore rows. @code{timestamp_value} should be a +UNIX Epoch timestamp, not a @strong{MySQL} timestamp. @item LAST_INSERT_ID = # Set the value to be returned from @code{LAST_INSERT_ID()}. This is stored in @@ -24773,7 +24837,7 @@ The meanings of the configuration parameters are the following: @multitable @columnfractions .30 .70 @item @code{innodb_data_home_dir} @tab -The common part of the directory path for all innobase data files. +The common part of the directory path for all InnoDB data files. @item @code{innodb_data_file_path} @tab Paths to individual data files and their sizes. The full directory path to each data file is acquired by concatenating innodb_data_home_dir to @@ -30209,14 +30273,14 @@ The following table has the options you can use for the @strong{MASTER}: @item @strong{Option} @tab @strong{Description} @item @code{log-bin=filename} @tab Write to a binary update log to the specified location. Note that if you -give it a parameter with an extension -(for example, @code{log-bin=/mysql/logs/replication.log} ) versions up to 3.23.24 -will not work right during replication if you do @code{FLUSH LOGS} . The -problem is fixed in Version 3.23.25. If you are using this kind of log name, -@code{FLUSH LOGS} will be ignored on binlog. To clear the log, run +give it a parameter with an extension (for example, +@code{log-bin=/mysql/logs/replication.log} ) versions up to 3.23.24 will +not work right during replication if you do @code{FLUSH LOGS} . The +problem is fixed in Version 3.23.25. If you are using this kind of log +name, @code{FLUSH LOGS} will be ignored on binlog. To clear the log, run @code{FLUSH MASTER}, and do not forget to run @code{FLUSH SLAVE} on all -slaves. In Version 3.23.26 and in later versions you should use @code{RESET MASTER} -and @code{RESET SLAVE} +slaves. In Version 3.23.26 and in later versions you should use +@code{RESET MASTER} and @code{RESET SLAVE} @item @code{log-bin-index=filename} @tab Because the user could issue the @code{FLUSH LOGS} command, we need to @@ -30307,7 +30371,6 @@ times, once for each table.(Example: @code{replicate-ignore-table=foo%.bar%} - will not upates to tables in all databases that start with foo and whose table names start with bar) - @item @code{replicate-ignore-db=database_name} @tab Tells the slave thread to not replicate to the specified database. To specify more than one database to ignore, use the directive multiple @@ -30328,7 +30391,6 @@ you have 3.23.28 or later, and use @code{replicate-wild-do-table=db_name.%} (Example: @code{replicate-do-db=some_db}) - @item @code{log-slave-updates} @tab Tells the slave to log the updates from the slave thread to the binary log. Off by default. You will need to turn it on if you plan to @@ -30341,6 +30403,10 @@ Updates to a database with a different name than the original (Example: @item @code{skip-slave-start} @tab Tells the slave server not to start the slave on the startup. The user can start it later with @code{SLAVE START}. + +@item @code{slave_read_timeout=#} +Number of seconds to wait for more data from the master before aborting +the read. @end multitable @cindex SQL commands, replication @@ -30746,8 +30812,11 @@ query from the master. @item If you have decided you can skip the next query, do @code{SET SQL_SLAVE_SKIP_COUNTER=1; SLAVE START;} to skip a query that -does not use auto_increment, last_insert_id or timestamp, or -@code{SET SQL_SLAVE_SKIP_COUNTER=2; SLAVE START;} otherwise +does not use auto_increment, or last_insert_id or +@code{SET SQL_SLAVE_SKIP_COUNTER=2; SLAVE START;} otherwise. The reason +auto_increment/last_insert_id queries are different is that they take +two events in the binary log of the master. + @item If you are sure the slave started out perfectly in sync with the master, and no one has updated the tables involved outside of slave thread, @@ -31664,7 +31733,8 @@ method for changing the limit varies widely from system to system. @code{table_cache} is related to @code{max_connections}. For example, for 200 concurrent running connections, you should have a table cache of at least @code{200 * n}, where @code{n} is the maximum number of tables -in a join. +in a join. You also need to reserve some extra file descriptors for +temporary tables and files. The cache of open tables can grow to a maximum of @code{table_cache} (default 64; this can be changed with the @code{-O table_cache=#} @@ -46663,6 +46733,28 @@ not yet 100% confident in this code. Added option @code{--warnings} to @code{mysqld}. Now @code{mysqld} only prints the error @code{Aborted connection} if this option is used. @item +Fixed problem with @code{--low-priority-updates} and @code{INSERT}'s. +@item +Fixed bug in slave thread when under some rare circumstances it could +get 22 bytes ahead on the offset in the master +@item +Added @code{slave_wait_timeout} for replication. +@item +Fixed problem with @code{UPDATE} and BDB tables. +@item +Fixed hard bug in BDB tables when using key parts. +@item +Fixed problem when using the @code{GRANT FILE ON database.* ...}; Previously +we added the @code{DROP} privilege for the database. +@item +Fixed that @code{DELETE FROM table_name ... LIMIT 0} and +@code{UPDATE FROM table_name ... LIMIT 0} doesn't delete/update anything. +@item +@code{CHECK TABLE} now checks if an auto_increment column contains the value 0. +@item +Sending a @code{SIGHUP} to @code{mysqld} will now only flush the logs, +not reset the replication. +@item Fixed parser to allow floats of type @code{1.0e1} (no sign after @code{e}). @item Option @code{--force} to @code{myisamchk} now also updates states. @@ -46684,6 +46776,9 @@ Fixed bug in @code{BDB} tables when querying empty tables. @item Fixed a bug when using @code{COUNT(DISTINCT)} with @code{LEFT JOIN} and there wasn't any matching rows. +@item +Removed all documentation referring to the @code{GEMINI} table +type. @code{GEMINI} is not released under an Open Source license. @end itemize @node News-3.23.39, News-3.23.38, News-3.23.40, News-3.23.x @@ -51731,15 +51826,19 @@ running not completed multi-statement transactions. (The transaction will probably be ignored). @item +@code{ANALYZE TABLE}, @code{OPTIMIZE TABLE} and @code{REPAIR TABLE} may +cause problems on tables for which you are using @code{INSERT DELAYED}. + +@item Doing a @code{LOCK TABLE ..} and @code{FLUSH TABLES ..} doesn't guarantee that there isn't a half-finished transaction in progress on the table. @item -BDB tables are a bit slow to open from this. If you have many BDB tables -in a database, it will take a long time to use the @code{mysql} client -on the database if you are not using the @code{-A} option or if you are -using @code{rehash}. This is especially notable when you have a big table +BDB tables are a bit slow to open. If you have many BDB tables in a +database, it will take a long time to use the @code{mysql} client on the +database if you are not using the @code{-A} option or if you are using +@code{rehash}. This is especially notable when you have a big table cache. @item @@ -51894,6 +51993,8 @@ values in double. Using these will cause problems when trying to export and import data. We should as an intermediate solution change @code{NaN} to @code{NULL} (if possible) and @code{-Inf} and @code{Inf} to the Minimum respective maximum possible @code{double} value. +@item +@code{LIMIT} on negative numbers are treated as big positive numbers. @end itemize The following are known bugs in earlier versions of @strong{MySQL}: @@ -52108,6 +52209,9 @@ Add @code{PREPARE} of statements and sending of parameters to @code{mysqld}. Make it possible to specify @code{long_query_time} with a granularity in microseconds. @item +Add a configurable prompt to the @code{mysql} command line client, with +options like database in use, time and date... +@item Add range checking to @code{MERGE} tables. @item Link the @code{myisampack} code into the server. diff --git a/bdb/include/db.src b/bdb/include/db.src index bcb9033eed1..5226d4e98c6 100644 --- a/bdb/include/db.src +++ b/bdb/include/db.src @@ -119,6 +119,7 @@ struct __db_dbt { u_int32_t dlen; /* RO: get/put record length. */ u_int32_t doff; /* RO: get/put record offset. */ + void *app_private; /* Application-private handle. */ #define DB_DBT_ISSET 0x001 /* Lower level calls set value. */ #define DB_DBT_MALLOC 0x002 /* Return in malloc'd memory. */ #define DB_DBT_PARTIAL 0x004 /* Partial put/get. */ diff --git a/configure.in b/configure.in index d9c443c0dc8..381ba7c9299 100644 --- a/configure.in +++ b/configure.in @@ -629,7 +629,10 @@ struct request_info *req; AC_MSG_RESULT(yes) AC_DEFINE(LIBWRAP) AC_DEFINE(HAVE_LIBWRAP) - WRAPLIBS="-L$with_libwrap/lib -lwrap", + if test "$with_libwrap" != "yes"; then + WRAPLIBS="-L${with_libwrap}/lib" + fi + WRAPLIBS="${WRAPLIBS} -lwrap", AC_MSG_RESULT(no) CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}), CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}) @@ -831,6 +834,12 @@ case $SYSTEM_TYPE in echo "Adding fix for interrupted reads" CXXFLAGS="$CXXFLAGS -DMYSQLD_NET_RETRY_COUNT=1000000" ;; + *netbsd*) + echo "Adding flag -Dunix" + CFLAGS="$CFLAGS -Dunix" + CXXFLAGS="$CXXFLAGS -Dunix" + OVERRIDE_MT_LD_ADD="\$(top_srcdir)/mit-pthreads/obj/libpthread.a" + ;; *bsdi*) echo "Adding fix for BSDI" CFLAGS="$CFLAGS -D__BSD__ -DHAVE_BROKEN_REALPATH" @@ -1155,10 +1164,10 @@ if test "$ac_cv_lib_pthread_strtok_r" = "no" then my_save_LIBS="$LIBS" AC_CHECK_LIB(c_r,strtok_r) - if test "$with_osf32_threads" = "yes" -o "$target_os" = "FreeBSD" -o "$target_os" = "freebsd" - then - LIBS="$my_save_LIBS" - fi + case "$with_osf32_threads---$target_os" in + # Don't keep -lc_r in LIBS; -pthread handles it magically + yes---* | *---freebsd* ) LIBS="$my_save_LIBS" ;; + esac AC_CHECK_FUNCS(strtok_r pthread_init) else AC_CHECK_FUNCS(strtok_r) @@ -2058,7 +2067,7 @@ and GNU make work together causes some files to depend on this header, even if we're not building with Berkeley DB. Obviously, if this file *is* used, it'll break and hopefully we can find -out why this file was generated by $(top_srcdir)/configure instead of +out why this file was generated by ${top_srcdir}/configure instead of the real db.h. If you run into some problems because of this file, please use mysql_bug @@ -2099,15 +2108,20 @@ EOF AC_DEFINE(HAVE_mit_thread) MT_INCLUDES="-I\$(top_srcdir)/mit-pthreads/include" AC_SUBST(MT_INCLUDES) - MT_LD_ADD="-L \$(top_srcdir)/mit-pthreads/obj/ -lpthread" + if test -n "$OVERRIDE_MT_LD_ADD" + then + MT_LD_ADD="$OVERRIDE_MT_LD_ADD" + else + MT_LD_ADD="-L \$(top_srcdir)/mit-pthreads/obj/ -lpthread" + fi AC_SUBST(MT_LD_ADD) - LIBS="$MT_LD_ADD $LIBS" echo "" echo "Configuring MIT Pthreads" # We will never install so installation paths are not needed. (cd mit-pthreads; sh ./configure) echo "End of MIT Pthreads configuration" echo "" + LIBS="$MT_LD_ADD $LIBS" fi fi AC_SUBST(sql_server_dirs) diff --git a/include/thr_lock.h b/include/thr_lock.h index 42bcd9bcaba..6dd59f80e64 100644 --- a/include/thr_lock.h +++ b/include/thr_lock.h @@ -65,6 +65,7 @@ enum thr_lock_type { TL_IGNORE=-1, extern ulong max_write_lock_count; extern my_bool thr_lock_inited; +extern enum thr_lock_type thr_upgraded_concurrent_insert_lock; typedef struct st_thr_lock_data { pthread_t thread; diff --git a/mit-pthreads/gen/ctime.c b/mit-pthreads/gen/ctime.c index 0c1e711cf13..9b38d41e495 100644 --- a/mit-pthreads/gen/ctime.c +++ b/mit-pthreads/gen/ctime.c @@ -177,7 +177,7 @@ time_t altzone = 0; static int detzcode(const char * codep) { - long result; + int result; int i; result = 0; diff --git a/mit-pthreads/machdep/netbsd-1.1/__signal.h b/mit-pthreads/machdep/netbsd-1.1/__signal.h index e41e9218261..ea2979f2b4e 100755 --- a/mit-pthreads/machdep/netbsd-1.1/__signal.h +++ b/mit-pthreads/machdep/netbsd-1.1/__signal.h @@ -1,5 +1,7 @@ #include <sys/signal.h> +__BEGIN_DECLS + #if NSIG <= 32 #define __SIGEMPTYSET 0 #define __SIGFILLSET 0xffffffff @@ -8,6 +10,9 @@ #define __SIGISMEMBER(s, n) ((*(s) & (1 << ((n) - 1))) != 0) #else /* XXX Netbsd >= 1.3H */ + +int sigaction __P_((int, const struct sigaction *, struct sigaction *)) __RENAME(__sigaction14); + #define __SIGEMPTYSET { 0, 0, 0, 0} #define __SIGFILLSET { 0xffffffff, 0xffffffff, \ 0xffffffff, 0xffffffff } @@ -18,3 +23,5 @@ #define __SIGISMEMBER(s, n) (((s)->__bits[__SIGWORD(n)] & __SIGMASK(n)) != 0) #endif + +__END_DECLS diff --git a/mit-pthreads/stdio/strerror.c b/mit-pthreads/stdio/strerror.c index 5aea7e7a4fc..d35235e63b0 100644 --- a/mit-pthreads/stdio/strerror.c +++ b/mit-pthreads/stdio/strerror.c @@ -36,13 +36,18 @@ static char sccsid[] = "@(#)strerror.c 5.6 (Berkeley) 5/4/91"; #endif /* LIBC_SCCS and not lint */ #include <string.h> +#if defined(__NetBSD__) +#include <errno.h> +#endif char * strerror(num) int num; { +#if !defined(__NetBSD__) extern int sys_nerr; extern char *sys_errlist[]; +#endif #define UPREFIX "Unknown error: " static char ebuf[40] = UPREFIX; /* 64-bit number + slop */ register unsigned int errnum; @@ -51,7 +56,7 @@ strerror(num) errnum = num; /* convert to unsigned */ if (errnum < sys_nerr) - return(sys_errlist[errnum]); + return((char *)sys_errlist[errnum]); /* Do this by hand, so we don't include stdio(3). */ t = tmp; diff --git a/myisam/mi_check.c b/myisam/mi_check.c index deb3f2071b3..a02652f0b48 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -434,9 +434,9 @@ int chk_key(MI_CHECK *param, register MI_INFO *info) } else full_text_keys++; - /* Check that auto_increment key is bigger than max key value */ if ((uint) share->base.auto_key -1 == key) { + /* Check that auto_increment key is bigger than max key value */ ulonglong save_auto_value=info->s->state.auto_increment; info->s->state.auto_increment=0; info->lastinx=key; @@ -456,6 +456,20 @@ int chk_key(MI_CHECK *param, register MI_INFO *info) } else info->s->state.auto_increment=save_auto_value; + + /* Check that there isn't a row with auto_increment = 0 in the table */ + mi_extra(info,HA_EXTRA_KEYREAD); + bzero(info->lastkey,keyinfo->seg->length); + if (!mi_rkey(info, info->rec_buff, key, info->lastkey, + keyinfo->seg->length, HA_READ_KEY_EXACT)) + { + /* Don't count this as a real warning, as myisamchk can't correct it */ + uint save=param->warning_printed; + mi_check_print_warning(param, + "Found row where the auto_increment column has the value 0"); + param->warning_printed=save; + } + mi_extra(info,HA_EXTRA_NO_KEYREAD); } length=(my_off_t) isam_key_length(info,keyinfo)*keys + param->key_blocks*2; diff --git a/myisam/myisamchk.c b/myisam/myisamchk.c index 5b1d4b0ed61..bda1637314f 100644 --- a/myisam/myisamchk.c +++ b/myisam/myisamchk.c @@ -206,7 +206,7 @@ static struct option long_options[] = static void print_version(void) { - printf("%s Ver 1.47 for %s at %s\n",my_progname,SYSTEM_TYPE, + printf("%s Ver 1.48 for %s at %s\n",my_progname,SYSTEM_TYPE, MACHINE_TYPE); } diff --git a/mysql-test/r/auto_increment.result b/mysql-test/r/auto_increment.result index 9ff02d7a7b8..bf6265e5b64 100644 --- a/mysql-test/r/auto_increment.result +++ b/mysql-test/r/auto_increment.result @@ -55,3 +55,8 @@ ordid ord 2 sdj 3 sdj 1 zzz +a +0 +Table Op Msg_type Msg_text +test.t1 check warning Found row where the auto_increment column has the value 0 +test.t1 check status OK diff --git a/mysql-test/r/bdb.result b/mysql-test/r/bdb.result index c88b7375aec..89d9c56b3b0 100644 --- a/mysql-test/r/bdb.result +++ b/mysql-test/r/bdb.result @@ -511,3 +511,14 @@ id id3 100 2 KINMU_DATE KINMU_DATE +a b +1 1 +1 2 +a b a b +1 1 1 1 +1 1 1 2 +1 2 1 1 +1 2 1 2 +a b +1 1 +1 2 diff --git a/mysql-test/r/limit.result b/mysql-test/r/limit.result index 0f5586e3b31..6c3a1ed17e4 100644 --- a/mysql-test/r/limit.result +++ b/mysql-test/r/limit.result @@ -20,3 +20,6 @@ a b a b 2 2 3 4 +i +2 +1 diff --git a/mysql-test/r/lock.result b/mysql-test/r/lock.result index 7b1be604024..ccd3c02558d 100644 --- a/mysql-test/r/lock.result +++ b/mysql-test/r/lock.result @@ -4,3 +4,7 @@ Table Op Msg_type Msg_text test.t1 check status OK Table Op Msg_type Msg_text test.t2 check error Table 't2' was not locked with LOCK TABLES +n +4 +n +1 diff --git a/mysql-test/r/rpl_mystery22.result b/mysql-test/r/rpl_mystery22.result new file mode 100644 index 00000000000..f85b057eefa --- /dev/null +++ b/mysql-test/r/rpl_mystery22.result @@ -0,0 +1,4 @@ +n +1 +2 +3 diff --git a/mysql-test/r/rpl_sporadic_master.result b/mysql-test/r/rpl_sporadic_master.result index 414468f0998..ed616c26b67 100644 --- a/mysql-test/r/rpl_sporadic_master.result +++ b/mysql-test/r/rpl_sporadic_master.result @@ -1,7 +1,7 @@ n -1 -2 -3 -4 -5 -6 +10 +11 +12 +13 +14 +15 diff --git a/mysql-test/t/auto_increment.test b/mysql-test/t/auto_increment.test index 1741b51b2d6..b9b8c244699 100644 --- a/mysql-test/t/auto_increment.test +++ b/mysql-test/t/auto_increment.test @@ -64,3 +64,14 @@ create table t1 (ordid int(8) not null auto_increment, ord varchar(50) not null insert into t1 values (NULL,'sdj'),(NULL,'sdj'),(NULL,"abc"),(NULL,'abc'),(NULL,'zzz'),(NULL,'sdj'),(NULL,'abc'); select * from t1; drop table t1; + +# +# Test of auto_increment columns when they are set to 0 +# + +create table t1 (a int not null primary key auto_increment); +insert into t1 values (0); +update t1 set a=0; +select * from t1; +check table t1; +drop table t1; diff --git a/mysql-test/t/bdb.test b/mysql-test/t/bdb.test index d9e08ed33dc..f0c24722e90 100644 --- a/mysql-test/t/bdb.test +++ b/mysql-test/t/bdb.test @@ -715,3 +715,18 @@ CREATE TABLE t2 ( SYAIN_NO char(5) NOT NULL default '',STR_DATE char(8) NOT NULL select T1.KINMU_DATE from t1 T1 ,t2 T2 where T1.SYAIN_NO = '12345' and T1.KINMU_DATE = '200106' and T2.SYAIN_NO = T1.SYAIN_NO; select T1.KINMU_DATE from t1 T1 ,t2 T2 where T1.SYAIN_NO = '12345' and T1.KINMU_DATE = '200106' and T2.SYAIN_NO = T1.SYAIN_NO; DROP TABLE t1,t2; + +# +# Test problem with joining table to itself on a multi-part unique key +# + +drop table if exists t; +create table t (a int(11) not null, b int(11) not null, unique (a,b)) type=bdb; + +insert into t values (1,1), (1,2); + +select * from t where a = 1; +select t1.*, t2.* from t t1, t t2 where t1.a = t2.a and t2.a = 1; +select * from t where a = 1; + +drop table t; diff --git a/mysql-test/t/limit.test b/mysql-test/t/limit.test index ba075f73d37..112761abd87 100644 --- a/mysql-test/t/limit.test +++ b/mysql-test/t/limit.test @@ -17,3 +17,14 @@ select * from t1; delete from t1 limit 1; select * from t1; drop table t1; + +create table t1 (i int); +insert into t1 (i) values(1); +insert into t1 (i) values(1); +insert into t1 (i) values(1); +delete from t1 limit 1; +update t1 set i=2 limit 1; +delete from t1 limit 0; +update t1 set i=3 limit 0; +select * from t1; +drop table t1; diff --git a/mysql-test/t/lock.test b/mysql-test/t/lock.test index 385713174d2..77354e63252 100644 --- a/mysql-test/t/lock.test +++ b/mysql-test/t/lock.test @@ -53,3 +53,45 @@ lock tables t1 write; check table t2; unlock tables; drop table t1,t2; + +#test to see if select will get the lock ahead of low priority update +connect (locker,localhost,root,,); +connect (reader,localhost,root,,); +connect (writer,localhost,root,,); + +connection locker; +create table t1(n int); +insert into t1 values (1); +lock tables t1 write; +connection writer; +send update low_priority t1 set n = 4; +connection reader; +--sleep 2 +send select n from t1; +connection locker; +--sleep 2 +unlock tables; +connection writer; +reap; +connection reader; +reap; +drop table t1; + +connection locker; +create table t1(n int); +insert into t1 values (1); +lock tables t1 read; +connection writer; +send update low_priority t1 set n = 4; +connection reader; +--sleep 2 +send select n from t1; +connection locker; +--sleep 2 +unlock tables; +connection writer; +reap; +connection reader; +reap; +drop table t1; + diff --git a/mysql-test/t/rpl_mystery22.test b/mysql-test/t/rpl_mystery22.test new file mode 100644 index 00000000000..3a48ef84dc1 --- /dev/null +++ b/mysql-test/t/rpl_mystery22.test @@ -0,0 +1,43 @@ +# test case to make slave thread get ahead by 22 bytes + +source include/master-slave.inc; +connection master; +# first, cause a duplicate key problem on the slave +create table t1(n int auto_increment primary key); +save_master_pos; +connection slave; +sync_with_master; +insert into t1 values (2); +connection master; +insert into t1 values(NULL); +insert into t1 values(NULL); +save_master_pos; +connection slave; +sleep 1; # there is no way around this sleep - we have to wait until +# the slave tries to run the query, fails and aborts slave thread +delete from t1 where n = 2; +slave start; +sync_with_master; +#now the buggy slave would be confused on the offset but it can replicate +#in order to make it break, we need to stop/start the slave one more time +slave stop; +connection master; +# to be able to really confuse the slave, we need some non-auto-increment +# events in the log +create table t2(n int); +drop table t2; +insert into t1 values(NULL); +save_master_pos; +connection slave; +slave start; +#now the truth comes out - if the slave is buggy, it will never sync because +#the slave thread is not able to read events +sync_with_master; +select * from t1; +#clean up +connection master; +drop table t1; +save_master_pos; +connection slave; +sync_with_master; + diff --git a/mysql-test/t/rpl_sporadic_master.test b/mysql-test/t/rpl_sporadic_master.test index b22a95612ba..a8d953b94a4 100644 --- a/mysql-test/t/rpl_sporadic_master.test +++ b/mysql-test/t/rpl_sporadic_master.test @@ -1,24 +1,33 @@ -#test to see if replication can continue when master sporadically fails on +# test to see if replication can continue when master sporadically fails on # COM_BINLOG_DUMP and additionally limits the number of events per dump + source include/master-slave.inc; connection master; -drop table if exists t1; +drop table if exists t1,t2; +create table t2(n int); create table t1(n int not null auto_increment primary key); insert into t1 values (NULL),(NULL); truncate table t1; -insert into t1 values (NULL),(NULL); +# We have to use 4 in the following to make this test work with all table types +insert into t1 values (4),(NULL); +save_master_pos; +connection slave; +sync_with_master; +slave stop; +slave start; +connection master; insert into t1 values (NULL),(NULL); flush logs; truncate table t1; -insert into t1 values (NULL),(NULL); -insert into t1 values (NULL),(NULL); +insert into t1 values (10),(NULL); +insert into t1 values (NULL),(NULL) insert into t1 values (NULL),(NULL); save_master_pos; connection slave; sync_with_master; select * from t1; connection master; -drop table t1; +drop table t1,t2; save_master_pos; connection slave; sync_with_master; diff --git a/mysys/thr_lock.c b/mysys/thr_lock.c index 7c92a7fa5fa..7d86d0c9524 100644 --- a/mysys/thr_lock.c +++ b/mysys/thr_lock.c @@ -85,6 +85,7 @@ multiple read locks. my_bool thr_lock_inited=0; ulong locks_immediate = 0L, locks_waited = 0L; +enum thr_lock_type thr_upgraded_concurrent_insert_lock = TL_WRITE; /* The following constants are only for debug output */ #define MAX_THREADS 100 @@ -110,7 +111,8 @@ my_bool init_thr_lock() } #ifdef EXTRA_DEBUG -static int found_errors=0; +#define MAX_FOUND_ERRORS 10 /* Report 10 first errors */ +static uint found_errors=0; static int check_lock(struct st_lock_list *list, const char* lock_type, const char *where, my_bool same_thread) @@ -167,15 +169,16 @@ static int check_lock(struct st_lock_list *list, const char* lock_type, static void check_locks(THR_LOCK *lock, const char *where, my_bool allow_no_locks) { - if (!found_errors) + uint old_found_errors=found_errors; + if (found_errors < MAX_FOUND_ERRORS) { if (check_lock(&lock->write,"write",where,1) | check_lock(&lock->write_wait,"write_wait",where,0) | check_lock(&lock->read,"read",where,0) | check_lock(&lock->read_wait,"read_wait",where,0)) - found_errors=1; + found_errors++; - if (!found_errors) + if (found_errors < MAX_FOUND_ERRORS) { uint count=0; THR_LOCK_DATA *data; @@ -186,7 +189,7 @@ static void check_locks(THR_LOCK *lock, const char *where, } if (count != lock->read_no_write_count) { - found_errors=1; + found_errors++; fprintf(stderr, "Warning at '%s': Locks read_no_write_count was %u when it should have been %u\n", where, lock->read_no_write_count,count); } @@ -196,7 +199,7 @@ static void check_locks(THR_LOCK *lock, const char *where, if (!allow_no_locks && !lock->read.data && (lock->write_wait.data || lock->read_wait.data)) { - found_errors=1; + found_errors++; fprintf(stderr, "Warning at '%s': No locks in use but locks are in wait queue\n", where); @@ -205,7 +208,7 @@ static void check_locks(THR_LOCK *lock, const char *where, { if (!allow_no_locks && lock->read_wait.data) { - found_errors=1; + found_errors++; fprintf(stderr, "Warning at '%s': No write locks and waiting read locks\n", where); @@ -221,7 +224,7 @@ static void check_locks(THR_LOCK *lock, const char *where, (lock->write_wait.data->type == TL_WRITE_DELAYED && !lock->read.data))) { - found_errors=1; + found_errors++; fprintf(stderr, "Warning at '%s': Write lock %d waiting while no exclusive read locks\n",where,(int) lock->write_wait.data->type); } @@ -235,7 +238,7 @@ static void check_locks(THR_LOCK *lock, const char *where, lock->write.data->type == TL_WRITE_ALLOW_WRITE && lock->write_wait.data->type == TL_WRITE_ALLOW_WRITE) { - found_errors=1; + found_errors++; fprintf(stderr, "Warning at '%s': Found WRITE_ALLOW_WRITE lock waiting for WRITE_ALLOW_WRITE lock\n", where); @@ -243,16 +246,18 @@ static void check_locks(THR_LOCK *lock, const char *where, } if (lock->read.data) { - if ((!pthread_equal(lock->write.data->thread,lock->read.data->thread) && - lock->write.data->type > TL_WRITE_DELAYED) || + if ((!pthread_equal(lock->write.data->thread, + lock->read.data->thread) && + lock->write.data->type > TL_WRITE_DELAYED && + lock->write.data->type != TL_WRITE_ONLY) || ((lock->write.data->type == TL_WRITE_CONCURRENT_INSERT || lock->write.data->type == TL_WRITE_ALLOW_WRITE) && lock->read_no_write_count)) { - found_errors=1; + found_errors++; fprintf(stderr, - "Warning at '%s': Found lock that is write and read locked\n", - where); + "Warning at '%s': Found lock of type %d that is write and read locked\n", + where, lock->write.data->type); } } if (lock->read_wait.data) @@ -260,7 +265,7 @@ static void check_locks(THR_LOCK *lock, const char *where, if (!allow_no_locks && lock->write.data->type <= TL_WRITE_DELAYED && lock->read_wait.data->type <= TL_READ_HIGH_PRIORITY) { - found_errors=1; + found_errors++; fprintf(stderr, "Warning at '%s': Found read lock of type %d waiting for write lock of type %d\n", where, @@ -270,7 +275,7 @@ static void check_locks(THR_LOCK *lock, const char *where, } } } - if (found_errors) + if (found_errors != old_found_errors) { DBUG_PRINT("error",("Found wrong lock")); } @@ -510,7 +515,7 @@ int thr_lock(THR_LOCK_DATA *data,enum thr_lock_type lock_type) } } else if (lock_type == TL_WRITE_CONCURRENT_INSERT && ! lock->check_status) - data->type=lock_type= TL_WRITE; /* not supported */ + data->type=lock_type= thr_upgraded_concurrent_insert_lock; if (lock->write.data) /* If there is a write lock */ { @@ -552,7 +557,7 @@ int thr_lock(THR_LOCK_DATA *data,enum thr_lock_type lock_type) { /* no scheduled write locks */ if (lock_type == TL_WRITE_CONCURRENT_INSERT && (*lock->check_status)(data->status_param)) - data->type=lock_type=TL_WRITE; /* Upgrade lock */ + data->type=lock_type= thr_upgraded_concurrent_insert_lock; if (!lock->read.data || (lock_type <= TL_WRITE_DELAYED && @@ -939,10 +944,10 @@ my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data) DBUG_ENTER("thr_upgrade_write_delay_lock"); pthread_mutex_lock(&lock->mutex); - if (data->type == TL_UNLOCK || data->type == TL_WRITE) /* Aborted */ + if (data->type == TL_UNLOCK || data->type >= TL_WRITE_LOW_PRIORITY) { pthread_mutex_unlock(&lock->mutex); - DBUG_RETURN(data->type == TL_UNLOCK); + DBUG_RETURN(data->type == TL_UNLOCK); /* Test if Aborted */ } check_locks(lock,"before upgrading lock",0); /* TODO: Upgrade to TL_WRITE_CONCURRENT_INSERT in some cases */ diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/ATIS-mysql-Linux_2.2.16_SMP_alpha index c4791adf90d..4f87bebff3d 100644 --- a/sql-bench/Results/ATIS-mysql-Linux_2.2.16_SMP_alpha +++ b/sql-bench/Results/ATIS-mysql-Linux_2.2.16_SMP_alpha @@ -1,20 +1,20 @@ -Testing server 'MySQL 3.23.36' at 2001-03-26 1:22:18 +Testing server 'MySQL 3.23.39' at 2002-09-08 10:26:22 ATIS table test Creating tables -Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Inserting data -Time to insert (9768): 4 wallclock secs ( 0.57 usr 0.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to insert (9768): 3 wallclock secs ( 0.51 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Retrieving data -Time for select_simple_join (500): 1 wallclock secs ( 0.58 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_join (100): 2 wallclock secs ( 0.44 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix_join (100): 11 wallclock secs ( 3.47 usr 2.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_distinct (800): 10 wallclock secs ( 1.53 usr 0.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (2800): 11 wallclock secs ( 1.44 usr 0.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_simple_join (500): 2 wallclock secs ( 0.58 usr 0.37 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_join (100): 2 wallclock secs ( 0.48 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_key_prefix_join (100): 10 wallclock secs ( 3.45 usr 2.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_distinct (800): 11 wallclock secs ( 1.54 usr 0.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_group (2800): 11 wallclock secs ( 1.48 usr 0.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Removing tables -Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 39 wallclock secs ( 8.05 usr 5.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to drop_table (28): 0 wallclock secs ( 0.00 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Total time: 39 wallclock secs ( 8.05 usr 5.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/RUN-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/RUN-mysql-Linux_2.2.16_SMP_alpha index f0287b6bde7..fe7dd396f30 100644 --- a/sql-bench/Results/RUN-mysql-Linux_2.2.16_SMP_alpha +++ b/sql-bench/Results/RUN-mysql-Linux_2.2.16_SMP_alpha @@ -1,103 +1,104 @@ -Benchmark DBD suite: 2.12 -Date of test: 2001-03-26 1:22:18 +Benchmark DBD suite: 2.13 +Date of test: 2002-09-08 10:26:21 Running tests on: Linux 2.2.16-SMP alpha Arguments: Comments: Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; cxx 6.3 + ccc 6.2.9 Limits from: -Server version: MySQL 3.23.36 +Server version: MySQL 3.23.39 -ATIS: Total time: 39 wallclock secs ( 8.05 usr 5.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -alter-table: Total time: 405 wallclock secs ( 0.30 usr 0.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -big-tables: Total time: 40 wallclock secs ( 7.49 usr 10.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -connect: Total time: 76 wallclock secs (33.34 usr 18.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -create: Total time: 147 wallclock secs ( 9.75 usr 5.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -insert: Total time: 2318 wallclock secs (663.06 usr 307.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -select: Total time: 1346 wallclock secs (63.34 usr 28.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -wisconsin: Total time: 19 wallclock secs ( 3.99 usr 3.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +ATIS: Total time: 39 wallclock secs ( 8.05 usr 5.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +alter-table: Total time: 345 wallclock secs ( 0.29 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +big-tables: Total time: 38 wallclock secs ( 7.19 usr 9.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +connect: Total time: 76 wallclock secs (34.04 usr 17.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +create: Total time: 225 wallclock secs (10.03 usr 4.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +insert: Total time: 2279 wallclock secs (634.62 usr 299.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +select: Total time: 1360 wallclock secs (65.68 usr 27.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +wisconsin: Total time: 18 wallclock secs ( 3.78 usr 3.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) All 8 test executed successfully Totals per operation: Operation seconds usr sys cpu tests -alter_table_add 219.00 0.16 0.07 0.00 992 -alter_table_drop 178.00 0.06 0.04 0.00 496 -connect 14.00 7.60 2.34 0.00 10000 -connect+select_1_row 17.00 8.25 3.12 0.00 10000 -connect+select_simple 16.00 7.88 3.28 0.00 10000 -count 55.00 0.04 0.01 0.00 100 -count_distinct 48.00 0.40 0.10 0.00 1000 -count_distinct_2 50.00 0.42 0.12 0.00 1000 -count_distinct_big 137.00 6.05 7.22 0.00 120 -count_distinct_group 69.00 0.98 0.61 0.00 1000 -count_distinct_group_on_key 42.00 0.42 0.15 0.00 1000 -count_distinct_group_on_key_parts 70.00 0.97 0.59 0.00 1000 -count_distinct_key_prefix 38.00 0.39 0.12 0.00 1000 -count_group_on_key_parts 42.00 0.94 0.56 0.00 1000 -count_on_key 391.00 16.30 4.71 0.00 50100 -create+drop 13.00 2.39 1.35 0.00 10000 -create_MANY_tables 104.00 1.76 0.73 0.00 10000 +alter_table_add 187.00 0.18 0.06 0.00 992 +alter_table_drop 150.00 0.05 0.05 0.00 496 +connect 14.00 8.11 2.28 0.00 10000 +connect+select_1_row 17.00 8.45 3.08 0.00 10000 +connect+select_simple 16.00 8.44 2.99 0.00 10000 +count 50.00 0.04 0.01 0.00 100 +count_distinct 51.00 0.44 0.11 0.00 1000 +count_distinct_2 49.00 0.41 0.14 0.00 1000 +count_distinct_big 137.00 6.09 6.97 0.00 120 +count_distinct_group 75.00 0.97 0.60 0.00 1000 +count_distinct_group_on_key 47.00 0.45 0.14 0.00 1000 +count_distinct_group_on_key_parts 75.00 0.98 0.61 0.00 1000 +count_distinct_key_prefix 41.00 0.42 0.13 0.00 1000 +count_group_on_key_parts 38.00 0.89 0.59 0.00 1000 +count_on_key 386.00 17.16 4.60 0.00 50100 +create+drop 12.00 2.44 1.26 0.00 10000 +create_MANY_tables 183.00 1.96 0.78 0.00 10000 create_index 4.00 0.00 0.00 0.00 8 -create_key+drop 17.00 4.00 1.40 0.00 10000 -create_table 0.00 0.00 0.00 0.00 31 -delete_all 10.00 0.00 0.00 0.00 12 -delete_all_many_keys 51.00 0.03 0.01 0.00 1 -delete_big 0.00 0.00 0.00 0.00 1 -delete_big_many_keys 51.00 0.03 0.01 0.00 128 -delete_key 5.00 0.64 0.59 0.00 10000 +create_key+drop 17.00 4.03 1.40 0.00 10000 +create_table 0.00 0.00 0.01 0.00 31 +delete_all 11.00 0.00 0.00 0.00 12 +delete_all_many_keys 52.00 0.02 0.01 0.00 1 +delete_big 1.00 0.00 0.00 0.00 1 +delete_big_many_keys 52.00 0.01 0.01 0.00 128 +delete_key 4.00 0.59 0.58 0.00 10000 drop_index 4.00 0.00 0.00 0.00 8 -drop_table 0.00 0.00 0.00 0.00 28 -drop_table_when_MANY_tables 7.00 0.64 0.63 0.00 10000 -insert 137.00 24.38 23.04 0.00 350768 -insert_duplicates 40.00 5.91 6.68 0.00 100000 -insert_key 97.00 8.84 6.70 0.00 100000 -insert_many_fields 14.00 0.33 0.14 0.00 2000 -insert_select_1_key 6.00 0.00 0.00 0.00 1 -insert_select_2_keys 6.00 0.00 0.00 0.00 1 -min_max 22.00 0.02 0.00 0.00 60 -min_max_on_key 164.00 26.11 7.96 0.00 85000 -multiple_value_insert 7.00 1.91 0.06 0.00 100000 -order_by_big 49.00 17.41 20.76 0.00 10 -order_by_big_key 32.00 18.87 13.82 0.00 10 -order_by_big_key2 31.00 17.40 13.49 0.00 10 -order_by_big_key_desc 33.00 18.88 13.81 0.00 10 -order_by_big_key_diff 45.00 17.45 20.78 0.00 10 -order_by_big_key_prefix 31.00 17.49 13.48 0.00 10 -order_by_key2_diff 4.00 1.66 1.15 0.00 500 -order_by_key_prefix 3.00 0.93 0.63 0.00 500 -order_by_range 4.00 0.95 0.63 0.00 500 -outer_join 67.00 0.01 0.00 0.00 10 -outer_join_found 59.00 0.01 0.00 0.00 10 -outer_join_not_found 41.00 0.01 0.00 0.00 500 -outer_join_on_key 45.00 0.00 0.00 0.00 10 -select_1_row 3.00 0.30 0.80 0.00 10000 -select_2_rows 2.00 0.32 0.95 0.00 10000 -select_big 52.00 25.87 20.37 0.00 10080 -select_column+column 3.00 0.31 0.79 0.00 10000 -select_diff_key 146.00 0.24 0.05 0.00 500 -select_distinct 10.00 1.53 0.98 0.00 800 -select_group 51.00 1.49 0.67 0.00 2911 -select_group_when_MANY_tables 6.00 0.95 0.90 0.00 10000 -select_join 2.00 0.44 0.33 0.00 100 -select_key 138.00 75.48 21.52 0.00 200000 -select_key2 143.00 75.08 21.72 0.00 200000 -select_key2_return_key 136.00 72.18 19.55 0.00 200000 -select_key2_return_prim 140.00 73.57 20.03 0.00 200000 -select_key_prefix 144.00 76.03 21.36 0.00 200000 -select_key_prefix_join 11.00 3.47 2.55 0.00 100 -select_key_return_key 135.00 73.99 20.17 0.00 200000 -select_many_fields 25.00 7.16 10.10 0.00 2000 -select_query_cache 82.00 3.31 1.00 0.00 10000 -select_query_cache2 83.00 3.20 0.96 0.00 10000 -select_range 225.00 7.61 5.12 0.00 410 -select_range_key2 19.00 6.41 2.20 0.00 25010 -select_range_prefix 20.00 6.33 2.25 0.00 25010 -select_simple 1.00 0.33 0.77 0.00 10000 -select_simple_join 1.00 0.58 0.37 0.00 500 -update_big 25.00 0.00 0.00 0.00 10 -update_of_key 26.00 2.53 2.87 0.00 50000 -update_of_key_big 19.00 0.05 0.03 0.00 501 -update_of_primary_key_many_keys 23.00 0.02 0.03 0.00 256 -update_with_key 134.00 23.08 21.47 0.00 300000 -update_with_key_prefix 41.00 6.81 6.85 0.00 100000 -wisc_benchmark 4.00 1.59 0.88 0.00 114 -TOTALS 4439.00 789.18 378.53 0.00 2667247 +drop_table 0.00 0.00 0.01 0.00 28 +drop_table_when_MANY_tables 6.00 0.61 0.57 0.00 10000 +insert 131.00 23.35 22.54 0.00 350768 +insert_duplicates 39.00 6.17 6.65 0.00 100000 +insert_key 95.00 8.00 5.91 0.00 100000 +insert_many_fields 14.00 0.34 0.13 0.00 2000 +insert_select_1_key 5.00 0.00 0.00 0.00 1 +insert_select_2_keys 7.00 0.00 0.00 0.00 1 +min_max 22.00 0.02 0.01 0.00 60 +min_max_on_key 164.00 27.09 7.47 0.00 85000 +multiple_value_insert 8.00 1.89 0.06 0.00 100000 +order_by_big 47.00 17.25 20.19 0.00 10 +order_by_big_key 32.00 18.66 13.81 0.00 10 +order_by_big_key2 31.00 17.10 13.60 0.00 10 +order_by_big_key_desc 33.00 18.68 13.83 0.00 10 +order_by_big_key_diff 45.00 17.28 20.09 0.00 10 +order_by_big_key_prefix 30.00 16.96 13.61 0.00 10 +order_by_key2_diff 5.00 1.58 1.19 0.00 500 +order_by_key_prefix 2.00 0.94 0.59 0.00 500 +order_by_range 5.00 0.92 0.60 0.00 500 +outer_join 63.00 0.01 0.00 0.00 10 +outer_join_found 57.00 0.00 0.00 0.00 10 +outer_join_not_found 38.00 0.00 0.00 0.00 500 +outer_join_on_key 41.00 0.01 0.00 0.00 10 +select_1_row 3.00 0.28 0.85 0.00 10000 +select_2_rows 3.00 0.37 0.91 0.00 10000 +select_big 31.00 17.13 13.64 0.00 80 +select_big_str 19.00 7.79 6.10 0.00 10000 +select_column+column 3.00 0.31 0.71 0.00 10000 +select_diff_key 151.00 0.24 0.05 0.00 500 +select_distinct 11.00 1.54 0.97 0.00 800 +select_group 53.00 1.53 0.65 0.00 2911 +select_group_when_MANY_tables 7.00 0.99 0.95 0.00 10000 +select_join 2.00 0.48 0.33 0.00 100 +select_key 136.00 72.34 21.48 0.00 200000 +select_key2 140.00 71.17 20.98 0.00 200000 +select_key2_return_key 134.00 69.60 18.79 0.00 200000 +select_key2_return_prim 138.00 70.28 19.14 0.00 200000 +select_key_prefix 141.00 71.11 21.99 0.00 200000 +select_key_prefix_join 10.00 3.45 2.53 0.00 100 +select_key_return_key 132.00 70.93 19.96 0.00 200000 +select_many_fields 24.00 6.84 9.41 0.00 2000 +select_query_cache 82.00 3.53 0.98 0.00 10000 +select_query_cache2 84.00 3.50 1.01 0.00 10000 +select_range 230.00 7.50 5.11 0.00 410 +select_range_key2 19.00 6.21 2.20 0.00 25010 +select_range_prefix 19.00 6.24 2.16 0.00 25010 +select_simple 1.00 0.29 0.81 0.00 10000 +select_simple_join 2.00 0.58 0.37 0.00 500 +update_big 28.00 0.00 0.00 0.00 10 +update_of_key 24.00 2.35 2.65 0.00 50000 +update_of_key_big 21.00 0.05 0.03 0.00 501 +update_of_primary_key_many_keys 22.00 0.02 0.01 0.00 256 +update_with_key 129.00 20.61 19.68 0.00 300000 +update_with_key_prefix 37.00 5.70 5.82 0.00 100000 +wisc_benchmark 3.00 1.61 0.89 0.00 114 +TOTALS 4432.00 763.56 368.43 0.00 2667247 diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/alter-table-mysql-Linux_2.2.16_SMP_alpha index 712e2a72b04..40d0c158606 100644 --- a/sql-bench/Results/alter-table-mysql-Linux_2.2.16_SMP_alpha +++ b/sql-bench/Results/alter-table-mysql-Linux_2.2.16_SMP_alpha @@ -1,16 +1,16 @@ -Testing server 'MySQL 3.23.36' at 2001-03-26 1:22:58 +Testing server 'MySQL 3.23.39' at 2002-09-08 10:27:01 Testing of ALTER TABLE Testing with 1000 columns and 1000 rows in 20 steps Insert data into the table -Time for insert (1000) 0 wallclock secs ( 0.07 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for insert (1000) 0 wallclock secs ( 0.05 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for alter_table_add (992): 219 wallclock secs ( 0.16 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for alter_table_add (992): 187 wallclock secs ( 0.18 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Time for create_index (8): 4 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Time for drop_index (8): 4 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for alter_table_drop (496): 178 wallclock secs ( 0.06 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for alter_table_drop (496): 150 wallclock secs ( 0.05 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 405 wallclock secs ( 0.30 usr 0.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Total time: 345 wallclock secs ( 0.29 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/big-tables-mysql-Linux_2.2.16_SMP_alpha index 12b577bb50c..c9775e7ef88 100644 --- a/sql-bench/Results/big-tables-mysql-Linux_2.2.16_SMP_alpha +++ b/sql-bench/Results/big-tables-mysql-Linux_2.2.16_SMP_alpha @@ -1,19 +1,19 @@ -Testing server 'MySQL 3.23.36' at 2001-03-26 1:29:43 +Testing server 'MySQL 3.23.39' at 2002-09-08 10:32:47 Testing of some unusual tables All tests are done 1000 times with 1000 fields Testing table with 1000 fields Testing select * from table with 1 record -Time to select_many_fields(1000): 10 wallclock secs ( 3.55 usr 5.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to select_many_fields(1000): 10 wallclock secs ( 3.45 usr 4.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing select all_fields from table with 1 record -Time to select_many_fields(1000): 15 wallclock secs ( 3.61 usr 5.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to select_many_fields(1000): 14 wallclock secs ( 3.39 usr 4.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing insert VALUES() -Time to insert_many_fields(1000): 5 wallclock secs ( 0.30 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to insert_many_fields(1000): 5 wallclock secs ( 0.31 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing insert (all_fields) VALUES() -Time to insert_many_fields(1000): 9 wallclock secs ( 0.03 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to insert_many_fields(1000): 9 wallclock secs ( 0.03 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 40 wallclock secs ( 7.49 usr 10.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Total time: 38 wallclock secs ( 7.19 usr 9.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/connect-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/connect-mysql-Linux_2.2.16_SMP_alpha index 1a149f79087..c5ab74dce1b 100644 --- a/sql-bench/Results/connect-mysql-Linux_2.2.16_SMP_alpha +++ b/sql-bench/Results/connect-mysql-Linux_2.2.16_SMP_alpha @@ -1,30 +1,30 @@ -Testing server 'MySQL 3.23.36' at 2001-03-26 1:30:23 +Testing server 'MySQL 3.23.39' at 2002-09-08 10:33:26 Testing the speed of connecting to the server and sending of data All tests are done 10000 times Testing connection/disconnect -Time to connect (10000): 14 wallclock secs ( 7.60 usr 2.34 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to connect (10000): 14 wallclock secs ( 8.11 usr 2.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Test connect/simple select/disconnect -Time for connect+select_simple (10000): 16 wallclock secs ( 7.88 usr 3.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for connect+select_simple (10000): 16 wallclock secs ( 8.44 usr 2.99 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Test simple select -Time for select_simple (10000): 1 wallclock secs ( 0.33 usr 0.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_simple (10000): 1 wallclock secs ( 0.29 usr 0.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing connect/select 1 row from table/disconnect -Time to connect+select_1_row (10000): 17 wallclock secs ( 8.25 usr 3.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to connect+select_1_row (10000): 17 wallclock secs ( 8.45 usr 3.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing select 1 row from table -Time to select_1_row (10000): 3 wallclock secs ( 0.30 usr 0.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to select_1_row (10000): 3 wallclock secs ( 0.28 usr 0.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing select 2 rows from table -Time to select_2_rows (10000): 2 wallclock secs ( 0.32 usr 0.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to select_2_rows (10000): 3 wallclock secs ( 0.37 usr 0.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Test select with aritmetic (+) -Time for select_column+column (10000): 3 wallclock secs ( 0.31 usr 0.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_column+column (10000): 3 wallclock secs ( 0.31 usr 0.71 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing retrieval of big records (65000 bytes) -Time to select_big (10000): 20 wallclock secs ( 8.34 usr 6.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to select_big_str (10000): 19 wallclock secs ( 7.79 usr 6.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 76 wallclock secs (33.34 usr 18.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Total time: 76 wallclock secs (34.04 usr 17.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/create-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/create-mysql-Linux_2.2.16_SMP_alpha index d0e62c1c6d0..65f0e0f2f85 100644 --- a/sql-bench/Results/create-mysql-Linux_2.2.16_SMP_alpha +++ b/sql-bench/Results/create-mysql-Linux_2.2.16_SMP_alpha @@ -1,18 +1,18 @@ -Testing server 'MySQL 3.23.36' at 2001-03-26 1:31:40 +Testing server 'MySQL 3.23.39' at 2002-09-08 10:34:42 Testing the speed of creating and droping tables Testing with 10000 tables and 10000 loop count Testing create of tables -Time for create_MANY_tables (10000): 104 wallclock secs ( 1.76 usr 0.73 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for create_MANY_tables (10000): 183 wallclock secs ( 1.96 usr 0.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Accessing tables -Time to select_group_when_MANY_tables (10000): 6 wallclock secs ( 0.95 usr 0.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to select_group_when_MANY_tables (10000): 7 wallclock secs ( 0.99 usr 0.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing drop -Time for drop_table_when_MANY_tables (10000): 7 wallclock secs ( 0.64 usr 0.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for drop_table_when_MANY_tables (10000): 6 wallclock secs ( 0.61 usr 0.57 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing create+drop -Time for create+drop (10000): 13 wallclock secs ( 2.39 usr 1.35 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for create_key+drop (10000): 17 wallclock secs ( 4.00 usr 1.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 147 wallclock secs ( 9.75 usr 5.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for create+drop (10000): 12 wallclock secs ( 2.44 usr 1.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for create_key+drop (10000): 17 wallclock secs ( 4.03 usr 1.40 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Total time: 225 wallclock secs (10.03 usr 4.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/insert-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/insert-mysql-Linux_2.2.16_SMP_alpha index 20e67d0f929..b89fd2db681 100644 --- a/sql-bench/Results/insert-mysql-Linux_2.2.16_SMP_alpha +++ b/sql-bench/Results/insert-mysql-Linux_2.2.16_SMP_alpha @@ -1,4 +1,4 @@ -Testing server 'MySQL 3.23.36' at 2001-03-26 1:34:07 +Testing server 'MySQL 3.23.39' at 2002-09-08 10:38:28 Testing the speed of inserting data into 1 table and do some selects on it. The tests are done with a table that has 100000 rows. @@ -8,83 +8,83 @@ Creating tables Inserting 100000 rows in order Inserting 100000 rows in reverse order Inserting 100000 rows in random order -Time for insert (300000): 114 wallclock secs (20.61 usr 19.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for insert (300000): 110 wallclock secs (19.96 usr 19.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing insert of duplicates -Time for insert_duplicates (100000): 40 wallclock secs ( 5.91 usr 6.68 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for insert_duplicates (100000): 39 wallclock secs ( 6.17 usr 6.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Retrieving data from the table -Time for select_big (10:3000000): 31 wallclock secs (17.41 usr 13.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key (10:3000000): 32 wallclock secs (18.87 usr 13.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_desc (10:3000000): 33 wallclock secs (18.88 usr 13.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_prefix (10:3000000): 31 wallclock secs (17.49 usr 13.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key2 (10:3000000): 31 wallclock secs (17.40 usr 13.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big_key_diff (10:3000000): 45 wallclock secs (17.45 usr 20.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_big (10:3000000): 49 wallclock secs (17.41 usr 20.76 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_range (500:125750): 4 wallclock secs ( 0.95 usr 0.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key_prefix (500:125750): 3 wallclock secs ( 0.93 usr 0.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for order_by_key2_diff (500:250500): 4 wallclock secs ( 1.66 usr 1.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_diff_key (500:1000): 146 wallclock secs ( 0.24 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_prefix (5010:42084): 11 wallclock secs ( 2.76 usr 0.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (5010:42084): 11 wallclock secs ( 2.81 usr 0.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_prefix (200000): 144 wallclock secs (76.03 usr 21.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key (200000): 138 wallclock secs (75.48 usr 21.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key_return_key (200000): 135 wallclock secs (73.99 usr 20.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2 (200000): 143 wallclock secs (75.08 usr 21.72 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2_return_key (200000): 136 wallclock secs (72.18 usr 19.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_key2_return_prim (200000): 140 wallclock secs (73.57 usr 20.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_big (10:3000000): 31 wallclock secs (17.01 usr 13.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for order_by_big_key (10:3000000): 32 wallclock secs (18.66 usr 13.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for order_by_big_key_desc (10:3000000): 33 wallclock secs (18.68 usr 13.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for order_by_big_key_prefix (10:3000000): 30 wallclock secs (16.96 usr 13.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for order_by_big_key2 (10:3000000): 31 wallclock secs (17.10 usr 13.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for order_by_big_key_diff (10:3000000): 45 wallclock secs (17.28 usr 20.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for order_by_big (10:3000000): 47 wallclock secs (17.25 usr 20.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for order_by_range (500:125750): 5 wallclock secs ( 0.92 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for order_by_key_prefix (500:125750): 2 wallclock secs ( 0.94 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for order_by_key2_diff (500:250500): 5 wallclock secs ( 1.58 usr 1.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_diff_key (500:1000): 151 wallclock secs ( 0.24 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_range_prefix (5010:42084): 10 wallclock secs ( 2.65 usr 0.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_range_key2 (5010:42084): 11 wallclock secs ( 2.64 usr 0.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_key_prefix (200000): 141 wallclock secs (71.11 usr 21.99 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_key (200000): 136 wallclock secs (72.34 usr 21.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_key_return_key (200000): 132 wallclock secs (70.93 usr 19.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_key2 (200000): 140 wallclock secs (71.17 usr 20.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_key2_return_key (200000): 134 wallclock secs (69.60 usr 18.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_key2_return_prim (200000): 138 wallclock secs (70.28 usr 19.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Test of compares with simple ranges -Time for select_range_prefix (20000:43500): 9 wallclock secs ( 3.57 usr 1.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range_key2 (20000:43500): 8 wallclock secs ( 3.60 usr 1.29 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_group (111): 40 wallclock secs ( 0.05 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (15000): 9 wallclock secs ( 4.67 usr 1.41 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max (60): 22 wallclock secs ( 0.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (100): 36 wallclock secs ( 0.03 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count (100): 55 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_big (20): 55 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_range_prefix (20000:43500): 9 wallclock secs ( 3.59 usr 1.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_range_key2 (20000:43500): 8 wallclock secs ( 3.57 usr 1.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_group (111): 42 wallclock secs ( 0.05 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for min_max_on_key (15000): 9 wallclock secs ( 4.54 usr 1.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for min_max (60): 22 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_on_key (100): 37 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count (100): 50 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_distinct_big (20): 57 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing update of keys with functions -Time for update_of_key (50000): 26 wallclock secs ( 2.53 usr 2.87 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_of_key_big (501): 19 wallclock secs ( 0.05 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for update_of_key (50000): 24 wallclock secs ( 2.35 usr 2.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for update_of_key_big (501): 21 wallclock secs ( 0.05 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing update with key -Time for update_with_key (300000): 134 wallclock secs (23.08 usr 21.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for update_with_key_prefix (100000): 41 wallclock secs ( 6.81 usr 6.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for update_with_key (300000): 129 wallclock secs (20.61 usr 19.68 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for update_with_key_prefix (100000): 37 wallclock secs ( 5.70 usr 5.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing update of all rows -Time for update_big (10): 25 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for update_big (10): 28 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing left outer join -Time for outer_join_on_key (10:10): 45 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join (10:10): 67 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_found (10:10): 59 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for outer_join_not_found (500:10): 41 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for outer_join_on_key (10:10): 41 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for outer_join (10:10): 63 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for outer_join_found (10:10): 57 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for outer_join_not_found (500:10): 38 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing INSERT INTO ... SELECT -Time for insert_select_1_key (1): 6 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for insert_select_2_keys (1): 6 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for insert_select_1_key (1): 5 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for insert_select_2_keys (1): 7 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Time for drop table(2): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing delete -Time for delete_key (10000): 5 wallclock secs ( 0.64 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for delete_all (12): 10 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for delete_key (10000): 4 wallclock secs ( 0.59 usr 0.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for delete_all (12): 11 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Insert into table with 16 keys and with a primary key with 16 parts -Time for insert_key (100000): 97 wallclock secs ( 8.84 usr 6.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for insert_key (100000): 95 wallclock secs ( 8.00 usr 5.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing update of keys -Time for update_of_primary_key_many_keys (256): 23 wallclock secs ( 0.02 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for update_of_primary_key_many_keys (256): 22 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Deleting rows from the table -Time for delete_big_many_keys (128): 51 wallclock secs ( 0.03 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for delete_big_many_keys (128): 52 wallclock secs ( 0.01 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Deleting everything from table -Time for delete_all_many_keys (1): 51 wallclock secs ( 0.03 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for delete_all_many_keys (1): 52 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Inserting 100000 rows with multiple values -Time for multiple_value_insert (100000): 7 wallclock secs ( 1.91 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for multiple_value_insert (100000): 8 wallclock secs ( 1.89 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Time for drop table(1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 2318 wallclock secs (663.06 usr 307.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Total time: 2279 wallclock secs (634.62 usr 299.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/select-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/select-mysql-Linux_2.2.16_SMP_alpha index 1715d46f4a9..224278db66f 100644 --- a/sql-bench/Results/select-mysql-Linux_2.2.16_SMP_alpha +++ b/sql-bench/Results/select-mysql-Linux_2.2.16_SMP_alpha @@ -1,30 +1,30 @@ -Testing server 'MySQL 3.23.36' at 2001-03-26 2:12:47 +Testing server 'MySQL 3.23.39' at 2002-09-08 11:16:28 Testing the speed of selecting on keys that consist of many parts The test-table has 10000 rows and the test is done with 500 ranges. Creating table Inserting 10000 rows -Time to insert (10000): 4 wallclock secs ( 0.81 usr 0.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to insert (10000): 4 wallclock secs ( 0.71 usr 0.65 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Test if the database has a query cache -Time for select_query_cache (10000): 82 wallclock secs ( 3.31 usr 1.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_query_cache (10000): 82 wallclock secs ( 3.53 usr 0.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_query_cache2 (10000): 83 wallclock secs ( 3.20 usr 0.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_query_cache2 (10000): 84 wallclock secs ( 3.50 usr 1.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing big selects on the table -Time for select_big (70:17207): 1 wallclock secs ( 0.12 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for select_range (410:1057904): 225 wallclock secs ( 7.61 usr 5.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for min_max_on_key (70000): 155 wallclock secs (21.44 usr 6.55 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_on_key (50000): 355 wallclock secs (16.27 usr 4.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_big (70:17207): 0 wallclock secs ( 0.12 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for select_range (410:1057904): 230 wallclock secs ( 7.50 usr 5.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for min_max_on_key (70000): 155 wallclock secs (22.55 usr 6.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_on_key (50000): 349 wallclock secs (17.12 usr 4.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_group_on_key_parts (1000:100000): 42 wallclock secs ( 0.94 usr 0.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_group_on_key_parts (1000:100000): 38 wallclock secs ( 0.89 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Testing count(distinct) on the table -Time for count_distinct_key_prefix (1000:1000): 38 wallclock secs ( 0.39 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct (1000:1000): 48 wallclock secs ( 0.40 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_2 (1000:1000): 50 wallclock secs ( 0.42 usr 0.12 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group_on_key (1000:6000): 42 wallclock secs ( 0.42 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group_on_key_parts (1000:100000): 70 wallclock secs ( 0.97 usr 0.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_group (1000:100000): 69 wallclock secs ( 0.98 usr 0.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time for count_distinct_big (100:1000000): 82 wallclock secs ( 6.04 usr 7.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 1346 wallclock secs (63.34 usr 28.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_distinct_key_prefix (1000:1000): 41 wallclock secs ( 0.42 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_distinct (1000:1000): 51 wallclock secs ( 0.44 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_distinct_2 (1000:1000): 49 wallclock secs ( 0.41 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_distinct_group_on_key (1000:6000): 47 wallclock secs ( 0.45 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_distinct_group_on_key_parts (1000:100000): 75 wallclock secs ( 0.98 usr 0.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_distinct_group (1000:100000): 75 wallclock secs ( 0.97 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for count_distinct_big (100:1000000): 80 wallclock secs ( 6.08 usr 6.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Total time: 1360 wallclock secs (65.68 usr 27.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.2.16_SMP_alpha b/sql-bench/Results/wisconsin-mysql-Linux_2.2.16_SMP_alpha index c1b239520de..04133bca37b 100644 --- a/sql-bench/Results/wisconsin-mysql-Linux_2.2.16_SMP_alpha +++ b/sql-bench/Results/wisconsin-mysql-Linux_2.2.16_SMP_alpha @@ -1,14 +1,14 @@ -Testing server 'MySQL 3.23.36' at 2001-03-26 2:35:13 +Testing server 'MySQL 3.23.39' at 2002-09-08 11:39:09 Wisconsin benchmark test Time for create_table (3): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Inserting data -Time to insert (31000): 15 wallclock secs ( 2.39 usr 2.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Time to delete_big (1): 0 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to insert (31000): 14 wallclock secs ( 2.17 usr 2.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time to delete_big (1): 1 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) Running actual benchmark -Time for wisc_benchmark (114): 4 wallclock secs ( 1.59 usr 0.88 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Time for wisc_benchmark (114): 3 wallclock secs ( 1.61 usr 0.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU) -Total time: 19 wallclock secs ( 3.99 usr 3.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU) +Total time: 18 wallclock secs ( 3.78 usr 3.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU) diff --git a/sql/ha_berkeley.cc b/sql/ha_berkeley.cc index 32af39e4a0d..6907da855b9 100644 --- a/sql/ha_berkeley.cc +++ b/sql/ha_berkeley.cc @@ -351,7 +351,8 @@ berkeley_cmp_hidden_key(DB* file, const DBT *new_key, const DBT *saved_key) static int berkeley_cmp_packed_key(DB *file, const DBT *new_key, const DBT *saved_key) { - KEY *key= (KEY*) (file->app_private); + KEY *key= (new_key->app_private ? (KEY*) new_key->app_private : + (KEY*) (file->app_private)); char *new_key_ptr= (char*) new_key->data; char *saved_key_ptr=(char*) saved_key->data; KEY_PART_INFO *key_part= key->key_part, *end=key_part+key->key_parts; @@ -388,7 +389,8 @@ berkeley_cmp_packed_key(DB *file, const DBT *new_key, const DBT *saved_key) static int berkeley_cmp_fix_length_key(DB *file, const DBT *new_key, const DBT *saved_key) { - KEY *key=(KEY*) (file->app_private); + KEY *key= (new_key->app_private ? (KEY*) new_key->app_private : + (KEY*) (file->app_private)); char *new_key_ptr= (char*) new_key->data; char *saved_key_ptr=(char*) saved_key->data; KEY_PART_INFO *key_part= key->key_part, *end=key_part+key->key_parts; @@ -453,9 +455,11 @@ int ha_berkeley::open(const char *name, int mode, uint test_if_locked) if ((primary_key=table->primary_key) >= MAX_KEY) { // No primary key primary_key=table->keys; + key_used_on_scan=MAX_KEY; ref_length=hidden_primary_key=BDB_HIDDEN_PRIMARY_KEY_LENGTH; } - key_used_on_scan=primary_key; + else + key_used_on_scan=primary_key; /* Need some extra memory in case of packed keys */ uint max_key_length= table->max_key_length + MAX_REF_PARTS*3; @@ -728,9 +732,9 @@ DBT *ha_berkeley::create_key(DBT *key, uint keynr, char *buff, const byte *record, int key_length) { bzero((char*) key,sizeof(*key)); - if (hidden_primary_key && keynr == primary_key) { + /* We don't need to set app_private here */ key->data=current_ident; key->size=BDB_HIDDEN_PRIMARY_KEY_LENGTH; return key; @@ -742,6 +746,7 @@ DBT *ha_berkeley::create_key(DBT *key, uint keynr, char *buff, DBUG_ENTER("create_key"); key->data=buff; + key->app_private= key_info; for ( ; key_part != end && key_length > 0; key_part++) { if (key_part->null_bit) @@ -775,10 +780,11 @@ DBT *ha_berkeley::pack_key(DBT *key, uint keynr, char *buff, KEY *key_info=table->key_info+keynr; KEY_PART_INFO *key_part=key_info->key_part; KEY_PART_INFO *end=key_part+key_info->key_parts; - DBUG_ENTER("pack_key2"); + DBUG_ENTER("bdb:pack_key"); bzero((char*) key,sizeof(*key)); key->data=buff; + key->app_private= (void*) key_info; for (; key_part != end && (int) key_length > 0 ; key_part++) { @@ -1371,6 +1377,7 @@ int ha_berkeley::read_row(int error, char *buf, uint keynr, DBT *row, bzero((char*) &key,sizeof(key)); key.data=key_buff; key.size=row->size; + key.app_private= (void*) (table->key_info+primary_key); memcpy(key_buff,row->data,row->size); /* Read the data into current_row */ current_row.flags=DB_DBT_REALLOC; @@ -1535,6 +1542,7 @@ int ha_berkeley::rnd_next(byte *buf) DBT *ha_berkeley::get_pos(DBT *to, byte *pos) { + /* We don't need to set app_private here */ bzero((char*) to,sizeof(*to)); to->data=pos; @@ -1948,6 +1956,7 @@ longlong ha_berkeley::get_auto_increment() table->next_number_key_offset); /* Store for compare */ memcpy(old_key.data=key_buff2, key_buff, (old_key.size=last_key.size)); + old_key.app_private=(void*) key_info; error=1; { /* Modify the compare so that we will find the next key */ diff --git a/sql/ha_gemini.cc b/sql/ha_gemini.cc index c95a348f238..e80d9a001e6 100644 --- a/sql/ha_gemini.cc +++ b/sql/ha_gemini.cc @@ -1,5 +1,5 @@ -/* Copyright (C) 2000 NuSphere Corporation - +/* Copyright (C) 2000 MySQL AB & NuSphere Corporation + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or @@ -14,6 +14,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +/* This file is based on ha_berkeley.cc */ #ifdef __GNUC__ #pragma implementation // gcc: Class implementation diff --git a/sql/ha_gemini.h b/sql/ha_gemini.h index 495dc2fd1c9..3bfe85bfba2 100644 --- a/sql/ha_gemini.h +++ b/sql/ha_gemini.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 NuSphere Corporation +/* Copyright (C) 2000 MySQL AB & NuSphere Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by diff --git a/sql/ha_innobase.cc b/sql/ha_innobase.cc index 184c97837db..bab5dc582e7 100644 --- a/sql/ha_innobase.cc +++ b/sql/ha_innobase.cc @@ -2885,4 +2885,49 @@ ha_innobase::store_lock( return(to); } +/*********************************************************************** +Returns the next auto-increment column value for the table. write_row +normally fetches the value from the cache in the data dictionary. This +function in used by SHOW TABLE STATUS and when the first insert to the table +is done after database startup. */ + +longlong +ha_innobase::get_auto_increment() +/*=============================*/ + /* out: the next auto-increment column value */ +{ + row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt; + longlong nr; + int error; + + (void) extra(HA_EXTRA_KEYREAD); + index_init(table->next_number_index); + + /* We use an exclusive lock when we read the max key value from the + auto-increment column index. This is because then build_template will + advise InnoDB to fetch all columns. In SHOW TABLE STATUS the query + id of the auto-increment column is not changed, and previously InnoDB + did not fetch it, causing SHOW TABLE STATUS to show wrong values + for the autoinc column. */ + + prebuilt->select_lock_type = LOCK_X; + prebuilt->trx->mysql_n_tables_locked += 1; + + error=index_last(table->record[1]); + + if (error) { + nr = 1; + } else { + nr = (longlong) table->next_number_field-> + val_int_offset(table->rec_buff_length) + 1; + } + + (void) extra(HA_EXTRA_NO_KEYREAD); + + index_end(); + + return(nr); +} + + #endif /* HAVE_INNOBASE_DB */ diff --git a/sql/ha_innobase.h b/sql/ha_innobase.h index d832ac93d0f..4dbff654337 100644 --- a/sql/ha_innobase.h +++ b/sql/ha_innobase.h @@ -147,6 +147,7 @@ class ha_innobase: public handler THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to, enum thr_lock_type lock_type); + longlong get_auto_increment(); }; extern bool innodb_skip; diff --git a/sql/mysqld.cc b/sql/mysqld.cc index f328ee56727..6cf7c3fe762 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -272,6 +272,7 @@ ulong keybuff_size,sortbuff_size,max_item_sort_length,table_cache_size, net_interactive_timeout, slow_launch_time = 2L, net_read_timeout,net_write_timeout,slave_open_temp_tables=0, open_files_limit=0, max_binlog_size; +ulong slave_net_timeout; ulong thread_cache_size=0, binlog_cache_size=0, max_binlog_cache_size=0; volatile ulong cached_thread_count=0; @@ -2782,6 +2783,8 @@ CHANGEABLE_VAR changeable_vars[] = { 0, MALLOC_OVERHEAD, (long) ~0, MALLOC_OVERHEAD, IO_SIZE }, { "record_buffer", (long*) &my_default_record_cache_size, 128*1024L, IO_SIZE*2+MALLOC_OVERHEAD, ~0L, MALLOC_OVERHEAD, IO_SIZE }, + { "slave_net_timeout", (long*) &slave_net_timeout, + SLAVE_NET_TIMEOUT, 1, 65535, 0, 1 }, { "slow_launch_time", (long*) &slow_launch_time, 2L, 0L, ~0L, 0, 1 }, { "sort_buffer", (long*) &sortbuff_size, @@ -2903,6 +2906,7 @@ struct show_var_st init_vars[]= { {"query_buffer_size", (char*) &query_buff_size, SHOW_LONG}, {"safe_show_database", (char*) &opt_safe_show_db, SHOW_BOOL}, {"server_id", (char*) &server_id, SHOW_LONG}, + {"slave_net_timeout", (char*) &slave_net_timeout, SHOW_LONG}, {"skip_locking", (char*) &my_disable_locking, SHOW_MY_BOOL}, {"skip_networking", (char*) &opt_disable_networking, SHOW_BOOL}, {"skip_show_database", (char*) &opt_skip_show_db, SHOW_BOOL}, @@ -3601,6 +3605,7 @@ static void get_options(int argc,char **argv) break; case OPT_LOW_PRIORITY_UPDATES: thd_startup_options|=OPTION_LOW_PRIORITY_UPDATES; + thr_upgraded_concurrent_insert_lock= TL_WRITE_LOW_PRIORITY; low_priority_updates=1; break; case OPT_BOOTSTRAP: diff --git a/sql/slave.cc b/sql/slave.cc index 488fb357c52..a00809b6994 100644 --- a/sql/slave.cc +++ b/sql/slave.cc @@ -735,6 +735,7 @@ static int init_slave_thread(THD* thd) thd->system_thread = thd->bootstrap = 1; thd->client_capabilities = 0; my_net_init(&thd->net, 0); + thd->net.timeout = slave_net_timeout; thd->max_packet_length=thd->net.max_packet; thd->master_access= ~0; thd->priv_user = 0; @@ -1330,6 +1331,8 @@ pthread_handler_decl(handle_slave,arg __attribute__((unused))) thd->thread_stack = (char*)&thd; // remember where our stack is thd->temporary_tables = save_temporary_tables; // restore temp tables threads.append(thd); + glob_mi.pending = 0; //this should always be set to 0 when the slave thread + // is started DBUG_PRINT("info",("master info: log_file_name=%s, position=%s", glob_mi.log_file_name, llstr(glob_mi.pos,llbuff))); diff --git a/sql/slave.h b/sql/slave.h index 8e49511e08d..6a92c16f191 100644 --- a/sql/slave.h +++ b/sql/slave.h @@ -3,6 +3,10 @@ #include "mysql.h" +#define SLAVE_NET_TIMEOUT 3600 + +extern ulong slave_net_timeout; + typedef struct st_master_info { char log_file_name[FN_REFLEN]; diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index 0f3ee483400..0cca3df0b16 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -1824,10 +1824,9 @@ int mysql_grant (THD *thd, const char *db, List <LEX_USER> &list, uint rights, *Str, (!db ? rights : 0), what))) result= -1; - if (db) - if (( replace_db_table(tables[1].table, db, *Str, rights, - what))) - result= -1; + if (db && replace_db_table(tables[1].table, db, *Str, rights & DB_ACLS, + what)) + result= -1; } VOID(pthread_mutex_unlock(&acl_cache->lock)); pthread_mutex_unlock(&LOCK_grant); diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index c2ac8c05b85..d14201822e0 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -178,12 +178,13 @@ int mysql_delete(THD *thd, select=make_select(table,0,0,conds,&error); if (error) DBUG_RETURN(-1); - if (select && select->check_quick(test(thd->options & SQL_SAFE_UPDATES), - limit)) + if ((select && select->check_quick(test(thd->options & SQL_SAFE_UPDATES), + limit)) || + !limit) { delete select; send_ok(&thd->net,0L); - DBUG_RETURN(0); + DBUG_RETURN(0); // Nothing to delete } /* If running in safe sql mode, don't allow updates without keys */ diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc index 19dc239c050..ea60716dcf2 100644 --- a/sql/sql_insert.cc +++ b/sql/sql_insert.cc @@ -871,6 +871,7 @@ static pthread_handler_decl(handle_delayed_insert,arg) /* Add thread to THD list so that's it's visible in 'show processlist' */ pthread_mutex_lock(&LOCK_thread_count); thd->thread_id=thread_id++; + thd->end_time(); threads.append(thd); pthread_mutex_unlock(&LOCK_thread_count); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 18774955f6a..981e64e5de5 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -556,7 +556,7 @@ pthread_handler_decl(handle_one_connection,arg) free_root(&thd->mem_root,MYF(0)); if (net->error && net->vio != 0) { - if (!thd->killed && ! opt_warnings) + if (!thd->killed && opt_warnings) sql_print_error(ER(ER_NEW_ABORTING_CONNECTION), thd->thread_id,(thd->db ? thd->db : "unconnected"), thd->user ? thd->user : "unauthenticated", diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 4ed59f7d1b0..34e8985007e 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -599,7 +599,7 @@ mysqld_show_logs(THD *thd) DBUG_RETURN(1); #ifdef HAVE_BERKELEY_DB - if (berkeley_show_logs(thd)) + if (!berkeley_skip && berkeley_show_logs(thd)) DBUG_RETURN(-1); #endif diff --git a/sql/sql_update.cc b/sql/sql_update.cc index a6ded7cef9c..609c2642bc6 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -114,7 +114,8 @@ int mysql_update(THD *thd, select=make_select(table,0,0,conds,&error); if (error || (select && select->check_quick(test(thd->options & SQL_SAFE_UPDATES), - limit))) + limit)) || + !limit) { delete select; table->time_stamp=save_time_stamp; // Restore timestamp pointer diff --git a/support-files/debian/README.debian b/support-files/debian/README.debian index aa6dbaac12e..9a990585854 100644 --- a/support-files/debian/README.debian +++ b/support-files/debian/README.debian @@ -18,6 +18,15 @@ Comments regarding the Package mysql-server-debug: --with-debug flag. mysqld only. (/usr/sbin/mysqld-debug) +* about MySQL-Max packages: + + mysql-max : + this is static linked MySQL-Max server only. (/usr/sbin/mysqld-max-static). + mysql-max-shared: + this is dynamic linked MySQL server only. (/usr/sbin/mysqld-max-shared) + mysql-max-debug: + --with-debug flag. mysqld only. (/usr/sbin/mysqld-max-debug) + * about charset I build MySQL server --with-extra-charsets=all diff --git a/support-files/debian/changelog b/support-files/debian/changelog index ee32ceb4e74..e52589d7025 100644 --- a/support-files/debian/changelog +++ b/support-files/debian/changelog @@ -1,12 +1,145 @@ -mysql (3.23.23-1potato.2) unstable; urgency=low +mysql (3.23.39-1) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Sat, 12 May 2001 05:07:35 +0900 + +mysql (3.23.38-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Sat, 12 May 2001 05:07:35 +0900 + +mysql (3.23.37-1potato.2) unstable; urgency=low + + * new + * add mysql-max multi packages. + + -- takeshi <takeshi@softagency.co.jp> Thr, 26 Apr 2001 05:07:35 +0900 + +mysql (3.23.37-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Thr, 26 Apr 2001 05:07:35 +0900 + +mysql (3.23.36-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Thr, 29 Mar 2001 05:07:35 +0900 + +mysql (3.23.35-1potato.1) unstable; urgency=low + + * sql fix patch + + -- takeshi <takeshi@softagency.co.jp> Thr, 22 Mar 2001 05:07:35 +0900 + +mysql (3.23.35-1potato) unstable; urgency=low + + * new + * --with-innobase + + -- takeshi <takeshi@softagency.co.jp> Sat, 17 Mar 2001 05:07:35 +0900 + +mysql (3.23.34a-1potato) unstable; urgency=low + + * new + * --with-innobase + + -- takeshi <takeshi@softagency.co.jp> Wed, 14 Mar 2001 05:07:35 +0900 + +mysql (3.23.33-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Tue, 13 Feb 2001 05:07:35 +0900 + +mysql (3.23.32-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Tue, 23 Jan 2001 05:07:35 +0900 + +mysql (3.23.31-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Fri, 19 Jan 2001 05:07:35 +0900 + +mysql (3.23.30-gamma-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Sat, 6 Jan 2001 05:07:35 +0900 + +mysql (3.23.29a-gamma-1potato.3) unstable; urgency=low + + * server:/usr/sbin/{mysql_config, mysqltest} -> client:/usr/bin/ + * server:/usr/bin/my_print_defaults -> client:/usr/bin/ + * /usr/mysql-test -> mysql-bench /var/mysql/mysql-test + + -- takeshi <takeshi@softagency.co.jp> Fri, 29 Dec 2000 05:07:35 +0900 + +mysql (3.23.29a-gamma-1potato.2) unstable; urgency=low + + * /usr/mysql-test -> mysql-bench /var/mysql/mysql-test + + -- takeshi <takeshi@softagency.co.jp> Sun, 17 Dec 2000 05:07:35 +0900 + +mysql (3.23.29a-gamma-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Sun, 17 Dec 2000 05:07:35 +0900 + +mysql (3.23.28-gamma-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Fri, 24 Nov 2000 05:07:35 +0900 + +mysql (3.23.27-beta-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Fri, 28 Oct 2000 05:07:35 +0900 + +mysql (3.23.26-beta-1potato) unstable; urgency=low + + * new + + -- takeshi <takeshi@softagency.co.jp> Sun, 22 Oct 2000 05:07:35 +0900 + +mysql (3.23.25-beta-1potato) unstable; urgency=low + + * new , libmysqlclient10 + * change debian/control file. remove Provides keyword + + -- takeshi <takeshi@softagency.co.jp> Fri, 29 Sep 2000 05:07:35 +0900 + +mysql (3.23.24-1potato.2) unstable; urgency=low + + * fix debian/control file + * move patch into debian/patches/ + if you want to make new patch, + write patch file and put it into debian/patches/. + debian/rules do patch debian/patches/* automatically. + * change debian/rules , debian/move + * back mysql_resolveip -> resolveip , mysql_perror -> perror + + -- takeshi <takeshi@softagency.co.jp> Thr, 14 Sep 2000 05:07:35 +0900 + +mysql (3.23.24-1potato) unstable; urgency=low * move patch into debian/patches/ if you want to make new patch, write patch file and put it into debian/patches/. debian/rules do patch debian/patches/* automatically. * change debian/rules , debian/move + * back mysql_resolveip -> resolveip , mysql_perror -> perror - -- takeshi <takeshi@softagency.co.jp> Tue, 5 Sep 2000 05:07:35 +0900 + -- takeshi <takeshi@softagency.co.jp> Sat, 9 Sep 2000 05:07:35 +0900 mysql (3.23.23-1potato) unstable; urgency=low diff --git a/support-files/debian/control b/support-files/debian/control index acd83518412..3ccc1d097c8 100644 --- a/support-files/debian/control +++ b/support-files/debian/control @@ -11,38 +11,44 @@ Description: mysql Package: mysql-doc Architecture: all +Section: doc +Priority: extra +Replaces: mysql-gpl-doc Description: mysql Documentation (html) MySQL Doc. -Package: libmysqlclient9 +Package: libmysqlclient10 Architecture: any -Provides: libmysqlclient9 -Description: libmysqlclient.so.9 - libmysqlclient.so.9 +Section: libs +Priority: extra +Description: libmysqlclient.so.10 + libmysqlclient.so.10 Package: mysql-client Architecture: any Depends: ${shlibs:Depends} -Section: devel +Section: misc Priority: extra Conflicts: mysql-client-ujis, mysql-client-sjis -Replaces: mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-client-ujis, mysql-client-sjis -Provides: mysql-client +Replaces: mysql-gpl-client, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-client-ujis, mysql-client-sjis Description: mysql clients. MySQL clients programs. Package: mysql-server Architecture: any +Section: misc +Priority: extra Depends: ${shlibs:Depends} Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) -Provides: mysql-server +Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0), mysql-common Description: MySQL server (static linked) MySQL server. static linked. Package: mysql-server-shared Architecture: any -Depends: ${shlibs:Depends} +Section: misc +Priority: extra +Depends: mysql-server, ${shlibs:Depends} Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) Description: MySQL server (dynamic linked) @@ -50,22 +56,57 @@ Description: MySQL server (dynamic linked) Package: mysql-server-debug Architecture: any -Depends: ${shlibs:Depends} +Section: misc +Priority: extra +Depends: mysql-server, ${shlibs:Depends} Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) Description: MySQL server debug MySQL server. debug +Package: mysql-max +Architecture: any +Section: misc +Priority: extra +Depends: mysql-server +Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) +Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) +Description: MySQL-MAX server (static linked) + MySQL-Max server. (static linked) + +Package: mysql-max-shared +Architecture: any +Section: misc +Priority: extra +Depends: mysql-server, ${shlibs:Depends} +Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) +Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) +Description: MySQL-MAX server (shared linked) + MySQL-Max server. (shared linked) + +Package: mysql-max-debug +Architecture: any +Section: misc +Priority: extra +Depends: mysql-server, ${shlibs:Depends} +Conflicts: mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) +Replaces: mysql-server-sjis, mysql-base (<< 3.22.11), mysql-base-ujis (<< 3.22.11), mysql-base-sjis (<< 3.22.11), mysql-server-sjis, mysql-server-ujis, mysql-server (<< 3.23.0) +Description: MySQL-MAX server (with debug shared linked) + MySQL-Max server. (with debug and shared linked) + Package: mysql-dev Architecture: any +Section: devel +Priority: extra Depends: ${shlibs:Depends} Conflicts: mysql-dev-sjis, mysql-dev-ujis -Replaces: mysql-dev-sjis, mysql-dev-ujis, libmysqlclient6-ujis, libmysqlclient6-sjis -Provides: mysql-dev +Replaces: mysql-devel, libmysqlclient10-dev, libmysqlclient9-dev, libmysqlclient6-dev, mysql-gpl-dev, mysql-dev-sjis, mysql-dev-ujis, libmysqlclient6-ujis, libmysqlclient6-sjis Description: MySQL develop suite MySQL develop. Package: mysql-bench Architecture: all +Section: misc +Priority: extra Description: mysql benchmark suite. MySQL sql-bench files. diff --git a/support-files/debian/gomi b/support-files/debian/gomi index 29afaf50a18..4c9460578be 100644 --- a/support-files/debian/gomi +++ b/support-files/debian/gomi @@ -1,14 +1,15 @@ Docs/Makefile -strings/Makefile dbug/Makefile -mysys/Makefile extra/Makefile -regex/Makefile -isam/Makefile heap/Makefile +isam/Makefile merge/Makefile +mysys/Makefile +readline/Makefile +regex/Makefile sql/Makefile sql/share/Makefile +strings/Makefile support-files/binary-configure support-files/my-example.cnf support-files/mysql-log-rotate diff --git a/support-files/debian/libmysqlclient10.dirs b/support-files/debian/libmysqlclient10.dirs new file mode 100644 index 00000000000..68457717bd8 --- /dev/null +++ b/support-files/debian/libmysqlclient10.dirs @@ -0,0 +1 @@ +usr/lib diff --git a/support-files/debian/libmysqlclient10.postinst b/support-files/debian/libmysqlclient10.postinst new file mode 100644 index 00000000000..2d1871b1df6 --- /dev/null +++ b/support-files/debian/libmysqlclient10.postinst @@ -0,0 +1,3 @@ +#!/bin/sh + +ldconfig diff --git a/support-files/debian/move b/support-files/debian/move index e134c055fe9..36f250fcfb3 100644 --- a/support-files/debian/move +++ b/support-files/debian/move @@ -7,7 +7,7 @@ if [ -e $STAMPFILE ]; then fi #---------- -CLIENT1="msql2mysql mysql mysql_convert_table_format mysql_find_rows mysql_fix_privilege_tables mysql_setpermission mysql_zap mysqlaccess mysqladmin mysqlbug mysqldump mysqlhotcopy mysqlimport mysqlshow" +CLIENT1="msql2mysql mysql mysql_convert_table_format mysql_find_rows mysql_fix_privilege_tables mysql_setpermission mysql_zap mysqlaccess mysqladmin mysqlbug mysqldump mysqlhotcopy mysqlimport mysqlshow mysql_config mysqltest my_print_defaults" # CLIENT2="add_file_priv add_func_table add_long_password make_binary_distribution" @@ -20,7 +20,7 @@ for CHAR in build do #----- cp -Rpd debian/${CHAR}/usr debian/mysql-server/ - cp -Rpd debian/${CHAR}-shared/usr/lib/mysql/libmysqlclient.so.* debian/libmysqlclient9/usr/lib/ + cp -Rpd debian/${CHAR}-shared/usr/lib/mysql/libmysqlclient.so.* debian/libmysqlclient10/usr/lib/ #----- mysql-server-shared --- cp -Rpd debian/${CHAR}-shared/usr/sbin/mysqld debian/mysql-server-shared/usr/sbin/mysqld-shared @@ -31,20 +31,28 @@ do #----- mysql-server --- mv debian/mysql-server/usr/sbin/mysqld debian/mysql-server/usr/sbin/mysqld-static + #----- mysql-max-shared --- + cp -Rpd debian/${CHAR}-max-shared/usr/sbin/mysqld debian/mysql-max-shared/usr/sbin/mysqld-max-shared + + #----- mysql-max-debug --- + cp -Rpd debian/${CHAR}-max-debug/usr/sbin/mysqld debian/mysql-max-debug/usr/sbin/mysqld-max-debug + + #----- mysql-max --- + mv debian/${CHAR}-max/usr/sbin/mysqld debian/mysql-max/usr/sbin/mysqld-max-static + #----- mysql-client ---- cd ${P}/debian/mysql-server/usr/bin/ && mv $CLIENT1 ../../../mysql-client/usr/bin/ cd ${P} mv -f debian/mysql-server/usr/{man,info} debian/mysql-client/usr/share/ - mv debian/mysql-server/usr/share/mysql/my-example.cnf debian/mysql-client/usr/share/mysql/ +# mv debian/mysql-server/usr/share/mysql/my-*.cnf debian/mysql-client/usr/share/mysql/ mv -f debian/mysql-server/usr/bin/replace debian/mysql-client/usr/bin/mysql_replace #----- mysql-server --- mv debian/mysql-server/usr/bin/* debian/mysql-server/usr/sbin/ - mv debian/mysql-server/usr/sbin/my_print_defaults debian/mysql-server/usr/bin/ mv debian/mysql-server/usr/sbin/comp_err debian/mysql-server/usr/bin/ - mv debian/mysql-server/usr/sbin/perror debian/mysql-server/usr/bin/mysql_perror - mv debian/mysql-server/usr/sbin/resolveip debian/mysql-server/usr/bin/mysql_resolveip + mv debian/mysql-server/usr/sbin/perror debian/mysql-server/usr/bin/ + mv debian/mysql-server/usr/sbin/resolveip debian/mysql-server/usr/bin/ #----- mysql-dev ---- cp -Rpd debian/${CHAR}-shared/usr/lib/mysql/libmysqlclient.so debian/mysql-dev/usr/lib/ @@ -67,6 +75,7 @@ cp -r COPYING* MIRRORS README* Docs/* debian/mysql-doc/usr/share/doc/mysql/ #### sql-bench mv debian/mysql-server/usr/sql-bench \ + debian/mysql-server/usr/mysql-test \ debian/mysql-bench/var/mysql/ touch $STAMPFILE diff --git a/support-files/debian/mysql-max-debug.dirs b/support-files/debian/mysql-max-debug.dirs new file mode 100644 index 00000000000..236670a2d0f --- /dev/null +++ b/support-files/debian/mysql-max-debug.dirs @@ -0,0 +1 @@ +usr/sbin diff --git a/support-files/debian/mysql-max-debug.postinst b/support-files/debian/mysql-max-debug.postinst new file mode 100644 index 00000000000..e9d8b628c2e --- /dev/null +++ b/support-files/debian/mysql-max-debug.postinst @@ -0,0 +1,3 @@ +#!/bin/sh + +update-alternatives --install /usr/sbin/mysqld mysqld /usr/sbin/mysqld-max-debug 40 diff --git a/support-files/debian/mysql-max-debug.postrm b/support-files/debian/mysql-max-debug.postrm new file mode 100644 index 00000000000..25c7aadf494 --- /dev/null +++ b/support-files/debian/mysql-max-debug.postrm @@ -0,0 +1,3 @@ +#!/bin/sh + +update-alternatives --auto mysqld diff --git a/support-files/debian/mysql-max-shared.dirs b/support-files/debian/mysql-max-shared.dirs new file mode 100644 index 00000000000..236670a2d0f --- /dev/null +++ b/support-files/debian/mysql-max-shared.dirs @@ -0,0 +1 @@ +usr/sbin diff --git a/support-files/debian/mysql-max-shared.postinst b/support-files/debian/mysql-max-shared.postinst new file mode 100644 index 00000000000..d47d85c73eb --- /dev/null +++ b/support-files/debian/mysql-max-shared.postinst @@ -0,0 +1,3 @@ +#!/bin/sh + +update-alternatives --install /usr/sbin/mysqld mysqld /usr/sbin/mysqld-max-shared 35 diff --git a/support-files/debian/mysql-max-shared.postrm b/support-files/debian/mysql-max-shared.postrm new file mode 100644 index 00000000000..25c7aadf494 --- /dev/null +++ b/support-files/debian/mysql-max-shared.postrm @@ -0,0 +1,3 @@ +#!/bin/sh + +update-alternatives --auto mysqld diff --git a/support-files/debian/mysql-max.dirs b/support-files/debian/mysql-max.dirs new file mode 100644 index 00000000000..236670a2d0f --- /dev/null +++ b/support-files/debian/mysql-max.dirs @@ -0,0 +1 @@ +usr/sbin diff --git a/support-files/debian/mysql-max.postinst b/support-files/debian/mysql-max.postinst new file mode 100644 index 00000000000..a65ccd5b6c7 --- /dev/null +++ b/support-files/debian/mysql-max.postinst @@ -0,0 +1,3 @@ +#!/bin/sh + +update-alternatives --install /usr/sbin/mysqld mysqld /usr/sbin/mysqld-max-static 30 diff --git a/support-files/debian/mysql-max.postrm b/support-files/debian/mysql-max.postrm new file mode 100644 index 00000000000..25c7aadf494 --- /dev/null +++ b/support-files/debian/mysql-max.postrm @@ -0,0 +1,3 @@ +#!/bin/sh + +update-alternatives --auto mysqld diff --git a/support-files/debian/patches/ab b/support-files/debian/patches/ab index ed6ca58f729..e169ee38188 100644 --- a/support-files/debian/patches/ab +++ b/support-files/debian/patches/ab @@ -1,20 +1,11 @@ ---- mysql-3.23.23.orig/scripts/Makefile.in -+++ mysql-3.23.23/scripts/Makefile.in -@@ -337,6 +337,7 @@ - @RM@ -f $@ $@-t - @SED@ \ - -e 's!@''bindir''@!$(bindir)!g' \ -+ -e 's!@''sbindir''@!$(sbindir)!g' \ - -e 's!@''scriptdir''@!$(bindir)!g' \ - -e 's!@''prefix''@!$(prefix)!g' \ - -e 's!@''datadir''@!$(datadir)!g' \ ---- mysql-3.23.23.orig/support-files/Makefile.in -+++ mysql-3.23.23/support-files/Makefile.in -@@ -308,6 +308,7 @@ - @RM@ -f $@ $@-t - @SED@ \ - -e 's!@''bindir''@!$(bindir)!g' \ -+ -e 's!@''sbindir''@!$(sbindir)!g' \ - -e 's!@''scriptdir''@!$(bindir)!g' \ - -e 's!@''prefix''@!$(prefix)!g' \ - -e 's!@''datadir''@!$(datadir)!g' \ +--- mysql-3.23.34a/sql/Makefile.in.orig Mon Mar 12 08:27:39 2001 ++++ mysql-3.23.34a/sql/Makefile.in Thu Mar 15 04:11:14 2001 +@@ -373,7 +373,7 @@ + + mysqlbinlog: $(mysqlbinlog_OBJECTS) $(mysqlbinlog_DEPENDENCIES) + @rm -f mysqlbinlog +- $(CXXLINK) $(mysqlbinlog_LDFLAGS) $(mysqlbinlog_OBJECTS) $(mysqlbinlog_LDADD) $(LIBS) ++ $(CXXLINK) $(mysqld_LDFLAGS) $(mysqlbinlog_OBJECTS) $(mysqld_LDADD) $(LIBS) + + mysqld: $(mysqld_OBJECTS) $(mysqld_DEPENDENCIES) + @rm -f mysqld diff --git a/support-files/debian/patches/ad b/support-files/debian/patches/ad index a90cf669ff6..25394116ad9 100644 --- a/support-files/debian/patches/ad +++ b/support-files/debian/patches/ad @@ -1,52 +1,11 @@ ---- mysql-3.23.23.orig/scripts/mysql_install_db.sh -+++ mysql-3.23.23/scripts/mysql_install_db.sh -@@ -11,6 +11,7 @@ - ldata=@localstatedir@ - execdir=@libexecdir@ - bindir=@bindir@ -+sbindir=@sbindir@ - force=0 - IN_RPM=0 - defaults= -@@ -47,6 +48,10 @@ +--- mysql-3.23.34a/scripts/mysql_install_db.sh.orig Mon Mar 12 08:18:27 2001 ++++ mysql-3.23.34a/scripts/mysql_install_db.sh Thu Mar 15 04:12:28 2001 +@@ -325,7 +325,7 @@ + if test "$IN_RPM" -eq 0 then - bindir=`grep "^bindir" $conf | sed 's;^[^=]*=[ \t]*;;' | sed 's;[ \t]$;;'` - fi -+ if grep "^sbindir" $conf >/dev/null -+ then -+ sbindir=`grep "^sbindir" $conf | sed '.*=[ \t]*//` -+ fi - if grep "^user" $conf >/dev/null - then - user=`grep "^user" $conf | sed 's;^[^=]*=[ \t]*;;' | sed 's;[ \t]$;;'` -@@ -56,7 +61,7 @@ - for arg - do - case "$arg" in -- --basedir=*) basedir=`echo "$arg"|sed 's;^--basedir=;;'`; bindir="$basedir/bin"; execdir="$basedir/libexec" ;; -+ --basedir=*) basedir=`echo "$arg"|sed 's;^--basedir=;;'`; bindir="$basedir/bin"; sbindir="$basedir/sbin"; execdir="$basedir/libexec" ;; - --datadir=*) ldata=`echo "$arg"|sed 's;^--datadir=;;'` ;; - --user=*) user=`echo "$arg"|sed 's;^--user=;;'` ;; - esac -@@ -82,10 +87,10 @@ - # Check if hostname is valid - if test "$IN_RPM" -eq 0 -a $force -eq 0 - then -- resolved=`$bindir/resolveip $hostname 2>&1` -+ resolved=`$bindir/mysql_resolveip $hostname 2>&1` - if [ $? -ne 0 ] - then -- resolved=`$bindir/resolveip localhost 2>&1` -+ resolved=`$bindir/mysql_resolveip localhost 2>&1` - if [ $? -eq 0 ] - then - echo "Sorry, the host '$hostname' could not be looked up." -@@ -300,7 +305,7 @@ - if test -z "$IN_RPM" - then - echo "You can start the MySQL demon with:" + echo "You can start the MySQL daemon with:" - echo "cd @prefix@ ; $bindir/safe_mysqld &" + echo "cd @prefix@ ; $sbindir/safe_mysqld &" echo - echo "You can test the MySQL demon with the benchmarks in the 'sql-bench' directory:" + echo "You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:" echo "cd sql-bench ; run-all-tests" diff --git a/support-files/debian/patches/ae b/support-files/debian/patches/ae index d6ccdcfaaf0..7ea5733147f 100644 --- a/support-files/debian/patches/ae +++ b/support-files/debian/patches/ae @@ -1,25 +1,17 @@ ---- mysql-3.23.23.orig/support-files/mysql.server.sh Tue Sep 5 19:13:35 2000 -+++ mysql-3.23.23/support-files/mysql.server.sh Tue Sep 5 19:19:40 2000 -@@ -16,6 +16,7 @@ - PATH=/sbin:/usr/sbin:/bin:/usr/bin - basedir=@prefix@ - bindir=@bindir@ -+sbindir=@sbindir@ - datadir=@localstatedir@ - pid_file=@localstatedir@/mysqld.pid - log_file=@localstatedir@/mysqld.log -@@ -64,6 +65,10 @@ - then - bindir=`grep "^bindir" $conf | cut -f 2 -d= | tr -d ' '` - fi -+ if grep "^sbindir" $conf >/dev/null -+ then -+ sbindir=`grep "^sbindir" $conf | cut -f 2 -d= | tr -d ' '` -+ fi - if grep "^log[ \t]*=" $conf >/dev/null - then - log_file=`grep "log[ \t]*=" $conf | cut -f 2 -d= | tr -d ' '` -@@ -78,14 +83,15 @@ +--- mysql-3.23.30-gamma/support-files/mysql.server.sh.orig Thu Jan 4 11:03:57 2001 ++++ mysql-3.23.30-gamma/support-files/mysql.server.sh Sat Jan 6 12:18:50 2001 +@@ -28,8 +28,10 @@ + then + basedir=@prefix@ + bindir=@bindir@ ++ sbindir=@sbindir@ + else + bindir="$basedir/bin" ++ sbindir="$basedir/sbin" + fi + if test -z "$pid_file" + then +@@ -100,18 +102,18 @@ 'start') # Start daemon @@ -28,11 +20,13 @@ then # Give extra arguments to mysqld with the my.cnf file. This script may # be overwritten at next upgrade. -- $bindir/safe_mysqld \ -- --user=$mysql_daemon_user --datadir=$datadir --pid-file=$pid_file --log=$log_file & -+ $sbindir/safe_mysqld \ -+ --user=$mysql_daemon_user --datadir=$datadir --pid-file=$pid_file & -+# --log=$log_file & +- $bindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file & ++ $sbindir/safe_mysqld --datadir=$datadir --pid-file=$pid_file & + # Make lock for RedHat / SuSE + if test -w /var/lock/subsys + then + touch /var/lock/subsys/mysql + fi else - echo "Can't execute $bindir/safe_mysqld" + echo "Can't execute $sbindir/safe_mysqld" diff --git a/support-files/debian/patches/ta b/support-files/debian/patches/ta new file mode 100644 index 00000000000..b27259f4473 --- /dev/null +++ b/support-files/debian/patches/ta @@ -0,0 +1,68 @@ +--- mysql-3.23.34a/mysql-test/install_test_db.sh.orig Mon Mar 12 08:18:24 2001 ++++ mysql-3.23.34a/mysql-test/install_test_db.sh Thu Mar 15 04:11:14 2001 +@@ -5,6 +5,15 @@ + # This scripts creates the privilege tables db, host, user, tables_priv, + # columns_priv in the mysql database, as well as the func table. + ++if [ x$1 = x"-debian" ]; then ++ DEBIAN=1 ++ shift 1 ++ execdir=/usr/sbin ++ bindir=/usr/bin ++ BINARY_DIST=1 ++ fix_bin=/var/mysql/mysql-test ++else ++ + if [ x$1 = x"-bin" ]; then + shift 1 + execdir=../bin +@@ -17,6 +26,10 @@ + fix_bin=. + fi + ++fi ++ ++ ++ + vardir=var + logdir=$vardir/log + if [ x$1 = x"-slave" ] +@@ -47,12 +60,17 @@ + #create the directories + [ -d $vardir ] || mkdir $vardir + [ -d $logdir ] || mkdir $logdir ++[ "x$RUN_USER" != "x" ] && chown -R $RUN_USER $logdir + + # Create database directories mysql & test + if [ -d $data ] ; then rm -rf $data ; fi + mkdir $data $data/mysql $data/test + + #for error messages ++if [ "x$DEBIAN" = "x1" ]; then ++ basedir=/usr ++else ++ + if [ x$BINARY_DIST = x1 ] ; then + basedir=.. + else +@@ -62,6 +80,10 @@ + ln -sf ../../sql/share share/mysql + fi + ++fi ++ ++ ++ + # Initialize variables + c_d="" i_d="" + c_h="" i_h="" +@@ -211,7 +233,9 @@ + $c_c + END_OF_DATA + then ++ [ "x$RUN_USER" != "x" ] && chown -R $RUN_USER $ldata + exit 0 + else ++ [ "x$RUN_USER" != "x" ] && chown -R $RUN_USER $ldata + exit 1 + fi diff --git a/support-files/debian/patches/tb b/support-files/debian/patches/tb new file mode 100644 index 00000000000..c3890dcab62 --- /dev/null +++ b/support-files/debian/patches/tb @@ -0,0 +1,86 @@ +--- mysql-3.23.34a/mysql-test/mysql-test-run.sh.orig Mon Mar 12 08:18:27 2001 ++++ mysql-3.23.34a/mysql-test/mysql-test-run.sh Thu Mar 15 04:11:14 2001 +@@ -37,9 +37,23 @@ + XARGS=`which xargs | head -1` + SED=sed + ++if [ $USER = root ]; then ++ RUN_USER="mysql" ++ RUN_USER_OPT="--user=$RUN_USER" ++ export RUN_USER ++fi ++ ++ + # Are we using a source or a binary distribution? + + testdir=@testdir@ ++ ++if [ -d /var/mysql/mysql-test ]; then ++ DEBIAN=1 ++ cd /var/mysql/mysql-test ++ testdir=/var/mysql ++fi ++ + if [ -d bin/mysqld ] && [ -d mysql-test ] ; then + cd mysql-test + else +@@ -56,6 +70,10 @@ + exit 1 + fi + ++if [ x$DEBIAN = x1 ]; then ++ MY_BASEDIR=/usr ++fi ++ + #++ + # Misc. Definitions + #-- +@@ -184,12 +202,21 @@ + [ -d $MYSQL_TEST_DIR/var ] || mkdir $MYSQL_TEST_DIR/var + [ -d $MYSQL_TEST_DIR/var/tmp ] || mkdir $MYSQL_TEST_DIR/var/tmp + [ -d $MYSQL_TEST_DIR/var/run ] || mkdir $MYSQL_TEST_DIR/var/run ++[ -d $MYSQL_TEST_DIR -a "x$RUN_USER" != "x" ] && chown -R $RUN_USER $MYSQL_TEST_DIR + + [ -z "$COLUMNS" ] && COLUMNS=80 + E=`$EXPR $COLUMNS - 8` + #DASH72=`expr substr '------------------------------------------------------------------------' 1 $E` + DASH72=`$ECHO '------------------------------------------------------------------------'|$CUT -c 1-$E` + ++if [ "x$DEBIAN" = "x1" ]; then ++ MYSQLD="/usr/sbin/mysqld" ++ MYSQL_TEST="/usr/sbin/mysqltest" ++ MYSQLADMIN="/usr/bin/mysqladmin" ++ INSTALL_DB="/var/mysql/mysql-test/install_test_db -debian" ++ ++else ++ + # on source dist, we pick up freshly build executables + # on binary, use what is installed + if [ x$SOURCE_DIST = x1 ] ; then +@@ -250,6 +277,8 @@ + read unused + } + ++fi ++ + + error () { + $ECHO "Error: $1" +@@ -365,7 +394,7 @@ + --language=english \ + --innobase_data_file_path=ibdata1:50M \ + $SMALL_SERVER \ +- $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT" ++ $RUN_USER_OPT $EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT" + if [ x$DO_DDD = x1 ] + then + $ECHO "set args $master_args" > $GDB_MASTER_INIT +@@ -420,7 +449,7 @@ + --language=english \ + --skip-innobase \ + $SMALL_SERVER \ +- $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT" ++ $RUN_USER_OPT $EXTRA_SLAVE_OPT $EXTRA_SLAVE_MYSQLD_OPT" + if [ x$DO_DDD = x1 ] + then + $ECHO "set args $master_args" > $GDB_SLAVE_INIT diff --git a/support-files/debian/rules b/support-files/debian/rules index e63f144a655..c03e7fd1742 100755 --- a/support-files/debian/rules +++ b/support-files/debian/rules @@ -4,9 +4,11 @@ package=mysql CHARSET=ujis +SYSNAME= + TEMPINST=build -#CFLAGS="-O6 -mpentium -mstack-align-double -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentium -mstack-align-double -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static +# CFLAGS="-O6 -mpentium -mstack-align-double -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentium -mstack-align-double -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --enable-assembler --with-mysqld-ldflags=-all-static CC=gcc CFLAGS=-O6 -fomit-frame-pointer @@ -14,7 +16,6 @@ CXX=gcc CXXFLAGS=-O6 -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti # CXXFLAGS=-O6 -fomit-frame-pointer -felide-constructors -fno-rtti -SYSNAME= COMMONCONF= --prefix=/usr --libexecdir=/usr/sbin \ --localstatedir=/var/mysql/data \ --enable-shared \ @@ -26,8 +27,14 @@ COMMONCONF= --prefix=/usr --libexecdir=/usr/sbin \ SERVERCONF=$(COMMONCONF) --enable-assembler \ --with-raid +MYSQLMAXCONF= --with-server-suffix=-Max \ + --with-innodb \ + --with-berkeley-db + +# --with-gemini \ + # --with-berkeley-db-includes=/usr/include/db3 \ -# --with-berkeley-db-libs=/usr/lib/libdb3.a +# --with-berkeley-db-libs=/usr/lib STATICCONF=--with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static @@ -37,6 +44,7 @@ CLIENTCONF=$(COMMONCONF) --without-server patches debian/stamp-patches: -test -e debian/stamp-patches || \ for i in `find debian/patches -type f -print` ; do \ + echo "==== $$i ====" ; \ patch -p1 < $$i ; \ done touch debian/stamp-patches @@ -46,9 +54,15 @@ premkdir debian/stamp-premkdir: $(checkdir) -rm -rf debian/tmp debian/$(TEMPINST)* dh_installdirs - -install -d debian/$(TEMPINST)/usr/{bin,sbin,share,man,include,info} - -install -d debian/$(TEMPINST)-shared/usr/{bin,sbin,share,man,include,info} - -install -d debian/$(TEMPINST)-debug/usr/{bin,sbin,share,man,include,info} + + for i in '' -shared -debug -max -max-shared -max-debug ; do \ + install -d debian/$(TEMPINST)$${i}/usr/{bin,sbin,share,man,include,info} ; \ + done + +# -install -d debian/$(TEMPINST)$${i}/usr/{bin,sbin,share,man,include,info} +# -install -d debian/$(TEMPINST)-shared/usr/{bin,sbin,share,man,include,info} +# -install -d debian/$(TEMPINST)-debug/usr/{bin,sbin,share,man,include,info} + touch debian/stamp-premkdir ################################################## @@ -59,6 +73,7 @@ config debian/stamp-config: debian/stamp-premkdir debian/stamp-patches --with-charset=$(CHARSET) \ --with-bench \ $(SYSNAME) + # sed 's/-fno-implicit-templates//g' sql/Makefile > .m # mv .m sql/Makefile touch debian/stamp-config @@ -102,6 +117,51 @@ build-debug debian/stamp-build-debug: debian/stamp-patches touch debian/stamp-build-debug ################################################## +debian/stamp-mysql-max: debian/stamp-mysql-max-static debian/stamp-mysql-max-shared debian/stamp-mysql-max-debug + +debian/stamp-mysql-max-static: debian/stamp-premkdir debian/stamp-patches + -make distclean + CC=$(CC) CFLAGS="$(CFLAGS)" CXX=$(CXX) CXXFLAGS="$(CXXFLAGS)" \ + ./configure $(SERVERCONF) $(STATICCONF) \ + $(MYSQLMAXCONF) \ + --with-charset=$(CHARSET) \ + $(SYSNAME) + + make LDFLAGS="-static" + make install DESTDIR=`pwd`/debian/$(TEMPINST)-max + + touch debian/stamp-mysql-max-static + +debian/stamp-mysql-max-shared: debian/stamp-premkdir debian/stamp-patches + -make distclean + CC=$(CC) CFLAGS="$(CFLAGS)" CXX=$(CXX) CXXFLAGS="$(CXXFLAGS)" \ + ./configure $(SERVERCONF) \ + $(MYSQLMAXCONF) \ + --with-charset=$(CHARSET) \ + $(SYSNAME) + + make + make install DESTDIR=`pwd`/debian/$(TEMPINST)-max-shared + + touch debian/stamp-mysql-max-shared + + +debian/stamp-mysql-max-debug: debian/stamp-premkdir debian/stamp-patches + -make distclean + CC=$(CC) CFLAGS="$(CFLAGS)" CXX=$(CXX) CXXFLAGS="$(CXXFLAGS)" \ + ./configure $(SERVERCONF) \ + $(MYSQLMAXCONF) \ + --with-charset=$(CHARSET) \ + --with-debug \ + $(SYSNAME) + + make + make install DESTDIR=`pwd`/debian/$(TEMPINST)-max-debug + + touch debian/stamp-mysql-max-debug + + +################################################## clean: $(checkdir) -make distclean @@ -123,12 +183,12 @@ binary-indep: checkroot build # generated by this package. If there were any they would be # made here. -binary-arch: checkroot build debian/stamp-build-shared debian/stamp-build-debug +binary-arch: checkroot build debian/stamp-build-shared debian/stamp-build-debug debian/stamp-mysql-max sh debian/move ### init, post* dh_installdeb - cp debian/shlibs debian/libmysqlclient9/DEBIAN/ + cp debian/shlibs debian/libmysqlclient10/DEBIAN/ cp debian/my.cnf debian/mysql-server/etc/ cp support-files/mysql.server debian/mysql-server/etc/init.d/mysql ; chmod +x debian/mysql-server/etc/init.d/mysql @@ -143,7 +203,7 @@ binary-arch: checkroot build debian/stamp-build-shared debian/stamp-build-debug dh_shlibdeps dh_gencontrol - dpkg --build debian/libmysqlclient9 .. + dpkg --build debian/libmysqlclient10 .. dpkg --build debian/mysql-client .. dpkg --build debian/mysql-server .. dpkg --build debian/mysql-server-shared .. @@ -151,6 +211,9 @@ binary-arch: checkroot build debian/stamp-build-shared debian/stamp-build-debug dpkg --build debian/mysql-dev .. dpkg --build debian/mysql-bench .. dpkg --build debian/mysql-doc .. + dpkg --build debian/mysql-max .. + dpkg --build debian/mysql-max-shared .. + dpkg --build debian/mysql-max-debug .. define checkdir test -f debian/rules diff --git a/support-files/debian/shlibs b/support-files/debian/shlibs index 9906c2b605f..5500d337df9 100644 --- a/support-files/debian/shlibs +++ b/support-files/debian/shlibs @@ -1 +1 @@ -libmysqlclient 9 libmysqlclient9 +libmysqlclient 10 libmysqlclient10 diff --git a/tests/fork2_test.pl b/tests/fork2_test.pl index e8a579d9d81..b5564e99c3f 100755 --- a/tests/fork2_test.pl +++ b/tests/fork2_test.pl @@ -6,6 +6,9 @@ # the last 3 does different selects on the tables. # Er, hmmm..., something like that :^) # Modified to do crazy-join, à la Nasdaq. +# +# This test uses the old obsolete mysql interface. For a test that uses +# DBI, please take a look at fork_big.pl $opt_loop_count=10000; # Change this to make test harder/easier @@ -26,8 +29,8 @@ GetOptions("host=s","db=s","loop-count=i","skip-create","skip-in", "force") || die "Aborted"; $opt_verbose=$opt_debug=$opt_lock_tables=$opt_fast_insert=$opt_fast=$opt_skip_in=$Mysql::db_errstr=$opt_force=undef; # Ignore warnings from these -print "Testing 9 multiple connections to a server with 1 insert/update\n"; -print "and 8 select connections.\n"; +print "Testing 10 multiple connections to a server with 1 insert/update\n"; +print "and 8 select connections and one ALTER TABLE.\n"; @testtables = qw(bench_f21 bench_f22 bench_f23 bench_f24 bench_f25); @@ -83,6 +86,7 @@ test_2() if (($pid=fork()) == 0); $work{$pid}="simple3"; test_3() if (($pid=fork()) == 0); $work{$pid}="funny3"; test_2() if (($pid=fork()) == 0); $work{$pid}="simple4"; test_3() if (($pid=fork()) == 0); $work{$pid}="funny4"; +alter_test() if (($pid=fork()) == 0); $work{$pid}="alter"; $errors=0; while (($pid=wait()) != -1) @@ -205,6 +209,33 @@ sub test_3 exit(0); } +# +# Do an ALTER TABLE every 20 seconds +# +sub alter_test +{ + my ($dbh,$count,$old_row_count,$row_count,$id,@row,$sth); + $dbh = Mysql->Connect($opt_host, $opt_db) || die $Mysql::db_errstr; + $id=$count=$row_count=0; $old_row_count= -1; + # Execute the test as long as we get more data into the table + while ($row_count != $old_row_count) + { + sleep(10); + $sth=$dbh->Query("ALTER TABLE $testtables[$id] modify info varchar(32)") or die "Couldn't execute ALTER TABLE\n"; + $sth=0; + $id=($id+1) % $numtables; + + # Test if insert test has ended + $sth=$dbh->query("select count(*) from $testtables[0]") or die "Couldn't execute count(*)\n"; + @row = $sth->FetchRow(); + $old_row_count= $row_count; + $row_count=$row[0]; + $count++; + } + $dbh=0; + print "alter: Executed $count ALTER TABLE commands\n"; + exit(0); +} diff --git a/tests/fork_big.pl b/tests/fork_big.pl index 4009a9da71b..e082225604c 100755 --- a/tests/fork_big.pl +++ b/tests/fork_big.pl @@ -23,7 +23,7 @@ GetOptions("host=s","db=s","user=s","password=s","loop-count=i","skip-create","s $opt_verbose=$opt_debug=$opt_lock_tables=$opt_fast_insert=$opt_fast=$opt_skip_in=$opt_force=undef; # Ignore warnings from these print "Test of multiple connections that test the following things:\n"; -print "insert, select, delete, update, check, repair and flush\n"; +print "insert, select, delete, update, alter, check, repair and flush\n"; @testtables = ( ["bench_f31", ""], ["bench_f32", "row_format=fixed"], @@ -34,7 +34,8 @@ $abort_table="bench_f39"; $numtables = $#testtables+1; srand 100; # Make random numbers repeatable -#### + +#### #### Start timeing and start test #### @@ -88,12 +89,14 @@ for ($i=0 ; $i < $opt_threads ; $i ++) { test_select() if (($pid=fork()) == 0); $work{$pid}="select_key"; } +test_join() if (($pid=fork()) == 0); $work{$pid}="test_join"; test_select_count() if (($pid=fork()) == 0); $work{$pid}="select_count"; test_delete() if (($pid=fork()) == 0); $work{$pid}="delete"; test_update() if (($pid=fork()) == 0); $work{$pid}="update"; test_flush() if (($pid=fork()) == 0); $work{$pid}= "flush"; test_check() if (($pid=fork()) == 0); $work{$pid}="check"; test_repair() if (($pid=fork()) == 0); $work{$pid}="repair"; +test_alter() if (($pid=fork()) == 0); $work{$pid}="alter"; #test_database("test2") if (($pid=fork()) == 0); $work{$pid}="check_database"; print "Started " . ($opt_threads*2+4) . " threads\n"; @@ -244,6 +247,44 @@ sub test_select_count } # +# select records +# Do continously joins between the first and second table +# + +sub test_join +{ + my ($dbh, $i, $j, $count, $loop); + + $dbh = DBI->connect("DBI:mysql:$opt_db:$opt_host", + $opt_user, $opt_password, + { PrintError => 0}) || die $DBI::errstr; + + $count_query=make_count_query($numtables); + $count=0; + $loop=9999; + + $i=0; + while (($i++ % 100) || !test_if_abort($dbh)) + { + if ($loop++ >= 100) + { + $loop=0; + $row_counts=simple_query($dbh, $count_query); + } + for ($j=0 ; $j < $numtables-1 ; $j++) + { + my ($id)= int rand $row_counts->[$j]; + my ($t1,$t2)= ($testtables[$j]->[0],$testtables[$j+1]->[0]); + simple_query($dbh, "select $t1.id,$t2.info from $t1, $t2 where $t1.id=$t2.id and $t1.id=$id"); + $count++; + } + } + $dbh->disconnect; $dbh=0; + print "Test_join: Executed $count joins\n"; + exit(0); +} + +# # Delete 1-5 rows from the first 2 tables. # Test ends when the number of rows for table 3 didn't change during # one loop @@ -457,6 +498,29 @@ sub test_database exit(0); } +# +# Test ALTER TABLE on the second table +# + +sub test_alter +{ + my ($dbh, $row, $i, $type, $table); + $dbh = DBI->connect("DBI:mysql:$opt_db:$opt_host", + $opt_user, $opt_password, + { PrintError => 0}) || die $DBI::errstr; + + for ($i=0 ; !test_if_abort($dbh) ; $i++) + { + sleep(100); + $table=$testtables[1]->[0]; + $sth=$dbh->prepare("ALTER table $table modify info char(32)") || die "Got error on prepare: $DBI::errstr\n"; + $sth->execute || die $DBI::errstr; + } + $dbh->disconnect; $dbh=0; + print "test_alter: Executed $i ALTER TABLE\n"; + exit(0); +} + # # Help functions @@ -507,8 +571,8 @@ sub simple_query() my ($dbh, $query)= @_; my ($sth,$row); - $sth=$dbh->prepare($query) || die "Got error on '$query': $DBI::errstr\n"; - $sth->execute || die "Got error on '$query': $dbh->errstr\n"; + $sth=$dbh->prepare($query) || die "Got error on '$query': " . $dbh->errstr . "\n"; + $sth->execute || die "Got error on '$query': " . $dbh->errstr . "\n"; $row= $sth->fetchrow_arrayref(); $sth=0; return $row; |