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