109a0e52bSSzymon Olewniczak<?php 209a0e52bSSzymon Olewniczak 309a0e52bSSzymon Olewniczak/** 4*3028f886SSzymon Olewniczak * DokuWiki Plugin sqlite (Helper Component) 509a0e52bSSzymon Olewniczak * 609a0e52bSSzymon Olewniczak * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 709a0e52bSSzymon Olewniczak * @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de> 809a0e52bSSzymon Olewniczak */ 909a0e52bSSzymon Olewniczak 1009a0e52bSSzymon Olewniczak 1109a0e52bSSzymon Olewniczakclass helper_plugin_sqlite_db extends DokuWiki_Plugin 1209a0e52bSSzymon Olewniczak{ 1309a0e52bSSzymon Olewniczak /** @var helper_plugin_sqlite */ 1409a0e52bSSzymon Olewniczak protected $sqlite; 1509a0e52bSSzymon Olewniczak 1609a0e52bSSzymon Olewniczak /** 1709a0e52bSSzymon Olewniczak * helper_plugin_struct_db constructor. 1809a0e52bSSzymon Olewniczak */ 1909a0e52bSSzymon Olewniczak public function __construct() 2009a0e52bSSzymon Olewniczak { 2109a0e52bSSzymon Olewniczak $this->init(); 2209a0e52bSSzymon Olewniczak } 2309a0e52bSSzymon Olewniczak 2409a0e52bSSzymon Olewniczak /** 2509a0e52bSSzymon Olewniczak * Initialize the database 2609a0e52bSSzymon Olewniczak * 2709a0e52bSSzymon Olewniczak * @throws Exception 2809a0e52bSSzymon Olewniczak */ 2909a0e52bSSzymon Olewniczak protected function init() 3009a0e52bSSzymon Olewniczak { 3109a0e52bSSzymon Olewniczak /** @var helper_plugin_sqlite $sqlite */ 3209a0e52bSSzymon Olewniczak $this->sqlite = plugin_load('helper', 'sqlite'); 3309a0e52bSSzymon Olewniczak if (!$this->sqlite) { 3409a0e52bSSzymon Olewniczak if (defined('DOKU_UNITTEST')) throw new \Exception('Couldn\'t load sqlite.'); 3509a0e52bSSzymon Olewniczak return; 3609a0e52bSSzymon Olewniczak } 3709a0e52bSSzymon Olewniczak 3809a0e52bSSzymon Olewniczak if ($this->sqlite->getAdapter() === null) { 3909a0e52bSSzymon Olewniczak if (defined('DOKU_UNITTEST')) throw new \Exception('Couldn\'t load PDO sqlite.'); 4009a0e52bSSzymon Olewniczak $this->sqlite = null; 4109a0e52bSSzymon Olewniczak return; 4209a0e52bSSzymon Olewniczak } 4309a0e52bSSzymon Olewniczak 4409a0e52bSSzymon Olewniczak if ($this->sqlite->getAdapter()->getName() != DOKU_EXT_PDO) { 4509a0e52bSSzymon Olewniczak if (defined('DOKU_UNITTEST')) throw new \Exception('Couldn\'t load PDO sqlite.'); 4609a0e52bSSzymon Olewniczak $this->sqlite = null; 4709a0e52bSSzymon Olewniczak return; 4809a0e52bSSzymon Olewniczak } 4909a0e52bSSzymon Olewniczak $this->sqlite->getAdapter()->setUseNativeAlter(true); 5009a0e52bSSzymon Olewniczak 5109a0e52bSSzymon Olewniczak // initialize the database connection 5209a0e52bSSzymon Olewniczak if (!$this->sqlite->init('sqlite', DOKU_PLUGIN . 'sqlite/db/')) { 5309a0e52bSSzymon Olewniczak if (defined('DOKU_UNITTEST')) throw new \Exception('Couldn\'t init sqlite.'); 5409a0e52bSSzymon Olewniczak $this->sqlite = null; 5509a0e52bSSzymon Olewniczak return; 5609a0e52bSSzymon Olewniczak } 5709a0e52bSSzymon Olewniczak } 5809a0e52bSSzymon Olewniczak 5909a0e52bSSzymon Olewniczak /** 6009a0e52bSSzymon Olewniczak * @param bool $throw throw an Exception when sqlite not available? 6109a0e52bSSzymon Olewniczak * @return helper_plugin_sqlite|null 6209a0e52bSSzymon Olewniczak */ 6309a0e52bSSzymon Olewniczak public function getDB($throw = true) 6409a0e52bSSzymon Olewniczak { 6509a0e52bSSzymon Olewniczak global $conf; 6609a0e52bSSzymon Olewniczak $len = strlen($conf['metadir']); 6709a0e52bSSzymon Olewniczak if ($this->sqlite && $conf['metadir'] != substr($this->sqlite->getAdapter()->getDbFile(), 0, $len)) { 6809a0e52bSSzymon Olewniczak $this->init(); 6909a0e52bSSzymon Olewniczak } 7009a0e52bSSzymon Olewniczak if (!$this->sqlite && $throw) { 71*3028f886SSzymon Olewniczak throw new \RuntimeException('no sqlite'); 7209a0e52bSSzymon Olewniczak } 7309a0e52bSSzymon Olewniczak return $this->sqlite; 7409a0e52bSSzymon Olewniczak } 7509a0e52bSSzymon Olewniczak 7609a0e52bSSzymon Olewniczak /** 7709a0e52bSSzymon Olewniczak * Completely remove the database and reinitialize it 7809a0e52bSSzymon Olewniczak * 7909a0e52bSSzymon Olewniczak * You do not want to call this except for testing! 8009a0e52bSSzymon Olewniczak */ 8109a0e52bSSzymon Olewniczak public function resetDB() 8209a0e52bSSzymon Olewniczak { 8309a0e52bSSzymon Olewniczak if (!$this->sqlite) return; 8409a0e52bSSzymon Olewniczak $file = $this->sqlite->getAdapter()->getDbFile(); 8509a0e52bSSzymon Olewniczak if (!$file) return; 8609a0e52bSSzymon Olewniczak unlink($file); 8709a0e52bSSzymon Olewniczak clearstatcache(true, $file); 8809a0e52bSSzymon Olewniczak $this->init(); 8909a0e52bSSzymon Olewniczak } 9009a0e52bSSzymon Olewniczak} 9109a0e52bSSzymon Olewniczak 9209a0e52bSSzymon Olewniczak// vim:ts=4:sw=4:et: 93