|
|
|
|
|
|
|
|
|
#pike __REAL_VERSION__ |
|
|
|
|
|
|
|
string quote(string s) |
{ |
return replace(s, "\'", "\'\'"); |
} |
|
|
void fallback() |
{ |
error( "Function not supported in this database." ); |
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string emulate_bindings(string query, mapping(string|int:mixed)|void bindings, |
void|object driver) |
{ |
array(string)k, v; |
if (!bindings) |
return query; |
function my_quote=(driver&&driver->quote?driver->quote:quote); |
v=map(values(bindings), |
lambda(mixed m) { |
if(multisetp(m)) m = indices(m)[0]; |
return (stringp(m)? "'"+my_quote(m)+"'" : |
zero_type(m)?"NULL":(string)m); |
}); |
|
k=map(indices(bindings),lambda(string s){ |
return ( (stringp(s)&&s[0]==':') ? |
s : ":"+s); |
}); |
return replace(query,k,v); |
} |
|
|
class UnicodeWrapper ( |
|
protected object master_result |
) |
{ |
|
int num_rows() |
{ |
return master_result->num_rows(); |
} |
|
|
int num_fields() |
{ |
return master_result->num_fields(); |
} |
|
|
int(0..1) eof() |
{ |
return master_result->eof(); |
} |
|
|
protected array(int|mapping(string:mixed)) field_info; |
|
|
|
|
|
|
|
|
|
|
|
|
array(int|mapping(string:mixed)) fetch_fields() |
{ |
if (!field_info) { |
field_info = master_result->fetch_fields(); |
foreach(field_info, int|mapping(string:mixed) field) { |
if (mappingp(field)) { |
field->name = utf8_to_string(field->name); |
if (field->table) { |
field->table = utf8_to_string(field->table); |
} |
if (field->default) { |
field->default = utf8_to_string(field->default); |
} |
} |
} |
} |
return field_info; |
} |
|
|
void seek(int rows) |
{ |
master_result->seek(rows); |
} |
|
|
|
|
int|array(string) fetch_row() |
{ |
int|array(string) row = master_result->fetch_row(); |
if (!arrayp(row)) return row; |
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); |
} |
} |
return row; |
} |
} |
|
#if constant (Mysql.mysql.HAVE_MYSQL_FIELD_CHARSETNR) |
|
class MySQLUnicodeWrapper |
|
|
|
|
|
|
|
{ |
inherit UnicodeWrapper; |
|
int|array(string) fetch_row() |
{ |
int|array(string) row = master_result->fetch_row(); |
if (!arrayp(row)) return row; |
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); |
} |
} |
return row; |
} |
} |
|
#else |
|
class MySQLBrokenUnicodeWrapper |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{ |
inherit UnicodeWrapper; |
|
int|array(string) fetch_row() |
{ |
int|array(string) row = master_result->fetch_row(); |
if (!arrayp(row)) return row; |
array(int|mapping(string:mixed)) field_info = fetch_fields(); |
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); |
} |
} |
return row; |
} |
} |
|
#endif |
|
|