JanZerebecki has uploaded a new change for review.
https://gerrit.wikimedia.org/r/233981
Change subject: Database schema improvements (T102992)
......................................................................
Database schema improvements (T102992)
Change-Id: I05048ca7d321ca052111d2c5262d13c6433b4c9d
(cherry picked from commit 8e382f93051246099f105f8e51c5c3fdd78c49c7)
---
M includes/ExternalDataRepo.php
M includes/UpdateExternalData/ExternalDataImporter.php
M sql/create_wbqev_dump_information.sql
M sql/create_wbqev_identifier_properties.sql
M tests/phpunit/DumpMetaInformation/SqlDumpMetaInformationRepoTest.php
M tests/phpunit/ExternalDataRepoTest.php
M tests/phpunit/UpdateExternalData/UpdateExternalDataTest.php
7 files changed, 56 insertions(+), 69 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseQualityExternalValidation
refs/changes/81/233981/1
diff --git a/includes/ExternalDataRepo.php b/includes/ExternalDataRepo.php
index 548d6d0..0d13e57 100755
--- a/includes/ExternalDataRepo.php
+++ b/includes/ExternalDataRepo.php
@@ -2,6 +2,7 @@
namespace WikibaseQuality\ExternalValidation;
+use DBError;
use Wikibase\DataModel\Entity\PropertyId;
use Wikimedia\Assert\Assert;
@@ -31,14 +32,13 @@
Assert::parameterElementType( 'string', $dumpIds, '$dumpIds' );
Assert::parameterElementType( 'string', $externalIds,
'$externalIds' );
Assert::parameterElementType(
'Wikibase\DataModel\Entity\PropertyId', $propertyIds, '$propertyIds' );
+ Assert::parameter( count( $dumpIds ) > 0, '$dumpIds', '$dumpIds
has to contain at least one element.' );
+ Assert::parameter( count( $externalIds ) > 0, '$externalIds',
'$externalIds has to contain at least one element.' );
- $conditions = array();
- if ( $dumpIds ) {
- $conditions['dump_id'] = $dumpIds;
- }
- if ( $externalIds ) {
- $conditions['external_id'] = $externalIds;
- }
+ $conditions = array(
+ 'dump_id' => $dumpIds,
+ 'external_id' => $externalIds
+ );
if ( $propertyIds ) {
$conditions['pid'] = $propertyIds;
}
@@ -101,10 +101,17 @@
$externalDataBatch
);
- $db->commit( __METHOD__, "flush" );
- wfWaitForSlaves();
+ try {
+ $db->begin();
+ $result = $db->insert( self::TABLE_NAME, $accumulator );
+ $db->commit();
+ }
+ catch( DBError $ex ) {
+ $db->rollback();
+ throw $ex;
+ }
- return $db->insert( self::TABLE_NAME, $accumulator );
+ return $result;
}
/**
diff --git a/includes/UpdateExternalData/ExternalDataImporter.php
b/includes/UpdateExternalData/ExternalDataImporter.php
index 44249aa..231668f 100755
--- a/includes/UpdateExternalData/ExternalDataImporter.php
+++ b/includes/UpdateExternalData/ExternalDataImporter.php
@@ -149,6 +149,7 @@
catch( \DBError $e ) {
exit( 'Unknown database error
occurred.' );
}
+ wfWaitForSlaves();
$this->log( "\r\033[K" );
$this->log( "$i rows inserted" );
diff --git a/sql/create_wbqev_dump_information.sql
b/sql/create_wbqev_dump_information.sql
index 8762bc6..516f36f 100644
--- a/sql/create_wbqev_dump_information.sql
+++ b/sql/create_wbqev_dump_information.sql
@@ -1,7 +1,7 @@
CREATE TABLE IF NOT EXISTS /*_*/wbqev_dump_information (
id VARBINARY(25) PRIMARY KEY NOT NULL,
source_qid VARBINARY(15) NOT NULL,
- import_date VARBINARY(25) NOT NULL,
+ import_date CHAR(14) NOT NULL,
language VARBINARY(10) NOT NULL,
source_url VARBINARY(300) UNIQUE NOT NULL,
size INT UNSIGNED NOT NULL,
diff --git a/sql/create_wbqev_identifier_properties.sql
b/sql/create_wbqev_identifier_properties.sql
index 56d8469..d417cc0 100644
--- a/sql/create_wbqev_identifier_properties.sql
+++ b/sql/create_wbqev_identifier_properties.sql
@@ -2,4 +2,6 @@
identifier_pid VARBINARY(15) NOT NULL,
dump_id VARBINARY(25) NOT NULL,
PRIMARY KEY (identifier_pid, dump_id)
-) /*$wgDBTableOptions*/;
\ No newline at end of file
+) /*$wgDBTableOptions*/;
+
+CREATE INDEX /*i*/dump_id ON /*_*/wbqev_identifier_properties (dump_id);
\ No newline at end of file
diff --git
a/tests/phpunit/DumpMetaInformation/SqlDumpMetaInformationRepoTest.php
b/tests/phpunit/DumpMetaInformation/SqlDumpMetaInformationRepoTest.php
index 741da5c..800d212 100755
--- a/tests/phpunit/DumpMetaInformation/SqlDumpMetaInformationRepoTest.php
+++ b/tests/phpunit/DumpMetaInformation/SqlDumpMetaInformationRepoTest.php
@@ -311,30 +311,18 @@
public function testSaveDumpMetaInformation( DumpMetaInformation
$dumpMetaInformation ) {
$this->dumpMetaInformationRepo->save( $dumpMetaInformation );
- $this->assertSelect(
+ $actualRow = $this->db->selectRow(
SqlDumpMetaInformationRepo::META_TABLE_NAME,
- array(
- 'id',
- 'source_qid',
- 'import_date',
- 'language',
- 'source_url',
- 'size',
- 'license_qid'
- ),
- array( 'id' => $dumpMetaInformation->getDumpId() ),
- array(
- array(
- $dumpMetaInformation->getDumpId(),
-
$dumpMetaInformation->getSourceItemId()->getSerialization(),
- $dumpMetaInformation->getImportDate(),
- $dumpMetaInformation->getLanguageCode(),
- $dumpMetaInformation->getSourceUrl(),
- $dumpMetaInformation->getSize(),
-
$dumpMetaInformation->getLicenseItemId()->getSerialization()
- )
- )
+ '*',
+ array( 'id' => $dumpMetaInformation->getDumpId() )
);
+ $this->assertEquals( $dumpMetaInformation->getDumpId(), $actualRow->id
);
+ $this->assertEquals(
$dumpMetaInformation->getSourceItemId()->getSerialization(),
$actualRow->source_qid );
+ $this->assertEquals( $dumpMetaInformation->getImportDate(),
wfTimestamp( TS_MW, $actualRow->import_date ) );
+ $this->assertEquals( $dumpMetaInformation->getLanguageCode(),
$actualRow->language );
+ $this->assertEquals( $dumpMetaInformation->getSourceUrl(),
$actualRow->source_url );
+ $this->assertEquals( $dumpMetaInformation->getSize(), $actualRow->size
);
+ $this->assertEquals(
$dumpMetaInformation->getLicenseItemId()->getSerialization(),
$actualRow->license_qid );
}
/**
diff --git a/tests/phpunit/ExternalDataRepoTest.php
b/tests/phpunit/ExternalDataRepoTest.php
index 6a59b97..6bcf7e2 100755
--- a/tests/phpunit/ExternalDataRepoTest.php
+++ b/tests/phpunit/ExternalDataRepoTest.php
@@ -153,20 +153,8 @@
)
),
array(
- array( 'fubar' ),
- array(),
- array(),
- array(
- 'fubar' => array(
- 'bar' => array(
- 'P3' => array( 'baz' )
- )
- )
- )
- ),
- array(
array( 42 ),
- array( 'foo', 'bar' ),
+ array('foo', 'bar'),
array(
new PropertyId( 'P1' ),
new PropertyId( 'P3' )
@@ -183,6 +171,20 @@
),
null,
'InvalidArgumentException'
+ ),
+ array(
+ array(),
+ array('foo', 'bar'),
+ array(),
+ null,
+ 'InvalidArgumentException'
+ ),
+ array(
+ array('foo', 'bar'),
+ array(),
+ array(),
+ null,
+ 'InvalidArgumentException'
)
);
}
diff --git a/tests/phpunit/UpdateExternalData/UpdateExternalDataTest.php
b/tests/phpunit/UpdateExternalData/UpdateExternalDataTest.php
index e437e49..473b961 100755
--- a/tests/phpunit/UpdateExternalData/UpdateExternalDataTest.php
+++ b/tests/phpunit/UpdateExternalData/UpdateExternalDataTest.php
@@ -104,30 +104,17 @@
$maintenanceScript->execute();
// Run assertions on meta information
- $this->assertSelect(
+ $actualRow = $this->db->selectRow(
SqlDumpMetaInformationRepo::META_TABLE_NAME,
- array(
- 'source_qid',
- 'import_date',
- 'language',
- 'source_url',
- 'size',
- 'license_qid'
- ),
- array(
- 'id' => 'foobar'
- ),
- array(
- array(
- 'Q36578',
- '20150401144144',
- 'de',
- 'http://www.foo.bar',
- 590798465,
- 'Q6938433'
- )
- )
+ '*',
+ array( 'id' => 'foobar' )
);
+ $this->assertEquals( 'Q36578', $actualRow->source_qid );
+ $this->assertEquals( '20150401144144', wfTimestamp( TS_MW,
$actualRow->import_date ) );
+ $this->assertEquals( 'de', $actualRow->language );
+ $this->assertEquals( 'http://www.foo.bar',
$actualRow->source_url );
+ $this->assertEquals( '590798465', $actualRow->size );
+ $this->assertEquals( 'Q6938433', $actualRow->license_qid );
// Run assertions on identifier properties
$this->assertSelect(
--
To view, visit https://gerrit.wikimedia.org/r/233981
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I05048ca7d321ca052111d2c5262d13c6433b4c9d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseQualityExternalValidation
Gerrit-Branch: master
Gerrit-Owner: JanZerebecki <[email protected]>
Gerrit-Reviewer: Soeren.oldag <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits