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

Reply via email to