List:Commits« Previous MessageNext Message »
From:tim Date:August 15 2006 1:43am
Subject:bk commit into 5.1 tree (tsmith:1.2274) BUG#21467
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, 2006-08-15 01:42:57+02:00, tsmith@stripped +21 -0
  Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
  All but ss677 are against the mysql-5.1 tree only.
  
  Fixes the following bugs:
  - Bug #19834: Using cursors when running in READ-COMMITTED can cause InnoDB to crash
  - Bug #20213: DBT2 testing cause mysqld to core using Innodb
  - Bug #20493: on partition tables, select and show command casue server crash
  - Bug #21113: Duplicate printout in SHOW INNODB STATUS
  - Bug #21313: rsql_..._recover_innodb_tmp_table is redundant and broken
  - Bug #21467: Manual URL wrong in InnoDB "page corrupted" error report

  mysql-test/r/innodb.result@stripped, 2006-08-14 23:58:55+02:00, tsmith@stripped
+4 -12
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    innodb.result: Adjust Innodb_rows_inserted and Innodb_rows_updated
    to reflect the deleted statements in r420, which somehow reappeared
    in the MySQL tree.

  mysql-test/t/innodb.test@stripped, 2006-08-14 23:58:56+02:00, tsmith@stripped
+0 -8
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.

  sql/ha_innodb.cc@stripped, 2006-08-14 23:58:56+02:00, tsmith@stripped +69 -60
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    ha_innobase::start_stmt(): patch from Heikki:
    Do not call read_view_close_for_mysql().  (Bug #19834)
    
    Fix Bug#20213 and its duplicates: stress test crashes of InnoDB-5.1
    
    Fix Bug #20493 : we must prepare prebuilt->trx to point to the trx of this thd
before using it
    
    Add update_thd() to several places in ha_innodb.cc to make sure prebuilt->trx
points to the right trx object; in other functions add assertions that prebuilt->trx
is for this thd; when 5.1 stabilizes, we can change these assertions to ut_ad() debug
version assertions
    
    Remove redundant check_trx_exists() and ut_a() from r701,
    as suggested by Marko
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/Makefile.am@stripped, 2006-08-15 00:27:37+02:00,
tsmith@stripped +1 -2
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.

  storage/innobase/btr/btr0btr.c@stripped, 2006-08-14 23:58:56+02:00,
tsmith@stripped +1 -1
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/buf/buf0buf.c@stripped, 2006-08-14 23:58:56+02:00,
tsmith@stripped +3 -2
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/dict/dict0dict.c@stripped, 2006-08-14 23:58:56+02:00,
tsmith@stripped +5 -6
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/fil/fil0fil.c@stripped, 2006-08-14 23:58:56+02:00,
tsmith@stripped +13 -13
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Make the tablespace cache hash size 100 or 1000 times bigger. Fixes bug
    #21112.
    
    After ut_print_timestamp(), always display "  InnoDB:" (note two spaces).
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/fsp/fsp0fsp.c@stripped, 2006-08-14 23:58:56+02:00,
tsmith@stripped +1 -1
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/ibuf/ibuf0ibuf.c@stripped, 2006-08-14 23:58:57+02:00,
tsmith@stripped +2 -15
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    ibuf_print(): Don't print redundant information. Fixes bug #21113.
    
    Remove non-varying variable ibuf->meter and related constant IBUF_THRESHOLD.

  storage/innobase/include/btr0cur.ic@stripped, 2006-08-14 23:58:57+02:00,
tsmith@stripped +1 -4
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    btr_cur_get_page(): Remove buggy assertion.

  storage/innobase/include/buf0buf.ic@stripped, 2006-08-14 23:58:57+02:00,
tsmith@stripped +4 -4
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/include/ibuf0ibuf.ic@stripped, 2006-08-14 23:58:57+02:00,
tsmith@stripped +1 -10
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Remove non-varying variable ibuf->meter and related constant IBUF_THRESHOLD.

  storage/innobase/log/log0log.c@stripped, 2006-08-14 23:58:57+02:00,
tsmith@stripped +1 -1
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/log/log0recv.c@stripped, 2006-08-14 23:58:58+02:00,
tsmith@stripped +2 -2
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/os/os0file.c@stripped, 2006-08-14 23:58:58+02:00,
tsmith@stripped +6 -6
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/row/row0mysql.c@stripped, 2006-08-14 23:58:58+02:00,
tsmith@stripped +19 -114
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Remove the special treatment of tables
    rsql_IDENTIFIER_recover_innodb_tmp_table, which is redundant and
    was broken with the introduction of the "safe" file name encoding of
    identifiers.  (Bug #21313)
    
    ChangeSet@stripped  2006-08-02 17:57:06+02:00  ingo@local
    Bug#18775 - Temporary table from alter table visible to other threads
    Continued implementation of WL#1324 (table name to filename encoding)
    Changed back the encoded temp file prefix to #sql.
    
    After ut_print_timestamp(), always display "  InnoDB:" (note two spaces).
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/row/row0sel.c@stripped, 2006-08-14 23:58:58+02:00,
tsmith@stripped +1 -1
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/row/row0vers.c@stripped, 2006-08-14 23:58:58+02:00,
tsmith@stripped +1 -1
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    row_vers_build_for_semi_consistent_read(): rec_trx_id was uninitialized
    in a comparison.  Initialize it.

  storage/innobase/srv/srv0start.c@stripped, 2006-08-14 23:58:59+02:00,
tsmith@stripped +1 -1
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

  storage/innobase/ut/ut0dbg.c@stripped, 2006-08-14 23:58:59+02:00,
tsmith@stripped +2 -2
    Applied innodb-5.1-ss677, -ss680, -ss713, and -ss720 snapshots.
    All but ss677 are against the mysql-5.1 tree only.
    
    ut_dbg_assertion_failed(): Print space between timestamp and start of error
    message.
    
    After ut_print_timestamp(), always display "  InnoDB:" (note two spaces).
    
    Correct all URLs pointing to the MySQL manual. (Bug #21467)

# 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:	production.mysql.com
# Root:	/usersnfs/tsmith/tmp/bk/i51

--- 1.16/storage/innobase/Makefile.am	2006-08-15 01:43:05 +02:00
+++ 1.17/storage/innobase/Makefile.am	2006-08-15 01:43:05 +02:00
@@ -77,8 +77,7 @@
 		include/ut0byte.h include/ut0byte.ic include/ut0dbg.h include/ut0lst.h \
 		include/ut0mem.h include/ut0mem.ic include/ut0rnd.h include/ut0rnd.ic \
 		include/ut0sort.h include/ut0ut.h include/ut0ut.ic include/ut0vec.h include/ut0vec.ic
include/ha_prototypes.h \
-		include/ut0list.h include/ut0list.ic \
-		include/ut0wqueue.h \
+		include/ut0list.h include/ut0list.ic include/ut0wqueue.h \
 		CMakeLists.txt
 
 noinst_LIBRARIES =	libinnobase.a

--- 1.44/storage/innobase/btr/btr0btr.c	2006-08-15 01:43:05 +02:00
+++ 1.45/storage/innobase/btr/btr0btr.c	2006-08-15 01:43:05 +02:00
@@ -624,7 +624,7 @@
 		fputs(
 "InnoDB: You should dump + drop + reimport the table to fix the\n"
 "InnoDB: corruption. If the crash happens at the database startup, see\n"
-"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html about\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html about\n"
 "InnoDB: forcing recovery. Then dump + drop + reimport.\n", stderr);
 	}
 

--- 1.53/storage/innobase/buf/buf0buf.c	2006-08-15 01:43:05 +02:00
+++ 1.54/storage/innobase/buf/buf0buf.c	2006-08-15 01:43:05 +02:00
@@ -323,7 +323,8 @@
 "InnoDB: is in the future! Current system log sequence number %lu %lu.\n"
 "InnoDB: Your database may be corrupt or you may have copied the InnoDB\n"
 "InnoDB: tablespace but not the InnoDB log files. See\n"
-"http://dev.mysql.com/doc/mysql/en/backing-up.html for more information.\n",
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
+"InnoDB: for more information.\n",
 				(ulong) mach_read_from_4(read_buf + FIL_PAGE_OFFSET),
 				(ulong) ut_dulint_get_high(
 					mach_read_from_8(read_buf + FIL_PAGE_LSN)),
@@ -1923,7 +1924,7 @@
 		"InnoDB: the corrupt table. You can use CHECK\n"
 		"InnoDB: TABLE to scan your table for corruption.\n"
 		"InnoDB: See also "
-		"http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
 		"InnoDB: about forcing recovery.\n", stderr);
 
 			if (srv_force_recovery < SRV_FORCE_IGNORE_CORRUPT) {

--- 1.83/storage/innobase/dict/dict0dict.c	2006-08-15 01:43:05 +02:00
+++ 1.84/storage/innobase/dict/dict0dict.c	2006-08-15 01:43:05 +02:00
@@ -2215,8 +2215,8 @@
 	if (fk->foreign_index) {
 		fputs("The index in the foreign key in table is ", file);
 		ut_print_name(file, NULL, FALSE, fk->foreign_index->name);
-		fputs(
-"\nSee http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html\n"
+		fputs("\n"
+"See http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html\n"
 "for correct foreign key definition.\n",
 		file);
 	}
@@ -3119,7 +3119,7 @@
 		ut_print_name(ef, NULL, TRUE, name);
 		fprintf(ef, " where the columns appear\n"
 "as the first columns. Constraint:\n%s\n"
-"See http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html\n"
+"See http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html\n"
 "for correct foreign key definition.\n",
 			start_of_latest_foreign);
 		mutex_exit(&dict_foreign_err_mutex);
@@ -3387,7 +3387,7 @@
 "Note that the internal storage type of ENUM and SET changed in\n"
 "tables created with >= InnoDB-4.1.12, and such columns in old tables\n"
 "cannot be referenced by such columns in new tables.\n"
-"See http://dev.mysql.com/doc/mysql/en/InnoDB_foreign_key_constraints.html\n"
+"See http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html\n"
 "for correct foreign key definition.\n",
 				start_of_latest_foreign);
 			mutex_exit(&dict_foreign_err_mutex);
@@ -3941,8 +3941,7 @@
 		fprintf(stderr,
 			"  InnoDB: cannot calculate statistics for table %s\n"
 "InnoDB: because the .ibd file is missing.  For help, please refer to\n"
-"InnoDB: "
-"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n",
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
 			table->name);
 
 		return;

--- 1.65/storage/innobase/fil/fil0fil.c	2006-08-15 01:43:05 +02:00
+++ 1.66/storage/innobase/fil/fil0fil.c	2006-08-15 01:43:05 +02:00
@@ -251,9 +251,6 @@
 initialized. */
 fil_system_t*	fil_system	= NULL;
 
-/* The tablespace memory cache hash table size */
-#define	FIL_SYSTEM_HASH_SIZE	50 /* TODO: make bigger! */
-
 
 /************************************************************************
 NOTE: you must call fil_mutex_enter_and_prepare_for_io() first!
@@ -1323,11 +1320,17 @@
 /*=====*/
 	ulint	max_n_open)	/* in: max number of open files */
 {
+	ulint	hash_size;
+
 	ut_a(fil_system == NULL);
 
-	/*printf("Initializing the tablespace cache with max %lu open files\n",
-	  max_n_open); */
-	fil_system = fil_system_create(FIL_SYSTEM_HASH_SIZE, max_n_open);
+	if (srv_file_per_table) {
+		hash_size = 50000;
+	} else {
+		hash_size = 5000;
+	}
+
+	fil_system = fil_system_create(hash_size, max_n_open);
 }
 
 /***********************************************************************
@@ -2560,7 +2563,7 @@
 
 	ut_print_timestamp(stderr);
 	fprintf(stderr,
-" InnoDB: Flush lsn in the tablespace file %lu to be imported\n"
+"  InnoDB: Flush lsn in the tablespace file %lu to be imported\n"
 "InnoDB: is %lu %lu, which exceeds current system lsn %lu %lu.\n"
 "InnoDB: We reset the lsn's in the file ",
 		(ulong) space_id,
@@ -2685,8 +2688,7 @@
 "InnoDB: It is also possible that this is a temporary table #sql...,\n"
 "InnoDB: and MySQL removed the .ibd file for this.\n"
 "InnoDB: Please refer to\n"
-"InnoDB:"
-" http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 "InnoDB: for how to resolve the issue.\n", stderr);
 
 		mem_free(filepath);
@@ -2725,8 +2727,7 @@
 "InnoDB: Have you moved InnoDB .ibd files around without using the\n"
 "InnoDB: commands DISCARD TABLESPACE and IMPORT TABLESPACE?\n"
 "InnoDB: Please refer to\n"
-"InnoDB:"
-" http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 "InnoDB: for how to resolve the issue.\n", (ulong) space_id, (ulong) id);
 
 		ret = FALSE;
@@ -3373,8 +3374,7 @@
 	error_exit:
 		fputs(
 "InnoDB: Please refer to\n"
-"InnoDB:"
-" http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 "InnoDB: for how to resolve the issue.\n", stderr);
 
 		mem_free(path);

--- 1.28/storage/innobase/fsp/fsp0fsp.c	2006-08-15 01:43:05 +02:00
+++ 1.29/storage/innobase/fsp/fsp0fsp.c	2006-08-15 01:43:05 +02:00
@@ -2988,7 +2988,7 @@
 	crash:
 		fputs(
 "InnoDB: Please refer to\n"
-"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
 "InnoDB: about forcing recovery.\n", stderr);
 		ut_error;
 	}

--- 1.46/storage/innobase/ibuf/ibuf0ibuf.c	2006-08-15 01:43:05 +02:00
+++ 1.47/storage/innobase/ibuf/ibuf0ibuf.c	2006-08-15 01:43:05 +02:00
@@ -373,7 +373,6 @@
 
 	ibuf->max_size = buf_pool_get_curr_size() / UNIV_PAGE_SIZE
 						/ IBUF_POOL_SIZE_PER_MAX_SIZE;
-	ibuf->meter = IBUF_THRESHOLD + 1;
 
 	UT_LIST_INIT(ibuf->data_list);
 
@@ -3517,21 +3516,9 @@
 	data = UT_LIST_GET_FIRST(ibuf->data_list);
 
 	while (data) {
-	fprintf(file,
-	"Ibuf for space %lu: size %lu, free list len %lu, seg size %lu,",
-		(ulong) data->space, (ulong) data->size,
-		(ulong) data->free_list_len,
-		(ulong) data->seg_size);
-
-		if (data->empty) {
-			fputs(" is empty\n", file);
-		} else {
-			fputs(" is not empty\n", file);
-		}
 		fprintf(file,
-	"Ibuf for space %lu: size %lu, free list len %lu, seg size %lu,\n"
-			"%lu inserts, %lu merged recs, %lu merges\n",
-			(ulong) data->space,
+	"Ibuf: size %lu, free list len %lu, seg size %lu,\n"
+	"%lu inserts, %lu merged recs, %lu merges\n",
 			(ulong) data->size,
 			(ulong) data->free_list_len,
 			(ulong) data->seg_size,

--- 1.6/storage/innobase/include/btr0cur.ic	2006-08-15 01:43:05 +02:00
+++ 1.7/storage/innobase/include/btr0cur.ic	2006-08-15 01:43:05 +02:00
@@ -52,10 +52,7 @@
 				/* out: pointer to page */
 	btr_cur_t*	cursor)	/* in: tree cursor */
 {
-	page_t*	page = buf_frame_align(page_cur_get_rec(&(cursor->page_cur)));
-	ut_ad(!!page_is_comp(page)
-		== dict_table_is_comp(cursor->index->table));
-	return(page);
+	return(buf_frame_align(page_cur_get_rec(&(cursor->page_cur))));
 }
 
 /*************************************************************

--- 1.20/storage/innobase/include/buf0buf.ic	2006-08-15 01:43:05 +02:00
+++ 1.21/storage/innobase/include/buf0buf.ic	2006-08-15 01:43:05 +02:00
@@ -216,8 +216,8 @@
 "InnoDB: Error: trying to access a stray pointer %p\n"
 "InnoDB: buf pool start is at %p, end at %p\n"
 "InnoDB: Probable reason is database corruption or memory\n"
-"InnoDB: corruption. If this happens in an InnoDB database recovery,\n"
-"InnoDB: you can look from section 6.1 at http://www.innodb.com/ibman.html\n"
+"InnoDB: corruption. If this happens in an InnoDB database recovery, see\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
 "InnoDB: how to force recovery.\n",
 			ptr, frame_zero,
 			buf_pool->high_end);
@@ -252,8 +252,8 @@
 "InnoDB: Error: trying to access a stray pointer %p\n"
 "InnoDB: buf pool start is at %p, end at %p\n"
 "InnoDB: Probable reason is database corruption or memory\n"
-"InnoDB: corruption. If this happens in an InnoDB database recovery,\n"
-"InnoDB: you can look from section 6.1 at http://www.innodb.com/ibman.html\n"
+"InnoDB: corruption. If this happens in an InnoDB database recovery, see\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
 "InnoDB: how to force recovery.\n",
 			ptr, buf_pool->frame_zero,
 			buf_pool->high_end);

--- 1.5/storage/innobase/include/ibuf0ibuf.ic	2006-08-15 01:43:05 +02:00
+++ 1.6/storage/innobase/include/ibuf0ibuf.ic	2006-08-15 01:43:05 +02:00
@@ -39,19 +39,11 @@
 	ulint		n_merged_recs;/* number of records merged */
 };
 
-/* If the ibuf meter exceeds this value, then the suitable inserts are made to
-the insert buffer instead of directly to the disk page */
-#define IBUF_THRESHOLD	50
-
 struct ibuf_struct{
 	ulint		size;		/* current size of the ibuf index
 					trees in pages */
 	ulint		max_size;	/* recommended maximum size in pages
 					for the ibuf index tree */
-	ulint		meter;		/* heuristic meter which measures
-					desirability of doing inserts to the
-					insert buffer instead of directly to
-					the disk page */
 	UT_LIST_BASE_NODE_T(ibuf_data_t) data_list;
 					/* list of ibuf data structs for
 					each tablespace */
@@ -88,8 +80,7 @@
 						decide */
 {
 	if (!(index->type & DICT_CLUSTERED)
-		&& (ignore_sec_unique || !(index->type & DICT_UNIQUE))
-		&& ibuf->meter > IBUF_THRESHOLD) {
+		&& (ignore_sec_unique || !(index->type & DICT_UNIQUE))) {
 
 		ibuf_flush_count++;
 

--- 1.47/storage/innobase/log/log0log.c	2006-08-15 01:43:05 +02:00
+++ 1.48/storage/innobase/log/log0log.c	2006-08-15 01:43:05 +02:00
@@ -720,7 +720,7 @@
 "InnoDB: To get mysqld to start up, set innodb_thread_concurrency in my.cnf\n"
 "InnoDB: to a lower value, for example, to 8. After an ERROR-FREE shutdown\n"
 "InnoDB: of mysqld you can adjust the size of ib_logfiles, as explained in\n"
-"InnoDB: http://dev.mysql.com/doc/mysql/en/Adding_and_removing.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/adding-and-removing.html\n"
 "InnoDB: Cannot continue operation. Calling exit(1).\n",
 			(ulong)srv_thread_concurrency);
 

--- 1.55/storage/innobase/log/log0recv.c	2006-08-15 01:43:05 +02:00
+++ 1.56/storage/innobase/log/log0recv.c	2006-08-15 01:43:05 +02:00
@@ -542,7 +542,7 @@
 "InnoDB: the problem may be that during an earlier attempt you managed\n"
 "InnoDB: to create the InnoDB data files, but log file creation failed.\n"
 "InnoDB: If that is the case, please refer to\n"
-"InnoDB: http://dev.mysql.com/doc/mysql/en/Error_creating_InnoDB.html\n");
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/error-creating-innodb.html\n");
 		return(DB_ERROR);
 	}
 
@@ -1962,7 +1962,7 @@
 	"InnoDB: far enough in recovery! Please run CHECK TABLE\n"
 	"InnoDB: on your InnoDB tables to check that they are ok!\n"
 	"InnoDB: If mysqld crashes after this recovery, look at\n"
-	"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html\n"
+	"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
 	"InnoDB: about forcing recovery.\n", stderr);
 
 	fflush(stderr);

--- 1.116/storage/innobase/os/os0file.c	2006-08-15 01:43:05 +02:00
+++ 1.117/storage/innobase/os/os0file.c	2006-08-15 01:43:05 +02:00
@@ -248,7 +248,7 @@
 			fprintf(stderr,
   "InnoDB: Some operating system error numbers are described at\n"
   "InnoDB: "
-  "http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n");
+  "http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n");
 		}
 	}
 
@@ -295,7 +295,7 @@
 			fprintf(stderr,
   "InnoDB: Some operating system error numbers are described at\n"
   "InnoDB: "
-  "http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n");
+  "http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n");
 		}
 	}
 
@@ -688,7 +688,7 @@
 /* TODO: test Windows symlinks */
 /* TODO: MySQL has apparently its own symlink implementation in Windows,
 dbname.sym can redirect a database directory:
-http://www.mysql.com/doc/en/Windows_symbolic_links.html */
+http://dev.mysql.com/doc/refman/5.1/en/windows-symbolic-links.html */
 			info->type = OS_FILE_TYPE_LINK;
 		} else if (lpFindFileData->dwFileAttributes
 						& FILE_ATTRIBUTE_DIRECTORY) {
@@ -2343,7 +2343,7 @@
 "InnoDB: offset %lu %lu. Operating system error number %lu.\n"
 "InnoDB: Some operating system error numbers are described at\n"
 "InnoDB: "
-"http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n",
+"http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n",
 			name, (ulong) offset_high, (ulong) offset,
 			(ulong) GetLastError());
 
@@ -2408,7 +2408,7 @@
 		fprintf(stderr,
 "InnoDB: Some operating system error numbers are described at\n"
 "InnoDB: "
-"http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n");
+"http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n");
 
 		os_has_said_disk_full = TRUE;
 	}
@@ -2444,7 +2444,7 @@
 		fprintf(stderr,
 "InnoDB: Some operating system error numbers are described at\n"
 "InnoDB: "
-"http://dev.mysql.com/doc/mysql/en/Operating_System_error_codes.html\n");
+"http://dev.mysql.com/doc/refman/5.1/en/operating-system-error-codes.html\n");
 
 		os_has_said_disk_full = TRUE;
 	}

--- 1.128/storage/innobase/row/row0mysql.c	2006-08-15 01:43:05 +02:00
+++ 1.129/storage/innobase/row/row0mysql.c	2006-08-15 01:43:05 +02:00
@@ -54,27 +54,6 @@
 static const char S_innodb_table_monitor[] = "innodb_table_monitor";
 static const char S_innodb_mem_validate[] = "innodb_mem_validate";
 
-/* Name suffix for recovered orphaned temporary tables */
-static const char S_recover_innodb_tmp_table[] = "_recover_innodb_tmp_table";
-/***********************************************************************
-Determine if the given name ends in the suffix reserved for recovered
-orphaned temporary tables. */
-static
-ibool
-row_mysql_is_recovered_tmp_table(
-/*=============================*/
-				 /* out: TRUE if table name ends in
-				 the reserved suffix */
-	const char*	name)
-{
-	ulint	namelen	= strlen(name) + 1;
-	return(namelen >= sizeof S_recover_innodb_tmp_table
-		&& !memcmp(name + namelen -
-			sizeof S_recover_innodb_tmp_table,
-			S_recover_innodb_tmp_table,
-			sizeof S_recover_innodb_tmp_table));
-}
-
 /***********************************************************************
 Determine if the given name is a name reserved for MySQL system tables. */
 static
@@ -550,7 +529,7 @@
 	"InnoDB: tables and recreate the whole InnoDB tablespace.\n"
 	"InnoDB: If the mysqld server crashes after the startup or when\n"
 	"InnoDB: you dump the tables, look at\n"
-	"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html"
+	    "InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html"
 	" for help.\n", stderr);
 
 	} else {
@@ -1083,7 +1062,7 @@
 "InnoDB: Have you deleted the .ibd file from the database directory under\n"
 "InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
 "InnoDB: Look from\n"
-"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 "InnoDB: how you can resolve the problem.\n",
 				prebuilt->table->name);
 		return(DB_ERROR);
@@ -1319,7 +1298,7 @@
 "InnoDB: Have you deleted the .ibd file from the database directory under\n"
 "InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
 "InnoDB: Look from\n"
-"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 "InnoDB: how you can resolve the problem.\n",
 				prebuilt->table->name);
 		return(DB_ERROR);
@@ -1660,48 +1639,6 @@
 }
 
 /*************************************************************************
-Recovers an orphaned tmp table inside InnoDB by renaming it. In the table
-name #sql becomes rsql, and "_recover_innodb_tmp_table" is catenated to
-the end of name. table->name should be of the form
-"dbname/rsql..._recover_innodb_tmp_table". This renames a table whose
-name is "#sql..." */
-static
-int
-row_mysql_recover_tmp_table(
-/*========================*/
-				/* out: error code or DB_SUCCESS */
-	dict_table_t*	table,	/* in: table definition */
-	trx_t*		trx)	/* in: transaction handle */
-{
-	const char*	ptr	= strstr(table->name, "/rsql");
-
-	if (!ptr) {
-		/* table name does not begin with "/rsql" */
-		dict_mem_table_free(table);
-		trx_commit_for_mysql(trx);
-
-		return(DB_ERROR);
-	}
-	else {
-		int	status;
-		int	namelen = (int) strlen(table->name);
-		char*	old_name = mem_strdupl(table->name, namelen);
-		/* replace "rsql" with "#sql" */
-		old_name[ptr - table->name + 1] = '#';
-		/* remove "_recover_innodb_tmp_table" suffix */
-		ut_ad(namelen > (int) sizeof S_recover_innodb_tmp_table);
-		ut_ad(!strcmp(old_name + namelen + 1 -
-			sizeof S_recover_innodb_tmp_table,
-			S_recover_innodb_tmp_table));
-		old_name[namelen + 1 - sizeof S_recover_innodb_tmp_table] = 0;
-		status = row_rename_table_for_mysql(old_name,
-						table->name, trx);
-		mem_free(old_name);
-		return(status);
-	}
-}
-
-/*************************************************************************
 Locks the data dictionary in shared mode from modifications, for performing
 foreign key check, rollback, or other operation invisible to MySQL. */
 
@@ -1845,18 +1782,6 @@
 
 	trx_start_if_not_started(trx);
 
-	if (row_mysql_is_recovered_tmp_table(table->name)) {
-
-		/* MySQL prevents accessing of tables whose name begins
-		with #sql, that is temporary tables. If mysqld crashes in
-		the middle of an ALTER TABLE, we may get an orphaned
-		#sql-table in the tablespace. We have here a special
-		mechanism to recover such tables by renaming them to
-		rsql... */
-
-		return(row_mysql_recover_tmp_table(table, trx));
-	}
-
 	/* The table name is prefixed with the database name and a '/'.
 	Certain table names starting with 'innodb_' have their special
 	meaning regardless of the database name.  Thus, we need to
@@ -1968,8 +1893,8 @@
      "InnoDB: Then MySQL thinks the table exists, and DROP TABLE will\n"
      "InnoDB: succeed.\n"
      "InnoDB: You can look for further help from\n"
-     "InnoDB: http://dev.mysql.com/doc/mysql/en/"
-     "InnoDB_troubleshooting_datadict.html\n", stderr);
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
+				stderr);
 		}
 
 		/* We may also get err == DB_ERROR if the .ibd file for the
@@ -2063,11 +1988,6 @@
 		}
 	}
 
-	if (row_mysql_is_recovered_tmp_table(index->table_name)) {
-
-		return(DB_SUCCESS);
-	}
-
 	heap = mem_heap_create(512);
 
 	trx->dict_operation = TRUE;
@@ -2142,11 +2062,6 @@
 
 	trx_start_if_not_started(trx);
 
-	if (row_mysql_is_recovered_tmp_table(name)) {
-
-		return(DB_SUCCESS);
-	}
-
 	trx->dict_operation = TRUE;
 
 	err = dict_create_foreign_constraints(trx, sql_string, name,
@@ -3054,8 +2969,8 @@
 	"InnoDB: Have you copied the .frm file of the table to the\n"
 	"InnoDB: MySQL database directory from another database?\n"
 	"InnoDB: You can look for further help from\n"
-	"InnoDB: http://dev.mysql.com/doc/mysql/en/"
-	"InnoDB_troubleshooting_datadict.html\n", stderr);
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
+				stderr);
 		goto funct_exit;
 	}
 
@@ -3495,7 +3410,6 @@
 	mem_heap_t*	heap			= NULL;
 	const char**	constraints_to_drop	= NULL;
 	ulint		n_constraints_to_drop	= 0;
-	ibool		recovering_temp_table	= FALSE;
 	ibool		old_is_tmp, new_is_tmp;
 	pars_info_t*	info			= NULL;
 
@@ -3533,15 +3447,10 @@
 	old_is_tmp = row_is_mysql_tmp_table_name(old_name);
 	new_is_tmp = row_is_mysql_tmp_table_name(new_name);
 
-	if (row_mysql_is_recovered_tmp_table(new_name)) {
-
-		recovering_temp_table = TRUE;
-	} else {
-		/* Serialize data dictionary operations with dictionary mutex:
-		no deadlocks can occur then in these operations */
+	/* Serialize data dictionary operations with dictionary mutex:
+	no deadlocks can occur then in these operations */
 
-		row_mysql_lock_data_dictionary(trx);
-	}
+	row_mysql_lock_data_dictionary(trx);
 
 	table = dict_table_get_low(old_name);
 
@@ -3556,8 +3465,8 @@
 	"InnoDB: Have you copied the .frm file of the table to the\n"
 	"InnoDB: MySQL database directory from another database?\n"
 	"InnoDB: You can look for further help from\n"
-	"InnoDB: http://dev.mysql.com/doc/mysql/en/"
-	"InnoDB_troubleshooting_datadict.html\n", stderr);
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
+				stderr);
 		goto funct_exit;
 	}
 
@@ -3570,8 +3479,8 @@
 		fputs(
 	" does not have an .ibd file in the database directory.\n"
 	"InnoDB: You can look for further help from\n"
-	"InnoDB: http://dev.mysql.com/doc/mysql/en/"
-	"InnoDB_troubleshooting_datadict.html\n", stderr);
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
+			stderr);
 		goto funct_exit;
 	}
 
@@ -3719,8 +3628,7 @@
 		fputs(" to it.\n"
      "InnoDB: Have you deleted the .frm file and not used DROP TABLE?\n"
      "InnoDB: You can look for further help from\n"
-     "InnoDB: http://dev.mysql.com/doc/mysql/en/"
-     "InnoDB_troubleshooting_datadict.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
      "InnoDB: If table ", stderr);
 			ut_print_name(stderr, trx, TRUE, new_name);
 			fputs(
@@ -3748,8 +3656,8 @@
 			trx_general_rollback_for_mysql(trx, FALSE, NULL);
 			trx->error_state = DB_SUCCESS;
 			ut_print_timestamp(stderr);
-			fputs(" InnoDB: Error in table rename, cannot rename ",
-				stderr);
+			fputs(
+"  InnoDB: Error in table rename, cannot rename ", stderr);
 			ut_print_name(stderr, trx, TRUE, old_name);
 			fputs(" to ", stderr);
 			ut_print_name(stderr, trx, TRUE, new_name);
@@ -3797,10 +3705,7 @@
 
 funct_exit:
 	trx_commit_for_mysql(trx);
-
-	if (!recovering_temp_table) {
-		row_mysql_unlock_data_dictionary(trx);
-	}
+	row_mysql_unlock_data_dictionary(trx);
 
 	if (UNIV_LIKELY_NULL(heap)) {
 		mem_heap_free(heap);
@@ -3968,7 +3873,7 @@
 "InnoDB: Have you deleted the .ibd file from the database directory under\n"
 "InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
 "InnoDB: Look from\n"
-"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 "InnoDB: how you can resolve the problem.\n",
 				prebuilt->table->name);
 		return(DB_ERROR);

--- 1.106/storage/innobase/row/row0sel.c	2006-08-15 01:43:05 +02:00
+++ 1.107/storage/innobase/row/row0sel.c	2006-08-15 01:43:05 +02:00
@@ -3245,7 +3245,7 @@
 "InnoDB: Have you deleted the .ibd file from the database directory under\n"
 "InnoDB: the MySQL datadir, or have you used DISCARD TABLESPACE?\n"
 "InnoDB: Look from\n"
-"http://dev.mysql.com/doc/mysql/en/InnoDB_troubleshooting_datadict.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 "InnoDB: how you can resolve the problem.\n",
 				prebuilt->table->name);
 

--- 1.19/storage/innobase/row/row0vers.c	2006-08-15 01:43:05 +02:00
+++ 1.20/storage/innobase/row/row0vers.c	2006-08-15 01:43:05 +02:00
@@ -553,7 +553,7 @@
 	mem_heap_t*	heap		= NULL;
 	byte*		buf;
 	ulint		err;
-	dulint		rec_trx_id;
+	dulint		rec_trx_id	= ut_dulint_create(0, 0);
 
 	ut_ad(index->type & DICT_CLUSTERED);
 	ut_ad(mtr_memo_contains(mtr, buf_block_align(rec), MTR_MEMO_PAGE_X_FIX)

--- 1.93/storage/innobase/srv/srv0start.c	2006-08-15 01:43:05 +02:00
+++ 1.94/storage/innobase/srv/srv0start.c	2006-08-15 01:43:05 +02:00
@@ -1691,7 +1691,7 @@
 "InnoDB: You have now successfully upgraded to the multiple tablespaces\n"
 "InnoDB: format. You should NOT DOWNGRADE to an earlier version of\n"
 "InnoDB: InnoDB! But if you absolutely need to downgrade, see\n"
-"InnoDB: http://dev.mysql.com/doc/mysql/en/Multiple_tablespaces.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/multiple-tablespaces.html\n"
 "InnoDB: for instructions.\n");
 	}
 

--- 1.11/storage/innobase/ut/ut0dbg.c	2006-08-15 01:43:05 +02:00
+++ 1.12/storage/innobase/ut/ut0dbg.c	2006-08-15 01:43:05 +02:00
@@ -42,7 +42,7 @@
 {
 	ut_print_timestamp(stderr);
 	fprintf(stderr,
-		"InnoDB: Assertion failure in thread %lu"
+		"  InnoDB: Assertion failure in thread %lu"
 		" in file %s line %lu\n",
 		os_thread_pf(os_thread_get_curr_id()), file, line);
 	if (expr) {
@@ -56,7 +56,7 @@
 "InnoDB: If you get repeated assertion failures or crashes, even\n"
 "InnoDB: immediately after the mysqld startup, there may be\n"
 "InnoDB: corruption in the InnoDB tablespace. Please refer to\n"
-"InnoDB: http://dev.mysql.com/doc/mysql/en/Forcing_recovery.html\n"
+"InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html\n"
 "InnoDB: about forcing recovery.\n", stderr);
 #if defined(UNIV_SYNC_DEBUG) || !defined(UT_DBG_USE_ABORT)
 	ut_dbg_stop_threads = TRUE;

--- 1.181/mysql-test/r/innodb.result	2006-08-15 01:43:05 +02:00
+++ 1.182/mysql-test/r/innodb.result	2006-08-15 01:43:05 +02:00
@@ -1295,24 +1295,16 @@
 insert into t1 (a) select b from t2;
 insert into t2 (a) select b from t1;
 insert into t1 (a) select b from t2;
-insert into t2 (a) select b from t1;
-insert into t1 (a) select b from t2;
-insert into t2 (a) select b from t1;
-insert into t1 (a) select b from t2;
-insert into t2 (a) select b from t1;
-insert into t1 (a) select b from t2;
-insert into t2 (a) select b from t1;
-insert into t1 (a) select b from t2;
 select count(*) from t1;
 count(*)
-29267
+623
 explain select * from t1 where c between 1 and 2500;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t1	range	c	c	5	NULL	#	Using where
 update t1 set c=a;
 explain select * from t1 where c between 1 and 2500;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t1	range	c	c	5	NULL	#	Using where
+1	SIMPLE	t1	ALL	c	NULL	NULL	NULL	#	Using where
 drop table t1,t2;
 create table t1 (id int primary key auto_increment, fk int, index index_fk (fk))
engine=innodb;
 insert into t1 (id) values (null),(null),(null),(null),(null);
@@ -1786,10 +1778,10 @@
 Innodb_rows_deleted	2070
 show status like "Innodb_rows_inserted";
 Variable_name	Value
-Innodb_rows_inserted	31727
+Innodb_rows_inserted	3083
 show status like "Innodb_rows_updated";
 Variable_name	Value
-Innodb_rows_updated	29530
+Innodb_rows_updated	886
 show status like "Innodb_row_lock_waits";
 Variable_name	Value
 Innodb_row_lock_waits	0

--- 1.148/mysql-test/t/innodb.test	2006-08-15 01:43:05 +02:00
+++ 1.149/mysql-test/t/innodb.test	2006-08-15 01:43:05 +02:00
@@ -904,14 +904,6 @@
 insert into t1 (a) select b from t2;
 insert into t2 (a) select b from t1;
 insert into t1 (a) select b from t2;
-insert into t2 (a) select b from t1;
-insert into t1 (a) select b from t2;
-insert into t2 (a) select b from t1;
-insert into t1 (a) select b from t2;
-insert into t2 (a) select b from t1;
-insert into t1 (a) select b from t2;
-insert into t2 (a) select b from t1;
-insert into t1 (a) select b from t2;
 select count(*) from t1;
 --replace_column 9 #
 explain select * from t1 where c between 1 and 2500;

--- 1.284/sql/ha_innodb.cc	2006-08-15 01:43:05 +02:00
+++ 1.285/sql/ha_innodb.cc	2006-08-15 01:43:05 +02:00
@@ -208,6 +208,7 @@
                                         MEM_ROOT *mem_root);
 
 static const char innobase_hton_name[]= "InnoDB";
+
 handlerton innobase_hton;
 
 static handler *innobase_create_handler(TABLE_SHARE *table, MEM_ROOT *mem_root)
@@ -2364,8 +2365,7 @@
 				"have forgotten\nto delete the corresponding "
 				".frm files of InnoDB tables, or you\n"
 				"have moved .frm files to another database?\n"
-				"Look from section 15.1 of "
-				"http://www.innodb.com/ibman.html\n"
+				"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 				"how you can resolve the problem.\n",
 				norm_name);
 		free_share(share);
@@ -2382,8 +2382,7 @@
 				"Have you deleted the .ibd file from the "
 				"database directory under\nthe MySQL datadir, "
 				"or have you used DISCARD TABLESPACE?\n"
-				"Look from section 15.1 of "
-				"http://www.innodb.com/ibman.html\n"
+				"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 				"how you can resolve the problem.\n",
 				norm_name);
 		free_share(share);
@@ -3664,7 +3663,7 @@
 
 	DBUG_ENTER("ha_innobase::update_row");
 
-	ut_ad(prebuilt->trx ==
+	ut_a(prebuilt->trx ==
 		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
 
 	if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
@@ -3725,7 +3724,7 @@
 
 	DBUG_ENTER("ha_innobase::delete_row");
 
-	ut_ad(prebuilt->trx ==
+	ut_a(prebuilt->trx ==
 		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
 
 	if (last_query_id != user_thd->query_id) {
@@ -3823,6 +3822,9 @@
 {
 	row_prebuilt_t*	prebuilt = (row_prebuilt_t*) innobase_prebuilt;
 
+	ut_a(prebuilt->trx ==
+		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
+
 	/* Row read type is set to semi consistent read if this was
 	requested by the MySQL and either innodb_locks_unsafe_for_binlog
 	option is used or this session is using READ COMMITTED isolation
@@ -3987,7 +3989,7 @@
 
 	DBUG_ENTER("index_read");
 
-	ut_ad(prebuilt->trx ==
+	ut_a(prebuilt->trx ==
 		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
 
 	statistic_increment(current_thd->status_var.ha_read_key_count,
@@ -4102,7 +4104,7 @@
 	DBUG_ENTER("change_active_index");
 
 	ut_ad(user_thd == current_thd);
-	ut_ad(prebuilt->trx ==
+	ut_a(prebuilt->trx ==
 		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
 
 	active_index = keynr;
@@ -4192,7 +4194,7 @@
 
 	DBUG_ENTER("general_fetch");
 
-	ut_ad(prebuilt->trx ==
+	ut_a(prebuilt->trx ==
 		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
 
 	innodb_srv_conc_enter_innodb(prebuilt->trx);
@@ -4428,7 +4430,7 @@
 	statistic_increment(current_thd->status_var.ha_read_rnd_count,
 		&LOCK_status);
 
-	ut_ad(prebuilt->trx ==
+	ut_a(prebuilt->trx ==
 		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
 
 	if (prebuilt->clust_index_was_generated) {
@@ -4478,7 +4480,7 @@
 	row_prebuilt_t*	prebuilt = (row_prebuilt_t*) innobase_prebuilt;
 	uint		len;
 
-	ut_ad(prebuilt->trx ==
+	ut_a(prebuilt->trx ==
 		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
 
 	if (prebuilt->clust_index_was_generated) {
@@ -5006,7 +5008,6 @@
 {
 	row_prebuilt_t*	prebuilt	= (row_prebuilt_t*)innobase_prebuilt;
 	int		error;
-	trx_t*		trx;
 	THD*		thd		= current_thd;
 
 	DBUG_ENTER("ha_innobase::delete_all_rows");
@@ -5019,13 +5020,13 @@
 	}
 
 	/* Get the transaction associated with the current thd, or create one
-	if not yet created */
+	if not yet created, and update prebuilt->trx */
 
-	trx = check_trx_exists(thd);
+	update_thd(thd);
 
 	/* Truncate the table in InnoDB */
 
-	error = row_truncate_table_for_mysql(prebuilt->table, trx);
+	error = row_truncate_table_for_mysql(prebuilt->table, prebuilt->trx);
 	if (error == DB_ERROR) {
 		/* Cannot truncate; resort to ha_innobase::delete_row() */
 		goto fallback;
@@ -5308,6 +5309,9 @@
 
 	DBUG_ENTER("records_in_range");
 
+	ut_a(prebuilt->trx ==
+		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
+
 	prebuilt->trx->op_info = (char*)"estimating records in index range";
 
 	/* In case MySQL calls this in the middle of a SELECT query, release
@@ -5604,13 +5608,14 @@
 		for (i = 0; i < table->s->keys; i++) {
 			if (index == NULL) {
 				ut_print_timestamp(stderr);
-				sql_print_error("Table %s contains less "
+				sql_print_error("Table %s contains fewer "
 						"indexes inside InnoDB than "
 						"are defined in the MySQL "
 						".frm file. Have you mixed up "
 						".frm files from different "
-						"installations? See section "
-						"15.1 at http://www.innodb.com/ibman.html",
+						"installations? See "
+"http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
+
 						ib_table->name);
 				break;
 			}
@@ -5619,17 +5624,11 @@
 
 				if (j + 1 > index->n_uniq) {
 					ut_print_timestamp(stderr);
-					sql_print_error("Index %s of %s has "
-							"%lu columns unique "
-							"inside InnoDB, but "
-							"MySQL is asking "
-							"statistics for %lu "
-							"columns. Have you "
-							"mixed up .frm files "
-							"from different "
-							"installations? See "
-							"section 15.1 at "
-							"http://www.innodb.com/ibman.html",
+					sql_print_error(
+"Index %s of %s has %lu columns unique inside InnoDB, but MySQL is asking "
+"statistics for %lu columns. Have you mixed up .frm files from different "
+"installations? "
+"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n",
 							index->name,
 							ib_table->name,
 							(unsigned long)
@@ -6035,6 +6034,10 @@
 	bool	can_switch;
 
 	DBUG_ENTER("ha_innobase::can_switch_engines");
+
+	ut_a(prebuilt->trx ==
+		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
+
 	prebuilt->trx->op_info =
 			"determining if there are foreign key constraints";
 	row_mysql_lock_data_dictionary(prebuilt->trx);
@@ -6172,14 +6175,6 @@
 
 	innobase_release_stat_resources(trx);
 
-	if (trx->isolation_level <= TRX_ISO_READ_COMMITTED
-						&& trx->global_read_view) {
-		/* At low transaction isolation levels we let
-		each consistent read set its own snapshot */
-
-		read_view_close_for_mysql(trx);
-	}
-
 	prebuilt->sql_stat_start = TRUE;
 	prebuilt->hint_need_to_fetch_extra_cols = 0;
 	prebuilt->read_just_key = 0;
@@ -6438,7 +6433,7 @@
 "table %s does not exist.\n"
 "Have you deleted the .ibd file from the database directory under\n"
 "the MySQL datadir?"
-"Look from section 15.1 of http://www.innodb.com/ibman.html\n"
+"See http://dev.mysql.com/doc/refman/5.1/en/innodb-troubleshooting.html\n"
 "how you can resolve the problem.\n",
 				prebuilt->table->name);
 		DBUG_RETURN(HA_ERR_CRASHED);
@@ -6792,7 +6787,15 @@
 						TL_IGNORE */
 {
 	row_prebuilt_t* prebuilt	= (row_prebuilt_t*) innobase_prebuilt;
-	trx_t*		trx		= prebuilt->trx;
+	trx_t*		trx;
+
+	/* Call update_thd() to update prebuilt->trx to point to the trx
+	object of thd! Failure to do this caused a serious memory
+	corruption bug in 5.1.11. */
+
+	update_thd(thd);
+
+	trx = prebuilt->trx;
 
 	/* NOTE: MySQL	can call this function with lock 'type' TL_IGNORE!
 	Be careful to ignore TL_IGNORE if we are going to do something with
@@ -6909,28 +6912,28 @@
 		stored function call (MySQL does have thd->in_lock_tables
 		TRUE there). */
 
-    		if ((lock_type >= TL_WRITE_CONCURRENT_INSERT
-		    && lock_type <= TL_WRITE)
-		    && !(thd->in_lock_tables
-			    && thd->lex->sql_command == SQLCOM_LOCK_TABLES)
-		    && !thd->tablespace_op
-		    && thd->lex->sql_command != SQLCOM_TRUNCATE
-		    && thd->lex->sql_command != SQLCOM_OPTIMIZE
+		if ((lock_type >= TL_WRITE_CONCURRENT_INSERT
+		&& lock_type <= TL_WRITE)
+		&& !(thd->in_lock_tables
+			&& thd->lex->sql_command == SQLCOM_LOCK_TABLES)
+		&& !thd->tablespace_op
+		&& thd->lex->sql_command != SQLCOM_TRUNCATE
+		&& thd->lex->sql_command != SQLCOM_OPTIMIZE
+
 #ifdef __WIN__
-                /* 
-                   for alter table on win32 for succesfull operation 
-                   completion it is used TL_WRITE(=10) lock instead of
-                   TL_WRITE_ALLOW_READ(=6), however here in innodb handler
-                   TL_WRITE is lifted to TL_WRITE_ALLOW_WRITE, which causes
-                   race condition when several clients do alter table 
-                   simultaneously (bug #17264). This fix avoids the problem.
-                */
-                    && thd->lex->sql_command != SQLCOM_ALTER_TABLE
+                /* For alter table on win32 for succesful operation
+                completion it is used TL_WRITE(=10) lock instead of
+                TL_WRITE_ALLOW_READ(=6), however here in innodb handler
+                TL_WRITE is lifted to TL_WRITE_ALLOW_WRITE, which causes
+                race condition when several clients do alter table
+                simultaneously (bug #17264). This fix avoids the problem. */
+                && thd->lex->sql_command != SQLCOM_ALTER_TABLE
 #endif
-		    && thd->lex->sql_command != SQLCOM_CREATE_TABLE) {
+
+		&& thd->lex->sql_command != SQLCOM_CREATE_TABLE) {
 
 			lock_type = TL_WRITE_ALLOW_WRITE;
-      		}
+		}
 
 		/* In queries of type INSERT INTO t1 SELECT ... FROM t2 ...
 		MySQL would use the lock TL_READ_NO_INSERT on t2, and that
@@ -6977,10 +6980,11 @@
 	int		error;
 
 	ut_a(prebuilt);
-	ut_a(prebuilt->trx ==
-		(trx_t*) current_thd->ha_data[innobase_hton.slot]);
 	ut_a(prebuilt->table);
 
+	/* Prepare prebuilt->trx in the table handle */
+	update_thd(current_thd);
+
 	if (prebuilt->trx->conc_state == TRX_NOT_STARTED) {
 		trx_was_not_started = TRUE;
 	}
@@ -7115,6 +7119,9 @@
 	longlong	nr;
 	int		error;
 
+	/* Prepare prebuilt->trx in the table handle */
+	update_thd(current_thd);
+
 	error = innobase_read_and_init_auto_inc(&nr);
 
 	if (error) {
@@ -7143,6 +7150,8 @@
 	row_prebuilt_t* prebuilt = (row_prebuilt_t*) innobase_prebuilt;
 	int		error;
 
+	update_thd(current_thd);
+
 	error = row_lock_table_autoinc_for_mysql(prebuilt);
 
 	if (error != DB_SUCCESS) {
@@ -7183,7 +7192,7 @@
 	const mysql_byte* ref2)	/* in: an (internal) primary key value in the
 				MySQL key value format */
 {
-	row_prebuilt_t*	prebuilt = (row_prebuilt_t*) innobase_prebuilt;
+	row_prebuilt_t* prebuilt	= (row_prebuilt_t*) innobase_prebuilt;
 	enum_field_types mysql_type;
 	Field*		field;
 	KEY_PART_INFO*	key_part;
Thread
bk commit into 5.1 tree (tsmith:1.2274) BUG#21467tim15 Aug