From 66533b9970cbdf8addd8f4275c8ff450171e0659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20Hrani=C4=8Dka?= Date: Mon, 16 Mar 2015 22:27:36 +0100 Subject: [PATCH 1/3] GroupedSelection: Rows are refetched when cache is invalid [Closes #15] --- src/Database/Table/GroupedSelection.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Database/Table/GroupedSelection.php b/src/Database/Table/GroupedSelection.php index e6ae366ba..543d36440 100644 --- a/src/Database/Table/GroupedSelection.php +++ b/src/Database/Table/GroupedSelection.php @@ -202,6 +202,11 @@ protected function loadRefCache() if (isset($referencing[$hash]['data'][$this->active])) { $this->data = & $referencing[$hash]['data'][$this->active]; } + + // something went wrong with the cache + if ($this->rows === NULL && isset($this->refCacheCurrent['data'])) { + $this->emptyResultSet(); + } } From 8d27795c4608ef590f4261a9fe5bdf2291cab786 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20Hrani=C4=8Dka?= Date: Thu, 26 Mar 2015 23:05:29 +0100 Subject: [PATCH 2/3] GroupedSelection:execute is launched also when $rows === NULL [Rel #15] --- src/Database/Table/GroupedSelection.php | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/Database/Table/GroupedSelection.php b/src/Database/Table/GroupedSelection.php index 543d36440..badc169ee 100644 --- a/src/Database/Table/GroupedSelection.php +++ b/src/Database/Table/GroupedSelection.php @@ -134,7 +134,7 @@ protected function execute() $accessedColumns = $this->accessedColumns; $this->loadRefCache(); - if (!isset($this->refCacheCurrent['data'])) { + if (!isset($this->refCacheCurrent['data']) || $this->rows === NULL) { // we have not fetched any data yet => init accessedColumns by cached accessedColumns $this->accessedColumns = $accessedColumns; @@ -202,11 +202,6 @@ protected function loadRefCache() if (isset($referencing[$hash]['data'][$this->active])) { $this->data = & $referencing[$hash]['data'][$this->active]; } - - // something went wrong with the cache - if ($this->rows === NULL && isset($this->refCacheCurrent['data'])) { - $this->emptyResultSet(); - } } From e36423b535b3f1aede47958b08cf617561a4ee37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20Hrani=C4=8Dka?= Date: Thu, 26 Mar 2015 23:08:59 +0100 Subject: [PATCH 3/3] Tests: Insufficient storage mock replaced with MemoryStorage [Rel #15] --- tests/Database/Table/Table.cache.observer.phpt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/tests/Database/Table/Table.cache.observer.phpt b/tests/Database/Table/Table.cache.observer.phpt index c6036b546..9e8f84d91 100644 --- a/tests/Database/Table/Table.cache.observer.phpt +++ b/tests/Database/Table/Table.cache.observer.phpt @@ -5,6 +5,7 @@ * @dataProvider? ../databases.ini */ +use Nette\Caching\Storages\MemoryStorage; use Tester\Assert; use Nette\Database\ResultSet; @@ -13,11 +14,12 @@ require __DIR__ . '/../connect.inc.php'; // create $connection Nette\Database\Helpers::loadFromFile($connection, __DIR__ . "/../files/{$driverName}-nette_test1.sql"); -$cacheStorage = Mockery::mock('Nette\Caching\Istorage'); -$cacheStorage->shouldReceive('read')->withAnyArgs()->once()->andReturn(array('id' => TRUE)); -$cacheStorage->shouldReceive('read')->withAnyArgs()->times(4)->andReturn(array('id' => TRUE, 'author_id' => TRUE)); -$cacheStorage->shouldReceive('write')->with(Mockery::any(), array('id' => TRUE, 'author_id' => TRUE, 'title' => TRUE), array()); +class CacheMock extends MemoryStorage +{ +} + +$cacheStorage = new CacheMock; $context = new Nette\Database\Context($connection, $structure, $conventions, $cacheStorage); $queries = 0; @@ -39,5 +41,5 @@ unset($book, $author); foreach ($stack as $selection) $selection->__destruct(); $authors->__destruct(); -Assert::same(3, $queries); +Assert::same(2, $queries); Mockery::close();