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