summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.com>2000-10-14 03:16:35 +0300
committerunknown <monty@donna.mysql.com>2000-10-14 03:16:35 +0300
commit518a621adf75a55cad471f82d926842f3bcbf997 (patch)
tree1b0bc8c3909ac0c3e49a7d72615c583c9a72254d
parentda2c52f1fe73f1fca8d95875957b4bcb4bd84a4b (diff)
downloadmariadb-git-518a621adf75a55cad471f82d926842f3bcbf997.tar.gz
Fix of LEFT JOIN optimizer bug, problem with key cache on Windows and
a lot of portability issues. Docs/manual.texi: Changed FOREIGN KEY to FOREIGN KEY constraint client/mysqladmin.c: Don't flush MASTER or SLAVE on refresh configure.in: Fix for hpux 11.0 extra/perror.c: New error message include/my_pthread.h: Portability fix for windows myisam/mi_locking.c: Ensure that locking doesn't interfere with pread/pwrite on windows myisam/sort.c: checked with purecover mysys/mf_tempfile.c: Fix for windows mysys/my_lock.c: Ensure that locking doesn't interfere with pread/pwrite on windows mysys/my_winthread.c: Portability fix sql-bench/Results/ATIS-mysql-NT_4.0: New benchmark runs sql-bench/Results/RUN-mysql-NT_4.0: New benchmark runs sql-bench/Results/alter-table-mysql-NT_4.0: New benchmark runs sql-bench/Results/big-tables-mysql-NT_4.0: New benchmark runs sql-bench/Results/connect-mysql-NT_4.0: New benchmark runs sql-bench/Results/create-mysql-NT_4.0: New benchmark runs sql-bench/Results/insert-mysql-NT_4.0: New benchmark runs sql-bench/Results/select-mysql-NT_4.0: New benchmark runs sql-bench/Results/wisconsin-mysql-NT_4.0: New benchmark runs sql-bench/crash-me.sh: Fixed things for PostgreSQL sql-bench/limits/mysql-3.23.cfg: Update for new crash-me sql-bench/limits/mysql.cfg: Update for new crash-me sql-bench/print-limit-table: Fixed position for alter table rename sql-bench/test-insert.sh: Fix for PostgreSQL sql/field.cc: Fix for default values in CREATE ... SELECT sql/field.h: Fix for default values in CREATE ... SELECT sql/log.cc: Fixed typo sql/log_event.cc: Portability fix sql/mysqlbinlog.cc: Portability fix sql/mysqld.cc: Don't turn of concurrent insert with --skip-new or --safe sql/sql_base.cc: Portability fix sql/sql_class.cc: Portability fix sql/sql_class.h: Portability fix sql/sql_parse.cc: Fix for --log-slow-queries sql/sql_repl.cc: Portability fixes sql/sql_select.cc: Fixed optimizer bug for LEFT JOIN sql/sql_select.h: Fixed optimizer bug for LEFT JOIN sql/sql_table.cc: Fix for default values in CREATE ... SELECT sql/sql_yacc.yy: Added optional AS to: CREATE TABLE foo [ AS ] SELECT ...
-rw-r--r--Docs/manual.texi91
-rw-r--r--client/mysqladmin.c3
-rw-r--r--configure.in4
-rw-r--r--extra/perror.c4
-rw-r--r--include/my_pthread.h2
-rw-r--r--myisam/mi_locking.c9
-rw-r--r--myisam/sort.c52
-rw-r--r--mysys/mf_tempfile.c2
-rw-r--r--mysys/my_lock.c15
-rw-r--r--mysys/my_winthread.c4
-rw-r--r--sql-bench/Results/ATIS-mysql-Linux_2.2.13_SMP_alpha19
-rw-r--r--sql-bench/Results/ATIS-mysql-NT_4.016
-rw-r--r--sql-bench/Results/RUN-mysql-Linux_2.2.13_SMP_alpha86
-rw-r--r--sql-bench/Results/RUN-mysql-NT_4.0139
-rw-r--r--sql-bench/Results/alter-table-mysql-Linux_2.2.13_SMP_alpha16
-rw-r--r--sql-bench/Results/alter-table-mysql-NT_4.014
-rw-r--r--sql-bench/Results/big-tables-mysql-Linux_2.2.13_SMP_alpha19
-rw-r--r--sql-bench/Results/big-tables-mysql-NT_4.012
-rw-r--r--sql-bench/Results/connect-mysql-Linux_2.2.13_SMP_alpha30
-rw-r--r--sql-bench/Results/connect-mysql-NT_4.020
-rw-r--r--sql-bench/Results/create-mysql-Linux_2.2.13_SMP_alpha18
-rw-r--r--sql-bench/Results/create-mysql-NT_4.014
-rw-r--r--sql-bench/Results/insert-mysql-Linux_2.2.13_SMP_alpha79
-rw-r--r--sql-bench/Results/insert-mysql-NT_4.075
-rw-r--r--sql-bench/Results/select-mysql-Linux_2.2.13_SMP_alpha23
-rw-r--r--sql-bench/Results/select-mysql-NT_4.026
-rw-r--r--sql-bench/Results/wisconsin-mysql-Linux_2.2.13_SMP_alpha14
-rw-r--r--sql-bench/Results/wisconsin-mysql-NT_4.08
-rwxr-xr-xsql-bench/crash-me.sh26
-rw-r--r--sql-bench/limits/mysql-3.23.cfg11
-rw-r--r--sql-bench/limits/mysql.cfg11
-rwxr-xr-xsql-bench/print-limit-table2
-rwxr-xr-xsql-bench/test-insert.sh10
-rw-r--r--sql/field.cc25
-rw-r--r--sql/field.h2
-rw-r--r--sql/log.cc2
-rw-r--r--sql/log_event.cc30
-rw-r--r--sql/mysqlbinlog.cc2
-rw-r--r--sql/mysqld.cc3
-rw-r--r--sql/sql_base.cc20
-rw-r--r--sql/sql_class.cc1
-rw-r--r--sql/sql_class.h3
-rw-r--r--sql/sql_parse.cc12
-rw-r--r--sql/sql_repl.cc4
-rw-r--r--sql/sql_select.cc97
-rw-r--r--sql/sql_select.h2
-rw-r--r--sql/sql_table.cc15
-rw-r--r--sql/sql_yacc.yy10
48 files changed, 774 insertions, 328 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index b845b6042bf..33eaeab83e4 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -333,7 +333,7 @@ Functionality Missing from MySQL
Foreign Keys
-* Broken Foreign KEY:: Reasons NOT to use foreign keys
+* Broken Foreign KEY:: Reasons NOT to use foreign keys constraints
The MySQL Access Privilege System
@@ -837,7 +837,7 @@ Changes in release 3.23.x (Recommended; beta)
* News-3.23.4:: Changes in release 3.23.4
* News-3.23.3:: Changes in release 3.23.3
* News-3.23.2:: Changes in release 3.23.2
-* News-3.23.1:: Changes in release 3.23.1
+* News-3.23.1::
* News-3.23.0:: Changes in release 3.23.0
Changes in release 3.22.x
@@ -10171,9 +10171,9 @@ To see when @strong{MySQL} might get stored procedures, see @ref{TODO}.
@cindex keys, foreign
Note that foreign keys in SQL are not used to join tables, but are used
-mostly for checking referential integrity. If you want to get results from
-multiple tables from a @code{SELECT} statement, you do this by joining
-tables:
+mostly for checking referential integrity (foreign key constraints). If
+you want to get results from multiple tables from a @code{SELECT}
+statement, you do this by joining tables:
@example
SELECT * from table1,table2 where table1.id = table2.id;
@@ -10200,29 +10200,33 @@ than using foreign keys.
In the near future we will extend the @code{FOREIGN KEY} implementation so
that at least the information will be saved in the table specification file
-and may be retrieved by @code{mysqldump} and ODBC.
+and may be retrieved by @code{mysqldump} and ODBC. At a later stage we will
+implement the foreign key constraints for application that can't easily be
+coded to avoid them.
@menu
-* Broken Foreign KEY:: Reasons NOT to use foreign keys
+* Broken Foreign KEY:: Reasons NOT to use foreign keys constraints
@end menu
@node Broken Foreign KEY, , Missing Foreign Keys, Missing Foreign Keys
-@subsubsection Reasons NOT to Use Foreign Keys
+@subsubsection Reasons NOT to Use Foreign Keys constraints
@cindex foreign keys, reasons not to use
-There are so many problems with foreign keys that we don't
+There are so many problems with foreign key constraints that we don't
know where to start:
@itemize @bullet
@item
-Foreign keys make life very complicated, because the foreign key definitions
-must be stored in a database and implementing them would destroy the whole
-``nice approach'' of using files that can be moved, copied, and removed.
+Foreign key constraints make life very complicated, because the foreign
+key definitions must be stored in a database and implementing them would
+destroy the whole ``nice approach'' of using files that can be moved,
+copied, and removed.
@item
-The speed impact is terrible for @code{INSERT} and @code{UPDATE} statements,
-and in this case almost all @code{FOREIGN KEY} checks are useless because you
-usually insert records in the right tables in the right order, anyway.
+The speed impact is terrible for @code{INSERT} and @code{UPDATE}
+statements, and in this case almost all @code{FOREIGN KEY} constraint
+checks are useless because you usually insert records in the right
+tables in the right order, anyway.
@item
There is also a need to hold locks on many more tables when updating one
@@ -10231,12 +10235,12 @@ MUCH faster to delete records from one table first and subsequently delete
them from the other tables.
@item
-You can no longer restore a table by doing a full delete from
-the table and then restoring all records (from a new source or from a backup).
+You can no longer restore a table by doing a full delete from the table
+and then restoring all records (from a new source or from a backup).
@item
-If you have foreign keys you can't dump and restore tables unless you do so
-in a very specific order.
+If you use foreign key constraints you can't dump and restore tables
+unless you do so in a very specific order.
@item
It's very easy to do ``allowed'' circular definitions that make the
@@ -10248,9 +10252,11 @@ The only nice aspect of @code{FOREIGN KEY} is that it gives ODBC and some
other client programs the ability to see how a table is connected and to use
this to show connection diagrams and to help in building applicatons.
-@strong{MySQL} will soon store @code{FOREIGN KEY} definitions so that
-a client can ask for and receive an answer about how the original connection
-was made. The current @file{.frm} file format does not have any place for it.
+@strong{MySQL} will soon store @code{FOREIGN KEY} definitions so that a
+client can ask for and receive an answer about how the original
+connection was made. The current @file{.frm} file format does not have
+any place for it. At a later stage we will implement the foreign key
+constraints for application that can't easily be coded to avoid them.
@node Missing Views, Missing comments, Missing Foreign Keys, Missing functions
@subsection Views
@@ -32254,10 +32260,12 @@ this program!
When started with the @code{--log-slow-queries[=file_name]} option,
@code{mysqld} writes a log file containing all SQL commands that took
-more than @code{long_query_time} to execute. If no file name is
-given, it defaults to the name of the host machine suffixed with
-@code{-slow.log}. If a file name is given, but doesn't contain a path,
-the file is written in the data directory.
+more than @code{long_query_time} to execute. The time to get the initial
+table locks are not counted as execution time.
+
+If no file name is given, it defaults to the name of the host machine
+suffixed with @code{-slow.log}. If a file name is given, but doesn't
+contain a path, the file is written in the data directory.
The slow query log can be used to find queries that takes a long time to
execute and are thus candidates for optimization.
@@ -37068,7 +37076,7 @@ Python module with caching. By @email{gandalf@@rosmail.com}.
@item @uref{http://www.mysql.com/Downloads/Contrib/MySQLmodule-1.4.tar.gz, MySQLmodule-1.4.tar.gz}
Python interface for @strong{MySQL}. By Joseph Skinner @email{joe@@earthlight.co.nz}; Modified by Joerg Senekowitsch @email{senekow@@ibm.net}
-@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_mex_1_1b.tar.gz, mysql_mex_1_1b.tar.gz}
+@item @uref{http://www.mysql.com/Downloads/Contrib/mysql_mex_11.tar.gz, mysql_mex_1_11.tar.gz}
An interface program for the Matlab program by MathWorks. The interface
is done by Kimmo Uutela and John Fisher (not by Mathworks).
Check @uref{http://boojum.hut.fi/~kuutela/mysqlmex.html,mysqlmex.html}
@@ -37341,10 +37349,10 @@ Accounting. By Jose de Leon, @email{jdl@@thevision.net}
Apache authentication module for @strong{MySQL}. By Zeev Suraski,
@email{bourbon@@netvision.net.il}.
-@strong{Please} register this module at:
-@url{http://bourbon.netvision.net.il/mysql/mod_auth_mysql/register.html}. The
-registering information is only used for statistical purposes and will
-encourage further development of this module!
+@c @strong{Please} register this module at:
+@c @url{http://bourbon.netvision.net.il/mysql/mod_auth_mysql/register.html}. The
+@c registering information is only used for statistical purposes and will
+@c encourage further development of this module!
@item @uref{http://www.mysql.com/Downloads/Contrib/mod_log_mysql-1.05.tar.gz, mod_log_mysql-1.05.tar.gz}
@strong{MySQL} logging module for Apache. By Zeev Suraski,
@@ -37495,6 +37503,7 @@ Prints the structure of every table in a database. By Thomas Wana.
@item @uref{http://www.mysql.com/Downloads/Contrib/mysqlsync, mysqlsync-1.0-alpha.tar.gz}.
A perl script to keep remote copies of a @strong{MySQL} database in sync with a
central master copy. By Mark Jeftovic. @email{markjr@@easydns.com}
+
@item @uref{http://www.mysql.com/Downloads/Contrib/MySQLTutor-0.2.tar.gz, MySQLTutor}.
MySQLTutor. A tutor of @strong{MySQL} for beginners
@@ -37516,6 +37525,9 @@ By Elizabeth.
@item @uref{http://www.mysql.com/Downloads/Contrib/mybackup}
@item @uref{http://www.mswanson.com/mybackup, mybackup home page}
Wrapper for mysqldump to backup all databases. By Marc Swanson.
+
+@item @uref{http://www.mysql.com/Downloads/Contrib/mdu.pl.gz,mdu.pl.gz}
+Prints the storage usage of a @strong{MySQL} database.
@end itemize
@cindex RPMs, for common tools
@@ -37918,6 +37930,7 @@ though, so 3.23 is not released as a stable version yet.
* News-3.23.4:: Changes in release 3.23.4
* News-3.23.3:: Changes in release 3.23.3
* News-3.23.2:: Changes in release 3.23.2
+* News-3.23.1:: Changes in release 3.23.1
* News-3.23.0:: Changes in release 3.23.0
@end menu
@@ -37925,6 +37938,14 @@ though, so 3.23 is not released as a stable version yet.
@appendixsubsec Changes in release 3.23.26
@itemize @bullet
@item
+@code{LEFT JOIN} did in some case prefer a full table scan when one
+didn't have a @code{WHERE} clause.
+@item
+When using @code{--log-slow-queries}, don't count the time waiting for a lock.
+@item
+Fixed bug in lock code on @code{windows} which could cause the key cache
+to report that the key file was crashed even if it was ok.
+@item
Automatic repair of @code{MyISAM} tables if you start @code{mysqld} with
@code{--myisam-recover}.
@item
@@ -42286,12 +42307,20 @@ Allow users to change startup options.
@item
Subqueries. @code{select id from t where grp in (select grp from g where u > 100)}
@item
+@code{INSERT SQL_CONCURRENT ...}; This will force the insert to happen at the
+end of the data file if the table is in use by an select to allow
+concurrent inserts.
+@item
+Change @code{INSERT ... SELECT} to use concurrent inserts.
+@item
Add range checking to @code{MERGE} tables.
@item
@code{SHOW OPEN TABLES}
@item
Port of @strong{MySQL} to BeOS.
@item
+Link the @code{myisampack} code into the server.
+@item
Add a temporary key buffer cache during @code{insert/delete/update} so that we
can gracefully recover if the index file gets full.
@item
diff --git a/client/mysqladmin.c b/client/mysqladmin.c
index aec7ec892cf..f8432ec7fb6 100644
--- a/client/mysqladmin.c
+++ b/client/mysqladmin.c
@@ -446,7 +446,8 @@ static my_bool execute_commands(MYSQL *mysql,int argc, char **argv)
case ADMIN_REFRESH:
if (mysql_refresh(mysql,
(uint) ~(REFRESH_GRANT | REFRESH_STATUS |
- REFRESH_READ_LOCK)) < 0)
+ REFRESH_READ_LOCK | REFRESH_SLAVE |
+ REFRESH_MASTER)) < 0)
{
my_printf_error(0,"refresh failed; error: '%s'",MYF(ME_BELL),
mysql_error(mysql));
diff --git a/configure.in b/configure.in
index 77f9d84d883..271c284d6af 100644
--- a/configure.in
+++ b/configure.in
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
AC_INIT(sql/mysqld.cc)
AC_CANONICAL_SYSTEM
# The Docs Makefile.am parses this line!
-AM_INIT_AUTOMAKE(mysql, 3.23.25-beta)
+AM_INIT_AUTOMAKE(mysql, 3.23.26-beta)
AM_CONFIG_HEADER(config.h)
PROTOCOL_VERSION=10
@@ -662,7 +662,7 @@ case $SYSTEM_TYPE in
;;
*hpux11.*)
echo "Enabling pread/pwrite workaround for hpux 11"
- CFLAGS="$CFLAGS -DHAVE_BROKEN_PREAD -DDONT_USE_FINITE"
+ CFLAGS="$CFLAGS -DHAVE_BROKEN_PREAD -DDONT_USE_FINITE -DHAVE_BROKEN_GETPASS"
CXXFLAGS="$CXXFLAGS -DHAVE_BROKEN_PREAD -DDONT_USE_FINITE -D_INCLUDE_LONGLONG"
if test "$with_named_thread" = "no"
then
diff --git a/extra/perror.c b/extra/perror.c
index af8f77e19be..ec523ecba0b 100644
--- a/extra/perror.c
+++ b/extra/perror.c
@@ -17,7 +17,7 @@
/* Return error-text for system error messages and nisam messages */
-#define PERROR_VERSION "2.5"
+#define PERROR_VERSION "2.6"
#include <global.h>
#include <my_sys.h>
@@ -62,7 +62,7 @@ static HA_ERRORS ha_errlist[]=
{ 138,"Unsupported extension used for table" },
{ 139,"Too big row (>= 16 M)"},
{ 140,"Wrong create options"},
- { 141,"Duplicate unique on write or update"},
+ { 141,"Duplicate unique key or constraint on write or update"},
{ 142,"Unknown character set used"},
{ 143,"Conflicting table definition between MERGE and mapped table"},
{ 144,"Table is crashed and last repair failed"},
diff --git a/include/my_pthread.h b/include/my_pthread.h
index 07c0c3e502e..1722c5cf9b2 100644
--- a/include/my_pthread.h
+++ b/include/my_pthread.h
@@ -76,7 +76,7 @@ int pthread_attr_setprio(pthread_attr_t *connect_att,int priority);
int pthread_attr_destroy(pthread_attr_t *connect_att);
struct tm *localtime_r(const time_t *timep,struct tm *tmp);
-void pthread_exit(unsigned A); /* was #define pthread_exit(A) ExitThread(A)*/
+void pthread_exit(void *a); /* was #define pthread_exit(A) ExitThread(A)*/
#define ETIMEDOUT 145 /* Win32 doesn't have this */
#define getpid() GetCurrentThreadId()
diff --git a/myisam/mi_locking.c b/myisam/mi_locking.c
index a5cbdd4f906..4797584627a 100644
--- a/myisam/mi_locking.c
+++ b/myisam/mi_locking.c
@@ -177,18 +177,19 @@ int mi_lock_database(MI_INFO *info, int lock_type)
if (!share->w_locks)
{
flag=1;
- VOID(my_seek(share->kfile,0L,MY_SEEK_SET,MYF(0)));
- if (my_lock(share->kfile,lock_type,0L,F_TO_EOF,info->lock_wait))
+ if (my_lock(share->kfile,lock_type,0L,F_TO_EOF,
+ info->lock_wait | MY_SEEK_NOT_DONE))
{
error=my_errno;
break;
}
if (!share->r_locks)
{
- if (mi_state_info_read_dsk(share->kfile, &share->state, 0))
+ if (mi_state_info_read_dsk(share->kfile, &share->state, 1))
{
error=my_errno;
- VOID(my_lock(share->kfile,F_UNLCK,0L,F_TO_EOF,info->lock_wait));
+ VOID(my_lock(share->kfile,F_UNLCK,0L,F_TO_EOF,
+ info->lock_wait | MY_SEEK_NOT_DONE));
my_errno=error;
break;
}
diff --git a/myisam/sort.c b/myisam/sort.c
index 436fa5a3c67..a2a28ec9109 100644
--- a/myisam/sort.c
+++ b/myisam/sort.c
@@ -128,8 +128,8 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
}
if (memavl < MIN_SORT_MEMORY)
{
- mi_check_print_error(info->sort_info->param,"Sort buffer to small");
- goto err;
+ mi_check_print_error(info->sort_info->param,"Sort buffer to small"); /* purecov: tested */
+ goto err; /* purecov: tested */
}
(*info->lock_in_memory)(info->sort_info->param);/* Everything is allocated */
@@ -138,13 +138,13 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
if ((records=find_all_keys(info,keys,sort_keys,buffpek,&maxbuffer,&tempfile))
== HA_POS_ERROR)
- goto err;
+ goto err; /* purecov: tested */
if (maxbuffer == 0)
{
if (!no_messages)
printf(" - Dumping %lu keys\n",records);
if (write_index(info,sort_keys,(uint) records))
- goto err;
+ goto err; /* purecov: inspected */
}
else
{
@@ -152,17 +152,17 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
if (maxbuffer >= MERGEBUFF2)
{
if (!no_messages)
- printf(" - Merging %lu keys\n",records);
+ printf(" - Merging %lu keys\n",records); /* purecov: tested */
if (merge_many_buff(info,keys,sort_keys,buffpek,&maxbuffer,&tempfile))
- goto err;
+ goto err; /* purecov: inspected */
}
if (flush_io_cache(&tempfile) ||
reinit_io_cache(&tempfile,READ_CACHE,0L,0,0))
- goto err;
+ goto err; /* purecov: inspected */
if (!no_messages)
- puts(" - Last merge and dumping keys");
+ puts(" - Last merge and dumping keys"); /* purecov: tested */
if (merge_index(info,keys,sort_keys,buffpek,maxbuffer,&tempfile))
- goto err;
+ goto err; /* purecov: inspected */
}
error =0;
@@ -195,17 +195,17 @@ static ha_rows NEAR_F find_all_keys(MI_SORT_PARAM *info, uint keys,
{
if (indexpos >= (uint) *maxbuffer ||
write_keys(info,sort_keys,idx-1,buffpek+indexpos,tempfile))
- DBUG_RETURN((ha_rows) -1);
+ DBUG_RETURN(HA_POS_ERROR); /* purecov: inspected */
memcpy(sort_keys[0],sort_keys[idx-1],(size_t) info->key_length);
idx=1; indexpos++;
}
}
if (error > 0)
- DBUG_RETURN(HA_POS_ERROR); /* Aborted by get_key */
+ DBUG_RETURN(HA_POS_ERROR); /* Aborted by get_key */ /* purecov: inspected */
if (indexpos)
if (indexpos >= (uint) *maxbuffer ||
write_keys(info,sort_keys,idx,buffpek+indexpos,tempfile))
- DBUG_RETURN(HA_POS_ERROR);
+ DBUG_RETURN(HA_POS_ERROR); /* purecov: inspected */
*maxbuffer=(int) indexpos;
DBUG_RETURN(indexpos*(keys-1)+idx);
} /* find_all_keys */
@@ -226,13 +226,13 @@ static int NEAR_F write_keys(MI_SORT_PARAM *info, register uchar **sort_keys,
if (!my_b_inited(tempfile) &&
open_cached_file(tempfile, info->tmpdir, "ST", DISK_BUFFER_SIZE,
info->myf_rw))
- DBUG_RETURN(1);
+ DBUG_RETURN(1); /* purecov: inspected */
buffpek->file_pos=my_b_tell(tempfile);
buffpek->count=count;
for (end=sort_keys+count ; sort_keys != end ; sort_keys++)
if (my_b_write(tempfile,(byte*) *sort_keys,(uint) sort_length))
- DBUG_RETURN(1);
+ DBUG_RETURN(1); /* purecov: inspected */
DBUG_RETURN(0);
} /* write_keys */
@@ -248,7 +248,7 @@ static int NEAR_F write_index(MI_SORT_PARAM *info, register uchar **sort_keys,
(qsort2_cmp) info->key_cmp,info->sort_info);
while (count--)
if ((*info->key_write)(info->sort_info,*sort_keys++))
- DBUG_RETURN(-1);
+ DBUG_RETURN(-1); /* purecov: inspected */
DBUG_RETURN(0);
} /* write_index */
@@ -281,11 +281,11 @@ static int NEAR_F merge_many_buff(MI_SORT_PARAM *info, uint keys,
{
if (merge_buffers(info,keys,from_file,to_file,sort_keys,lastbuff++,
buffpek+i,buffpek+i+MERGEBUFF-1))
- break;
+ break; /* purecov: inspected */
}
if (merge_buffers(info,keys,from_file,to_file,sort_keys,lastbuff++,
buffpek+i,buffpek+ *maxbuffer))
- break;
+ break; /* purecov: inspected */
if (flush_io_cache(to_file))
break; /* purecov: inspected */
temp=from_file; from_file=to_file; to_file=temp;
@@ -350,19 +350,19 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
if (init_queue(&queue,(uint) (Tb-Fb)+1,offsetof(BUFFPEK,key),0,
(int (*)(void*, byte *,byte*)) info->key_cmp,
(void*) info->sort_info))
- DBUG_RETURN(1);
+ DBUG_RETURN(1); /* purecov: inspected */
- for (buffpek= Fb ; buffpek <= Tb && error != -1 ; buffpek++)
+ for (buffpek= Fb ; buffpek <= Tb ; buffpek++)
{
count+= buffpek->count;
buffpek->base= strpos;
buffpek->max_keys=maxcount;
strpos+= (uint) (error=(int) read_to_buffer(from_file,buffpek,
sort_length));
+ if (error == -1)
+ goto err; /* purecov: inspected */
queue_insert(&queue,(void*) buffpek);
}
- if (error == -1)
- goto err;
while (queue.elements > 1)
{
@@ -373,14 +373,14 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
{
if (my_b_write(to_file,(byte*) buffpek->key,(uint) sort_length))
{
- error=1; goto err;
+ error=1; goto err; /* purecov: inspected */
}
}
else
{
if ((*info->key_write)(info->sort_info,(void*) buffpek->key))
{
- error=1; goto err;
+ error=1; goto err; /* purecov: inspected */
}
}
buffpek->key+=sort_length;
@@ -429,7 +429,7 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
if (my_b_write(to_file,(byte*) buffpek->key,
(sort_length*buffpek->mem_count)))
{
- error=1; goto err;
+ error=1; goto err; /* purecov: inspected */
}
}
else
@@ -442,7 +442,7 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
{
if ((*info->key_write)(info->sort_info,(void*) strpos))
{
- error=1; goto err;
+ error=1; goto err; /* purecov: inspected */
}
}
}
@@ -468,7 +468,7 @@ merge_index(MI_SORT_PARAM *info, uint keys, uchar **sort_keys,
DBUG_ENTER("merge_index");
if (merge_buffers(info,keys,tempfile,(IO_CACHE*) 0,sort_keys,buffpek,buffpek,
buffpek+maxbuffer))
- DBUG_RETURN(1);
+ DBUG_RETURN(1); /* purecov: inspected */
DBUG_RETURN(0);
} /* merge_index */
diff --git a/mysys/mf_tempfile.c b/mysys/mf_tempfile.c
index 44826ad57c2..e78cb3ca2ae 100644
--- a/mysys/mf_tempfile.c
+++ b/mysys/mf_tempfile.c
@@ -43,7 +43,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
DBUG_ENTER("open_temp_file");
#if defined(_MSC_VER)
{
- char *end,*res,**old_env,*temp_env[1];
+ char temp[FN_REFLEN],*end,*res,**old_env,*temp_env[1];
old_env=environ;
if (dir)
{
diff --git a/mysys/my_lock.c b/mysys/my_lock.c
index 4f1506f20cf..ed637648353 100644
--- a/mysys/my_lock.c
+++ b/mysys/my_lock.c
@@ -109,10 +109,17 @@ int my_lock(File fd, int locktype, my_off_t start, my_off_t length,
printf("Error: DosSetFileLocks() == %d\n",rc);
}
#elif defined(HAVE_LOCKING)
- if (MyFlags & MY_SEEK_NOT_DONE)
- VOID(my_seek(fd,start,MY_SEEK_SET,MYF(MyFlags & ~MY_SEEK_NOT_DONE)));
- if (!locking(fd,locktype,(ulong) length) || errno == EINVAL)
- DBUG_RETURN(0);
+ /* Windows */
+ {
+ my_bool error;
+ pthread_mutex_lock(&my_file_info[fd].mutex);
+ if (MyFlags & MY_SEEK_NOT_DONE)
+ VOID(my_seek(fd,start,MY_SEEK_SET,MYF(MyFlags & ~MY_SEEK_NOT_DONE)));
+ error= locking(fd,locktype,(ulong) length) && errno != EINVAL;
+ pthread_mutex_unlock(&my_file_info[fd].mutex);
+ if (!error)
+ DBUG_RETURN(0);
+ }
#else
#if defined(HAVE_FCNTL)
lock.l_type= (short) locktype;
diff --git a/mysys/my_winthread.c b/mysys/my_winthread.c
index 6a99fa0bb02..2fe56a13baf 100644
--- a/mysys/my_winthread.c
+++ b/mysys/my_winthread.c
@@ -61,7 +61,7 @@ static pthread_handler_decl(pthread_start,param)
win_pthread_self=((struct pthread_map *) param)->pthreadself;
pthread_mutex_unlock(&THR_LOCK_thread);
free((char*) param); /* Free param from create */
- pthread_exit((*func)(func_param));
+ pthread_exit((void*) (*func)(func_param));
return 0; /* Safety */
}
@@ -103,7 +103,7 @@ int pthread_create(pthread_t *thread_id, pthread_attr_t *attr,
}
-void pthread_exit(unsigned A)
+void pthread_exit(void *a)
{
_endthread();
}
diff --git a/sql-bench/Results/ATIS-mysql-Linux_2.2.13_SMP_alpha b/sql-bench/Results/ATIS-mysql-Linux_2.2.13_SMP_alpha
new file mode 100644
index 00000000000..b50e5bf75fc
--- /dev/null
+++ b/sql-bench/Results/ATIS-mysql-Linux_2.2.13_SMP_alpha
@@ -0,0 +1,19 @@
+Testing server 'MySQL 3.23.25 beta' at 2000-10-13 0:30:52
+
+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)
+
+Inserting data
+Time to insert (9768): 4 wallclock secs ( 0.66 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Retrieving data
+Time for select_simple_join (500): 2 wallclock secs ( 0.64 usr 0.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_join (200): 13 wallclock secs ( 4.22 usr 3.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_distinct (800): 11 wallclock secs ( 1.68 usr 1.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_group (2800): 10 wallclock secs ( 1.54 usr 0.65 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: 40 wallclock secs ( 8.74 usr 5.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/ATIS-mysql-NT_4.0 b/sql-bench/Results/ATIS-mysql-NT_4.0
index 1e3f4aef640..d523526a1a5 100644
--- a/sql-bench/Results/ATIS-mysql-NT_4.0
+++ b/sql-bench/Results/ATIS-mysql-NT_4.0
@@ -1,19 +1,19 @@
-Testing server 'MySQL 3.23.25 beta' at 2000-09-27 2:53:29
+Testing server 'MySQL 3.23.26 gamma' at 2000-10-13 14:00:43
ATIS table test
Creating tables
-Time for create_table (28): 0 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for create_table (28): 1 wallclock secs ( 0.02 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Inserting data
-Time to insert (9768): 5 wallclock secs ( 0.86 usr 1.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to insert (9768): 5 wallclock secs ( 1.06 usr 1.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Retrieving data
-Time for select_simple_join (500): 4 wallclock secs ( 1.75 usr 0.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_join (200): 22 wallclock secs (13.38 usr 5.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_distinct (800): 17 wallclock secs ( 4.75 usr 1.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_group (2800): 21 wallclock secs ( 3.16 usr 1.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_simple_join (500): 3 wallclock secs ( 1.56 usr 0.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_join (200): 23 wallclock secs (13.31 usr 5.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_distinct (800): 17 wallclock secs ( 4.36 usr 2.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_group (2800): 20 wallclock secs ( 3.14 usr 1.14 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: 69 wallclock secs (23.89 usr 9.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 69 wallclock secs (23.45 usr 11.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/RUN-mysql-Linux_2.2.13_SMP_alpha b/sql-bench/Results/RUN-mysql-Linux_2.2.13_SMP_alpha
new file mode 100644
index 00000000000..a4e9f92a9e3
--- /dev/null
+++ b/sql-bench/Results/RUN-mysql-Linux_2.2.13_SMP_alpha
@@ -0,0 +1,86 @@
+Benchmark DBD suite: 2.9
+Date of test: 2000-10-13 0:30:52
+Running tests on: Linux 2.2.13-SMP alpha
+Arguments:
+Comments: Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; gcc 2.95.2 + ccc
+Limits from:
+Server version: MySQL 3.23.25 beta
+
+ATIS: Total time: 40 wallclock secs ( 8.74 usr 5.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+alter-table: Total time: 435 wallclock secs ( 0.29 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+big-tables: Total time: 41 wallclock secs ( 8.36 usr 10.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+connect: Total time: 76 wallclock secs (34.42 usr 12.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+create: Total time: 135 wallclock secs (10.37 usr 4.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+insert: Total time: 1756 wallclock secs (370.65 usr 171.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+select: Total time: 1982 wallclock secs (130.60 usr 108.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+wisconsin: Total time: 19 wallclock secs ( 3.67 usr 2.69 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 238.00 0.17 0.07 0.00 992
+alter_table_drop 189.00 0.06 0.04 0.00 496
+connect 13.00 7.52 2.74 0.00 10000
+connect+select_1_row 16.00 7.90 3.25 0.00 10000
+connect+select_simple 16.00 7.94 3.21 0.00 10000
+count 53.00 0.04 0.01 0.00 100
+count_distinct 94.00 0.64 0.20 0.00 1000
+count_distinct_big 851.00 79.09 89.50 0.00 1020
+count_distinct_group 69.00 1.13 0.58 0.00 1000
+count_distinct_group_on_key 48.00 0.37 0.16 0.00 1000
+count_distinct_group_on_key_parts 69.00 1.10 0.62 0.00 1000
+count_group_on_key_parts 44.00 1.15 0.58 0.00 1000
+count_on_key 452.00 15.84 4.57 0.00 50100
+create+drop 13.00 2.72 1.19 0.00 10000
+create_MANY_tables 91.00 1.80 0.61 0.00 10000
+create_index 4.00 0.00 0.00 0.00 8
+create_key+drop 17.00 4.20 1.25 0.00 10000
+create_table 0.00 0.00 0.00 0.00 31
+delete_all 11.00 0.00 0.00 0.00 12
+delete_all_many_keys 49.00 0.01 0.00 0.00 1
+delete_big 0.00 0.00 0.00 0.00 1
+delete_big_many_keys 49.00 0.01 0.00 0.00 128
+delete_key 5.00 0.68 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.69 0.60 0.00 10000
+insert 132.00 22.47 20.01 0.00 350768
+insert_duplicates 40.00 6.20 6.19 0.00 100000
+insert_key 95.00 8.49 5.48 0.00 100000
+insert_many_fields 14.00 0.34 0.12 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 23.00 0.03 0.00 0.00 60
+min_max_on_key 188.00 25.65 7.76 0.00 85000
+multiple_value_insert 7.00 2.08 0.05 0.00 100000
+order_by 51.00 21.06 22.46 0.00 10
+order_by_key 36.00 20.39 14.82 0.00 10
+outer_join 65.00 0.00 0.00 0.00 10
+outer_join_found 60.00 0.00 0.00 0.00 10
+outer_join_not_found 38.00 0.01 0.00 0.00 500
+outer_join_on_key 42.00 0.00 0.00 0.00 10
+select_1_row 3.00 0.38 1.04 0.00 10000
+select_2_rows 3.00 0.35 0.96 0.00 10000
+select_big 56.00 30.32 15.00 0.00 10080
+select_column+column 3.00 0.32 0.73 0.00 10000
+select_diff_key 175.00 0.24 0.05 0.00 500
+select_distinct 11.00 1.68 1.02 0.00 800
+select_group 51.00 1.59 0.66 0.00 2911
+select_group_when_MANY_tables 7.00 0.95 0.90 0.00 10000
+select_join 13.00 4.22 3.17 0.00 200
+select_key 141.00 74.40 21.54 0.00 200000
+select_key2 146.00 76.95 20.42 0.00 200000
+select_key_prefix 146.00 76.59 19.98 0.00 200000
+select_many_fields 27.00 8.01 10.15 0.00 2000
+select_range 269.00 9.47 5.61 0.00 410
+select_range_key2 19.00 6.47 2.37 0.00 25010
+select_range_prefix 20.00 6.54 2.29 0.00 25010
+select_simple 2.00 0.28 0.79 0.00 10000
+select_simple_join 2.00 0.64 0.38 0.00 500
+update_big 28.00 0.00 0.00 0.00 10
+update_of_key 44.00 2.93 2.56 0.00 50256
+update_of_key_big 19.00 0.04 0.03 0.00 501
+update_with_key 139.00 23.06 19.06 0.00 300000
+wisc_benchmark 4.00 1.75 0.93 0.00 114
+TOTALS 4533.00 566.96 316.29 0.00 1944607
diff --git a/sql-bench/Results/RUN-mysql-NT_4.0 b/sql-bench/Results/RUN-mysql-NT_4.0
index a21bc3c1158..e1908bc04b0 100644
--- a/sql-bench/Results/RUN-mysql-NT_4.0
+++ b/sql-bench/Results/RUN-mysql-NT_4.0
@@ -1,79 +1,86 @@
Benchmark DBD suite: 2.9
-Date of test: 2000-09-27 2:14:34
+Date of test: 2000-10-13 13:16:20
Running tests on: Windows NT Version 4.0
Arguments:
Comments: 2x Pentium III XEON 450MHZ, 512M
Limits from:
-Server version: MySQL 3.23.25 beta
+Server version: MySQL 3.23.26 gamma
-alter-table: Total time: 2334 wallclock secs ( 0.75 usr 0.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-ATIS: Total time: 69 wallclock secs (23.89 usr 9.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-big-tables: Total time: 80 wallclock secs (17.56 usr 18.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-connect: Total time: 183 wallclock secs (59.48 usr 50.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-create: Failed (output/create-mysql-NT_4.0)
-insert: Total time: 5829 wallclock secs (581.28 usr 317.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-select: Total time: 2397 wallclock secs (317.05 usr 117.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-wisconsin: Total time: 28 wallclock secs ( 8.19 usr 5.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+alter-table: Total time: 2663 wallclock secs ( 0.73 usr 0.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+ATIS: Total time: 69 wallclock secs (23.45 usr 11.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+big-tables: Total time: 80 wallclock secs (17.59 usr 18.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+connect: Total time: 178 wallclock secs (57.88 usr 48.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+create: Total time: 848 wallclock secs (14.42 usr 10.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+insert: Total time: 5599 wallclock secs (584.97 usr 320.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+select: Total time: 2294 wallclock secs (316.44 usr 121.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+wisconsin: Total time: 28 wallclock secs ( 8.39 usr 5.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Of 8 tests, 1 tests didn't work
+All 8 test executed successfully
Totals per operation:
Operation seconds usr sys cpu tests
-alter_table_add 1242.00 0.42 0.17 0.00 992
-alter_table_drop 1042.00 0.25 0.25 0.00 496
-connect 32.00 10.92 11.08 0.00 10000
-connect+select_1_row 38.00 12.33 12.44 0.00 10000
-connect+select_simple 37.00 12.31 11.61 0.00 10000
-count 39.00 0.06 0.02 0.00 100
-count_distinct 97.00 0.97 0.36 0.00 1000
-count_distinct_big 1209.00 225.82 83.41 0.00 1020
-count_distinct_group 144.00 2.70 0.98 0.00 1000
-count_distinct_group_on_key 54.00 0.61 0.23 0.00 1000
-count_distinct_group_on_key_parts 144.00 2.44 1.28 0.00 1000
-count_group_on_key_parts 47.00 2.34 0.75 0.00 1000
-count_on_key 438.00 22.47 8.91 0.00 50100
-create_index 26.00 0.00 0.00 0.00 8
-create_table 0.00 0.00 0.02 0.00 31
-delete_all 22.00 0.00 0.00 0.00 12
-delete_all_many_keys 1498.00 0.02 0.01 0.00 1
+alter_table_add 1433.00 0.45 0.34 0.00 992
+alter_table_drop 1177.00 0.17 0.14 0.00 496
+connect 33.00 11.66 10.31 0.00 10000
+connect+select_1_row 38.00 12.94 12.19 0.00 10000
+connect+select_simple 38.00 12.14 12.00 0.00 10000
+count 34.00 0.11 0.03 0.00 100
+count_distinct 74.00 0.95 0.28 0.00 1000
+count_distinct_big 1191.00 227.87 86.22 0.00 1020
+count_distinct_group 149.00 2.50 1.00 0.00 1000
+count_distinct_group_on_key 40.00 0.63 0.27 0.00 1000
+count_distinct_group_on_key_parts 149.00 2.95 1.06 0.00 1000
+count_group_on_key_parts 41.00 2.72 0.84 0.00 1000
+count_on_key 407.00 20.91 9.02 0.00 50100
+create+drop 124.00 3.22 2.39 0.00 10000
+create_MANY_tables 213.00 2.77 1.67 0.00 10000
+create_index 27.00 0.00 0.00 0.00 8
+create_key+drop 159.00 5.92 2.61 0.00 10000
+create_table 1.00 0.02 0.02 0.00 31
+delete_all 22.00 0.00 0.02 0.00 12
+delete_all_many_keys 1422.00 0.00 0.00 0.00 1
delete_big 0.00 0.00 0.00 0.00 1
-delete_big_many_keys 1498.00 0.02 0.01 0.00 128
-delete_key 7.00 0.97 1.25 0.00 10000
-drop_index 24.00 0.00 0.02 0.00 8
+delete_big_many_keys 1422.00 0.00 0.00 0.00 128
+delete_key 7.00 0.97 1.36 0.00 10000
+drop_index 25.00 0.00 0.02 0.00 8
drop_table 0.00 0.00 0.00 0.00 28
-insert 234.00 34.55 46.33 0.00 350768
-insert_duplicates 59.00 6.50 10.52 0.00 300000
-insert_key 1593.00 14.31 14.47 0.00 100000
-insert_many_fields 22.00 0.52 0.42 0.00 2000
-min_max 20.00 0.05 0.03 0.00 60
-min_max_on_key 211.00 37.06 13.64 0.00 85000
-multiple_value_insert 9.00 2.51 0.24 0.00 100000
-order_by 99.00 63.39 25.81 0.00 10
-order_by_key 89.00 63.61 25.09 0.00 10
-outer_join 120.00 0.00 0.00 0.00 10
-outer_join_found 106.00 0.01 0.00 0.00 10
-outer_join_not_found 55.00 0.00 0.00 0.00 500
+drop_table_when_MANY_tables 159.00 1.22 1.27 0.00 10000
+insert 252.00 34.77 46.66 0.00 350768
+insert_duplicates 59.00 8.11 13.67 0.00 100000
+insert_key 1447.00 13.78 13.42 0.00 100000
+insert_many_fields 22.00 0.55 0.35 0.00 2000
+insert_select_1_key 8.00 0.00 0.00 0.00 1
+insert_select_2_keys 13.00 0.00 0.00 0.00 1
+min_max 18.00 0.11 0.02 0.00 60
+min_max_on_key 192.00 36.01 14.60 0.00 85000
+multiple_value_insert 9.00 2.34 0.26 0.00 100000
+order_by 98.00 63.58 25.14 0.00 10
+order_by_key 90.00 64.05 25.08 0.00 10
+outer_join 118.00 0.01 0.00 0.00 10
+outer_join_found 105.00 0.00 0.00 0.00 10
+outer_join_not_found 56.00 0.00 0.00 0.00 500
outer_join_on_key 40.00 0.00 0.00 0.00 10
-select_1_row 5.00 1.13 1.70 0.00 10000
-select_2_rows 6.00 0.97 1.97 0.00 10000
-select_big 144.00 84.41 33.61 0.00 10080
-select_column+column 6.00 1.06 1.67 0.00 10000
-select_diff_key 123.00 0.39 0.08 0.00 500
-select_distinct 17.00 4.75 1.78 0.00 800
-select_group 61.00 3.29 1.15 0.00 2911
-select_join 22.00 13.38 5.28 0.00 200
-select_key 193.00 92.27 38.89 0.00 200000
-select_key2 202.00 93.95 37.08 0.00 200000
-select_key_prefix 198.00 91.75 40.53 0.00 200000
-select_many_fields 55.00 17.05 18.03 0.00 2000
-select_range 187.00 27.56 9.31 0.00 410
-select_range_key2 29.00 10.02 3.90 0.00 25010
-select_range_prefix 28.00 10.74 3.92 0.00 25010
-select_simple 4.00 0.86 1.70 0.00 10000
-select_simple_join 4.00 1.75 0.53 0.00 500
-update_big 64.00 0.00 0.00 0.00 500
-update_of_key 541.00 4.83 6.56 0.00 756
-update_of_key_big 34.00 0.08 0.05 0.00 501
-update_with_key 185.00 24.97 40.99 0.00 100000
-wisc_benchmark 9.00 5.80 1.64 0.00 114
-TOTALS 12412.00 1008.17 519.72 0.00 1845595
+select_1_row 5.00 0.78 1.78 0.00 10000
+select_2_rows 6.00 0.91 2.11 0.00 10000
+select_big 138.00 81.45 32.88 0.00 10080
+select_column+column 6.00 1.00 1.72 0.00 10000
+select_diff_key 124.00 0.41 0.09 0.00 500
+select_distinct 17.00 4.36 2.64 0.00 800
+select_group 56.00 3.22 1.16 0.00 2911
+select_group_when_MANY_tables 193.00 1.28 2.25 0.00 10000
+select_join 23.00 13.31 5.59 0.00 200
+select_key 196.00 96.84 36.63 0.00 200000
+select_key2 203.00 92.92 39.80 0.00 200000
+select_key_prefix 201.00 91.41 40.78 0.00 200000
+select_many_fields 56.00 17.03 18.35 0.00 2000
+select_range 189.00 26.94 9.30 0.00 410
+select_range_key2 30.00 10.56 3.72 0.00 25010
+select_range_prefix 26.00 9.81 4.36 0.00 25010
+select_simple 4.00 1.05 1.67 0.00 10000
+select_simple_join 3.00 1.56 0.66 0.00 500
+update_big 62.00 0.00 0.00 0.00 10
+update_of_key 492.00 4.46 7.55 0.00 50256
+update_of_key_big 33.00 0.06 0.03 0.00 501
+update_with_key 188.00 25.03 40.83 0.00 300000
+wisc_benchmark 9.00 5.80 1.47 0.00 114
+TOTALS 13172.00 1023.62 537.63 0.00 1944607
diff --git a/sql-bench/Results/alter-table-mysql-Linux_2.2.13_SMP_alpha b/sql-bench/Results/alter-table-mysql-Linux_2.2.13_SMP_alpha
new file mode 100644
index 00000000000..acf5c463223
--- /dev/null
+++ b/sql-bench/Results/alter-table-mysql-Linux_2.2.13_SMP_alpha
@@ -0,0 +1,16 @@
+Testing server 'MySQL 3.23.25 beta' at 2000-10-13 0:31:33
+
+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.06 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Time for alter_table_add (992): 238 wallclock secs ( 0.17 usr 0.07 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): 189 wallclock secs ( 0.06 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Total time: 435 wallclock secs ( 0.29 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/alter-table-mysql-NT_4.0 b/sql-bench/Results/alter-table-mysql-NT_4.0
index 77e11040bf3..5a7cd64f85b 100644
--- a/sql-bench/Results/alter-table-mysql-NT_4.0
+++ b/sql-bench/Results/alter-table-mysql-NT_4.0
@@ -1,16 +1,16 @@
-Testing server 'MySQL 3.23.25 beta' at 2000-09-27 2:14:35
+Testing server 'MySQL 3.23.26 gamma' at 2000-10-13 13:16:20
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.06 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for insert (1000) 1 wallclock secs ( 0.11 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for alter_table_add (992): 1242 wallclock secs ( 0.42 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for alter_table_add (992): 1433 wallclock secs ( 0.45 usr 0.34 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for create_index (8): 26 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for create_index (8): 27 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for drop_index (8): 24 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for drop_index (8): 25 wallclock secs ( 0.00 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for alter_table_drop (496): 1042 wallclock secs ( 0.25 usr 0.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for alter_table_drop (496): 1177 wallclock secs ( 0.17 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Total time: 2334 wallclock secs ( 0.75 usr 0.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 2663 wallclock secs ( 0.73 usr 0.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/big-tables-mysql-Linux_2.2.13_SMP_alpha b/sql-bench/Results/big-tables-mysql-Linux_2.2.13_SMP_alpha
new file mode 100644
index 00000000000..02962161846
--- /dev/null
+++ b/sql-bench/Results/big-tables-mysql-Linux_2.2.13_SMP_alpha
@@ -0,0 +1,19 @@
+Testing server 'MySQL 3.23.25 beta' at 2000-10-13 0:38:49
+
+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): 11 wallclock secs ( 3.96 usr 5.06 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): 16 wallclock secs ( 4.05 usr 5.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing insert VALUES()
+Time to insert_many_fields(1000): 5 wallclock secs ( 0.31 usr 0.06 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.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Total time: 41 wallclock secs ( 8.36 usr 10.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/big-tables-mysql-NT_4.0 b/sql-bench/Results/big-tables-mysql-NT_4.0
index 4887a4380aa..75f88d4958c 100644
--- a/sql-bench/Results/big-tables-mysql-NT_4.0
+++ b/sql-bench/Results/big-tables-mysql-NT_4.0
@@ -1,19 +1,19 @@
-Testing server 'MySQL 3.23.25 beta' at 2000-09-27 2:54:38
+Testing server 'MySQL 3.23.26 gamma' at 2000-10-13 14:01:53
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): 19 wallclock secs ( 8.08 usr 9.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to select_many_fields(1000): 20 wallclock secs ( 8.03 usr 9.38 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): 36 wallclock secs ( 8.97 usr 8.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to select_many_fields(1000): 36 wallclock secs ( 9.00 usr 8.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing insert VALUES()
-Time to insert_many_fields(1000): 3 wallclock secs ( 0.44 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to insert_many_fields(1000): 3 wallclock secs ( 0.39 usr 0.13 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing insert (all_fields) VALUES()
-Time to insert_many_fields(1000): 19 wallclock secs ( 0.08 usr 0.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to insert_many_fields(1000): 19 wallclock secs ( 0.16 usr 0.22 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Total time: 80 wallclock secs (17.56 usr 18.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 80 wallclock secs (17.59 usr 18.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/connect-mysql-Linux_2.2.13_SMP_alpha b/sql-bench/Results/connect-mysql-Linux_2.2.13_SMP_alpha
new file mode 100644
index 00000000000..86eceb339d5
--- /dev/null
+++ b/sql-bench/Results/connect-mysql-Linux_2.2.13_SMP_alpha
@@ -0,0 +1,30 @@
+Testing server 'MySQL 3.23.25 beta' at 2000-10-13 0:39:31
+
+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): 13 wallclock secs ( 7.52 usr 2.74 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.94 usr 3.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Test simple select
+Time for select_simple (10000): 2 wallclock secs ( 0.28 usr 0.79 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): 16 wallclock secs ( 7.90 usr 3.25 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.38 usr 1.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing select 2 rows from table
+Time to select_2_rows (10000): 3 wallclock secs ( 0.35 usr 0.96 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Test select with aritmetic (+)
+Time for select_column+column (10000): 3 wallclock secs ( 0.32 usr 0.73 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 ( 9.73 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Total time: 76 wallclock secs (34.42 usr 12.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/connect-mysql-NT_4.0 b/sql-bench/Results/connect-mysql-NT_4.0
index 9725018829a..b98cc6603f1 100644
--- a/sql-bench/Results/connect-mysql-NT_4.0
+++ b/sql-bench/Results/connect-mysql-NT_4.0
@@ -1,30 +1,30 @@
-Testing server 'MySQL 3.23.25 beta' at 2000-09-27 2:55:59
+Testing server 'MySQL 3.23.26 gamma' at 2000-10-13 14:03:13
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): 32 wallclock secs (10.92 usr 11.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to connect (10000): 33 wallclock secs (11.66 usr 10.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Test connect/simple select/disconnect
-Time for connect+select_simple (10000): 37 wallclock secs (12.31 usr 11.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for connect+select_simple (10000): 38 wallclock secs (12.14 usr 12.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Test simple select
-Time for select_simple (10000): 4 wallclock secs ( 0.86 usr 1.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_simple (10000): 4 wallclock secs ( 1.05 usr 1.67 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): 38 wallclock secs (12.33 usr 12.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to connect+select_1_row (10000): 38 wallclock secs (12.94 usr 12.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing select 1 row from table
-Time to select_1_row (10000): 5 wallclock secs ( 1.13 usr 1.70 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to select_1_row (10000): 5 wallclock secs ( 0.78 usr 1.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing select 2 rows from table
-Time to select_2_rows (10000): 6 wallclock secs ( 0.97 usr 1.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to select_2_rows (10000): 6 wallclock secs ( 0.91 usr 2.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Test select with aritmetic (+)
-Time for select_column+column (10000): 6 wallclock secs ( 1.06 usr 1.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_column+column (10000): 6 wallclock secs ( 1.00 usr 1.72 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing retrieval of big records (65000 bytes)
-Time to select_big (10000): 55 wallclock secs (19.89 usr 8.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to select_big (10000): 48 wallclock secs (17.38 usr 7.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Total time: 183 wallclock secs (59.48 usr 50.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 178 wallclock secs (57.88 usr 48.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/create-mysql-Linux_2.2.13_SMP_alpha b/sql-bench/Results/create-mysql-Linux_2.2.13_SMP_alpha
new file mode 100644
index 00000000000..e0b355208d4
--- /dev/null
+++ b/sql-bench/Results/create-mysql-Linux_2.2.13_SMP_alpha
@@ -0,0 +1,18 @@
+Testing server 'MySQL 3.23.25 beta' at 2000-10-13 0:40:47
+
+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): 91 wallclock secs ( 1.80 usr 0.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Accessing tables
+Time to select_group_when_MANY_tables (10000): 7 wallclock secs ( 0.95 usr 0.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing drop
+Time for drop_table_when_MANY_tables (10000): 7 wallclock secs ( 0.69 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing create+drop
+Time for create+drop (10000): 13 wallclock secs ( 2.72 usr 1.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for create_key+drop (10000): 17 wallclock secs ( 4.20 usr 1.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 135 wallclock secs (10.37 usr 4.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/create-mysql-NT_4.0 b/sql-bench/Results/create-mysql-NT_4.0
index 36b89967975..7d75b7a3282 100644
--- a/sql-bench/Results/create-mysql-NT_4.0
+++ b/sql-bench/Results/create-mysql-NT_4.0
@@ -1,6 +1,18 @@
-Testing server 'MySQL 3.23.25 beta' at 2000-09-27 2:59:02
+Testing server 'MySQL 3.23.26 gamma' at 2000-10-13 14:06:11
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): 213 wallclock secs ( 2.77 usr 1.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Accessing tables
+Time to select_group_when_MANY_tables (10000): 193 wallclock secs ( 1.28 usr 2.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing drop
+Time for drop_table_when_MANY_tables (10000): 159 wallclock secs ( 1.22 usr 1.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing create+drop
+Time for create+drop (10000): 124 wallclock secs ( 3.22 usr 2.39 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for create_key+drop (10000): 159 wallclock secs ( 5.92 usr 2.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 848 wallclock secs (14.42 usr 10.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/insert-mysql-Linux_2.2.13_SMP_alpha b/sql-bench/Results/insert-mysql-Linux_2.2.13_SMP_alpha
new file mode 100644
index 00000000000..3f0bc8835ae
--- /dev/null
+++ b/sql-bench/Results/insert-mysql-Linux_2.2.13_SMP_alpha
@@ -0,0 +1,79 @@
+Testing server 'MySQL 3.23.25 beta' at 2000-10-13 0:43:02
+
+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.
+
+Generating random keys
+Creating tables
+Inserting 100000 rows in order
+Inserting 100000 rows in reverse order
+Inserting 100000 rows in random order
+Time for insert (300000): 110 wallclock secs (19.18 usr 17.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing insert of duplicates
+Time for insert_duplicates (100000): 40 wallclock secs ( 6.20 usr 6.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Retrieving data from the table
+Time for select_big (10:3000000): 35 wallclock secs (20.45 usr 14.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for order_by_key (10:3000000): 36 wallclock secs (20.39 usr 14.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for order_by (10:3000000): 51 wallclock secs (21.06 usr 22.46 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_diff_key (500:1000): 175 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.81 usr 0.93 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_range_key2 (5010:42084): 10 wallclock secs ( 2.78 usr 1.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_key_prefix (200000): 146 wallclock secs (76.59 usr 19.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_key (200000): 141 wallclock secs (74.40 usr 21.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_key2 (200000): 146 wallclock secs (76.95 usr 20.42 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.73 usr 1.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_range_key2 (20000:43500): 9 wallclock secs ( 3.69 usr 1.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_group (111): 41 wallclock secs ( 0.05 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for min_max_on_key (15000): 10 wallclock secs ( 4.68 usr 1.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for min_max (60): 23 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_on_key (100): 38 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count (100): 53 wallclock secs ( 0.04 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_big (20): 58 wallclock secs ( 0.00 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): 22 wallclock secs ( 2.91 usr 2.54 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for update_of_key_big (501): 19 wallclock secs ( 0.04 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing update with key
+Time for update_with_key (300000): 139 wallclock secs (23.06 usr 19.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing update of all rows
+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): 42 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for outer_join (10:10): 65 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for outer_join_found (10:10): 60 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.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing INSERT INTO ... SELECT
+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.68 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): 95 wallclock secs ( 8.49 usr 5.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Testing update of keys
+Time for update_of_key (256): 22 wallclock secs ( 0.02 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Deleting rows from the table
+Time for delete_big_many_keys (128): 49 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Deleting everything from table
+Time for delete_all_many_keys (1): 49 wallclock secs ( 0.01 usr 0.00 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 ( 2.08 usr 0.05 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: 1756 wallclock secs (370.65 usr 171.18 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/insert-mysql-NT_4.0 b/sql-bench/Results/insert-mysql-NT_4.0
index bb1d1e69ba8..ce42b79436e 100644
--- a/sql-bench/Results/insert-mysql-NT_4.0
+++ b/sql-bench/Results/insert-mysql-NT_4.0
@@ -1,4 +1,4 @@
-Testing server 'MySQL 3.23.25 beta' at 2000-09-27 2:59:03
+Testing server 'MySQL 3.23.26 gamma' at 2000-10-13 14:20:19
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,67 +8,72 @@ Creating tables
Inserting 100000 rows in order
Inserting 100000 rows in reverse order
Inserting 100000 rows in random order
-Time for insert (300000): 203 wallclock secs (30.05 usr 40.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for insert (300000): 221 wallclock secs (30.06 usr 39.92 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing insert of duplicates
-Time for insert_duplicates (300000): 59 wallclock secs ( 6.50 usr 10.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for insert_duplicates (100000): 59 wallclock secs ( 8.11 usr 13.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Retrieving data from the table
-Time for select_big (10:3000000): 88 wallclock secs (64.08 usr 24.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for order_by_key (10:3000000): 89 wallclock secs (63.61 usr 25.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for order_by (10:3000000): 99 wallclock secs (63.39 usr 25.81 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_diff_key (500:1000): 123 wallclock secs ( 0.39 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_range_prefix (5010:42084): 15 wallclock secs ( 5.30 usr 1.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_range_key2 (5010:42084): 16 wallclock secs ( 4.69 usr 1.74 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_key_prefix (200000): 198 wallclock secs (91.75 usr 40.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_key (200000): 193 wallclock secs (92.27 usr 38.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_key2 (200000): 202 wallclock secs (93.95 usr 37.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_big (10:3000000): 89 wallclock secs (63.69 usr 25.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for order_by_key (10:3000000): 90 wallclock secs (64.05 usr 25.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for order_by (10:3000000): 98 wallclock secs (63.58 usr 25.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_diff_key (500:1000): 124 wallclock secs ( 0.41 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_range_prefix (5010:42084): 14 wallclock secs ( 4.47 usr 1.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_range_key2 (5010:42084): 16 wallclock secs ( 4.64 usr 1.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_key_prefix (200000): 201 wallclock secs (91.41 usr 40.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_key (200000): 196 wallclock secs (96.84 usr 36.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_key2 (200000): 203 wallclock secs (92.92 usr 39.80 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Test of compares with simple ranges
-Time for select_range_prefix (20000:43500): 13 wallclock secs ( 5.44 usr 2.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_range_key2 (20000:43500): 13 wallclock secs ( 5.33 usr 2.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_group (111): 40 wallclock secs ( 0.13 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for min_max_on_key (15000): 14 wallclock secs ( 6.51 usr 2.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for min_max (60): 20 wallclock secs ( 0.05 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for count_on_key (100): 36 wallclock secs ( 0.05 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for count (100): 39 wallclock secs ( 0.06 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for count_distinct_big (20): 92 wallclock secs ( 0.05 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_range_prefix (20000:43500): 12 wallclock secs ( 5.34 usr 2.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_range_key2 (20000:43500): 14 wallclock secs ( 5.92 usr 1.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_group (111): 36 wallclock secs ( 0.08 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for min_max_on_key (15000): 14 wallclock secs ( 6.45 usr 2.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for min_max (60): 18 wallclock secs ( 0.11 usr 0.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_on_key (100): 36 wallclock secs ( 0.03 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count (100): 34 wallclock secs ( 0.11 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_big (20): 96 wallclock secs ( 0.01 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing update of keys with functions
-Time for update_of_key (500): 62 wallclock secs ( 4.77 usr 6.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for update_of_key_big (501): 34 wallclock secs ( 0.08 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for update_of_key (50000): 56 wallclock secs ( 4.45 usr 7.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for update_of_key_big (501): 33 wallclock secs ( 0.06 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing update with key
-Time for update_with_key (100000): 185 wallclock secs (24.97 usr 40.99 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for update_with_key (300000): 188 wallclock secs (25.03 usr 40.83 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing update of all rows
-Time for update_big (500): 64 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for update_big (10): 62 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): 40 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for outer_join (10:10): 120 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for outer_join_found (10:10): 106 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): 55 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for outer_join (10:10): 118 wallclock secs ( 0.01 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for outer_join_found (10:10): 105 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): 56 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): 8 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for insert_select_2_keys (1): 13 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.02 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing delete
-Time for delete_key (10000): 7 wallclock secs ( 0.97 usr 1.25 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for delete_all (12): 22 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for delete_key (10000): 7 wallclock secs ( 0.97 usr 1.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for delete_all (12): 22 wallclock secs ( 0.00 usr 0.02 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): 1593 wallclock secs (14.31 usr 14.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for insert_key (100000): 1447 wallclock secs (13.78 usr 13.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing update of keys
-Time for update_of_key (256): 479 wallclock secs ( 0.06 usr 0.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for update_of_key (256): 436 wallclock secs ( 0.01 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Deleting rows from the table
-Time for delete_big_many_keys (128): 1498 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for delete_big_many_keys (128): 1422 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Deleting everything from table
-Time for delete_all_many_keys (1): 1498 wallclock secs ( 0.02 usr 0.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for delete_all_many_keys (1): 1422 wallclock secs ( 0.00 usr 0.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Inserting 100000 rows with multiple values
-Time for multiple_value_insert (100000): 9 wallclock secs ( 2.51 usr 0.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for multiple_value_insert (100000): 9 wallclock secs ( 2.34 usr 0.26 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: 5829 wallclock secs (581.28 usr 317.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 5599 wallclock secs (584.97 usr 320.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/select-mysql-Linux_2.2.13_SMP_alpha b/sql-bench/Results/select-mysql-Linux_2.2.13_SMP_alpha
new file mode 100644
index 00000000000..5b096dd8875
--- /dev/null
+++ b/sql-bench/Results/select-mysql-Linux_2.2.13_SMP_alpha
@@ -0,0 +1,23 @@
+Testing server 'MySQL 3.23.25 beta' at 2000-10-13 1:12:21
+
+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): 3 wallclock secs ( 0.72 usr 0.58 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.14 usr 0.09 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_range (410:1057904): 269 wallclock secs ( 9.47 usr 5.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for min_max_on_key (70000): 178 wallclock secs (20.97 usr 6.44 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_on_key (50000): 414 wallclock secs (15.80 usr 4.56 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Time for count_group_on_key_parts (1000:0): 44 wallclock secs ( 1.15 usr 0.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Testing count(distinct) on the table
+Time for count_distinct (1000:2000): 94 wallclock secs ( 0.64 usr 0.20 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_group_on_key (1000:6000): 48 wallclock secs ( 0.37 usr 0.16 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_group_on_key_parts (1000:100000): 69 wallclock secs ( 1.10 usr 0.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_group (1000:100000): 69 wallclock secs ( 1.13 usr 0.58 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_big (1000:10000000): 793 wallclock secs (79.09 usr 89.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 1982 wallclock secs (130.60 usr 108.91 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/select-mysql-NT_4.0 b/sql-bench/Results/select-mysql-NT_4.0
index 9b8eaacc553..4981e28cee8 100644
--- a/sql-bench/Results/select-mysql-NT_4.0
+++ b/sql-bench/Results/select-mysql-NT_4.0
@@ -1,23 +1,23 @@
-Testing server 'MySQL 3.23.25 beta' at 2000-09-27 4:36:14
+Testing server 'MySQL 3.23.26 gamma' at 2000-10-13 15:53:40
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): 7 wallclock secs ( 1.25 usr 1.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to insert (10000): 7 wallclock secs ( 1.06 usr 1.39 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.44 usr 0.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for select_range (410:1057904): 187 wallclock secs (27.56 usr 9.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for min_max_on_key (70000): 197 wallclock secs (30.55 usr 11.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for count_on_key (50000): 402 wallclock secs (22.42 usr 8.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_big (70:17207): 1 wallclock secs ( 0.38 usr 0.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for select_range (410:1057904): 189 wallclock secs (26.94 usr 9.30 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for min_max_on_key (70000): 178 wallclock secs (29.56 usr 11.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_on_key (50000): 371 wallclock secs (20.88 usr 9.02 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for count_group_on_key_parts (1000:0): 47 wallclock secs ( 2.34 usr 0.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_group_on_key_parts (1000:0): 41 wallclock secs ( 2.72 usr 0.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing count(distinct) on the table
-Time for count_distinct (1000:2000): 97 wallclock secs ( 0.97 usr 0.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for count_distinct_group_on_key (1000:6000): 54 wallclock secs ( 0.61 usr 0.23 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for count_distinct_group_on_key_parts (1000:100000): 144 wallclock secs ( 2.44 usr 1.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for count_distinct_group (1000:100000): 144 wallclock secs ( 2.70 usr 0.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Time for count_distinct_big (1000:10000000): 1117 wallclock secs (225.77 usr 83.39 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Total time: 2397 wallclock secs (317.05 usr 117.49 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct (1000:2000): 74 wallclock secs ( 0.95 usr 0.28 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_group_on_key (1000:6000): 40 wallclock secs ( 0.63 usr 0.27 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_group_on_key_parts (1000:100000): 149 wallclock secs ( 2.95 usr 1.06 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_group (1000:100000): 149 wallclock secs ( 2.50 usr 1.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for count_distinct_big (1000:10000000): 1095 wallclock secs (227.86 usr 86.19 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 2294 wallclock secs (316.44 usr 121.50 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/wisconsin-mysql-Linux_2.2.13_SMP_alpha b/sql-bench/Results/wisconsin-mysql-Linux_2.2.13_SMP_alpha
new file mode 100644
index 00000000000..f417d1b444c
--- /dev/null
+++ b/sql-bench/Results/wisconsin-mysql-Linux_2.2.13_SMP_alpha
@@ -0,0 +1,14 @@
+Testing server 'MySQL 3.23.25 beta' at 2000-10-13 1:45:23
+
+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 ( 1.91 usr 1.77 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)
+
+Running actual benchmark
+Time for wisc_benchmark (114): 4 wallclock secs ( 1.75 usr 0.93 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+
+Total time: 19 wallclock secs ( 3.67 usr 2.69 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/Results/wisconsin-mysql-NT_4.0 b/sql-bench/Results/wisconsin-mysql-NT_4.0
index 470ee49b563..e36922f1d3d 100644
--- a/sql-bench/Results/wisconsin-mysql-NT_4.0
+++ b/sql-bench/Results/wisconsin-mysql-NT_4.0
@@ -1,14 +1,14 @@
-Testing server 'MySQL 3.23.25 beta' at 2000-09-27 5:16:11
+Testing server 'MySQL 3.23.26 gamma' at 2000-10-13 16:31:55
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): 19 wallclock secs ( 2.39 usr 3.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time to insert (31000): 19 wallclock secs ( 2.59 usr 4.13 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)
Running actual benchmark
-Time for wisc_benchmark (114): 9 wallclock secs ( 5.80 usr 1.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Time for wisc_benchmark (114): 9 wallclock secs ( 5.80 usr 1.47 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
-Total time: 28 wallclock secs ( 8.19 usr 5.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
+Total time: 28 wallclock secs ( 8.39 usr 5.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
diff --git a/sql-bench/crash-me.sh b/sql-bench/crash-me.sh
index 6357ffc17b1..6bb3eab63f9 100755
--- a/sql-bench/crash-me.sh
+++ b/sql-bench/crash-me.sh
@@ -39,7 +39,7 @@
# "3-byte int" or "same as xxx".
-$version="1.49";
+$version="1.50";
use DBI;
use Getopt::Long;
@@ -271,8 +271,9 @@ if ($dbh->do("create table crash_q (a integer, b integer,c CHAR(10))"))
report("Alter table alter column default",'alter_alter_col',
"alter table crash_q alter b set default 10",
"alter table crash_q alter b set default NULL");
- report("Alter table drop column",'alter_drop_col',
- "alter table crash_q drop column b");
+ report_one("Alter table drop column",'alter_drop_col',
+ [["alter table crash_q drop column b","yes"],
+ ["alter table crash_q drop column b restrict","with restrict/cascade"]]);
report("Alter table rename table",'alter_rename_table',
"alter table crash_q rename to crash_q1");
}
@@ -757,7 +758,7 @@ try_and_report("Automatic rowid", "automatic_rowid",
["COS","cos","cos(0)","1.00000",0],
["COT","cot","cot(1)","0.64209262",0],
["DEGREES","degrees","degrees(6.283185)","360",0],
- ["EXP","exp","exp(1)","2.718282",0],
+ ["EXP","exp","exp(1.0)","2.718282",0],
["FLOOR","floor","floor(2.5)","2",0],
["LOG","log","log(2)","0.693147",0],
["LOG10","log10","log10(10)","1",0],
@@ -1047,7 +1048,11 @@ if ($limits{'functions'} eq 'yes')
print "\n";
report("mixing of integer and float in expression","float_int_expr",
"select 1+1.0 $end_query");
-
+ if ($limits{'func_odbc_exp'} eq 'yes')
+ {
+ report("No need to cast from integer to float",
+ "dont_require_cast_to_float", "select exp(1) $end_query");
+ }
check_and_report("Is 1+NULL = NULL","null_num_expr",
[],"select 1+$numeric_null $end_query",[],undef(),4);
$tmp=sql_concat("'a'",$char_null);
@@ -1269,9 +1274,10 @@ report("temporary tables",'tempoary_table',
"create temporary table crash_q (q integer not null)",
"drop table crash_q");
-report("create table from select",'create_table_select',
- "create table crash_q SELECT * from crash_me",
- "drop table crash_q");
+report_one("create table from select",'create_table_select',
+ [["create table crash_q SELECT * from crash_me","yes"],
+ ["create table crash_q AS SELECT * from crash_me","with AS"]]);
+$dbh->do("drop table crash_q");
report("index in create table",'index_in_create',
"create table crash_q (q integer not null,index (q))",
@@ -1628,9 +1634,9 @@ if (!report("many tables to drop table","multi_drop",
}
-report("-- as comment","comment_--",
+report("-- as comment (ANSI)","comment_--",
"select * from crash_me -- Testing of comments");
-report("// as comment","comment_//",
+report("// as comment (ANSI)","comment_//",
"select * from crash_me // Testing of comments");
report("# as comment","comment_#",
"select * from crash_me # Testing of comments");
diff --git a/sql-bench/limits/mysql-3.23.cfg b/sql-bench/limits/mysql-3.23.cfg
index 3dde8039f1a..186d1e740eb 100644
--- a/sql-bench/limits/mysql-3.23.cfg
+++ b/sql-bench/limits/mysql-3.23.cfg
@@ -1,4 +1,4 @@
-#This file is automaticly generated by crash-me 1.49
+#This file is automaticly generated by crash-me 1.50
NEG=yes # update of column= -column
Need_cast_for_null=no # Need to cast NULL for arithmetic
@@ -27,16 +27,16 @@ column_alias=yes # Column alias
columns_in_group_by=+64 # number of columns in group by
columns_in_order_by=+64 # number of columns in order by
comment_#=yes # # as comment
-comment_--=yes # -- as comment
+comment_--=yes # -- as comment (ANSI)
comment_/**/=yes # /* */ as comment
-comment_//=no # // as comment
+comment_//=no # // as comment (ANSI)
compute=no # Compute
connections=30 # Simultaneous connections (installation default)
constraint_check=no # Column constraints
constraint_check_table=no # Table constraints
constraint_null=yes # NULL constraint (SyBase style)
-crash_me_safe=no # crash me safe
-crash_me_version=1.49 # crash me version
+crash_me_safe=yes # crash me safe
+crash_me_version=1.50 # crash me version
create_default=yes # default value for column
create_default_func=no # default value function for column
create_if_not_exists=yes # create table if not exists
@@ -51,6 +51,7 @@ date_one=yes # Supports 0001-01-01 dates
date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates
date_zero=yes # Supports 0000-00-00 dates
domains=no # Domains (ANSI SQL)
+dont_require_cast_to_float=yes # No need to cast from integer to float
double_quotes=yes # Double '' as ' in strings
drop_if_exists=yes # drop table if exists
drop_index=with 'ON' # drop index
diff --git a/sql-bench/limits/mysql.cfg b/sql-bench/limits/mysql.cfg
index 3dde8039f1a..186d1e740eb 100644
--- a/sql-bench/limits/mysql.cfg
+++ b/sql-bench/limits/mysql.cfg
@@ -1,4 +1,4 @@
-#This file is automaticly generated by crash-me 1.49
+#This file is automaticly generated by crash-me 1.50
NEG=yes # update of column= -column
Need_cast_for_null=no # Need to cast NULL for arithmetic
@@ -27,16 +27,16 @@ column_alias=yes # Column alias
columns_in_group_by=+64 # number of columns in group by
columns_in_order_by=+64 # number of columns in order by
comment_#=yes # # as comment
-comment_--=yes # -- as comment
+comment_--=yes # -- as comment (ANSI)
comment_/**/=yes # /* */ as comment
-comment_//=no # // as comment
+comment_//=no # // as comment (ANSI)
compute=no # Compute
connections=30 # Simultaneous connections (installation default)
constraint_check=no # Column constraints
constraint_check_table=no # Table constraints
constraint_null=yes # NULL constraint (SyBase style)
-crash_me_safe=no # crash me safe
-crash_me_version=1.49 # crash me version
+crash_me_safe=yes # crash me safe
+crash_me_version=1.50 # crash me version
create_default=yes # default value for column
create_default_func=no # default value function for column
create_if_not_exists=yes # create table if not exists
@@ -51,6 +51,7 @@ date_one=yes # Supports 0001-01-01 dates
date_with_YY=yes # Supports YY-MM-DD 2000 compilant dates
date_zero=yes # Supports 0000-00-00 dates
domains=no # Domains (ANSI SQL)
+dont_require_cast_to_float=yes # No need to cast from integer to float
double_quotes=yes # Double '' as ' in strings
drop_if_exists=yes # drop table if exists
drop_index=with 'ON' # drop index
diff --git a/sql-bench/print-limit-table b/sql-bench/print-limit-table
index 787eb88ae07..183f2453175 100755
--- a/sql-bench/print-limit-table
+++ b/sql-bench/print-limit-table
@@ -161,7 +161,7 @@ print_match("Order by and group by","order|having|group");
print_match("Join methods",'join|subqueries|multi_table|select_table_update');
print_match("String handling","string|select_constant|quote_with|double_quotes|end_space");
print_match("Quoting","quote");
-print_match("Name limits","name");
+print_match("Name limits","name","alter");
print_match("Index limits",'index|primary|unique');
print_match("Type limits",'char|float|binary|text_size|date|end_space');
print_match("Expression limits",'expression|conditions|select_limit');
diff --git a/sql-bench/test-insert.sh b/sql-bench/test-insert.sh
index 129c37fac03..ec269df5d3b 100755
--- a/sql-bench/test-insert.sh
+++ b/sql-bench/test-insert.sh
@@ -901,6 +901,16 @@ if ($limits->{'insert_select'})
$end_time=new Benchmark;
print "Time for drop table(2): " .
timestr(timediff($end_time, $loop_time),"all") . "\n";
+
+ if ($opt_fast && defined($server->{vacuum}))
+ {
+ $server->vacuum(1,\$dbh);
+ }
+ if ($server->small_rollback_segment())
+ {
+ $dbh->disconnect; # close connection
+ $dbh = $server->connect();
+ }
}
diff --git a/sql/field.cc b/sql/field.cc
index 4ef95d6e102..67bc84c0e3b 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -4550,7 +4550,7 @@ Field *make_field(char *ptr, uint32 field_length,
/* Create a field suitable for create of table */
-create_field::create_field(Field *old_field,bool ignore_default)
+create_field::create_field(Field *old_field,Field *orig_field)
{
field= old_field;
field_name=change=old_field->field_name;
@@ -4574,15 +4574,24 @@ create_field::create_field(Field *old_field,bool ignore_default)
interval= ((Field_enum*) old_field)->typelib;
else
interval=0;
- if (!ignore_default && !old_field->is_real_null() && ! (flags & BLOB_FLAG) &&
- old_field->type() != FIELD_TYPE_TIMESTAMP && old_field->ptr)
+ if (!old_field->is_real_null() && ! (flags & BLOB_FLAG) &&
+ old_field->type() != FIELD_TYPE_TIMESTAMP && old_field->ptr &&
+ orig_field)
{
char buff[MAX_FIELD_WIDTH],*pos;
- String tmp(buff,sizeof(buff));
- field->val_str(&tmp,&tmp);
- pos= (char*) sql_memdup(tmp.ptr(),tmp.length()+1);
- pos[tmp.length()]=0;
- def=new Item_string(pos,tmp.length());
+ String tmp(buff,sizeof(buff)),*res;
+
+ /* Get the value from record[2] (the default value row) */
+ my_ptrdiff_t diff= (my_ptrdiff_t) (orig_field->table->rec_buff_length*2);
+ orig_field->move_field(diff); // Points now at record[2]
+ res=orig_field->val_str(&tmp,&tmp);
+ orig_field->move_field(-diff); // Back to record[0]
+ if (res) // If not NULL value
+ {
+ pos= (char*) sql_memdup(tmp.ptr(),tmp.length()+1);
+ pos[tmp.length()]=0;
+ def=new Item_string(pos,tmp.length());
+ }
}
else
def=0;
diff --git a/sql/field.h b/sql/field.h
index 075e0feea96..a50c6efa5d6 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -986,7 +986,7 @@ public:
uint8 row,col,sc_length,interval_id; // For rea_create_table
uint offset,pack_flag;
create_field() :after(0) {}
- create_field(Field *field,bool ignore_default=0);
+ create_field(Field *field, Field *orig_field);
};
diff --git a/sql/log.cc b/sql/log.cc
index c5e5c8ff7a1..d245f49bf7d 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -578,7 +578,7 @@ void MYSQL_LOG::write(THD *thd,const char *query, uint query_length,
/* For slow query log */
if (!(specialflag & SPECIAL_LONG_LOG_FORMAT))
current_time=time(NULL);
- fprintf(file,"# Time: %lu Lock_time: %lu Rows_sent %lu\n",
+ fprintf(file,"# Time: %lu Lock_time: %lu Rows_sent: %lu\n",
(ulong) (current_time - query_start),
(ulong) (thd->time_after_lock - query_start),
(ulong) thd->sent_row_count);
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 5d1aad66954..3e717ce4d6c 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -264,22 +264,22 @@ void Log_event::print_header(FILE* file)
fprintf(file, " server id %ld ", server_id);
}
-void Log_event::print_timestamp(FILE* file, time_t* ts = 0)
+void Log_event::print_timestamp(FILE* file, time_t* ts)
{
- struct tm tm_tmp;
- if(!ts)
- {
- ts = &when;
- }
- localtime_r(ts,&tm_tmp);
-
- fprintf(file,"%02d%02d%02d %2d:%02d:%02d",
- tm_tmp.tm_year % 100,
- tm_tmp.tm_mon+1,
- tm_tmp.tm_mday,
- tm_tmp.tm_hour,
- tm_tmp.tm_min,
- tm_tmp.tm_sec);
+ struct tm tm_tmp;
+ if (!ts)
+ {
+ ts = &when;
+ }
+ localtime_r(ts,&tm_tmp);
+
+ fprintf(file,"%02d%02d%02d %2d:%02d:%02d",
+ tm_tmp.tm_year % 100,
+ tm_tmp.tm_mon+1,
+ tm_tmp.tm_mday,
+ tm_tmp.tm_hour,
+ tm_tmp.tm_min,
+ tm_tmp.tm_sec);
}
diff --git a/sql/mysqlbinlog.cc b/sql/mysqlbinlog.cc
index 505604ea7d4..5c94d5d5a57 100644
--- a/sql/mysqlbinlog.cc
+++ b/sql/mysqlbinlog.cc
@@ -327,7 +327,7 @@ static void dump_local_log_entries(const char* logname)
if(!position)
{
char magic[4];
- if(my_fread(file, magic, sizeof(magic), MYF(MY_NABP|MY_WME)))
+ if(my_fread(file, (byte*) magic, sizeof(magic), MYF(MY_NABP|MY_WME)))
die("I/O error reading binlog magic number");
if(memcmp(magic, BINLOG_MAGIC, 4))
die("Bad magic number");
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index b794bff4075..aaeb056e30b 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -2915,12 +2915,11 @@ static void get_options(int argc,char **argv)
default_table_type=DB_TYPE_ISAM;
myisam_delay_key_write=0;
myisam_concurrent_insert=0;
- myisam_recover_options= 0;
+ myisam_recover_options= HA_RECOVER_NONE;
break;
case (int) OPT_SAFE:
opt_specialflag|= SPECIAL_SAFE_MODE;
myisam_delay_key_write=0;
- myisam_concurrent_insert=0;
myisam_recover_options= HA_RECOVER_NONE; // To be changed
break;
case (int) OPT_SKIP_CONCURRENT_INSERT:
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 03b799aee7d..ab42d393925 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -33,8 +33,8 @@ TABLE *unused_tables; /* Used by mysql_test */
HASH open_cache; /* Used by mysql_test */
-static int open_unireg_entry(TABLE *entry,const char *db,const char *name,
- const char *alias, bool locked);
+static int open_unireg_entry(THD *thd,TABLE *entry,const char *db,
+ const char *name, const char *alias, bool locked);
static bool insert_fields(THD *thd,TABLE_LIST *tables, const char *table_name,
List_iterator<Item> *it);
static void free_cache_entry(TABLE *entry);
@@ -572,7 +572,7 @@ TABLE *reopen_name_locked_table(THD* thd, TABLE_LIST* table_list)
key_length=(uint) (strmov(strmov(key,db)+1,table_name)-key)+1;
pthread_mutex_lock(&LOCK_open);
- if (open_unireg_entry(table, db, table_name, table_name,0) ||
+ if (open_unireg_entry(thd, table, db, table_name, table_name,0) ||
!(table->table_cache_key =memdup_root(&table->mem_root,(char*) key,
key_length)))
{
@@ -706,7 +706,7 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
/* make a new table */
if (!(table=(TABLE*) my_malloc(sizeof(*table),MYF(MY_WME))))
DBUG_RETURN(NULL);
- if (open_unireg_entry(table,db,table_name,alias,0) ||
+ if (open_unireg_entry(thd, table,db,table_name,alias,0) ||
!(table->table_cache_key=memdup_root(&table->mem_root,(char*) key,
key_length)))
{
@@ -816,7 +816,8 @@ bool reopen_table(TABLE *table,bool locked)
if (!locked)
VOID(pthread_mutex_lock(&LOCK_open));
- if (open_unireg_entry(&tmp,db,table_name,table->table_name,locked))
+ if (open_unireg_entry(current_thd,&tmp,db,table_name,table->table_name,
+ locked))
goto end;
free_io_cache(table);
@@ -1110,10 +1111,11 @@ void abort_locked_tables(THD *thd,const char *db, const char *table_name)
** Purpose : Load a table definition from file and open unireg table
** Args : entry with DB and table given
** Returns : 0 if ok
+** Note that the extra argument for open is taken from thd->open_options
*/
-static int open_unireg_entry(TABLE *entry,const char *db,const char *name,
- const char *alias, bool locked)
+static int open_unireg_entry(THD *thd, TABLE *entry, const char *db,
+ const char *name, const char *alias, bool locked)
{
char path[FN_REFLEN];
int error;
@@ -1124,10 +1126,8 @@ static int open_unireg_entry(TABLE *entry,const char *db,const char *name,
(uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE | HA_GET_INDEX |
HA_TRY_READ_ONLY),
READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD,
- ha_open_options,
- entry))
+ thd->open_options, entry))
{
- THD *thd=current_thd;
if (!entry->crashed)
goto err; // Can't repair the table
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 31d54a621ac..b65c5d1978f 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -96,6 +96,7 @@ THD::THD()
start_time=(time_t) 0;
last_nx_table = last_nx_db = 0;
inactive_timeout=net_wait_timeout;
+ open_options=ha_open_options;
cond_count=0;
command=COM_CONNECT;
set_query_id=1;
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 751fdfc1a0d..4ba3ee87144 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -287,7 +287,7 @@ public:
long dbug_thread_id;
pthread_t real_id;
uint current_tablenr,tmp_table,cond_count,col_access,query_length;
- uint server_status;
+ uint server_status,open_options;
char scramble[9];
bool set_query_id,locked,count_cuted_fields,some_tables_deleted;
bool no_errors, allow_sum_func, password, fatal_error;
@@ -300,6 +300,7 @@ public:
bool store_globals();
inline time_t query_start() { query_start_used=1; return start_time; }
inline void set_time() { if (!user_time) time_after_lock=time(&start_time); }
+ inline void end_time() { time(&start_time); }
inline void set_time(time_t t) { time_after_lock=start_time=t; user_time=1; }
inline void lock_time() { time(&time_after_lock); }
inline void insert_id(ulonglong id)
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index eecd33ccf5f..ca8a7b5fe14 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -807,13 +807,15 @@ bool do_command(THD *thd)
send_error(net,0); // End of memory ?
time_t start_of_query=thd->start_time;
- thd->set_time();
+ thd->end_time(); // Set start time
/* If not reading from backup and if the query took too long */
- if (!thd->user_time &&
- (ulong) (thd->start_time - start_of_query) > long_query_time)
+ if (!thd->user_time)
{
- long_query_count++;
- mysql_slow_log.write(thd, thd->query, thd->query_length, start_of_query);
+ if ((ulong) (thd->start_time - thd->time_after_lock) > long_query_time)
+ {
+ long_query_count++;
+ mysql_slow_log.write(thd, thd->query, thd->query_length, start_of_query);
+ }
}
VOID(pthread_mutex_lock(&LOCK_thread_count)); // For process list
thd->proc_info=0;
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc
index 0b955f43f1e..53a5b00d084 100644
--- a/sql/sql_repl.cc
+++ b/sql/sql_repl.cc
@@ -131,7 +131,7 @@ void mysql_binlog_send(THD* thd, char* log_ident, ulong pos, ushort flags)
goto err;
}
- if(my_fread(log, magic, sizeof(magic), MYF(MY_NABP|MY_WME)))
+ if(my_fread(log, (byte*) magic, sizeof(magic), MYF(MY_NABP|MY_WME)))
{
errmsg = "I/O error reading binlog magic number";
goto err;
@@ -321,7 +321,7 @@ sweepstakes if you report the bug";
}
//check the magic
- if(my_fread(log, magic, sizeof(magic), MYF(MY_NABP|MY_WME)))
+ if(my_fread(log, (byte*) magic, sizeof(magic), MYF(MY_NABP|MY_WME)))
{
errmsg = "I/O error reading binlog magic number";
goto err;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index a804870a69e..7fcecb8b24d 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -399,6 +399,11 @@ mysql_select(THD *thd,TABLE_LIST *tables,List<Item> &fields,COND *conds,
}
if (join.const_tables && !thd->locked_tables)
mysql_unlock_some_tables(thd, join.table,join.const_tables);
+ if (!conds && join.outer_join)
+ {
+ /* Handle the case where we have an OUTER JOIN without a WHERE */
+ conds=new Item_int((longlong) 1,1); // Always true
+ }
select=make_select(*join.table, join.const_table_map,
join.const_table_map,conds,&error);
if (error)
@@ -856,6 +861,7 @@ make_join_statistics(JOIN *join,TABLE_LIST *tables,COND *conds,
}
}
stat_vector[i]=0;
+ join->outer_join=outer_join;
/*
** If outer join: Re-arrange tables in stat_vector so that outer join
@@ -1553,12 +1559,14 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
double best,best_time,records;
best=best_time=records=DBL_MAX;
KEYUSE *best_key=0;
+ uint best_max_key_part=0;
if (s->keyuse)
{ /* Use key if possible */
TABLE *table=s->table;
KEYUSE *keyuse,*start_key=0;
double best_records=DBL_MAX;
+ uint max_key_part=0;
/* Test how we can use keys */
rec= s->records/MATCHING_ROWS_IN_OTHER_TABLE; /* Assumed records/key */
@@ -1576,34 +1584,34 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
uint keypart=keyuse->keypart;
do
{
- if(!ft_key)
+ if (!ft_key)
{
- table_map map;
- if (!(rest_tables & keyuse->used_tables))
- {
- found_part|= (key_part_map) 1 << keypart;
- found_ref|= keyuse->used_tables;
- }
- /*
- ** If we find a ref, assume this table matches a proportional
- ** part of this table.
- ** For example 100 records matching this table with 5000 records
- ** gives 5000/100 = 50 records per key
- ** Constant tables are ignored and to avoid bad matches,
- ** we don't make rec less than 100.
- */
- if (keyuse->used_tables &
- (map=(keyuse->used_tables & ~join->const_table_map)))
- {
- uint tablenr;
- for (tablenr=0 ; ! (map & 1) ; map>>=1, tablenr++) ;
- if (map == 1) // Only one table
+ table_map map;
+ if (!(rest_tables & keyuse->used_tables))
{
- TABLE *tmp_table=join->all_tables[tablenr];
- if (rec > tmp_table->file->records && rec > 100)
- rec=max(tmp_table->file->records,100);
+ found_part|= (key_part_map) 1 << keypart;
+ found_ref|= keyuse->used_tables;
+ }
+ /*
+ ** If we find a ref, assume this table matches a proportional
+ ** part of this table.
+ ** For example 100 records matching a table with 5000 records
+ ** gives 5000/100 = 50 records per key
+ ** Constant tables are ignored and to avoid bad matches,
+ ** we don't make rec less than 100.
+ */
+ if (keyuse->used_tables &
+ (map=(keyuse->used_tables & ~join->const_table_map)))
+ {
+ uint tablenr;
+ for (tablenr=0 ; ! (map & 1) ; map>>=1, tablenr++) ;
+ if (map == 1) // Only one table
+ {
+ TABLE *tmp_table=join->all_tables[tablenr];
+ if (rec > tmp_table->file->records && rec > 100)
+ rec=max(tmp_table->file->records,100);
+ }
}
- }
}
keyuse++;
} while (keyuse->table == table && keyuse->key == key &&
@@ -1637,6 +1645,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
*/
if (found_part == PREV_BITS(uint,keyinfo->key_parts))
{ /* use eq key */
+ max_key_part= (uint) ~0;
if ((keyinfo->flags & (HA_NOSAME | HA_NULL_PART_KEY)) == HA_NOSAME)
{
tmp=prev_record_reads(join,found_ref);
@@ -1686,7 +1695,7 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
if ((found_part & 1) &&
!(table->file->option_flag() & HA_ONLY_WHOLE_INDEX))
{
- uint max_key_part=max_part_bit(found_part);
+ max_key_part=max_part_bit(found_part);
/* Check if quick_range could determinate how many rows we
will match */
@@ -1754,11 +1763,19 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
best=tmp;
best_records=records;
best_key=start_key;
+ best_max_key_part=max_key_part;
}
}
records=best_records;
}
- if (records >= s->found_records || best > s->read_time)
+
+ /*
+ Don't test table scan if it can't be better.
+ Prefer key lookup if we would use the same key for scanning.
+ */
+ if ((records >= s->found_records || best > s->read_time) &&
+ !(s->quick && best_key && s->quick->index == best_key->key &&
+ best_max_key_part >= s->table->quick_key_parts[best_key->key]))
{ // Check full join
if (s->on_expr)
{
@@ -1775,6 +1792,10 @@ find_best(JOIN *join,table_map rest_tables,uint idx,double record_count,
(tmp + record_count/(double) TIME_FOR_COMPARE*s->found_records <
best + record_count/(double) TIME_FOR_COMPARE*records))
{
+ /*
+ If the table has a range (s->quick is set) make_join_select()
+ will ensure that this will be used
+ */
best=tmp;
records=s->found_records;
best_key=0;
@@ -2193,6 +2214,14 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
table_map current_map= tab->table->map;
used_tables|=current_map;
COND *tmp=make_cond_for_table(cond,used_tables,current_map);
+ if (!tmp && tab->quick)
+ { // Outer join
+ /*
+ Hack to handle the case where we only refer to a table
+ in the ON part of an OUTER JOIN.
+ */
+ tmp=new Item_int((longlong) 1,1); // Always true
+ }
if (tmp)
{
DBUG_EXECUTE("where",print_where(tmp,tab->table->table_name););
@@ -2204,6 +2233,8 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
sel->head=tab->table;
if (tab->quick)
{
+ /* Use quick key read if it's a constant and it's not used
+ with key reading */
if (tab->needed_reg == 0 && tab->type != JT_EQ_REF &&
(tab->type != JT_REF ||
(uint) tab->ref.key == tab->quick->index))
@@ -2231,19 +2262,23 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
DBUG_RETURN(1); // Impossible range
/*
We plan to scan all rows.
- Check again if we should use an index instead if
- we could have used an column from a previous table in
- the index or if we are using limit and this is the first table
+ Check again if we should use an index.
+ We could have used an column from a previous table in
+ the index if we are using limit and this is the first table
*/
if ((tab->keys & ~ tab->const_keys && i > 0) ||
tab->const_keys && i == join->const_tables &&
join->thd->select_limit < join->best_positions[i].records_read)
{
+ /* Join with outer join condition */
+ COND *orig_cond=sel->cond;
+ sel->cond=and_conds(sel->cond,tab->on_expr);
if (sel->test_quick_select(tab->keys,
used_tables & ~ current_map,
join->thd->select_limit) < 0)
- DBUG_RETURN(1); // Impossible range
+ DBUG_RETURN(1); // Impossible range
+ sel->cond=orig_cond;
}
else
{
diff --git a/sql/sql_select.h b/sql/sql_select.h
index 4bee0bf2c3d..8ac00dde4c5 100644
--- a/sql/sql_select.h
+++ b/sql/sql_select.h
@@ -147,7 +147,7 @@ class JOIN {
uint tables,const_tables;
uint send_group_parts;
bool sort_and_group,first_record,full_join,group, no_field_update;
- table_map const_table_map;
+ table_map const_table_map,outer_join;
ha_rows send_records,found_records;
POSITION positions[MAX_TABLES+1],best_positions[MAX_TABLES+1];
double best_read;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 2343e06b12a..23c0f1d05ec 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -620,7 +620,10 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
Field *field=create_tmp_field(&tmp_table,item,item->type(),
(Item_result_field***) 0, &tmp_field,0,0);
- if (!field || !(cr_field=new create_field(field,1)))
+ if (!field ||
+ !(cr_field=new create_field(field,(item->type() == Item::FIELD_ITEM ?
+ ((Item_field *)item)->field : NULL)
+ )))
DBUG_RETURN(0);
extra_fields->push_back(cr_field);
}
@@ -833,9 +836,13 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
{
char table_name[NAME_LEN*2+2];
char* db = (table->db) ? table->db : thd->db;
+ bool fatal_error=0;
strxmov(table_name,db ? db : "",".",table->name,NullS);
+ if (operator_func == &handler::repair || operator_func == &handler::check)
+ thd->open_options|= HA_OPEN_FOR_REPAIR;
table->table = open_ltable(thd, table, lock_type);
+ thd->open_options&= ~HA_OPEN_FOR_REPAIR;
packet->length(0);
if (operator_func == &handler::restore)
{
@@ -909,6 +916,7 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
case HA_ADMIN_CORRUPT:
net_store_data(packet, "error");
net_store_data(packet, "Corrupt");
+ fatal_error=1;
break;
case HA_ADMIN_INVALID:
@@ -919,8 +927,11 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
default: // Probably HA_ADMIN_INTERNAL_ERROR
net_store_data(packet, "error");
net_store_data(packet, "Unknown - internal error during operation");
+ fatal_error=1;
break;
}
+ if (fatal_error)
+ table->table->flush_version=0; // Force close of table
close_thread_tables(thd);
if (my_net_write(&thd->net, (char*) packet->ptr(),
packet->length()))
@@ -1150,7 +1161,7 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
}
else
{ // Use old field value
- create_list.push_back(def=new create_field(field));
+ create_list.push_back(def=new create_field(field,field));
if (def->sql_type == FIELD_TYPE_TIMESTAMP)
use_timestamp=1;
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index ae1296153e5..6e4d8a3d279 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -509,7 +509,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
flush_options flush_option insert_lock_option replace_lock_option
equal optional_braces opt_key_definition key_usage_list2
opt_mi_check_type opt_to mi_check_types normal_join
- table_to_table_list table_to_table opt_table_list
+ table_to_table_list table_to_table opt_table_list opt_as
END_OF_INPUT
%type <NONE>
@@ -673,13 +673,17 @@ create2:
| opt_create_table_options create3 {}
create3:
- /* empty*/ {}
- | opt_duplicate SELECT_SYM
+ /* empty */ {}
+ | opt_duplicate opt_as SELECT_SYM
{
mysql_init_select(Lex);
}
select_options select_item_list opt_select_from {}
+opt_as:
+ /* empty */ {}
+ | AS {}
+
opt_table_options:
/* empty */ { $$= 0; }
| table_options { $$= $1;}