xref: /plugin/sqlite/helper/db.php (revision 3028f88622b500f7bb7733e65a39e4ff1ae5ea42) !
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