nsmcp::DatabaseSession method execute (public)

 <instance of nsmcp::DatabaseSession[i]> execute sql [ arrayName ] \
    [ script ]

Defined in /usr/local/ns/tcl/nsmcp/lib/database.tcl

Parameters:
sql (required)
arrayName (optional)
script (optional)

Testcases:
No testcase defined.
Source code:
set rows {}
foreach template [:compile $sql] {
    set statement {}
    foreach {type value} $template {
        if {$type eq "literal"} {append statement $value} elseif {[uplevel 1 [list info exists $value]]} {
            append statement [:quote [uplevel 1 [list set $value]]]
        } else {append statement NULL}
    }
    if {[string trim $statement] eq ""} continue
    set kind [ns_db exec ${:handle} $statement]
    set command [string toupper [lindex [split [string trim $statement]] 0]]
    if {$command eq "BEGIN"} {set :inTransaction true}
    if {$command in {COMMIT ROLLBACK END}} {set :inTransaction false}
    if {$kind ne "NS_ROWS"} continue
    set row [ns_db bindrow ${:handle}]
    try {
        while {[ns_db getrow ${:handle} $row]} {
            set record {}; set keys {}
            for {set i 0} {$i<[ns_set size $row]} {incr i} {
                set key [ns_set key $row $i]
                dict set record $key [ns_set value $row $i]; lappend keys $key
            }
            if {$arrayName eq ""} {lappend rows $record} else {
                upvar 1 $arrayName target
                array unset target
                dict for {key value} $record {set target($key) $value}
                set target(*) $keys
                set code [catch {uplevel 1 $script} value options]
                if {$code==3} break
                if {$code==4} continue
                if {$code} {return -options $options $value}
            }
        }
    } finally {ns_db flush ${:handle}; ns_set free $row}
}
return $rows
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: