xref: /plugin/sqlite/QuerySaver.php (revision 6f75e9a520c03e465b31b8fea7ad72b331415274)
13a56750bSAndreas Gohr<?php
23a56750bSAndreas Gohr
33a56750bSAndreas Gohrnamespace dokuwiki\plugin\sqlite;
43a56750bSAndreas Gohr
5*6f75e9a5SSzymon Olewniczakuse dokuwiki\Extension\Event;
6*6f75e9a5SSzymon Olewniczak
73a56750bSAndreas Gohrclass QuerySaver
83a56750bSAndreas Gohr{
93a56750bSAndreas Gohr
103a56750bSAndreas Gohr    protected $db;
113a56750bSAndreas Gohr    protected $upstream;
123a56750bSAndreas Gohr
133a56750bSAndreas Gohr    /**
143a56750bSAndreas Gohr     * @param string $dbname The database the queries are saved for
153a56750bSAndreas Gohr     */
163a56750bSAndreas Gohr    public function __construct($dbname)
173a56750bSAndreas Gohr    {
183a56750bSAndreas Gohr        $this->db = new SQLiteDB('sqlite', DOKU_PLUGIN . 'sqlite/db/');
193a56750bSAndreas Gohr        $this->upstream = $dbname;
203a56750bSAndreas Gohr    }
213a56750bSAndreas Gohr
223a56750bSAndreas Gohr    /**
233a56750bSAndreas Gohr     * Save a query
243a56750bSAndreas Gohr     *
253a56750bSAndreas Gohr     * @param string $name
263a56750bSAndreas Gohr     * @param string $query
273a56750bSAndreas Gohr     */
283a56750bSAndreas Gohr    public function saveQuery($name, $query)
293a56750bSAndreas Gohr    {
30*6f75e9a5SSzymon Olewniczak        $eventData = [
31*6f75e9a5SSzymon Olewniczak            'sqlitedb' => $this->db,
32*6f75e9a5SSzymon Olewniczak            'upstream'  => $this->upstream,
33*6f75e9a5SSzymon Olewniczak            'name' => &$name,
34*6f75e9a5SSzymon Olewniczak            'query' => &$query
35*6f75e9a5SSzymon Olewniczak        ];
36*6f75e9a5SSzymon Olewniczak        $event = new Event('PLUGIN_SQLITE_QUERY_SAVE', $eventData);
37*6f75e9a5SSzymon Olewniczak        if ($event->advise_before()) {
383a56750bSAndreas Gohr            $sql = 'INSERT INTO queries (db, name, sql) VALUES (?, ?, ?)';
393a56750bSAndreas Gohr            $this->db->exec($sql, [$this->upstream, $name, $query]);
403a56750bSAndreas Gohr        }
41*6f75e9a5SSzymon Olewniczak        $event->advise_after();
42*6f75e9a5SSzymon Olewniczak    }
433a56750bSAndreas Gohr
443a56750bSAndreas Gohr    /**
453a56750bSAndreas Gohr     * Get a saved query
463a56750bSAndreas Gohr     *
473a56750bSAndreas Gohr     * @param string $name
483a56750bSAndreas Gohr     * @return string The SQL query
493a56750bSAndreas Gohr     */
503a56750bSAndreas Gohr    public function getQuery($name)
513a56750bSAndreas Gohr    {
523a56750bSAndreas Gohr        $sql = 'SELECT sql FROM queries WHERE db = ? AND name = ?';
533a56750bSAndreas Gohr        return $this->db->queryValue($sql, [$this->upstream, $name]);
543a56750bSAndreas Gohr    }
553a56750bSAndreas Gohr
563a56750bSAndreas Gohr    /**
573a56750bSAndreas Gohr     * Delete a saved query
583a56750bSAndreas Gohr     *
593a56750bSAndreas Gohr     * @param string $name
603a56750bSAndreas Gohr     */
613a56750bSAndreas Gohr    public function deleteQuery($name)
623a56750bSAndreas Gohr    {
63*6f75e9a5SSzymon Olewniczak        $eventData = [
64*6f75e9a5SSzymon Olewniczak            'sqlitedb' => $this->db,
65*6f75e9a5SSzymon Olewniczak            'upstream'  => $this->upstream,
66*6f75e9a5SSzymon Olewniczak            'name' => &$name
67*6f75e9a5SSzymon Olewniczak        ];
68*6f75e9a5SSzymon Olewniczak        $event = new Event('PLUGIN_SQLITE_QUERY_DELETE', $eventData);
69*6f75e9a5SSzymon Olewniczak        if ($event->advise_before()) {
703a56750bSAndreas Gohr            $sql = 'DELETE FROM queries WHERE db = ? AND name = ?';
713a56750bSAndreas Gohr            $this->db->exec($sql, [$this->upstream, $name]);
723a56750bSAndreas Gohr        }
73*6f75e9a5SSzymon Olewniczak        $event->advise_after();
74*6f75e9a5SSzymon Olewniczak    }
753a56750bSAndreas Gohr
763a56750bSAndreas Gohr    /**
773a56750bSAndreas Gohr     * Get all saved queries
783a56750bSAndreas Gohr     *
793a56750bSAndreas Gohr     * @return array
803a56750bSAndreas Gohr     */
813a56750bSAndreas Gohr    public function getQueries()
823a56750bSAndreas Gohr    {
833a56750bSAndreas Gohr        $sql = 'SELECT name, sql FROM queries WHERE db = ?';
843a56750bSAndreas Gohr        return $this->db->queryAll($sql, [$this->upstream]);
853a56750bSAndreas Gohr    }
863a56750bSAndreas Gohr}
87