878548 | 1999-07-01 | Henrik Grubbström (Grubba) | | |
1cbb89 | 2011-04-25 | Martin Stjernholm | | * $Id$
|
878548 | 1999-07-01 | Henrik Grubbström (Grubba) | | *
* Some SQL utility functions.
* They are kept here to avoid circular references.
*
* Henrik Grubbström 1999-07-01
*/
|
a580e1 | 2000-09-27 | Fredrik Hübinette (Hubbe) | | #pike __REAL_VERSION__
|
a20af6 | 2000-09-26 | Fredrik Hübinette (Hubbe) | |
|
36d2b8 | 2001-09-06 | Martin Nilsson | |
|
878548 | 1999-07-01 | Henrik Grubbström (Grubba) | |
|
36d2b8 | 2001-09-06 | Martin Nilsson | |
|
878548 | 1999-07-01 | Henrik Grubbström (Grubba) | | string quote(string s)
{
return(replace(s, "\'", "\'\'"));
}
|
36d2b8 | 2001-09-06 | Martin Nilsson | |
|
485cb1 | 1999-07-01 | Henrik Grubbström (Grubba) | | void fallback()
|
878548 | 1999-07-01 | Henrik Grubbström (Grubba) | | {
|
8fd5a2 | 2006-08-15 | Henrik Grubbström (Grubba) | | error("Function not supported in this database.\n");
|
878548 | 1999-07-01 | Henrik Grubbström (Grubba) | | }
|
6458a7 | 2000-04-29 | Francesco Chemolli | |
|
580be4 | 2001-12-04 | Martin Nilsson | |
|
36d2b8 | 2001-09-06 | Martin Nilsson | |
|
580be4 | 2001-12-04 | Martin Nilsson | |
|
36d2b8 | 2001-09-06 | Martin Nilsson | |
|
580be4 | 2001-12-04 | Martin Nilsson | |
|
36d2b8 | 2001-09-06 | Martin Nilsson | |
|
4903d5 | 2000-04-29 | Francesco Chemolli | | string emulate_bindings(string query, mapping(string|int:mixed)|void bindings,
void|object driver)
|
6458a7 | 2000-04-29 | Francesco Chemolli | | {
array(string)k, v;
if (!bindings)
return query;
|
580be4 | 2001-12-04 | Martin Nilsson | | function my_quote=(driver&&driver->quote?driver->quote:quote);
|
6458a7 | 2000-04-29 | Francesco Chemolli | | v=Array.map(values(bindings),
|
8fd5a2 | 2006-08-15 | Henrik Grubbström (Grubba) | | lambda(mixed m) {
|
a315b5 | 2001-01-09 | Marcus Comstedt | | if(multisetp(m)) m = indices(m)[0];
return (stringp(m)? "'"+my_quote(m)+"'" : (string)m);
});
|
580be4 | 2001-12-04 | Martin Nilsson | |
|
a315b5 | 2001-01-09 | Marcus Comstedt | | k=Array.map(indices(bindings),lambda(string s){
|
580be4 | 2001-12-04 | Martin Nilsson | | return ( (stringp(s)&&s[0]==':') ?
s : ":"+s);
|
a315b5 | 2001-01-09 | Marcus Comstedt | | });
|
6458a7 | 2000-04-29 | Francesco Chemolli | | return replace(query,k,v);
}
|
8fd5a2 | 2006-08-15 | Henrik Grubbström (Grubba) | |
class UnicodeWrapper (
static 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();
}
static 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) {
|
789ffa | 2006-11-17 | Martin Stjernholm | | if (stringp(val)) {
row[i] = utf8_to_string(val);
}
}
return row;
}
|
65217d | 2009-08-26 | Henrik Grubbström (Grubba) | |
int|string fetch_json_result()
{
return master_result->fetch_json_result();
}
|
789ffa | 2006-11-17 | Martin Stjernholm | | }
#if constant (Mysql.mysql.HAVE_MYSQL_FIELD_CHARSETNR)
|
28574d | 2006-11-27 | Martin Stjernholm | |
|
789ffa | 2006-11-17 | Martin Stjernholm | | 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) {
|
8fd5a2 | 2006-08-15 | Henrik Grubbström (Grubba) | | row[i] = utf8_to_string(val);
}
}
return row;
}
}
|
28574d | 2006-11-27 | Martin Stjernholm | |
#else
class MySQLBrokenUnicodeWrapper
|
ac5f4a | 2007-05-03 | Martin Stjernholm | |
|
28574d | 2006-11-27 | Martin Stjernholm | |
|
ac5f4a | 2007-05-03 | Martin Stjernholm | |
|
28574d | 2006-11-27 | Martin Stjernholm | | {
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;
}
}
|
789ffa | 2006-11-17 | Martin Stjernholm | | #endif
|