mirror of
https://github.com/silverstripe/silverstripe-fulltextsearch
synced 2024-10-22 12:05:29 +00:00
API Remove bind_manipulation_capture and RequestFilter, use Injector instead
This commit is contained in:
parent
fccac37621
commit
45c402fc4c
@ -1,7 +0,0 @@
|
||||
<?php
|
||||
|
||||
use SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater;
|
||||
|
||||
if (isset($databaseConfig['type'])) {
|
||||
SearchUpdater::bind_manipulation_capture();
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
SilverStripe\Control\RequestProcessor:
|
||||
properties:
|
||||
filters:
|
||||
- '%$SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater_BindManipulationCaptureFilter'
|
@ -1,3 +1,6 @@
|
||||
---
|
||||
Name: fulltextsearchconfig
|
||||
---
|
||||
SilverStripe\ORM\DataObject:
|
||||
extensions:
|
||||
- 'SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater_ObjectHandler'
|
||||
- SilverStripe\FullTextSearch\Search\Extensions\SearchUpdater_ObjectHandler
|
||||
|
28
_config/database.yml
Normal file
28
_config/database.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
Name: fulltextsearchmysql
|
||||
After:
|
||||
- 'databaseconnectors'
|
||||
---
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
MySQLDatabase:
|
||||
class: SilverStripe\FullTextSearch\Search\Captures\SearchManipulateCapture_MySQLDatabase
|
||||
MySQLPDODatabase:
|
||||
class: SilverStripe\FullTextSearch\Search\Captures\SearchManipulateCapture_MySQLDatabase
|
||||
|
||||
---
|
||||
Name: fulltextsearchpostgresql
|
||||
After:
|
||||
- 'postgresqlconnectors'
|
||||
---
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
PostgrePDODatabase:
|
||||
class: SilverStripe\FullTextSearch\Search\Captures\SearchManipulateCapture_PostgreSQLDatabase
|
||||
PostgreSQLDatabase:
|
||||
class: SilverStripe\FullTextSearch\Search\Captures\SearchManipulateCapture_PostgreSQLDatabase
|
||||
|
||||
---
|
||||
Name: fulltextsearchsqlite
|
||||
---
|
||||
SilverStripe\Core\Injector\Injector:
|
||||
SQLite3Database:
|
||||
class: SilverStripe\FullTextSearch\Search\Captures\SearchManipulateCapture_SQLite3Database
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Captures;
|
||||
namespace SilverStripe\FullTextSearch\Search\Captures;
|
||||
|
||||
use SilverStripe\ORM\Connect\MySQLDatabase;
|
||||
use SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater;
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Captures;
|
||||
namespace SilverStripe\FullTextSearch\Search\Captures;
|
||||
|
||||
use SilverStripe\PostgreSQL\PostgreSQLDatabase;
|
||||
use SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater;
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Captures;
|
||||
namespace SilverStripe\FullTextSearch\Search\Captures;
|
||||
|
||||
use SilverStripe\SQLite\SQLite3Database;
|
||||
use SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater;
|
||||
|
@ -1,12 +1,12 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Search\Updaters;
|
||||
namespace SilverStripe\FullTextSearch\Search\Extensions;
|
||||
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\FullTextSearch\Search\Variants\SearchVariant;
|
||||
use SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
use SilverStripe\Core\ClassInfo;
|
||||
use SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater;
|
||||
use SilverStripe\FullTextSearch\Search\Variants\SearchVariant;
|
||||
use SilverStripe\ORM\DataExtension;
|
||||
use SilverStripe\ORM\DataObject;
|
||||
|
||||
/**
|
||||
* Delete operations do not use database manipulations.
|
@ -18,13 +18,11 @@ use ReflectionClass;
|
||||
* This class is responsible for capturing changes to DataObjects and triggering index updates of the resulting dirty
|
||||
* index items.
|
||||
*
|
||||
* Attached automatically by _config calling SearchUpdater#bind_manipulation_capture. Overloads the current database
|
||||
* connector's manipulate method - basically we need to capture a manipulation _after_ all the augmentManipulation code
|
||||
* (for instance Version's) is run
|
||||
* Attached automatically by Injector configuration that overloads your flavour of Database class. The
|
||||
* SearchManipulateCapture_[type] classes overload the manipulate method - basically we need to capture a
|
||||
* manipulation _after_ all the augmentManipulation code (for instance Version's) is run
|
||||
*
|
||||
* Pretty closely tied to the field structure of SearchIndex.
|
||||
*
|
||||
* TODO: The way we bind in is awful hacky.
|
||||
*/
|
||||
|
||||
class SearchUpdater
|
||||
@ -39,36 +37,6 @@ class SearchUpdater
|
||||
*/
|
||||
private static $flush_on_shutdown = true;
|
||||
|
||||
/**
|
||||
* Replace the database object with a subclass that captures all manipulations and passes them to us
|
||||
*/
|
||||
public static function bind_manipulation_capture()
|
||||
{
|
||||
$current = DB::get_conn();
|
||||
if (!$current || !$current->getSelectedDatabase() || @$current->isManipulationCapture) {
|
||||
return;
|
||||
} // If not yet set, or its already captured, just return
|
||||
|
||||
$type = (new ReflectionClass($current))->getShortName();
|
||||
$dbClass = 'SilverStripe\FullTextSearch\Captures\SearchManipulateCapture_' . $type;
|
||||
|
||||
// Check if Capture class exists.
|
||||
if (!class_exists($dbClass)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/** @var Database $captured */
|
||||
$captured = new $dbClass();
|
||||
|
||||
$captured->setConnector($current->getConnector());
|
||||
$captured->setQueryBuilder($current->getQueryBuilder());
|
||||
$captured->setSchemaManager($current->getSchemaManager());
|
||||
|
||||
// The connection might have had it's name changed (like if we're currently in a test)
|
||||
$captured->selectDatabase($current->getSelectedDatabase());
|
||||
DB::set_conn($captured);
|
||||
}
|
||||
|
||||
public static $registered = false;
|
||||
/** @var SearchUpdateProcessor */
|
||||
public static $processor = null;
|
||||
|
@ -1,21 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\FullTextSearch\Search\Updaters;
|
||||
|
||||
use SilverStripe\Control\RequestFilter;
|
||||
use SilverStripe\Control\HTTPRequest;
|
||||
use SilverStripe\Control\HTTPResponse;
|
||||
|
||||
class SearchUpdater_BindManipulationCaptureFilter implements RequestFilter
|
||||
{
|
||||
|
||||
public function preRequest(HTTPRequest $request)
|
||||
{
|
||||
SearchUpdater::bind_manipulation_capture();
|
||||
}
|
||||
|
||||
public function postRequest(HTTPRequest $request, HTTPResponse $response)
|
||||
{
|
||||
/* NOP */
|
||||
}
|
||||
}
|
@ -25,6 +25,8 @@ use Symbiote\QueuedJobs\Services\QueuedJobService;
|
||||
*/
|
||||
class BatchedProcessorTest extends SapphireTest
|
||||
{
|
||||
protected $usesDatabase = true;
|
||||
|
||||
protected $oldProcessor;
|
||||
|
||||
protected static $extra_dataobjects = array(
|
||||
|
@ -30,8 +30,6 @@ class SearchUpdaterTest extends SapphireTest
|
||||
self::$index->reset();
|
||||
}
|
||||
|
||||
SearchUpdater::bind_manipulation_capture();
|
||||
|
||||
Config::modify()->set(Injector::class, SearchUpdateProcessor::class, array(
|
||||
'class' => SearchUpdateImmediateProcessor::class
|
||||
));
|
||||
@ -72,17 +70,17 @@ class SearchUpdaterTest extends SapphireTest
|
||||
// Check the default "writing a document updates the document"
|
||||
SearchUpdater::flush_dirty_indexes();
|
||||
|
||||
$added = self::$index->getAdded(array('ID'));
|
||||
$added = self::$index->getAdded(['ID']);
|
||||
// Some databases don't output $added in a consistent order; that's okay
|
||||
usort($added, function ($a, $b) {
|
||||
return $a['ID']-$b['ID'];
|
||||
});
|
||||
|
||||
$this->assertEquals($added, array(
|
||||
array('ID' => $container1->ID),
|
||||
array('ID' => $container2->ID),
|
||||
array('ID' => $container3->ID)
|
||||
));
|
||||
$this->assertEquals([
|
||||
['ID' => $container1->ID],
|
||||
['ID' => $container2->ID],
|
||||
['ID' => $container3->ID],
|
||||
], $added);
|
||||
|
||||
// Check writing a has_one tracks back to the origin documents
|
||||
|
||||
@ -92,17 +90,17 @@ class SearchUpdaterTest extends SapphireTest
|
||||
$hasOne->write();
|
||||
|
||||
SearchUpdater::flush_dirty_indexes();
|
||||
$added = self::$index->getAdded(array('ID'));
|
||||
$added = self::$index->getAdded(['ID']);
|
||||
|
||||
// Some databases don't output $added in a consistent order; that's okay
|
||||
usort($added, function ($a, $b) {
|
||||
return $a['ID']-$b['ID'];
|
||||
});
|
||||
|
||||
$this->assertEquals($added, array(
|
||||
array('ID' => $container1->ID),
|
||||
array('ID' => $container2->ID)
|
||||
));
|
||||
$this->assertEquals([
|
||||
['ID' => $container1->ID],
|
||||
['ID' => $container2->ID],
|
||||
], $added);
|
||||
|
||||
// Check updating an unrelated field doesn't track back
|
||||
|
||||
@ -112,7 +110,7 @@ class SearchUpdaterTest extends SapphireTest
|
||||
$hasOne->write();
|
||||
|
||||
SearchUpdater::flush_dirty_indexes();
|
||||
$this->assertEquals(self::$index->getAdded(array('ID')), array());
|
||||
$this->assertEquals([], self::$index->getAdded(['ID']));
|
||||
|
||||
// Check writing a has_one tracks back to the origin documents
|
||||
|
||||
@ -122,9 +120,9 @@ class SearchUpdaterTest extends SapphireTest
|
||||
$alternateHasOne->write();
|
||||
|
||||
SearchUpdater::flush_dirty_indexes();
|
||||
$this->assertEquals(self::$index->getAdded(array('ID')), array(
|
||||
array('ID' => $container3->ID)
|
||||
));
|
||||
$this->assertEquals([
|
||||
['ID' => $container3->ID],
|
||||
], self::$index->getAdded(['ID']));
|
||||
}
|
||||
|
||||
public function testHasManyHook()
|
||||
@ -148,10 +146,10 @@ class SearchUpdaterTest extends SapphireTest
|
||||
|
||||
SearchUpdater::flush_dirty_indexes();
|
||||
|
||||
$this->assertEquals(self::$index->getAdded(array('ID')), array(
|
||||
array('ID' => $container1->ID),
|
||||
array('ID' => $container2->ID)
|
||||
));
|
||||
$this->assertEquals([
|
||||
['ID' => $container1->ID],
|
||||
['ID' => $container2->ID],
|
||||
], self::$index->getAdded(['ID']));
|
||||
|
||||
self::$index->reset();
|
||||
|
||||
@ -162,8 +160,8 @@ class SearchUpdaterTest extends SapphireTest
|
||||
$hasMany2->write();
|
||||
|
||||
SearchUpdater::flush_dirty_indexes();
|
||||
$this->assertEquals(self::$index->getAdded(array('ID')), array(
|
||||
array('ID' => $container1->ID)
|
||||
));
|
||||
$this->assertEquals([
|
||||
['ID' => $container1->ID],
|
||||
], self::$index->getAdded(['ID']));
|
||||
}
|
||||
}
|
||||
|
@ -31,11 +31,9 @@ class SearchVariantSubsiteTest extends SapphireTest
|
||||
self::$index = singleton(static::class);
|
||||
}
|
||||
|
||||
SearchUpdater::bind_manipulation_capture();
|
||||
|
||||
Config::modify()->set(Injector::class, SearchUpdateProcessor::class, [
|
||||
'class' => SearchUpdateImmediateProcessor::class
|
||||
]);
|
||||
Config::inst()->update('Injector', 'SearchUpdateProcessor', array(
|
||||
'class' => 'SearchUpdateImmediateProcessor'
|
||||
));
|
||||
|
||||
FullTextSearch::force_index_list(self::$index);
|
||||
SearchUpdater::clear_dirty_indexes();
|
||||
|
@ -34,8 +34,6 @@ class SearchVariantVersionedTest extends SapphireTest
|
||||
self::$index = singleton(SearchVariantVersionedTest_Index::class);
|
||||
}
|
||||
|
||||
SearchUpdater::bind_manipulation_capture();
|
||||
|
||||
Config::modify()->set(Injector::class, SearchUpdateProcessor::class, array(
|
||||
'class' => SearchUpdateImmediateProcessor::class
|
||||
));
|
||||
|
@ -55,11 +55,9 @@ class SolrIndexSubsitesTest extends SapphireTest
|
||||
self::$index = singleton(SolrIndexSubsitesTest_Index::class);
|
||||
}
|
||||
|
||||
SearchUpdater::bind_manipulation_capture();
|
||||
|
||||
Config::modify()->set(Injector::class, SearchUpdateProcessor::class, [
|
||||
'class' => SearchUpdateImmediateProcessor::class,
|
||||
]);
|
||||
Config::modify()->set('Injector', 'SearchUpdateProcessor', array(
|
||||
'class' => 'SearchUpdateImmediateProcessor'
|
||||
));
|
||||
|
||||
FullTextSearch::force_index_list(self::$index);
|
||||
SearchUpdater::clear_dirty_indexes();
|
||||
|
@ -46,9 +46,7 @@ class SolrIndexVersionedTest extends SapphireTest
|
||||
self::$index = singleton(SolrVersionedTest_Index::class);
|
||||
}
|
||||
|
||||
SearchUpdater::bind_manipulation_capture();
|
||||
|
||||
Config::modify()->set(Injector::class, SearchUpdateProcessor::class, [
|
||||
Config::modify()->set(Injector::class, SearchUpdateProcessor::class, array(
|
||||
'class' => SearchUpdateImmediateProcessor::class
|
||||
]);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user