Commit c055edc6 authored by unknown's avatar unknown
Browse files

Fix value returned from SELECT of unsigned long system

variables. (Bug #10351)


mysql-test/r/variables.result:
  Update results
mysql-test/t/variables.test:
  Add regression test
sql/item.h:
  Add Item_uint(ulong) constructor
sql/mysqld.cc:
  Fix default/max max_seeks_for_key to UINT_MAX32
sql/set_var.cc:
  Use correct Item_uint() constructors in sys_var::item()
parent 9a0d9c35
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -525,3 +525,15 @@ set @@warning_count=1;
ERROR HY000: Variable 'warning_count' is a read only variable
set @@global.error_count=1;
ERROR HY000: Variable 'error_count' is a read only variable
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
@@max_heap_table_size
4294967296
set global max_heap_table_size= 4294967296;
select @@max_heap_table_size;
@@max_heap_table_size
4294967296
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
@@max_heap_table_size
4294967296
+10 −0
Original line number Diff line number Diff line
@@ -406,3 +406,13 @@ drop table t1;
set @@warning_count=1;
--error 1238
set @@global.error_count=1;

#
# Bug #10351: Setting max_heap_table_size to 4G fails
#
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
set global max_heap_table_size= 4294967296;
select @@max_heap_table_size;
set @@max_heap_table_size= 4294967296;
select @@max_heap_table_size;
+1 −0
Original line number Diff line number Diff line
@@ -1142,6 +1142,7 @@ class Item_uint :public Item_int
public:
  Item_uint(const char *str_arg, uint length);
  Item_uint(uint32 i) :Item_int((ulonglong) i, 10) {}
  Item_uint(ulong i) :Item_int((ulonglong) i, 10) {}
  Item_uint(const char *str_arg, longlong i, uint length);
  double val_real()
    { DBUG_ASSERT(fixed == 1); return ulonglong2double((ulonglong)value); }
+1 −1
Original line number Diff line number Diff line
@@ -5371,7 +5371,7 @@ The minimum value for this variable is 4096.",
    "Limit assumed max number of seeks when looking up rows based on a key",
    (gptr*) &global_system_variables.max_seeks_for_key,
    (gptr*) &max_system_variables.max_seeks_for_key, 0, GET_ULONG,
    REQUIRED_ARG, ~0L, 1, ~0L, 0, 1, 0 },
    REQUIRED_ARG, UINT_MAX32, 1, UINT_MAX32, 0, 1, 0 },
  {"max_sort_length", OPT_MAX_SORT_LENGTH,
   "The number of bytes to use when sorting BLOB or TEXT values (only the first max_sort_length bytes of each value are used; the rest are ignored).",
   (gptr*) &global_system_variables.max_sort_length,
+2 −2
Original line number Diff line number Diff line
@@ -1679,7 +1679,7 @@ Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
    pthread_mutex_lock(&LOCK_global_system_variables);
    value= *(uint*) value_ptr(thd, var_type, base);
    pthread_mutex_unlock(&LOCK_global_system_variables);
    return new Item_uint((int32) value);
    return new Item_uint((uint32) value);
  }
  case SHOW_LONG:
  {
@@ -1687,7 +1687,7 @@ Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
    pthread_mutex_lock(&LOCK_global_system_variables);
    value= *(ulong*) value_ptr(thd, var_type, base);
    pthread_mutex_unlock(&LOCK_global_system_variables);
    return new Item_uint((int32) value);
    return new Item_uint(value);
  }
  case SHOW_LONGLONG:
  {