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) | tim | 22 Jan |