summaryrefslogtreecommitdiff
path: root/libmysql
diff options
context:
space:
mode:
authorunknown <konstantin@mysql.com>2005-05-14 12:38:12 +0400
committerunknown <konstantin@mysql.com>2005-05-14 12:38:12 +0400
commit7f5bf3dcdb436d08d8a8ed62c7683e27f6e85cc4 (patch)
tree301d852032306dc5560a6076b889c4d7c3d6da7d /libmysql
parent18fd0b9467f30a40de83ab54dcffdfd180d83338 (diff)
parentba3540cc6991c49e0f43501e600018896b5e0dcb (diff)
downloadmariadb-git-7f5bf3dcdb436d08d8a8ed62c7683e27f6e85cc4.tar.gz
Manual merge (again)
configure.in: Auto merged include/mysql.h: Auto merged innobase/row/row0mysql.c: Auto merged BitKeeper/deleted/.del-ctype-cp932.c: Auto merged BitKeeper/deleted/.del-errmsg.txt~4617575065d612b9: Auto merged BitKeeper/deleted/.del-errmsg.txt~ffe4a0c9e3206150: Auto merged libmysql/libmysql.c: Auto merged libmysqld/Makefile.am: Auto merged mysql-test/r/ctype_ucs.result: Auto merged mysql-test/t/ctype_ucs.test: Auto merged mysql-test/t/ps_grant.test: Auto merged sql/ha_blackhole.cc: Auto merged strings/ctype-big5.c: Auto merged strings/ctype-ucs2.c: Auto merged
Diffstat (limited to 'libmysql')
-rw-r--r--libmysql/libmysql.c37
-rw-r--r--libmysql/libmysql.def1
2 files changed, 36 insertions, 2 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 3e6b29b7602..f070d95780c 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -1495,6 +1495,36 @@ const char * STDCALL mysql_character_set_name(MYSQL *mysql)
return mysql->charset->csname;
}
+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)
{
@@ -4375,9 +4405,12 @@ my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT *stmt, MYSQL_BIND *bind)
/*
We only need to check that stmt->field_count - if it is not null
stmt->bind was initialized in mysql_stmt_prepare
- */
+ stmt->bind overlaps with bind if mysql_stmt_bind_param
+ is called from mysql_stmt_store_result.
+ */
- memcpy((char*) stmt->bind, (char*) bind, sizeof(MYSQL_BIND) * bind_count);
+ if (stmt->bind != bind)
+ memcpy((char*) stmt->bind, (char*) bind, sizeof(MYSQL_BIND) * bind_count);
for (param= stmt->bind, end= param + bind_count, field= stmt->fields ;
param < end ;
diff --git a/libmysql/libmysql.def b/libmysql/libmysql.def
index 414ac4afd85..a597ee37682 100644
--- a/libmysql/libmysql.def
+++ b/libmysql/libmysql.def
@@ -148,6 +148,7 @@ EXPORTS
mysql_embedded
mysql_server_init
mysql_server_end
+ mysql_set_character_set
get_defaults_files
get_charset_by_csname
get_charsets_dir