Class ::nsmcp::DatabaseSession
::nsmcp::DatabaseSession
create ... \
[ -handle:required handle:required ] \
[ -inTransaction inTransaction ] \
[ -templates templates ]
Defined in /usr/local/ns/tcl/nsmcp/lib/database.tclClass Relations
- class: ::nx::Class
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- superclass: ::nx::Object
![[i]](/resources/acs-subsite/ZoomIn16.gif)
::nx::Class create ::nsmcp::DatabaseSession \
-superclass ::nx::Object
Methods (to be applied on instances)
changes (scripted, public)
<instance of nsmcp::DatabaseSession
> changes
- Testcases:
-
No testcase defined.
return [:scalar {SELECT changes()}]close (scripted, public)
<instance of nsmcp::DatabaseSession
> close
- Testcases:
-
No testcase defined.
:destroy
execute (scripted, public)
<instance of nsmcp::DatabaseSession
> execute sql [ arrayName ] \
[ script ]
- Parameters:
- sql (required)
- arrayName (optional)
- script (optional)
- Testcases:
-
No testcase defined.
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 $rowsquote (scripted, public)
<instance of nsmcp::DatabaseSession
> quote value
- Parameters:
- value (required)
- Testcases:
-
No testcase defined.
if {[string first \x00 $value]>=0} {
return "CAST(X'[binary encode hex [encoding convertto utf-8 $value]]' AS TEXT)"
}
return "'[string map [list ' ''] $value]'"scalar (scripted, public)
<instance of nsmcp::DatabaseSession
> scalar sql
- Parameters:
- sql (required)
- Testcases:
-
No testcase defined.
set rows [uplevel 1 [list [nsf::current object] execute $sql]]
if {$rows eq ""} {return {}}
return [lindex [dict values [lindex $rows 0]] 0] <instance of nsmcp::DatabaseSession
> transaction script
- Parameters:
- script (required)
- Testcases:
-
No testcase defined.
:execute {BEGIN IMMEDIATE}
try {
set value [uplevel 1 $script]
:execute COMMIT
return $value
} on error {message options} {
catch {:execute ROLLBACK}
return -options $options $message
}