Commit 16cadbb3 authored by istruewing@chilla.local's avatar istruewing@chilla.local

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

into  chilla.local:/home/mydev/mysql-4.1--main
parents 98339bbe 1d0efa17
...@@ -69,10 +69,14 @@ void embedded_get_error(MYSQL *mysql) ...@@ -69,10 +69,14 @@ void embedded_get_error(MYSQL *mysql)
static void emb_free_rows(THD *thd) static void emb_free_rows(THD *thd)
{ {
if (!thd->data)
return;
if (thd->current_stmt) if (thd->current_stmt)
free_root(&thd->data->alloc,MYF(0)); free_root(&thd->data->alloc,MYF(0));
else else
free_rows(thd->data); free_rows(thd->data);
thd->data= NULL;
} }
...@@ -86,11 +90,8 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, ...@@ -86,11 +90,8 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
THD *thd=(THD *) mysql->thd; THD *thd=(THD *) mysql->thd;
NET *net= &mysql->net; NET *net= &mysql->net;
if (thd->data) emb_free_rows(thd);
{
emb_free_rows(thd);
thd->data= 0;
}
/* Check that we are calling the client functions in right order */ /* Check that we are calling the client functions in right order */
if (mysql->status != MYSQL_STATUS_READY) if (mysql->status != MYSQL_STATUS_READY)
{ {
...@@ -143,13 +144,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command, ...@@ -143,13 +144,7 @@ emb_advanced_command(MYSQL *mysql, enum enum_server_command command,
static void emb_flush_use_result(MYSQL *mysql) static void emb_flush_use_result(MYSQL *mysql)
{ {
MYSQL_DATA *data= ((THD*)(mysql->thd))->data; emb_free_rows((THD*) (mysql->thd));
if (data)
{
free_rows(data);
((THD*)(mysql->thd))->data= NULL;
}
} }
static MYSQL_DATA * static MYSQL_DATA *
...@@ -304,8 +299,7 @@ int emb_unbuffered_fetch(MYSQL *mysql, char **row) ...@@ -304,8 +299,7 @@ int emb_unbuffered_fetch(MYSQL *mysql, char **row)
static void emb_free_embedded_thd(MYSQL *mysql) static void emb_free_embedded_thd(MYSQL *mysql)
{ {
THD *thd= (THD*)mysql->thd; THD *thd= (THD*)mysql->thd;
if (thd->data) emb_free_rows(thd);
emb_free_rows(thd);
thread_count--; thread_count--;
delete thd; delete thd;
mysql->thd=0; mysql->thd=0;
......
...@@ -166,3 +166,6 @@ dt ...@@ -166,3 +166,6 @@ dt
0000-00-00 00:00:00 0000-00-00 00:00:00
0000-00-00 00:00:00 0000-00-00 00:00:00
drop table t1; drop table t1;
select cast('2006-12-05 22:10:10' as datetime) + 0;
cast('2006-12-05 22:10:10' as datetime) + 0
20061205221010.000000
...@@ -113,4 +113,10 @@ insert into t1 values ("00-00-00"), ("00-00-00 00:00:00"); ...@@ -113,4 +113,10 @@ insert into t1 values ("00-00-00"), ("00-00-00 00:00:00");
select * from t1; select * from t1;
drop table t1; drop table t1;
#
# Bug #16546 DATETIME+0 not always coerced the same way
#
select cast('2006-12-05 22:10:10' as datetime) + 0;
# End of 4.1 tests # End of 4.1 tests
...@@ -751,12 +751,19 @@ public: ...@@ -751,12 +751,19 @@ public:
String *val_str(String *str); String *val_str(String *str);
const char *cast_type() const { return "datetime"; } const char *cast_type() const { return "datetime"; }
enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; } enum_field_types field_type() const { return MYSQL_TYPE_DATETIME; }
void fix_length_and_dec()
{
Item_typecast_maybe_null::fix_length_and_dec();
decimals= DATETIME_DEC;
}
Field *tmp_table_field(TABLE *t_arg) Field *tmp_table_field(TABLE *t_arg)
{ {
return (new Field_datetime(maybe_null, name, t_arg, &my_charset_bin)); return (new Field_datetime(maybe_null, name, t_arg, &my_charset_bin));
} }
bool result_as_longlong() { return TRUE; } bool result_as_longlong() { return TRUE; }
longlong val_int(); longlong val_int();
double val() { return (double) val_int(); }
}; };
class Item_func_makedate :public Item_str_func class Item_func_makedate :public Item_str_func
......
...@@ -1048,7 +1048,6 @@ bool select_export::send_data(List<Item> &items) ...@@ -1048,7 +1048,6 @@ bool select_export::send_data(List<Item> &items)
} }
row_count++; row_count++;
Item *item; Item *item;
char *buff_ptr=buff;
uint used_length=0,items_left=items.elements; uint used_length=0,items_left=items.elements;
List_iterator_fast<Item> li(items); List_iterator_fast<Item> li(items);
...@@ -1148,19 +1147,18 @@ bool select_export::send_data(List<Item> &items) ...@@ -1148,19 +1147,18 @@ bool select_export::send_data(List<Item> &items)
goto err; goto err;
} }
} }
buff_ptr=buff; // Place separators here
if (res && (!exchange->opt_enclosed || result_type == STRING_RESULT)) if (res && (!exchange->opt_enclosed || result_type == STRING_RESULT))
{ {
memcpy(buff_ptr,exchange->enclosed->ptr(),exchange->enclosed->length()); if (my_b_write(&cache, (byte*) exchange->enclosed->ptr(),
buff_ptr+=exchange->enclosed->length(); exchange->enclosed->length()))
goto err;
} }
if (--items_left) if (--items_left)
{ {
memcpy(buff_ptr,exchange->field_term->ptr(),field_term_length); if (my_b_write(&cache, (byte*) exchange->field_term->ptr(),
buff_ptr+=field_term_length; field_term_length))
goto err;
} }
if (my_b_write(&cache,(byte*) buff,(uint) (buff_ptr-buff)))
goto err;
} }
if (my_b_write(&cache,(byte*) exchange->line_term->ptr(), if (my_b_write(&cache,(byte*) exchange->line_term->ptr(),
exchange->line_term->length())) exchange->line_term->length()))
......
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