878548 | 1999-07-01 | Henrik Grubbström (Grubba) | |
|
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)
{
|
18096f | 2003-08-22 | Martin Nilsson | | return replace(s, "\'", "\'\'");
|
878548 | 1999-07-01 | Henrik Grubbström (Grubba) | | }
|
36d2b8 | 2001-09-06 | Martin Nilsson | |
|
485cb1 | 1999-07-01 | Henrik Grubbström (Grubba) | | void fallback()
|
878548 | 1999-07-01 | Henrik Grubbström (Grubba) | | {
|
5d1696 | 2003-04-22 | Martin Nilsson | | error( "Function not supported in this database." );
|
878548 | 1999-07-01 | Henrik Grubbström (Grubba) | | }
|
6458a7 | 2000-04-29 | Francesco Chemolli | |
|
d6beb9 | 2012-09-19 | Martin Stjernholm | |
protected class ZeroWrapper
{
protected string _sprintf(int fmt, mapping(string:mixed) params)
{
if (fmt == 's') return "NULL";
if (fmt == 'O') return "ZeroWrapper()";
return sprintf(sprintf("%%*%c", fmt), params, 0);
}
}
protected ZeroWrapper zero = ZeroWrapper();
protected class NullArg
{
protected string _sprintf (int fmt)
{return fmt == 'O' ? "NullArg()" : "NULL";}
}
protected NullArg null_arg = NullArg();
|
db5c78 | 2012-09-19 | Martin Stjernholm | |
|
d6beb9 | 2012-09-19 | Martin Stjernholm | |
|
db5c78 | 2012-09-19 | Martin Stjernholm | |
|
d6beb9 | 2012-09-19 | Martin Stjernholm | |
array(string|mapping(string|int:mixed))
|
db5c78 | 2012-09-19 | Martin Stjernholm | | handle_extraargs(string query, array(mixed) extraargs,
void|mapping(string|int:mixed) bindings) {
|
d6beb9 | 2012-09-19 | Martin Stjernholm | |
array(mixed) args=allocate(sizeof(extraargs));
|
db5c78 | 2012-09-19 | Martin Stjernholm | | if (!bindings) bindings = ([]);
|
d6beb9 | 2012-09-19 | Martin Stjernholm | |
|
db5c78 | 2012-09-19 | Martin Stjernholm | | int a, new_bindings;
|
d6beb9 | 2012-09-19 | Martin Stjernholm | | foreach(extraargs; int j; mixed s) {
if (stringp(s) || multisetp(s)) {
|
db5c78 | 2012-09-19 | Martin Stjernholm | | string bind_name;
do {
bind_name = ":arg"+(a++);
|
65340d | 2014-08-15 | Martin Nilsson | | } while (has_index (bindings, bind_name));
|
db5c78 | 2012-09-19 | Martin Stjernholm | | args[j]=bind_name;
bindings[bind_name] = s;
new_bindings = 1;
|
d6beb9 | 2012-09-19 | Martin Stjernholm | | continue;
}
if (intp(s) || floatp(s)) {
args[j] = s || zero;
continue;
}
if (objectp (s) && s->is_val_null) {
args[j] = null_arg;
continue;
}
error("Wrong type to query argument %d: %O\n", j + 1, s);
}
|
db5c78 | 2012-09-19 | Martin Stjernholm | | return ({sprintf(query,@args), new_bindings && bindings});
|
d6beb9 | 2012-09-19 | Martin Stjernholm | | }
|
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);
|
981f83 | 2005-04-10 | Martin Nilsson | | v=map(values(bindings),
lambda(mixed m) {
|
65340d | 2014-08-15 | Martin Nilsson | | if(undefinedp(m))
|
0e09b4 | 2012-06-10 | Martin Stjernholm | | return "NULL";
if (objectp (m) && m->is_val_null)
return "NULL";
|
39adc6 | 2008-06-30 | Stephen R. van den Berg | | if(multisetp(m))
return sizeof(m) ? indices(m)[0] : "";
|
a9b54e | 2008-06-30 | Stephen R. van den Berg | | return "'"+(intp(m)?(string)m:my_quote((string)m))+"'";
|
981f83 | 2005-04-10 | Martin Nilsson | | });
|
580be4 | 2001-12-04 | Martin Nilsson | |
|
981f83 | 2005-04-10 | Martin Nilsson | | k=map(indices(bindings),lambda(string s){
return ( (stringp(s)&&s[0]==':') ?
s : ":"+s);
});
|
6458a7 | 2000-04-29 | Francesco Chemolli | | return replace(query,k,v);
}
|
e796fc | 2006-08-09 | Henrik Grubbström (Grubba) | |
class UnicodeWrapper (
|
02a56d | 2006-12-30 | Martin Nilsson | |
|
9eaf1d | 2008-06-28 | Martin Nilsson | | protected object master_result
|
e796fc | 2006-08-09 | Henrik Grubbström (Grubba) | | )
{
|
22498d | 2018-01-15 | Martin Karlgren | | inherit Sql.Result;
|
6534f9 | 2018-01-20 | Stephen R. van den Berg | |
|
e796fc | 2006-08-09 | Henrik Grubbström (Grubba) | |
int num_rows()
{
return master_result->num_rows();
}
int num_fields()
{
return master_result->num_fields();
}
int(0..1) eof()
{
return master_result->eof();
}
|
9eaf1d | 2008-06-28 | Martin Nilsson | | protected array(int|mapping(string:mixed)) field_info;
|
e796fc | 2006-08-09 | Henrik Grubbström (Grubba) | |
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)) {
|
9c9a91 | 2018-05-24 | Henrik Grubbström (Grubba) | | field->name = utf8_to_string(field->name, 2);
|
e796fc | 2006-08-09 | Henrik Grubbström (Grubba) | | if (field->table) {
|
9c9a91 | 2018-05-24 | Henrik Grubbström (Grubba) | | field->table = utf8_to_string(field->table, 2);
|
e796fc | 2006-08-09 | Henrik Grubbström (Grubba) | | }
if (field->default) {
|
9c9a91 | 2018-05-24 | Henrik Grubbström (Grubba) | | field->default = utf8_to_string(field->default, 2);
|
e796fc | 2006-08-09 | Henrik Grubbström (Grubba) | | }
}
}
}
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;
|
cd1688 | 2006-08-11 | Henrik Grubbström (Grubba) | | array(int|mapping(string:mixed)) field_info = fetch_fields();
|
e796fc | 2006-08-09 | Henrik Grubbström (Grubba) | | foreach(row; int i; string|int val) {
|
887769 | 2006-11-17 | Martin Stjernholm | | if (stringp(val)) {
|
9c9a91 | 2018-05-24 | Henrik Grubbström (Grubba) | | row[i] = utf8_to_string(val, 2);
|
887769 | 2006-11-17 | Martin Stjernholm | | }
}
return row;
}
|
79ad90 | 2009-08-26 | Henrik Grubbström (Grubba) | |
int|string fetch_json_result()
{
return master_result->fetch_json_result();
}
|
887769 | 2006-11-17 | Martin Stjernholm | | }
class MySQLUnicodeWrapper
|
9a3d00 | 2011-01-09 | Henrik Grubbström (Grubba) | |
|
887769 | 2006-11-17 | 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]->charsetnr != 63) {
|
9c9a91 | 2018-05-24 | Henrik Grubbström (Grubba) | | row[i] = utf8_to_string(val, 2);
|
e796fc | 2006-08-09 | Henrik Grubbström (Grubba) | | }
}
return row;
}
}
|
77ac70 | 2006-11-27 | Martin Stjernholm | |
class MySQLBrokenUnicodeWrapper
|
2819ce | 2016-03-18 | Henrik Grubbström (Grubba) | |
|
77ac70 | 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) {
|
9c9a91 | 2018-05-24 | Henrik Grubbström (Grubba) | | row[i] = utf8_to_string(val, 2);
|
77ac70 | 2006-11-27 | Martin Stjernholm | | }
}
return row;
}
}
|