Commit 08a2c58e authored by monty@donna.mysql.com's avatar monty@donna.mysql.com

Fixed bug in 'drop table'

Portability fixes
parent af297a21
......@@ -27761,6 +27761,7 @@ How big a @code{VARCHAR} column can be
* mysqldump:: Dumping the structure and data from @strong{MySQL} databases and tables
* mysqlimport:: Importing data from text files
* mysqlshow:: Showing databases, tables and columns
* perror:: Displaying error messages
* myisampack:: The @strong{MySQL} compressed read-only table generator
@end menu
......@@ -28559,7 +28560,7 @@ mysqldump --all-databases > all_databases.sql
@cindex files, text
@cindex text files, importing
@cindex @code{mysqlimport}
@node mysqlimport, mysqlshow, mysqldump, Tools
@node mysqlimport, perror, mysqldump, Tools
@section Importing Data from Text Files
@code{mysqlimport} provides a command-line interface to the @code{LOAD DATA
......@@ -28696,12 +28697,34 @@ $ mysql -e 'SELECT * FROM imptest' test
+------+---------------+
@end example
@cindex error messages, displaying
@cindex perror
@node perror, mysqlshow, mysqlimport, Tools
@section Converting an error code to the corresponding error message
@code{perror} can be used to print error message(s). @code{perror} can
be invoked like this:
@example
shell> perror [OPTIONS] [ERRORCODE [ERRORCODE...]]
For example:
shell> perror 64 79
Error code 64: Machine is not on the network
Error code 79: Can not access a needed shared library
@end example
@code{perror} can be used to display a description for a system error
code, or an MyISAM/ISAM table handler error code. The error messages
are mostly system dependent.
@cindex databases, displaying
@cindex displaying, database information
@cindex tables, displaying
@cindex columns, displaying
@cindex showing, database information
@node mysqlshow, myisampack, mysqlimport, Tools
@node mysqlshow, myisampack, perror, Tools
@section Showing Databases, Tables, and Columns
@code{mysqlshow} can be used to quickly look at which databases exist,
......@@ -32091,6 +32114,14 @@ tmpdir=C:/temp
assuming that the @file{c:\\temp} directory exists. @xref{Option files}.
Check also the error code that you get with @code{perror}. One reason
may also be a disk full error;
@example
shell >perror 28
Error code 28: No space left on device
@end example
@cindex commands out of sync
@node Commands out of sync, Ignoring user, Cannot create, Common errors
@subsection @code{Commands out of sync} error in client
......@@ -38932,10 +38963,12 @@ though, so Version 3.23 is not released as a stable version yet.
Automatically remove Berkeley DB transaction logs that are no longer in
use.
@item
Added a warning if number of rows changes on @code{REPAIR}/@code{OPTIMIZE}.
@item
Applied patches for OS2 by @code{Yuri Dario}.
@item
@code{FLUSH TABLES table_name} didn't always flush table properly to
disk; One some cases the index tree wasn't completely written to disk.
@code{FLUSH TABLES table_name} didn't always flush the index tree
properly to disk.
@item
@code{--bootstrap} is now run in a separate thread. This fixes the problem
that @code{mysql_install_db} core dumped on some Linux machines.
......@@ -108,7 +108,7 @@ int chk_status(MI_CHECK *param, register MI_INFO *info)
else if (mi_is_crashed(info))
mi_check_print_warning(param,
"Table is marked as crashed");
if (share->state.open_count != (info->s->global_changed ? 1 : 0))
if (share->state.open_count != (uint) (info->s->global_changed ? 1 : 0))
{
mi_check_print_warning(param,
"%d clients is using or hasn't closed the table properly",
......
......@@ -36,7 +36,8 @@ WARNING: THIS IS VERY MUCH A FIRST-CUT ALPHA. Comments/patches welcome.
# Documentation continued at end of file
my $VERSION = "1.8";
my $VERSION = "1.9";
my $opt_tmpdir= $main::env{TMPDIR};
my $OPTIONS = <<"_OPTIONS";
......@@ -50,7 +51,7 @@ Usage: $0 db_name [new_db_name | directory]
--allowold don't abort if target already exists (rename it _old)
--keepold don't delete previous (now renamed) target when done
--indices include index files in copy
--noindices don't include full index files in copy
--method=# method for copy (only "cp" currently supported)
-q, --quiet be silent except for errors
......@@ -61,6 +62,7 @@ Usage: $0 db_name [new_db_name | directory]
--suffix=# suffix for names of copied databases
--checkpoint=# insert checkpoint entry into specified db.table
--flushlog flush logs once all tables are locked
--tmpdir=# temporary directory (instead of $opt_tmpdir)
Try 'perldoc $0 for more complete documentation'
_OPTIONS
......@@ -71,7 +73,7 @@ sub usage {
my %opt = (
user => getpwuid($>),
indices => 1, # for safety
noindices => 0,
allowold => 0, # for safety
keepold => 0,
method => "cp",
......@@ -86,7 +88,7 @@ GetOptions( \%opt,
"socket|S=s",
"allowold!",
"keepold!",
"indices!",
"noindices!",
"method=s",
"debug",
"quiet|q",
......@@ -95,6 +97,7 @@ GetOptions( \%opt,
"suffix=s",
"checkpoint=s",
"flushlog",
"tmpdir|t=s",
"dryrun|n",
) or usage("Invalid option");
......@@ -133,6 +136,7 @@ else {
my $mysqld_help;
my %mysqld_vars;
my $start_time = time;
my $opt_tmpdir= $opt{tempdir} ? $opt{tmpdir} : $main::env{TMPDIR};
$0 = $1 if $0 =~ m:/([^/]+)$:;
$opt{quiet} = 0 if $opt{debug};
$opt{allowold} = 1 if $opt{keepold};
......@@ -238,13 +242,16 @@ foreach my $rdb ( @db_desc ) {
my @db_files = sort ( $negated
? grep { $db_files{$_} !~ $t_regex } keys %db_files
: grep { $db_files{$_} =~ $t_regex } keys %db_files );
my @index_files=();
## remove indices unless we're told to keep them
unless ($opt{indices}) {
if ($opt{noindices}) {
@index_files= grep { /\.(ISM|MYI)$/ } @db_files;
@db_files = grep { not /\.(ISM|MYI)$/ } @db_files;
}
$rdb->{files} = [ @db_files ];
$rdb->{index} = [ @index_files ];
my @hc_tables = map { "$db.$_" } @dbh_tables;
$rdb->{tables} = [ @hc_tables ];
......@@ -369,14 +376,65 @@ else {
my @failed = ();
foreach my $rdb ( @db_desc ) {
foreach my $rdb ( @db_desc )
{
my @files = map { "$datadir/$rdb->{src}/$_" } @{$rdb->{files}};
next unless @files;
eval { copy_files($opt{method}, \@files, $rdb->{target} ); };
eval { copy_files($opt{method}, \@files, $rdb->{target} ); };
push @failed, "$rdb->{src} -> $rdb->{target} failed: $@"
if ( $@ );
@files = map { "$datadir/$rdb->{src}/$_" } @{$rdb->{index}};
if ($rdb->{index})
{
#
# Copy only the header of the index file
#
my $tmpfile="$opt_tmpdir/mysqlhotcopy$$";
foreach my $file ($rdb->{index})
{
my $from="$datadir/$rdb->{src}/$file";
my $to="$rdb->{target}/$file";
my $buff;
open(INPUT, $from) || die "Can't open file $from: $!\n";
my $length=read INPUT, $buff, 2048;
die "Can't read index header from $from\n" if ($length <= 1024);
close INPUT;
if ( $opt{dryrun} )
{
print '$opt{method}-header $from $to\n';
}
elsif ($opt{method} eq 'cp')
{
!open(OUTPUT,$to) || die "Can\'t create file $to: $!\n";
if (write(OUTPUT,$buff) != length($buff))
{
die "Error when writing data to $to: $!\n";
}
close OUTPUT || die "Error on close of $to: $!\n";
}
elsif ($opt{method} eq 'scp')
{
my $tmp=$tmpfile;
open(OUTPUT,"$tmp") || die "Can\'t create file $tmp: $!\n";
if (write(OUTPUT,$buff) != length($buff))
{
die "Error when writing data to $tmp: $!\n";
}
close OUTPUT || die "Error on close of $tmp: $!\n";
safe_system('scp $tmp $to');
}
else
{
die "Can't use unsupported method '$opt{method}'\n";
}
}
unlink "$opt_tmpdir/mysqlhotcopy$$";
}
if ( $opt{checkpoint} ) {
my $msg = ( $@ ) ? "Failed: $@" : "Succeeded";
......@@ -469,13 +527,21 @@ sub copy_files {
# add files to copy and the destination directory
push @cmd, @$files, $target;
}
else {
else
{
die "Can't use unsupported method '$method'\n";
}
safe_system (@cmd);
}
if ( $opt{dryrun} ) {
sub safe_system
{
my @cmd=shift;
if ( $opt{dryrun} )
{
print "@cmd\n";
next;
return;
}
## for some reason system fails but backticks works ok for scp...
......@@ -488,6 +554,7 @@ sub copy_files {
}
}
sub retire_directory {
my ( @dir ) = @_;
......@@ -611,9 +678,9 @@ port to use when connecting to local server
UNIX domain socket to use when connecting to local server
=item --indices
=item --noindices
include index files in copy
don't include index files in copy
=item --method=#
......@@ -677,9 +744,6 @@ Add support for other copy methods (eg tar to single file?).
Add support for forthcoming MySQL ``RAID'' table subdirectory layouts.
Add option to only copy the first 65KB of index files. That simplifies
recovery (recovery with no index file at all is complicated).
=head1 AUTHOR
Tim Bunce
......@@ -689,3 +753,5 @@ Martin Waite - added checkpoint, flushlog, regexp and dryrun options
Ralph Corderoy - added synonyms for commands
Scott Wiersdorf - added table regex and scp support
Monty - working --noindex (copy only first 2048 bytes of index file)
Testing server 'MySQL 3.23.28 gamma' at 2000-11-18 15:05:04
Testing server 'MySQL 3.23.29 gamma' at 2000-11-28 17:24:55
ATIS table test
......@@ -6,14 +6,14 @@ 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): 3 wallclock secs ( 0.68 usr 0.60 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to insert (9768): 4 wallclock secs ( 0.64 usr 0.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Retrieving data
Time for select_simple_join (500): 2 wallclock secs ( 0.62 usr 0.39 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_join (200): 12 wallclock secs ( 4.31 usr 3.11 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_distinct (800): 11 wallclock secs ( 1.72 usr 0.95 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_group (2800): 10 wallclock secs ( 1.58 usr 0.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_simple_join (500): 1 wallclock secs ( 0.66 usr 0.38 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_join (200): 12 wallclock secs ( 4.45 usr 3.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_distinct (800): 11 wallclock secs ( 1.77 usr 0.97 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_group (2800): 10 wallclock secs ( 1.59 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: 38 wallclock secs ( 8.93 usr 5.72 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 38 wallclock secs ( 9.13 usr 5.79 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing server 'MySQL 3.23.28 gamma' at 2000-11-18 15:05:42
Testing server 'MySQL 3.23.29 gamma' at 2000-11-28 17:25:34
Testing of ALTER TABLE
Testing with 1000 columns and 1000 rows in 20 steps
Insert data into the table
Time for insert (1000) 1 wallclock secs ( 0.06 usr 0.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
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): 205 wallclock secs ( 0.17 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for alter_table_add (992): 213 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): 161 wallclock secs ( 0.07 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for alter_table_drop (496): 170 wallclock secs ( 0.07 usr 0.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 375 wallclock secs ( 0.30 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 391 wallclock secs ( 0.31 usr 0.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing server 'MySQL 3.23.28 gamma' at 2000-11-18 15:11:57
Testing server 'MySQL 3.23.29 gamma' at 2000-11-28 17:32:05
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): 12 wallclock secs ( 4.18 usr 5.43 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to select_many_fields(1000): 10 wallclock secs ( 3.93 usr 5.07 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.55 usr 5.42 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to select_many_fields(1000): 16 wallclock secs ( 4.06 usr 5.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing insert VALUES()
Time to insert_many_fields(1000): 5 wallclock secs ( 0.30 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to insert_many_fields(1000): 5 wallclock secs ( 0.33 usr 0.07 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing insert (all_fields) VALUES()
Time to insert_many_fields(1000): 9 wallclock secs ( 0.04 usr 0.08 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to insert_many_fields(1000): 9 wallclock secs ( 0.02 usr 0.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 42 wallclock secs ( 9.09 usr 11.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 41 wallclock secs ( 8.35 usr 10.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing server 'MySQL 3.23.28 gamma' at 2000-11-18 15:12:39
Testing server 'MySQL 3.23.29 gamma' at 2000-11-28 17:32:46
Testing the speed of connecting to the server and sending of data
All tests are done 10000 times
Testing connection/disconnect
Time to connect (10000): 14 wallclock secs ( 8.15 usr 2.36 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to connect (10000): 14 wallclock secs ( 7.49 usr 2.43 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Test connect/simple select/disconnect
Time for connect+select_simple (10000): 16 wallclock secs ( 8.31 usr 3.17 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for connect+select_simple (10000): 15 wallclock secs ( 7.61 usr 3.24 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Test simple select
Time for select_simple (10000): 2 wallclock secs ( 0.29 usr 0.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_simple (10000): 2 wallclock secs ( 0.28 usr 0.77 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing connect/select 1 row from table/disconnect
Time to connect+select_1_row (10000): 17 wallclock secs ( 8.55 usr 3.39 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to connect+select_1_row (10000): 17 wallclock secs ( 7.59 usr 3.33 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.41 usr 1.01 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to select_1_row (10000): 2 wallclock secs ( 0.35 usr 0.95 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.38 usr 0.89 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to select_2_rows (10000): 3 wallclock secs ( 0.34 usr 1.00 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Test select with aritmetic (+)
Time for select_column+column (10000): 3 wallclock secs ( 0.27 usr 0.75 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_column+column (10000): 3 wallclock secs ( 0.26 usr 0.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing retrieval of big records (65000 bytes)
Time to select_big (10000): 19 wallclock secs ( 7.84 usr 5.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to select_big (10000): 20 wallclock secs ( 7.74 usr 6.67 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 77 wallclock secs (34.21 usr 17.98 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 76 wallclock secs (31.66 usr 19.05 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing server 'MySQL 3.23.28 gamma' at 2000-11-18 15:13:56
Testing server 'MySQL 3.23.29 gamma' at 2000-11-28 17:34:02
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.85 usr 0.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for create_MANY_tables (10000): 90 wallclock secs ( 1.79 usr 0.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Accessing tables
Time to select_group_when_MANY_tables (10000): 6 wallclock secs ( 0.92 usr 0.90 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to select_group_when_MANY_tables (10000): 6 wallclock secs ( 0.96 usr 0.87 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing drop
Time for drop_table_when_MANY_tables (10000): 7 wallclock secs ( 0.63 usr 0.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for drop_table_when_MANY_tables (10000): 7 wallclock secs ( 0.62 usr 0.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing create+drop
Time for create+drop (10000): 13 wallclock secs ( 2.86 usr 0.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for create_key+drop (10000): 17 wallclock secs ( 4.39 usr 1.33 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 134 wallclock secs (10.66 usr 4.31 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for create+drop (10000): 13 wallclock secs ( 2.68 usr 1.04 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for create_key+drop (10000): 17 wallclock secs ( 4.18 usr 1.32 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 133 wallclock secs (10.24 usr 4.48 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing server 'MySQL 3.23.28 gamma' at 2000-11-18 17:02:47
Testing server 'MySQL 3.23.29 gamma' at 2000-11-28 18:06:37
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.76 usr 0.64 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to insert (10000): 4 wallclock secs ( 0.76 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.13 usr 0.10 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for select_range (410:1057904): 228 wallclock secs ( 8.51 usr 5.59 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for min_max_on_key (70000): 177 wallclock secs (20.71 usr 6.35 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_on_key (50000): 413 wallclock secs (15.79 usr 4.45 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
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): 229 wallclock secs ( 8.56 usr 5.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for min_max_on_key (70000): 166 wallclock secs (21.04 usr 6.26 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_on_key (50000): 389 wallclock secs (15.72 usr 4.52 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_group_on_key_parts (1000:100000): 39 wallclock secs ( 0.99 usr 0.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_group_on_key_parts (1000:100000): 40 wallclock secs ( 1.00 usr 0.61 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing count(distinct) on the table
Time for count_distinct (2000:2000): 86 wallclock secs ( 0.71 usr 0.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_distinct_group_on_key (1000:6000): 42 wallclock secs ( 0.45 usr 0.15 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_distinct_group_on_key_parts (1000:100000): 72 wallclock secs ( 1.08 usr 0.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_distinct_group (1000:100000): 72 wallclock secs ( 1.07 usr 0.63 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_distinct_big (100:1000000): 82 wallclock secs ( 7.24 usr 8.68 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 1215 wallclock secs (57.43 usr 28.03 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_distinct (2000:2000): 92 wallclock secs ( 0.69 usr 0.21 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_distinct_group_on_key (1000:6000): 42 wallclock secs ( 0.43 usr 0.14 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_distinct_group_on_key_parts (1000:100000): 63 wallclock secs ( 1.10 usr 0.62 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_distinct_group (1000:100000): 64 wallclock secs ( 1.06 usr 0.66 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for count_distinct_big (100:1000000): 80 wallclock secs ( 7.23 usr 8.53 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 1170 wallclock secs (57.76 usr 27.85 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Testing server 'MySQL 3.23.28 gamma' at 2000-11-18 16:16:05
Testing server 'MySQL 3.23.29 gamma' at 2000-11-28 18:26:07
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.85 usr 1.84 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time to insert (31000): 14 wallclock secs ( 1.82 usr 1.89 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.92 usr 0.94 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Time for wisc_benchmark (114): 4 wallclock secs ( 1.88 usr 0.93 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 19 wallclock secs ( 3.77 usr 2.78 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
Total time: 18 wallclock secs ( 3.70 usr 2.82 sys + 0.00 cusr 0.00 csys = 0.00 CPU)
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
......@@ -127,7 +127,7 @@ foreach $table (@ARGV)
$columns=$sth->{NUM_OF_FIELDS};
$columns_to_quote=get_columns_to_quote($sth);
$multi_value_insert=$sth->{'multi_value_insert'};
$insert_multi_value=$sth->{'insert_multi_value'};
$query="insert into $table values"; $result="";
print "- copying $table\n" if ($opt_verbose);
......@@ -146,7 +146,7 @@ foreach $table (@ARGV)
}
}
substr($tmp,-1)=")"; # Remove last ','
if ($multi_value_insert)
if ($insert_multi_value)
{
$to_dbh->do($query . $tmp) || die "Can't insert row: $DBI::errstr";
}
......
......@@ -38,7 +38,7 @@
# as such, and clarify ones such as "mediumint" with comments such as
# "3-byte int" or "same as xxx".
$version="1.53";
$version="1.54";
use DBI;
use Getopt::Long;
......@@ -275,7 +275,7 @@ check_and_report("Order by DESC is remembered",'order_by_remember_desc',
["drop table crash_q $drop_attr"],[3,2,1],7,undef(),3);
report("Compute",'compute',
"select a from crash_me order by a compute sum(a) by a");
report("Value lists in INSERT",'multi_value_insert',
report("INSERT with Value lists",'insert_multi_value',
"create table crash_q (s char(10))",
"insert into crash_q values ('a'),('b')",
"drop table crash_q $drop_attr");
......@@ -372,11 +372,11 @@ if ($dbh->do("create table crash_q (a integer, b integer,c1 CHAR(10))") &&
$dbh->do("drop table crash_q $drop_attr");
$dbh->do("drop table crash_q1 $drop_attr");
check_and_report("case insensitive compare","case_insensitive_strings",
check_and_report("Case insensitive compare","case_insensitive_strings",
[],"select b from crash_me where b = 'A'",[],'a',1);
check_and_report("ignore end space in compare","ignore_end_space",
check_and_report("Ignore end space in compare","ignore_end_space",
[],"select b from crash_me where b = 'a '",[],'a',1);
check_and_report("group on column with null values",'group_by_null',
check_and_report("Group on column with null values",'group_by_null',
["create table crash_q (s char(10))",
"insert into crash_q values(null)",
"insert into crash_q values(null)"],
......@@ -733,7 +733,7 @@ try_and_report("Type for row id", "rowid",
["serial",
"create table crash_q (a serial, primary key(a))","drop table crash_q $drop_attr"]);
try_and_report("Automatic rowid", "automatic_rowid",
try_and_report("Automatic row id", "automatic_rowid",
["_rowid",
"create table crash_q (a int not null, primary key(a))",
"insert into crash_q values (1)",
......@@ -1318,7 +1318,7 @@ report("default value function for column",'create_default_func',
"create table crash_q (q integer not null,q1 integer default (1+1)",
"drop table crash_q $drop_attr");
report("temporary tables",'tempoary_table',
report("temporary tables",'temporary_table',
"create temporary table crash_q (q integer not null)",
"drop table crash_q $drop_attr");
......@@ -1399,7 +1399,7 @@ if ($limits{'unique_in_create'} eq 'yes')
"insert into crash_q (q) values(NULL)",
"drop table crash_q $drop_attr");
report("null combination in unique index",'nulls_in_unique',
create_table("crash_q",["q integer,q1 integer"],["unique(q)"]),
create_table("crash_q",["q integer,q1 integer"],["unique(q,q1)"]),
"insert into crash_q (q,q1) values(1,NULL)",
"insert into crash_q (q,q1) values(1,NULL)",
"drop table crash_q $drop_attr");
......
......@@ -302,7 +302,7 @@ multi_drop=no # many tables to drop table
multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=no # Value lists in INSERT
insert_multi_value=no # Value lists in INSERT
natural_join=no # natural join
natural_left_outer_join=no # natural left outer join
no_primary_key=yes # Tables without primary key
......
......@@ -343,7 +343,7 @@ multi_null_in_unique=yes # null in unique index
multi_strings=no # Multiple line strings
multi_table_delete=yes # DELETE FROM table1,table2...
multi_table_update=yes # Update with many tables
multi_value_insert=no # Value lists in INSERT
insert_multi_value=no # Value lists in INSERT
natural_join=no # natural join
natural_join_incompat=no # natural join (incompatible lists)
natural_left_outer_join=no # natural left outer join
......
......@@ -309,7 +309,7 @@ multi_drop=yes # many tables to drop table
multi_strings=no # Multiple line strings
multi_table_delete=yes # DELETE FROM table1,table2...
multi_table_update=yes # Update with many tables
multi_value_insert=no # Value lists in INSERT
insert_multi_value=no # Value lists in INSERT
natural_join=no # natural join
natural_left_outer_join=no # natural left outer join
no_primary_key=yes # Tables without primary key
......
......@@ -349,7 +349,7 @@ multi_drop=no # many tables to drop table
multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=yes # Value lists in INSERT
insert_multi_value=yes # Value lists in INSERT
natural_join=no # natural join
natural_join_incompat=no # natural join (incompatible lists)
natural_left_outer_join=yes # natural left outer join
......@@ -388,14 +388,14 @@ select_limit2=no # SELECT with LIMIT #,#
select_string_size=4199664 # constant string size in SELECT
select_table_update=yes # Update with sub select
select_without_from=no # SELECT without FROM
server_version=2.1 # server version
server_version=FrontBase 2.1 # server version
simple_joins=yes # ANSI SQL simple joins
storage_of_float=round # Storage of float values
subqueries=yes # subqueries
table_alias=yes # Table alias
table_name_case=yes # case independent table names
table_wildcard=yes # Select table_name.*
tempoary_table=no # temporary tables
temporary_table=no # temporary tables
transactions=error # transactions
truncate_table=no # truncate
type_extra_abstime=no # Type abstime
......
......@@ -315,7 +315,7 @@ multi_drop=no # many tables to drop table
multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=no # Value lists in INSERT
insert_multi_value=no # Value lists in INSERT
natural_join=no # natural join
natural_left_outer_join=no # natural left outer join
no_primary_key=yes # Tables without primary key
......
......@@ -334,7 +334,7 @@ multi_drop=no # many tables to drop table
multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=no # Value lists in INSERT
insert_multi_value=no # Value lists in INSERT
natural_join=yes # natural join
natural_left_outer_join=yes # natural left outer join
no_primary_key=yes # Tables without primary key
......
......@@ -345,7 +345,7 @@ multi_drop=no # many tables to drop table
multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=no # Value lists in INSERT
insert_multi_value=no # Value lists in INSERT
natural_join=no # natural join
natural_join_incompat=no # natural join (incompatible lists)
natural_left_outer_join=no # natural left outer join
......
......@@ -97,7 +97,7 @@ multi_drop=no # many tables to drop table
multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=no # Value lists in INSERT
insert_multi_value=no # Value lists in INSERT
natural_join=no # natural join
natural_left_outer_join=no # natural left outer join
no_primary_key=yes # Tables without primary key
......
......@@ -310,7 +310,7 @@ multi_drop=yes # many tables to drop table
multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=yes # Value lists in INSERT
insert_multi_value=yes # Value lists in INSERT
natural_join=no # natural join
natural_left_outer_join=yes # natural left outer join
no_primary_key=yes # Tables without primary key
......
#This file is automaticly generated by crash-me 1.51
#This file is automaticly generated by crash-me 1.54
NEG=yes # update of column= -column
Need_cast_for_null=no # Need to cast NULL for arithmetic
......@@ -18,10 +18,10 @@ alter_drop_unique=with drop key # Alter table drop unique
alter_modify_col=yes # Alter table modify column
alter_rename_table=yes # Alter table rename table
atomic_updates=no # atomic updates
automatic_rowid=_rowid # Automatic rowid
automatic_rowid=_rowid # Automatic row id
binary_numbers=no # binary numbers (0b1001)
binary_strings=no # binary strings (b'0110')
case_insensitive_strings=yes # case insensitive compare
case_insensitive_strings=yes # Case insensitive compare
char_is_space_filled=no # char are space filled
column_alias=yes # Column alias
columns_in_group_by=+64 # number of columns in group by
......@@ -36,7 +36,7 @@ constraint_check=no # Column constraints
constraint_check_table=no # Table constraints
constraint_null=yes # NULL constraint (SyBase style)
crash_me_safe=yes # crash me safe
crash_me_version=1.51 # crash me version
crash_me_version=1.54 # 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
......@@ -55,6 +55,8 @@ 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
drop_requires_cascade=no # drop table require cascade/restrict
drop_restrict=yes # drop table with cascade/restrict
end_colon=yes # allows end ';'
except=no # except
except_all=no # except all
......@@ -275,7 +277,7 @@ func_where_unique=no # Function UNIQUE
functions=yes # Functions
group_by=yes # Group by
group_by_alias=yes # Group by alias
group_by_null=yes # group on column with null values
group_by_null=yes # Group on column with null values
group_by_position=yes # Group by position
group_distinct_functions=yes # Group functions with distinct
group_func_extra_bit_and=yes # Group function BIT_AND
......@@ -297,18 +299,20 @@ group_func_sql_min_str=yes # Group function MIN on strings
group_func_sql_some=no # Group function SOME
group_func_sql_sum=yes # Group function SUM
group_functions=yes # Group functions
group_on_unused=yes # Group on unused column
has_true_false=no # TRUE and FALSE
having=yes # Having
having_with_alias=yes # Having on alias
having_with_group=yes # Having with group function
hex_numbers=yes # hex numbers (0x41)
hex_strings=no # hex strings (x'1ace')
ignore_end_space=yes # ignore end space in compare
ignore_end_space=yes # Ignore end space in compare
index_in_create=yes # index in create table
index_namespace=yes # different namespace for index
index_parts=yes # index on column part (extension)
inner_join=yes # inner join
insert_empty_string=yes # insert empty string
insert_multi_value=yes # INSERT with Value lists
insert_select=yes # insert INTO ... SELECT ...
insert_with_set=yes # INSERT with set syntax
intersect=no # intersect
......@@ -351,7 +355,6 @@ multi_null_in_unique=yes # null in unique index
multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=yes # Value lists in INSERT
natural_join=yes # natural join
natural_join_incompat=yes # natural join (incompatible lists)
natural_left_outer_join=yes # natural left outer join
......@@ -360,6 +363,7 @@ null_concat_expr=yes # Is concat('a',NULL) = NULL
null_in_index=yes # null in index
null_in_unique=yes # null in unique index
null_num_expr=yes # Is 1+NULL = NULL
nulls_in_unique=yes # null combination in unique index
odbc_left_outer_join=yes # left outer join odbc style
operating_system=Linux 2.2.13-SMP alpha # crash-me tested on
order_by=yes # Order by
......@@ -367,6 +371,7 @@ order_by_alias=yes # Order by alias
order_by_function=yes # Order by function
order_by_position=yes # Order by position
order_by_remember_desc=no # Order by DESC is remembered
order_on_unused=yes # Order by on unused column
primary_key_in_create=yes # primary key in create table
psm_functions=no # PSM functions (ANSI SQL)
psm_modules=no # PSM modules (ANSI SQL)
......@@ -389,14 +394,14 @@ select_limit2=yes # SELECT with LIMIT #,#
select_string_size=1048565 # constant string size in SELECT
select_table_update=no # Update with sub select
select_without_from=yes # SELECT without FROM
server_version=MySQL 3.23.28 gamma # server version
server_version=MySQL 3.23.29 gamma # server version
simple_joins=yes # ANSI SQL simple joins
storage_of_float=round # Storage of float values
subqueries=no # subqueries
table_alias=yes # Table alias
table_name_case=no # case independent table names
table_wildcard=yes # Select table_name.*
tempoary_table=yes # temporary tables
temporary_table=yes # temporary tables
transactions=no # transactions
truncate_table=yes # truncate
type_extra_abstime=no # Type abstime
......@@ -515,4 +520,4 @@ unique_in_create=yes # unique in create table
unique_null_in_create=yes # unique null in create
user_comment=Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; ccc + cxx # comment
views=no # views
where_string_size=1048540 # constant string size in where
where_string_size=1048539 # constant string size in where
#This file is automaticly generated by crash-me 1.51
#This file is automaticly generated by crash-me 1.54
NEG=yes # update of column= -column
Need_cast_for_null=no # Need to cast NULL for arithmetic
......@@ -18,10 +18,10 @@ alter_drop_unique=with drop key # Alter table drop unique
alter_modify_col=yes # Alter table modify column
alter_rename_table=yes # Alter table rename table
atomic_updates=no # atomic updates
automatic_rowid=_rowid # Automatic rowid
automatic_rowid=_rowid # Automatic row id
binary_numbers=no # binary numbers (0b1001)
binary_strings=no # binary strings (b'0110')
case_insensitive_strings=yes # case insensitive compare
case_insensitive_strings=yes # Case insensitive compare
char_is_space_filled=no # char are space filled
column_alias=yes # Column alias
columns_in_group_by=+64 # number of columns in group by
......@@ -36,7 +36,7 @@ constraint_check=no # Column constraints
constraint_check_table=no # Table constraints
constraint_null=yes # NULL constraint (SyBase style)
crash_me_safe=yes # crash me safe
crash_me_version=1.51 # crash me version
crash_me_version=1.54 # 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
......@@ -55,6 +55,8 @@ 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
drop_requires_cascade=no # drop table require cascade/restrict
drop_restrict=yes # drop table with cascade/restrict
end_colon=yes # allows end ';'
except=no # except
except_all=no # except all
......@@ -275,7 +277,7 @@ func_where_unique=no # Function UNIQUE
functions=yes # Functions
group_by=yes # Group by
group_by_alias=yes # Group by alias
group_by_null=yes # group on column with null values
group_by_null=yes # Group on column with null values
group_by_position=yes # Group by position
group_distinct_functions=yes # Group functions with distinct
group_func_extra_bit_and=yes # Group function BIT_AND
......@@ -297,18 +299,20 @@ group_func_sql_min_str=yes # Group function MIN on strings
group_func_sql_some=no # Group function SOME
group_func_sql_sum=yes # Group function SUM
group_functions=yes # Group functions
group_on_unused=yes # Group on unused column
has_true_false=no # TRUE and FALSE
having=yes # Having
having_with_alias=yes # Having on alias
having_with_group=yes # Having with group function
hex_numbers=yes # hex numbers (0x41)
hex_strings=no # hex strings (x'1ace')
ignore_end_space=yes # ignore end space in compare
ignore_end_space=yes # Ignore end space in compare
index_in_create=yes # index in create table
index_namespace=yes # different namespace for index
index_parts=yes # index on column part (extension)
inner_join=yes # inner join
insert_empty_string=yes # insert empty string
insert_multi_value=yes # INSERT with Value lists
insert_select=yes # insert INTO ... SELECT ...
insert_with_set=yes # INSERT with set syntax
intersect=no # intersect
......@@ -351,7 +355,6 @@ multi_null_in_unique=yes # null in unique index
multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=yes # Value lists in INSERT
natural_join=yes # natural join
natural_join_incompat=yes # natural join (incompatible lists)
natural_left_outer_join=yes # natural left outer join
......@@ -360,6 +363,7 @@ null_concat_expr=yes # Is concat('a',NULL) = NULL
null_in_index=yes # null in index
null_in_unique=yes # null in unique index
null_num_expr=yes # Is 1+NULL = NULL
nulls_in_unique=yes # null combination in unique index
odbc_left_outer_join=yes # left outer join odbc style
operating_system=Linux 2.2.13-SMP alpha # crash-me tested on
order_by=yes # Order by
......@@ -367,6 +371,7 @@ order_by_alias=yes # Order by alias
order_by_function=yes # Order by function
order_by_position=yes # Order by position
order_by_remember_desc=no # Order by DESC is remembered
order_on_unused=yes # Order by on unused column
primary_key_in_create=yes # primary key in create table
psm_functions=no # PSM functions (ANSI SQL)
psm_modules=no # PSM modules (ANSI SQL)
......@@ -389,14 +394,14 @@ select_limit2=yes # SELECT with LIMIT #,#
select_string_size=1048565 # constant string size in SELECT
select_table_update=no # Update with sub select
select_without_from=yes # SELECT without FROM
server_version=MySQL 3.23.28 gamma # server version
server_version=MySQL 3.23.29 gamma # server version
simple_joins=yes # ANSI SQL simple joins
storage_of_float=round # Storage of float values
subqueries=no # subqueries
table_alias=yes # Table alias
table_name_case=no # case independent table names
table_wildcard=yes # Select table_name.*
tempoary_table=yes # temporary tables
temporary_table=yes # temporary tables
transactions=no # transactions
truncate_table=yes # truncate
type_extra_abstime=no # Type abstime
......@@ -515,4 +520,4 @@ unique_in_create=yes # unique in create table
unique_null_in_create=yes # unique null in create
user_comment=Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; ccc + cxx # comment
views=no # views
where_string_size=1048540 # constant string size in where
where_string_size=1048539 # constant string size in where
......@@ -345,7 +345,7 @@ multi_null_in_unique=yes # null in unique index
multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=no # Value lists in INSERT
insert_multi_value=no # Value lists in INSERT
natural_join=no # natural join
natural_join_incompat=no # natural join (incompatible lists)
natural_left_outer_join=no # natural left outer join
......
......@@ -343,7 +343,7 @@ multi_null_in_unique=yes # null in unique index
multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables
multi_value_insert=no # Value lists in INSERT
insert_multi_value=no # Value lists in INSERT
natural_join=yes # natural join
natural_join_incompat=yes # natural join (incompatible lists)
natural_left_outer_join=no # natural left outer join
......
......@@ -163,10 +163,14 @@ print_match("String handling","string|select_constant|quote_with|double_quotes|e
print_match("Quoting","quote");
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');
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');
......
File mode changed from 100755 to 100644
......@@ -151,7 +151,7 @@ sub new
$limits{'alter_table'} = 1; # Have ALTER TABLE
$limits{'alter_add_multi_col'}= 1; #Have ALTER TABLE t add a int,add b int;
$limits{'alter_table_dropcol'}= 1; # Have ALTER TABLE DROP column
$limits{'multi_value_insert'} = 1; # Have INSERT ... values (1,2),(3,4)
$limits{'insert_multi_value'} = 1; # Have INSERT ... values (1,2),(3,4)
$limits{'group_func_extra_std'} = 1; # Have group function std().
......@@ -2775,7 +2775,7 @@ sub new
$limits{'alter_table'} = 1; # Have ALTER TABLE
$limits{'alter_add_multi_col'}= 0; # Have ALTER TABLE t add a int,add b int;
$limits{'alter_table_dropcol'}= 1; # Have ALTER TABLE DROP column
$limits{'multi_value_insert'} = 0; # Does not have INSERT ... values (1,2),(3,4)
$limits{'insert_multi_value'} = 0; # Does not have INSERT ... values (1,2),(3,4)
$limits{'group_func_extra_std'} = 0; # Does not have group function std().
......@@ -2975,7 +2975,7 @@ sub new
$limits{'alter_table'} = 1; # Have ALTER TABLE
$limits{'alter_add_multi_col'}= 1; # Have ALTER TABLE t add a int,add b int;
$limits{'alter_table_dropcol'}= 1; # Have ALTER TABLE DROP column
$limits{'multi_value_insert'} = 0; # Does not have INSERT ... values (1,2),(3,4)
$limits{'insert_multi_value'} = 0; # Does not have INSERT ... values (1,2),(3,4)
$limits{'group_func_extra_std'} = 0; # Does not have group function std().
......@@ -3186,7 +3186,7 @@ sub new
$limits{'alter_table'} = 1; # Have ALTER TABLE
$limits{'alter_add_multi_col'}= 0; # Have ALTER TABLE t add a int,add b int;
$limits{'alter_table_dropcol'}= 0; # Have ALTER TABLE DROP column
$limits{'multi_value_insert'} = 1;
$limits{'insert_multi_value'} = 1;
$limits{'group_func_extra_std'} = 0; # Does not have group function std().
......@@ -3227,7 +3227,7 @@ sub version
# Pick up SQLGetInfo option SQL_DBMS_VER (18)
#
#$version = $dbh->func(18, GetInfo);
$version="2.1";
$version="FrontBase 2.1";
$dbh->disconnect;
return $version;
}
......
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
......@@ -130,7 +130,7 @@ else
$query="insert into bench1 (id,id2,id3,dummy1) values ";
}
if (($opt_fast || $opt_fast_insert) && $limits->{'multi_value_insert'})
if (($opt_fast || $opt_fast_insert) && $limits->{'insert_multi_value'})
{
$query_size=$server->{'limits'}->{'query_size'};
......@@ -1177,7 +1177,7 @@ if ($server->small_rollback_segment())
$loop_time=new Benchmark;
$fields=$#fields;
if (($opt_fast || $opt_fast_insert) && $limits->{'multi_value_insert'})
if (($opt_fast || $opt_fast_insert) && $limits->{'insert_multi_value'})
{
$query_size=$server->{'limits'}->{'query_size'};
$query="insert into bench1 values ";
......@@ -1331,7 +1331,7 @@ if ($opt_fast && defined($server->{vacuum}))
# Test multi value inserts if the server supports it
#
if ($limits->{'multi_value_insert'})
if ($limits->{'insert_multi_value'})
{
$query_size=$limits->{'query_size'}; # Same limit for all databases
......
File mode changed from 100755 to 100644
File mode changed from 100755 to 100644
......@@ -483,6 +483,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
char fixed_name[FN_REFLEN];
const char *old_proc_info=thd->proc_info;
MYISAM_SHARE* share = file->s;
ha_rows rows= file->state->records;
DBUG_ENTER("ha_myisam::repair");
param.table_name = table->table_name;
......@@ -559,6 +560,13 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
T_STATISTICS ? UPDATE_STAT : 0));
info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE |
HA_STATUS_CONST);
if (rows != file->state->records)
{
char llbuff[22],llbuff2[22];
mi_check_print_warning(&param,"Number of rows changed from %s to %s",
llstr(rows,llbuff),
llstr(file->state->records,llbuff2));
}
}
else
{
......
......@@ -388,7 +388,9 @@ int main(int argc, char** argv)
if(use_remote)
{
#ifndef __WIN__
init_thr_alarm(10); // need to do this manually
#endif
mysql = safe_connect();
}
......
......@@ -170,6 +170,7 @@ static struct rand_struct sql_rand;
static int cleanup_done;
static char **defaults_argv,time_zone[30];
static const char *default_table_type_name;
static char glob_hostname[FN_REFLEN];
#ifdef HAVE_OPENSSL
static bool opt_use_ssl = FALSE;
......@@ -356,6 +357,7 @@ static void close_connections(void)
#if defined(AIX_3_2) || defined(HAVE_DEC_3_2_THREADS)
if (ip_sock != INVALID_SOCKET)
{
DBUG_PRINT("error",("closing TCP/IP and socket files"));
VOID(shutdown(ip_sock,2));
VOID(closesocket(ip_sock));
VOID(shutdown(unix_sock,2));
......@@ -607,12 +609,15 @@ void clean_up(void)
free_defaults(defaults_argv);
my_free(mysql_tmpdir,MYF(0));
x_free(opt_bin_logname);
#ifndef __WIN__
(void) my_delete(pidfile_name,MYF(0)); // This may not always exist
my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0);
#endif
my_thread_end();
/* Tell main we are ready */
(void) pthread_mutex_lock(&LOCK_thread_count);
ready_to_exit=1;
/* do the broadcast inside the lock to ensure that my_end() is not called */
(void) pthread_cond_broadcast(&COND_thread_count);
(void) pthread_mutex_unlock(&LOCK_thread_count);
} /* clean_up */
......@@ -926,8 +931,8 @@ void end_thread(THD *thd, bool put_in_cache)
DBUG_PRINT("info", ("sending a broadcast"))
/* Tell main we are ready */
(void) pthread_cond_broadcast(&COND_thread_count);
(void) pthread_mutex_unlock(&LOCK_thread_count);
(void) pthread_cond_broadcast(&COND_thread_count);
DBUG_PRINT("info", ("unlocked thread_count mutex"))
#ifdef ONE_THREAD
if (!(test_flags & TEST_NO_THREADS)) // For debugging under Linux
......@@ -1308,7 +1313,6 @@ int main(int argc, char **argv)
#endif
{
DEBUGGER_OFF;
char hostname[FN_REFLEN];
my_umask=0660; // Default umask for new files
my_umask_dir=0700; // Default umask for new directories
......@@ -1332,9 +1336,9 @@ int main(int argc, char **argv)
#endif
#endif
if (gethostname(hostname,sizeof(hostname)-4) < 0)
strmov(hostname,"mysql");
strmov(pidfile_name,hostname);
if (gethostname(glob_hostname,sizeof(glob_hostname)-4) < 0)
strmov(glob_hostname,"mysql");
strmov(pidfile_name,glob_hostname);
strmov(strcend(pidfile_name,'.'),".pid"); // Add extension
#ifdef DEMO_VERSION
strcat(server_version,"-demo");
......@@ -1488,9 +1492,9 @@ int main(int argc, char **argv)
/* Setup log files */
if (opt_log)
open_log(&mysql_log, hostname, opt_logname, ".log", LOG_NORMAL);
open_log(&mysql_log, glob_hostname, opt_logname, ".log", LOG_NORMAL);
if (opt_update_log)
open_log(&mysql_update_log, hostname, opt_update_logname, "",
open_log(&mysql_update_log, glob_hostname, opt_update_logname, "",
LOG_NEW);
if (opt_bin_log)
{
......@@ -1499,12 +1503,12 @@ int main(int argc, char **argv)
if (!opt_bin_logname)
{
char tmp[FN_REFLEN];
strnmov(tmp,hostname,FN_REFLEN-5);
strnmov(tmp,glob_hostname,FN_REFLEN-5);
strmov(strcend(tmp,'.'),"-bin");
opt_bin_logname=my_strdup(tmp,MYF(MY_WME));
}
mysql_bin_log.set_index_file_name(opt_binlog_index_name);
open_log(&mysql_bin_log, hostname, opt_bin_logname, "-bin",
open_log(&mysql_bin_log, glob_hostname, opt_bin_logname, "-bin",
LOG_BIN);
}
else
......@@ -1512,7 +1516,7 @@ int main(int argc, char **argv)
}
if (opt_slow_log)
open_log(&mysql_slow_log, hostname, opt_slow_logname, "-slow.log",
open_log(&mysql_slow_log, glob_hostname, opt_slow_logname, "-slow.log",
LOG_NORMAL);
if (ha_init())
{
......@@ -1711,10 +1715,7 @@ int main(int argc, char **argv)
pthread_cond_wait(&COND_thread_count,&LOCK_thread_count);
}
(void) pthread_mutex_unlock(&LOCK_thread_count);
#ifndef __WIN__
(void) my_delete(pidfile_name,MYF(0)); // Not neaded anymore
#endif
my_thread_end();
my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0);
exit(0);
return(0); /* purecov: deadcode */
}
......@@ -2089,8 +2090,8 @@ pthread_handler_decl(handle_connections_sockets,arg __attribute__((unused)))
#ifdef __NT__
pthread_mutex_lock(&LOCK_thread_count);
handler_count--;
pthread_cond_signal(&COND_handler_count);
pthread_mutex_unlock(&LOCK_thread_count);
pthread_cond_signal(&COND_handler_count);
#endif
DBUG_RETURN(0);
}
......
......@@ -197,5 +197,4 @@
"Okänd system variabel '%-.64'",
"Tabell '%-.64s' är crashad och bör repareras med REPAIR TABLE",
"Tabell '%-.64s' är crashad och senast (automatiska?) reparation misslyckades",
#ER_WARNING_NOT_COMPLETE_ROLLBACK
"Warning: Några icke transaktionella tabeller kunde inte återställas vid ROLLBACK",
......@@ -669,12 +669,11 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
DBUG_RETURN(0);
key_length= (uint) (strmov(strmov(key,db)+1,table_name)-key)+1;
int4store(key + key_length, thd->slave_proxy_id);
key_length += 4;
for (table=thd->temporary_tables; table ; table=table->next)
{
if (table->key_length == key_length &&
!memcmp(table->table_cache_key,key,key_length))
if (table->key_length == key_length+4 &&
!memcmp(table->table_cache_key,key,key_length+4))
{
if (table->query_id == thd->query_id)
{
......
......@@ -1404,8 +1404,11 @@ mysql_execute_command(void)
#endif
break;
}
case SQLCOM_DELETE:
case SQLCOM_TRUNCATE:
lex->where=0;
lex->select_limit=HA_POS_ERROR;
/* Fall through */
case SQLCOM_DELETE:
{
if (check_access(thd,DELETE_ACL,tables->db,&tables->grant.privilege))
goto error; /* purecov: inspected */
......@@ -1589,8 +1592,11 @@ mysql_execute_command(void)
}
}
else
{
thd->options&= ~(ulong) (OPTION_STATUS_NO_TRANS_UPDATE);
thd->server_status&= ~SERVER_STATUS_AUTOCOMMIT;
}
}
send_ok(&thd->net);
break;
}
......@@ -1755,9 +1761,17 @@ mysql_execute_command(void)
}
break;
case SQLCOM_BEGIN:
thd->options|= OPTION_BEGIN;
if (end_active_trans(thd))
{
res= -1;
}
else
{
thd->options= ((thd->options & (ulong) (OPTION_STATUS_NO_TRANS_UPDATE)) |
OPTION_BEGIN);
thd->server_status|= SERVER_STATUS_IN_TRANS;
send_ok(&thd->net);
}
break;
case SQLCOM_COMMIT:
/*
......
......@@ -23,7 +23,8 @@
#include "sql_select.h" // For select_describe
#include "sql_acl.h"
#include <my_dir.h>
extern "C" pthread_mutex_t THR_LOCK_keycache;
/* extern "C" pthread_mutex_t THR_LOCK_keycache; */
static const char *grant_names[]={
"select","insert","update","delete","create","drop","reload","shutdown",
......@@ -988,7 +989,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables)
if (send_fields(thd,field_list,1))
DBUG_RETURN(1); /* purecov: inspected */
pthread_mutex_lock(&THR_LOCK_keycache);
/* pthread_mutex_lock(&THR_LOCK_keycache); */
pthread_mutex_lock(&LOCK_status);
for (i=0; variables[i].name; i++)
{
......@@ -1037,13 +1038,13 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables)
}
}
pthread_mutex_unlock(&LOCK_status);
pthread_mutex_unlock(&THR_LOCK_keycache);
/* pthread_mutex_unlock(&THR_LOCK_keycache); */
send_eof(&thd->net);
DBUG_RETURN(0);
err:
pthread_mutex_unlock(&LOCK_status);
pthread_mutex_unlock(&THR_LOCK_keycache);
/* pthread_mutex_unlock(&THR_LOCK_keycache); */
DBUG_RETURN(1);
}
......
/******************************************************************************
* *
* N O T I C E *
* *
* Copyright Abandoned, 1987, Fred Fish *
* *
* *
* This previously copyrighted work has been placed into the public *
* domain by the author and may be freely used for any purpose, *
* private or commercial. *
* *
* Because of the number of inquiries I was receiving about the use *
* of this product in commercially developed works I have decided to *
* simply make it public domain to further its unrestricted use. I *
* specifically would be most happy to see this material become a *
* part of the standard Unix distributions by AT&T and the Berkeley *
* Computer Science Research Group, and a standard part of the GNU *
* system from the Free Software Foundation. *
* *
* I would appreciate it, as a courtesy, if this notice is left in *
* all copies and derivative works. Thank you. *
* *
* The author makes no warranty of any kind with respect to this *
* product and explicitly disclaims any implied warranties of mer- *
* chantability or fitness for any particular purpose. *
* *
******************************************************************************
*/
This diff is collapsed.
LICENSE ISSUES
==============
The OpenSSL toolkit stays under a dual license, i.e. both the conditions of
the OpenSSL License and the original SSLeay license apply to the toolkit.
See below for the actual license texts. Actually both licenses are BSD-style
Open Source licenses. In case of any license issues related to OpenSSL
please contact openssl-core@openssl.org.
OpenSSL License
---------------
/* ====================================================================
* Copyright (c) 1998-1999 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
Original SSLeay License
-----------------------
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* "This product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
As the Vio is currently used only as part of MySQL, separate
installation isn't currently supported.
Virtual IO library.
IO wrappers for sockets, fd-s, SSL.
Languages:C++
This library is based on work of many others.
They have different policies and I haven't thought up
about resulting licence - GPL, L(essen)GPL, BSD-style, whatever.
The licences are here for reference:
COPYING.mysql: MySQL licence. Some socket functions.
COPYING.dbug: Fred Fish's dbug library. I use it extensively ;=)
COPYING.openssl:OpenSSL licence. SSL wrappers.
At the moment there is no real 'Makefile', just config.mk/targets.mk
and Makefile.am to build it as a module in MySQL. Therefore, there
is currently no possibility to build it as a separate library, but
with MySQL-s root Makefile it should just a matter of leaving
everything else out.
* Consistent error handling. May be the initialization should
be taken out of constructors and be put into virtual method open().
* The open() method is named very misleadingly().
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment