pike.git/
lib/
modules/
Sql.pmod/
sql_util.pmod
Branch:
Tag:
Non-build tags
All tags
No tags
2012-09-19
2012-09-19 20:54:25 by Martin Stjernholm <mast@lysator.liu.se>
db5c78b2c8071fb4db012c7f32f5d94ac0ace9c7 (
27
lines) (+
19
/-
8
)
[
Show
|
Annotate
]
Branch:
7.9
Allow a bindings mapping to be passed to handle_extraargs.
65:
//! @param extraargs //! The arguments following the query. //!
+
//! @param bindings
+
//! Optional bindings mapping to which additional bindings will be
+
//! added. It's returned as the second element in the return value.
+
//! A new mapping is used if this isn't specified.
+
//!
//! @returns //! Returns an array with two elements: //! @array //! @elem string 0 //! The query altered to use bindings-syntax. //! @elem mapping(string|int:mixed) 1
-
//! A bindings mapping.
+
//! A bindings mapping.
Zero if no bindings were added.
//! @endarray array(string|mapping(string|int:mixed))
-
handle_extraargs(string query, array(mixed) extraargs) {
+
handle_extraargs(string query, array(mixed) extraargs
,
+
void|mapping(string|int:mixed
)
bindings)
{
array(mixed) args=allocate(sizeof(extraargs));
-
mapping
(
string|int:mixed
)
b
= ([]);
+
if
(
!bindings
)
bindings
= ([]);
-
int a;
+
int a
, new_bindings
;
foreach(extraargs; int j; mixed s) { if (stringp(s) || multisetp(s)) {
-
args[j]
=":arg"+(a++);
-
b
[args[j]] = s;
+
string bind_name;
+
do {
+
bind_name
=
":arg"+(a++);
+
} while (!zero_type (bindings
[
bind_name]));
+
args[j]
=bind_name;
+
bindings[bind_name
] = s;
+
new_bindings = 1;
continue; } if (intp(s) || floatp(s)) {
96:
} error("Wrong type to query argument %d: %O\n", j + 1, s); }
-
if(!sizeof(b)) b=0;
+
-
return ({sprintf(query,@args),
b}
);
+
return ({sprintf(query,@args),
new_bindings && bindings}
);
} //! Build a raw SQL query, given the cooked query and the variable bindings