MediaWiki master
Sqlite.php
Go to the documentation of this file.
1<?php
26
32class Sqlite {
33
38 public static function isPresent() {
39 return extension_loaded( 'pdo_sqlite' );
40 }
41
49 public static function checkSqlSyntax( $files ) {
50 if ( !self::isPresent() ) {
51 throw new RuntimeException( "Can't check SQL syntax: SQLite not found" );
52 }
53 if ( !is_array( $files ) ) {
54 $files = [ $files ];
55 }
56
57 $allowedTypes = array_fill_keys( [
58 'integer',
59 'real',
60 'text',
61 'blob',
62 // NULL type is omitted intentionally
63 ], true );
64
65 $db = DatabaseSqlite::newStandaloneInstance( ':memory:' );
66 try {
67 foreach ( $files as $file ) {
68 $err = $db->sourceFile( $file );
69 if ( $err ) {
70 return $err;
71 }
72 }
73
74 $tables = $db->query( "SELECT name FROM sqlite_master WHERE type='table'", __METHOD__ );
75 foreach ( $tables as $table ) {
76 if ( strpos( $table->name, 'sqlite_' ) === 0 ) {
77 continue;
78 }
79
80 $columns = $db->query(
81 'PRAGMA table_info(' . $db->addIdentifierQuotes( $table->name ) . ')',
82 __METHOD__
83 );
84 foreach ( $columns as $col ) {
85 if ( !isset( $allowedTypes[strtolower( $col->type )] ) ) {
86 $db->close( __METHOD__ );
87
88 return "Table {$table->name} has column {$col->name} with non-native type '{$col->type}'";
89 }
90 }
91 }
92 } catch ( DBError $e ) {
93 return $e->getMessage();
94 }
95 $db->close( __METHOD__ );
96
97 return true;
98 }
99}
This class contains code common to different SQLite-related maintenance scripts.
Definition Sqlite.php:32
static isPresent()
Checks whether PHP has SQLite support.
Definition Sqlite.php:38
static checkSqlSyntax( $files)
Checks given files for correctness of SQL syntax.
Definition Sqlite.php:49
Database error base class.
Definition DBError.php:36
This is the SQLite database abstraction layer.