List:Commits« Previous MessageNext Message »
From:Hakan Kuecuekyilmaz Date:February 10 2009 2:11pm
Subject:bzr push into mysql-6.0-falcon branch (hky:3012 to 3014)
View as plain text  
 3014 Hakan Kuecuekyilmaz	2009-02-10
      Revert.
modified:
  BUILD/SETUP.sh

 3013 Hakan Kuecuekyilmaz	2009-02-10
      Merged:
      mysql-6.0-falcon-team --> mysql-6.0-falcon.
modified:
  .bzr-mysql/default.conf
  BUILD/SETUP.sh

 3012 Hakan Kuecuekyilmaz	2009-02-10 [merge]
      Merged:
      mysql-6.0 --> mysql-6.0-falcon --> mysql-6.0-falcon-team.
renamed:
  mysql-test/suite/falcon/r/falcon_bug_34351_B.result => mysql-test/suite/falcon_team/r/falcon_bug_34351_B.result
  mysql-test/suite/falcon/r/falcon_bug_34351_C.result => mysql-test/suite/falcon_team/r/falcon_bug_34351_C.result
  mysql-test/suite/falcon/t/falcon_bug_34351_B.test => mysql-test/suite/falcon_team/t/falcon_bug_34351_B.test
  mysql-test/suite/falcon/t/falcon_bug_34351_C.test => mysql-test/suite/falcon_team/t/falcon_bug_34351_C.test
modified:
  mysql-test/r/subselect3.result
  mysql-test/r/subselect3_jcl6.result
  mysql-test/suite/falcon_team/t/test2bug.def
  mysql-test/t/subselect3.test
  sql/handler.cc
  sql/handler.h
  storage/falcon/StorageVersion.h
  storage/innobase/handler/ha_innodb.cc
  storage/maria/ha_maria.cc
  storage/myisam/ha_myisam.cc

=== modified file 'mysql-test/include/wait_until_connected_again.inc'
--- a/mysql-test/include/wait_until_connected_again.inc	2009-01-26 16:32:29 +0000
+++ b/mysql-test/include/wait_until_connected_again.inc	2009-02-10 12:29:35 +0000
@@ -1,13 +1,17 @@
 #
 # Include this script to wait until the connection to the
 # server has been restored or timeout occurs.
-# You should have done --enable_reconnect first
+#
+# You should have done --enable_reconnect first.
+#
 # When you change this file you may have to chance its cousin
 # wait_until_disconnected.inc
 
 --disable_result_log
 --disable_query_log
-let $counter= 600;
+# We wait for 7 minutes, because some storage engines need quite
+# some to restart with Valgrind runs on Pushbuild.
+let $counter= 4200;
 let $mysql_errno= 9999;
 while ($mysql_errno)
 {

=== modified file 'mysql-test/lib/mtr_unique.pm'
--- a/mysql-test/lib/mtr_unique.pm	2008-08-22 17:03:15 +0000
+++ b/mysql-test/lib/mtr_unique.pm	2009-02-07 00:45:12 +0000
@@ -28,7 +28,17 @@ sub msg {
  # print "### unique($$) - ", join(" ", @_), "\n";
 }
 
-my $file= "/tmp/mysql-test-ports";
+my $file;
+
+if(!IS_WINDOWS)
+{
+  $file= "/tmp/mysql-test-ports";
+}
+else
+{
+  $file= $ENV{'TEMP'}."/mysql-test-ports";
+}
+  
 
 my %mtr_unique_ids;
 

=== modified file 'mysql-test/r/subselect3.result'
--- a/mysql-test/r/subselect3.result	2009-01-30 14:13:39 +0000
+++ b/mysql-test/r/subselect3.result	2009-02-04 11:27:06 +0000
@@ -1219,6 +1219,21 @@ id	select_type	table	type	possible_keys	
 1	PRIMARY	Z	ALL	NULL	NULL	NULL	NULL	6	End materialize; Using join buffer
 drop table t0,t1,t2;
 
+BUG#37842: Assertion in DsMrr_impl::dsmrr_init, at handler.cc:4307
+
+CREATE TABLE t1 (
+`pk` int(11) NOT NULL AUTO_INCREMENT,
+`int_key` int(11) DEFAULT NULL,
+PRIMARY KEY (`pk`),
+KEY `int_key` (`int_key`)
+) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (1,9),(2,3),(3,8),(4,6),(5,9),(6,5),(7,5),(8,9),(9,1),(10,10);
+SELECT `pk` FROM t1 AS OUTR WHERE `int_key` = ALL (
+SELECT `int_key` FROM t1 AS INNR WHERE INNR . `pk` >= 9
+);
+pk
+DROP TABLE t1;
+
 BUG#40118 Crash when running Batched Key Access and requiring one match for each key
 
 create table t0(a int);

=== modified file 'mysql-test/r/subselect3_jcl6.result'
--- a/mysql-test/r/subselect3_jcl6.result	2009-02-03 09:16:53 +0000
+++ b/mysql-test/r/subselect3_jcl6.result	2009-02-04 11:27:06 +0000
@@ -1224,6 +1224,21 @@ id	select_type	table	type	possible_keys	
 1	PRIMARY	Z	ALL	NULL	NULL	NULL	NULL	6	End materialize; Using join buffer
 drop table t0,t1,t2;
 
+BUG#37842: Assertion in DsMrr_impl::dsmrr_init, at handler.cc:4307
+
+CREATE TABLE t1 (
+`pk` int(11) NOT NULL AUTO_INCREMENT,
+`int_key` int(11) DEFAULT NULL,
+PRIMARY KEY (`pk`),
+KEY `int_key` (`int_key`)
+) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (1,9),(2,3),(3,8),(4,6),(5,9),(6,5),(7,5),(8,9),(9,1),(10,10);
+SELECT `pk` FROM t1 AS OUTR WHERE `int_key` = ALL (
+SELECT `int_key` FROM t1 AS INNR WHERE INNR . `pk` >= 9
+);
+pk
+DROP TABLE t1;
+
 BUG#40118 Crash when running Batched Key Access and requiring one match for each key
 
 create table t0(a int);

=== modified file 'mysql-test/suite/falcon/t/disabled.def'
--- a/mysql-test/suite/falcon/t/disabled.def	2009-02-02 11:17:53 +0000
+++ b/mysql-test/suite/falcon/t/disabled.def	2009-02-09 10:33:13 +0000
@@ -10,4 +10,3 @@
 #
 ##############################################################################
 
-falcon_bug_22173 : Bug#42079 2009-01-13 joro Falcon does not reset auto_increment on transactional truncate

=== renamed file 'mysql-test/suite/falcon/r/falcon_bug_34351_B.result' => 'mysql-test/suite/falcon_team/r/falcon_bug_34351_B.result'
=== renamed file 'mysql-test/suite/falcon/r/falcon_bug_34351_C.result' => 'mysql-test/suite/falcon_team/r/falcon_bug_34351_C.result'
=== modified file 'mysql-test/suite/falcon_team/r/falcon_deadlock.result'
--- a/mysql-test/suite/falcon_team/r/falcon_deadlock.result	2008-12-18 10:49:29 +0000
+++ b/mysql-test/suite/falcon_team/r/falcon_deadlock.result	2009-02-05 13:23:27 +0000
@@ -26,6 +26,7 @@ id	x
 0	1
 COMMIT;
 # Switch to connection conn2
+ERROR HY000: Record has changed since last read in table 't1'
 ROLLBACK;
 # Switch to connection conn1
 SELECT * FROM t1;
@@ -50,10 +51,10 @@ a	b
 0	10
 1	20
 2	30
-UPDATE t2 SET a = 100 WHERE b = (SELECT x FROM t1 WHERE id = b FOR UPDATE);
+UPDATE t2 SET b = 100 WHERE a = (SELECT x FROM t1 WHERE id = a FOR UPDATE);
 SELECT * FROM t2;
 a	b
-0	10
+0	100
 1	20
 2	30
 SELECT * FROM t1;
@@ -70,11 +71,12 @@ id	x
 300	300
 COMMIT;
 # Switch to connection conn2
+ERROR HY000: Record has changed since last read in table 't1'
 COMMIT;
 # Switch to connection conn1
 SELECT * FROM t1;
 id	x
-0	2
+0	1
 300	300
 COMMIT;
 DROP TABLE t1;
@@ -121,11 +123,12 @@ id	x
 300	300
 COMMIT;
 # Switch to connection conn2
+ERROR HY000: Record has changed since last read in table 't1'
 COMMIT;
 # Switch to connection conn1
 SELECT * FROM t1;
 id	x
-0	2
+0	1
 300	300
 COMMIT;
 SELECT count(*) FROM t1;

=== renamed file 'mysql-test/suite/falcon/t/falcon_bug_34351_B.test' => 'mysql-test/suite/falcon_team/t/falcon_bug_34351_B.test'
=== renamed file 'mysql-test/suite/falcon/t/falcon_bug_34351_C.test' => 'mysql-test/suite/falcon_team/t/falcon_bug_34351_C.test'
=== modified file 'mysql-test/suite/falcon_team/t/falcon_deadlock.test'
--- a/mysql-test/suite/falcon_team/t/falcon_deadlock.test	2008-12-18 10:49:29 +0000
+++ b/mysql-test/suite/falcon_team/t/falcon_deadlock.test	2009-02-05 13:23:27 +0000
@@ -98,7 +98,7 @@ INSERT INTO t2 VALUES (0, 10), (1, 20), 
 COMMIT;
 
 SELECT * FROM t2;
-UPDATE t2 SET a = 100 WHERE b = (SELECT x FROM t1 WHERE id = b FOR UPDATE);
+UPDATE t2 SET b = 100 WHERE a = (SELECT x FROM t1 WHERE id = a FOR UPDATE);
 SELECT * FROM t2;
 SELECT * FROM t1;
 
@@ -117,6 +117,14 @@ COMMIT;
 
 --echo # Switch to connection conn2
 connection conn2;
+# If we set Falcon to
+#     falcon_consistent_read = off
+#
+# we should get a
+#     Record has changed since last read in table 't1'
+# here. Please note that falcon_consistent_read = off
+# is the default setting.
+--error ER_CHECKREAD
 --reap
 COMMIT;
 
@@ -166,6 +174,14 @@ COMMIT;
 
 --echo # Switch to connection conn2
 connection conn2;
+# If we set Falcon to
+#     falcon_consistent_read = off
+#
+# we should get a
+#     Record has changed since last read in table 't1'
+# here. Please note that falcon_consistent_read = off
+# is the default setting.
+--error ER_CHECKREAD
 --reap
 COMMIT;
 

=== modified file 'mysql-test/suite/falcon_team/t/test2bug.def'
--- a/mysql-test/suite/falcon_team/t/test2bug.def	2008-12-16 21:11:25 +0000
+++ b/mysql-test/suite/falcon_team/t/test2bug.def	2009-02-10 13:32:02 +0000
@@ -20,3 +20,5 @@
 falcon_bug_34174 : Bug#34174 - Infinite loop checking rolled back record in select for update
 falcon_bug_36294-big: Bug#36631	- Assertion in SerialLogControl::nextRecord, sometimes.
 falcon_deadlock:  Bug#34182 - SELECT ... FOR UPDATE does not lock when in subquery
+falcon_bug_34351_B: Bug#42140 - falcon_bug_34351_B fails; sometimes
+falcon_bug_34351_C: Bug#41357 - falcon.falcon_bug_34351_C fails with assertion IS_CONSISTENT_READ

=== modified file 'mysql-test/t/subselect3.test'
--- a/mysql-test/t/subselect3.test	2009-01-30 14:13:39 +0000
+++ b/mysql-test/t/subselect3.test	2009-02-04 11:27:06 +0000
@@ -989,6 +989,21 @@ explain select * from t1 where (a,b,c) i
 
 drop table t0,t1,t2;
 
+--echo
+--echo BUG#37842: Assertion in DsMrr_impl::dsmrr_init, at handler.cc:4307
+--echo
+CREATE TABLE t1 (
+  `pk` int(11) NOT NULL AUTO_INCREMENT,
+  `int_key` int(11) DEFAULT NULL,
+  PRIMARY KEY (`pk`),
+  KEY `int_key` (`int_key`)
+) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (1,9),(2,3),(3,8),(4,6),(5,9),(6,5),(7,5),(8,9),(9,1),(10,10);
+SELECT `pk` FROM t1 AS OUTR WHERE `int_key` = ALL (
+ SELECT `int_key` FROM t1 AS INNR WHERE INNR . `pk` >= 9
+);
+DROP TABLE t1;
+
 --echo 
 --echo BUG#40118 Crash when running Batched Key Access and requiring one match for each key
 --echo

=== modified file 'sql/handler.cc'
--- a/sql/handler.cc	2009-02-04 10:49:16 +0000
+++ b/sql/handler.cc	2009-02-05 08:22:22 +0000
@@ -4362,17 +4362,20 @@ scan_it_again:
   @retval other Error
 */
 
-int DsMrr_impl::dsmrr_init(handler *h, KEY *key,
-                           RANGE_SEQ_IF *seq_funcs, void *seq_init_param,
-                           uint n_ranges, uint mode, HANDLER_BUFFER *buf)
+int DsMrr_impl::dsmrr_init(handler *h_arg, RANGE_SEQ_IF *seq_funcs, 
+                           void *seq_init_param, uint n_ranges, uint mode,
+                           HANDLER_BUFFER *buf)
 {
   uint elem_size;
-  uint keyno;
   Item *pushed_cond= NULL;
   handler *new_h2= 0;
   DBUG_ENTER("DsMrr_impl::dsmrr_init");
-  keyno= h->active_index;
 
+  /*
+    index_merge may invoke a scan on an object for which dsmrr_info[_const]
+    has not been called, so set the owner handler here as well.
+  */
+  h= h_arg;
   if (mode & HA_MRR_USE_DEFAULT_IMPL || mode & HA_MRR_SORTED)
   {
     use_default_impl= TRUE;
@@ -4393,17 +4396,28 @@ int DsMrr_impl::dsmrr_init(handler *h, K
                       elem_size;
   rowids_buf_end= rowids_buf_last;
 
+    /*
+    There can be two cases:
+    - This is the first call since index_init(), h2==NULL
+       Need to setup h2 then.
+    - This is not the first call, h2 is initalized and set up appropriately.
+       The caller might have called h->index_init(), need to switch h to
+       rnd_pos calls.
+  */
   if (!h2)
   {
     /* Create a separate handler object to do rndpos() calls. */
     THD *thd= current_thd;
+    /*
+      ::clone() takes up a lot of stack, especially on 64 bit platforms.
+      The constant 5 is an empiric result.
+    */
+    if (check_stack_overrun(thd, 5*STACK_MIN_SIZE, (uchar*) &new_h2))
+      DBUG_RETURN(1);
+    DBUG_ASSERT(h->active_index != MAX_KEY);
+    uint mrr_keyno= h->active_index;
 
-  /*
-    ::clone() takes up a lot of stack, especially on 64 bit platforms.
-    The constant 5 is an empiric result.
-  */
-  if (check_stack_overrun(thd, 5*STACK_MIN_SIZE, (uchar*) &new_h2))
-    DBUG_RETURN(1);
+    /* Create a separate handler object to do rndpos() calls. */
     if (!(new_h2= h->clone(thd->mem_root)) || 
         new_h2->ha_external_lock(thd, F_RDLCK))
     {
@@ -4411,31 +4425,55 @@ int DsMrr_impl::dsmrr_init(handler *h, K
       DBUG_RETURN(1);
     }
 
-    if (keyno == h->pushed_idx_cond_keyno)
+    if (mrr_keyno == h->pushed_idx_cond_keyno)
       pushed_cond= h->pushed_idx_cond;
+
+    /*
+      Caution: this call will invoke this->dsmrr_close(). Do not put the
+      created secondary table handler into this->h2 or it will delete it.
+    */
     if (h->ha_index_end())
     {
-      new_h2= h2;
+      h2=new_h2;
       goto error;
     }
 
-    h2= new_h2;
+    h2= new_h2; /* Ok, now can put it into h2 */
     table->prepare_for_position();
-    new_h2->extra(HA_EXTRA_KEYREAD);
+    h2->extra(HA_EXTRA_KEYREAD);
   
-    if (h2->ha_index_init(keyno, FALSE))
+    if (h2->ha_index_init(mrr_keyno, FALSE))
+      goto error;
+
+    use_default_impl= FALSE;
+    if (pushed_cond)
+      h2->idx_cond_push(mrr_keyno, pushed_cond);
+  }
+  else
+  {
+    /* 
+      We get here when the access alternates betwen MRR scan(s) and non-MRR
+      scans.
+
+      Calling h->index_end() will invoke dsmrr_close() for this object,
+      which will delete h2. We need to keep it, so save put it away and dont
+      let it be deleted:
+    */
+    handler *save_h2= h2;
+    h2= NULL;
+    int res= (h->inited == handler::INDEX && h->ha_index_end());
+    h2= save_h2;
+    use_default_impl= FALSE;
+    if (res)
       goto error;
   }
 
   if (h2->handler::multi_range_read_init(seq_funcs, seq_init_param, n_ranges,
-                                         mode, buf))
-    goto error;
-  
-  if (pushed_cond)
-    h2->idx_cond_push(keyno, pushed_cond);
-  if (dsmrr_fill_buffer(new_h2))
+                                          mode, buf) || 
+      dsmrr_fill_buffer())
+  {
     goto error;
-
+  }
   /*
     If the above call has scanned through all intervals in *seq, then
     adjust *buf to indicate that the remaining buffer space will not be used.
@@ -4504,7 +4542,7 @@ static int rowid_cmp(void *h, uchar *a, 
   @retval other  Error
 */
 
-int DsMrr_impl::dsmrr_fill_buffer(handler *unused)
+int DsMrr_impl::dsmrr_fill_buffer()
 {
   char *range_info;
   int res;
@@ -4551,7 +4589,7 @@ int DsMrr_impl::dsmrr_fill_buffer(handle
   DS-MRR implementation: multi_range_read_next() function
 */
 
-int DsMrr_impl::dsmrr_next(handler *h, char **range_info)
+int DsMrr_impl::dsmrr_next(char **range_info)
 {
   int res;
   uchar *cur_range_info= 0;
@@ -4569,8 +4607,7 @@ int DsMrr_impl::dsmrr_next(handler *h, c
         res= HA_ERR_END_OF_FILE;
         goto end;
       }
-
-      res= dsmrr_fill_buffer(h);
+    res= dsmrr_fill_buffer();
       if (res)
         goto end;
     }

=== modified file 'sql/handler.h'
--- a/sql/handler.h	2009-01-29 21:17:59 +0000
+++ b/sql/handler.h	2009-02-02 14:12:27 +0000
@@ -2461,14 +2461,15 @@ public:
 
   DsMrr_impl()
     : h2(NULL) {};
-
-  handler *h; /* The "owner" handler object. It is used for scanning the index */
-  TABLE *table; /* Always equal to h->table */
-private:
+  
   /*
-    Secondary handler object. It is used to retrieve full table rows by
-    calling rnd_pos().
+    The "owner" handler object (the one that calls dsmrr_XXX functions.
+    It is used to retrieve full table rows by calling rnd_pos().
   */
+  handler *h;
+  TABLE *table; /* Always equal to h->table */
+private:
+  /* Secondary handler object.  It is used for scanning the index */
   handler *h2;
 
   /* Buffer to store rowids, or (rowid, range_id) pairs */
@@ -2489,12 +2490,11 @@ public:
     h= h_arg; 
     table= table_arg;
   }
-  int dsmrr_init(handler *h, KEY *key, RANGE_SEQ_IF *seq_funcs, 
-                 void *seq_init_param, uint n_ranges, uint mode, 
-                 HANDLER_BUFFER *buf);
+  int dsmrr_init(handler *h, RANGE_SEQ_IF *seq_funcs, void *seq_init_param, 
+                 uint n_ranges, uint mode, HANDLER_BUFFER *buf);
   void dsmrr_close();
-  int dsmrr_fill_buffer(handler *h);
-  int dsmrr_next(handler *h, char **range_info);
+  int dsmrr_fill_buffer();
+  int dsmrr_next(char **range_info);
 
   ha_rows dsmrr_info(uint keyno, uint n_ranges, uint keys, uint *bufsz,
                      uint *flags, COST_VECT *cost);

=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc	2009-02-04 10:49:16 +0000
+++ b/sql/sql_select.cc	2009-02-10 12:42:42 +0000
@@ -2648,14 +2648,19 @@ JOIN::exec()
 				     tmp_fields_list2, tmp_all_fields2, 
 				     fields_list.elements, tmp_all_fields1))
 	  DBUG_VOID_RETURN;
-	curr_join->tmp_fields_list2= tmp_fields_list2;
-	curr_join->tmp_all_fields2= tmp_all_fields2;
+
+        if (curr_join != this)
+        {
+          curr_join->tmp_fields_list2= tmp_fields_list2;
+          curr_join->tmp_all_fields2= tmp_all_fields2;
+        }
+
       }
       curr_fields_list= &curr_join->tmp_fields_list2;
       curr_all_fields= &curr_join->tmp_all_fields2;
       curr_join->set_items_ref_array(items2);
       curr_join->tmp_table_param.field_count+= 
-	curr_join->tmp_table_param.sum_func_count;
+      curr_join->tmp_table_param.sum_func_count;
       curr_join->tmp_table_param.sum_func_count= 0;
     }
     if (curr_tmp_table->distinct)

=== modified file 'storage/falcon/BackLog.cpp'
--- a/storage/falcon/BackLog.cpp	2009-02-05 05:34:42 +0000
+++ b/storage/falcon/BackLog.cpp	2009-02-09 05:01:44 +0000
@@ -105,7 +105,7 @@ void BackLog::rollbackRecords(Bitmap* re
 		
 		Table *table = record->format->table;
 		
-		if (!table->insert(record, NULL, record->recordNumber))
+		if (!table->insertIntoTree(record, NULL, record->recordNumber))
 			{
 			record->release();
 			int32 recordNumber = record->recordNumber;

=== modified file 'storage/falcon/Dbb.cpp'
--- a/storage/falcon/Dbb.cpp	2009-02-02 13:00:38 +0000
+++ b/storage/falcon/Dbb.cpp	2009-02-09 05:01:44 +0000
@@ -56,8 +56,6 @@
 //#define STOP_RECORD	123
 //#define TRACE_PAGE	109
 
-
-
 extern uint falcon_large_blob_threshold;
 
 #ifdef _DEBUG
@@ -138,8 +136,6 @@ Dbb::~Dbb()
 			delete section;
 			}
 
-
-
 	if (inversion)
 		delete inversion;
 

=== modified file 'storage/falcon/Section.cpp'
--- a/storage/falcon/Section.cpp	2009-02-05 05:34:42 +0000
+++ b/storage/falcon/Section.cpp	2009-02-09 05:01:44 +0000
@@ -1199,17 +1199,15 @@ bool Section::isCleanupRequired()
 }
 ***/
 
-
 void Section::redoSectionPage(Dbb *dbb, int32 parentPage, int32 pageNumber, int slot, int sectionId, int sequence, int level)
 {
 	Bdb *bdb = dbb->fetchPage (parentPage, PAGE_sections, Exclusive);
 	BDB_HISTORY(bdb);
 	SectionPage *page = (SectionPage*) bdb->buffer;
 
-
 	// If page number != 0, we are creating a new section page
-	// Otherwise, the log record comes from deleteSection and we just need to 
-	// clear the slot in the parent page
+	// Otherwise, the log record comes from deleteSection and  
+	// we just need to clear the slot in the parent page.
 
 	if (pageNumber != 0)
 		{

=== modified file 'storage/falcon/SparseArray.h'
--- a/storage/falcon/SparseArray.h	2007-09-20 15:44:25 +0000
+++ b/storage/falcon/SparseArray.h	2009-02-06 21:08:57 +0000
@@ -122,7 +122,7 @@ public:
 
 			if (!nextVector)
 				{
-				if (level == 1)
+				if (lvl == 1)
 					{
 					nextVector = (void**) new T [width];
 					memset(nextVector, 0, sizeof(T) * width);

=== modified file 'storage/falcon/StorageVersion.h'
--- a/storage/falcon/StorageVersion.h	2009-02-05 09:00:35 +0000
+++ b/storage/falcon/StorageVersion.h	2009-02-10 13:32:02 +0000
@@ -14,5 +14,5 @@
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
 
 
-#define FALCON_VERSION	"T1.4-6"
-#define FALCON_DATE		"05 February, 2009"
+#define FALCON_VERSION	"T1.4-7"
+#define FALCON_DATE		"10 February, 2009"

=== modified file 'storage/falcon/Table.cpp'
--- a/storage/falcon/Table.cpp	2009-02-01 09:00:52 +0000
+++ b/storage/falcon/Table.cpp	2009-02-09 10:33:13 +0000
@@ -387,7 +387,7 @@ void Table::insert(Transaction *transact
 		checkNullable(record);  // Verify that record is valid
 
 		transaction->addRecord(record);
-		insert(record, NULL, recordNumber);
+		insertIntoTree(record, NULL, recordNumber);
 		inserted = true;
 		insertIndexes(transaction, record);
 		updateInversion(record, transaction);
@@ -400,7 +400,7 @@ void Table::insert(Transaction *transact
 		if (inserted)
 			{
 			transaction->removeRecord(record);
-			insert(NULL, record, recordNumber);
+			insertIntoTree(NULL, record, recordNumber);
 			}
 
 		if (recordNumber >= 0)
@@ -545,7 +545,7 @@ Record* Table::fetchNext(int32 start)
 
 			for (int n = 0; (record = databaseFetch(bitNumber)); ++n)
 				{
-				if (insert(record, NULL, bitNumber))
+				if (insertIntoTree(record, NULL, bitNumber))
 					{
 					record->poke();
 
@@ -622,7 +622,7 @@ Record* Table::fetchNext(int32 start)
 			sync.unlock();
 			record = allocRecord(recNumber, &stream);
 			
-			if (insert(record, NULL, recNumber))
+			if (insertIntoTree(record, NULL, recNumber))
 				{
 				if (bitNumber < 0 || recNumber <= bitNumber)
 					return record;
@@ -638,7 +638,10 @@ Record* Table::fetchNext(int32 start)
 			sync.lock(Shared);
 			}
 		
-		if (bitNumber >= 0 && bitNumber < recNumber && records && (record = records->fetch(bitNumber)))
+		if (   (bitNumber >= 0 )
+		    && (bitNumber < recNumber)
+		    && (records)
+		    && (record = records->fetch(bitNumber)))
 			break;
 
 		sync.unlock();
@@ -931,7 +934,7 @@ Record* Table::fetch(int32 recordNumber)
 				sync.lock(Exclusive);
 				record = database->backLog->fetch(backlogId);
 				
-				if (insert(record, NULL, recordNumber))
+				if (insertIntoTree(record, NULL, recordNumber))
 					return record;
 				
 #ifdef CHECK_RECORD_ACTIVITY
@@ -950,7 +953,7 @@ Record* Table::fetch(int32 recordNumber)
 			
 		record->poke();
 		
-		if (insert(record, NULL, recordNumber))
+		if (insertIntoTree(record, NULL, recordNumber))
 			return record;
 		
 #ifdef CHECK_RECORD_ACTIVITY
@@ -996,7 +999,7 @@ Record* Table::backlogFetch(int32 record
 		if (backlogId)
 			{
 			Record *record = database->backLog->fetch(backlogId);
-			ASSERT (insert(record, NULL, recordNumber));
+			ASSERT (insertIntoTree(record, NULL, recordNumber));
 			
 			return record;
 			}
@@ -1029,7 +1032,7 @@ void Table::rollbackRecord(RecordVersion
 
 	// Replace the current version of this record.
 
-	if (!insert(priorRecord, recordToRollback, recordToRollback->recordNumber))
+	if (!insertIntoTree(priorRecord, recordToRollback, recordToRollback->recordNumber))
 		{
 		if (priorRecord == NULL && priorState == recDeleted)
 			return;
@@ -1351,9 +1354,8 @@ void Table::update(Transaction * transac
 
 		// If this is a re-update in the same transaction and the same savepoint,
 		// carefully remove the prior version.
-		
-		record->scavengeSavepoint(transaction->transactionId, transaction->curSavePointId);
 
+		record->scavengeSavepoint(transaction->transactionId, transaction->curSavePointId);
 		record->release();
 		}
 	catch (...)
@@ -1361,7 +1363,7 @@ void Table::update(Transaction * transac
 		if (updated)
 			{
 			transaction->removeRecord(record);
-			insert(oldRecord, record, recordNumber);
+			insertIntoTree(oldRecord, record, recordNumber);
 			}
 			
 		garbageCollect(record, oldRecord, transaction, true);
@@ -1950,7 +1952,7 @@ void Table::retireRecords(RecordScavenge
 	return;
 }
 
-bool Table::insert(Record * record, Record *prior, int recordNumber)
+bool Table::insertIntoTree(Record * record, Record *prior, int recordNumber)
 {
 	ageGroup = database->currentGeneration;
 	Sync sync(&syncObject, "Table::insert");
@@ -3052,7 +3054,7 @@ uint Table::insert(Transaction *transact
 		// Do the actual insert
 
 		transaction->addRecord(record);
-		bool ret = insert(record, NULL, recordNumber);
+		bool ret = insertIntoTree(record, NULL, recordNumber);
 		inserted = true;
 		insertIndexes(transaction, record);
 		ASSERT(ret);
@@ -3064,7 +3066,7 @@ uint Table::insert(Transaction *transact
 		if (inserted)
 			{
 			transaction->removeRecord(record);
-			insert(NULL, record, recordNumber);
+			insertIntoTree(NULL, record, recordNumber);
 			}
 
 		if (recordNumber >= 0)
@@ -3185,9 +3187,7 @@ void Table::update(Transaction * transac
 		// carefully remove the prior version.
 
 		record->scavengeSavepoint(transaction->transactionId, transaction->curSavePointId);
-
-		if (record)
-			record->release();
+		record->release();
 
 		oldRecord->release();	// This reference originated in this function.
 		}
@@ -3197,7 +3197,7 @@ void Table::update(Transaction * transac
 			{
 			transaction->removeRecord(record);
 
-			if (!insert(oldRecord, record, record->recordNumber))
+			if (!insertIntoTree(oldRecord, record, record->recordNumber))
 				Log::debug("record backout failed after failed update\n");
 			}
 
@@ -3361,7 +3361,7 @@ void Table::validateAndInsert(Transactio
 				}
 			}
 
-		if (insert(record, prior, record->recordNumber))
+		if (insertIntoTree(record, prior, record->recordNumber))
 			return;
 		
 		if (n >= 7)
@@ -3414,7 +3414,8 @@ void Table::unlockRecord(RecordVersion* 
 
 	if ((record->state == recLock) && !record->isSuperceded())
 		{
-		if (insert(record->getPriorVersion(), record, record->recordNumber))
+		Record *prior = record->getPriorVersion();
+		if (insertIntoTree(prior, record, record->recordNumber))
 			record->setSuperceded(true);
 		else
 			Log::debug("Table::unlockRecord: record lock not in record tree\n");
@@ -3525,7 +3526,7 @@ Record* Table::fetchForUpdate(Transactio
 				RecordVersion *recordVersion = allocRecordVersion(NULL, transaction, record);
 				recordVersion->state = recLock;
 				
-				if (insert(recordVersion, record, recordNumber))
+				if (insertIntoTree(recordVersion, record, recordNumber))
 					{
 					transaction->addRecord(recordVersion);
 					recordVersion->release();
@@ -3798,7 +3799,7 @@ int32 Table::backlogRecord(RecordVersion
 		backloggedRecords->set(record->recordNumber, backlogId);
 		}
 	
-	ASSERT(insert(NULL, record, record->recordNumber));
+	ASSERT(insertIntoTree(NULL, record, record->recordNumber));
 	recordBitmap->set(record->recordNumber);
 	
 	return backlogId;

=== modified file 'storage/falcon/Table.h'
--- a/storage/falcon/Table.h	2009-01-17 08:22:44 +0000
+++ b/storage/falcon/Table.h	2009-02-09 05:01:44 +0000
@@ -216,7 +216,7 @@ public:
 
 	void			insert (Transaction *transaction, int count, Field **fields, Value **values);
 	uint			insert (Transaction *transaction, Stream *stream);
-	bool			insert (Record *record, Record *prior, int recordNumber);
+	bool			insertIntoTree (Record *record, Record *prior, int recordNumber);
 	void			insertIndexes(Transaction *transaction, RecordVersion *record);
 	
 	void			update (Transaction *transaction, Record *record, int numberFields, Field **fields, Value** values);

=== modified file 'storage/falcon/TransactionManager.cpp'
--- a/storage/falcon/TransactionManager.cpp	2009-01-07 08:12:08 +0000
+++ b/storage/falcon/TransactionManager.cpp	2009-02-05 13:01:41 +0000
@@ -32,8 +32,6 @@
 
 static const int EXTRA_TRANSACTIONS = 10;
 
-static TransId OLD = 0;  // Temporary for debugging
-
 #ifdef _DEBUG
 #undef THIS_FILE
 static const char THIS_FILE[]=__FILE__;
@@ -321,9 +319,6 @@ void TransactionManager::purgeTransactio
 
 	TransId oldestActive = findOldestInActiveList();
 
-	ASSERT(oldestActive >= OLD);   // Temporary for debugging
-	OLD = oldestActive;            // Please ignore
-
 	// Check for any fully mature transactions to ditch
   
 	Transaction* transaction = committedTransactions.first;

=== modified file 'storage/innobase/handler/ha_innodb.cc'
--- a/storage/innobase/handler/ha_innodb.cc	2009-01-31 16:21:19 +0000
+++ b/storage/innobase/handler/ha_innodb.cc	2009-02-05 08:22:22 +0000
@@ -3468,7 +3468,6 @@ skip_field:
           prebuilt->idx_cond_func= NULL;
           prebuilt->n_index_fields= n_requested_fields;
         }
-       // file->in_range_read= FALSE;
 
 	if (index != clust_index && prebuilt->need_to_access_clustered) {
 		/* Change rec_field_no's to correspond to the clustered index
@@ -6675,7 +6674,6 @@ ha_innobase::extra(
                         /* Reset index condition pushdown state */
                         pushed_idx_cond= FALSE;
                         pushed_idx_cond_keyno= MAX_KEY;
-                        //in_range_read= FALSE;
                         prebuilt->idx_cond_func= NULL;
 			break;
 		case HA_EXTRA_NO_KEYREAD:
@@ -8497,13 +8495,12 @@ mysql_declare_plugin_end;
 int ha_innobase::multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param,
                           uint n_ranges, uint mode, HANDLER_BUFFER *buf)
 {
-  return ds_mrr.dsmrr_init(this, &table->key_info[active_index], 
-                           seq, seq_init_param, n_ranges, mode, buf);
+  return ds_mrr.dsmrr_init(this, seq, seq_init_param, n_ranges, mode, buf);
 }
 
 int ha_innobase::multi_range_read_next(char **range_info)
 {
-  return ds_mrr.dsmrr_next(this, range_info);
+  return ds_mrr.dsmrr_next(range_info);
 }
 
 ha_rows ha_innobase::multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,
@@ -8539,7 +8536,7 @@ C_MODE_START
 static my_bool index_cond_func_innodb(void *arg)
 {
   ha_innobase *h= (ha_innobase*)arg;
-  if (h->end_range) //was: h->in_range_read
+  if (h->end_range)
   {
     if (h->compare_key2(h->end_range) > 0)
       return 2; /* caller should return HA_ERR_END_OF_FILE already */
@@ -8569,11 +8566,7 @@ int ha_innobase::read_range_first(const 
                                 bool sorted /* ignored */)
 {
   int res;
-  //if (!eq_range_arg)
-    //in_range_read= TRUE;
   res= handler::read_range_first(start_key, end_key, eq_range_arg, sorted);
-  //if (res)
-  //  in_range_read= FALSE;
   return res;
 }
 
@@ -8581,8 +8574,6 @@ int ha_innobase::read_range_first(const 
 int ha_innobase::read_range_next()
 {
   int res= handler::read_range_next();
-  //if (res)
-  //  in_range_read= FALSE;
   return res;
 }
 

=== modified file 'storage/maria/ha_maria.cc'
--- a/storage/maria/ha_maria.cc	2009-02-02 13:57:39 +0000
+++ b/storage/maria/ha_maria.cc	2009-02-05 08:22:22 +0000
@@ -3198,13 +3198,12 @@ int ha_maria::multi_range_read_init(RANG
                                      uint n_ranges, uint mode, 
                                      HANDLER_BUFFER *buf)
 {
-  return ds_mrr.dsmrr_init(this, &table->key_info[active_index], 
-                           seq, seq_init_param, n_ranges, mode, buf);
+  return ds_mrr.dsmrr_init(this, seq, seq_init_param, n_ranges, mode, buf);
 }
 
 int ha_maria::multi_range_read_next(char **range_info)
 {
-  return ds_mrr.dsmrr_next(this, range_info);
+  return ds_mrr.dsmrr_next(range_info);
 }
 
 ha_rows ha_maria::multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,

=== modified file 'storage/myisam/ha_myisam.cc'
--- a/storage/myisam/ha_myisam.cc	2009-02-04 10:49:16 +0000
+++ b/storage/myisam/ha_myisam.cc	2009-02-05 08:22:22 +0000
@@ -2013,13 +2013,12 @@ int ha_myisam::multi_range_read_init(RAN
                                      uint n_ranges, uint mode, 
                                      HANDLER_BUFFER *buf)
 {
-  return ds_mrr.dsmrr_init(this, &table->key_info[active_index], 
-                           seq, seq_init_param, n_ranges, mode, buf);
+  return ds_mrr.dsmrr_init(this, seq, seq_init_param, n_ranges, mode, buf);
 }
 
 int ha_myisam::multi_range_read_next(char **range_info)
 {
-  return ds_mrr.dsmrr_next(this, range_info);
+  return ds_mrr.dsmrr_next(range_info);
 }
 
 ha_rows ha_myisam::multi_range_read_info_const(uint keyno, RANGE_SEQ_IF *seq,

Thread
bzr push into mysql-6.0-falcon branch (hky:3012 to 3014)Hakan Kuecuekyilmaz10 Feb