Jeroen De Dauw has uploaded a new change for review.
https://gerrit.wikimedia.org/r/83815
Change subject: Implementation work in SimpleTableSchemaUpdater
......................................................................
Implementation work in SimpleTableSchemaUpdater
Change-Id: Ib09615ca096f678d5a9c857b1eea0cec5930eacb
---
M src/Schema/SimpleTableSchemaUpdater.php
M tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
2 files changed, 76 insertions(+), 4 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseDatabase
refs/changes/15/83815/1
diff --git a/src/Schema/SimpleTableSchemaUpdater.php
b/src/Schema/SimpleTableSchemaUpdater.php
index c6abc5c..e815167 100644
--- a/src/Schema/SimpleTableSchemaUpdater.php
+++ b/src/Schema/SimpleTableSchemaUpdater.php
@@ -13,6 +13,16 @@
protected $schemaModifier;
+ /**
+ * @var TableDefinition
+ */
+ protected $currentTable;
+
+ /**
+ * @var TableDefinition
+ */
+ protected $newTable;
+
public function __construct( SchemaModifier $schemaModifier ) {
$this->schemaModifier = $schemaModifier;
}
@@ -26,13 +36,31 @@
* @throws SchemaUpdateFailedException
*/
public function updateTable( TableDefinition $currentTable,
TableDefinition $newTable ) {
- $this->removeRemovedFields( $currentTable, $newTable );
+ // TODO: assert same table
+
+ $this->currentTable = $currentTable;
+ $this->newTable = $newTable;
+
+ $this->removeRemovedFields();
+ $this->addAddedFields();
+
// TODO
}
- protected function removeRemovedFields( TableDefinition $currentTable,
TableDefinition $newTable ) {
- $removedFields = array_diff_key( $currentTable->getFields(),
$newTable->getFields() );
- // TODO
+ protected function removeRemovedFields() {
+ $removedFields = array_diff_key(
$this->currentTable->getFields(), $this->newTable->getFields() );
+
+ foreach ( $removedFields as $removedField ) {
+ $this->schemaModifier->removeField(
$this->currentTable->getName(), $removedField->getName() );
+ }
+ }
+
+ protected function addAddedFields() {
+ $addedFields = array_diff_key( $this->newTable->getFields(),
$this->currentTable->getFields() );
+
+ foreach ( $addedFields as $addedField ) {
+ $this->schemaModifier->addField(
$this->currentTable->getName(), $addedField );
+ }
}
}
diff --git a/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
b/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
index 8f61985..efbf840 100644
--- a/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
+++ b/tests/phpunit/Schema/SimpleTableSchemaUpdaterTest.php
@@ -90,4 +90,48 @@
return array_map( function( $definition ) { return array(
$definition ); }, $definitions );
}
+ /**
+ * @dataProvider tableDefinitionProvider
+ */
+ public function testNewFieldsGetAdded( TableDefinition $tableDefinition
) {
+ $schema = $this->getMock(
'Wikibase\Database\Schema\SchemaModifier' );
+
+ $schema->expects( $this->never() )
+ ->method( 'removeField' );
+
+ $fields = $tableDefinition->getFields();
+
+ $schema->expects( $this->exactly( count( $fields ) - 1 ) )
+ ->method( 'addField' );
+
+ $updater = new SimpleTableSchemaUpdater( $schema );
+
+ $updater->updateTable(
+ $tableDefinition->mutateFields( array( reset( $fields )
) ),
+ $tableDefinition
+ );
+ }
+
+ /**
+ * @dataProvider tableDefinitionProvider
+ */
+ public function testRemovedFieldsGetRemoved( TableDefinition
$tableDefinition ) {
+ $schema = $this->getMock(
'Wikibase\Database\Schema\SchemaModifier' );
+
+ $schema->expects( $this->never() )
+ ->method( 'addField' );
+
+ $fields = $tableDefinition->getFields();
+
+ $schema->expects( $this->exactly( count( $fields ) - 1 ) )
+ ->method( 'removeField' );
+
+ $updater = new SimpleTableSchemaUpdater( $schema );
+
+ $updater->updateTable(
+ $tableDefinition,
+ $tableDefinition->mutateFields( array( reset( $fields )
) )
+ );
+ }
+
}
--
To view, visit https://gerrit.wikimedia.org/r/83815
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib09615ca096f678d5a9c857b1eea0cec5930eacb
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseDatabase
Gerrit-Branch: master
Gerrit-Owner: Jeroen De Dauw <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits