diff options
Diffstat (limited to 'libmysql')
-rw-r--r-- | libmysql/Makefile.shared | 1 | ||||
-rw-r--r-- | libmysql/libmysql.c | 64 | ||||
-rw-r--r-- | libmysql/libmysql.def | 2 |
3 files changed, 27 insertions, 40 deletions
diff --git a/libmysql/Makefile.shared b/libmysql/Makefile.shared index a2bfa616f6b..fab1a402c1e 100644 --- a/libmysql/Makefile.shared +++ b/libmysql/Makefile.shared @@ -84,6 +84,7 @@ CLEANFILES = $(target_libadd) $(SHLIBOBJS) \ DEFS = -DDEFAULT_CHARSET_HOME="\"$(MYSQLBASEdir)\"" \ -DDATADIR="\"$(MYSQLDATAdir)\"" \ -DDEFAULT_HOME_ENV=MYSQL_HOME \ + -DDEFAULT_GROUP_SUFFIX_ENV=MYSQL_GROUP_SUFFIX \ -DSHAREDIR="\"$(MYSQLSHAREdir)\"" $(target_defs) # The automatic dependencies miss this diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 4127600babc..024d19ff24b 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -1511,39 +1511,6 @@ void STDCALL mysql_get_character_set_info(MYSQL *mysql, MY_CHARSET_INFO *csinfo) csinfo->dir = charsets_dir; } -int STDCALL mysql_set_character_set(MYSQL *mysql, char *cs_name) -{ - struct charset_info_st *cs; - const char *save_csdir= charsets_dir; - - if (mysql->options.charset_dir) - charsets_dir= mysql->options.charset_dir; - - if ((cs= get_charset_by_csname(cs_name, MY_CS_PRIMARY, MYF(0)))) - { - char buff[MY_CS_NAME_SIZE + 10]; - charsets_dir= save_csdir; - sprintf(buff, "SET NAMES %s", cs_name); - if (!mysql_query(mysql, buff)) - { - mysql->charset= cs; - } - } - else - { - char cs_dir_name[FN_REFLEN]; - get_charsets_dir(cs_dir_name); - mysql->net.last_errno= CR_CANT_READ_CHARSET; - strmov(mysql->net.sqlstate, unknown_sqlstate); - my_snprintf(mysql->net.last_error, sizeof(mysql->net.last_error) - 1, - ER(mysql->net.last_errno), cs_name, cs_dir_name); - - } - charsets_dir= save_csdir; - return mysql->net.last_errno; -} - - uint STDCALL mysql_thread_safe(void) { #ifdef THREAD @@ -1774,6 +1741,7 @@ static int stmt_read_row_unbuffered(MYSQL_STMT *stmt, unsigned char **row); static int stmt_read_row_buffered(MYSQL_STMT *stmt, unsigned char **row); static int stmt_read_row_from_cursor(MYSQL_STMT *stmt, unsigned char **row); static int stmt_read_row_no_data(MYSQL_STMT *stmt, unsigned char **row); +static int stmt_read_row_no_result_set(MYSQL_STMT *stmt, unsigned char **row); /* This function is used in mysql_stmt_store_result if @@ -1869,6 +1837,16 @@ static void net_clear_error(NET *net) } } +static void stmt_clear_error(MYSQL_STMT *stmt) +{ + if (stmt->last_errno) + { + stmt->last_errno= 0; + stmt->last_error[0]= '\0'; + strmov(stmt->sqlstate, not_error_sqlstate); + } +} + /* Set statement error code, sqlstate, and error message from given errcode and sqlstate. @@ -2026,7 +2004,7 @@ mysql_stmt_init(MYSQL *mysql) stmt->list.data= stmt; stmt->state= MYSQL_STMT_INIT_DONE; stmt->mysql= mysql; - stmt->read_row_func= stmt_read_row_no_data; + stmt->read_row_func= stmt_read_row_no_result_set; stmt->prefetch_rows= DEFAULT_PREFETCH_ROWS; /* The rest of statement members was bzeroed inside malloc */ @@ -2769,6 +2747,13 @@ static int stmt_read_row_no_data(MYSQL_STMT *stmt __attribute__((unused)), unsigned char **row __attribute__((unused))) { + return MYSQL_NO_DATA; +} + +static int +stmt_read_row_no_result_set(MYSQL_STMT *stmt __attribute__((unused)), + unsigned char **row __attribute__((unused))) +{ set_stmt_error(stmt, CR_NO_RESULT_SET, unknown_sqlstate); return 1; } @@ -4591,7 +4576,8 @@ int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt) ((rc= stmt_fetch_row(stmt, row)) && rc != MYSQL_DATA_TRUNCATED)) { stmt->state= MYSQL_STMT_PREPARE_DONE; /* XXX: this is buggy */ - stmt->read_row_func= stmt_read_row_no_data; + stmt->read_row_func= (rc == MYSQL_NO_DATA) ? + stmt_read_row_no_data : stmt_read_row_no_result_set; } else { @@ -4908,13 +4894,12 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags) { MYSQL *mysql= stmt->mysql; MYSQL_DATA *result= &stmt->result; - my_bool has_cursor= stmt->read_row_func == stmt_read_row_from_cursor; /* Reset stored result set if so was requested or it's a part of cursor fetch. */ - if (result->data && (has_cursor || (flags & RESET_STORE_RESULT))) + if (result->data && (flags & RESET_STORE_RESULT)) { /* Result buffered */ free_root(&result->alloc, MYF(MY_KEEP_PREALLOC)); @@ -4929,7 +4914,7 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags) for (; param < param_end; param++) param->long_data_used= 0; } - stmt->read_row_func= stmt_read_row_no_data; + stmt->read_row_func= stmt_read_row_no_result_set; if (mysql) { if ((int) stmt->state > (int) MYSQL_STMT_PREPARE_DONE) @@ -4945,7 +4930,7 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags) mysql->status= MYSQL_STATUS_READY; } } - if (has_cursor || (flags & RESET_SERVER_SIDE)) + if (flags & RESET_SERVER_SIDE) { /* Reset the server side statement and close the server side @@ -4961,6 +4946,7 @@ static my_bool reset_stmt_handle(MYSQL_STMT *stmt, uint flags) stmt->state= MYSQL_STMT_INIT_DONE; return 1; } + stmt_clear_error(stmt); } } stmt->state= MYSQL_STMT_PREPARE_DONE; diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def index 0688ea5732b..a469c67c466 100644 --- a/libmysql/libmysql.def +++ b/libmysql/libmysql.def @@ -150,5 +150,5 @@ EXPORTS mysql_server_end mysql_set_character_set mysql_get_character_set_info - get_defaults_files + get_defaults_options modify_defaults_file |