Addshore has submitted this change and it was merged.

Change subject: Update bootstrapping code to match changes in 
WikibaseQueryEngine
......................................................................


Update bootstrapping code to match changes in WikibaseQueryEngine

Change-Id: I19446a08c8919ec3fa2f5b0523ffe07f2c880eb7
---
M Tests/Integration/ObjectConstructionTest.php
M Tests/System/EntitiesByPropertyValueApiTest.php
M Tests/Unit/DIC/WikibaseQueryTest.php
M Tests/Unit/Setup/ExtensionUpdaterTest.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/QueryStoreWithDependenciesBuilder.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
15 files changed, 361 insertions(+), 190 deletions(-)

Approvals:
  Addshore: Verified; Looks good to me, approved



diff --git a/Tests/Integration/ObjectConstructionTest.php 
b/Tests/Integration/ObjectConstructionTest.php
index c9caf18..2a85f2e 100644
--- a/Tests/Integration/ObjectConstructionTest.php
+++ b/Tests/Integration/ObjectConstructionTest.php
@@ -13,11 +13,6 @@
  */
 class ObjectConstructionTest extends \PHPUnit_Framework_TestCase {
 
-       public function testConstructQueryStore() {
-               $queryStore = 
ExtensionAccess::getWikibaseQuery()->getQueryStore();
-               $this->assertInstanceOf( 'Wikibase\QueryEngine\QueryStore', 
$queryStore );
-       }
-
        public function testConstructByPropertyValueEntityFinder() {
                $byPropertyValueEntityFinder = 
ExtensionAccess::getWikibaseQuery()->getByPropertyValueEntityFinder();
                $this->assertInstanceOf( 
'Wikibase\Query\ByPropertyValueEntityFinder', $byPropertyValueEntityFinder );
diff --git a/Tests/System/EntitiesByPropertyValueApiTest.php 
b/Tests/System/EntitiesByPropertyValueApiTest.php
index 46b2c1b..4bddd41 100644
--- a/Tests/System/EntitiesByPropertyValueApiTest.php
+++ b/Tests/System/EntitiesByPropertyValueApiTest.php
@@ -31,7 +31,7 @@
        protected $propertyId;
 
        protected function getQueryStore() {
-               return ExtensionAccess::getWikibaseQuery()->getQueryStore();
+               return 
ExtensionAccess::getWikibaseQuery()->getQueryStoreWithDependencies();
        }
 
        public function setUp() {
@@ -40,14 +40,14 @@
                $this->itemId = new ItemId( self::ITEM_ID_STRING );
                $this->propertyId = new PropertyId( self::PROPERTY_ID_STRING );
 
-               $this->getQueryStore()->newSetup()->install();
+               $this->getQueryStore()->newInstaller()->install();
 
                $this->createNewProperty();
                $this->insertNewItem();
        }
 
        public function tearDown() {
-               $this->getQueryStore()->newSetup()->uninstall();
+               $this->getQueryStore()->newUninstaller()->uninstall();
                parent::tearDown();
        }
 
@@ -62,7 +62,7 @@
        }
 
        protected function insertNewItem() {
-               $storeUpdater = $this->getQueryStore()->getWriter();
+               $storeUpdater = $this->getQueryStore()->newWriter();
 
                $item = $this->newMockItem();
 
diff --git a/Tests/Unit/DIC/WikibaseQueryTest.php 
b/Tests/Unit/DIC/WikibaseQueryTest.php
index d70b088..d4828a6 100644
--- a/Tests/Unit/DIC/WikibaseQueryTest.php
+++ b/Tests/Unit/DIC/WikibaseQueryTest.php
@@ -40,7 +40,8 @@
                $argLists = array();
 
                $argLists[] = array( 'byPropertyValueEntityFinder', 
'getByPropertyValueEntityFinder' );
-               $argLists[] = array( 'queryStore', 'getQueryStore' );
+               $argLists[] = array( 'queryStoreWithDependencies', 
'getQueryStoreWithDependencies' );
+               $argLists[] = array( 'extensionUpdater', 'getExtensionUpdater' 
);
 
                return $argLists;
        }
diff --git a/Tests/Unit/Setup/ExtensionUpdaterTest.php 
b/Tests/Unit/Setup/ExtensionUpdaterTest.php
index 91c7c78..06d6561 100644
--- a/Tests/Unit/Setup/ExtensionUpdaterTest.php
+++ b/Tests/Unit/Setup/ExtensionUpdaterTest.php
@@ -16,13 +16,14 @@
 class ExtensionUpdaterTest extends \PHPUnit_Framework_TestCase {
 
        public function testRunForNewInstall() {
-               $queryStoreSetup = $this->getMock( 
'Wikibase\QueryEngine\QueryStoreSetup' );
+               $queryStoreInstaller = $this->getMock( 
'Wikibase\QueryEngine\QueryStoreInstaller' );
+               $queryStoreUpdater = $this->getMock( 
'Wikibase\QueryEngine\QueryStoreUpdater' );
 
-               $queryStoreSetup->expects( $this->once() )
-                       ->method( 'update' );
-
-               $queryStoreSetup->expects( $this->once() )
+               $queryStoreInstaller->expects( $this->once() )
                        ->method( 'install' );
+
+               $queryStoreUpdater->expects( $this->once() )
+                       ->method( 'update' );
 
                $dbUpdater = $this->getMockBuilder( 'MysqlUpdater' )
                        ->disableOriginalConstructor()->getMock();
@@ -34,18 +35,19 @@
                $dbUpdater->expects( $this->exactly( 1 ) )
                        ->method( 'insertUpdateRow' );
 
-               $updater = new ExtensionUpdater( $queryStoreSetup );
+               $updater = new ExtensionUpdater( $queryStoreInstaller, 
$queryStoreUpdater );
                $updater->run( $dbUpdater );
        }
 
        public function testRunForExistingInstall() {
-               $queryStoreSetup = $this->getMock( 
'Wikibase\QueryEngine\QueryStoreSetup' );
+               $queryStoreInstaller = $this->getMock( 
'Wikibase\QueryEngine\QueryStoreInstaller' );
+               $queryStoreUpdater = $this->getMock( 
'Wikibase\QueryEngine\QueryStoreUpdater' );
 
-               $queryStoreSetup->expects( $this->once() )
-                       ->method( 'update' );
-
-               $queryStoreSetup->expects( $this->never() )
+               $queryStoreInstaller->expects( $this->never() )
                        ->method( 'install' );
+
+               $queryStoreUpdater->expects( $this->once() )
+                       ->method( 'update' );
 
                $dbUpdater = $this->getMockBuilder( 'MysqlUpdater' )
                        ->disableOriginalConstructor()->getMock();
@@ -57,7 +59,7 @@
                $dbUpdater->expects( $this->never() )
                        ->method( 'insertUpdateRow' );
 
-               $updater = new ExtensionUpdater( $queryStoreSetup );
+               $updater = new ExtensionUpdater( $queryStoreInstaller, 
$queryStoreUpdater );
                $updater->run( $dbUpdater );
        }
 
diff --git 
a/src/Wikibase/Query/DIC/Builders/ByPropertyValueEntityFinderBuilder.php 
b/src/Wikibase/Query/DIC/Builders/ByPropertyValueEntityFinderBuilder.php
index 2308760..4fdf99c 100644
--- a/src/Wikibase/Query/DIC/Builders/ByPropertyValueEntityFinderBuilder.php
+++ b/src/Wikibase/Query/DIC/Builders/ByPropertyValueEntityFinderBuilder.php
@@ -2,11 +2,11 @@
 
 namespace Wikibase\Query\DIC\Builders;
 
-use DataValues\DataValueFactory;
+use Wikibase\Database\QueryInterface\QueryInterface;
 use Wikibase\Query\ByPropertyValueEntityFinder;
 use Wikibase\Query\DIC\DependencyBuilder;
 use Wikibase\Query\DIC\DependencyManager;
-use Wikibase\QueryEngine\QueryStore;
+use Wikibase\QueryEngine\SQLStore\SQLStore;
 use Wikibase\Repo\WikibaseRepo;
 
 /**
@@ -30,12 +30,17 @@
         */
        public function buildObject( DependencyManager $dependencyManager ) {
                /**
-                * @var QueryStore $queryStore
+                * @var SQLStore $queryStore
                 */
-               $queryStore = $dependencyManager->newObject( 'queryStore' );
+               $queryStore = $dependencyManager->newObject( 'sqlStore' );
+
+               /**
+                * @var QueryInterface $queryInterface
+                */
+               $queryInterface = $dependencyManager->newObject( 
'slaveQueryInterface' );
 
                return new ByPropertyValueEntityFinder(
-                       $queryStore->getQueryEngine(),
+                       $queryStore->newQueryEngine( $queryInterface ),
                        $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 < jeroended...@gmail.com >
+ */
+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..757aceb 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 < jeroended...@gmail.com >
  */
 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( 'sqlStore' );
+               $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 < jeroended...@gmail.com >
- */
-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/QueryStoreWithDependenciesBuilder.php 
b/src/Wikibase/Query/DIC/Builders/QueryStoreWithDependenciesBuilder.php
new file mode 100644
index 0000000..802afec
--- /dev/null
+++ b/src/Wikibase/Query/DIC/Builders/QueryStoreWithDependenciesBuilder.php
@@ -0,0 +1,74 @@
+<?php
+
+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\ByPropertyValueEntityFinder;
+use Wikibase\Query\DIC\DependencyBuilder;
+use Wikibase\Query\DIC\DependencyManager;
+use Wikibase\QueryEngine\SQLStore\SQLStoreWithDependencies;
+
+/**
+ * @licence GNU GPL v2+
+ * @author Jeroen De Dauw < jeroended...@gmail.com >
+ */
+class QueryStoreWithDependenciesBuilder extends DependencyBuilder {
+
+       /**
+        * @var DBConnectionProvider
+        */
+       protected $connectionProvider;
+
+       /**
+        * @var QueryInterface
+        */
+       protected $queryInterface;
+
+       /**
+        * @see DependencyBuilder::buildObject
+        *
+        * @param DependencyManager $dependencyManager
+        *
+        * @return ByPropertyValueEntityFinder
+        */
+       public function buildObject( DependencyManager $dependencyManager ) {
+               $this->connectionProvider = $dependencyManager->newObject( 
'masterConnectionProvider' );
+               $this->queryInterface = $dependencyManager->newObject( 
'masterQueryInterface' );
+
+               return new SQLStoreWithDependencies(
+                       $dependencyManager->newObject( 'sqlStore' ),
+                       $dependencyManager->newObject( 'masterQueryInterface' ),
+                       $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/SQLStoreBuilder.php 
b/src/Wikibase/Query/DIC/Builders/SQLStoreBuilder.php
new file mode 100644
index 0000000..c6b835c
--- /dev/null
+++ b/src/Wikibase/Query/DIC/Builders/SQLStoreBuilder.php
@@ -0,0 +1,76 @@
+<?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 < jeroended...@gmail.com >
+ */
+class SQLStoreBuilder extends DependencyBuilder {
+
+       protected $storeName;
+       protected $tablePrefix;
+
+       /**
+        * @var QueryInterface
+        */
+       protected $queryInterface;
+
+       /**
+        * @param string $storeName Human readable name for the store
+        * @param string $tablePrefix Table prefix to be used for the store
+        */
+       public function __construct( $storeName, $tablePrefix ) {
+               $this->storeName = $storeName;
+               $this->tablePrefix = $tablePrefix;
+       }
+
+       /**
+        * @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(
+                       $this->storeName,
+                       $this->tablePrefix,
+                       $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..35eed20 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
@@ -37,17 +37,20 @@
        }
 
        /**
-        * @return QueryStore
-        */
-       public function getQueryStore() {
-               return $this->dependencyManager->newObject( 'queryStore' );
-       }
-
-       /**
         * @return ExtensionUpdater
         */
        public function getExtensionUpdater() {
                return $this->dependencyManager->newObject( 'extensionUpdater' 
);
        }
 
+       /**
+        * This initializes all dependencies of the QueryStore.
+        * Do not use in production code if only part of the QueryStore is 
needed.
+        *
+        * @return QueryStoreWithDependencies
+        */
+       public function getQueryStoreWithDependencies() {
+               return $this->dependencyManager->newObject( 
'queryStoreWithDependencies' );
+       }
+
 }
\ No newline at end of file
diff --git a/src/Wikibase/Query/DIC/WikibaseQueryBuilder.php 
b/src/Wikibase/Query/DIC/WikibaseQueryBuilder.php
index de65a72..92bf11b 100644
--- a/src/Wikibase/Query/DIC/WikibaseQueryBuilder.php
+++ b/src/Wikibase/Query/DIC/WikibaseQueryBuilder.php
@@ -3,9 +3,11 @@
 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\QueryStoreWithDependenciesBuilder;
+use Wikibase\Query\DIC\Builders\SQLStoreBuilder;
 use Wikibase\Repo\WikibaseRepo;
 
 /**
@@ -27,25 +29,61 @@
                        )
                );
 
+               if ( defined( 'MW_PHPUNIT_TEST' ) ) {
+                       $dependencyManager->registerBuilder(
+                               'sqlStore',
+                               new SQLStoreBuilder(
+                                       'WikibaseQuery test store',
+                                       'test_wbq_'
+                               )
+                       );
+               }
+               else {
+                       $dependencyManager->registerBuilder(
+                               'sqlStore',
+                               new SQLStoreBuilder(
+                                       'WikibaseQuery SQLStore 0.1 alpha',
+                                       'wbq_'
+                               )
+                       );
+               }
+
                $dependencyManager->registerBuilder(
-                       'queryStore',
-                       new QueryStoreBuilder(
-                               DB_SLAVE,
-                               $GLOBALS['wgDBtype']
-                       )
+                       'extensionUpdater',
+                       new ExtensionUpdaterBuilder()
+               );
+
+               $dependencyManager->registerBuilder(
+                       'queryStoreWithDependencies',
+                       new QueryStoreWithDependenciesBuilder()
                );
 
                $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..03a63a3 100644
--- a/src/Wikibase/Query/Setup/ExtensionUpdater.php
+++ b/src/Wikibase/Query/Setup/ExtensionUpdater.php
@@ -3,7 +3,8 @@
 namespace Wikibase\Query\Setup;
 
 use DatabaseUpdater;
-use Wikibase\QueryEngine\QueryStoreSetup;
+use Wikibase\QueryEngine\QueryStoreInstaller;
+use Wikibase\QueryEngine\QueryStoreUpdater;
 
 /**
  * @licence GNU GPL v2+
@@ -11,18 +12,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 +43,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: merged
Gerrit-Change-Id: I19446a08c8919ec3fa2f5b0523ffe07f2c880eb7
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/WikibaseQuery
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <jeroended...@gmail.com>
Gerrit-Reviewer: Addshore <addshorew...@gmail.com>
Gerrit-Reviewer: Daniel Kinzler <daniel.kinz...@wikimedia.de>
Gerrit-Reviewer: Daniel Werner <daniel.wer...@wikimedia.de>
Gerrit-Reviewer: Tobias Gritschacher <tobias.gritschac...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to