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>
Wed, 20 Feb 2019 15:39:45 +0000 (10:39 -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.

Also, remove a pointless "IGNORE" from populateExternallinksIndex60.php.
el_index_60 isn't uniquely indexed, so it has no effect anyway.

Bug: T215169
Change-Id: I1409c80b39834d1977c82c489226255a8cc93fd0

includes/libs/rdbms/database/DatabasePostgres.php
maintenance/populateExternallinksIndex60.php

index 0935d5a..381b1fd 100644 (file)
@@ -653,6 +653,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', ... ]
index 9b029fe..695773e 100644 (file)
@@ -73,7 +73,7 @@ class PopulateExternallinksIndex60 extends LoggedUpdateMaintenance {
                                        ],
                                        [
                                                'el_id' => $row->el_id,
-                                       ], __METHOD__, [ 'IGNORE' ]
+                                       ], __METHOD__
                                );
                        }
                        wfWaitForSlaves();