Commit 129a48b0 authored by unknown's avatar unknown
Browse files

Increased heap max length to > 4G for 64 bit machines

Initialize key_part->type on open. This caused key_copy() to fail for bit_fields. (key_copy is used in HANDLER and opt_range)


include/heap.h:
  Increased heap max length to > 4G for 64 bit machines
mysql-test/r/show_check.result:
  Updated results after heap size change
mysql-test/r/type_bit.result:
  Added test for bug in bit field handling (in handler and opt_range.cc)
mysql-test/t/type_bit.test:
  Added test for bug in bit field handling (in handler and opt_range.cc)
sql/ha_heap.cc:
  Increased heap max length to > 4G for 64 bit machines
sql/item_sum.cc:
  Increased heap max length to > 4G for 64 bit machines
sql/mysqld.cc:
  Increased heap max length to > 4G for 64 bit machines
sql/set_var.cc:
  Increased heap max length to > 4G for 64 bit machines
sql/sql_class.h:
  Increased heap max length to > 4G for 64 bit machines
sql/sql_select.cc:
  Increased heap max length to > 4G for 64 bit machines
sql/table.cc:
  Initialize key_part->type ; This was used for bit fields but only set in temporary tables
sql/uniques.cc:
  Increased heap max length to > 4G for 64 bit machines
parent 52fc261b
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -46,8 +46,8 @@ typedef struct st_heapinfo /* Struct from heap_info */
  ulong records;			/* Records in database */
  ulong deleted;			/* Deleted records in database */
  ulong max_records;
  ulong data_length;
  ulong index_length;
  ulonglong data_length;
  ulonglong index_length;
  uint reclength;			/* Length of one record */
  int errkey;
  ulonglong auto_increment;
@@ -135,7 +135,7 @@ typedef struct st_heap_share
  HP_BLOCK block;
  HP_KEYDEF  *keydef;
  ulong min_records,max_records;	/* Params to open */
  ulong data_length,index_length,max_table_size;
  ulonglong data_length,index_length,max_table_size;
  uint key_stat_version;                /* version to indicate insert/delete */
  uint records;				/* records */
  uint blength;				/* records rounded up to 2^n */
@@ -187,7 +187,7 @@ typedef struct st_heap_create_info
{
  uint auto_key;                        /* keynr [1 - maxkey] for auto key */
  uint auto_key_type;
  ulong max_table_size;
  ulonglong max_table_size;
  ulonglong auto_increment;
  my_bool with_auto_increment;
} HP_CREATE_INFO;
+1 −1
Original line number Diff line number Diff line
@@ -296,7 +296,7 @@ SET sql_quote_show_create= @old_sql_quote_show_create;
SET sql_mode= @old_sql_mode;
select @@max_heap_table_size;
@@max_heap_table_size
1047552
1048576
CREATE TABLE t1 (
a int(11) default NULL,
KEY a USING BTREE (a)
+8 −0
Original line number Diff line number Diff line
@@ -610,4 +610,12 @@ select hex(a), b from t1;
hex(a)	b
1	2
drop table t1;
create table t1(bit_field bit(2), int_field int, key a(bit_field));
insert into t1 values (1,2);
handler t1 open as t1;
handler t1 read a=(1);
bit_field	int_field
	2
handler t1 close;
drop table t1;
End of 5.0 tests
+11 −0
Original line number Diff line number Diff line
@@ -261,4 +261,15 @@ insert into t1 (b, a) values ('2', '1');
select hex(a), b from t1;
drop table t1;

#
# type was not properly initalized, which caused key_copy to fail
#

create table t1(bit_field bit(2), int_field int, key a(bit_field));
insert into t1 values (1,2);
handler t1 open as t1;
handler t1 read a=(1);
handler t1 close;
drop table t1;

--echo End of 5.0 tests
+1 −1
Original line number Diff line number Diff line
@@ -631,7 +631,7 @@ int ha_heap::create(const char *name, TABLE *table_arg,
  }
  mem_per_row+= MY_ALIGN(share->reclength + 1, sizeof(char*));
  max_rows = (ha_rows) (table->in_use->variables.max_heap_table_size /
			mem_per_row);
			(ulonglong) mem_per_row);
  if (table_arg->found_next_number_field)
  {
    keydef[share->next_number_index].flag|= HA_AUTO_KEY;
Loading