DatabasePostgres: Ignore "IGNORE" option to update()
authorBrad Jorsch <bjorsch@wikimedia.org>
Wed, 20 Feb 2019 15:22:26 +0000 (10:22 -0500)
committerBrad Jorsch <bjorsch@wikimedia.org>
Thu, 28 Feb 2019 15:54:33 +0000 (10:54 -0500)
PostgreSQL doesn't support anything like this. For now, avoid generating
invalid SQL by just ignoring the option. If we come up with a use case
someday, that can guide implementation of a workalike.

Bug: T215169
Change-Id: I1409c80b39834d1977c82c489226255a8cc93fd0
(cherry picked from commit 814605a979633fc37bcfa8319ddbfe627a66a308)

RELEASE-NOTES-1.31
includes/libs/rdbms/database/DatabasePostgres.php

index 17a4763..d705520 100644 (file)
@@ -56,6 +56,7 @@ THIS IS NOT A RELEASE YET
   removed.
 * (T209885) Prevent populateSearchIndex.php from breaking once actor migration
   has been started.
+* (T215169) Fix for Database::update() with IGNORE option fails on PostgreSQL.
 
 == MediaWiki 1.31.1 ==
 
index 9610839..94509a3 100644 (file)
@@ -640,6 +640,18 @@ __INDEXATTR__;
                return true;
        }
 
+       protected function makeUpdateOptionsArray( $options ) {
+               if ( !is_array( $options ) ) {
+                       $options = [ $options ];
+               }
+
+               // PostgreSQL doesn't support anything like "ignore" for
+               // UPDATE.
+               $options = array_diff( $options, [ 'IGNORE' ] );
+
+               return parent::makeUpdateOptionsArray( $options );
+       }
+
        /**
         * INSERT SELECT wrapper
         * $varMap must be an associative array of the form [ 'dest1' => 'source1', ... ]