diff --git a/lib/modules/Sql.pmod/mysql.pike b/lib/modules/Sql.pmod/mysql.pike index f8073dacbc9b371e6c7d293b21e65635cda937a9..506f0adeacf5552202871bb5363b502d023489a9 100644 --- a/lib/modules/Sql.pmod/mysql.pike +++ b/lib/modules/Sql.pmod/mysql.pike @@ -421,7 +421,9 @@ string latin1_to_utf8 (string s) ]))); } -string utf8_encode_query (string q, function(string:string) encode_fn) +string utf8_encode_query (string q, + function(string, mixed|void...:string) encode_fn, + mixed ... extras) //! Encodes the appropriate sections of the query with @[encode_fn]. //! Everything except strings prefixed by an introducer (i.e. //! @expr{_something@} or @expr{N@}) is encoded. @@ -430,7 +432,7 @@ string utf8_encode_query (string q, function(string:string) encode_fn) string e = ""; while (1) { sscanf(q, "%[^\'\"]%s", string prefix, string suffix); - e += encode_fn (prefix); + e += encode_fn (prefix, @extras); if (suffix == "") break; @@ -526,7 +528,7 @@ string utf8_encode_query (string q, function(string:string) encode_fn) } e += s; } else { - e += encode_fn (suffix[..end]); + e += encode_fn (suffix[..end], @extras); } q = suffix[end+1..]; @@ -685,7 +687,7 @@ int decode_datetime (string timestr) */ \ if ((send_charset == "utf8") || !_can_send_as_latin1(query)) { \ CH_DEBUG ("Converting query to utf8.\n"); \ - query = utf8_encode_query (query, string_to_utf8); \ + query = utf8_encode_query (query, string_to_utf8, 2); \ new_send_charset = "utf8"; \ } \ } \ diff --git a/lib/modules/Sql.pmod/sql_util.pmod b/lib/modules/Sql.pmod/sql_util.pmod index adfcfd84cbbb64cc0e093bf5327f3547cc95d6e8..756aa91bd908be512b2f71f4d44c50fef7d6c4ad 100644 --- a/lib/modules/Sql.pmod/sql_util.pmod +++ b/lib/modules/Sql.pmod/sql_util.pmod @@ -198,12 +198,12 @@ class UnicodeWrapper ( field_info = master_result->fetch_fields(); foreach(field_info, int|mapping(string:mixed) field) { if (mappingp(field)) { - field->name = utf8_to_string(field->name); + field->name = utf8_to_string(field->name, 2); if (field->table) { - field->table = utf8_to_string(field->table); + field->table = utf8_to_string(field->table, 2); } if (field->default) { - field->default = utf8_to_string(field->default); + field->default = utf8_to_string(field->default, 2); } } } @@ -227,7 +227,7 @@ class UnicodeWrapper ( array(int|mapping(string:mixed)) field_info = fetch_fields(); foreach(row; int i; string|int val) { if (stringp(val)) { - row[i] = utf8_to_string(val); + row[i] = utf8_to_string(val, 2); } } return row; @@ -260,7 +260,7 @@ class MySQLUnicodeWrapper array(int|mapping(string:mixed)) field_info = fetch_fields(); foreach(row; int i; string|int val) { if (stringp(val) && field_info[i]->charsetnr != 63) { - row[i] = utf8_to_string(val); + row[i] = utf8_to_string(val, 2); } } return row; @@ -296,7 +296,7 @@ class MySQLBrokenUnicodeWrapper foreach(row; int i; string|int val) { if (stringp(val) && field_info[i]->flags && !field_info[i]->flags->binary) { - row[i] = utf8_to_string(val); + row[i] = utf8_to_string(val, 2); } } return row;