Commit e4b2a04e authored by unknown's avatar unknown

Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-4.1

into mysql.com:/home/mysql_src/mysql-4.1-clean

parents 8d5cfa77 16f3170e
...@@ -264,7 +264,8 @@ if ($opt_stage <= 1) ...@@ -264,7 +264,8 @@ if ($opt_stage <= 1)
$opt_config_options.= " --with-berkeley-db" if ($opt_bdb); $opt_config_options.= " --with-berkeley-db" if ($opt_bdb);
$opt_config_options.= " --with-zlib-dir=bundled" if ($opt_bundled_zlib); $opt_config_options.= " --with-zlib-dir=bundled" if ($opt_bundled_zlib);
$opt_config_options.= " --with-client-ldflags=-all-static" if ($opt_static_client); $opt_config_options.= " --with-client-ldflags=-all-static" if ($opt_static_client);
$opt_config_options.= " --with-debug" if ($opt_with_debug); $opt_config_options.= " --with-debug" if ($opt_with_debug);
$opt_config_options.= " --without-ndb-debug" if ($opt_with_debug && $opt_with_cluster);
$opt_config_options.= " --with-libwrap" if ($opt_libwrap); $opt_config_options.= " --with-libwrap" if ($opt_libwrap);
$opt_config_options.= " --with-low-memory" if ($opt_with_low_memory); $opt_config_options.= " --with-low-memory" if ($opt_with_low_memory);
$opt_config_options.= " --with-mysqld-ldflags=-all-static" if ($opt_static_server); $opt_config_options.= " --with-mysqld-ldflags=-all-static" if ($opt_static_server);
......
...@@ -16,7 +16,7 @@ SHARED_LIB_VERSION=14:0:0 ...@@ -16,7 +16,7 @@ SHARED_LIB_VERSION=14:0:0
# ndb version # ndb version
NDB_VERSION_MAJOR=4 NDB_VERSION_MAJOR=4
NDB_VERSION_MINOR=1 NDB_VERSION_MINOR=1
NDB_VERSION_BUILD=9 NDB_VERSION_BUILD=10
NDB_VERSION_STATUS="" NDB_VERSION_STATUS=""
# Set all version vars based on $VERSION. How do we do this more elegant ? # Set all version vars based on $VERSION. How do we do this more elegant ?
......
...@@ -123,15 +123,15 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef, ...@@ -123,15 +123,15 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef,
keyseg->flag= 0; keyseg->flag= 0;
keyseg->null_bit= 0; keyseg->null_bit= 0;
keyseg++; keyseg++;
init_tree(&keyinfo->rb_tree, 0, 0, sizeof(byte*), init_tree(&keyinfo->rb_tree, 0, 0, sizeof(byte*),
(qsort_cmp2)keys_compare, 1, NULL, NULL); (qsort_cmp2)keys_compare, 1, NULL, NULL);
keyinfo->delete_key= hp_rb_delete_key; keyinfo->delete_key= hp_rb_delete_key;
keyinfo->write_key= hp_rb_write_key; keyinfo->write_key= hp_rb_write_key;
} }
else else
{ {
init_block(&keyinfo->block, sizeof(HASH_INFO), min_records, init_block(&keyinfo->block, sizeof(HASH_INFO), min_records,
max_records); max_records);
keyinfo->delete_key= hp_delete_key; keyinfo->delete_key= hp_delete_key;
keyinfo->write_key= hp_write_key; keyinfo->write_key= hp_write_key;
...@@ -140,6 +140,7 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef, ...@@ -140,6 +140,7 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef,
} }
share->min_records= min_records; share->min_records= min_records;
share->max_records= max_records; share->max_records= max_records;
share->max_table_size= create_info->max_table_size;
share->data_length= share->index_length= 0; share->data_length= share->index_length= 0;
share->reclength= reclength; share->reclength= reclength;
share->blength= 1; share->blength= 1;
......
...@@ -143,7 +143,8 @@ static byte *next_free_record_pos(HP_SHARE *info) ...@@ -143,7 +143,8 @@ static byte *next_free_record_pos(HP_SHARE *info)
} }
if (!(block_pos=(info->records % info->block.records_in_block))) if (!(block_pos=(info->records % info->block.records_in_block)))
{ {
if (info->records > info->max_records && info->max_records) if ((info->records > info->max_records && info->max_records) ||
(info->data_length + info->index_length >= info->max_table_size))
{ {
my_errno=HA_ERR_RECORD_FILE_FULL; my_errno=HA_ERR_RECORD_FILE_FULL;
DBUG_RETURN(NULL); DBUG_RETURN(NULL);
......
...@@ -125,8 +125,8 @@ typedef struct st_hp_keydef /* Key definition with open */ ...@@ -125,8 +125,8 @@ typedef struct st_hp_keydef /* Key definition with open */
TREE rb_tree; TREE rb_tree;
int (*write_key)(struct st_heap_info *info, struct st_hp_keydef *keyinfo, int (*write_key)(struct st_heap_info *info, struct st_hp_keydef *keyinfo,
const byte *record, byte *recpos); const byte *record, byte *recpos);
int (*delete_key)(struct st_heap_info *info, struct st_hp_keydef *keyinfo, int (*delete_key)(struct st_heap_info *info, struct st_hp_keydef *keyinfo,
const byte *record, byte *recpos, int flag); const byte *record, byte *recpos, int flag);
uint (*get_key_length)(struct st_hp_keydef *keydef, const byte *key); uint (*get_key_length)(struct st_hp_keydef *keydef, const byte *key);
} HP_KEYDEF; } HP_KEYDEF;
...@@ -135,7 +135,7 @@ typedef struct st_heap_share ...@@ -135,7 +135,7 @@ typedef struct st_heap_share
HP_BLOCK block; HP_BLOCK block;
HP_KEYDEF *keydef; HP_KEYDEF *keydef;
ulong min_records,max_records; /* Params to open */ ulong min_records,max_records; /* Params to open */
ulong data_length,index_length; ulong data_length,index_length,max_table_size;
uint records; /* records */ uint records; /* records */
uint blength; /* records rounded up to 2^n */ uint blength; /* records rounded up to 2^n */
uint deleted; /* Deleted records in database */ uint deleted; /* Deleted records in database */
...@@ -185,6 +185,7 @@ typedef struct st_heap_create_info ...@@ -185,6 +185,7 @@ typedef struct st_heap_create_info
{ {
uint auto_key; uint auto_key;
uint auto_key_type; uint auto_key_type;
ulong max_table_size;
ulonglong auto_increment; ulonglong auto_increment;
} HP_CREATE_INFO; } HP_CREATE_INFO;
......
...@@ -457,3 +457,8 @@ group_concat(distinct b order by b) ...@@ -457,3 +457,8 @@ group_concat(distinct b order by b)
Warnings: Warnings:
Warning 1260 2 line(s) were cut by GROUP_CONCAT() Warning 1260 2 line(s) were cut by GROUP_CONCAT()
drop table t1; drop table t1;
CREATE TABLE t1 (id int);
SELECT GROUP_CONCAT(id) AS gc FROM t1 HAVING gc IS NULL;
gc
NULL
DROP TABLE t1;
...@@ -277,3 +277,10 @@ select group_concat(b order by b) from t1 group by a; ...@@ -277,3 +277,10 @@ select group_concat(b order by b) from t1 group by a;
select group_concat(distinct b order by b) from t1 group by a; select group_concat(distinct b order by b) from t1 group by a;
drop table t1; drop table t1;
#
# bug #7769: group_concat returning null is checked in having
#
CREATE TABLE t1 (id int);
SELECT GROUP_CONCAT(id) AS gc FROM t1 HAVING gc IS NULL;
DROP TABLE t1;
...@@ -90,6 +90,7 @@ void ndbSetOwnVersion() {} ...@@ -90,6 +90,7 @@ void ndbSetOwnVersion() {}
#ifndef TEST_VERSION #ifndef TEST_VERSION
struct NdbUpGradeCompatible ndbCompatibleTable_full[] = { struct NdbUpGradeCompatible ndbCompatibleTable_full[] = {
{ MAKE_VERSION(4,1,10), MAKE_VERSION(4,1,9), UG_Exact },
{ MAKE_VERSION(4,1,9), MAKE_VERSION(4,1,8), UG_Exact }, { MAKE_VERSION(4,1,9), MAKE_VERSION(4,1,8), UG_Exact },
{ MAKE_VERSION(3,5,2), MAKE_VERSION(3,5,1), UG_Exact }, { MAKE_VERSION(3,5,2), MAKE_VERSION(3,5,1), UG_Exact },
{ 0, 0, UG_Null } { 0, 0, UG_Null }
......
...@@ -98,9 +98,9 @@ else ...@@ -98,9 +98,9 @@ else
if test -x "$basedir/libexec/mysqld" if test -x "$basedir/libexec/mysqld"
then then
execdir="$basedir/libexec" execdir="$basedir/libexec"
elif test -x "@libexecdir@/mysqld" elif test -x "$basedir/sbin/mysqld"
then then
execdir="@libexecdir@" execdir="$basedir/sbin"
else else
execdir="$basedir/bin" execdir="$basedir/bin"
fi fi
......
...@@ -460,12 +460,24 @@ int ha_heap::create(const char *name, TABLE *table_arg, ...@@ -460,12 +460,24 @@ int ha_heap::create(const char *name, TABLE *table_arg,
KEY_PART_INFO *key_part= pos->key_part; KEY_PART_INFO *key_part= pos->key_part;
KEY_PART_INFO *key_part_end= key_part + pos->key_parts; KEY_PART_INFO *key_part_end= key_part + pos->key_parts;
mem_per_row+= (pos->key_length + (sizeof(char*) * 2));
keydef[key].keysegs= (uint) pos->key_parts; keydef[key].keysegs= (uint) pos->key_parts;
keydef[key].flag= (pos->flags & (HA_NOSAME | HA_NULL_ARE_EQUAL)); keydef[key].flag= (pos->flags & (HA_NOSAME | HA_NULL_ARE_EQUAL));
keydef[key].seg= seg; keydef[key].seg= seg;
keydef[key].algorithm= ((pos->algorithm == HA_KEY_ALG_UNDEF) ?
switch (pos->algorithm) {
case HA_KEY_ALG_UNDEF:
case HA_KEY_ALG_HASH:
keydef[key].algorithm= HA_KEY_ALG_HASH;
mem_per_row+= sizeof(char*) * 2; // = sizeof(HASH_INFO)
break;
case HA_KEY_ALG_BTREE:
keydef[key].algorithm= HA_KEY_ALG_BTREE;
mem_per_row+=sizeof(TREE_ELEMENT)+pos->key_length+sizeof(char*);
break;
default:
DBUG_ASSERT(0); // cannot happen
}
keydef[key].algorithm= ((pos->algorithm == HA_KEY_ALG_UNDEF) ?
HA_KEY_ALG_HASH : pos->algorithm); HA_KEY_ALG_HASH : pos->algorithm);
for (; key_part != key_part_end; key_part++, seg++) for (; key_part != key_part_end; key_part++, seg++)
...@@ -501,17 +513,17 @@ int ha_heap::create(const char *name, TABLE *table_arg, ...@@ -501,17 +513,17 @@ int ha_heap::create(const char *name, TABLE *table_arg,
} }
} }
mem_per_row+= MY_ALIGN(table_arg->reclength + 1, sizeof(char*)); mem_per_row+= MY_ALIGN(table_arg->reclength + 1, sizeof(char*));
max_rows = (ha_rows) (current_thd->variables.max_heap_table_size /
mem_per_row);
HP_CREATE_INFO hp_create_info; HP_CREATE_INFO hp_create_info;
hp_create_info.auto_key= auto_key; hp_create_info.auto_key= auto_key;
hp_create_info.auto_key_type= auto_key_type; hp_create_info.auto_key_type= auto_key_type;
hp_create_info.auto_increment= (create_info->auto_increment_value ? hp_create_info.auto_increment= (create_info->auto_increment_value ?
create_info->auto_increment_value - 1 : 0); create_info->auto_increment_value - 1 : 0);
hp_create_info.max_table_size=current_thd->variables.max_heap_table_size;
max_rows = (ha_rows) (hp_create_info.max_table_size / mem_per_row);
error= heap_create(fn_format(buff,name,"","",4+2), error= heap_create(fn_format(buff,name,"","",4+2),
table_arg->keys,keydef, table_arg->reclength, table_arg->keys,keydef, table_arg->reclength,
(ulong) ((table_arg->max_rows < max_rows && (ulong) ((table_arg->max_rows < max_rows &&
table_arg->max_rows) ? table_arg->max_rows) ?
table_arg->max_rows : max_rows), table_arg->max_rows : max_rows),
(ulong) table_arg->min_rows, &hp_create_info); (ulong) table_arg->min_rows, &hp_create_info);
my_free((gptr) keydef, MYF(0)); my_free((gptr) keydef, MYF(0));
......
...@@ -739,9 +739,10 @@ class Item_func_group_concat : public Item_sum ...@@ -739,9 +739,10 @@ class Item_func_group_concat : public Item_sum
String *res; String *res;
char *end_ptr; char *end_ptr;
int error; int error;
res= val_str(&str_value); if (!(res= val_str(&str_value)))
return (longlong) 0;
end_ptr= (char*) res->ptr()+ res->length(); end_ptr= (char*) res->ptr()+ res->length();
return res ? my_strtoll10(res->ptr(), &end_ptr, &error) : (longlong) 0; return my_strtoll10(res->ptr(), &end_ptr, &error);
} }
String* val_str(String* str); String* val_str(String* str);
Item *copy_or_same(THD* thd); Item *copy_or_same(THD* thd);
......
...@@ -27,7 +27,7 @@ Packager: Lenz Grimmer <build@mysql.com> ...@@ -27,7 +27,7 @@ Packager: Lenz Grimmer <build@mysql.com>
Vendor: MySQL AB Vendor: MySQL AB
Requires: fileutils sh-utils Requires: fileutils sh-utils
Provides: msqlormysql MySQL-server mysql Provides: msqlormysql MySQL-server mysql
BuildPrereq: ncurses-devel BuildRequires: ncurses-devel
Obsoletes: mysql Obsoletes: mysql
# Think about what you use here since the first step is to # Think about what you use here since the first step is to
...@@ -607,6 +607,10 @@ fi ...@@ -607,6 +607,10 @@ fi
# itself - note that they must be ordered by date (important when # itself - note that they must be ordered by date (important when
# merging BK trees) # merging BK trees)
%changelog %changelog
* Fri Jan 14 2005 Lenz Grimmer <lenz@mysql.com>
- replaced obsoleted "BuildPrereq" with "BuildRequires" instead
* Thu Dec 31 2004 Lenz Grimmer <lenz@mysql.com> * Thu Dec 31 2004 Lenz Grimmer <lenz@mysql.com>
- enabled the "Archive" storage engine for the max binary - enabled the "Archive" storage engine for the max binary
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment