Jeroen De Dauw has uploaded a new change for review.
https://gerrit.wikimedia.org/r/91887
Change subject: Update bootstrapping code to match changes in Wikibase
QueryEngine [DRAFT]
......................................................................
Update bootstrapping code to match changes in Wikibase QueryEngine [DRAFT]
Change-Id: I19446a08c8919ec3fa2f5b0523ffe07f2c880eb7
---
M Tests/System/EntitiesByPropertyValueApiTest.php
M src/Wikibase/Query/DIC/Builders/ByPropertyValueEntityFinderBuilder.php
A src/Wikibase/Query/DIC/Builders/DatabaseConnectionBuilder.php
M src/Wikibase/Query/DIC/Builders/ExtensionUpdaterBuilder.php
M src/Wikibase/Query/DIC/Builders/QueryInterfaceBuilder.php
D src/Wikibase/Query/DIC/Builders/QueryStoreBuilder.php
A src/Wikibase/Query/DIC/Builders/SQLStoreBuilder.php
M src/Wikibase/Query/DIC/WikibaseQuery.php
M src/Wikibase/Query/DIC/WikibaseQueryBuilder.php
M src/Wikibase/Query/Setup/ExtensionUpdater.php
M src/Wikibase/Query/Setup/HookSetup.php
11 files changed, 213 insertions(+), 165 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseQuery
refs/changes/87/91887/1
diff --git a/Tests/System/EntitiesByPropertyValueApiTest.php
b/Tests/System/EntitiesByPropertyValueApiTest.php
index 46b2c1b..63a9e13 100644
--- a/Tests/System/EntitiesByPropertyValueApiTest.php
+++ b/Tests/System/EntitiesByPropertyValueApiTest.php
@@ -62,7 +62,7 @@
}
protected function insertNewItem() {
- $storeUpdater = $this->getQueryStore()->getWriter();
+ $storeUpdater = $this->getQueryStore()->newWriter();
$item = $this->newMockItem();
diff --git
a/src/Wikibase/Query/DIC/Builders/ByPropertyValueEntityFinderBuilder.php
b/src/Wikibase/Query/DIC/Builders/ByPropertyValueEntityFinderBuilder.php
index 2308760..f6eab12 100644
--- a/src/Wikibase/Query/DIC/Builders/ByPropertyValueEntityFinderBuilder.php
+++ b/src/Wikibase/Query/DIC/Builders/ByPropertyValueEntityFinderBuilder.php
@@ -6,7 +6,7 @@
use Wikibase\Query\ByPropertyValueEntityFinder;
use Wikibase\Query\DIC\DependencyBuilder;
use Wikibase\Query\DIC\DependencyManager;
-use Wikibase\QueryEngine\QueryStore;
+use Wikibase\QueryEngine\QueryStoreWithDependencies;
use Wikibase\Repo\WikibaseRepo;
/**
@@ -30,12 +30,12 @@
*/
public function buildObject( DependencyManager $dependencyManager ) {
/**
- * @var QueryStore $queryStore
+ * @var QueryStoreWithDependencies $queryStore
*/
$queryStore = $dependencyManager->newObject( 'queryStore' );
return new ByPropertyValueEntityFinder(
- $queryStore->getQueryEngine(),
+ $queryStore->newQueryEngine(),
$this->repo->getDataValueFactory(),
$this->repo->getEntityIdParser(),
$this->repo->getEntityIdFormatter()
diff --git a/src/Wikibase/Query/DIC/Builders/DatabaseConnectionBuilder.php
b/src/Wikibase/Query/DIC/Builders/DatabaseConnectionBuilder.php
new file mode 100644
index 0000000..8b348de
--- /dev/null
+++ b/src/Wikibase/Query/DIC/Builders/DatabaseConnectionBuilder.php
@@ -0,0 +1,36 @@
+<?php
+
+namespace Wikibase\Query\DIC\Builders;
+
+use Wikibase\Database\DBConnectionProvider;
+use Wikibase\Database\LazyDBConnectionProvider;
+use Wikibase\Query\DIC\DependencyBuilder;
+use Wikibase\Query\DIC\DependencyManager;
+
+/**
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < [email protected] >
+ */
+class DatabaseConnectionBuilder extends DependencyBuilder {
+
+ protected $connectionId;
+
+ /**
+ * @param int $connectionId ie DB_MASTER, DB_SLAVE
+ */
+ public function __construct( $connectionId ) {
+ $this->connectionId = $connectionId;
+ }
+
+ /**
+ * @see DependencyBuilder::buildObject
+ *
+ * @param DependencyManager $dependencyManager
+ *
+ * @return DBConnectionProvider
+ */
+ public function buildObject( DependencyManager $dependencyManager ) {
+ return new LazyDBConnectionProvider( $this->connectionId );
+ }
+
+}
diff --git a/src/Wikibase/Query/DIC/Builders/ExtensionUpdaterBuilder.php
b/src/Wikibase/Query/DIC/Builders/ExtensionUpdaterBuilder.php
index f13bf92..e9d0444 100644
--- a/src/Wikibase/Query/DIC/Builders/ExtensionUpdaterBuilder.php
+++ b/src/Wikibase/Query/DIC/Builders/ExtensionUpdaterBuilder.php
@@ -2,16 +2,36 @@
namespace Wikibase\Query\DIC\Builders;
+use Wikibase\Database\DBConnectionProvider;
+use Wikibase\Database\MediaWiki\MediaWikiSchemaModifierBuilder;
+use Wikibase\Database\MediaWiki\MWTableBuilderBuilder;
+use Wikibase\Database\MediaWiki\MWTableDefinitionReaderBuilder;
+use Wikibase\Database\QueryInterface\QueryInterface;
use Wikibase\Query\DIC\DependencyBuilder;
use Wikibase\Query\DIC\DependencyManager;
use Wikibase\Query\Setup\ExtensionUpdater;
-use Wikibase\QueryEngine\QueryStore;
+use Wikibase\QueryEngine\SQLStore\SQLStore;
/**
* @licence GNU GPL v2+
* @author Jeroen De Dauw < [email protected] >
*/
class ExtensionUpdaterBuilder extends DependencyBuilder {
+
+ /**
+ * @var SQLStore
+ */
+ protected $queryStore;
+
+ /**
+ * @var DBConnectionProvider
+ */
+ protected $connectionProvider;
+
+ /**
+ * @var QueryInterface
+ */
+ protected $queryInterface;
/**
* @see DependencyBuilder::buildObject
@@ -21,11 +41,51 @@
* @return ExtensionUpdater
*/
public function buildObject( DependencyManager $dependencyManager ) {
- /**
- * @var QueryStore $queryStore
- */
- $queryStore = $dependencyManager->newObject( 'queryStore' );
- return new ExtensionUpdater( $queryStore->newSetup() );
+ $this->queryStore = $dependencyManager->newObject( 'queryStore'
);
+ $this->connectionProvider = $dependencyManager->newObject(
'masterConnectionProvider' );
+ $this->queryInterface = $dependencyManager->newObject(
'masterQueryInterface' );
+
+ return new ExtensionUpdater(
+ $this->newQueryStoreInstaller(),
+ $this->newQueryStoreUpdater()
+ );
+ }
+
+ protected function newQueryStoreInstaller() {
+ return $this->queryStore->newInstaller(
+ $this->newTableBuilder()
+ );
+ }
+
+ protected function newQueryStoreUpdater() {
+ return $this->queryStore->newUpdater(
+ $this->newTableBuilder(),
+ $this->newTableDefinitionReader(),
+ $this->newSchemaModifier()
+ );
+ }
+
+ protected function newTableBuilder() {
+ $tbBuilder = new MWTableBuilderBuilder();
+
+ return $tbBuilder->setConnection( $this->connectionProvider )
+ ->getTableBuilder();
+ }
+
+ protected function newTableDefinitionReader() {
+ $drBuilder = new MWTableDefinitionReaderBuilder();
+
+ return $drBuilder->setConnection( $this->connectionProvider )
+ ->setQueryInterface( $this->queryInterface )
+ ->getTableDefinitionReader();
+ }
+
+ protected function newSchemaModifier() {
+ $smBuilder = new MediaWikiSchemaModifierBuilder();
+
+ return $smBuilder->setConnection( $this->connectionProvider )
+ ->setQueryInterface( $this->queryInterface )
+ ->getSchemaModifier();
}
}
diff --git a/src/Wikibase/Query/DIC/Builders/QueryInterfaceBuilder.php
b/src/Wikibase/Query/DIC/Builders/QueryInterfaceBuilder.php
index 18add69..7c1bdc0 100644
--- a/src/Wikibase/Query/DIC/Builders/QueryInterfaceBuilder.php
+++ b/src/Wikibase/Query/DIC/Builders/QueryInterfaceBuilder.php
@@ -14,16 +14,10 @@
*/
class QueryInterfaceBuilder extends DependencyBuilder {
- protected $connectionId;
- protected $dbType;
+ protected $queryInterfaceBuilderKey;
- /**
- * @param int $connectionId ie DB_MASTER, DB_SLAVE
- * @param string $dbType ie mysql, sqlite
- */
- public function __construct( $connectionId, $dbType ) {
- $this->connectionId = $connectionId;
- $this->dbType = $dbType;
+ public function __construct( $queryInterfaceBuilderKey ) {
+ $this->queryInterfaceBuilderKey = $queryInterfaceBuilderKey;
}
/**
@@ -34,11 +28,9 @@
* @return QueryInterface
*/
public function buildObject( DependencyManager $dependencyManager ) {
- return new MediaWikiQueryInterface(
$this->newConnectionProvider() );
- }
-
- protected function newConnectionProvider() {
- return new LazyDBConnectionProvider( $this->connectionId );
+ return new MediaWikiQueryInterface(
+ $dependencyManager->newObject(
$this->queryInterfaceBuilderKey )
+ );
}
}
diff --git a/src/Wikibase/Query/DIC/Builders/QueryStoreBuilder.php
b/src/Wikibase/Query/DIC/Builders/QueryStoreBuilder.php
deleted file mode 100644
index 6699e8d..0000000
--- a/src/Wikibase/Query/DIC/Builders/QueryStoreBuilder.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-namespace Wikibase\Query\DIC\Builders;
-
-use Wikibase\Database\DBConnectionProvider;
-use Wikibase\Database\LazyDBConnectionProvider;
-use Wikibase\Database\MediaWiki\MediaWikiSchemaModifierBuilder;
-use Wikibase\Database\MediaWiki\MWTableBuilderBuilder;
-use Wikibase\Database\MediaWiki\MWTableDefinitionReaderBuilder;
-use Wikibase\Database\QueryInterface\QueryInterface;
-use Wikibase\Query\ByPropertyValueEntityFinder;
-use Wikibase\Query\DIC\DependencyBuilder;
-use Wikibase\Query\DIC\DependencyManager;
-use Wikibase\Query\PropertyDataValueTypeFinder;
-use Wikibase\QueryEngine\SQLStore\DataValueHandlers;
-use Wikibase\QueryEngine\SQLStore\Store;
-use Wikibase\QueryEngine\SQLStore\StoreConfig;
-use Wikibase\Repo\WikibaseRepo;
-
-/**
- * @licence GNU GPL v2+
- * @author Jeroen De Dauw < [email protected] >
- */
-class QueryStoreBuilder extends DependencyBuilder {
-
- protected $connectionId;
- protected $dbType;
-
- /**
- * @var DBConnectionProvider
- */
- protected $connectionProvider;
-
- /**
- * @var QueryInterface
- */
- protected $queryInterface;
-
- /**
- * @param int $connectionId ie DB_MASTER, DB_SLAVE
- * @param string $dbType ie mysql, sqlite
- */
- public function __construct( $connectionId, $dbType ) {
- $this->connectionId = $connectionId;
- $this->dbType = $dbType;
- }
-
- /**
- * @see DependencyBuilder::buildObject
- *
- * @param DependencyManager $dependencyManager
- *
- * @return ByPropertyValueEntityFinder
- */
- public function buildObject( DependencyManager $dependencyManager ) {
- $this->connectionProvider = $this->newConnectionProvider();
- $this->queryInterface = $dependencyManager->newObject(
'slaveQueryInterface' );
-
- return new Store(
- $this->newStoreConfig(),
- $this->queryInterface,
- $this->newTableBuilder(),
- $this->newTableDefinitionReader(),
- $this->newSchemaModifier()
- );
- }
-
- protected function newStoreConfig() {
- // TODO: provide an extension mechanism for the DV handlers
- $dvHandlers = new DataValueHandlers();
-
- $config = new StoreConfig(
- 'Wikibase Query store v0.1',
- 'wbq_',
- $dvHandlers->getHandlers()
- );
-
- $dvtLookup = new PropertyDataValueTypeFinder(
-
WikibaseRepo::getDefaultInstance()->getPropertyDataTypeLookup(),
- WikibaseRepo::getDefaultInstance()->getDataTypeFactory()
- );
-
- $config->setPropertyDataValueTypeLookup( $dvtLookup );
-
- return $config;
- }
-
- protected function newConnectionProvider() {
- return new LazyDBConnectionProvider( $this->connectionId );
- }
-
- protected function newTableBuilder() {
- $tbBuilder = new MWTableBuilderBuilder();
-
- return $tbBuilder->setConnection( $this->connectionProvider )
- ->getTableBuilder();
- }
-
- protected function newTableDefinitionReader() {
- $drBuilder = new MWTableDefinitionReaderBuilder();
-
- return $drBuilder->setConnection( $this->connectionProvider )
- ->setQueryInterface( $this->queryInterface )
- ->getTableDefinitionReader();
- }
-
- protected function newSchemaModifier() {
- $smBuilder = new MediaWikiSchemaModifierBuilder();
-
- return $smBuilder->setConnection( $this->connectionProvider )
- ->setQueryInterface( $this->queryInterface )
- ->getSchemaModifier();
- }
-
-}
diff --git a/src/Wikibase/Query/DIC/Builders/SQLStoreBuilder.php
b/src/Wikibase/Query/DIC/Builders/SQLStoreBuilder.php
new file mode 100644
index 0000000..bc34f29
--- /dev/null
+++ b/src/Wikibase/Query/DIC/Builders/SQLStoreBuilder.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace Wikibase\Query\DIC\Builders;
+
+use Wikibase\Database\DBConnectionProvider;
+use Wikibase\Database\LazyDBConnectionProvider;
+use Wikibase\Database\MediaWiki\MediaWikiSchemaModifierBuilder;
+use Wikibase\Database\MediaWiki\MWTableBuilderBuilder;
+use Wikibase\Database\MediaWiki\MWTableDefinitionReaderBuilder;
+use Wikibase\Database\QueryInterface\QueryInterface;
+use Wikibase\Query\ByPropertyValueEntityFinder;
+use Wikibase\Query\DIC\DependencyBuilder;
+use Wikibase\Query\DIC\DependencyManager;
+use Wikibase\Query\PropertyDataValueTypeFinder;
+use Wikibase\QueryEngine\SQLStore\DataValueHandlers;
+use Wikibase\QueryEngine\SQLStore\SQLStore;
+use Wikibase\QueryEngine\SQLStore\StoreConfig;
+use Wikibase\Repo\WikibaseRepo;
+
+/**
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < [email protected] >
+ */
+class SQLStoreBuilder extends DependencyBuilder {
+
+ /**
+ * @var QueryInterface
+ */
+ protected $queryInterface;
+
+ /**
+ * @see DependencyBuilder::buildObject
+ *
+ * @param DependencyManager $dependencyManager
+ *
+ * @return ByPropertyValueEntityFinder
+ */
+ public function buildObject( DependencyManager $dependencyManager ) {
+ $this->queryInterface = $dependencyManager->newObject(
'slaveQueryInterface' );
+
+ return new SQLStore( $this->newStoreConfig() );
+ }
+
+ protected function newStoreConfig() {
+ // TODO: provide an extension mechanism for the DV handlers
+ $dvHandlers = new DataValueHandlers();
+
+ $config = new StoreConfig(
+ 'Wikibase Query store v0.1',
+ 'wbq_',
+ $dvHandlers->getHandlers()
+ );
+
+ $dvtLookup = new PropertyDataValueTypeFinder(
+
WikibaseRepo::getDefaultInstance()->getPropertyDataTypeLookup(),
+ WikibaseRepo::getDefaultInstance()->getDataTypeFactory()
+ );
+
+ $config->setPropertyDataValueTypeLookup( $dvtLookup );
+
+ return $config;
+ }
+
+}
diff --git a/src/Wikibase/Query/DIC/WikibaseQuery.php
b/src/Wikibase/Query/DIC/WikibaseQuery.php
index 40cec8b..432e151 100644
--- a/src/Wikibase/Query/DIC/WikibaseQuery.php
+++ b/src/Wikibase/Query/DIC/WikibaseQuery.php
@@ -4,7 +4,7 @@
use Wikibase\Query\ByPropertyValueEntityFinder;
use Wikibase\Query\Setup\ExtensionUpdater;
-use Wikibase\QueryEngine\QueryStore;
+use Wikibase\QueryEngine\QueryStoreWithDependencies;
/**
* This class exposes methods to retrieve each type of generally accessible
object
@@ -34,13 +34,6 @@
*/
public function getByPropertyValueEntityFinder() {
return $this->dependencyManager->newObject(
'byPropertyValueEntityFinder' );
- }
-
- /**
- * @return QueryStore
- */
- public function getQueryStore() {
- return $this->dependencyManager->newObject( 'queryStore' );
}
/**
diff --git a/src/Wikibase/Query/DIC/WikibaseQueryBuilder.php
b/src/Wikibase/Query/DIC/WikibaseQueryBuilder.php
index de65a72..e71e2d8 100644
--- a/src/Wikibase/Query/DIC/WikibaseQueryBuilder.php
+++ b/src/Wikibase/Query/DIC/WikibaseQueryBuilder.php
@@ -3,9 +3,10 @@
namespace Wikibase\Query\DIC;
use Wikibase\Query\DIC\Builders\ByPropertyValueEntityFinderBuilder;
+use Wikibase\Query\DIC\Builders\DatabaseConnectionBuilder;
use Wikibase\Query\DIC\Builders\ExtensionUpdaterBuilder;
use Wikibase\Query\DIC\Builders\QueryInterfaceBuilder;
-use Wikibase\Query\DIC\Builders\QueryStoreBuilder;
+use Wikibase\Query\DIC\Builders\SQLStoreBuilder;
use Wikibase\Repo\WikibaseRepo;
/**
@@ -29,23 +30,35 @@
$dependencyManager->registerBuilder(
'queryStore',
- new QueryStoreBuilder(
- DB_SLAVE,
- $GLOBALS['wgDBtype']
- )
+ new SQLStoreBuilder()
);
$dependencyManager->registerBuilder(
'slaveQueryInterface',
new QueryInterfaceBuilder(
- DB_SLAVE,
- $GLOBALS['wgDBtype']
+ 'slaveConnectionProvider'
)
);
$dependencyManager->registerBuilder(
- 'extensionUpdater',
- new ExtensionUpdaterBuilder()
+ 'masterQueryInterface',
+ new QueryInterfaceBuilder(
+ 'masterConnectionProvider'
+ )
+ );
+
+ $dependencyManager->registerBuilder(
+ 'slaveConnectionProvider',
+ new DatabaseConnectionBuilder(
+ DB_SLAVE
+ )
+ );
+
+ $dependencyManager->registerBuilder(
+ 'masterConnectionProvider',
+ new DatabaseConnectionBuilder(
+ DB_MASTER
+ )
);
return new WikibaseQuery( $dependencyManager );
diff --git a/src/Wikibase/Query/Setup/ExtensionUpdater.php
b/src/Wikibase/Query/Setup/ExtensionUpdater.php
index 00af496..7e0d81e 100644
--- a/src/Wikibase/Query/Setup/ExtensionUpdater.php
+++ b/src/Wikibase/Query/Setup/ExtensionUpdater.php
@@ -3,7 +3,9 @@
namespace Wikibase\Query\Setup;
use DatabaseUpdater;
+use Wikibase\QueryEngine\QueryStoreInstaller;
use Wikibase\QueryEngine\QueryStoreSetup;
+use Wikibase\QueryEngine\QueryStoreUpdater;
/**
* @licence GNU GPL v2+
@@ -11,18 +13,17 @@
*/
class ExtensionUpdater {
- /**
- * @var QueryStoreSetup
- */
- protected $queryStoreSetup;
+ protected $queryStoreInstaller;
+ protected $queryStoreUpdater;
/**
* @var DatabaseUpdater
*/
protected $updater;
- public function __construct( QueryStoreSetup $queryStoreSetup ) {
- $this->queryStoreSetup = $queryStoreSetup;
+ public function __construct( QueryStoreInstaller $installer,
QueryStoreUpdater $updater ) {
+ $this->queryStoreInstaller = $installer;
+ $this->queryStoreUpdater = $updater;
}
public function run( DatabaseUpdater $updater ) {
@@ -43,11 +44,15 @@
}
protected function installStore() {
- $this->queryStoreSetup->install();
+ $this->queryStoreInstaller->install();
}
protected function updateStore() {
- $this->queryStoreSetup->update();
+ $this->queryStoreUpdater->update();
+ }
+
+ protected function reportMessage( $message ) {
+ $this->updater->output( $message );
}
}
diff --git a/src/Wikibase/Query/Setup/HookSetup.php
b/src/Wikibase/Query/Setup/HookSetup.php
index 41518e1..1fc377e 100644
--- a/src/Wikibase/Query/Setup/HookSetup.php
+++ b/src/Wikibase/Query/Setup/HookSetup.php
@@ -50,7 +50,7 @@
protected function registerExtensionSchemaUpdates() {
//
https://www.mediawiki.org/wiki/Manual:Hooks/LoadExtensionSchemaUpdates
$this->hooks['LoadExtensionSchemaUpdates'][] = function(
\DatabaseUpdater $updater ) {
- // TODO: ExtensionAccess::getWikibaseQuery()->
+
ExtensionAccess::getWikibaseQuery()->getExtensionUpdater()->run( $updater );
};
}
--
To view, visit https://gerrit.wikimedia.org/r/91887
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I19446a08c8919ec3fa2f5b0523ffe07f2c880eb7
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseQuery
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits