mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
2c036ff7b9
Portability fixes sql-bench/bench-init.pl.sh: Change mode to -rw-rw-r-- sql-bench/compare-results.sh: Change mode to -rw-rw-r-- sql-bench/run-all-tests.sh: Change mode to -rw-rw-r-- sql-bench/test-ATIS.sh: Change mode to -rw-rw-r-- sql-bench/test-alter-table.sh: Change mode to -rw-rw-r-- sql-bench/test-big-tables.sh: Change mode to -rw-rw-r-- sql-bench/test-connect.sh: Change mode to -rw-rw-r-- sql-bench/test-create.sh: Change mode to -rw-rw-r-- sql-bench/test-select.sh: Change mode to -rw-rw-r-- sql-bench/test-wisconsin.sh: Change mode to -rw-rw-r-- Docs/manual.texi: Added documentation for perror myisam/mi_check.c: Portability fix mysql-test/chew_on_this/select.res: ***MISSING WEAVE*** scripts/mysqlhotcopy.sh: Added --noindices sql-bench/Results/ATIS-mysql-Linux_2.2.13_SMP_alpha: New benchmark results sql-bench/Results/RUN-mysql-Linux_2.2.13_SMP_alpha: New benchmark results sql-bench/Results/alter-table-mysql-Linux_2.2.13_SMP_alpha: New benchmark results sql-bench/Results/big-tables-mysql-Linux_2.2.13_SMP_alpha: New benchmark results sql-bench/Results/connect-mysql-Linux_2.2.13_SMP_alpha: New benchmark results sql-bench/Results/create-mysql-Linux_2.2.13_SMP_alpha: New benchmark results sql-bench/Results/insert-mysql-Linux_2.2.13_SMP_alpha: New benchmark results sql-bench/Results/select-mysql-Linux_2.2.13_SMP_alpha: New benchmark results sql-bench/Results/wisconsin-mysql-Linux_2.2.13_SMP_alpha: New benchmark results sql-bench/copy-db.sh: Changed multi_value_insert -> insert_multi_value sql-bench/crash-me.sh: Changed multi_value_insert -> insert_multi_value sql-bench/limits/Adabas.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/access.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/access_odbc.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/frontbase.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/interbase.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/mimer.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/ms-sql.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/msql.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/mysql-3.22.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/mysql-3.23.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/mysql.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/oracle.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/limits/pg.cfg: Changed multi_value_insert -> insert_multi_value sql-bench/print-limit-table: Better groups sql-bench/server-cfg.sh: Changed multi_value_insert -> insert_multi_value sql-bench/test-insert.sh: Changed multi_value_insert -> insert_multi_value sql/ha_myisam.cc: Added warning of number of rows changed in optimize sql/mysqlbinlog.cc: Portability fix sql/mysqld.cc: Changed mysqld to take less stack and safer shutdown sql/share/swedish/errmsg.OLD: update sql/sql_base.cc: Fixed 'drop table' bug sql/sql_parse.cc: Fixed bug in 'TRUNCATE' sql/sql_show.cc: Don't lock keycache when you do 'show variables'
364 lines
11 KiB
Perl
Executable file
364 lines
11 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Library General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2 of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Library General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Library General Public
|
|
# License along with this library; if not, write to the Free
|
|
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
|
# MA 02111-1307, USA
|
|
#
|
|
# Output a html table with a compare of all servers
|
|
#
|
|
$cmp_server="mysql"; # Get limit names from here
|
|
$full_html=1;
|
|
$opt_txt=0;
|
|
|
|
if ($#ARGV < 0)
|
|
{
|
|
@ARGV=glob("limits/*.cfg");
|
|
$skip_header=0;
|
|
}
|
|
else
|
|
{
|
|
$skip_header=1;
|
|
}
|
|
|
|
foreach (@ARGV)
|
|
{
|
|
/([^\/\.]*)\.cfg$/;
|
|
$server=$1;
|
|
if ($server eq $cmp_server)
|
|
{
|
|
unshift(@limits,read_config_data($server,$_));
|
|
}
|
|
else
|
|
{
|
|
push(@limits,read_config_data($server,$_));
|
|
}
|
|
}
|
|
|
|
@global_limits= sort keys(%all_limits);
|
|
find_match('group_functions|functions'); # Don't report these
|
|
|
|
if ($full_html)
|
|
{
|
|
if (!$skip_header)
|
|
{
|
|
print "<!doctype HTML public \"-//W3O//DTD W3 HTML3.0//EN\"><HTML>";
|
|
}
|
|
print <<EOF;
|
|
<!doctype HTML public \"-//W3O//DTD W3 HTML3.0//EN\"><HTML>
|
|
<HEAD><TITLE>Database comparison table</TITLE></HEAD>
|
|
<BODY>
|
|
<center><h3>Database comparison table generated with <B>crash-me</B></h3></center>
|
|
<table><tr><td><IMG SRC="icons/mysql-03.gif" ALT=logo></td>
|
|
<td>You can get a copy of <B>crash-me</B> from the MySQL 3.23 distribution at
|
|
<A HREF="http://www.mysql.com">http://www.mysql.com</A>.
|
|
</td></tr></table>
|
|
<br>
|
|
<strong>crash-me</strong> is a program that automatically detects
|
|
limits and capabilities in a SQL server. We at TCX have worked very
|
|
hard to make crash-me as fair and accurate as possible, but there is
|
|
always a small possibility that some particular tests fails for some
|
|
database, even if the database has the capability. We are always
|
|
willing to correct this as soon as this comes to our attention. Some
|
|
tests may fail because the database in questions does not follow
|
|
<B>ANSI SQL 99</B> or <B>ODBC 3.0</B> but in this case we regard this
|
|
as a failure in the database.
|
|
<br><br>
|
|
Note that crash-me test the <B>ODBC</B> functionality by executing
|
|
SQL commands through the perl DBD driver. As some SQL servers implements
|
|
the <B>ODBC</B> functionality in the <B>ODBC</B> driver, crash-me may
|
|
tell you that the SQL server doesn\'t support some functionality, even
|
|
if this is supported when you are using the SQL server through <B>ODBC</B>.
|
|
<br><br>
|
|
Note that even if crash-me reports that some feature is missing, not
|
|
supported, or doesn\'t work it doesn\'t mean that the SQL server
|
|
doesn\'t follow the SQL standard or that you can\'t do the operation
|
|
in some other way. crash-me just tells you how the SQL server works
|
|
if you send it some specific query. The result is however often useful
|
|
for applications writers that tries to write portable code and needs to be
|
|
aware of the differences between different SQL servers.
|
|
<br><br>
|
|
TCX is trying to add as much tests to the crash-me program as they can
|
|
but it\'s always possible that some database vendor specific functions
|
|
/ queries aren\'t tested. If you find some entries not tested on a
|
|
database please let us know and try to patch the crash-me program your
|
|
self or give us some example queries so we can add those entries. We
|
|
are always open for suggestions for adding things to the crash-me
|
|
program. The crash-me program is also our input reference for the
|
|
MySQL benchmark program.<br>
|
|
|
|
<B>Note:</B>
|
|
The crash-me table is generated from databases started with default
|
|
parameters. If this is not the case, this is noted in the comment row.
|
|
Some detected limits may also be configurable, OS dependent, depend of the
|
|
Perl DBI driver or depending on the license of the used database version.
|
|
<BR><BR>
|
|
The following markers are used in the comparison table
|
|
<table border=1>
|
|
<tr><th>Marker</th><th>Description</th></tr>
|
|
<tr><td><IMG SRC=\"images/ok.gif\" WIDTH=20 HEIGHT=16 ALT=\"yes\"></td>
|
|
<td>Function is supported</td></tr>
|
|
<tr><td><IMG SRC=\"images/no.gif\" WIDTH=14 HEIGHT=14 ALT=\"no\"></td>
|
|
<td>Function is not supported</td></tr>
|
|
<tr><td><IMG SRC=\"images/error.gif\" WIDTH=20 HEIGHT=16 ALT=\"error\"></td>
|
|
<td>Function exists but didn\'t return expected result. This usually means that
|
|
the database is using some non standard extension for the option in question</td></tr>
|
|
<tr><td>ignored</td><td>Function doesn\'t give an error from the server but it
|
|
doesn\'t do anything. One can probably do the same action with some other
|
|
command</td></tr>
|
|
<tr><td>nonstandard</td><td>Function exists but doesn\'t work according to
|
|
<B>ANSI SQL 92</B> or <B>ODBC 3.0</B></td></tr>
|
|
<tr><td> </td><td>Not relevant or not tested with the database</td></tr>
|
|
<tr><td>+number</td><td>At least <b>number</b> operations is supported</td></tr>
|
|
<tr><td><IMG SRC=\"images/warning.gif\" WIDTH=28 HEIGHT=28 ALT=\"warning\"></td>
|
|
<td><B>Anyone with normal access to the database server can take it down, possible
|
|
forever!</B></td> </table>
|
|
|
|
<center><h3>The <B>crash-me</B> comparisons</h3></center>
|
|
EOF
|
|
}
|
|
|
|
print "<TABLE BORDER=2><TR ALIGN=left>\n";
|
|
#
|
|
# printer server names
|
|
#
|
|
|
|
$columns=$#limits+2;
|
|
print "<th>Function</th>\n";
|
|
foreach $server (@limits)
|
|
{
|
|
print "<td>$server->[1]->{'server_version'}</td>";
|
|
$server->[1]->{'server_version'} =~ /^(\S*)/;
|
|
push(@server_names,$1);
|
|
}
|
|
find_match("server_version"); # Mark used
|
|
print "</tr>\n";
|
|
|
|
print_match("Crash-me information",'crash_me|operating_system|user_comment',undef(),1);
|
|
print_match("ANSI SQL 92 types","type_sql");
|
|
print_match("ODBC 3.0 types","type_odbc");
|
|
print_match("Other types","type_extra");
|
|
print_match("Constraints and type modifiers","constraint|foreign|primary|unique|default","alter|max_unique");
|
|
print_match("ANSI SQL 92 functions","func_sql","group");
|
|
print_match("ODBC 3.0 functions","func_odbc","group");
|
|
print_match("Other functions","func_extra","group");
|
|
print_match("Functions in WHERE","func_where","group");
|
|
print_match("ANSI SQL 92 group functions","group_func_sql");
|
|
print_match("Other group functions","group_func");
|
|
print_match("Function use","NEG|minus_neg|like|null.*expr");
|
|
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","alter");
|
|
print_match("Index limits",'index|primary|unique');
|
|
print_match("Type limits",'char|float|text_size|date|end_space','atomic');
|
|
print_match("Expressions",'expression|conditions|select_limit|binary|hex|cast|logical|true_false');
|
|
print_match("Comments",'comment');
|
|
print_match("ALTER TABLE",'alter');
|
|
print_match("CREATE and DROP",'create|drop|rowid|temporary|domains|truncate');
|
|
print_match("SELECT",'alias|compute|select|table_wildcard');
|
|
print_match("Sets",'intersect|minus|union|except');
|
|
print_match("INSERT",'insert');
|
|
print_options("Other features");
|
|
print_match("Other limits",'\S');
|
|
|
|
print "</table>\n";
|
|
|
|
if ($full_html)
|
|
{
|
|
print <<EOF;
|
|
<BR>
|
|
This information is provided by TCX so one can get the real limitations from
|
|
the database server (not the information from sales managers!). Hopefully the
|
|
above information will make it easier for you to find a database server that
|
|
has the functionality you need and that you can rely on!
|
|
<BR><BR>
|
|
TCX will continue to extend <b>crash-me</b> and add more database servers
|
|
to the above chart. We are also very interested in new tests so if you have
|
|
any suggestions, please mail us (or even better, send us code).
|
|
<BR>
|
|
We are also working on the <B>MySQL</B> <A HREF ="/benchmark.html">benchmark</A>
|
|
to help users see how fast a database is when doing different typical things.
|
|
<br>
|
|
<IMG SRC="images/eyesleft.gif" HEIGHT=9 WIDTH=582 ALT="==============================================">
|
|
<ADDRESS> You can direct questions about crash-me and the benchmark to the
|
|
<A HREF=\"http://www.tcx.se/mail.html\">MySQL mailing list</A>.
|
|
</ADDRESS>
|
|
</BODY></HTML>
|
|
EOF
|
|
} exit 0;
|
|
|
|
|
|
sub read_config_data
|
|
{
|
|
my ($server,$file)=@_;
|
|
my (%limits,%prompts);
|
|
open(CONFIG_FILE,"<$file") ||
|
|
die "Can't open configure file $file\n";
|
|
while (<CONFIG_FILE>)
|
|
{
|
|
chomp;
|
|
if (/^(\S+)=([^\#]*[^\#\s])\s*(\# .*)*$/)
|
|
{
|
|
$all_limits{$1}=1;
|
|
$limits{$1}=$2;
|
|
$prompts{$1}=length($3) ? substr($3,2) : "";
|
|
}
|
|
elsif (!/^\s*$/ && !/^\#/)
|
|
{
|
|
die "Wrong config row: $_\n";
|
|
}
|
|
}
|
|
close CONFIG_FILE;
|
|
return ([$server,\%limits,\%prompts]);
|
|
}
|
|
|
|
|
|
sub find_match
|
|
{
|
|
my ($find,$find_not)=@_;
|
|
my ($key,@res);
|
|
|
|
foreach $key (@global_limits)
|
|
{
|
|
if ($key =~ /$find/ && (!defined($find_not) || !($key =~ /$find_not/)))
|
|
{
|
|
push(@res,$key);
|
|
$key="";
|
|
}
|
|
}
|
|
return @res;
|
|
}
|
|
|
|
|
|
sub print_match
|
|
{
|
|
my ($header,$match,$not_match,$no_server_names)=@_;
|
|
my ($key);
|
|
if ($opt_txt)
|
|
{
|
|
print "\n$header\n";
|
|
}
|
|
else
|
|
{
|
|
print "<tr><th colspan=$columns ALIGN=center>$header</th></tr>\n";
|
|
}
|
|
print_server_names() if (!$no_server_names);
|
|
foreach $key (find_match($match,$not_match))
|
|
{
|
|
print_key($key,$key eq "crash_me_safe" ? 1: 0);
|
|
}
|
|
}
|
|
|
|
|
|
sub print_options
|
|
{
|
|
my ($header)=@_;
|
|
if ($opt_txt)
|
|
{
|
|
print "\n$header\n";
|
|
}
|
|
else
|
|
{
|
|
print "<tr><th colspan=$columns ALIGN=center>$header</th></tr>\n";
|
|
}
|
|
print_server_names();
|
|
foreach $key (@global_limits)
|
|
{
|
|
if ($key && !($limits[0]->[1]{$key} =~ /^\d+$/))
|
|
{
|
|
print_key($key,0);
|
|
$key="";
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
sub print_key
|
|
{
|
|
my ($key,$fatal)=@_;
|
|
my ($i,$server,$option,$tmp);
|
|
$option=$key;
|
|
for ($i=0 ; $i < $columns ; $i++)
|
|
{
|
|
if ($limits[$i]->[2]{$key})
|
|
{
|
|
$option=$limits[$i]->[2]{$key};
|
|
last;
|
|
}
|
|
}
|
|
$option =~ s/>/>\;/g;
|
|
$option =~ s/</<\;/g;
|
|
|
|
if ($opt_txt)
|
|
{
|
|
print "\n$option\t";
|
|
foreach $server (@limits)
|
|
{
|
|
$tmp=$server->[1]->{$key};
|
|
$tmp="yes" if ($tmp eq "yes");
|
|
$tmp="no" if ($tmp eq "no" && !$fatal);
|
|
$tmp="warning" if ($tmp eq "no" && $fatal);
|
|
$tmp="error" if ($tmp eq "error");
|
|
$tmp="" if (!defined($tmp) || $tmp eq "");
|
|
print "\t$tmp";
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$option =~ s/ / /g;
|
|
print "<tr><td>$option</td>";
|
|
foreach $server (@limits)
|
|
{
|
|
$tmp=$server->[1]->{$key};
|
|
$tmp="<IMG SRC=\"images/ok.gif\" WIDTH=20 HEIGHT=16 ALT=\"yes\">" if ($tmp eq "yes" && !$fatal);
|
|
$tmp="<IMG SRC=\"images/thumbs_up.gif\" ALT=\"yes\">" if ($tmp eq "yes" && $fatal);
|
|
$tmp="<IMG SRC=\"images/no.gif\" WIDTH=14 HEIGHT=14 ALT=\"no\">" if ($tmp eq "no" && !$fatal);
|
|
$tmp="<IMG SRC=\"images/warning.gif\" WIDTH=28 HEIGHT=28 ALT=\"warning\">" if ($tmp eq "no" && $fatal);
|
|
$tmp="<IMG SRC=\"images/error.gif\" WIDTH=20 HEIGHT=16 ALT=\"error\">" if ($tmp eq "error");
|
|
$tmp=" " if (!defined($tmp) || $tmp eq "");
|
|
print "<td>$tmp</td>";
|
|
}
|
|
print"</tr>\n";
|
|
}
|
|
}
|
|
|
|
|
|
sub print_server_names
|
|
{
|
|
my ($server);
|
|
|
|
if ($opt_txt)
|
|
{
|
|
my $tab;
|
|
$tab="";
|
|
foreach $server (@server_names)
|
|
{
|
|
print "$tab$server";
|
|
$tab="\t";
|
|
}
|
|
print "\n";
|
|
}
|
|
else
|
|
{
|
|
print "<tr><th></th>";
|
|
foreach $server (@server_names)
|
|
{
|
|
print "<th>$server</th>";
|
|
}
|
|
print "</tr>\n";
|
|
}
|
|
}
|
|
|