installer: Reuse $db->makeList() rather than reinventing the wheel
authorReedy <reedy@wikimedia.org>
Sat, 9 Sep 2017 16:28:09 +0000 (17:28 +0100)
committerKrinkle <krinklemail@gmail.com>
Sat, 7 Oct 2017 00:36:34 +0000 (00:36 +0000)
Change-Id: Ib1f896e5bed17bc240fe585fd6d5f753995a12e1

includes/installer/MysqlUpdater.php

index bcc2705..466ad0f 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Deployment
  */
 use Wikimedia\Rdbms\MySQLField;
  * @ingroup Deployment
  */
 use Wikimedia\Rdbms\MySQLField;
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 
 /**
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -530,25 +531,12 @@ class MysqlUpdater extends DatabaseUpdater {
                                ) );
                        }
                        $sql = "SELECT cur_title, cur_namespace, cur_id, cur_timestamp FROM $cur WHERE ";
                                ) );
                        }
                        $sql = "SELECT cur_title, cur_namespace, cur_id, cur_timestamp FROM $cur WHERE ";
-                       $firstCond = true;
+                       $dupeTitles = [];
                        foreach ( $duplicate as $ns => $titles ) {
                        foreach ( $duplicate as $ns => $titles ) {
-                               if ( $firstCond ) {
-                                       $firstCond = false;
-                               } else {
-                                       $sql .= ' OR ';
-                               }
-                               $sql .= "( cur_namespace = {$ns} AND cur_title in (";
-                               $first = true;
-                               foreach ( $titles as $t ) {
-                                       if ( $first ) {
-                                               $sql .= $this->db->addQuotes( $t );
-                                               $first = false;
-                                       } else {
-                                               $sql .= ', ' . $this->db->addQuotes( $t );
-                                       }
-                               }
-                               $sql .= ") ) \n";
+                               $dupeTitles[] = "( cur_namespace = {$ns} AND cur_title in ("
+                                       . $this->db->makeList( $titles ) . ") ) \n";
                        }
                        }
+                       $sql .= $this->db->makeList( $dupeTitles, IDatabase::LIST_OR );
                        # By sorting descending, the most recent entry will be the first in the list.
                        # All following entries will be deleted by the next while-loop.
                        $sql .= 'ORDER BY cur_namespace, cur_title, cur_timestamp DESC';
                        # By sorting descending, the most recent entry will be the first in the list.
                        # All following entries will be deleted by the next while-loop.
                        $sql .= 'ORDER BY cur_namespace, cur_title, cur_timestamp DESC';