pike.git/
lib/
modules/
Sql.pmod/
sql_util.pmod
Branch:
Tag:
Non-build tags
All tags
No tags
2006-08-09
2006-08-09 13:04:38 by Henrik Grubbström (Grubba) <grubba@grubba.org>
e796fc25dabd31179b3a367b0f53a3c44390bfaf (
85
lines) (+
84
/-
1
)
[
Show
|
Annotate
]
Branch:
7.9
Added UnicodeWrapper.
Rev: lib/modules/Sql.pmod/sql_util.pmod:1.14
1:
/*
-
* $Id: sql_util.pmod,v 1.
13
2005
/
04
/
10
03
:
38
:
54
nilsson
Exp $
+
* $Id: sql_util.pmod,v 1.
14
2006
/
08
/
09
13
:
04:
38
grubba
Exp $
* * Some SQL utility functions. * They are kept here to avoid circular references.
59:
}); return replace(query,k,v); }
+
+
//! Result object wrapper performing utf8 decoding of all fields.
+
//!
+
//! Useful for eg Mysql connections which have been set to utf8-mode
+
//! using eg @expr{"SET NAMES 'utf8'"@}.
+
class UnicodeWrapper (
+
//! The wrapped result object.
+
static object master_result
+
)
+
{
+
//! Returns the number of rows in the result.
+
int num_rows()
+
{
+
return master_result->num_rows();
+
}
+
+
//! Returns the number of fields in the result.
+
int num_fields()
+
{
+
return master_result->num_fields();
+
}
+
+
//! Returns @expr{1@} if there are no more rows in the result.
+
int(0..1) eof()
+
{
+
return master_result->eof();
+
}
+
+
//! Cached @[fetch_fields()] result.
+
static array(int|mapping(string:mixed)) field_info;
+
+
//! Returns Information about the fields in the result.
+
//!
+
//! The following fields are converted from UTF8 if present:
+
//! @mapping
+
//! @member string "name"
+
//! The name of the field. Always present.
+
//! @member string "table"
+
//! The table the field is from. Not present from all databases.
+
//! @member string "default"
+
//! The default value for the column. Not available from all databases.
+
//! @endmapping
+
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;
+
}
+
+
//! Skip ahead the specified number of rows.
+
void seek(int rows)
+
{
+
master_result->seek(rows);
+
}
+
+
//! Fetch the next row from the result.
+
//!
+
//! All strings in the result are decoded from UTF8.
+
int|array(string) fetch_row()
+
{
+
int|array(string) row = master_result->fetch_row();
+
if (!arrayp(row)) return row;
+
foreach(row; int i; string|int val) {
+
if (stringp(val)) {
+
row[i] = utf8_to_string(val);
+
}
+
}
+
return row;
+
}
+
}