diff options
author | unknown <Sinisa@sinisa.nasamreza.org> | 2002-05-24 15:26:47 +0300 |
---|---|---|
committer | unknown <Sinisa@sinisa.nasamreza.org> | 2002-05-24 15:26:47 +0300 |
commit | 9dc316b6be3ff685cdc39c3565d3094991f04626 (patch) | |
tree | 6f01bb2857f1d8462bc97e80d700a8fd4ff99b7d | |
parent | ec4cfdbb7f68cb7c08e3ac8395989a3cb829ccec (diff) | |
download | mariadb-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-- | .bzrignore | 2 | ||||
-rw-r--r-- | sql/sql_class.h | 3 | ||||
-rw-r--r-- | sql/sql_insert.cc | 1 | ||||
-rw-r--r-- | sql/sql_union.cc | 9 |
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() |