]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - maintenance/sqlite.inc
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / maintenance / sqlite.inc
index 238fe82bce5a30ab09134eb6fc5ff85651c85899..f14856a5b21bafd904e3ea9d700baca11d90b1ba 100644 (file)
@@ -1,7 +1,33 @@
 <?php
+/**
+ * Helper class for sqlite-specific scripts
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+use Wikimedia\Rdbms\DatabaseSqlite;
+use Wikimedia\Rdbms\DBError;
 
 /**
  * This class contains code common to different SQLite-related maintenance scripts
+ *
+ * @ingroup Maintenance
  */
 class Sqlite {
 
@@ -10,34 +36,33 @@ class Sqlite {
         * @return bool
         */
        public static function isPresent() {
-               wfSuppressWarnings();
-               $compiled = wfDl( 'pdo_sqlite' );
-               wfRestoreWarnings();
-               return $compiled;
+               return extension_loaded( 'pdo_sqlite' );
        }
 
        /**
         * Checks given files for correctness of SQL syntax. MySQL DDL will be converted to
         * SQLite-compatible during processing.
         * Will throw exceptions on SQL errors
-        * @return mixed true if no error or error string in case of errors
+        * @param array|string $files
+        * @throws MWException
+        * @return bool True if no error or error string in case of errors
         */
        public static function checkSqlSyntax( $files ) {
-               if ( !Sqlite::isPresent() ) {
+               if ( !self::isPresent() ) {
                        throw new MWException( "Can't check SQL syntax: SQLite not found" );
                }
                if ( !is_array( $files ) ) {
-                       $files = array( $files );
+                       $files = [ $files ];
                }
 
-               $allowedTypes = array_flip( array(
+               $allowedTypes = array_flip( [
                        'integer',
                        'real',
                        'text',
                        'blob', // NULL type is omitted intentionally
-               ) );
+               ] );
 
-               $db = new DatabaseSqliteStandalone( ':memory:' );
+               $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
                try {
                        foreach ( $files as $file ) {
                                $err = $db->sourceFile( $file );
@@ -48,12 +73,15 @@ class Sqlite {
 
                        $tables = $db->query( "SELECT name FROM sqlite_master WHERE type='table'", __METHOD__ );
                        foreach ( $tables as $table ) {
-                               if ( strpos( $table->name, 'sqlite_' ) === 0 ) continue;
+                               if ( strpos( $table->name, 'sqlite_' ) === 0 ) {
+                                       continue;
+                               }
 
                                $columns = $db->query( "PRAGMA table_info({$table->name})", __METHOD__ );
                                foreach ( $columns as $col ) {
                                        if ( !isset( $allowedTypes[strtolower( $col->type )] ) ) {
                                                $db->close();
+
                                                return "Table {$table->name} has column {$col->name} with non-native type '{$col->type}'";
                                        }
                                }
@@ -62,6 +90,7 @@ class Sqlite {
                        return $e->getMessage();
                }
                $db->close();
+
                return true;
        }
- };
\ No newline at end of file
+}