summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <Sinisa@sinisa.nasamreza.org>2002-05-24 15:26:47 +0300
committerunknown <Sinisa@sinisa.nasamreza.org>2002-05-24 15:26:47 +0300
commit9dc316b6be3ff685cdc39c3565d3094991f04626 (patch)
tree6f01bb2857f1d8462bc97e80d700a8fd4ff99b7d
parentec4cfdbb7f68cb7c08e3ac8395989a3cb829ccec (diff)
downloadmariadb-git-9dc316b6be3ff685cdc39c3565d3094991f04626.tar.gz
Fixed a bug with big result sets and UNION's
BitKeeper/etc/ignore: Added mysys/getopt.c mysys/getopt1.c to the ignore list
-rw-r--r--.bzrignore2
-rw-r--r--sql/sql_class.h3
-rw-r--r--sql/sql_insert.cc1
-rw-r--r--sql/sql_union.cc9
4 files changed, 12 insertions, 3 deletions
diff --git a/.bzrignore b/.bzrignore
index f8d6f981323..802917f2e98 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -469,3 +469,5 @@ vio/test-ssl
vio/test-sslclient
vio/test-sslserver
vio/viotest-ssl
+mysys/getopt.c
+mysys/getopt1.c
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 31da5c53bf8..fe6a7e2ed69 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -182,7 +182,7 @@ typedef struct st_copy_info {
ha_rows copied;
ha_rows error;
enum enum_duplicates handle_duplicates;
- int escape_char;
+ int escape_char, errorno;
} COPY_INFO;
@@ -666,6 +666,7 @@ class select_union :public select_result {
TABLE *table;
COPY_INFO info;
uint save_time_stamp;
+ TMP_TABLE_PARAM *tmp_table_param;
select_union(TABLE *table_par);
~select_union();
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index a8b80a3c435..1e00bb3f8c2 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -447,6 +447,7 @@ int write_record(TABLE *table,COPY_INFO *info)
err:
if (key)
my_afree(key);
+ info->errorno= error;
table->file->print_error(error,MYF(0));
return 1;
}
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index c8237f3ae9b..7f00ddad99f 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -132,7 +132,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
goto exit;
}
union_result->save_time_stamp=!describe;
-
+ union_result->tmp_table_param=&tmp_table_param;
for (sl= &lex->select_lex; sl; sl=sl->next)
{
lex->select=sl;
@@ -253,7 +253,12 @@ bool select_union::send_data(List<Item> &values)
return 0;
}
fill_record(table->field,values);
- return write_record(table,&info) ? 1 : 0;
+ if ((write_record(table,&info)))
+ {
+ if (create_myisam_from_heap(table, tmp_table_param, info.errorno, 0))
+ return 1;
+ }
+ return 0;
}
bool select_union::send_eof()