From 6aec8dd6fb2b732b24dc06c0577cee867a11e0dd Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Mon, 6 Aug 2018 16:40:29 -0700 Subject: [PATCH] Use separate insert/delete statements to work around Blazegraph bug Bug https://github.com/blazegraph/database/issues/100 happens on DELETE/INSERT but not on separate delete and insert, try to work around it Change-Id: Iba6a98dde6f4bea9051cd6dee91fb19db5eca10e Bug: T201217 --- maintenance/categoryChangesAsRdf.php | 37 ++++++++++++++++--- .../phpunit/data/categoriesrdf/change.sparql | 11 +++--- .../phpunit/data/categoriesrdf/delete.sparql | 2 - tests/phpunit/data/categoriesrdf/move.sparql | 11 +++--- 4 files changed, 43 insertions(+), 18 deletions(-) diff --git a/maintenance/categoryChangesAsRdf.php b/maintenance/categoryChangesAsRdf.php index bf7a22d52a..d61335212c 100644 --- a/maintenance/categoryChangesAsRdf.php +++ b/maintenance/categoryChangesAsRdf.php @@ -39,6 +39,20 @@ INSERT DATA { SPARQL; + /** + * Delete query + */ + const SPARQL_DELETE = <<initialize(); - $startTS = new MWTimestamp( $this->getOption( "start" ) ); + $endTS = new MWTimestamp( $this->getOption( "end" ) ); $now = new MWTimestamp(); @@ -150,6 +164,18 @@ SPARQLDI; fwrite( $output, $this->updateTS( $this->endTS ) ); } + /** + * Get the text of SPARQL INSERT DATA clause + * @return string + */ + private function getInsertRdf() { + $rdfText = $this->getRdf(); + if ( !$rdfText ) { + return ""; + } + return sprintf( self::SPARQL_INSERT, $rdfText ); + } + /** * Get SPARQL for updating set of categories * @param IDatabase $dbr @@ -167,9 +193,8 @@ SPARQLDI; $this->writeParentCategories( $dbr, $pages ); } - return "# $mark\n" . sprintf( self::SPARQL_DELETE_INSERT, - $this->getRdf(), - implode( ' ', $deleteUrls ) ); + return "# $mark\n" . sprintf( self::SPARQL_DELETE, implode( ' ', $deleteUrls ) ) . + $this->getInsertRdf(); } /** @@ -483,7 +508,7 @@ SPARQL; $this->writeParentCategories( $dbr, $pages ); - fwrite( $output, sprintf( self::SPARQL_INSERT, $this->getRdf() ) ); + fwrite( $output, $this->getInsertRdf() ); } } @@ -510,7 +535,7 @@ SPARQL; } $this->writeParentCategories( $dbr, $pages ); - fwrite( $output, sprintf( self::SPARQL_INSERT, $this->getRdf() ) ); + fwrite( $output, $this->getInsertRdf() ); } } diff --git a/tests/phpunit/data/categoriesrdf/change.sparql b/tests/phpunit/data/categoriesrdf/change.sparql index d7ec83a526..d1a6a62ab0 100644 --- a/tests/phpunit/data/categoriesrdf/change.sparql +++ b/tests/phpunit/data/categoriesrdf/change.sparql @@ -1,7 +1,12 @@ # Changes DELETE { ?category ?x ?y -} INSERT { +} WHERE { + VALUES ?category { + + } +}; +INSERT DATA { a mediawiki:Category ; rdfs:label "Changed category" ; @@ -9,8 +14,4 @@ DELETE { mediawiki:subcategories "2"^^xsd:integer ; mediawiki:isInCategory . -} WHERE { - VALUES ?category { - - } }; diff --git a/tests/phpunit/data/categoriesrdf/delete.sparql b/tests/phpunit/data/categoriesrdf/delete.sparql index 7fb642dc33..043d9c371c 100644 --- a/tests/phpunit/data/categoriesrdf/delete.sparql +++ b/tests/phpunit/data/categoriesrdf/delete.sparql @@ -1,8 +1,6 @@ # Deletes DELETE { ?category ?x ?y -} INSERT { - } WHERE { VALUES ?category { diff --git a/tests/phpunit/data/categoriesrdf/move.sparql b/tests/phpunit/data/categoriesrdf/move.sparql index c9f284ec11..d22bc47073 100644 --- a/tests/phpunit/data/categoriesrdf/move.sparql +++ b/tests/phpunit/data/categoriesrdf/move.sparql @@ -1,7 +1,12 @@ # Moves DELETE { ?category ?x ?y -} INSERT { +} WHERE { + VALUES ?category { + + } +}; +INSERT DATA { a mediawiki:Category ; rdfs:label "MovedTo" ; @@ -17,8 +22,4 @@ DELETE { mediawiki:isInCategory . -} WHERE { - VALUES ?category { - - } }; -- 2.20.1