name
- name of the topic
parent
- name of parent topic
_up
- reference to the Map of the parent topic, if it exists
attachments
- array of Maps, each of which contains: _up
- reference to the Map for the topic
name
- attachment name
attr
- e.g hidden
comment
- attachment comment
path
- client path used to upload attachment
size
- size in Kb
user
- who uploaded the attachment
version
- e.g. 1.3
info
- Map containing: _up
- reference to the Map for the topic
author
- most recent author
date
- date of last change
format
- topic format version
version
- topic version number
moved
- Map containing: _up
- reference to the Map for the topic
by
- who moved it
date
- when they moved it
from
- where they moved it from
to
- where they moved it to
form
- form type
MyForm
. This is a reference to a Map containing a key for each field in the form. Each key maps to the value in the form data for that key. The Map will also have an _up
reference to the Map for the topic.
text
- raw text of the topic)
info
, form name, moved
, and each row in attachments
also have a reference back to the topic Map, called _up
.
Other fields may be added by subclasses. Refer to the documentation for the plugin that is using the DBCache for more details.
{RCS}{WorkAreaDir}
in configure
). If any topic changes in the web, this cache is automatically rebuilt. The cache file can be deleted at any point with no ill effects.
TWiki::Contrib::DBCacheContrib
class. The following POD documentation describes the methods of this class and the various other classes provided by the plugin..
use TWiki::Contrib::DBCacheContrib; $db = new TWiki::Contrib::DBCacheContrib( $web ); # always done $db->load(); # may be always done, or only on demand when a tag is parsed that needs it # the DB is a hash of topics keyed on their name foreach my $topic ($db->getKeys()) { my $attachments = $db->get($topic)->get("attachments"); # attachments is an array foreach my $val ($attachments->getValues()) { my $aname = $attachments->get("name"); my $acomment = $attachments->get("comment"); my $adate = $attachments->get("date"); ... } }As topics are loaded, the readTopicLine method gives subclasses an opportunity to apply special processing to indivual lines, for example to extract special syntax such as %ACTION lines, or embedded tables in the text. See FormQueryPlugin for an example of this.
new($web, $cacheName)
$web
name of web to create the object for.
$cacheName
name of cache file (default "_DBCache")
$topics
- perl array of topic names that have just been loaded (or reloaded)
,
~ operators) use 'perl' regular expression syntax (google for =perlre
for help). Numbers can be signed integers or decimals. Single quotes in values may be escaped using backslash (\).
The following operators are available:
Operator | Result | Meaning |
---|---|---|
= |
Boolean | LHS exactly matches the regular expression on the RHS. The expression must match the whole string. |
!= |
Boolean | Inverse of = |
=~ |
Boolean | LHS contains RHS i.e. the RHS is found somewhere in the field value. |
< |
Boolean | Numeric < |
> |
Boolean | Numeric > |
>= |
Boolean | Numeric >= |
<= |
Boolean | Numeric <= |
lc |
String | Unary lower case |
uc |
String | Unary UPPER CASE |
EARLIER_THAN |
BOOLEAN | Date is earlier than the given date |
LATER_THAN |
Boolean | LHS is later than the given date (string containing a date e.g. '1 Apr 2003') |
WITHIN_DAYS |
Boolean | Date (which must be in the future) is within n working days of todays date |
! |
Boolean | Unary NOT |
AND |
Boolean | AND |
OR |
Boolean | OR |
() |
any | Bracketed subexpression |
EARLIER_THAN
, LATER_THAN
and WITHIN_DAYS
must be dates in the format expected by Time::ParseDate
(like the ActionTrackerPlugin). WITHIN_DAYS
works out the number of working days (i.e. excluding Saturday and Sunday). Apologies in advance if your weekend is offset ± a day! Integers will automatically be converted to dates, by assuming they represent a number of seconds since midnight GMT on 1st January 1970.
$db = new TWiki::Contrib::DBCacheContrib::DBCache( $web ); # always done $db->load(); my $search = new TWiki::Contrib::DBCacheContrib::Search("date EARLIER_THAN '1st January 2000'"); foreach my $topic ($db->getKeys()) { my $attachments = $topic->get("attachments"); foreach my $val ($attachments->getValues()) { if ($search->matches($val)) { print $val->get("name") . "\n"; } } }A search object implements the "matches" method as its general contract with the rest of the world.
new($string)
$string
- string containing an expression to parse
toString()
-> string %oper
is a hash, containing the following fields: name
- operator string
prec
- operator precedence, positive non-zero integer. Larger number => higher precedence.
arity
- set to 1 if this operator is unary, 2 for binary. Arity 0 is legal, should you ever need it.
exec
- the handler to implement the new operator
TWiki::Contrib::DBCacheContrib::Archive
.
new($file)
$file
- filename
uptodate()
-> boolean toString()
-> string write()
read()
new()
add($object)
$object
any perl data type
find($object)
-> integer remove($index)
$index
- integer index
get($key, $root)
-> datum $k
- key
get("9", $r)
where $n is a number will get the 9th entry in the array
get("[9]", $r)
will also get the 9th entry
get(".9", $r)
will also get the 9th entry
get(".X", $r)
will return the sum of the subfield X
of each entry
get("[?search]", $r)
will perform the given search over the entries in the array. Always returns an array result, even when there is only one result. For example: [?name='Sam']
will return an array of all the entries that have their subfield name
set to Sam
.
#
means "reset to root". So get("#[3]", $r)
will return the 4th entry of $r (assuming $r is an array!).
get("[*X]", $r)
will get a new array made from subfield X of each entry in this array.
get("parent.UserTable[?SubTopic='ThisTopic'].UserName", $web);See also
TWiki::Contrib::DBCacheContrib::Map
for syntax that applies to maps.
size()
-> integer sum($field)
-> number $field
- name of a field in the class of objects stored by this array
search($search)
-> search result $search
- TWiki::Contrib::DBCacheContrib::Search object to use in the search
TWiki::Contrib::DBCacheContrib::Array
of matching entries.
getValues()
-> perl array foreach
toString($limit, $level, $strung)
-> string $limit
- recursion limit for expansion of elements
$level
- currentl recursion level
$archive
- the TWiki::Contrib::DBCacheContrib::Archive being written to
$archive
- the TWiki::Contrib::DBCacheContrib::Archive being read from
name = \w+ | \w+ "." name
The . indicates a field reference in a sub-map.
Objects in the map are either strings, or other objects that must
support toString.
new($string)
fastget($k)
-> datum $k
- key
get($k, $root)
-> datum $k
- key
$root
what # refers to
$k
; return undef if not set.
Subfield syntax get("X",$r)
will get the subfield named X
.
get("X.Y",$r)
will get the subfield Y
of the subfield named X
.
get("[X]",$r) = will get the subfield named =X
(so X[Y] and X.Y are synonymous)..
#
means "reset to root". So get("#.Y", $r) will return the subfield =Y
of $r (assuming $r is a map!), as will get("#[Y]"
.
get("UserTable[0].Surname", $web);See also
TWiki::Contrib::DBCacheContrib::Array
for syntax that applies to arrays.
set($k, $v)
$k
- key
$v
- value
size()
-> integer remove($index)
-> old value $index
- integer index
getKeys()
-> perl array foreach
getValues()
-> perl array foreach
search($search)
-> search result $search
- TWiki::Contrib::DBCacheContrib::Search object to use in the search
TWiki::Contrib::DBCacheContrib::Array
of matching keys.
toString($limit, $level, $strung)
-> string $limit
- recursion limit for expansion of elements
$level
- currentl recursion level
$archive
- the TWiki::Contrib::DBCacheContrib::Archive being written to
$archive
- the TWiki::Contrib::DBCacheContrib::Archive being read from
_updateCache
unless requested. _updateCache
accesses every topic file in the web, so its an unnecessary performance hit. DBCacePlugin now only requests _updateCache
from the afterSaveHandler and from the new REST updateCache handler.
You do not need to install anything in the browser to use this extension. The following instructions are for the administrator who installs the extension on the server where TWiki is running.
Like many other TWiki extensions, this module is shipped with a fully
automatic installer script written using the BuildContrib. configure
interface (Go to Plugins->Find More Extensions) .zip
or .tgz
archives
perl <module>_installer
)
configure
and enable the module, if it is a plugin.
,v
files in your existing install (take care not to lock the files when you check in)
Author: | TWiki:Main.CrawfordCurrie | |||||||||
Copyright: | This code is based on an original development of Motorola Inc. and is protected by the following copyrights: © 2002-2003 Motorola Inc. All Rights Reserved. Portions copyright © 2004. Crawford Currie http://www.c-dot.co.uk © 2004-2011, TWiki:TWiki.TWikiContributor |
|||||||||
License: | As required for the publication of all extensions to TWiki, this software is published under the terms of the GNU General Public License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |||||||||
Version: | 21578 (2011-07-07) | |||||||||
Change History: | ||||||||||
2011-07-07: | TWikibug:Item6711: Small doc fix in Config.spec | |||||||||
2010-04-29: | TWikibug:Item6433: Doc improvements | |||||||||
16347 | remove META data from text hash; include META data in all hash. TWiki:Main/MichaelDaum | |||||||||
16346 | caching all topic elements to an all field to allow th search in all of the text and the formfields like the normal grep-based SEARCH does. TWiki:Main/MichaelDaum |
|||||||||
15868 | fixed WITHIN_DAYS and EARLIER_THAN. TWiki:Main/MichaelDaum | |||||||||
15583 | made query parser pluggable so that other plugins can implement their own predicates. TWiki:Main/MichaelDaum | |||||||||
15019 | added {DBCache}{AlwaysUpdateCache} to remove the updateCache from every operation. TWiki:Main/SvenDowideit | |||||||||
13562 | Bugs:Item3985 - fixed failures with hierarchical webs | |||||||||
13527 | Moved the cache into the extensions work areas, instead of the web directory | |||||||||
12943 | Bugs:Item3659: added automatic conversion of integers to dates | |||||||||
12923 | added REF operator; added link to web object to hashes; fixed parent relation to end in WebHome; added "web" property to topic hashes; caching META:PREFERENCES now | |||||||||
11537 | Added lc and uc operators for case-insensitive searches | |||||||||
9303 | TWikibug:Item1844 - don't die on broken symlinks | |||||||||
8682 | TWikibug:Item1580 - one-char fix that makes the difference | |||||||||
8110 | TWikibug:Item663 - formatting and text fixes | |||||||||
7552 | TWikibug:Item997 - test update | |||||||||
7274 | TWikibug:Item719 - onReload() is not a static method. | |||||||||
7262 | TWikibug:Item719 - MichaelDaum's patch (almost) to correct parameters to onReload | |||||||||
7260 | TWikibug:Item727 - made it clean the form name using normaliseWebTopicName | |||||||||
6353 | TWikibug:Item380 - do as the man says; make all $/ local | |||||||||
5720 | Updated tests | |||||||||
5719 | Fix for correct handling of parent relations | |||||||||
5229 | Small improvement to the way it handles errors from Storable and Archive | |||||||||
5223 | Documentation fixes, adding gifs. | |||||||||
5048 | Cairo readiness | |||||||||
5036 | Split from SharedCode | |||||||||
5031 | Moving to new name | |||||||||
5030 | About to rename | |||||||||
5019 | Improved topic data model, cleaned up tests | |||||||||
5008 | Added extended access syntax, [?], [*] etc. | |||||||||
5006 | Doc fixes | |||||||||
5005 | Poddified documentation | |||||||||
5003 | Initial version | |||||||||
8 Jul 2004 | Initial version, split out from FormQueryPlugin | |||||||||
Dependencies: |
|
|||||||||
Perl Version: | 5.0 | |||||||||
Plugin Home: | http://TWiki.org/cgi-bin/view/Plugins/DBCacheContrib | |||||||||
Feedback: | http://TWiki.org/cgi-bin/view/Plugins/DBCacheContribDev | |||||||||
Appraisal: | http://TWiki.org/cgi-bin/view/Plugins/DBCacheContribAppraisal |