List:Commits« Previous MessageNext Message »
From:tim Date:January 22 2007 1:18am
Subject:bk commit into 5.1 tree (tsmith:1.2422)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of tsmith. When tsmith does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-01-21 18:18:11-07:00, tsmith@stripped +6 -0
  Applied innodb-5.1-ss1186

  mysql-test/r/innodb.result@stripped, 2007-01-21 18:18:09-07:00, tsmith@stripped +17 -0
    Applied innodb-5.1-ss1186

  mysql-test/t/innodb.test@stripped, 2007-01-21 18:18:09-07:00, tsmith@stripped +16 -0
    Applied innodb-5.1-ss1186

  storage/innobase/buf/buf0flu.c@stripped, 2007-01-21 18:18:09-07:00, tsmith@stripped +1 -2
    Applied innodb-5.1-ss1186

  storage/innobase/dict/dict0load.c@stripped, 2007-01-21 18:18:09-07:00, tsmith@stripped +5 -4
    Applied innodb-5.1-ss1186

  storage/innobase/include/ut0ut.h@stripped, 2007-01-21 18:18:09-07:00, tsmith@stripped +2 -1
    Applied innodb-5.1-ss1186

  storage/innobase/que/que0que.c@stripped, 2007-01-21 18:18:09-07:00, tsmith@stripped +33 -32
    Applied innodb-5.1-ss1186

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	tsmith
# Host:	siva.hindu.god
# Root:	/home/tsmith/m/inno/jan20/51

--- 1.39/storage/innobase/buf/buf0flu.c	2007-01-17 17:18:02 -07:00
+++ 1.40/storage/innobase/buf/buf0flu.c	2007-01-21 18:18:09 -07:00
@@ -977,8 +977,7 @@
 	}
 #endif /* UNIV_DEBUG */
 
-	if (page_count != ULINT_UNDEFINED)
-		srv_buf_pool_flushed+= page_count;
+	srv_buf_pool_flushed += page_count;
 
 	return(page_count);
 }

--- 1.52/storage/innobase/dict/dict0load.c	2006-09-21 01:38:39 -06:00
+++ 1.53/storage/innobase/dict/dict0load.c	2007-01-21 18:18:09 -07:00
@@ -1110,6 +1110,7 @@
 	rec_t*		rec;
 	byte*		field;
 	ulint		len;
+	ulint		n_fields_and_type;
 	mtr_t		mtr;
 
 #ifdef UNIV_SYNC_DEBUG
@@ -1172,15 +1173,15 @@
 
 	foreign = dict_mem_foreign_create();
 
-	foreign->n_fields = mach_read_from_4(
+	n_fields_and_type = mach_read_from_4(
 		rec_get_nth_field_old(rec, 5, &len));
 
 	ut_a(len == 4);
 
-	/* We store the type to the bits 24-31 of n_fields */
+	/* We store the type in the bits 24..29 of n_fields_and_type. */
 
-	foreign->type = foreign->n_fields >> 24;
-	foreign->n_fields = foreign->n_fields & 0xFFFFFFUL;
+	foreign->type = n_fields_and_type >> 24;
+	foreign->n_fields = n_fields_and_type & 0x3FFUL;
 
 	foreign->id = mem_heap_strdup(foreign->heap, id);
 

--- 1.22/storage/innobase/include/ut0ut.h	2006-10-20 13:44:46 -06:00
+++ 1.23/storage/innobase/include/ut0ut.h	2007-01-21 18:18:09 -07:00
@@ -119,7 +119,8 @@
 ut_2_power_up(
 /*==========*/
 			/* out: first power of 2 which is >= n */
-	ulint	n);	/* in: number != 0 */
+	ulint	n)	/* in: number != 0 */
+	__attribute__((const));
 /****************************************************************
 Sort function for ulint arrays. */
 

--- 1.27/storage/innobase/que/que0que.c	2006-09-04 17:16:20 -06:00
+++ 1.28/storage/innobase/que/que0que.c	2007-01-21 18:18:09 -07:00
@@ -335,6 +335,8 @@
 	que_fork_t*	fork)	/* in: a query fork */
 {
 	que_thr_t*	thr;
+	que_thr_t*	suspended_thr = NULL;
+	que_thr_t*	completed_thr = NULL;
 
 	fork->state = QUE_FORK_ACTIVE;
 
@@ -344,14 +346,18 @@
 	but in a parallelized select, which necessarily is non-scrollable,
 	there may be several to choose from */
 
-	/*---------------------------------------------------------------
-	First we try to find a query thread in the QUE_THR_COMMAND_WAIT state
-	*/
+	/* First we try to find a query thread in the QUE_THR_COMMAND_WAIT
+	state. Then we try to find a query thread in the QUE_THR_SUSPENDED
+	state, finally we try to find a query thread in the QUE_THR_COMPLETED
+	state */
 
 	thr = UT_LIST_GET_FIRST(fork->thrs);
 
-	while (thr != NULL) {
-		if (thr->state == QUE_THR_COMMAND_WAIT) {
+	/* We make a single pass over the thr list within which we note which
+	threads are ready to run. */
+	while (thr) {
+		switch (thr->state) {
+		case QUE_THR_COMMAND_WAIT:
 
 			/* We have to send the initial message to query thread
 			to start it */
@@ -359,49 +365,44 @@
 			que_thr_init_command(thr);
 
 			return(thr);
-		}
-
-		ut_ad(thr->state != QUE_THR_LOCK_WAIT);
-
-		thr = UT_LIST_GET_NEXT(thrs, thr);
-	}
 
-	/*----------------------------------------------------------------
-	Then we try to find a query thread in the QUE_THR_SUSPENDED state */
-
-	thr = UT_LIST_GET_FIRST(fork->thrs);
-
-	while (thr != NULL) {
-		if (thr->state == QUE_THR_SUSPENDED) {
+		case QUE_THR_SUSPENDED:
 			/* In this case the execution of the thread was
 			suspended: no initial message is needed because
 			execution can continue from where it was left */
+			if (!suspended_thr) {
+				suspended_thr = thr;
+			}
 
-			que_thr_move_to_run_state(thr);
+			break;
+
+		case QUE_THR_COMPLETED:
+			if (!completed_thr) {
+				completed_thr = thr;
+			}
+
+			break;
+
+		case QUE_THR_LOCK_WAIT:
+			ut_error;
 
-			return(thr);
 		}
 
 		thr = UT_LIST_GET_NEXT(thrs, thr);
 	}
 
-	/*-----------------------------------------------------------------
-	Then we try to find a query thread in the QUE_THR_COMPLETED state */
+	if (suspended_thr) {
 
-	thr = UT_LIST_GET_FIRST(fork->thrs);
+		thr = suspended_thr;
+		que_thr_move_to_run_state(thr);
 
-	while (thr != NULL) {
-		if (thr->state == QUE_THR_COMPLETED) {
-			que_thr_init_command(thr);
+	} else if (completed_thr) {
 
-			return(thr);
-		}
-
-		thr = UT_LIST_GET_NEXT(thrs, thr);
+		thr = completed_thr;
+		que_thr_init_command(thr);
 	}
 
-	/* Else we return NULL */
-	return(NULL);
+	return(thr);
 }
 
 /**************************************************************************

--- 1.183/mysql-test/r/innodb.result	2006-10-19 08:01:34 -06:00
+++ 1.184/mysql-test/r/innodb.result	2007-01-21 18:18:09 -07:00
@@ -3456,3 +3456,20 @@
 Table	Op	Msg_type	Msg_text
 test.t1	optimize	status	OK
 DROP TABLE t1;
+CREATE TABLE t1 (id int PRIMARY KEY, f int NOT NULL, INDEX(f)) ENGINE=InnoDB;
+CREATE TABLE t2 (id int PRIMARY KEY, f INT NOT NULL,
+CONSTRAINT t2_t1 FOREIGN KEY (id) REFERENCES t1 (id)
+ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
+ALTER TABLE t2 ADD FOREIGN KEY (f) REFERENCES t1 (f) ON
+DELETE CASCADE ON UPDATE CASCADE;
+SHOW CREATE TABLE t2;
+Table	Create Table
+t2	CREATE TABLE `t2` (
+  `id` int(11) NOT NULL,
+  `f` int(11) NOT NULL,
+  PRIMARY KEY (`id`),
+  KEY `f` (`f`),
+  CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`f`) REFERENCES `t1` (`f`) ON DELETE CASCADE ON UPDATE CASCADE,
+  CONSTRAINT `t2_t1` FOREIGN KEY (`id`) REFERENCES `t1` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t2, t1;

--- 1.153/mysql-test/t/innodb.test	2006-12-27 22:44:55 -07:00
+++ 1.154/mysql-test/t/innodb.test	2007-01-21 18:18:09 -07:00
@@ -2504,6 +2504,22 @@
 OPTIMIZE TABLE t1;
 DROP TABLE t1;
 
+#
+# Bug #24741 (existing cascade clauses disappear when adding foreign keys)
+#
+
+CREATE TABLE t1 (id int PRIMARY KEY, f int NOT NULL, INDEX(f)) ENGINE=InnoDB;
+
+CREATE TABLE t2 (id int PRIMARY KEY, f INT NOT NULL,
+  CONSTRAINT t2_t1 FOREIGN KEY (id) REFERENCES t1 (id)
+  ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
+
+ALTER TABLE t2 ADD FOREIGN KEY (f) REFERENCES t1 (f) ON
+DELETE CASCADE ON UPDATE CASCADE;
+
+SHOW CREATE TABLE t2;
+DROP TABLE t2, t1;
+
 #######################################################################
 #                                                                     #
 # Please, DO NOT TOUCH this file as well as the innodb.result file.   #
Thread
bk commit into 5.1 tree (tsmith:1.2422)tim22 Jan