SS 4.0 - Update Database Captures to support Postgres & SQLite

This commit is contained in:
Brett Tasker 2017-04-22 21:22:54 +12:00
parent 6066af5841
commit fcf9a4f888
3 changed files with 53 additions and 7 deletions

View File

@ -0,0 +1,21 @@
<?php
namespace SilverStripe\FullTextSearch\Captures;
use SilverStripe\PostgreSQL\PostgreSQLDatabase;
use SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater;
if (!class_exists('PostgreSQLDatabase')) {
return;
}
class SearchManipulateCapture_PostgreSQLDatabase extends PostgreSQLDatabase {
public $isManipulationCapture = true;
public function manipulate($manipulation) {
$res = parent::manipulate($manipulation);
SearchUpdater::handle_manipulation($manipulation);
return $res;
}
}

View File

@ -0,0 +1,21 @@
<?php
namespace SilverStripe\FullTextSearch\Captures;
use SilverStripe\SQLite\SQLite3Database;
use SilverStripe\FullTextSearch\Search\Updaters\SearchUpdater;
if (!class_exists('SQLite3Database')) {
return;
}
class SearchManipulateCapture_SQLite3Database extends SQLite3Database {
public $isManipulationCapture = true;
public function manipulate($manipulation) {
$res = parent::manipulate($manipulation);
SearchUpdater::handle_manipulation($manipulation);
return $res;
}
}

View File

@ -11,6 +11,7 @@ use SilverStripe\FullTextSearch\Search\SearchIntrospection;
use SilverStripe\Core\Injector\Injector;
use SilverStripe\FullTextSearch\Search\Processors\SearchUpdateImmediateProcessor;
use SilverStripe\FullTextSearch\Captures\SearchManipulateCapture_MySQLDatabase;
use ReflectionClass;
/**
* This class is responsible for capturing changes to DataObjects and triggering index updates of the resulting dirty index
* items.
@ -38,17 +39,20 @@ class SearchUpdater extends Object
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;
}
$dbClass = SearchManipulateCapture_MySQLDatabase::class;
/** @var SS_Database $captured */
$captured = new $dbClass($databaseConfig);
// Framework 3.2+ ORM needs some dependencies set
if (method_exists($captured, "setConnector")) {
$captured->setConnector($current->getConnector());
$captured->setQueryBuilder($current->getQueryBuilder());
$captured->setSchemaManager($current->getSchemaManager());
}
$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());