diff options
author | unknown <hf@deer.(none)> | 2004-05-17 18:45:50 +0500 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2004-05-17 18:45:50 +0500 |
commit | 84cf2d8f7889a7c13f3c3010745b99cd0f16177f (patch) | |
tree | 30a151ad3b5d208e84f3d65f63812a2cf4d9995a | |
parent | 93168d599dfd311f27e508338443a10ece38e16a (diff) | |
parent | 05cd698f542f295b4fcd28d4704bce0f37e534ca (diff) | |
download | mariadb-git-84cf2d8f7889a7c13f3c3010745b99cd0f16177f.tar.gz |
Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-4.1
into deer.(none):/home/hf/work/mysql-4.1.ps
sql/sql_parse.cc:
Auto merged
tests/client_test.c:
Auto merged
-rw-r--r-- | libmysql/libmysql.c | 54 | ||||
-rw-r--r-- | libmysqld/lib_sql.cc | 7 | ||||
-rw-r--r-- | sql/sql_parse.cc | 2 | ||||
-rw-r--r-- | sql/sql_prepare.cc | 58 | ||||
-rw-r--r-- | tests/client_test.c | 3 |
5 files changed, 97 insertions, 27 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index a467b7fc9fd..2214ca68c81 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -3729,28 +3729,6 @@ int cli_read_binary_rows(MYSQL_STMT *stmt) mysql= mysql->last_used_con; - if (stmt->update_max_length && !stmt->bind_result_done) - { - /* - We must initalize the bind structure to be able to calculate - max_length - */ - MYSQL_BIND *bind, *end; - MYSQL_FIELD *field; - bzero((char*) stmt->bind, sizeof(*stmt->bind)* stmt->field_count); - - for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields; - bind < end ; - bind++, field++) - { - bind->buffer_type= field->type; - bind->buffer_length=1; - } - - mysql_stmt_bind_result(stmt, stmt->bind); - stmt->bind_result_done= 0; /* No normal bind done */ - } - while ((pkt_len= net_safe_read(mysql)) != packet_error) { cp= net->read_pos; @@ -3768,8 +3746,6 @@ int cli_read_binary_rows(MYSQL_STMT *stmt) memcpy((char *) cur->data, (char *) cp+1, pkt_len-1); cur->length= pkt_len; /* To allow us to do sanity checks */ result->rows++; - if (stmt->update_max_length) - stmt_update_metadata(stmt, cur); } else { @@ -3814,6 +3790,29 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt) result->rows= 0; stmt->data_cursor= NULL; } + + if (stmt->update_max_length && !stmt->bind_result_done) + { + /* + We must initalize the bind structure to be able to calculate + max_length + */ + MYSQL_BIND *bind, *end; + MYSQL_FIELD *field; + bzero((char*) stmt->bind, sizeof(*stmt->bind)* stmt->field_count); + + for (bind= stmt->bind, end= bind + stmt->field_count, field= stmt->fields; + bind < end ; + bind++, field++) + { + bind->buffer_type= field->type; + bind->buffer_length=1; + } + + mysql_stmt_bind_result(stmt, stmt->bind); + stmt->bind_result_done= 0; /* No normal bind done */ + } + if ((*mysql->methods->read_binary_rows)(stmt)) { free_root(&result->alloc, MYF(MY_KEEP_PREALLOC)); @@ -3822,6 +3821,13 @@ int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt) DBUG_RETURN(1); } + if (stmt->update_max_length) + { + MYSQL_ROWS *cur= result->data; + for(; cur; cur=cur->next) + stmt_update_metadata(stmt, cur); + } + stmt->data_cursor= result->data; mysql->affected_rows= stmt->affected_rows= result->rows; stmt->read_row_func= stmt_read_row_buffered; diff --git a/libmysqld/lib_sql.cc b/libmysqld/lib_sql.cc index cfb50d3907a..09b03e38f2e 100644 --- a/libmysqld/lib_sql.cc +++ b/libmysqld/lib_sql.cc @@ -197,6 +197,8 @@ static int emb_stmt_execute(MYSQL_STMT *stmt) set_stmt_errmsg(stmt, net->last_error, net->last_errno, net->sqlstate); DBUG_RETURN(1); } + stmt->affected_rows= stmt->mysql->affected_rows; + stmt->insert_id= stmt->mysql->insert_id; DBUG_RETURN(0); } @@ -605,13 +607,14 @@ bool Protocol::send_fields(List<Item> *list, uint flag) if (!(res=item->val_str(&tmp))) { - client_field->def= strdup_root(field_alloc, ""); client_field->def_length= 0; + client_field->def= strmake_root(field_alloc, "",0); } else { - client_field->def= strdup_root(field_alloc, res->ptr()); client_field->def_length= res->length(); + client_field->def= strmake_root(field_alloc, res->ptr(), + client_field->def_length); } } else diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index f2458068633..0c178f05cc0 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1493,7 +1493,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, thd->query_rest.length(length); } else - thd->query_rest.copy(length); + thd->query_rest.copy(packet, length, thd->query_rest.charset()); break; #endif /*EMBEDDED_LIBRARY*/ } diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 61e5b778b64..68da21018a0 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -309,6 +309,7 @@ void set_param_double(Item_param *param, uchar **pos, ulong len) *pos+= 8; } +#ifndef EMBEDDED_LIBRARY void set_param_time(Item_param *param, uchar **pos, ulong len) { ulong length; @@ -386,6 +387,62 @@ void set_param_date(Item_param *param, uchar **pos, ulong len) *pos+= length; } +#else/*!EMBEDDED_LIBRARY*/ +void set_param_time(Item_param *param, uchar **pos, ulong len) +{ + TIME tm; + MYSQL_TIME *to= (MYSQL_TIME*)*pos; + + tm.second_part= to->second_part; + + tm.day= to->day; + tm.hour= to->hour; + tm.minute= to->minute; + tm.second= to->second; + + tm.year= tm.month= 0; + tm.neg= to->neg; + + param->set_time(&tm, TIMESTAMP_TIME); +} + +void set_param_datetime(Item_param *param, uchar **pos, ulong len) +{ + TIME tm; + MYSQL_TIME *to= (MYSQL_TIME*)*pos; + + tm.second_part= to->second_part; + + tm.day= to->day; + tm.hour= to->hour; + tm.minute= to->minute; + tm.second= to->second; + tm.year= to->year; + tm.month= to->month; + tm.neg= 0; + + param->set_time(&tm, TIMESTAMP_DATETIME); +} + +void set_param_date(Item_param *param, uchar **pos, ulong len) +{ + TIME tm; + MYSQL_TIME *to= (MYSQL_TIME*)*pos; + + tm.second_part= to->second_part; + + tm.day= to->day; + tm.year= to->year; + tm.month= to->month; + tm.neg= 0; + tm.hour= tm.minute= tm.second= 0; + tm.second_part= 0; + tm.neg= 0; + + param->set_time(&tm, TIMESTAMP_DATE); +} +#endif /*!EMBEDDED_LIBRARY*/ + void set_param_str(Item_param *param, uchar **pos, ulong len) { ulong length= get_param_length(pos, len); @@ -568,6 +625,7 @@ static bool emb_insert_params(Prepared_statement *stmt) { Item_param *param= *it; setup_one_conversion_function(param, client_param->buffer_type); + param->unsigned_flag= client_param->is_unsigned; if (!param->long_data_supplied) { if (*client_param->is_null) diff --git a/tests/client_test.c b/tests/client_test.c index c244274a2e7..7fae648e8f5 100644 --- a/tests/client_test.c +++ b/tests/client_test.c @@ -9871,7 +9871,10 @@ int main(int argc, char **argv) test_stiny_bug(); /* test a simple conv bug from php */ test_field_misc(); /* check the field info for misc case, bug: #74 */ test_set_option(); /* test the SET OPTION feature, bug #85 */ + /*TODO HF: here should be NO_EMBEDDED_ACCESS_CHECKS*/ +#ifndef EMBEDDED_LIBRARY test_prepare_grant(); /* to test the GRANT command, bug #89 */ +#endif test_frm_bug(); /* test the crash when .frm is invalid, bug #93 */ test_explain_bug(); /* test for the EXPLAIN, bug #115 */ test_decimal_bug(); /* test for the decimal bug */ |