diff options
-rw-r--r-- | myisammrg/mymrgdef.h | 8 | ||||
-rw-r--r-- | myisammrg/myrg_info.c | 8 | ||||
-rw-r--r-- | myisammrg/myrg_rrnd.c | 26 | ||||
-rwxr-xr-x | mysql-test/mysql-test-run | 6 | ||||
-rw-r--r-- | mysql-test/r/3.23/mrg000001.dummy.result | 1 | ||||
-rw-r--r-- | mysql-test/r/3.23/mrg000001.result | 5 | ||||
-rw-r--r-- | mysql-test/t/3.23/mrg000001.test | 17 |
7 files changed, 48 insertions, 23 deletions
diff --git a/myisammrg/mymrgdef.h b/myisammrg/mymrgdef.h index 564900614e2..bfa24c778f4 100644 --- a/myisammrg/mymrgdef.h +++ b/myisammrg/mymrgdef.h @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -30,3 +30,5 @@ extern pthread_mutex_t THR_LOCK_open; int _myrg_init_queue(MYRG_INFO *info,int inx,enum ha_rkey_function search_flag); int _myrg_finish_scan(MYRG_INFO *info, int inx, enum ha_rkey_function type); +MYRG_TABLE *_myrg_find_table(MYRG_INFO *info, ulonglong pos); + diff --git a/myisammrg/myrg_info.c b/myisammrg/myrg_info.c index 959a34935fd..e556c807dfa 100644 --- a/myisammrg/myrg_info.c +++ b/myisammrg/myrg_info.c @@ -1,15 +1,15 @@ /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB - + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ @@ -35,6 +35,8 @@ int myrg_status(MYRG_INFO *info,register MYMERGE_INFO *x,int flag) MYRG_TABLE *current_table; DBUG_ENTER("myrg_status"); + _myrg_find_table(info, HA_OFFSET_ERROR); + if (!(current_table = info->current_table) && info->open_tables != info->end_table) current_table = info->open_tables; diff --git a/myisammrg/myrg_rrnd.c b/myisammrg/myrg_rrnd.c index c64f48c93cd..298ef112469 100644 --- a/myisammrg/myrg_rrnd.c +++ b/myisammrg/myrg_rrnd.c @@ -21,8 +21,6 @@ #include "mymrgdef.h" -static MYRG_TABLE *find_table(MYRG_TABLE *start,MYRG_TABLE *end,ulonglong pos); - /* If filepos == HA_OFFSET_ERROR, read next Returns same as mi_rrnd: @@ -80,8 +78,7 @@ int myrg_rrnd(MYRG_INFO *info,byte *buf,ulonglong filepos) isam_info->lastinx= (uint) -1; } } - info->current_table=find_table(info->open_tables, - info->end_table-1,filepos); + info->current_table=_myrg_find_table(info,filepos); isam_info=info->current_table->table; isam_info->update&= HA_STATE_CHANGED; return ((*isam_info->s->read_rnd) @@ -93,18 +90,19 @@ int myrg_rrnd(MYRG_INFO *info,byte *buf,ulonglong filepos) /* Find which table to use according to file-pos */ -static MYRG_TABLE *find_table(MYRG_TABLE *start, MYRG_TABLE *end, - ulonglong pos) +MYRG_TABLE *_myrg_find_table(MYRG_INFO *info, ulonglong pos) { - MYRG_TABLE *mid; + MYRG_TABLE *t; + + info->records=info->del=info->data_file_length=0; - while (start != end) + for (t=info->open_tables ; t < info->end_table ; t++) { - mid=start+((uint) (end-start)+1)/2; - if (mid->file_offset > pos) - end=mid-1; - else - start=mid; + t->file_offset=info->data_file_length; + if (pos < t->file_offset) return t-1; + info->data_file_length+=t->table->state->data_file_length; + info->records+=t->table->state->records; + info->del+=t->table->state->del; } - return start; + return t-1; } diff --git a/mysql-test/mysql-test-run b/mysql-test/mysql-test-run index 740f10f1cad..a1adc247ef1 100755 --- a/mysql-test/mysql-test-run +++ b/mysql-test/mysql-test-run @@ -147,7 +147,7 @@ echo_pass () { prompt_user () { echo $1 - read + read not_used } echo_fail () { @@ -285,7 +285,7 @@ start_slave() --master-connect-retry=1 \ --master-host=127.0.0.1 \ --master-port=$MASTER_MYPORT \ - --core-file \ + --core-file --log-bin --log-slave-updates \ --basedir=$CWD \ --datadir=$SLAVE_MYDDIR \ --pid-file=$SLAVE_MYPID \ @@ -363,7 +363,7 @@ run_testcase () tname=`$ECHO $tname | $CUT -d . -f 1` master_opt_file=$TESTDIR/$tname-master.opt slave_opt_file=$TESTDIR/$tname-slave.opt - SKIP_SLAVE=`$EXPR \( match $tname rpl \) = 0` + SKIP_SLAVE=`$EXPR \( $tname : rpl \) = 0` if [ -f $master_opt_file ] ; then diff --git a/mysql-test/r/3.23/mrg000001.dummy.result b/mysql-test/r/3.23/mrg000001.dummy.result new file mode 100644 index 00000000000..767f92bc2cb --- /dev/null +++ b/mysql-test/r/3.23/mrg000001.dummy.result @@ -0,0 +1 @@ +incr othr diff --git a/mysql-test/r/3.23/mrg000001.result b/mysql-test/r/3.23/mrg000001.result new file mode 100644 index 00000000000..8b351ebe780 --- /dev/null +++ b/mysql-test/r/3.23/mrg000001.result @@ -0,0 +1,5 @@ +incr othr +1 10 +2 24 +4 33 +3 53 diff --git a/mysql-test/t/3.23/mrg000001.test b/mysql-test/t/3.23/mrg000001.test new file mode 100644 index 00000000000..ded3ecc8898 --- /dev/null +++ b/mysql-test/t/3.23/mrg000001.test @@ -0,0 +1,17 @@ +DROP TABLE IF EXISTS test1; +DROP TABLE IF EXISTS test2; +DROP TABLE IF EXISTS test3; + +CREATE TABLE test1 (incr int not null, othr int not null, primary key(incr)); +CREATE TABLE test2 (incr int not null, othr int not null, primary key(incr)); +CREATE TABLE test3 (incr int not null, othr int not null, primary key(incr)) +TYPE=MERGE UNION=(test1,test2); + +@r/3.23/mrg000001.dummy.result SELECT * from test3; + +INSERT INTO test1 VALUES ( 1,10),( 3,53),( 5,21),( 7,12),( 9,17); +INSERT INTO test2 VALUES ( 2,24),( 4,33),( 6,41),( 8,26),( 0,32); +INSERT INTO test1 VALUES (11,20),(13,43),(15,11),(17,22),(19,37); +INSERT INTO test2 VALUES (12,25),(14,31),(16,42),(18,27),(10,30); + +@r/3.23/mrg000001.result SELECT * from test3 where incr in (1,2,3,4) order by othr; |