Commit 84e7a86d authored by unknown's avatar unknown
Browse files

Merge mysql.com:/home/mydev/mysql-4.1

into mysql.com:/home/mydev/mysql-4.1-4100


sql/sql_select.cc:
  Auto merged
parents 2d82625d 343e9bbd
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -88,12 +88,13 @@ typedef struct st_key_cache
  ulong param_division_limit;   /* min. percentage of warm blocks           */
  ulong param_age_threshold;    /* determines when hot block is downgraded  */

  /* Statistics variables */
  /* Statistics variables. These are reset in reset_key_cache_counters(). */
  ulong global_blocks_changed;	/* number of currently dirty blocks         */
  ulong global_cache_w_requests;/* number of write requests (write hits)    */
  ulong global_cache_write;     /* number of writes from the cache to files */
  ulong global_cache_r_requests;/* number of read requests (read hits)      */
  ulong global_cache_read;      /* number of reads from files to the cache  */

  int blocks;                   /* max number of blocks in the cache        */
  my_bool in_init;		/* Set to 1 in MySQL during init/resize     */
} KEY_CACHE;
@@ -132,5 +133,7 @@ extern my_bool multi_key_cache_set(const byte *key, uint length,
				   KEY_CACHE *key_cache);
extern void multi_key_cache_change(KEY_CACHE *old_data,
				   KEY_CACHE *new_data);
extern int reset_key_cache_counters(const char *name,
                                    KEY_CACHE *key_cache);
C_MODE_END
#endif /* _keycache_h */
+11 −0
Original line number Diff line number Diff line
@@ -81,6 +81,17 @@ dict_create_sys_tables_tuple(

	dfield_set_data(dfield, ptr, 8);
	/* 7: MIX_LEN --------------------------*/

	/* Track corruption reported on mailing list Jan 14, 2005 */
	if (table->mix_len != 0 && table->mix_len != 0x80000000) {
		fprintf(stderr,
"InnoDB: Error: mix_len is %lu in table %s\n", (ulong)table->mix_len,
							table->name);
		mem_analyze_corruption((byte*)&(table->mix_len));
	
		ut_error;
	}

	dfield = dtuple_get_nth_field(entry, 5);

	ptr = mem_heap_alloc(heap, 4);
+6 −2
Original line number Diff line number Diff line
@@ -2895,9 +2895,9 @@ dict_create_foreign_constraints_low(
	constraint_name = NULL;

	if (ptr1 < ptr2) {
		/* The user has specified a constraint name. Pick it so
		/* The user may have specified a constraint name. Pick it so
		that we can store 'databasename/constraintname' as the id of
		the id of the constraint to system tables. */
		of the constraint to system tables. */
		ptr = ptr1;

		ptr = dict_accept(ptr, "CONSTRAINT", &success);
@@ -2934,6 +2934,10 @@ dict_create_foreign_constraints_low(

	ptr = dict_accept(ptr, "FOREIGN", &success);		
	
	if (!success) {
		goto loop;
	}

	if (!isspace(*ptr)) {
	        goto loop;
	}
+17 −0
Original line number Diff line number Diff line
@@ -729,6 +729,7 @@ dict_load_table(
	ulint		space;
	ulint		n_cols;
	ulint		err;
	ulint		mix_len;
	mtr_t		mtr;
	
#ifdef UNIV_SYNC_DEBUG
@@ -775,6 +776,22 @@ dict_load_table(
		return(NULL);
	}

	/* Track a corruption bug reported on the MySQL mailing list Jan 14,
	2005: mix_len had a value different from 0 */

	field = rec_get_nth_field(rec, 7, &len);
	ut_a(len == 4);

	mix_len = mach_read_from_4(field);

	if (mix_len != 0 && mix_len != 0x80000000) {
		ut_print_timestamp(stderr);
		
		fprintf(stderr,
			"  InnoDB: table %s has a nonsensical mix len %lu\n",
			name, (ulong)mix_len);
	}

#if MYSQL_VERSION_ID < 50300
	/* Starting from MySQL 5.0.3, the high-order bit of MIX_LEN is the
	"compact format" flag. */
+53 −24
Original line number Diff line number Diff line
@@ -477,28 +477,33 @@ fil_node_open_file(
	ut_a(node->n_pending == 0);
	ut_a(node->open == FALSE);

	/* printf("Opening file %s\n", node->name); */

	if (space->purpose == FIL_LOG) {	
		node->handle = os_file_create(node->name, OS_FILE_OPEN,
					OS_FILE_AIO, OS_LOG_FILE, &ret);
	} else if (node->is_raw_disk) {
		node->handle = os_file_create(node->name,
				        OS_FILE_OPEN_RAW,
					OS_FILE_AIO, OS_DATA_FILE, &ret);
	} else {
		node->handle = os_file_create(node->name, OS_FILE_OPEN,
					OS_FILE_AIO, OS_DATA_FILE, &ret);
	}
		
	ut_a(ret);
	if (node->size == 0) {
		/* It must be a single-table tablespace and we do not know the
		size of the file yet. First we open the file in the normal
		mode, no async I/O here, for simplicity. Then do some checks,
		and close the file again.
		NOTE that we could not use the simple file read function
		os_file_read() in Windows to read from a file opened for
		async I/O! */

		node->handle = os_file_create_simple_no_error_handling(
						node->name, OS_FILE_OPEN,
						OS_FILE_READ_ONLY, &success);
		if (!success) {
			/* The following call prints an error message */
			os_file_get_last_error(TRUE);

	node->open = TRUE;
			ut_print_timestamp(stderr);

	system->n_open++;
			fprintf(stderr,
"  InnoDB: Fatal error: cannot open %s\n."
"InnoDB: Have you deleted .ibd files under a running mysqld server?\n",
				node->name);
			ut_a(0);
		}

	if (node->size == 0) {
		ut_a(space->purpose != FIL_LOG);
		ut_a(space->id != 0);

		os_file_get_size(node->handle, &size_low, &size_high);

@@ -508,11 +513,6 @@ fil_node_open_file(
		node->size = (ulint) (size_bytes / UNIV_PAGE_SIZE);

#else
		/* It must be a single-table tablespace and we do not know the
		size of the file yet */

		ut_a(space->id != 0);

		if (size_bytes < FIL_IBD_FILE_INITIAL_SIZE * UNIV_PAGE_SIZE) {
	        	fprintf(stderr,
"InnoDB: Error: the size of single-table tablespace file %s\n"
@@ -536,6 +536,10 @@ fil_node_open_file(

		ut_free(buf2);
		
		/* Close the file now that we have read the space id from it */

		os_file_close(node->handle);

		if (space_id == ULINT_UNDEFINED || space_id == 0) {
	        	fprintf(stderr,
"InnoDB: Error: tablespace id %lu in file %s is not sensible\n",
@@ -563,6 +567,30 @@ fil_node_open_file(
		space->size += node->size;
	}

	/* printf("Opening file %s\n", node->name); */

	/* Open the file for reading and writing, in Windows normally in the
	unbuffered async I/O mode, though global variables may make
	os_file_create() to fall back to the normal file I/O mode. */

	if (space->purpose == FIL_LOG) {	
		node->handle = os_file_create(node->name, OS_FILE_OPEN,
					OS_FILE_AIO, OS_LOG_FILE, &ret);
	} else if (node->is_raw_disk) {
		node->handle = os_file_create(node->name,
				        OS_FILE_OPEN_RAW,
					OS_FILE_AIO, OS_DATA_FILE, &ret);
	} else {
		node->handle = os_file_create(node->name, OS_FILE_OPEN,
					OS_FILE_AIO, OS_DATA_FILE, &ret);
	}
		
	ut_a(ret);
		
	node->open = TRUE;

	system->n_open++;

	if (space->purpose == FIL_TABLESPACE && space->id != 0) {
		/* Put the node to the LRU list */
		UT_LIST_ADD_FIRST(LRU, system->LRU, node);
@@ -4111,7 +4139,8 @@ fil_flush_file_spaces(
	space = UT_LIST_GET_FIRST(system->space_list);

	while (space) {
		if (space->purpose == purpose) {
		if (space->purpose == purpose && !space->is_being_deleted) {

			space->n_pending_flushes++; /* prevent dropping of the
						    space while we are
						    flushing */
Loading