/**
* Sqlite-specific installer.
*
+ * 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 Deployment
*/
* @since 1.17
*/
class SqliteInstaller extends DatabaseInstaller {
+ const MINIMUM_VERSION = '3.3.7';
+
+ /**
+ * @var DatabaseSqlite
+ */
+ public $db;
protected $globalNames = array(
'wgDBname',
return self::checkExtension( 'pdo_sqlite' );
}
+ /**
+ *
+ * @return Status:
+ */
+ public function checkPrerequisites() {
+ $result = Status::newGood();
+ // Bail out if SQLite is too old
+ $db = new DatabaseSqliteStandalone( ':memory:' );
+ if ( version_compare( $db->getServerVersion(), self::MINIMUM_VERSION, '<' ) ) {
+ $result->fatal( 'config-outdated-sqlite', $db->getServerVersion(), self::MINIMUM_VERSION );
+ }
+ // Check for FTS3 full-text search module
+ if( DatabaseSqlite::getFulltextSearchModule() != 'FTS3' ) {
+ $result->warning( 'config-no-fts3' );
+ }
+ return $result;
+ }
+
public function getGlobalDefaults() {
if ( isset( $_SERVER['DOCUMENT_ROOT'] ) ) {
$path = str_replace(
$this->getTextBox( 'wgDBname', 'config-db-name', array(), $this->parent->getHelpBox( 'config-sqlite-name-help' ) );
}
- /*
+ /**
* Safe wrapper for PHP's realpath() that fails gracefully if it's unable to canonicalize the path.
+ *
+ * @param $path string
+ *
+ * @return string
*/
private static function realpath( $path ) {
$result = realpath( $path );
return $result;
}
+ /**
+ * @return Status
+ */
public function submitConnectForm() {
$this->setVarsFromRequest( array( 'wgSQLiteDataDir', 'wgDBname' ) );
# Try realpath() if the directory already exists
$dir = self::realpath( $this->getVar( 'wgSQLiteDataDir' ) );
$result = self::dataDirOKmaybeCreate( $dir, true /* create? */ );
- if ( $result->isOK() )
- {
+ if ( $result->isOK() ) {
# Try expanding again in case we've just created it
$dir = self::realpath( $dir );
$this->setVar( 'wgSQLiteDataDir', $dir );
return $result;
}
+ /**
+ * @param $dir
+ * @param $create bool
+ * @return Status
+ */
private static function dataDirOKmaybeCreate( $dir, $create = false ) {
if ( !is_dir( $dir ) ) {
if ( !is_writable( dirname( $dir ) ) ) {
# if it's still writable
if ( $create ) {
wfSuppressWarnings();
- $ok = wfMkdirParents( $dir, 0700 );
+ $ok = wfMkdirParents( $dir, 0700, __METHOD__ );
wfRestoreWarnings();
if ( !$ok ) {
return Status::newFatal( 'config-sqlite-mkdir-error', $dir );
return Status::newGood();
}
+ /**
+ * @return Status
+ */
public function openConnection() {
global $wgSQLiteDataDir;
return $status;
}
+ /**
+ * @return bool
+ */
public function needsUpgrade() {
$dir = $this->getVar( 'wgSQLiteDataDir' );
$dbName = $this->getVar( 'wgDBname' );
return parent::needsUpgrade();
}
+ /**
+ * @return Status
+ */
public function setupDatabase() {
$dir = $this->getVar( 'wgSQLiteDataDir' );
return $this->getConnection();
}
+ /**
+ * @return Status
+ */
public function createTables() {
$status = parent::createTables();
return $this->setupSearchIndex( $status );
}
+ /**
+ * @param $status Status
+ * @return Status
+ */
public function setupSearchIndex( &$status ) {
global $IP;
return $status;
}
+ /**
+ * @return string
+ */
public function getLocalSettings() {
$dir = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgSQLiteDataDir' ) );
return