diff options
-rw-r--r-- | Docs/manual.texi | 7 | ||||
-rw-r--r-- | mysql-test/t/merge.test | 19 | ||||
-rw-r--r-- | sql/ha_myisammrg.cc | 23 | ||||
-rw-r--r-- | sql/mysqld.cc | 4 | ||||
-rw-r--r-- | sql/stacktrace.c | 2 |
5 files changed, 53 insertions, 2 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi index 1e1c080d6b3..f3c790c8fb2 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -51770,6 +51770,8 @@ not yet 100% confident in this code. Allow one to start multiple MySQL servers on windows (code backported from 4.0.2). @item +Fixed that @code{--core-file} works on Linux (at least on kernel 2.4.18). +@item Fixed a problem with BDB and @code{ALTER TABLE}. @item Fixed reference to freed memory when doing complicated @code{GROUP BY @@ -51855,6 +51857,11 @@ Changed initialisation of @code{RND()} to make it less predicatable. Fixed problem with @code{GROUP BY} on result with expression that created a @code{BLOB} field. @item +Fixed problem with @code{GROUP BY} on columns that have NULL values. To +solve this we now create an MyISAM temporary table when doing a group by +on a possible NULL item. In MySQL 4.0.5 we can again use in memory HEAP +tables for this case. +@item Fixed problem with privilege tables when downgrading from 4.0.2 to 3.23. @item Fixed thread bug in @code{SLAVE START}, @code{SLAVE STOP} and automatic repair diff --git a/mysql-test/t/merge.test b/mysql-test/t/merge.test index 86e787db0a3..55a71cc0ab8 100644 --- a/mysql-test/t/merge.test +++ b/mysql-test/t/merge.test @@ -185,3 +185,22 @@ CREATE TABLE t ( a int(11) NOT NULL default '0', b int(11) NOT NULL default '0 select max(b) from t where a = 2; select max(b) from t1 where a = 2; drop table if exists t,t1,t2; + +# +# temporary merge tables +# +drop table if exists t1, t2, t3, t4, t5, t6; +create table t1 (a int not null); +create table t2 (a int not null); +insert into t1 values (1); +insert into t2 values (2); +create temporary table t3 (a int not null) TYPE=MERGE UNION=(t1,t2); +select * from t3; +create temporary table t4 (a int not null); +create temporary table t5 (a int not null); +insert into t4 values (1); +insert into t5 values (2); +create temporary table t6 (a int not null) TYPE=MERGE UNION=(t4,t5); +select * from t6; +drop table if exists t1, t2, t3, t4, t5, t6; + diff --git a/sql/ha_myisammrg.cc b/sql/ha_myisammrg.cc index bba59dd49eb..9db796e5127 100644 --- a/sql/ha_myisammrg.cc +++ b/sql/ha_myisammrg.cc @@ -371,7 +371,28 @@ int ha_myisammrg::create(const char *name, register TABLE *form, sizeof(char*)))) DBUG_RETURN(1); for (pos=table_names ; tables ; tables=tables->next) - *pos++= tables->real_name; + { + char *table_name; + if (create_info->options & HA_LEX_CREATE_TMP_TABLE) + { + TABLE **tbl=find_temporary_table(current_thd, + tables->db, tables->real_name); + if (!tbl) + { + table_name=sql_alloc(1+ + my_snprintf(buff,FN_REFLEN,"%s/%s/%s",mysql_real_data_home, + tables->db, tables->real_name)); + if (!table_name) + DBUG_RETURN(1); + strcpy(table_name, buff); + } + else + table_name=(*tbl)->path; + } + else + table_name=tables->real_name; + *pos++= table_name; + } *pos=0; DBUG_RETURN(myrg_create(fn_format(buff,name,"","",2+4+16), (const char **) table_names, diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 9e0dfe17f1b..d1c92592fca 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -1404,7 +1404,11 @@ information that should help you find out what is causing the crash.\n"); #endif /* HAVE_STACKTRACE */ if (test_flags & TEST_CORE_ON_SIGNAL) + { + fprintf(stderr, "Writing a core file\n"); + fflush(stderr); write_core(sig); + } exit(1); } diff --git a/sql/stacktrace.c b/sql/stacktrace.c index 1aba73dda33..f5c0a59b572 100644 --- a/sql/stacktrace.c +++ b/sql/stacktrace.c @@ -206,7 +206,7 @@ resolve it\n"); /* Produce a core for the thread */ -#ifdef HAVE_LINUXTHREADS +#ifdef NOT_USED /* HAVE_LINUXTHREADS */ void write_core(int sig) { signal(sig, SIG_DFL); |