Skip to content
This repository was archived by the owner on Oct 29, 2020. It is now read-only.

Commit

Permalink
Added chain, void and sqlite3 cache providers. Improved couchbase pro…
Browse files Browse the repository at this point in the history
…vider support to accept a possible connection service id.
  • Loading branch information
guilhermeblanco committed Feb 1, 2015
1 parent f9486f0 commit 908cf48
Show file tree
Hide file tree
Showing 21 changed files with 626 additions and 122 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ build
composer.phar
composer.lock
phpunit.xml
cache.db
52 changes: 50 additions & 2 deletions DependencyInjection/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -177,18 +177,21 @@ public function getConfigTreeBuilder()
->scalarNode('type')->defaultNull()->end()
->append($this->addBasicProviderNode('apc'))
->append($this->addBasicProviderNode('array'))
->append($this->addBasicProviderNode('xcache'))
->append($this->addBasicProviderNode('void'))
->append($this->addBasicProviderNode('wincache'))
->append($this->addBasicProviderNode('xcache'))
->append($this->addBasicProviderNode('zenddata'))
->append($this->addCustomProviderNode())
->append($this->addCouchbaseNode())
->append($this->addChainNode())
->append($this->addMemcachedNode())
->append($this->addMemcacheNode())
->append($this->addCouchbaseNode())
->append($this->addFileSystemNode())
->append($this->addPhpFileNode())
->append($this->addMongoNode())
->append($this->addRedisNode())
->append($this->addRiakNode())
->append($this->addSqlite3Node())
->end()
->fixXmlConfig('alias', 'aliases')
->children()
Expand Down Expand Up @@ -240,6 +243,28 @@ private function addCustomProviderNode()
return $node;
}

/**
* Build chain node configuration definition
*
* @return \Symfony\Component\Config\Definition\Builder\TreeBuilder
*/
private function addChainNode()
{
$builder = new TreeBuilder();
$node = $builder->root('chain');

$node
->fixXmlConfig('provider')
->children()
->arrayNode('providers')
->prototype('scalar')->end()
->end()
->end()
;

return $node;
}

/**
* Build memcache node configuration definition
*
Expand Down Expand Up @@ -396,6 +421,7 @@ private function addCouchbaseNode()
->addDefaultsIfNotSet()
->fixXmlConfig('hostname')
->children()
->scalarNode('connection_id')->defaultNull()->end()
->arrayNode('hostnames')
->prototype('scalar')->end()
->defaultValue(array('%doctrine_cache.couchbase.hostnames%'))
Expand Down Expand Up @@ -474,4 +500,26 @@ private function addFileSystemNode()

return $node;
}

/**
* Build sqlite3 node configuration definition
*
* @return \Symfony\Component\Config\Definition\Builder\TreeBuilder
*/
private function addSqlite3Node()
{
$builder = new TreeBuilder();
$node = $builder->root('sqlite3');

$node
->addDefaultsIfNotSet()
->children()
->scalarNode('connection_id')->defaultNull()->end()
->scalarNode('file_name')->defaultNull()->end()
->scalarNode('table_name')->defaultNull()->end()
->end()
;

return $node;
}
}
57 changes: 57 additions & 0 deletions DependencyInjection/Definition/ChainDefinition.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Doctrine\Bundle\DoctrineCacheBundle\DependencyInjection\Definition;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;

/**
* Chain definition.
*
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
*/
class ChainDefinition extends CacheDefinition
{
/**
* {@inheritDoc}
*/
public function configure($name, array $config, Definition $service, ContainerBuilder $container)
{
$providersConf = $config['chain'];
$providers = $this->getProviders($name, $providersConf, $container);

$service->setArguments(array($providers));
}

/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return array
*/
private function getProviders($name, array $config, ContainerBuilder $container)
{
$providers = array();

foreach ($config['providers'] as $provider) {
if (strpos($provider, 'doctrine_cache.providers.') === false) {
$provider = sprintf('doctrine_cache.providers.%s', $provider);
}

$providers[] = new Reference($provider);
}

return $providers;
}
}
37 changes: 29 additions & 8 deletions DependencyInjection/Definition/CouchbaseDefinition.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;

/**
* Couchbase definition.
Expand All @@ -26,16 +27,36 @@ class CouchbaseDefinition extends CacheDefinition
*/
public function configure($name, array $config, Definition $service, ContainerBuilder $container)
{
$host = $config['couchbase']['hostnames'];
$user = $config['couchbase']['username'];
$pass = $config['couchbase']['password'];
$bucket = $config['couchbase']['bucket_name'];
$connClass = '%doctrine_cache.couchbase.connection.class%';
$connId = sprintf('doctrine_cache.services.%s_couchbase.connection', $name);
$connDef = new Definition($connClass, array($host, $user, $pass, $bucket));
$couchbaseConf = $config['couchbase'];
$connRef = $this->getConnectionReference($name, $couchbaseConf, $container);

$service->addMethodCall('setCouchbase', array($connRef));
}

/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return \Symfony\Component\DependencyInjection\Reference
*/
private function getConnectionReference($name, array $config, ContainerBuilder $container)
{
if (isset($config['connection_id'])) {
return new Reference($config['connection_id']);
}

$host = $config['hostnames'];
$user = $config['username'];
$pass = $config['password'];
$bucket = $config['bucket_name'];
$connClass = '%doctrine_cache.couchbase.connection.class%';
$connId = sprintf('doctrine_cache.services.%s_couchbase.connection', $name);
$connDef = new Definition($connClass, array($host, $user, $pass, $bucket));

$connDef->setPublic(false);
$container->setDefinition($connId, $connDef);
$service->addMethodCall('setCouchbase', array($connDef));

return new Reference($connId);
}
}
2 changes: 2 additions & 0 deletions DependencyInjection/Definition/MongodbDefinition.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ private function getConnectionReference($name, array $config, ContainerBuilder $
$connId = sprintf('doctrine_cache.services.%s.connection', $name);
$connDef = new Definition($connClass, array($server));

$connDef->setPublic(false);
$connDef->addMethodCall('connect');

$container->setDefinition($connId, $connDef);

return new Reference($connId);
Expand Down
60 changes: 60 additions & 0 deletions DependencyInjection/Definition/Sqlite3Definition.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
<?php

/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/

namespace Doctrine\Bundle\DoctrineCacheBundle\DependencyInjection\Definition;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
use Symfony\Component\DependencyInjection\Reference;

/**
* Sqlite3 definition.
*
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
*/
class Sqlite3Definition extends CacheDefinition
{
/**
* {@inheritDoc}
*/
public function configure($name, array $config, Definition $service, ContainerBuilder $container)
{
$sqlite3Conf = $config['sqlite3'];
$tableName = $sqlite3Conf['table_name'];
$connectionRef = $this->getConnectionReference($name, $sqlite3Conf, $container);

$service->setArguments(array($connectionRef, $tableName));
}

/**
* @param string $name
* @param array $config
* @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
*
* @return \Symfony\Component\DependencyInjection\Reference
*/
private function getConnectionReference($name, array $config, ContainerBuilder $container)
{
if (isset($config['connection_id'])) {
return new Reference($config['connection_id']);
}

$fileName = $config['file_name'];
$connClass = '%doctrine_cache.sqlite3.connection.class%';
$connId = sprintf('doctrine_cache.services.%s.connection', $name);
$connDef = new Definition($connClass, array($fileName, SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE));

$connDef->setPublic(false);
$container->setDefinition($connId, $connDef);

return new Reference($connId);
}
}
25 changes: 22 additions & 3 deletions Resources/config/schema/doctrine_cache-1.0.xsd
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,16 @@
<xsd:element name="namespace" type="xsd:string"/>
<xsd:element name="alias" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
<xsd:choice minOccurs="0" maxOccurs="1">
<xsd:element name="chain" type="chain_provider"/>
<xsd:element name="couchbase" type="couchbase_provider"/>
<xsd:element name="file-system" type="filesystem_provider"/>
<xsd:element name="memcached" type="memcached_provider"/>
<xsd:element name="memcache" type="memcache_provider"/>
<xsd:element name="mongodb" type="mongodb_provider"/>
<xsd:element name="php-file" type="phpfile_provider"/>
<xsd:element name="redis" type="redis_provider"/>
<xsd:element name="couchbase" type="couchbase_provider"/>
<xsd:element name="riak" type="riak_provider"/>
<xsd:element name="php-file" type="phpfile_provider"/>
<xsd:element name="file-system" type="filesystem_provider"/>
<xsd:element name="sqlite3" type="sqlite3_provider"/>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
Expand Down Expand Up @@ -170,4 +172,21 @@
<xsd:attribute name="directory" type="xsd:string"/>
</xsd:complexType>

<!-- sqlite3 -->
<xsd:complexType name="sqlite3_provider">
<xsd:sequence>
<xsd:element name="file-name" type="xsd:string" minOccurs="0" maxOccurs="1" />
<xsd:element name="table-name" type="xsd:string" minOccurs="0" maxOccurs="1" />
</xsd:sequence>
<xsd:attribute name="file-name" type="xsd:string"/>
<xsd:attribute name="table-name" type="xsd:string"/>
</xsd:complexType>

<!-- chain -->
<xsd:complexType name="chain_provider">
<xsd:sequence>
<xsd:element name="provider" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>

</xsd:schema>
39 changes: 23 additions & 16 deletions Resources/config/services.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,18 +7,12 @@
<parameters>
<parameter key="doctrine_cache.apc.class">Doctrine\Common\Cache\ApcCache</parameter>
<parameter key="doctrine_cache.array.class">Doctrine\Common\Cache\ArrayCache</parameter>
<parameter key="doctrine_cache.chain.class">Doctrine\Common\Cache\ChainCache</parameter>
<parameter key="doctrine_cache.couchbase.class">Doctrine\Common\Cache\CouchbaseCache</parameter>
<parameter key="doctrine_cache.couchbase.connection.class">Couchbase</parameter>
<parameter key="doctrine_cache.couchbase.hostnames">localhost:8091</parameter>
<parameter key="doctrine_cache.file_system.class">Doctrine\Common\Cache\FilesystemCache</parameter>
<parameter key="doctrine_cache.php_file.class">Doctrine\Common\Cache\PhpFileCache</parameter>
<parameter key="doctrine_cache.mongodb.class">Doctrine\Common\Cache\MongoDBCache</parameter>
<parameter key="doctrine_cache.mongodb.collection.class">MongoCollection</parameter>
<parameter key="doctrine_cache.mongodb.connection.class">MongoClient</parameter>
<parameter key="doctrine_cache.mongodb.server">localhost:27017</parameter>
<parameter key="doctrine_cache.riak.class">Doctrine\Common\Cache\RiakCache</parameter>
<parameter key="doctrine_cache.riak.bucket.class">Riak\Bucket</parameter>
<parameter key="doctrine_cache.riak.connection.class">Riak\Connection</parameter>
<parameter key="doctrine_cache.riak.bucket_property_list.class">Riak\BucketPropertyList</parameter>
<parameter key="doctrine_cache.riak.host">localhost</parameter>
<parameter key="doctrine_cache.riak.port">8087</parameter>
<parameter key="doctrine_cache.memcache.class">Doctrine\Common\Cache\MemcacheCache</parameter>
<parameter key="doctrine_cache.memcache.connection.class">Memcache</parameter>
<parameter key="doctrine_cache.memcache.host">localhost</parameter>
Expand All @@ -27,13 +21,23 @@
<parameter key="doctrine_cache.memcached.connection.class">Memcached</parameter>
<parameter key="doctrine_cache.memcached.host">localhost</parameter>
<parameter key="doctrine_cache.memcached.port">11211</parameter>
<parameter key="doctrine_cache.mongodb.class">Doctrine\Common\Cache\MongoDBCache</parameter>
<parameter key="doctrine_cache.mongodb.collection.class">MongoCollection</parameter>
<parameter key="doctrine_cache.mongodb.connection.class">MongoClient</parameter>
<parameter key="doctrine_cache.mongodb.server">localhost:27017</parameter>
<parameter key="doctrine_cache.redis.class">Doctrine\Common\Cache\RedisCache</parameter>
<parameter key="doctrine_cache.redis.connection.class">Redis</parameter>
<parameter key="doctrine_cache.redis.host">localhost</parameter>
<parameter key="doctrine_cache.redis.port">6379</parameter>
<parameter key="doctrine_cache.couchbase.class">Doctrine\Common\Cache\CouchbaseCache</parameter>
<parameter key="doctrine_cache.couchbase.connection.class">Couchbase</parameter>
<parameter key="doctrine_cache.couchbase.hostnames">localhost:8091</parameter>
<parameter key="doctrine_cache.riak.class">Doctrine\Common\Cache\RiakCache</parameter>
<parameter key="doctrine_cache.riak.bucket.class">Riak\Bucket</parameter>
<parameter key="doctrine_cache.riak.connection.class">Riak\Connection</parameter>
<parameter key="doctrine_cache.riak.bucket_property_list.class">Riak\BucketPropertyList</parameter>
<parameter key="doctrine_cache.riak.host">localhost</parameter>
<parameter key="doctrine_cache.riak.port">8087</parameter>
<parameter key="doctrine_cache.sqlite3.class">Doctrine\Common\Cache\SQLite3Cache</parameter>
<parameter key="doctrine_cache.sqlite3.connection.class">SQLite3</parameter>
<parameter key="doctrine_cache.void.class">Doctrine\Common\Cache\VoidCache</parameter>
<parameter key="doctrine_cache.wincache.class">Doctrine\Common\Cache\WinCacheCache</parameter>
<parameter key="doctrine_cache.xcache.class">Doctrine\Common\Cache\XcacheCache</parameter>
<parameter key="doctrine_cache.zenddata.class">Doctrine\Common\Cache\ZendDataCache</parameter>
Expand All @@ -43,17 +47,20 @@
<services>
<service id="doctrine_cache.abstract.apc" class="%doctrine_cache.apc.class%" abstract="true" />
<service id="doctrine_cache.abstract.array" class="%doctrine_cache.array.class%" abstract="true" />
<service id="doctrine_cache.abstract.chain" class="%doctrine_cache.chain.class%" abstract="true" />
<service id="doctrine_cache.abstract.couchbase" class="%doctrine_cache.couchbase.class%" abstract="true" />
<service id="doctrine_cache.abstract.file_system" class="%doctrine_cache.file_system.class%" abstract="true" />
<service id="doctrine_cache.abstract.php_file" class="%doctrine_cache.php_file.class%" abstract="true" />
<service id="doctrine_cache.abstract.memcache" class="%doctrine_cache.memcache.class%" abstract="true" />
<service id="doctrine_cache.abstract.memcached" class="%doctrine_cache.memcached.class%" abstract="true" />
<service id="doctrine_cache.abstract.mongodb" class="%doctrine_cache.mongodb.class%" abstract="true" />
<service id="doctrine_cache.abstract.redis" class="%doctrine_cache.redis.class%" abstract="true" />
<service id="doctrine_cache.abstract.riak" class="%doctrine_cache.riak.class%" abstract="true" />
<service id="doctrine_cache.abstract.sqlite3" class="%doctrine_cache.sqlite3.class%" abstract="true" />
<service id="doctrine_cache.abstract.void" class="%doctrine_cache.void.class%" abstract="true" />
<service id="doctrine_cache.abstract.wincache" class="%doctrine_cache.wincache.class%" abstract="true" />
<service id="doctrine_cache.abstract.xcache" class="%doctrine_cache.xcache.class%" abstract="true" />
<service id="doctrine_cache.abstract.zenddata" class="%doctrine_cache.zenddata.class%" abstract="true" />
<service id="doctrine_cache.abstract.mongodb" class="%doctrine_cache.mongodb.class%" abstract="true" />
<service id="doctrine_cache.abstract.riak" class="%doctrine_cache.riak.class%" abstract="true" />
<service id="doctrine_cache.abstract.couchbase" class="%doctrine_cache.couchbase.class%" abstract="true" />
</services>

</container>
Loading

0 comments on commit 908cf48

Please sign in to comment.