Commit 22af54a9 authored by unknown's avatar unknown
Browse files

Merge bk-internal.mysql.com:/home/bk/mysql-5.0

into  mysql.com:/home/emurphy/src/bk-clean/mysql-5.0

parents dddc50f2 955798d2
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -312,6 +312,15 @@ rec_offs_nth_extern(
	const ulint*	offsets,/* in: array returned by rec_get_offsets() */
	ulint		n);	/* in: nth field */
/**********************************************************
Returns nonzero if the SQL NULL bit is set in nth field of rec. */
UNIV_INLINE
ulint
rec_offs_nth_sql_null(
/*==================*/
				/* out: nonzero if SQL NULL */
	const ulint*	offsets,/* in: array returned by rec_get_offsets() */
	ulint		n);	/* in: nth field */
/**********************************************************
Gets the physical size of a field. */
UNIV_INLINE
ulint
+16 −0
Original line number Diff line number Diff line
@@ -954,6 +954,22 @@ rec_offs_nth_extern(
				& REC_OFFS_EXTERNAL));
}

/**********************************************************
Returns nonzero if the SQL NULL bit is set in nth field of rec. */
UNIV_INLINE
ulint
rec_offs_nth_sql_null(
/*==================*/
				/* out: nonzero if SQL NULL */
	const ulint*	offsets,/* in: array returned by rec_get_offsets() */
	ulint		n)	/* in: nth field */
{
	ut_ad(rec_offs_validate(NULL, NULL, offsets));
	ut_ad(n < rec_offs_n_fields(offsets));
	return(UNIV_UNLIKELY(rec_offs_base(offsets)[1 + n]
				& REC_OFFS_SQL_NULL));
}

/**********************************************************
Gets the physical size of a field. */
UNIV_INLINE
+12 −0
Original line number Diff line number Diff line
@@ -395,6 +395,18 @@ row_upd_changes_field_size_or_external(

		old_len = rec_offs_nth_size(offsets, upd_field->field_no);

		if (rec_offs_comp(offsets)
		    && rec_offs_nth_sql_null(offsets, upd_field->field_no)) {
			/* Note that in the compact table format, for a
			variable length field, an SQL NULL will use zero
			bytes in the offset array at the start of the physical
			record, but a zero-length value (empty string) will
			use one byte! Thus, we cannot use update-in-place
			if we update an SQL NULL varchar to an empty string! */

			old_len = UNIV_SQL_NULL;
		}

		if (old_len != new_len) {

			return(TRUE);