xref: /template/strap/ComboStrap/SqliteRequest.php (revision c3437056399326d621a01da73b649707fbb0ae69)
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