xref: /plugin/sqlite/QuerySaver.php (revision 093cf58398c11a2e20e2c525750d9c447600d47c)
1<?php
2
3namespace dokuwiki\plugin\sqlite;
4
5use dokuwiki\Extension\Event;
6
7class QuerySaver
8{
9
10    protected $db;
11    protected $upstream;
12
13    /**
14     * @param string $dbname The database the queries are saved for
15     */
16    public function __construct($dbname)
17    {
18        $this->db = new SQLiteDB('sqlite', DOKU_PLUGIN . 'sqlite/db/');
19        $this->upstream = $dbname;
20    }
21
22    /**
23     * Save a query
24     *
25     * @param string $name
26     * @param string $query
27     */
28    public function saveQuery($name, $query)
29    {
30        $eventData = [
31            'sqlitedb' => $this->db,
32            'upstream'  => $this->upstream,
33            'name' => &$name,
34            'query' => &$query
35        ];
36        $event = new Event('PLUGIN_SQLITE_QUERY_SAVE', $eventData);
37        if ($event->advise_before()) {
38            $sql = 'INSERT INTO queries (db, name, sql) VALUES (?, ?, ?)';
39            $this->db->exec($sql, [$this->upstream, $name, $query]);
40        }
41        $event->advise_after();
42    }
43
44    /**
45     * Get a saved query
46     *
47     * @param string $name
48     * @return string The SQL query
49     */
50    public function getQuery($name)
51    {
52        $sql = 'SELECT sql FROM queries WHERE db = ? AND name = ?';
53        return $this->db->queryValue($sql, [$this->upstream, $name]);
54    }
55
56    /**
57     * Delete a saved query
58     *
59     * @param string $name
60     */
61    public function deleteQuery($name)
62    {
63        $eventData = [
64            'sqlitedb' => $this->db,
65            'upstream'  => $this->upstream,
66            'name' => &$name
67        ];
68        $event = new Event('PLUGIN_SQLITE_QUERY_DELETE', $eventData);
69        if ($event->advise_before()) {
70            $sql = 'DELETE FROM queries WHERE db = ? AND name = ?';
71            $this->db->exec($sql, [$this->upstream, $name]);
72        }
73        $event->advise_after();
74    }
75
76    /**
77     * Get all saved queries
78     *
79     * @return array
80     */
81    public function getQueries()
82    {
83        $sql = 'SELECT name, sql FROM queries WHERE db = ?';
84        return $this->db->queryAll($sql, [$this->upstream]);
85    }
86}
87