yon
committed
on 22 Feb 02
adding db api call to return the result set as a list of ns_sets, one for each row in the result set
openacs-4/.../tcl/00-database-procs.tcl (+30 -0)
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 "&lt;li&gt;foo=$foo; bar=$bar\n"
296 326     } if_no_rows {
297 327         # This block is optional.
298 328         ns_write "&lt;li&gt;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