1*c3437056SNickeau<?php 2*c3437056SNickeau 3*c3437056SNickeau 4*c3437056SNickeaunamespace ComboStrap; 5*c3437056SNickeau 6*c3437056SNickeau 7*c3437056SNickeauclass SqliteRequest 8*c3437056SNickeau{ 9*c3437056SNickeau /** 10*c3437056SNickeau * @var Sqlite 11*c3437056SNickeau */ 12*c3437056SNickeau private $sqlite; 13*c3437056SNickeau /** 14*c3437056SNickeau * @var string 15*c3437056SNickeau */ 16*c3437056SNickeau private $tableName; 17*c3437056SNickeau /** 18*c3437056SNickeau * @var array 19*c3437056SNickeau */ 20*c3437056SNickeau private $data; 21*c3437056SNickeau /** 22*c3437056SNickeau * @var SqliteResult 23*c3437056SNickeau */ 24*c3437056SNickeau private $result; 25*c3437056SNickeau /** 26*c3437056SNickeau * @var string 27*c3437056SNickeau */ 28*c3437056SNickeau private $query; 29*c3437056SNickeau 30*c3437056SNickeau private $sqlitePlugin; 31*c3437056SNickeau /** 32*c3437056SNickeau * @var array|string[] 33*c3437056SNickeau */ 34*c3437056SNickeau private $queryParametrized; 35*c3437056SNickeau /** 36*c3437056SNickeau * A statement that is not a query 37*c3437056SNickeau * @var string 38*c3437056SNickeau */ 39*c3437056SNickeau private $statement; 40*c3437056SNickeau 41*c3437056SNickeau /** 42*c3437056SNickeau * SqliteRequest constructor. 43*c3437056SNickeau * @param Sqlite $sqlite 44*c3437056SNickeau */ 45*c3437056SNickeau public function __construct(Sqlite $sqlite) 46*c3437056SNickeau { 47*c3437056SNickeau $this->sqlite = $sqlite; 48*c3437056SNickeau $this->sqlitePlugin = $sqlite->getSqlitePlugin(); 49*c3437056SNickeau } 50*c3437056SNickeau 51*c3437056SNickeau public function setTableRow(string $tableName, array $data): SqliteRequest 52*c3437056SNickeau { 53*c3437056SNickeau $this->tableName = $tableName; 54*c3437056SNickeau $this->data = $data; 55*c3437056SNickeau return $this; 56*c3437056SNickeau } 57*c3437056SNickeau 58*c3437056SNickeau /** 59*c3437056SNickeau * @throws ExceptionCombo 60*c3437056SNickeau */ 61*c3437056SNickeau public function execute(): SqliteResult 62*c3437056SNickeau { 63*c3437056SNickeau $res = null; 64*c3437056SNickeau $requestType = ""; 65*c3437056SNickeau if ($this->data !== null && $this->tableName !== null) { 66*c3437056SNickeau $res = $this->sqlitePlugin->storeEntry($this->tableName, $this->data); 67*c3437056SNickeau $requestType = "Upsert"; 68*c3437056SNickeau } 69*c3437056SNickeau 70*c3437056SNickeau if ($this->query !== null) { 71*c3437056SNickeau $res = $this->sqlitePlugin->query($this->query); 72*c3437056SNickeau $requestType = "Query Simple"; 73*c3437056SNickeau } 74*c3437056SNickeau 75*c3437056SNickeau if ($this->queryParametrized !== null) { 76*c3437056SNickeau $res = $this->sqlitePlugin->getAdapter()->query($this->queryParametrized); 77*c3437056SNickeau $requestType = "Query Parametrized"; // delete, insert, update, query 78*c3437056SNickeau } 79*c3437056SNickeau 80*c3437056SNickeau if($this->statement!==null){ 81*c3437056SNickeau $res = $this->sqlitePlugin->getAdapter()->getDb()->exec($this->statement); 82*c3437056SNickeau $requestType = "statement"; 83*c3437056SNickeau } 84*c3437056SNickeau 85*c3437056SNickeau if ($res === null) { 86*c3437056SNickeau throw new ExceptionCombo("No Sql request was found to be executed"); 87*c3437056SNickeau } 88*c3437056SNickeau 89*c3437056SNickeau if ($res === false) { 90*c3437056SNickeau $message = $this->getErrorMessage(); 91*c3437056SNickeau throw new ExceptionCombo("Error in the $requestType. Message: {$message}"); 92*c3437056SNickeau } 93*c3437056SNickeau 94*c3437056SNickeau $this->result = new SqliteResult($this, $res); 95*c3437056SNickeau return $this->result; 96*c3437056SNickeau } 97*c3437056SNickeau 98*c3437056SNickeau public function getErrorMessage(): string 99*c3437056SNickeau { 100*c3437056SNickeau $adapter = $this->sqlitePlugin->getAdapter(); 101*c3437056SNickeau if ($adapter === null) { 102*c3437056SNickeau LogUtility::msg("The database adapter is null, no error info can be retrieved"); 103*c3437056SNickeau return ""; 104*c3437056SNickeau } 105*c3437056SNickeau $do = $adapter->getDb(); 106*c3437056SNickeau if ($do === null) { 107*c3437056SNickeau LogUtility::msg("The database object is null, it seems that the database connection has been closed"); 108*c3437056SNickeau return ""; 109*c3437056SNickeau } 110*c3437056SNickeau $errorInfo = $do->errorInfo(); 111*c3437056SNickeau $message = ""; 112*c3437056SNickeau $errorCode = $errorInfo[0]; 113*c3437056SNickeau if ($errorCode === '0000') { 114*c3437056SNickeau $message = ("No rows were deleted or updated"); 115*c3437056SNickeau } 116*c3437056SNickeau $errorInfoAsString = implode(", ",$errorInfo); 117*c3437056SNickeau return "$message. : {$errorInfoAsString}"; 118*c3437056SNickeau } 119*c3437056SNickeau 120*c3437056SNickeau public function getSqliteConnection(): Sqlite 121*c3437056SNickeau { 122*c3437056SNickeau return $this->sqlite; 123*c3437056SNickeau } 124*c3437056SNickeau 125*c3437056SNickeau public function close() 126*c3437056SNickeau { 127*c3437056SNickeau 128*c3437056SNickeau if ($this->result !== null) { 129*c3437056SNickeau $this->result->close(); 130*c3437056SNickeau $this->result = null; 131*c3437056SNickeau } 132*c3437056SNickeau 133*c3437056SNickeau } 134*c3437056SNickeau 135*c3437056SNickeau public function setQuery(string $string): SqliteRequest 136*c3437056SNickeau { 137*c3437056SNickeau $this->query = $string; 138*c3437056SNickeau return $this; 139*c3437056SNickeau } 140*c3437056SNickeau 141*c3437056SNickeau /** 142*c3437056SNickeau * @param string $executableSql 143*c3437056SNickeau * @param array $parameters 144*c3437056SNickeau * @return SqliteResult 145*c3437056SNickeau */ 146*c3437056SNickeau public function setQueryParametrized(string $executableSql, array $parameters): SqliteRequest 147*c3437056SNickeau { 148*c3437056SNickeau 149*c3437056SNickeau $args = [$executableSql]; 150*c3437056SNickeau $this->queryParametrized = array_merge($args, $parameters); 151*c3437056SNickeau return $this; 152*c3437056SNickeau 153*c3437056SNickeau } 154*c3437056SNickeau 155*c3437056SNickeau /** 156*c3437056SNickeau * @param string $statement 157*c3437056SNickeau * @return $this - a statement that will execute 158*c3437056SNickeau */ 159*c3437056SNickeau public function setStatement(string $statement): SqliteRequest 160*c3437056SNickeau { 161*c3437056SNickeau $this->statement = $statement; 162*c3437056SNickeau return $this; 163*c3437056SNickeau } 164*c3437056SNickeau 165*c3437056SNickeau} 166