diff options
author | unknown <monty@hundin.mysql.fi> | 2001-11-28 03:47:15 +0200 |
---|---|---|
committer | unknown <monty@hundin.mysql.fi> | 2001-11-28 03:47:15 +0200 |
commit | 38da1f9853ec773e6c32cdf931b1fafef2736995 (patch) | |
tree | 1591378c44e709fb0ac9df322ad1e001c517ae50 | |
parent | da9b7e0c87b8fe7349256c3068aed09d02fb3a47 (diff) | |
download | mariadb-git-38da1f9853ec773e6c32cdf931b1fafef2736995.tar.gz |
Fix for IO_CACHE.
Portability fixes.
BUILD/compile-alpha-debug:
Update to newer version
libmysqld/lib_vio.c:
dbug_assert -> DBUG_ASSERT
mysql-test/r/symlink.result:
Update for new tests
mysql-test/t/symlink.test:
Update for new test format
mysys/mf_iocache2.c:
Fixed bug when reading in old buffer
sql-bench/test-transactions.sh:
Update with delete tests
sql/mysqld.cc:
Updates for amiga
sql/sql_string.cc:
Fix typo
sql/stacktrace.c:
Portability fix
-rwxr-xr-x | BUILD/compile-alpha-debug | 7 | ||||
-rw-r--r-- | libmysqld/lib_vio.c | 2 | ||||
-rw-r--r-- | mysql-test/r/symlink.result | 18 | ||||
-rw-r--r-- | mysql-test/t/symlink.test | 17 | ||||
-rw-r--r-- | mysys/mf_iocache2.c | 20 | ||||
-rw-r--r-- | sql-bench/test-transactions.sh | 170 | ||||
-rw-r--r-- | sql/mysqld.cc | 9 | ||||
-rw-r--r-- | sql/sql_string.cc | 6 | ||||
-rw-r--r-- | sql/stacktrace.c | 2 |
9 files changed, 142 insertions, 109 deletions
diff --git a/BUILD/compile-alpha-debug b/BUILD/compile-alpha-debug index 06b5a10675e..60d1b9af659 100755 --- a/BUILD/compile-alpha-debug +++ b/BUILD/compile-alpha-debug @@ -1,7 +1,8 @@ +/bin/rm -f */.deps/*.P */*.o make -k clean -/bin/rm -f */.deps/*.P -/bin/rm -f config.cache +/bin/rm -f */.deps/*.P */*.o +/bin/rm -f */.deps/*.P config.cache innobase/config.cache bdb/build_unix/config.cache mysql-*.tar.gz aclocal; autoheader; aclocal; automake; autoconf -CFLAGS=-O6 CXX=gcc CXXFLAGS="-O6 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-debug --with-extra-charsets=complex +CFLAGS=-O1 CC=gcc CXX=gcc CXXFLAGS="-O1 -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local/mysql --with-debug --with-extra-charsets=complex --without-extra-tools make diff --git a/libmysqld/lib_vio.c b/libmysqld/lib_vio.c index 270b08ef51d..3c07dd08ec4 100644 --- a/libmysqld/lib_vio.c +++ b/libmysqld/lib_vio.c @@ -110,7 +110,7 @@ int vio_read(Vio * vio, gptr buf, int size) vio->reading = 1; if (vio->where_in_packet >= vio->end_of_packet) { - dbug_assert(vio->packets); + DBUG_ASSERT(vio->packets); vio->where_in_packet = vio->packets + sizeof(char *) + 4; vio->end_of_packet = vio->where_in_packet + uint4korr(vio->packets + sizeof(char *)); diff --git a/mysql-test/r/symlink.result b/mysql-test/r/symlink.result index 3f8132d2296..5626bc0fe11 100644 --- a/mysql-test/r/symlink.result +++ b/mysql-test/r/symlink.result @@ -21,7 +21,6 @@ insert into t1 (b) select b from t2; insert into t2 (b) select b from t1; insert into t1 (b) select b from t2; drop table t2; - create table t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam data directory="/home/sasha/bk/mysql-4.0/mysql-test/var/tmp" index directory="/home/sasha/bk/mysql-4.0/mysql-test/var/run"; insert into t9 select * from t1; check table t9; Table Op Msg_type Msg_text @@ -45,18 +44,11 @@ alter table t9 rename t8, add column d int not null; alter table t8 rename t7; rename table t7 to t9; drop table t1; -create table t1 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam data directory="tmp"; -Incorrect table name 'tmp' -drop database if exists test_mysqltest; -create database test_mysqltest; -create table test_mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam index directory="/this-dir-does-not-exist"; -Can't create/write to file '/this-dir-does-not-exist/t9.MYI' (Errcode: 2) -create table test_mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam index directory="not-hard-path"; -Incorrect table name 'not-hard-path' - create table test_mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam index directory="/home/sasha/bk/mysql-4.0/mysql-test/var/run"; -Can't create/write to file '/home/sasha/bk/mysql-4.0/mysql-test/var/run/t9.MYI' (Errcode: 17) - create table test_mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam data directory="/home/sasha/bk/mysql-4.0/mysql-test/var/tmp"; -Can't create/write to file '/home/sasha/bk/mysql-4.0/mysql-test/var/tmp/t9.MYD' (Errcode: 17) +Got one of the listed errors +Got one of the listed errors +Got one of the listed errors +Got one of the listed errors +Got one of the listed errors alter table t9 rename test_mysqltest.t9; select count(*) from test_mysqltest.t9; count(*) diff --git a/mysql-test/t/symlink.test b/mysql-test/t/symlink.test index 5e2b8232844..586761921b8 100644 --- a/mysql-test/t/symlink.test +++ b/mysql-test/t/symlink.test @@ -1,5 +1,7 @@ -- require r/have_symlink.require +disable_query_log; show variables like "have_symlink"; +enable_query_log; # # First create little data to play with @@ -33,7 +35,10 @@ drop table t2; # We use t9 here to not crash with tables generated by the backup test # +disable_query_log; eval create table t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam data directory="$MYSQL_TEST_DIR/var/tmp" index directory="$MYSQL_TEST_DIR/var/run"; +enable_query_log; + insert into t9 select * from t1; check table t9; optimize table t9; @@ -53,7 +58,8 @@ drop table t1; # Note that we are using the above table t9 here! # ---error 1103 +disable_query_log; +--error 1103,1103 create table t1 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam data directory="tmp"; # Check that we cannot link over a table from another database. @@ -61,17 +67,18 @@ create table t1 (a int not null auto_increment, b char(16) not null, primary key drop database if exists test_mysqltest; create database test_mysqltest; ---error 1 +--error 1,1 create table test_mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam index directory="/this-dir-does-not-exist"; ---error 1103 +--error 1103,1103 create table test_mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam index directory="not-hard-path"; ---error 1 +--error 1,1 eval create table test_mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam index directory="$MYSQL_TEST_DIR/var/run"; ---error 1 +--error 1,1 eval create table test_mysqltest.t9 (a int not null auto_increment, b char(16) not null, primary key (a)) type=myisam data directory="$MYSQL_TEST_DIR/var/tmp"; +enable_query_log; # Check moving table t9 from default database to test_mysqltest; # In this case the symlinks should be removed. diff --git a/mysys/mf_iocache2.c b/mysys/mf_iocache2.c index d85215a2f4b..59ad3675f5f 100644 --- a/mysys/mf_iocache2.c +++ b/mysys/mf_iocache2.c @@ -32,17 +32,16 @@ void my_b_seek(IO_CACHE *info,my_off_t pos) { + my_off_t offset = (pos - info->pos_in_file); DBUG_ENTER("my_b_seek"); DBUG_PRINT("enter",("pos: %lu", (ulong) pos)); if (info->type == READ_CACHE) { - byte* try_pos=info->read_pos + (pos - info->pos_in_file); - if (try_pos >= info->buffer && - try_pos <= info->read_end) + if ((ulonglong) offset < (ulonglong) (info->read_end - info->buffer)) { - /* The position is in the current buffer; Reuse it */ - info->read_pos = try_pos; + /* The read is in the current buffer; Reuse it */ + info->read_pos = info->buffer + offset; DBUG_VOID_RETURN; } else @@ -53,17 +52,14 @@ void my_b_seek(IO_CACHE *info,my_off_t pos) } else if (info->type == WRITE_CACHE) { - byte* try_pos; /* If write is in current buffer, reuse it */ - try_pos = info->write_pos + (pos - info->pos_in_file); - if (try_pos >= info->write_buffer && - try_pos <= info->write_end) + if ((ulonglong) offset < + (ulonglong) (info->write_end - info->write_buffer)) { - info->write_pos = try_pos; + info->write_pos = info->write_buffer + offset; DBUG_VOID_RETURN; } - else - flush_io_cache(info); + flush_io_cache(info); } info->pos_in_file=pos; info->seek_not_done=1; diff --git a/sql-bench/test-transactions.sh b/sql-bench/test-transactions.sh index 62de009ab33..adb76e6f68d 100644 --- a/sql-bench/test-transactions.sh +++ b/sql-bench/test-transactions.sh @@ -1,5 +1,4 @@ #!@PERL@ -# # Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB # # This library is free software; you can redistribute it and/or @@ -28,7 +27,7 @@ use warnings; $opt_groups=27; # Characters are 'A' -> Z -$opt_loop_count=100000; # Change this to make test harder/easier +$opt_loop_count=10000; # Change this to make test harder/easier $opt_medium_loop_count=100; # Change this to make test harder/easier chomp($pwd = `pwd`); $pwd = "." if ($pwd eq ''); @@ -114,86 +113,109 @@ sub test_insert } ### -### Test update perfomance +### Test rollback performance ### -test_update("bench1","update_commit",0); -test_update("bench2","update_autocommit",1); +print "Test transactions rollback performance\n" if($opt_debug); + +## +## Insert rollback test +## + +# +# Test is done by inserting 100 rows in a table with lots of rows and +# then doing a rollback on these +# -sub test_update { - my ($table, $test_name, $auto_commit)= @_; - my ($loop_time,$end_time,$id); + my ($id,$rev_id,$grp,$region,$end,$loop_time,$end_time,$commit_loop,$count); - $dbh->{AutoCommit}= $auto_commit; + $dbh->{AutoCommit} = 0; $loop_time=new Benchmark; + $end=$opt_loop_count*2; + $count=0; - for ($id=0 ; $id < $opt_loop_count ; $id++) + for ($commit_loop=1, $id=$opt_loop_count ; $id < $end ; + $id++, $commit_loop++) { - do_query($dbh,"update bench1 set updated=1 where idn=$id"); + $rev_id=$end-$id; + $grp=$id/$opt_groups; + $region=chr(65+$id%$opt_groups); + do_query($dbh,"insert into bench1 values ($id,$rev_id,'$region',$grp,0)"); + if ($commit_loop >= $opt_medium_loop_count) + { + $dbh->rollback; + $commit_loop=0; + $count++; + } + } + if ($commit_loop > 1) + { + $dbh->rollback; + $count++; } - - $dbh->commit if (!$auto_commit); $end_time=new Benchmark; - print "Time for $test_name ($opt_loop_count): " . + print "Time for insert_rollback ($count:$opt_loop_count): " . timestr(timediff($end_time, $loop_time),"all") . "\n\n"; } -### -### Test delete perfomance -### +## +## Update rollback test +## -test_delete("bench1","delete_commit",0); -test_delete("bench2","delete_autocommit",1); +# +# Test is done by updating 100 rows in a table with lots of rows and +# then doing a rollback on these +# -sub test_delete { - my ($table, $test_name, $auto_commit)= @_; - my ($loop_time,$end_time,$id); + my ($id,$loop_time,$end_time,$commit_loop,$count); - $dbh->{AutoCommit}= $auto_commit; + $dbh->{AutoCommit} = 0; $loop_time=new Benchmark; + $end=$opt_loop_count*2; + $count=0; - for ($id=0 ; $id < $opt_loop_count ; $id++) - { - do_query($dbh,"delete from $table where idn=$id"); + for ($commit_loop=1, $id=0 ; $id < $opt_loop_count ; $id++, $commit_loop++) + { + do_query($dbh,"update bench1 set updated=2 where idn=$id"); + if ($commit_loop >= $opt_medium_loop_count) + { + $dbh->rollback; + $commit_loop=0; + $count++; + } + } + if ($commit_loop > 1) + { + $dbh->rollback; + $count++; } - $dbh->commit if (!$auto_commit); $end_time=new Benchmark; - print "Time for $test_name ($opt_loop_count): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; + print "Time for update_rollback ($count:$opt_loop_count): " . + timestr(timediff($end_time, $loop_time),"all") . "\n\n"; } -### -### Test rollback performance -### - -print "Test transactions rollback performance\n" if($opt_debug); - ## -## Insert rollback test +## Delete rollback test ## # -# Test is done by inserting 10 rows in a table with lots of rows and +# Test is done by deleting 100 rows in a table with lots of rows and # then doing a rollback on these # { - my ($id,$rev_id,$grp,$region,$end,$loop_time,$end_time,$commit_loop,$count); + my ($id,$loop_time,$end_time,$commit_loop,$count); $dbh->{AutoCommit} = 0; $loop_time=new Benchmark; $end=$opt_loop_count*2; $count=0; - for ($commit_loop=1, $id=$opt_loop_count ; $id < $end ; - $id++, $commit_loop++) + for ($commit_loop=1, $id=0 ; $id < $opt_loop_count ; $id++, $commit_loop++) { - $rev_id=$end-$id; - $grp=$id/$opt_groups; - $region=chr(65+$id%$opt_groups); - do_query($dbh,"insert into bench1 values ($id,$rev_id,'$region',$grp,0)"); + do_query($dbh,"delete from bench1 where idn=$id"); if ($commit_loop >= $opt_medium_loop_count) { $dbh->rollback; @@ -207,56 +229,62 @@ print "Test transactions rollback performance\n" if($opt_debug); $count++; } $end_time=new Benchmark; - print "Time for insert_rollback ($count:$opt_loop_count): " . + print "Time for delete_rollback ($count:$opt_loop_count): " . timestr(timediff($end_time, $loop_time),"all") . "\n\n"; } + ### -### Update rollback test +### Test update perfomance ### -if (0) -{ +test_update("bench1","update_commit",0); +test_update("bench2","update_autocommit",1); - $dbh->{AutoCommit} = 0; +sub test_update +{ + my ($table, $test_name, $auto_commit)= @_; + my ($loop_time,$end_time,$id); + $dbh->{AutoCommit}= $auto_commit; $loop_time=new Benchmark; - for ($id=0,$rev_id=$opt_medium_loop_count ; $id < $opt_medium_loop_count; $id++,$rev_id--) + for ($id=0 ; $id < $opt_loop_count ; $id++) { - $grp=$id/$opt_groups; - $region=chr(65+$id%$opt_groups); - do_query($dbh,"update bench1 set region='$region',grp=$grp where idn=$id"); + do_query($dbh,"update bench1 set updated=1 where idn=$id"); } - $dbh->rollback; - + $dbh->commit if (!$auto_commit); $end_time=new Benchmark; - print "Time for update rollback (" . ($opt_medium_loop_count) . "): " . + print "Time for $test_name ($opt_loop_count): " . timestr(timediff($end_time, $loop_time),"all") . "\n\n"; +} -### Delete rollback test - $dbh->{AutoCommit} = 0; +### +### Test delete perfomance +### - $loop_time=new Benchmark; +test_delete("bench1","delete_commit",0); +test_delete("bench2","delete_autocommit",1); - for ($id=0,$rev_id=$opt_medium_loop_count; $id < $opt_medium_loop_count; $id++,$rev_id--) - { - $grp=$id/$opt_groups; - $region=chr(65+$id%$opt_groups); - do_query($dbh,"delete from bench1 where idn=$id"); - } +sub test_delete +{ + my ($table, $test_name, $auto_commit)= @_; + my ($loop_time,$end_time,$id); - $dbh->rollback; + $dbh->{AutoCommit}= $auto_commit; + $loop_time=new Benchmark; + for ($id=0 ; $id < $opt_loop_count ; $id++) + { + do_query($dbh,"delete from $table where idn=$id"); + } + $dbh->commit if (!$auto_commit); $end_time=new Benchmark; - print "Time for delete rollback (" . ($opt_medium_loop_count) . "): " . - timestr(timediff($end_time, $loop_time),"all") . "\n\n"; - - $dbh->{AutoCommit} = 1; + print "Time for $test_name ($opt_loop_count): " . + timestr(timediff($end_time, $loop_time),"all") . "\n\n"; } - #### #### End of benchmark #### diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 41e71e72b07..c4af3366806 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -686,6 +686,11 @@ pthread_handler_decl(kill_server_thread,arg __attribute__((unused))) } #endif +#if defined(__amiga__) +#undef sigset +#define sigset signal +#endif + static sig_handler print_signal_warning(int sig) { sql_print_error("Warning: Got signal %d from thread %d", @@ -1310,7 +1315,11 @@ static void init_signals(void) sigprocmask(SIG_SETMASK,&sa.sa_mask,NULL); init_stacktrace(); +#if defined(__amiga__) + sa.sa_handler=(void(*)())handle_segfault; +#else sa.sa_handler=handle_segfault; +#endif sigaction(SIGSEGV, &sa, NULL); #ifdef SIGBUS sigaction(SIGBUS, &sa, NULL); diff --git a/sql/sql_string.cc b/sql/sql_string.cc index 28cb5213acd..4649af918d5 100644 --- a/sql/sql_string.cc +++ b/sql/sql_string.cc @@ -779,10 +779,10 @@ int wild_compare(const char *str,const char *str_end, { while (str != str_end && *str != cmp) str++; - if (str++ == str_end) + if (str++ == str_end) { - DBUG_RETURN(-1) - }; + DBUG_RETURN(-1); + } { int tmp=wild_compare(str,str_end,wildstr,wildend,escape); if (tmp <= 0) diff --git a/sql/stacktrace.c b/sql/stacktrace.c index 4f8fde31d3d..bef53c71a42 100644 --- a/sql/stacktrace.c +++ b/sql/stacktrace.c @@ -218,7 +218,7 @@ void write_core(int sig) { signal(sig, SIG_DFL); pthread_kill(pthread_self(), sig); -#if defined(P_MYID) +#if defined(P_MYID) && !defined(SCO) /* On Solaris, the above kill is not enough */ sigsend(P_PID,P_MYID,sig); #endif |