summaryrefslogtreecommitdiff
path: root/libmysql
diff options
context:
space:
mode:
Diffstat (limited to 'libmysql')
-rw-r--r--libmysql/Makefile.shared1
-rw-r--r--libmysql/libmysql.c64
-rw-r--r--libmysql/libmysql.def2
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