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 ...@@ -27761,6 +27761,7 @@ How big a @code{VARCHAR} column can be
* mysqldump:: Dumping the structure and data from @strong{MySQL} databases and tables * mysqldump:: Dumping the structure and data from @strong{MySQL} databases and tables
* mysqlimport:: Importing data from text files * mysqlimport:: Importing data from text files
* mysqlshow:: Showing databases, tables and columns * mysqlshow:: Showing databases, tables and columns
* perror:: Displaying error messages
* myisampack:: The @strong{MySQL} compressed read-only table generator * myisampack:: The @strong{MySQL} compressed read-only table generator
@end menu @end menu
...@@ -28559,7 +28560,7 @@ mysqldump --all-databases > all_databases.sql ...@@ -28559,7 +28560,7 @@ mysqldump --all-databases > all_databases.sql
@cindex files, text @cindex files, text
@cindex text files, importing @cindex text files, importing
@cindex @code{mysqlimport} @cindex @code{mysqlimport}
@node mysqlimport, mysqlshow, mysqldump, Tools @node mysqlimport, perror, mysqldump, Tools
@section Importing Data from Text Files @section Importing Data from Text Files
@code{mysqlimport} provides a command-line interface to the @code{LOAD DATA @code{mysqlimport} provides a command-line interface to the @code{LOAD DATA
...@@ -28696,12 +28697,34 @@ $ mysql -e 'SELECT * FROM imptest' test ...@@ -28696,12 +28697,34 @@ $ mysql -e 'SELECT * FROM imptest' test
+------+---------------+ +------+---------------+
@end example @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 databases, displaying
@cindex displaying, database information @cindex displaying, database information
@cindex tables, displaying @cindex tables, displaying
@cindex columns, displaying @cindex columns, displaying
@cindex showing, database information @cindex showing, database information
@node mysqlshow, myisampack, mysqlimport, Tools @node mysqlshow, myisampack, perror, Tools
@section Showing Databases, Tables, and Columns @section Showing Databases, Tables, and Columns
@code{mysqlshow} can be used to quickly look at which databases exist, @code{mysqlshow} can be used to quickly look at which databases exist,
...@@ -32091,6 +32114,14 @@ tmpdir=C:/temp ...@@ -32091,6 +32114,14 @@ tmpdir=C:/temp
assuming that the @file{c:\\temp} directory exists. @xref{Option files}. 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 @cindex commands out of sync
@node Commands out of sync, Ignoring user, Cannot create, Common errors @node Commands out of sync, Ignoring user, Cannot create, Common errors
@subsection @code{Commands out of sync} error in client @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. ...@@ -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 Automatically remove Berkeley DB transaction logs that are no longer in
use. use.
@item @item
Added a warning if number of rows changes on @code{REPAIR}/@code{OPTIMIZE}.
@item
Applied patches for OS2 by @code{Yuri Dario}. Applied patches for OS2 by @code{Yuri Dario}.
@item @item
@code{FLUSH TABLES table_name} didn't always flush table properly to @code{FLUSH TABLES table_name} didn't always flush the index tree
disk; One some cases the index tree wasn't completely written to disk. properly to disk.
@item @item
@code{--bootstrap} is now run in a separate thread. This fixes the problem @code{--bootstrap} is now run in a separate thread. This fixes the problem
that @code{mysql_install_db} core dumped on some Linux machines. 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) ...@@ -108,7 +108,7 @@ int chk_status(MI_CHECK *param, register MI_INFO *info)
else if (mi_is_crashed(info)) else if (mi_is_crashed(info))
mi_check_print_warning(param, mi_check_print_warning(param,
"Table is marked as crashed"); "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, mi_check_print_warning(param,
"%d clients is using or hasn't closed the table properly", "%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. ...@@ -36,7 +36,8 @@ WARNING: THIS IS VERY MUCH A FIRST-CUT ALPHA. Comments/patches welcome.
# Documentation continued at end of file # Documentation continued at end of file
my $VERSION = "1.8"; my $VERSION = "1.9";
my $opt_tmpdir= $main::env{TMPDIR};
my $OPTIONS = <<"_OPTIONS"; my $OPTIONS = <<"_OPTIONS";
...@@ -50,7 +51,7 @@ Usage: $0 db_name [new_db_name | directory] ...@@ -50,7 +51,7 @@ Usage: $0 db_name [new_db_name | directory]
--allowold don't abort if target already exists (rename it _old) --allowold don't abort if target already exists (rename it _old)
--keepold don't delete previous (now renamed) target when done --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) --method=# method for copy (only "cp" currently supported)
-q, --quiet be silent except for errors -q, --quiet be silent except for errors
...@@ -61,6 +62,7 @@ Usage: $0 db_name [new_db_name | directory] ...@@ -61,6 +62,7 @@ Usage: $0 db_name [new_db_name | directory]
--suffix=# suffix for names of copied databases --suffix=# suffix for names of copied databases
--checkpoint=# insert checkpoint entry into specified db.table --checkpoint=# insert checkpoint entry into specified db.table
--flushlog flush logs once all tables are locked --flushlog flush logs once all tables are locked
--tmpdir=# temporary directory (instead of $opt_tmpdir)
Try 'perldoc $0 for more complete documentation' Try 'perldoc $0 for more complete documentation'
_OPTIONS _OPTIONS
...@@ -71,7 +73,7 @@ sub usage { ...@@ -71,7 +73,7 @@ sub usage {
my %opt = ( my %opt = (
user => getpwuid($>), user => getpwuid($>),
indices => 1, # for safety noindices => 0,
allowold => 0, # for safety allowold => 0, # for safety
keepold => 0, keepold => 0,
method => "cp", method => "cp",
...@@ -86,7 +88,7 @@ GetOptions( \%opt, ...@@ -86,7 +88,7 @@ GetOptions( \%opt,
"socket|S=s", "socket|S=s",
"allowold!", "allowold!",
"keepold!", "keepold!",
"indices!", "noindices!",
"method=s", "method=s",
"debug", "debug",
"quiet|q", "quiet|q",
...@@ -95,6 +97,7 @@ GetOptions( \%opt, ...@@ -95,6 +97,7 @@ GetOptions( \%opt,
"suffix=s", "suffix=s",
"checkpoint=s", "checkpoint=s",
"flushlog", "flushlog",
"tmpdir|t=s",
"dryrun|n", "dryrun|n",
) or usage("Invalid option"); ) or usage("Invalid option");
...@@ -133,6 +136,7 @@ else { ...@@ -133,6 +136,7 @@ else {
my $mysqld_help; my $mysqld_help;
my %mysqld_vars; my %mysqld_vars;
my $start_time = time; my $start_time = time;
my $opt_tmpdir= $opt{tempdir} ? $opt{tmpdir} : $main::env{TMPDIR};
$0 = $1 if $0 =~ m:/([^/]+)$:; $0 = $1 if $0 =~ m:/([^/]+)$:;
$opt{quiet} = 0 if $opt{debug}; $opt{quiet} = 0 if $opt{debug};
$opt{allowold} = 1 if $opt{keepold}; $opt{allowold} = 1 if $opt{keepold};
...@@ -238,13 +242,16 @@ foreach my $rdb ( @db_desc ) { ...@@ -238,13 +242,16 @@ foreach my $rdb ( @db_desc ) {
my @db_files = sort ( $negated my @db_files = sort ( $negated
? grep { $db_files{$_} !~ $t_regex } keys %db_files ? grep { $db_files{$_} !~ $t_regex } keys %db_files
: 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 ## 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; @db_files = grep { not /\.(ISM|MYI)$/ } @db_files;
} }
$rdb->{files} = [ @db_files ]; $rdb->{files} = [ @db_files ];
$rdb->{index} = [ @index_files ];
my @hc_tables = map { "$db.$_" } @dbh_tables; my @hc_tables = map { "$db.$_" } @dbh_tables;
$rdb->{tables} = [ @hc_tables ]; $rdb->{tables} = [ @hc_tables ];
...@@ -369,27 +376,78 @@ else { ...@@ -369,27 +376,78 @@ else {
my @failed = (); my @failed = ();
foreach my $rdb ( @db_desc ) { foreach my $rdb ( @db_desc )
my @files = map { "$datadir/$rdb->{src}/$_" } @{$rdb->{files}}; {
next unless @files; my @files = map { "$datadir/$rdb->{src}/$_" } @{$rdb->{files}};
eval { copy_files($opt{method}, \@files, $rdb->{target} ); }; next unless @files;
push @failed, "$rdb->{src} -> $rdb->{target} failed: $@" eval { copy_files($opt{method}, \@files, $rdb->{target} ); };
if ( $@ ); push @failed, "$rdb->{src} -> $rdb->{target} failed: $@"
if ( $@ );
if ( $opt{checkpoint} ) {
my $msg = ( $@ ) ? "Failed: $@" : "Succeeded"; @files = map { "$datadir/$rdb->{src}/$_" } @{$rdb->{index}};
if ($rdb->{index})
eval { {
$dbh->do( qq{ insert into $opt{checkpoint} (src, dest, msg) #
VALUES ( '$rdb->{src}', '$rdb->{target}', '$msg' ) # Copy only the header of the index file
} ); #
};
my $tmpfile="$opt_tmpdir/mysqlhotcopy$$";
if ( $@ ) { foreach my $file ($rdb->{index})
warn "Failed to update checkpoint table: $@\n"; {
} 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";
eval {
$dbh->do( qq{ insert into $opt{checkpoint} (src, dest, msg)
VALUES ( '$rdb->{src}', '$rdb->{target}', '$msg' )
} );
};
if ( $@ ) {
warn "Failed to update checkpoint table: $@\n";
} }
}
} }
if ( $opt{dryrun} ) { if ( $opt{dryrun} ) {
...@@ -469,25 +527,34 @@ sub copy_files { ...@@ -469,25 +527,34 @@ sub copy_files {
# add files to copy and the destination directory # add files to copy and the destination directory
push @cmd, @$files, $target; push @cmd, @$files, $target;
} }
else { else
{
die "Can't use unsupported method '$method'\n"; die "Can't use unsupported method '$method'\n";
} }
safe_system (@cmd);
}
if ( $opt{dryrun} ) { sub safe_system
print "@cmd\n"; {
next; my @cmd=shift;
}
## for some reason system fails but backticks works ok for scp... if ( $opt{dryrun} )
print "Executing '@cmd'\n" if $opt{debug}; {
my $cp_status = system @cmd; print "@cmd\n";
if ($cp_status != 0) { return;
warn "Burp ('scuse me). Trying backtick execution...\n" if $opt{debug}; #' }
## try something else
`@cmd` && die "Error: @cmd failed ($cp_status) while copying files.\n"; ## for some reason system fails but backticks works ok for scp...
} print "Executing '@cmd'\n" if $opt{debug};
my $cp_status = system @cmd;
if ($cp_status != 0) {
warn "Burp ('scuse me). Trying backtick execution...\n" if $opt{debug}; #'
## try something else
`@cmd` && die "Error: @cmd failed ($cp_status) while copying files.\n";
}
} }
sub retire_directory { sub retire_directory {
my ( @dir ) = @_; my ( @dir ) = @_;
...@@ -611,9 +678,9 @@ port to use when connecting to local server ...@@ -611,9 +678,9 @@ port to use when connecting to local server
UNIX domain socket 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=# =item --method=#
...@@ -677,9 +744,6 @@ Add support for other copy methods (eg tar to single file?). ...@@ -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 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 =head1 AUTHOR
Tim Bunce Tim Bunce
...@@ -689,3 +753,5 @@ Martin Waite - added checkpoint, flushlog, regexp and dryrun options ...@@ -689,3 +753,5 @@ Martin Waite - added checkpoint, flushlog, regexp and dryrun options
Ralph Corderoy - added synonyms for commands Ralph Corderoy - added synonyms for commands
Scott Wiersdorf - added table regex and scp support 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 ATIS table test
...@@ -6,14 +6,14 @@ Creating tables ...@@ -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) 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 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 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_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.31 usr 3.11 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.72 usr 0.95 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.58 usr 0.66 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 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) 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 of ALTER TABLE
Testing with 1000 columns and 1000 rows in 20 steps Testing with 1000 columns and 1000 rows in 20 steps
Insert data into the table 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 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 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 Testing of some unusual tables
All tests are done 1000 times with 1000 fields All tests are done 1000 times with 1000 fields
Testing table with 1000 fields Testing table with 1000 fields
Testing select * from table with 1 record 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 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() 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() 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 Testing the speed of connecting to the server and sending of data
All tests are done 10000 times All tests are done 10000 times
Testing connection/disconnect 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 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 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 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 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 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 (+) 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) 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 the speed of creating and droping tables
Testing with 10000 tables and 10000 loop count Testing with 10000 tables and 10000 loop count
Testing create of tables 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 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 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 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+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.39 usr 1.33 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: 134 wallclock secs (10.66 usr 4.31 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 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. The test-table has 10000 rows and the test is done with 500 ranges.
Creating table Creating table
Inserting 10000 rows 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 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_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): 228 wallclock secs ( 8.51 usr 5.59 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): 177 wallclock secs (20.71 usr 6.35 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): 413 wallclock secs (15.79 usr 4.45 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 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 (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.45 usr 0.15 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): 72 wallclock secs ( 1.08 usr 0.62 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): 72 wallclock secs ( 1.07 usr 0.63 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): 82 wallclock secs ( 7.24 usr 8.68 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: 1215 wallclock secs (57.43 usr 28.03 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 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) 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 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) 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 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) ...@@ -127,7 +127,7 @@ foreach $table (@ARGV)
$columns=$sth->{NUM_OF_FIELDS}; $columns=$sth->{NUM_OF_FIELDS};
$columns_to_quote=get_columns_to_quote($sth); $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=""; $query="insert into $table values"; $result="";
print "- copying $table\n" if ($opt_verbose); print "- copying $table\n" if ($opt_verbose);
...@@ -146,7 +146,7 @@ foreach $table (@ARGV) ...@@ -146,7 +146,7 @@ foreach $table (@ARGV)
} }
} }
substr($tmp,-1)=")"; # Remove last ',' 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"; $to_dbh->do($query . $tmp) || die "Can't insert row: $DBI::errstr";
} }
......
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
# as such, and clarify ones such as "mediumint" with comments such as # as such, and clarify ones such as "mediumint" with comments such as
# "3-byte int" or "same as xxx". # "3-byte int" or "same as xxx".
$version="1.53"; $version="1.54";
use DBI; use DBI;
use Getopt::Long; use Getopt::Long;
...@@ -275,7 +275,7 @@ check_and_report("Order by DESC is remembered",'order_by_remember_desc', ...@@ -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); ["drop table crash_q $drop_attr"],[3,2,1],7,undef(),3);
report("Compute",'compute', report("Compute",'compute',
"select a from crash_me order by a compute sum(a) by a"); "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))", "create table crash_q (s char(10))",
"insert into crash_q values ('a'),('b')", "insert into crash_q values ('a'),('b')",
"drop table crash_q $drop_attr"); "drop table crash_q $drop_attr");
...@@ -372,11 +372,11 @@ if ($dbh->do("create table crash_q (a integer, b integer,c1 CHAR(10))") && ...@@ -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_q $drop_attr");
$dbh->do("drop table crash_q1 $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); [],"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); [],"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))", ["create table crash_q (s char(10))",
"insert into crash_q values(null)", "insert into crash_q values(null)",
"insert into crash_q values(null)"], "insert into crash_q values(null)"],
...@@ -733,7 +733,7 @@ try_and_report("Type for row id", "rowid", ...@@ -733,7 +733,7 @@ try_and_report("Type for row id", "rowid",
["serial", ["serial",
"create table crash_q (a serial, primary key(a))","drop table crash_q $drop_attr"]); "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", ["_rowid",
"create table crash_q (a int not null, primary key(a))", "create table crash_q (a int not null, primary key(a))",
"insert into crash_q values (1)", "insert into crash_q values (1)",
...@@ -1318,7 +1318,7 @@ report("default value function for column",'create_default_func', ...@@ -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)", "create table crash_q (q integer not null,q1 integer default (1+1)",
"drop table crash_q $drop_attr"); "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)", "create temporary table crash_q (q integer not null)",
"drop table crash_q $drop_attr"); "drop table crash_q $drop_attr");
...@@ -1399,7 +1399,7 @@ if ($limits{'unique_in_create'} eq 'yes') ...@@ -1399,7 +1399,7 @@ if ($limits{'unique_in_create'} eq 'yes')
"insert into crash_q (q) values(NULL)", "insert into crash_q (q) values(NULL)",
"drop table crash_q $drop_attr"); "drop table crash_q $drop_attr");
report("null combination in unique index",'nulls_in_unique', 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)",
"insert into crash_q (q,q1) values(1,NULL)", "insert into crash_q (q,q1) values(1,NULL)",
"drop table crash_q $drop_attr"); "drop table crash_q $drop_attr");
......
...@@ -302,7 +302,7 @@ multi_drop=no # many tables to drop table ...@@ -302,7 +302,7 @@ multi_drop=no # many tables to drop table
multi_strings=no # Multiple line strings multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables 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=no # natural join
natural_left_outer_join=no # natural left outer join natural_left_outer_join=no # natural left outer join
no_primary_key=yes # Tables without primary key no_primary_key=yes # Tables without primary key
......
...@@ -343,7 +343,7 @@ multi_null_in_unique=yes # null in unique index ...@@ -343,7 +343,7 @@ multi_null_in_unique=yes # null in unique index
multi_strings=no # Multiple line strings multi_strings=no # Multiple line strings
multi_table_delete=yes # DELETE FROM table1,table2... multi_table_delete=yes # DELETE FROM table1,table2...
multi_table_update=yes # Update with many tables 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=no # natural join
natural_join_incompat=no # natural join (incompatible lists) natural_join_incompat=no # natural join (incompatible lists)
natural_left_outer_join=no # natural left outer join natural_left_outer_join=no # natural left outer join
......
...@@ -309,7 +309,7 @@ multi_drop=yes # many tables to drop table ...@@ -309,7 +309,7 @@ multi_drop=yes # many tables to drop table
multi_strings=no # Multiple line strings multi_strings=no # Multiple line strings
multi_table_delete=yes # DELETE FROM table1,table2... multi_table_delete=yes # DELETE FROM table1,table2...
multi_table_update=yes # Update with many tables 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=no # natural join
natural_left_outer_join=no # natural left outer join natural_left_outer_join=no # natural left outer join
no_primary_key=yes # Tables without primary key no_primary_key=yes # Tables without primary key
......
...@@ -349,7 +349,7 @@ multi_drop=no # many tables to drop table ...@@ -349,7 +349,7 @@ multi_drop=no # many tables to drop table
multi_strings=yes # Multiple line strings multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables 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=no # natural join
natural_join_incompat=no # natural join (incompatible lists) natural_join_incompat=no # natural join (incompatible lists)
natural_left_outer_join=yes # natural left outer join natural_left_outer_join=yes # natural left outer join
...@@ -388,14 +388,14 @@ select_limit2=no # SELECT with LIMIT #,# ...@@ -388,14 +388,14 @@ select_limit2=no # SELECT with LIMIT #,#
select_string_size=4199664 # constant string size in SELECT select_string_size=4199664 # constant string size in SELECT
select_table_update=yes # Update with sub select select_table_update=yes # Update with sub select
select_without_from=no # SELECT without FROM 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 simple_joins=yes # ANSI SQL simple joins
storage_of_float=round # Storage of float values storage_of_float=round # Storage of float values
subqueries=yes # subqueries subqueries=yes # subqueries
table_alias=yes # Table alias table_alias=yes # Table alias
table_name_case=yes # case independent table names table_name_case=yes # case independent table names
table_wildcard=yes # Select table_name.* table_wildcard=yes # Select table_name.*
tempoary_table=no # temporary tables temporary_table=no # temporary tables
transactions=error # transactions transactions=error # transactions
truncate_table=no # truncate truncate_table=no # truncate
type_extra_abstime=no # Type abstime type_extra_abstime=no # Type abstime
......
...@@ -315,7 +315,7 @@ multi_drop=no # many tables to drop table ...@@ -315,7 +315,7 @@ multi_drop=no # many tables to drop table
multi_strings=no # Multiple line strings multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables 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=no # natural join
natural_left_outer_join=no # natural left outer join natural_left_outer_join=no # natural left outer join
no_primary_key=yes # Tables without primary key no_primary_key=yes # Tables without primary key
......
...@@ -334,7 +334,7 @@ multi_drop=no # many tables to drop table ...@@ -334,7 +334,7 @@ multi_drop=no # many tables to drop table
multi_strings=yes # Multiple line strings multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables 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=yes # natural join
natural_left_outer_join=yes # natural left outer join natural_left_outer_join=yes # natural left outer join
no_primary_key=yes # Tables without primary key no_primary_key=yes # Tables without primary key
......
...@@ -345,7 +345,7 @@ multi_drop=no # many tables to drop table ...@@ -345,7 +345,7 @@ multi_drop=no # many tables to drop table
multi_strings=no # Multiple line strings multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables 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=no # natural join
natural_join_incompat=no # natural join (incompatible lists) natural_join_incompat=no # natural join (incompatible lists)
natural_left_outer_join=no # natural left outer join natural_left_outer_join=no # natural left outer join
......
...@@ -97,7 +97,7 @@ multi_drop=no # many tables to drop table ...@@ -97,7 +97,7 @@ multi_drop=no # many tables to drop table
multi_strings=no # Multiple line strings multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables 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=no # natural join
natural_left_outer_join=no # natural left outer join natural_left_outer_join=no # natural left outer join
no_primary_key=yes # Tables without primary key no_primary_key=yes # Tables without primary key
......
...@@ -310,7 +310,7 @@ multi_drop=yes # many tables to drop table ...@@ -310,7 +310,7 @@ multi_drop=yes # many tables to drop table
multi_strings=yes # Multiple line strings multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables 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=no # natural join
natural_left_outer_join=yes # natural left outer join natural_left_outer_join=yes # natural left outer join
no_primary_key=yes # Tables without primary key 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 NEG=yes # update of column= -column
Need_cast_for_null=no # Need to cast NULL for arithmetic 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 ...@@ -18,10 +18,10 @@ alter_drop_unique=with drop key # Alter table drop unique
alter_modify_col=yes # Alter table modify column alter_modify_col=yes # Alter table modify column
alter_rename_table=yes # Alter table rename table alter_rename_table=yes # Alter table rename table
atomic_updates=no # atomic updates atomic_updates=no # atomic updates
automatic_rowid=_rowid # Automatic rowid automatic_rowid=_rowid # Automatic row id
binary_numbers=no # binary numbers (0b1001) binary_numbers=no # binary numbers (0b1001)
binary_strings=no # binary strings (b'0110') 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 char_is_space_filled=no # char are space filled
column_alias=yes # Column alias column_alias=yes # Column alias
columns_in_group_by=+64 # number of columns in group by columns_in_group_by=+64 # number of columns in group by
...@@ -36,7 +36,7 @@ constraint_check=no # Column constraints ...@@ -36,7 +36,7 @@ constraint_check=no # Column constraints
constraint_check_table=no # Table constraints constraint_check_table=no # Table constraints
constraint_null=yes # NULL constraint (SyBase style) constraint_null=yes # NULL constraint (SyBase style)
crash_me_safe=yes # crash me safe 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=yes # default value for column
create_default_func=no # default value function for column create_default_func=no # default value function for column
create_if_not_exists=yes # create table if not exists 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 ...@@ -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 double_quotes=yes # Double '' as ' in strings
drop_if_exists=yes # drop table if exists drop_if_exists=yes # drop table if exists
drop_index=with 'ON' # drop index 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 ';' end_colon=yes # allows end ';'
except=no # except except=no # except
except_all=no # except all except_all=no # except all
...@@ -275,7 +277,7 @@ func_where_unique=no # Function UNIQUE ...@@ -275,7 +277,7 @@ func_where_unique=no # Function UNIQUE
functions=yes # Functions functions=yes # Functions
group_by=yes # Group by group_by=yes # Group by
group_by_alias=yes # Group by alias 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_by_position=yes # Group by position
group_distinct_functions=yes # Group functions with distinct group_distinct_functions=yes # Group functions with distinct
group_func_extra_bit_and=yes # Group function BIT_AND 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 ...@@ -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_some=no # Group function SOME
group_func_sql_sum=yes # Group function SUM group_func_sql_sum=yes # Group function SUM
group_functions=yes # Group functions group_functions=yes # Group functions
group_on_unused=yes # Group on unused column
has_true_false=no # TRUE and FALSE has_true_false=no # TRUE and FALSE
having=yes # Having having=yes # Having
having_with_alias=yes # Having on alias having_with_alias=yes # Having on alias
having_with_group=yes # Having with group function having_with_group=yes # Having with group function
hex_numbers=yes # hex numbers (0x41) hex_numbers=yes # hex numbers (0x41)
hex_strings=no # hex strings (x'1ace') 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_in_create=yes # index in create table
index_namespace=yes # different namespace for index index_namespace=yes # different namespace for index
index_parts=yes # index on column part (extension) index_parts=yes # index on column part (extension)
inner_join=yes # inner join inner_join=yes # inner join
insert_empty_string=yes # insert empty string insert_empty_string=yes # insert empty string
insert_multi_value=yes # INSERT with Value lists
insert_select=yes # insert INTO ... SELECT ... insert_select=yes # insert INTO ... SELECT ...
insert_with_set=yes # INSERT with set syntax insert_with_set=yes # INSERT with set syntax
intersect=no # intersect intersect=no # intersect
...@@ -351,7 +355,6 @@ multi_null_in_unique=yes # null in unique index ...@@ -351,7 +355,6 @@ multi_null_in_unique=yes # null in unique index
multi_strings=yes # Multiple line strings multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables multi_table_update=no # Update with many tables
multi_value_insert=yes # Value lists in INSERT
natural_join=yes # natural join natural_join=yes # natural join
natural_join_incompat=yes # natural join (incompatible lists) natural_join_incompat=yes # natural join (incompatible lists)
natural_left_outer_join=yes # natural left outer join natural_left_outer_join=yes # natural left outer join
...@@ -360,6 +363,7 @@ null_concat_expr=yes # Is concat('a',NULL) = NULL ...@@ -360,6 +363,7 @@ null_concat_expr=yes # Is concat('a',NULL) = NULL
null_in_index=yes # null in index null_in_index=yes # null in index
null_in_unique=yes # null in unique index null_in_unique=yes # null in unique index
null_num_expr=yes # Is 1+NULL = NULL 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 odbc_left_outer_join=yes # left outer join odbc style
operating_system=Linux 2.2.13-SMP alpha # crash-me tested on operating_system=Linux 2.2.13-SMP alpha # crash-me tested on
order_by=yes # Order by order_by=yes # Order by
...@@ -367,6 +371,7 @@ order_by_alias=yes # Order by alias ...@@ -367,6 +371,7 @@ order_by_alias=yes # Order by alias
order_by_function=yes # Order by function order_by_function=yes # Order by function
order_by_position=yes # Order by position order_by_position=yes # Order by position
order_by_remember_desc=no # Order by DESC is remembered 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 primary_key_in_create=yes # primary key in create table
psm_functions=no # PSM functions (ANSI SQL) psm_functions=no # PSM functions (ANSI SQL)
psm_modules=no # PSM modules (ANSI SQL) psm_modules=no # PSM modules (ANSI SQL)
...@@ -389,14 +394,14 @@ select_limit2=yes # SELECT with LIMIT #,# ...@@ -389,14 +394,14 @@ select_limit2=yes # SELECT with LIMIT #,#
select_string_size=1048565 # constant string size in SELECT select_string_size=1048565 # constant string size in SELECT
select_table_update=no # Update with sub select select_table_update=no # Update with sub select
select_without_from=yes # SELECT without FROM 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 simple_joins=yes # ANSI SQL simple joins
storage_of_float=round # Storage of float values storage_of_float=round # Storage of float values
subqueries=no # subqueries subqueries=no # subqueries
table_alias=yes # Table alias table_alias=yes # Table alias
table_name_case=no # case independent table names table_name_case=no # case independent table names
table_wildcard=yes # Select table_name.* table_wildcard=yes # Select table_name.*
tempoary_table=yes # temporary tables temporary_table=yes # temporary tables
transactions=no # transactions transactions=no # transactions
truncate_table=yes # truncate truncate_table=yes # truncate
type_extra_abstime=no # Type abstime type_extra_abstime=no # Type abstime
...@@ -515,4 +520,4 @@ unique_in_create=yes # unique in create table ...@@ -515,4 +520,4 @@ unique_in_create=yes # unique in create table
unique_null_in_create=yes # unique null in create unique_null_in_create=yes # unique null in create
user_comment=Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; ccc + cxx # comment user_comment=Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; ccc + cxx # comment
views=no # views 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 NEG=yes # update of column= -column
Need_cast_for_null=no # Need to cast NULL for arithmetic 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 ...@@ -18,10 +18,10 @@ alter_drop_unique=with drop key # Alter table drop unique
alter_modify_col=yes # Alter table modify column alter_modify_col=yes # Alter table modify column
alter_rename_table=yes # Alter table rename table alter_rename_table=yes # Alter table rename table
atomic_updates=no # atomic updates atomic_updates=no # atomic updates
automatic_rowid=_rowid # Automatic rowid automatic_rowid=_rowid # Automatic row id
binary_numbers=no # binary numbers (0b1001) binary_numbers=no # binary numbers (0b1001)
binary_strings=no # binary strings (b'0110') 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 char_is_space_filled=no # char are space filled
column_alias=yes # Column alias column_alias=yes # Column alias
columns_in_group_by=+64 # number of columns in group by columns_in_group_by=+64 # number of columns in group by
...@@ -36,7 +36,7 @@ constraint_check=no # Column constraints ...@@ -36,7 +36,7 @@ constraint_check=no # Column constraints
constraint_check_table=no # Table constraints constraint_check_table=no # Table constraints
constraint_null=yes # NULL constraint (SyBase style) constraint_null=yes # NULL constraint (SyBase style)
crash_me_safe=yes # crash me safe 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=yes # default value for column
create_default_func=no # default value function for column create_default_func=no # default value function for column
create_if_not_exists=yes # create table if not exists 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 ...@@ -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 double_quotes=yes # Double '' as ' in strings
drop_if_exists=yes # drop table if exists drop_if_exists=yes # drop table if exists
drop_index=with 'ON' # drop index 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 ';' end_colon=yes # allows end ';'
except=no # except except=no # except
except_all=no # except all except_all=no # except all
...@@ -275,7 +277,7 @@ func_where_unique=no # Function UNIQUE ...@@ -275,7 +277,7 @@ func_where_unique=no # Function UNIQUE
functions=yes # Functions functions=yes # Functions
group_by=yes # Group by group_by=yes # Group by
group_by_alias=yes # Group by alias 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_by_position=yes # Group by position
group_distinct_functions=yes # Group functions with distinct group_distinct_functions=yes # Group functions with distinct
group_func_extra_bit_and=yes # Group function BIT_AND 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 ...@@ -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_some=no # Group function SOME
group_func_sql_sum=yes # Group function SUM group_func_sql_sum=yes # Group function SUM
group_functions=yes # Group functions group_functions=yes # Group functions
group_on_unused=yes # Group on unused column
has_true_false=no # TRUE and FALSE has_true_false=no # TRUE and FALSE
having=yes # Having having=yes # Having
having_with_alias=yes # Having on alias having_with_alias=yes # Having on alias
having_with_group=yes # Having with group function having_with_group=yes # Having with group function
hex_numbers=yes # hex numbers (0x41) hex_numbers=yes # hex numbers (0x41)
hex_strings=no # hex strings (x'1ace') 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_in_create=yes # index in create table
index_namespace=yes # different namespace for index index_namespace=yes # different namespace for index
index_parts=yes # index on column part (extension) index_parts=yes # index on column part (extension)
inner_join=yes # inner join inner_join=yes # inner join
insert_empty_string=yes # insert empty string insert_empty_string=yes # insert empty string
insert_multi_value=yes # INSERT with Value lists
insert_select=yes # insert INTO ... SELECT ... insert_select=yes # insert INTO ... SELECT ...
insert_with_set=yes # INSERT with set syntax insert_with_set=yes # INSERT with set syntax
intersect=no # intersect intersect=no # intersect
...@@ -351,7 +355,6 @@ multi_null_in_unique=yes # null in unique index ...@@ -351,7 +355,6 @@ multi_null_in_unique=yes # null in unique index
multi_strings=yes # Multiple line strings multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables multi_table_update=no # Update with many tables
multi_value_insert=yes # Value lists in INSERT
natural_join=yes # natural join natural_join=yes # natural join
natural_join_incompat=yes # natural join (incompatible lists) natural_join_incompat=yes # natural join (incompatible lists)
natural_left_outer_join=yes # natural left outer join natural_left_outer_join=yes # natural left outer join
...@@ -360,6 +363,7 @@ null_concat_expr=yes # Is concat('a',NULL) = NULL ...@@ -360,6 +363,7 @@ null_concat_expr=yes # Is concat('a',NULL) = NULL
null_in_index=yes # null in index null_in_index=yes # null in index
null_in_unique=yes # null in unique index null_in_unique=yes # null in unique index
null_num_expr=yes # Is 1+NULL = NULL 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 odbc_left_outer_join=yes # left outer join odbc style
operating_system=Linux 2.2.13-SMP alpha # crash-me tested on operating_system=Linux 2.2.13-SMP alpha # crash-me tested on
order_by=yes # Order by order_by=yes # Order by
...@@ -367,6 +371,7 @@ order_by_alias=yes # Order by alias ...@@ -367,6 +371,7 @@ order_by_alias=yes # Order by alias
order_by_function=yes # Order by function order_by_function=yes # Order by function
order_by_position=yes # Order by position order_by_position=yes # Order by position
order_by_remember_desc=no # Order by DESC is remembered 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 primary_key_in_create=yes # primary key in create table
psm_functions=no # PSM functions (ANSI SQL) psm_functions=no # PSM functions (ANSI SQL)
psm_modules=no # PSM modules (ANSI SQL) psm_modules=no # PSM modules (ANSI SQL)
...@@ -389,14 +394,14 @@ select_limit2=yes # SELECT with LIMIT #,# ...@@ -389,14 +394,14 @@ select_limit2=yes # SELECT with LIMIT #,#
select_string_size=1048565 # constant string size in SELECT select_string_size=1048565 # constant string size in SELECT
select_table_update=no # Update with sub select select_table_update=no # Update with sub select
select_without_from=yes # SELECT without FROM 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 simple_joins=yes # ANSI SQL simple joins
storage_of_float=round # Storage of float values storage_of_float=round # Storage of float values
subqueries=no # subqueries subqueries=no # subqueries
table_alias=yes # Table alias table_alias=yes # Table alias
table_name_case=no # case independent table names table_name_case=no # case independent table names
table_wildcard=yes # Select table_name.* table_wildcard=yes # Select table_name.*
tempoary_table=yes # temporary tables temporary_table=yes # temporary tables
transactions=no # transactions transactions=no # transactions
truncate_table=yes # truncate truncate_table=yes # truncate
type_extra_abstime=no # Type abstime type_extra_abstime=no # Type abstime
...@@ -515,4 +520,4 @@ unique_in_create=yes # unique in create table ...@@ -515,4 +520,4 @@ unique_in_create=yes # unique in create table
unique_null_in_create=yes # unique null in create unique_null_in_create=yes # unique null in create
user_comment=Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; ccc + cxx # comment user_comment=Alpha DS20 2x500 MHz, 2G memory, key_buffer=16M; ccc + cxx # comment
views=no # views 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 ...@@ -345,7 +345,7 @@ multi_null_in_unique=yes # null in unique index
multi_strings=no # Multiple line strings multi_strings=no # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables 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=no # natural join
natural_join_incompat=no # natural join (incompatible lists) natural_join_incompat=no # natural join (incompatible lists)
natural_left_outer_join=no # natural left outer join natural_left_outer_join=no # natural left outer join
......
...@@ -343,7 +343,7 @@ multi_null_in_unique=yes # null in unique index ...@@ -343,7 +343,7 @@ multi_null_in_unique=yes # null in unique index
multi_strings=yes # Multiple line strings multi_strings=yes # Multiple line strings
multi_table_delete=no # DELETE FROM table1,table2... multi_table_delete=no # DELETE FROM table1,table2...
multi_table_update=no # Update with many tables 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=yes # natural join
natural_join_incompat=yes # natural join (incompatible lists) natural_join_incompat=yes # natural join (incompatible lists)
natural_left_outer_join=no # natural left outer join 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 ...@@ -163,10 +163,14 @@ print_match("String handling","string|select_constant|quote_with|double_quotes|e
print_match("Quoting","quote"); print_match("Quoting","quote");
print_match("Name limits","name","alter"); print_match("Name limits","name","alter");
print_match("Index limits",'index|primary|unique'); print_match("Index limits",'index|primary|unique');
print_match("Type limits",'char|float|binary|text_size|date|end_space'); print_match("Type limits",'char|float|text_size|date|end_space','atomic');
print_match("Expression limits",'expression|conditions|select_limit'); print_match("Expressions",'expression|conditions|select_limit|binary|hex|cast|logical|true_false');
print_match("Comments",'comment'); print_match("Comments",'comment');
print_match("ALTER TABLE",'alter'); 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_options("Other features");
print_match("Other limits",'\S'); print_match("Other limits",'\S');
......
File mode changed from 100755 to 100644
...@@ -151,7 +151,7 @@ sub new ...@@ -151,7 +151,7 @@ sub new
$limits{'alter_table'} = 1; # Have ALTER TABLE $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_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{'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(). $limits{'group_func_extra_std'} = 1; # Have group function std().
...@@ -2775,7 +2775,7 @@ sub new ...@@ -2775,7 +2775,7 @@ sub new
$limits{'alter_table'} = 1; # Have ALTER TABLE $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_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{'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(). $limits{'group_func_extra_std'} = 0; # Does not have group function std().
...@@ -2975,7 +2975,7 @@ sub new ...@@ -2975,7 +2975,7 @@ sub new
$limits{'alter_table'} = 1; # Have ALTER TABLE $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_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{'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(). $limits{'group_func_extra_std'} = 0; # Does not have group function std().
...@@ -3186,7 +3186,7 @@ sub new ...@@ -3186,7 +3186,7 @@ sub new
$limits{'alter_table'} = 1; # Have ALTER TABLE $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_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{'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(). $limits{'group_func_extra_std'} = 0; # Does not have group function std().
...@@ -3227,7 +3227,7 @@ sub version ...@@ -3227,7 +3227,7 @@ sub version
# Pick up SQLGetInfo option SQL_DBMS_VER (18) # Pick up SQLGetInfo option SQL_DBMS_VER (18)
# #
#$version = $dbh->func(18, GetInfo); #$version = $dbh->func(18, GetInfo);
$version="2.1"; $version="FrontBase 2.1";
$dbh->disconnect; $dbh->disconnect;
return $version; 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 ...@@ -130,7 +130,7 @@ else
$query="insert into bench1 (id,id2,id3,dummy1) values "; $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'}; $query_size=$server->{'limits'}->{'query_size'};
...@@ -1177,7 +1177,7 @@ if ($server->small_rollback_segment()) ...@@ -1177,7 +1177,7 @@ if ($server->small_rollback_segment())
$loop_time=new Benchmark; $loop_time=new Benchmark;
$fields=$#fields; $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_size=$server->{'limits'}->{'query_size'};
$query="insert into bench1 values "; $query="insert into bench1 values ";
...@@ -1331,7 +1331,7 @@ if ($opt_fast && defined($server->{vacuum})) ...@@ -1331,7 +1331,7 @@ if ($opt_fast && defined($server->{vacuum}))
# Test multi value inserts if the server supports it # 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 $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) ...@@ -483,6 +483,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
char fixed_name[FN_REFLEN]; char fixed_name[FN_REFLEN];
const char *old_proc_info=thd->proc_info; const char *old_proc_info=thd->proc_info;
MYISAM_SHARE* share = file->s; MYISAM_SHARE* share = file->s;
ha_rows rows= file->state->records;
DBUG_ENTER("ha_myisam::repair"); DBUG_ENTER("ha_myisam::repair");
param.table_name = table->table_name; param.table_name = table->table_name;
...@@ -559,6 +560,13 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize) ...@@ -559,6 +560,13 @@ int ha_myisam::repair(THD *thd, MI_CHECK &param, bool optimize)
T_STATISTICS ? UPDATE_STAT : 0)); T_STATISTICS ? UPDATE_STAT : 0));
info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE | info(HA_STATUS_NO_LOCK | HA_STATUS_TIME | HA_STATUS_VARIABLE |
HA_STATUS_CONST); 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 else
{ {
......
...@@ -388,7 +388,9 @@ int main(int argc, char** argv) ...@@ -388,7 +388,9 @@ int main(int argc, char** argv)
if(use_remote) if(use_remote)
{ {
#ifndef __WIN__
init_thr_alarm(10); // need to do this manually init_thr_alarm(10); // need to do this manually
#endif
mysql = safe_connect(); mysql = safe_connect();
} }
......
...@@ -170,6 +170,7 @@ static struct rand_struct sql_rand; ...@@ -170,6 +170,7 @@ static struct rand_struct sql_rand;
static int cleanup_done; static int cleanup_done;
static char **defaults_argv,time_zone[30]; static char **defaults_argv,time_zone[30];
static const char *default_table_type_name; static const char *default_table_type_name;
static char glob_hostname[FN_REFLEN];
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
static bool opt_use_ssl = FALSE; static bool opt_use_ssl = FALSE;
...@@ -356,6 +357,7 @@ static void close_connections(void) ...@@ -356,6 +357,7 @@ static void close_connections(void)
#if defined(AIX_3_2) || defined(HAVE_DEC_3_2_THREADS) #if defined(AIX_3_2) || defined(HAVE_DEC_3_2_THREADS)
if (ip_sock != INVALID_SOCKET) if (ip_sock != INVALID_SOCKET)
{ {
DBUG_PRINT("error",("closing TCP/IP and socket files"));
VOID(shutdown(ip_sock,2)); VOID(shutdown(ip_sock,2));
VOID(closesocket(ip_sock)); VOID(closesocket(ip_sock));
VOID(shutdown(unix_sock,2)); VOID(shutdown(unix_sock,2));
...@@ -607,12 +609,15 @@ void clean_up(void) ...@@ -607,12 +609,15 @@ void clean_up(void)
free_defaults(defaults_argv); free_defaults(defaults_argv);
my_free(mysql_tmpdir,MYF(0)); my_free(mysql_tmpdir,MYF(0));
x_free(opt_bin_logname); x_free(opt_bin_logname);
#ifndef __WIN__
(void) my_delete(pidfile_name,MYF(0)); // This may not always exist (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 */ /* Tell main we are ready */
(void) pthread_mutex_lock(&LOCK_thread_count); (void) pthread_mutex_lock(&LOCK_thread_count);
ready_to_exit=1; 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_cond_broadcast(&COND_thread_count);
(void) pthread_mutex_unlock(&LOCK_thread_count); (void) pthread_mutex_unlock(&LOCK_thread_count);
} /* clean_up */ } /* clean_up */
...@@ -926,8 +931,8 @@ void end_thread(THD *thd, bool put_in_cache) ...@@ -926,8 +931,8 @@ void end_thread(THD *thd, bool put_in_cache)
DBUG_PRINT("info", ("sending a broadcast")) DBUG_PRINT("info", ("sending a broadcast"))
/* Tell main we are ready */ /* Tell main we are ready */
(void) pthread_cond_broadcast(&COND_thread_count);
(void) pthread_mutex_unlock(&LOCK_thread_count); (void) pthread_mutex_unlock(&LOCK_thread_count);
(void) pthread_cond_broadcast(&COND_thread_count);
DBUG_PRINT("info", ("unlocked thread_count mutex")) DBUG_PRINT("info", ("unlocked thread_count mutex"))
#ifdef ONE_THREAD #ifdef ONE_THREAD
if (!(test_flags & TEST_NO_THREADS)) // For debugging under Linux if (!(test_flags & TEST_NO_THREADS)) // For debugging under Linux
...@@ -1308,7 +1313,6 @@ int main(int argc, char **argv) ...@@ -1308,7 +1313,6 @@ int main(int argc, char **argv)
#endif #endif
{ {
DEBUGGER_OFF; DEBUGGER_OFF;
char hostname[FN_REFLEN];
my_umask=0660; // Default umask for new files my_umask=0660; // Default umask for new files
my_umask_dir=0700; // Default umask for new directories my_umask_dir=0700; // Default umask for new directories
...@@ -1332,9 +1336,9 @@ int main(int argc, char **argv) ...@@ -1332,9 +1336,9 @@ int main(int argc, char **argv)
#endif #endif
#endif #endif
if (gethostname(hostname,sizeof(hostname)-4) < 0) if (gethostname(glob_hostname,sizeof(glob_hostname)-4) < 0)
strmov(hostname,"mysql"); strmov(glob_hostname,"mysql");
strmov(pidfile_name,hostname); strmov(pidfile_name,glob_hostname);
strmov(strcend(pidfile_name,'.'),".pid"); // Add extension strmov(strcend(pidfile_name,'.'),".pid"); // Add extension
#ifdef DEMO_VERSION #ifdef DEMO_VERSION
strcat(server_version,"-demo"); strcat(server_version,"-demo");
...@@ -1488,9 +1492,9 @@ int main(int argc, char **argv) ...@@ -1488,9 +1492,9 @@ int main(int argc, char **argv)
/* Setup log files */ /* Setup log files */
if (opt_log) 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) 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); LOG_NEW);
if (opt_bin_log) if (opt_bin_log)
{ {
...@@ -1499,12 +1503,12 @@ int main(int argc, char **argv) ...@@ -1499,12 +1503,12 @@ int main(int argc, char **argv)
if (!opt_bin_logname) if (!opt_bin_logname)
{ {
char tmp[FN_REFLEN]; char tmp[FN_REFLEN];
strnmov(tmp,hostname,FN_REFLEN-5); strnmov(tmp,glob_hostname,FN_REFLEN-5);
strmov(strcend(tmp,'.'),"-bin"); strmov(strcend(tmp,'.'),"-bin");
opt_bin_logname=my_strdup(tmp,MYF(MY_WME)); opt_bin_logname=my_strdup(tmp,MYF(MY_WME));
} }
mysql_bin_log.set_index_file_name(opt_binlog_index_name); 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); LOG_BIN);
} }
else else
...@@ -1512,7 +1516,7 @@ int main(int argc, char **argv) ...@@ -1512,7 +1516,7 @@ int main(int argc, char **argv)
} }
if (opt_slow_log) 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); LOG_NORMAL);
if (ha_init()) if (ha_init())
{ {
...@@ -1711,10 +1715,7 @@ int main(int argc, char **argv) ...@@ -1711,10 +1715,7 @@ int main(int argc, char **argv)
pthread_cond_wait(&COND_thread_count,&LOCK_thread_count); pthread_cond_wait(&COND_thread_count,&LOCK_thread_count);
} }
(void) pthread_mutex_unlock(&LOCK_thread_count); (void) pthread_mutex_unlock(&LOCK_thread_count);
#ifndef __WIN__ my_end(opt_endinfo ? MY_CHECK_ERROR | MY_GIVE_INFO : 0);
(void) my_delete(pidfile_name,MYF(0)); // Not neaded anymore
#endif
my_thread_end();
exit(0); exit(0);
return(0); /* purecov: deadcode */ return(0); /* purecov: deadcode */
} }
...@@ -2089,8 +2090,8 @@ pthread_handler_decl(handle_connections_sockets,arg __attribute__((unused))) ...@@ -2089,8 +2090,8 @@ pthread_handler_decl(handle_connections_sockets,arg __attribute__((unused)))
#ifdef __NT__ #ifdef __NT__
pthread_mutex_lock(&LOCK_thread_count); pthread_mutex_lock(&LOCK_thread_count);
handler_count--; handler_count--;
pthread_cond_signal(&COND_handler_count);
pthread_mutex_unlock(&LOCK_thread_count); pthread_mutex_unlock(&LOCK_thread_count);
pthread_cond_signal(&COND_handler_count);
#endif #endif
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
...@@ -197,5 +197,4 @@ ...@@ -197,5 +197,4 @@
"Okänd system variabel '%-.64'", "Okänd system variabel '%-.64'",
"Tabell '%-.64s' är crashad och bör repareras med REPAIR TABLE", "Tabell '%-.64s' är crashad och bör repareras med REPAIR TABLE",
"Tabell '%-.64s' är crashad och senast (automatiska?) reparation misslyckades", "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", "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, ...@@ -669,12 +669,11 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
DBUG_RETURN(0); DBUG_RETURN(0);
key_length= (uint) (strmov(strmov(key,db)+1,table_name)-key)+1; key_length= (uint) (strmov(strmov(key,db)+1,table_name)-key)+1;
int4store(key + key_length, thd->slave_proxy_id); int4store(key + key_length, thd->slave_proxy_id);
key_length += 4;
for (table=thd->temporary_tables; table ; table=table->next) for (table=thd->temporary_tables; table ; table=table->next)
{ {
if (table->key_length == key_length && if (table->key_length == key_length+4 &&
!memcmp(table->table_cache_key,key,key_length)) !memcmp(table->table_cache_key,key,key_length+4))
{ {
if (table->query_id == thd->query_id) if (table->query_id == thd->query_id)
{ {
......
...@@ -1404,8 +1404,11 @@ mysql_execute_command(void) ...@@ -1404,8 +1404,11 @@ mysql_execute_command(void)
#endif #endif
break; break;
} }
case SQLCOM_DELETE:
case SQLCOM_TRUNCATE: 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)) if (check_access(thd,DELETE_ACL,tables->db,&tables->grant.privilege))
goto error; /* purecov: inspected */ goto error; /* purecov: inspected */
...@@ -1589,7 +1592,10 @@ mysql_execute_command(void) ...@@ -1589,7 +1592,10 @@ mysql_execute_command(void)
} }
} }
else else
{
thd->options&= ~(ulong) (OPTION_STATUS_NO_TRANS_UPDATE);
thd->server_status&= ~SERVER_STATUS_AUTOCOMMIT; thd->server_status&= ~SERVER_STATUS_AUTOCOMMIT;
}
} }
send_ok(&thd->net); send_ok(&thd->net);
break; break;
...@@ -1755,9 +1761,17 @@ mysql_execute_command(void) ...@@ -1755,9 +1761,17 @@ mysql_execute_command(void)
} }
break; break;
case SQLCOM_BEGIN: case SQLCOM_BEGIN:
thd->options|= OPTION_BEGIN; if (end_active_trans(thd))
thd->server_status|= SERVER_STATUS_IN_TRANS; {
send_ok(&thd->net); 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; break;
case SQLCOM_COMMIT: case SQLCOM_COMMIT:
/* /*
......
...@@ -23,7 +23,8 @@ ...@@ -23,7 +23,8 @@
#include "sql_select.h" // For select_describe #include "sql_select.h" // For select_describe
#include "sql_acl.h" #include "sql_acl.h"
#include <my_dir.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[]={ static const char *grant_names[]={
"select","insert","update","delete","create","drop","reload","shutdown", "select","insert","update","delete","create","drop","reload","shutdown",
...@@ -988,7 +989,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables) ...@@ -988,7 +989,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables)
if (send_fields(thd,field_list,1)) if (send_fields(thd,field_list,1))
DBUG_RETURN(1); /* purecov: inspected */ DBUG_RETURN(1); /* purecov: inspected */
pthread_mutex_lock(&THR_LOCK_keycache); /* pthread_mutex_lock(&THR_LOCK_keycache); */
pthread_mutex_lock(&LOCK_status); pthread_mutex_lock(&LOCK_status);
for (i=0; variables[i].name; i++) for (i=0; variables[i].name; i++)
{ {
...@@ -1037,13 +1038,13 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables) ...@@ -1037,13 +1038,13 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables)
} }
} }
pthread_mutex_unlock(&LOCK_status); pthread_mutex_unlock(&LOCK_status);
pthread_mutex_unlock(&THR_LOCK_keycache); /* pthread_mutex_unlock(&THR_LOCK_keycache); */
send_eof(&thd->net); send_eof(&thd->net);
DBUG_RETURN(0); DBUG_RETURN(0);
err: err:
pthread_mutex_unlock(&LOCK_status); pthread_mutex_unlock(&LOCK_status);
pthread_mutex_unlock(&THR_LOCK_keycache); /* pthread_mutex_unlock(&THR_LOCK_keycache); */
DBUG_RETURN(1); 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