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