Cache API
This is a development page for the Cache API that we are currently implementing. Talk to EmuWikiAdmin- for more information.
Manual
We have a somewhat working version here : http://www.emuwiki.com/testinstall/extensions/CacheAPI_current.txt
Updated : EmuWikiAdmin- 05:57, 1 July 2009 (UTC)
Installing
For now this SQL command needs to be executed manually before installing :
CREATE TABLE IF NOT EXISTS `cacheapi` ( `dependencies` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `firstdep` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `types` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL , `firsttype` SMALLINT NOT NULL , `page_ids` INT(10) NOT NULL , INDEX ( `firstdep`(30) ) , INDEX ( `firsttype` ) , INDEX ( `page_ids` ) ) ENGINE = MYISAM
Removing dependencies
To remove all dependencies of a page, use CacheAPI::remDependencies ( $idOfThePage ).
Adding dependencies
To add a dependency, use CacheAPI::addDependencies ( $pageid , $types, $conditions );
$types is an array that needs to be as long as the first dimension of the 2-dimensional array $conditions. Values in $types can be :
CACHETYPE_CATEGORY CACHETYPE_TEMPLATE CACHETYPE_LINKSTO CACHETYPE_NOTCATEGORY CACHETYPE_NOTTEMPLATE CACHETYPE_NOTLINKSTO CACHETYPE_LINKSFROM CACHETYPE_NAMESPACE CACHETYPE_NOTNAMESPACE CACHETYPE_OPENREFERENCES CACHETYPE_LINKSTOEXTERNAL CACHETYPE_IMAGEUSED CACHETYPE_IMAGECONTAINER CACHETYPE_TEMPLATESUSEDBY CACHETYPE_CREATEDBY CACHETYPE_NOTCREATEDBY CACHETYPE_MODIFIEDBY CACHETYPE_NOTMODIFIEDBY CACHETYPE_LASTMODIFIEDBY CACHETYPE_NOTLASTMODIFIEDBY CACHETYPE_TITLE CACHETYPE_TITLESHORTERTHAN CACHETYPE_TITLELONGERTHAN CACHETYPE_LASTREVISIONBEFORE CACHETYPE_FIRSTREVISIONSINCE CACHETYPE_ALLREVISIONBEFORE CACHETYPE_ALLREVISIONSINCE CACHETYPE_MAXREVISIONS CACHETYPE_MINREVISIONS CACHETYPE_ARTICLECATEGORY
For now, only Categories are fully implemented for testing but the rest is implemented as dummy and should be fully ready very soon. To avoid performance issues, we will restrict the possible first types in your array. For example, a NOT should not be used as your first type, just as 2nd or more...
$condition is a bidimensional array of category names, template names, title names, etc...
Example
Example with only ANDs
Say we have a DPL invocation like this :
{{#dpl: |allowcachedresults=yes |category = Test&Blablou&Papou |notcategory = Mimi |nottemplate = Stars |include ={Test}:String |format =,,, |secseparators =,%PAGE%, }}
Then the CacheAPI should be called with the following parameters :
$types = array ( CACHETYPE_CATEGORY , CACHETYPE_NOTCATEGORY , CACHETYPE_NOTTEMPLATE ); $conditions = array ( array ( 'Test' , 'Blablou' , 'Papou' ) , array ( 'Mimi' ) , array ( 'Stars' ) ); CacheAPI::addDependencies ( $pageid , $types, $conditions );
Example with ORs
Say we have a DPL invocation like this :
{{#dpl: |allowcachedresults=yes |category = Test|Blablou |notcategory = Mimi |nottemplate = Stars |include ={Test}:String |format =,,, |secseparators =,%PAGE%, }}
Then the CacheAPI should be called 2 times with the following parameters :
$types = array ( CACHETYPE_CATEGORY , CACHETYPE_NOTCATEGORY , CACHETYPE_NOTTEMPLATE ); $conditions = array ( array ( 'Test' ) , array ( 'Mimi' ) , array ( 'Stars' ) ); CacheAPI::addDependencies ( $pageid , $types, $conditions ); $types = array ( CACHETYPE_CATEGORY , CACHETYPE_NOTCATEGORY , CACHETYPE_NOTTEMPLATE ); $conditions = array ( array ( 'Blablou' ) , array ( 'Mimi' ) , array ( 'Stars' ) ); CacheAPI::addDependencies ( $pageid , $types, $conditions );
TODO :
- Implement other types of dependencies (Namespace, linksfrom, etc...) - currently being done
- Implement the NOTs (notcategory, notlinksto, etc...) - currently being done
- Make a better system for deletion of dependencies (right now, the only thing you can do is delete ALL dependencies related to a page at once, this is not good for pages with multiple DPL invocations).
- If you need anything else, add it here.
Feedback and discussion moved here.