Index: openacs-4/packages/xotcl-core/xotcl-core.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-core/xotcl-core.info,v
diff -u -r1.99 -r1.100
--- openacs-4/packages/xotcl-core/xotcl-core.info 21 Jun 2018 07:23:56 -0000 1.99
+++ openacs-4/packages/xotcl-core/xotcl-core.info 22 Jun 2018 11:56:11 -0000 1.100
@@ -10,7 +10,7 @@
t
xotcl
-
+
Gustaf Neumann
XOTcl library functionality (e.g. thread handling, online documentation, Generic Form and List Classes)
2017-08-06
@@ -43,7 +43,7 @@
BSD-Style
2
-
+
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.126 -r1.127
--- openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl 21 Jun 2018 09:19:51 -0000 1.126
+++ openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl 22 Jun 2018 11:56:11 -0000 1.127
@@ -1,5 +1,5 @@
::xo::library doc {
-
+
XOTcl API for low level db abstraction
@author Gustaf Neumann
@@ -110,15 +110,15 @@
}
::xo::db::postgresql instproc has_ltree {} {
- ns_cache eval xotcl_object_cache [self]::has_ltree {
+ ::xo::xotcl_object_type_cache eval [self]::has_ltree {
if {[:get_value check_ltree "select count(*) from pg_proc where proname = 'ltree_in'"] > 0} {
return 1
}
return 0
}
}
::xo::db::postgresql instproc has_hstore {} {
- ns_cache eval xotcl_object_cache [self]::has_hstore {
+ ::xo::xotcl_object_type_cache eval [self]::has_hstore {
if {[:get_value check_ltree "select count(*) from pg_proc where proname = 'hstore_in'"] > 0} {
return 1
}
@@ -281,7 +281,7 @@
#
# Driver specific and Driver/Dialect specific hooks
#
- ::xotcl::Class create ::xo::db::DB -superclass ::xo::db::Driver
+ ::xotcl::Class create ::xo::db::DB -superclass ::xo::db::Driver
::xotcl::Class create ::xo::db::DB-postgresql -superclass {::xo::db::DB ::xo::db::postgresql}
::xotcl::Class create ::xo::db::DB-oracle -superclass {::xo::db::DB ::xo::db::oracle}
@@ -674,7 +674,7 @@
set varName ::xo::prepared($session_id,$key)
} on error {errorMsg} {
set session_id "-"
- set varName __prepared($key)
+ set varName __prepared($key)
}
if {![info exists $varName]} {
@@ -730,14 +730,36 @@
:property package_key:required
:property maxentry:integer
:property {default_size:integer 10000}
-
+
:public method flush {key} {
::xo::clusterwide ns_cache flush ${:name} $key
}
-
+
+ if {[info commands ns_cache_eval] ne ""} {
+ #
+ # NaviServer variant
+ #
+ :public method eval {key body} {
+ :uplevel [list ns_cache_eval -- ${:name} $key $body]
+ }
+ :public method set {key value} {
+ :uplevel [list ns_cache_eval -force -- ${:name} $key [list set _ $value]]
+ }
+ } else {
+ #
+ # AOLerver variant
+ #
+ :public method eval {key body} {
+ :uplevel [list ns_cache eval ${:name} $key $body]
+ }
+ :public method set {key value} {
+ :uplevel [list ns_cache set ${:name} $key $value]
+ }
+ }
+
:public method init {} {
set :name [namespace tail [current]]
-
+
if {[info commands ns_cache_create] ne ""} {
#
# Version for NaviServer, which allows us to provide maximum
@@ -756,13 +778,13 @@
-size [parameter::get_from_package_key \
-package_key ${:package_key} \
-parameter ${:parameter} \
- -default ${:default_size}]
+ -default ${:default_size}]
}
}
}
-
-
+
+
##########################################################################
#
# The ns_caches below should exist, before any cached objects are
@@ -789,16 +811,19 @@
-package_key xotcl-core \
-parameter XOTclObjectCacheSize \
-default_size 400000
+ ns_log notice "... created ::xo::xotcl_object_cache"
- ::xo::Cache create xotcl_object_type_cache \
+ ::xo::Cache create ::xo::xotcl_object_type_cache \
-package_key xotcl-core \
-parameter XOTclObjectTypeCacheSize \
-default_size 50000
-
- ::xo::Cache create xotcl_package_cache \
+ ns_log notice "... created ::xo::xotcl_object_type_cache"
+
+ ::xo::Cache create ::xo::xotcl_package_cache \
-package_key xotcl-core \
-parameter XOTclPackageCacheSize \
- -default_size 10000
+ -default_size 10000
+ ns_log notice "... created ::xo::xotcl_package_cache"
}
@@ -816,7 +841,7 @@
::xo::dc has_hstore
}
-
+
::xotcl::Object create require
require proc exists_table {name} {
@@ -920,8 +945,8 @@
# postgres could avoid this check and use 'if not exists' from
# version 9.5
if {[::xo::dc 0or1row exists "
- SELECT 1 FROM information_schema.sequences
- WHERE sequence_schema = 'public'
+ SELECT 1 FROM information_schema.sequences
+ WHERE sequence_schema = 'public'
AND sequence_name = :name"]} return
}
@@ -942,7 +967,7 @@
lappend clause "NO"
}
lappend clause "CYCLE"
- lappend clause "CACHE $cache"
+ lappend clause "CACHE $cache"
::xo::dc dml create-seq "
CREATE SEQUENCE $name [join $clause]"
}
@@ -1093,7 +1118,7 @@
@return object_type, typically an XOTcl class
} {
- return [ns_cache eval xotcl_object_type_cache $id {
+ xo::xotcl_object_type_cache eval $id {
::xo::dc 1row get_class "select object_type from acs_objects where object_id=:id"
return $object_type
}]
@@ -1419,7 +1444,7 @@
set ::xo::db::sql_suffix(postgresql,content_item,set_live_revision) "FOR NO KEY UPDATE"
set ::xo::db::sql_suffix(postgresql,content_item,del) "FOR UPDATE"
set ::xo::db::sql_suffix(postgresql,content_item,new) "FOR UPDATE"
-
+
::xo::db::DB instproc psql_statement_suffix {package_name object_name} {
set key ::xo::db::sql_suffix(${:dialect},$package_name,$object_name)
return [expr {[info exists $key] ? [set $key] : ""}]
@@ -2754,7 +2779,7 @@
lappend result "([ns_dbquotevalue $e $type])"
}
return "(values [join $result ,])"
- }
+ }
}
::xo::library source_dependent
Index: openacs-4/packages/xotcl-core/tcl/cr-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-core/tcl/cr-procs.tcl,v
diff -u -r1.66 -r1.67
--- openacs-4/packages/xotcl-core/tcl/cr-procs.tcl 21 Jun 2018 09:19:51 -0000 1.66
+++ openacs-4/packages/xotcl-core/tcl/cr-procs.tcl 22 Jun 2018 11:56:11 -0000 1.67
@@ -1019,8 +1019,8 @@
-revision_id $revision_id \
-publish_status $publish_status \
-is_latest $is_latest
- ::xo::xotcl_object_cache flush ::${:item_id}
- ::xo::xotcl_object_cache flush ::$revision_id
+ ::xo::xotcl_object_cache flush ${:item_id}
+ ::xo::xotcl_object_cache flush $revision_id
}
CrItem ad_instproc update_item_index {} {
@@ -1475,7 +1475,7 @@
Because of this, we cannot simply create the instances of CrFolder using the
"standard naming convention". Instead we create them as ::cr_folder
} {
- set object ::cr_folder$item_id
+ set object ::$item_id
if {![:isobject $object]} {
:fetch_object -object $object -item_id $item_id -initialize $initialize
$object destroy_on_cleanup
@@ -1548,7 +1548,7 @@
-folder_id ${:folder_id} \
-content_types [[self class] set allowed_content_types]
}
- ::xo::xotcl_object_cache flush ::${:parent_id}
+ ::xo::xotcl_object_cache flush ${:parent_id}
# who is setting sub_folder_list?
#db_flush_cache -cache_key_pattern sub_folder_list_*
return ${:folder_id}
@@ -1593,7 +1593,7 @@
-object:required
{-initialize:boolean true}
} {
- set serialized_object [ns_cache eval xotcl_object_cache $object {
+ set serialized_object [::xo::xotcl_object_cache eval [string trimleft $object :] {
# :log "--CACHE true fetch [self args], call shadowed method [self next]"
set loaded_from_db 1
# Call the showdowed method with initializing turned off. We
@@ -1626,7 +1626,7 @@
CrCache instproc delete {-item_id} {
next
- ::xo::xotcl_object_cache flush ::$item_id
+ ::xo::xotcl_object_cache flush $item_id
# we should probably flush as well cached revisions
}
@@ -1697,7 +1697,7 @@
# cache only names with IDs
set obj [self]
set canonical_name ::[$obj item_id]
- ::xo::xotcl_object_cache flush $obj
+ ::xo::xotcl_object_cache flush [string trimleft $obj :]
if {$obj eq $canonical_name} {
# :log "--CACHE saving $obj in cache"
#
@@ -1712,21 +1712,22 @@
set mixins [$obj info mixin]
$obj mixin [list]
set npv [$obj remove_non_persistent_vars]
- ns_cache set xotcl_object_cache $obj [$obj serialize]
+ ::xo::xotcl_object_cache set [string trimleft $obj :] [$obj serialize]
$obj set_non_persistent_vars $npv
$obj mixin $mixins
} else {
#
# In any case, flush the canonical name.
#
- ::xo::xotcl_object_cache flush $canonical_name
+ ::xo::xotcl_object_cache flush [string trimleft $canonical_name :]
}
# To be on he safe side, delete the revison as well from the
# cache, if possible.
if {[$obj exists revision_id]} {
- set revision_name ::[$obj revision_id]
- if {$obj ne $revision_name} {
- ::xo::xotcl_object_cache flush $revision_name
+ set revision_id [$obj revision_id]
+ set revision_obj ::$revision_id
+ if {$obj ne $revision_obj} {
+ ::xo::xotcl_object_cache flush $revision_id
}
}
}
@@ -1746,16 +1747,10 @@
}
CrCache::Item instproc save_new args {
set item_id [next]
- #
- # The following approach will now work nicely, we would have to
- # rename the object caching this does not seem important here, the
- # next fetch will cache it anyhow.
- #
- #ns_cache set xotcl_object_cache $item_id [::Serializer deepSerialize [self]]
return $item_id
}
CrCache::Item instproc delete args {
- ::xo::xotcl_object_cache flush [self]
+ ::xo::xotcl_object_cache flush [string trimleft [self] :]
# :msg "delete flush xotcl_object_type_cache ${:parent_id}-[:name]"
::xo::clusterwide ns_cache flush xotcl_object_type_cache ${:parent_id}-[:name]
next
Index: openacs-4/packages/xowiki/xowiki.info
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/xowiki.info,v
diff -u -r1.165 -r1.166
--- openacs-4/packages/xowiki/xowiki.info 21 Jun 2018 07:23:56 -0000 1.165
+++ openacs-4/packages/xowiki/xowiki.info 22 Jun 2018 11:56:11 -0000 1.166
@@ -10,7 +10,7 @@
t
xowiki
-
+
Gustaf Neumann
A xotcl-based enterprise wiki system with multiple object types
2017-08-06
@@ -55,10 +55,10 @@
BSD-Style
2
-
+
-
+
Index: openacs-4/packages/xowiki/tcl/package-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/package-procs.tcl,v
diff -u -r1.320 -r1.321
--- openacs-4/packages/xowiki/tcl/package-procs.tcl 21 Jun 2018 09:19:51 -0000 1.320
+++ openacs-4/packages/xowiki/tcl/package-procs.tcl 22 Jun 2018 11:56:11 -0000 1.321
@@ -2417,8 +2417,8 @@
}
Package instproc delete_revision {-revision_id:required -item_id:required} {
- ::xo::xotcl_object_cache flush ::$item_id
- ::xo::xotcl_object_cache flush ::$revision_id
+ ::xo::xotcl_object_cache flush $item_id
+ ::xo::xotcl_object_cache flush $revision_id
::xo::db::sql::content_revision del -revision_id $revision_id
}
@@ -2567,7 +2567,7 @@
:flush_references -item_id $item_id -name $name -parent_id $parent_id
:flush_page_fragment_cache -scope agg
- ::xo::xotcl_object_cache flush ::$item_id
+ ::xo::xotcl_object_cache flush $item_id
#
# Clear potentially cached revisions. The function could be
@@ -2577,7 +2577,7 @@
foreach revision_id [::xo::dc list get_revisions {
select revision_id from cr_revisions where item_id = :item_id
}] {
- ::xo::xotcl_object_cache flush ::$revision_id
+ ::xo::xotcl_object_cache flush $revision_id
}
}
Index: openacs-4/packages/xowiki/tcl/xowiki-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-procs.tcl,v
diff -u -r1.526 -r1.527
--- openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 21 Jun 2018 09:19:52 -0000 1.526
+++ openacs-4/packages/xowiki/tcl/xowiki-procs.tcl 22 Jun 2018 11:56:11 -0000 1.527
@@ -3643,7 +3643,7 @@
$payload init
} on error {errorMsg} {
ad_log error "xowiki::Object set_payload: content $cmd lead to error: $errorMsg"
- ::xo::xotcl_object_cache flush ::${:item_id}
+ ::xo::xotcl_object_cache flush ${:item_id}
}
}
Index: openacs-4/packages/xowiki/tcl/xowiki-utility-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/xowiki-utility-procs.tcl,v
diff -u -r1.51 -r1.52
--- openacs-4/packages/xowiki/tcl/xowiki-utility-procs.tcl 21 Jun 2018 09:19:52 -0000 1.51
+++ openacs-4/packages/xowiki/tcl/xowiki-utility-procs.tcl 22 Jun 2018 11:56:11 -0000 1.52
@@ -431,7 +431,7 @@
proc ::xowiki::page_order_uses_ltree {} {
if {[::xo::dc has_ltree]} {
- ns_cache eval xotcl_object_cache ::xowiki::page_order_uses_ltree {
+ ::xo::xotcl_object_type_cache eval ::xowiki::page_order_uses_ltree {
return [::xo::dc get_value check_po_ltree {
select count(*) from pg_attribute a, pg_type t, pg_class c
where attname = 'page_order' and a.atttypid = t.oid and c.oid = a.attrelid
@@ -484,9 +484,9 @@
::xo::dc dml chg5 "update acs_objects set object_type = '::xowiki::FormPage' where object_id = :revision_id"
::xo::dc dml chg6 "update cr_items set content_type = '::xowiki::FormPage', publish_status = 'ready', live_revision = :revision_id, latest_revision = :revision_id where item_id = :item_id"
- ::xo::xotcl_object_cache flush ::$package_id
- ::xo::xotcl_object_cache flush ::$item_id
- ::xo::xotcl_object_cache flush ::$revision_id
+ ::xo::xotcl_object_cache flush $package_id
+ ::xo::xotcl_object_cache flush $item_id
+ ::xo::xotcl_object_cache flush $revision_id
::xo::clusterwide ns_cache flush xotcl_object_type_cache root-folder-$package_id
::xo::clusterwide ns_cache flush xotcl_object_type_cache $item_id
::xo::clusterwide ns_cache flush xotcl_object_type_cache $revision_id
@@ -821,8 +821,8 @@
#ns_log notice "--cpo UPDATE $page_id new_page_order $new_page_order"
$temp_obj item_id $item_id
$temp_obj update_attribute_from_slot -revision_id $page_id $slot $new_page_order
- ::xo::xotcl_object_cache flush ::$item_id
- ::xo::xotcl_object_cache flush ::$page_id
+ ::xo::xotcl_object_cache flush $item_id
+ ::xo::xotcl_object_cache flush $page_id
}
}
#