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