Index: openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl,v diff -u -r1.142 -r1.143 --- openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl 8 Nov 2018 09:53:58 -0000 1.142 +++ openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl 11 Nov 2018 16:16:33 -0000 1.143 @@ -205,7 +205,7 @@ } return $sql } - + ::xo::db::oracle instproc map_datatype {type} { switch -- $type { string { set type varchar2(1000) } @@ -217,7 +217,7 @@ } return $type } - + ::xo::db::oracle instproc datatype_constraint {type table att} { set constraint "" switch -- $type { @@ -649,11 +649,30 @@ # set key [ns_md5 $sql] - if {[nsv_exists pepared_statement $key]} { + # + # Get local variables "prepare", "execute", "prepName", and "sql" + # keeping the relevant prepared statement context. + # + set per_interp_cache ::xo::prepared($key) + if {[info exists $per_interp_cache]} { # - # The perepared statement exists already + # The prepared statement exists in the per-interp cache, get the + # values from there. # - lassign [nsv_get pepared_statement $key] prepare execute prepName sql + lassign [set $per_interp_cache] prepare execute prepName sql + + } elseif {[nsv_exists prepared_statement $key]} { + # + # The prepared statement exists already in the nsv-cache. + # + set nsv_cached_value [nsv_get prepared_statement $key] + # + # Save the nsv-cached value as well in the per-interpreter cache + # and set the output variables. + # + set $per_interp_cache $nsv_cached_value + lassign $nsv_cached_value prepare execute prepName sql + } else { # # Compute a PREPARE statement and an EXECUTE statement on the @@ -675,11 +694,11 @@ if {[llength $argtypes] == [llength $prepArgs]} { set prepArgs $argtypes } - set c [nsv_incr pepared_statement count] + set c [nsv_incr prepared_statement count] set prepName __p$c set prepare "PREPARE $prepName ([join $prepArgs ,]) AS $l" set execute "EXECUTE $prepName ([join $execArgs ,])" - nsv_set pepared_statement $key [list $prepare $execute $prepName $sql] + nsv_set prepared_statement $key [list $prepare $execute $prepName $sql] } #