Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hacking in support for dbal result cache #165

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 6 additions & 5 deletions DependencyInjection/Configuration.php
Expand Up @@ -134,6 +134,7 @@ private function getDbalConnectionsNode()
->children()
->scalarNode('driver')->defaultValue('pdo_mysql')->end()
->scalarNode('platform_service')->end()
->append($this->getCacheDriverNode('result_cache_driver'))
->scalarNode('schema_filter')->end()
->booleanNode('logging')->defaultValue($this->debug)->end()
->booleanNode('profiling')->defaultValue($this->debug)->end()
Expand Down Expand Up @@ -296,9 +297,9 @@ private function getOrmEntityManagersNode()
->useAttributeAsKey('name')
->prototype('array')
->addDefaultsIfNotSet()
->append($this->getOrmCacheDriverNode('query_cache_driver'))
->append($this->getOrmCacheDriverNode('metadata_cache_driver'))
->append($this->getOrmCacheDriverNode('result_cache_driver'))
->append($this->getCacheDriverNode('query_cache_driver'))
->append($this->getCacheDriverNode('metadata_cache_driver'))
->append($this->getCacheDriverNode('result_cache_driver'))
->children()
->scalarNode('connection')->end()
->scalarNode('class_metadata_factory_name')->defaultValue('Doctrine\ORM\Mapping\ClassMetadataFactory')->end()
Expand Down Expand Up @@ -396,13 +397,13 @@ private function getOrmEntityManagersNode()
}

/**
* Return a ORM cache driver node for an given entity manager
* Return a Doctrine cache driver node for a given connection or entity manager
*
* @param string $name
*
* @return ArrayNodeDefinition
*/
private function getOrmCacheDriverNode($name)
private function getCacheDriverNode($name)
{
$treeBuilder = new TreeBuilder();
$node = $treeBuilder->root($name);
Expand Down
8 changes: 8 additions & 0 deletions DependencyInjection/DoctrineExtension.php
Expand Up @@ -133,6 +133,14 @@ protected function loadDbalConnection($name, array $connection, ContainerBuilder
$configuration->addMethodCall('setSQLLogger', array($logger));
}

if (isset($connection['result_cache_driver']) && $connection['result_cache_driver']) {
/** @todo Alternate solution is needed to address loading cache driver for either dbal or orm */
$connection['name'] = 'dbal.'.$name; # temporary fix to ensure unique to dbal. also see line 140
$this->loadObjectManagerCacheDriver($connection, $container, 'result_cache');
$configuration->addMethodCall('setResultCacheImpl', array(new Reference(sprintf('doctrine.orm.dbal.%s_result_cache', $name))));
unset($connection['result_cache_driver']);
}

// event manager
$def = $container->setDefinition(sprintf('doctrine.dbal.%s_connection.event_manager', $name), new DefinitionDecorator('doctrine.dbal.connection.event_manager'));

Expand Down
19 changes: 19 additions & 0 deletions Resources/config/dbal.xml
Expand Up @@ -17,6 +17,25 @@
<parameter key="doctrine.class">Doctrine\Bundle\DoctrineBundle\Registry</parameter>
<parameter key="doctrine.entity_managers" type="collection"></parameter>
<parameter key="doctrine.default_entity_manager"></parameter>

<!-- cache -->
<parameter key="doctrine.dbal.cache.array.class">Doctrine\Common\Cache\ArrayCache</parameter>
<parameter key="doctrine.dbal.cache.apc.class">Doctrine\Common\Cache\ApcCache</parameter>
<parameter key="doctrine.dbal.cache.memcache.class">Doctrine\Common\Cache\MemcacheCache</parameter>
<parameter key="doctrine.dbal.cache.memcache_host">localhost</parameter>
<parameter key="doctrine.dbal.cache.memcache_port">11211</parameter>
<parameter key="doctrine.dbal.cache.memcache_instance.class">Memcache</parameter>
<parameter key="doctrine.dbal.cache.memcached.class">Doctrine\Common\Cache\MemcachedCache</parameter>
<parameter key="doctrine.dbal.cache.memcached_host">localhost</parameter>
<parameter key="doctrine.dbal.cache.memcached_port">11211</parameter>
<parameter key="doctrine.dbal.cache.memcached_instance.class">Memcached</parameter>
<parameter key="doctrine.dbal.cache.redis.class">Doctrine\Common\Cache\RedisCache</parameter>
<parameter key="doctrine.dbal.cache.redis_host">localhost</parameter>
<parameter key="doctrine.dbal.cache.redis_port">6379</parameter>
<parameter key="doctrine.dbal.cache.redis_instance.class">Redis</parameter>
<parameter key="doctrine.dbal.cache.xcache.class">Doctrine\Common\Cache\XcacheCache</parameter>
<parameter key="doctrine.dbal.cache.wincache.class">Doctrine\Common\Cache\WinCacheCache</parameter>
<parameter key="doctrine.dbal.cache.zenddata.class">Doctrine\Common\Cache\ZendDataCache</parameter>
</parameters>

<services>
Expand Down
13 changes: 9 additions & 4 deletions Resources/config/schema/doctrine-1.0.xsd
Expand Up @@ -14,17 +14,22 @@
</xsd:complexType>
</xsd:element>

<xsd:attributeGroup name="connection-config">
<xsd:complexType name="connection-config">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="result-cache-driver" type="cache_driver" minOccurs="0" maxOccurs="1" />
</xsd:choice>

<xsd:attribute name="driver" type="xsd:string" />
<xsd:attribute name="driver-class" type="xsd:string" />
<xsd:attribute name="wrapper-class" type="xsd:string" />
<xsd:attribute name="keep-slave" type="xsd:string" />
<xsd:attribute name="platform-service" type="xsd:string" />
<xsd:attribute name="result-cache-driver" type="xsd:string" />
<xsd:attribute name="schema-filter" type="xsd:string" />
<xsd:attribute name="logging" type="xsd:string" default="false" />
<xsd:attribute name="profiling" type="xsd:string" default="false" />
<xsd:attributeGroup ref="driver-config" />
</xsd:attributeGroup>
</xsd:complexType>

<xsd:attributeGroup name="driver-config">
<xsd:attribute name="dbname" type="xsd:string" />
Expand Down Expand Up @@ -54,7 +59,7 @@
</xsd:choice>

<xsd:attribute name="default-connection" type="xsd:string" />
<xsd:attributeGroup ref="connection-config" />
<xsd:attribute name="connection-config" type="connection-config" />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is wrong. You cannot have an attribute being a complexType.

</xsd:complexType>

<xsd:complexType name="option">
Expand Down Expand Up @@ -88,7 +93,7 @@
<xsd:element name="slave" type="slave" />
</xsd:choice>
<xsd:attribute name="name" type="xsd:string" use="required" />
<xsd:attributeGroup ref="connection-config" />
<xsd:attribute name="connection-config" type="connection-config" />
</xsd:complexType>

<xsd:complexType name="slave">
Expand Down