summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Docs/manual.texi7
-rw-r--r--mysql-test/t/merge.test19
-rw-r--r--sql/ha_myisammrg.cc23
-rw-r--r--sql/mysqld.cc4
-rw-r--r--sql/stacktrace.c2
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);