| |
267 |
267 |
# Query Dispatcher (OpenACS - SDW) |
| |
268 |
268 |
set full_statement_name [db_qd_get_fullname $statement_name] |
| |
269 |
269 |
|
| |
270 |
270 |
# Can't use db_foreach here, since we need to use the ns_set directly. |
| |
271 |
271 |
db_with_handle db { |
| |
272 |
272 |
set selection [db_exec select $db $full_statement_name $sql] |
| |
273 |
273 |
|
| |
274 |
274 |
set result [list] |
| |
275 |
275 |
|
| |
276 |
276 |
while { [db_getrow $db $selection] } { |
| |
277 |
277 |
set this_result [list] |
| |
278 |
278 |
for { set i 0 } { $i < [ns_set size $selection] } { incr i } { |
| |
279 |
279 |
lappend this_result [ns_set value $selection $i] |
| |
280 |
280 |
} |
| |
281 |
281 |
lappend result $this_result |
| |
282 |
282 |
} |
| |
283 |
283 |
} |
| |
284 |
284 |
return $result |
| |
285 |
285 |
} |
| |
286 |
286 |
|
| |
|
287 |
ad_proc -public db_list_of_ns_sets { |
| |
|
288 |
statement_name |
| |
|
289 |
sql |
| |
|
290 |
{args ""} |
| |
|
291 |
} { |
| |
|
292 |
Returns a list of ns_sets with the values of each column of each row |
| |
|
293 |
returned byt he sql query specified. |
| |
|
294 |
|
| |
|
295 |
@param statement_name The name of the query. |
| |
|
296 |
@param sql The SQL to be executed. |
| |
|
297 |
@param args Any additional arguments, such as a 'if_no_rows' |
| |
|
298 |
|
| |
|
299 |
@return list of ns_sets, one per each row return by the SQL query |
| |
|
300 |
} { |
| |
|
301 |
ad_arg_parser { bind } $args |
| |
|
302 |
|
| |
|
303 |
set full_statement_name [db_qd_get_fullname $statement_name] |
| |
|
304 |
|
| |
|
305 |
db_with_handle db { |
| |
|
306 |
set result [list] |
| |
|
307 |
set selection [db_exec select $db $full_statement_name $sql] |
| |
|
308 |
|
| |
|
309 |
while {[db_getrow $db $selection]} { |
| |
|
310 |
lappend result [ns_set copy $selection] |
| |
|
311 |
} |
| |
|
312 |
} |
| |
|
313 |
|
| |
|
314 |
return $result |
| |
|
315 |
} |
| |
|
316 |
|
| |
287 |
317 |
proc_doc db_foreach { statement_name sql args } { |
| |
288 |
318 |
Usage: db_foreach statement_name sql [-bind ns_set | list of bind variables] code_block [if_no_rows if_no_rows_code_block] |
| |
289 |
319 |
|
| |
290 |
320 |
Performs the SQL query $sql, executing code_block once for each row with variables set to column values. |
| |
291 |
321 |
|
| |
292 |
322 |
<p>Example: |
| |
293 |
323 |
|
| |
294 |
324 |
<blockquote><pre>db_foreach greeble_query "select foo, bar from greeble" { |
| |
295 |
325 |
ns_write "<li>foo=$foo; bar=$bar\n" |
| |
296 |
326 |
} if_no_rows { |
| |
297 |
327 |
# This block is optional. |
| |
298 |
328 |
ns_write "<li>No greebles!\n" |
| |
299 |
329 |
}</pre></blockquote> |
| |
300 |
330 |
|
| |
301 |
331 |
} { |
| |
302 |
332 |
# Query Dispatcher (OpenACS - ben) |
| |
303 |
333 |
set full_statement_name [db_qd_get_fullname $statement_name] |
| |
304 |
334 |
|
| |
305 |
335 |
ad_arg_parser { bind column_array column_set args } $args |
| |
306 |
336 |
|