Commit ba950815 authored by unknown's avatar unknown
Browse files

sql_table.cc, table.cc, table.h:

  fixed CHECKSUM TABLE to be independent from last - undefined in InnoDB - bits in the null bitmask
  bug#13710


sql/table.h:
  fixed CHECKSUM TABLE to be independent from last - undefined in InnoDB - bits in the null bitmask
  bug#13710
sql/table.cc:
  fixed CHECKSUM TABLE to be independent from last - undefined in InnoDB - bits in the null bitmask
  bug#13710
sql/sql_table.cc:
  fixed CHECKSUM TABLE to be independent from last - undefined in InnoDB - bits in the null bitmask
  bug#13710
parent aa44e79c
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -4100,6 +4100,7 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables, HA_CHECK_OPT *check_opt)
      {
	/* calculating table's checksum */
	ha_checksum crc= 0;
        uchar null_mask=256 -  (1 << t->s->last_null_bit_pos);

	/* InnoDB must be told explicitly to retrieve all columns, because
	this function does not set field->query_id in the columns to the
@@ -4120,9 +4121,12 @@ bool mysql_checksum_table(THD *thd, TABLE_LIST *tables, HA_CHECK_OPT *check_opt)
                continue;
              break;
            }
	    if (t->record[0] != (byte*) t->field[0]->ptr)
	      row_crc= my_checksum(row_crc, t->record[0],
				   ((byte*) t->field[0]->ptr) - t->record[0]);
	    if (t->s->null_bytes)
            {
              /* fix undefined null bits */
              t->record[0][t->s->null_bytes-1] |= null_mask;
	      row_crc= my_checksum(row_crc, t->record[0], t->s->null_bytes);
            }

	    for (uint i= 0; i < t->s->fields; i++ )
	    {
+1 −0
Original line number Diff line number Diff line
@@ -874,6 +874,7 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,

  /* the correct null_bytes can now be set, since bitfields have been taken into account */
  share->null_bytes= null_pos - (uchar*) outparam->null_flags + (null_bit_pos + 7) / 8;
  share->last_null_bit_pos= null_bit_pos;

  /* The table struct is now initialized;  Open the table */
  error=2;
+1 −1
Original line number Diff line number Diff line
@@ -141,7 +141,7 @@ typedef struct st_table_share
  enum tmp_table_type tmp_table;

  uint blob_ptr_size;			/* 4 or 8 */
  uint null_bytes;
  uint null_bytes, last_null_bit_pos;
  uint key_length;			/* Length of table_cache_key */
  uint fields;				/* Number of fields */
  uint rec_buff_length;                 /* Size of table->record[] buffer */