Commit 1ec54154 authored by unknown's avatar unknown
Browse files

Merge bk-internal:/home/bk/mysql-5.0-maint

into  shellback.(none):/home/msvensson/mysql/mysql-5.0-maint

parents e8354a19 dc462669
Loading
Loading
Loading
Loading
+10 −9
Original line number Diff line number Diff line
@@ -1361,8 +1361,8 @@ ibuf_entry_build(
				index tree; NOTE that the original entry
				must be kept because we copy pointers to its
				fields */
	dict_index_t*	index,	/* in: non-clustered index */
	dtuple_t*	entry,	/* in: entry for a non-clustered index */
	ibool		comp,	/* in: flag: TRUE=compact record format */
	ulint		space,	/* in: space id */
	ulint		page_no,/* in: index page number where entry should
				be inserted */
@@ -1426,13 +1426,13 @@ ibuf_entry_build(

	dfield_set_data(field, buf, 4);

	ut_ad(comp == 0 || comp == 1);
	ut_ad(index->table->comp <= 1);
	/* Store the type info in buf2, and add the fields from entry to
	tuple */
	buf2 = mem_heap_alloc(heap, n_fields
					* DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
					+ comp);
	if (comp) {
					+ index->table->comp);
	if (index->table->comp) {
		*buf2++ = 0; /* write the compact format indicator */
	}
	for (i = 0; i < n_fields; i++) {
@@ -1445,20 +1445,22 @@ ibuf_entry_build(

		dtype_new_store_for_order_and_null_size(
				buf2 + i * DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE,
				dfield_get_type(entry_field));
				dfield_get_type(entry_field),
				dict_index_get_nth_field(index, i)
				->prefix_len);
	}

	/* Store the type info in buf2 to field 3 of tuple */

	field = dtuple_get_nth_field(tuple, 3);

	if (comp) {
	if (index->table->comp) {
		buf2--;
	}

	dfield_set_data(field, buf2, n_fields
					* DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
					+ comp);
					+ index->table->comp);
	/* Set all the types in the new tuple binary */

	dtuple_set_types_binary(tuple, n_fields + 4);
@@ -2589,8 +2591,7 @@ ibuf_insert_low(
	the first fields and the type information for other fields, and which
	will be inserted to the insert buffer. */

	ibuf_entry = ibuf_entry_build(entry, index->table->comp,
						space, page_no, heap);
	ibuf_entry = ibuf_entry_build(index, entry, space, page_no, heap);

	/* Open a cursor to the insert buffer tree to calculate if we can add
	the new entry to it without exceeding the free space limit for the
+3 −1
Original line number Diff line number Diff line
@@ -366,7 +366,9 @@ dtype_new_store_for_order_and_null_size(
	byte*		buf,	/* in: buffer for
				DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
				bytes where we store the info */
	dtype_t*	type);	/* in: type struct */
	dtype_t*	type,	/* in: type struct */
	ulint		prefix_len);/* in: prefix length to
				replace type->len, or 0 */
/**************************************************************************
Reads to a type the stored information which determines its alphabetical
ordering and the storage size of an SQL NULL value. This is the 4.1.x storage
+7 −2
Original line number Diff line number Diff line
@@ -230,11 +230,14 @@ dtype_new_store_for_order_and_null_size(
	byte*		buf,	/* in: buffer for
				DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
				bytes where we store the info */
	dtype_t*	type)	/* in: type struct */
	dtype_t*	type,	/* in: type struct */
	ulint		prefix_len)/* in: prefix length to
				replace type->len, or 0 */
{
#if 6 != DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE
#error "6 != DATA_NEW_ORDER_NULL_TYPE_BUF_SIZE"
#endif
	ulint	len;

	buf[0] = (byte)(type->mtype & 0xFFUL);

@@ -249,7 +252,9 @@ dtype_new_store_for_order_and_null_size(

	buf[1] = (byte)(type->prtype & 0xFFUL);

	mach_write_to_2(buf + 2, type->len & 0xFFFFUL);
	len = prefix_len ? prefix_len : type->len;

	mach_write_to_2(buf + 2, len & 0xFFFFUL);

	ut_ad(dtype_get_charset_coll(type->prtype) < 256);
	mach_write_to_2(buf + 4, dtype_get_charset_coll(type->prtype));
+15 −0
Original line number Diff line number Diff line
@@ -224,6 +224,21 @@ int mi_lock_database(MI_INFO *info, int lock_type)
      break;				/* Impossible */
    }
  }
#ifdef __WIN__
  else
  {
    /*
       Check for bad file descriptors if this table is part
       of a merge union. Failing to capture this may cause
       a crash on windows if the table is renamed and 
       later on referenced by the merge table.
     */
    if( info->owned_by_merge && (info->s)->kfile < 0 )
    {
      error = HA_ERR_NO_SUCH_TABLE;
    }
  }
#endif
  pthread_mutex_unlock(&share->intern_lock);
#if defined(FULL_LOG) || defined(_lint)
  lock_type|=(int) (flag << 8);		/* Set bit to set if real lock */
+3 −0
Original line number Diff line number Diff line
@@ -278,6 +278,9 @@ struct st_myisam_info {
  my_bool page_changed;		/* If info->buff can't be used for rnext */
  my_bool buff_used;		/* If info->buff has to be reread for rnext */
  my_bool once_flags;           /* For MYISAMMRG */
#ifdef __WIN__
  my_bool owned_by_merge;                       /* This MyISAM table is part of a merge union */
#endif
#ifdef THREAD
  THR_LOCK_DATA lock;
#endif
Loading