MediaWiki  master
Sqlite.php
Go to the documentation of this file.
1 <?php
26 
32 class 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:37
This is the SQLite database abstraction layer.
if(PHP_SAPI !='cli-server') if(!isset( $_SERVER['SCRIPT_FILENAME'])) $file
Item class for a filearchive table row.
Definition: router.php:42