Passed
Push — master ( 5379a4...a2888f )
by Joao Gilberto
04:49
created

src/Database/BaseDBAccess.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
3
namespace ByJG\AnyDataset\Database;
4
5
use ByJG\AnyDataset\AnyDatasetContext;
6
use ByJG\AnyDataset\LogHandler;
7
use ByJG\AnyDataset\Repository\DBDataset;
8
use ByJG\AnyDataset\Repository\IteratorInterface;
9
10
class BaseDBAccess
11
{
12
13
    /**
14
     * @var DBDataset
15
     */
16
    private $_db = null;
17
18
    /**
19
     * Wrapper for SQLHelper
20
     *
21
     * @var SQLHelper
22
     */
23
    protected $_sqlhelper = null;
24
25
    /**
26
     * Base Class Constructor. Don't must be override.
27
     * @param DBDataset $db
28
     */
29
    public function __construct(DBDataset $db)
30
    {
31
        $this->_db = $db;
32
    }
33
34
    /**
35
     * Create a instance of DBDataset to connect database
36
     * @return DBDataset
37
     */
38
    protected function getDBDataset()
39
    {
40
        return $this->_db;
41
    }
42
43
    /**
44
     * Execute a SQL and dont wait for a response.
45
     * @param string $sql
46
     * @param string $param
47
     * @param bool $getId
48
     * @return int|null
49
     */
50
    protected function executeSQL($sql, $param = null, $getId = false)
51
    {
52
        $dbfunction = $this->getDbFunctions();
53
54
        $debug = $this->getDebug();
55
        $start = 0;
56
        if ($debug) {
57
            $log = LogHandler::getInstance();
58
            $log->debug("Class name: " . get_class($this));
59
            $log->debug("SQL: " . $sql);
60
            if (!is_null($param)) {
61
                $s = "";
62
                foreach ($param as $key => $value) {
63
                    if ($s != "") {
64
                        $s .= ", ";
65
                    }
66
                    $s .= "[$key]=$value";
67
                }
68
                $log->debug("Params: $s");
69
            }
70
            $start = microtime(true);
71
        }
72
73
        if ($getId) {
74
            $id = $dbfunction->executeAndGetInsertedId($this->getDBDataset(), $sql, $param);
75
        } else {
76
            $id = null;
77
            $this->getDBDataset()->execSQL($sql, $param);
78
        }
79
80
        if ($debug) {
81
            $end = microtime(true);
82
            $log->debug("Execution time: " . ($end - $start) . " seconds ");
83
        }
84
85
        return $id;
86
    }
87
88
    /**
89
     * Execulte SELECT SQL Query
90
     *
91
     * @param string $sql
92
     * @param array $param
93
     * @param int $ttl
94
     * @return IteratorInterface
95
     */
96 View Code Duplication
    protected function getIterator($sql, $param = null, $ttl = null)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
97
    {
98
        $debug = $this->getDebug();
99
        $start = 0;
100
        if ($debug) {
101
            $log = LogHandler::getInstance();
102
            $log->debug("Class name: " . get_class($this));
103
            $log->debug("SQL: " . $sql);
104
            if (!is_null($param)) {
105
                $s = "";
106
                foreach ($param as $key => $value) {
107
                    if ($s != "") {
108
                        $s .= ", ";
109
                    }
110
                    $s .= "[$key]=$value";
111
                }
112
                $log->debug("Params: $s");
113
            }
114
            $start = microtime(true);
115
        }
116
        $it = $this->getDBDataset()->getIterator($sql, $param, $ttl);
117
        if ($debug) {
118
            $end = microtime(true);
119
            $log->debug("Execution Time: " . ($end - $start) . " segundos ");
120
        }
121
        return $it;
122
    }
123
124 View Code Duplication
    protected function getScalar($sql, $param = null)
0 ignored issues
show
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
125
    {
126
        $debug = $this->getDebug();
127
        $start = 0;
128
        if ($debug) {
129
            $log = LogHandler::getInstance();
130
            $log->debug("Class name: " . get_class($this));
131
            $log->debug("SQL: " . $sql);
132
            if (!is_null($param)) {
133
                $s = "";
134
                foreach ($param as $key => $value) {
135
                    if ($s != "") {
136
                        $s .= ", ";
137
                    }
138
                    $s .= "[$key]=$value";
139
                }
140
                $log->debug("Params: $s");
141
            }
142
            $start = microtime(true);
143
        }
144
        $scalar = $this->getDBDataset()->getScalar($sql, $param);
145
        if ($debug) {
146
            $end = microtime(true);
147
            $log->debug("Execution Time: " . ($end - $start) . " segundos ");
148
        }
149
        return $scalar;
150
    }
151
152
    /**
153
     * Get a SQLHelper object
154
     *
155
     * @return SQLHelper
156
     */
157
    public function getSQLHelper()
158
    {
159
        if (is_null($this->_sqlhelper)) {
160
            $this->_sqlhelper = new SQLHelper($this->getDBDataset());
161
        }
162
163
        return $this->_sqlhelper;
164
    }
165
166
    /**
167
     * Get an Interator from an ID. Ideal for get data from PK
168
     *
169
     * @param string $tablename
170
     * @param string $key
171
     * @param string $value
172
     * @return IteratorInterface
173
     */
174
    protected function getIteratorbyId($tablename, $key, $value)
175
    {
176
        $sql = "select * from $tablename where $key = [[$key]] ";
177
        $param = array();
178
        $param[$key] = $value;
179
        return $this->getIterator($sql, $param);
180
    }
181
182
    /**
183
     * Get an Array from an existing Iterator
184
     *
185
     * @param IteratorInterface $it
186
     * @param string $key
187
     * @param string $value
188
     * @param string $firstElement
189
     * @return array
190
     */
191
    public static function getArrayFromIterator(IteratorInterface $it, $key, $value, $firstElement = "-- Selecione --")
192
    {
193
        $retArray = array();
194
        if ($firstElement != "") {
195
            $retArray[""] = $firstElement;
196
        }
197
        while ($it->hasNext()) {
198
            $sr = $it->moveNext();
199
            $retArray[$sr->getField(strtolower($key))] = $sr->getField(strtolower($value));
200
        }
201
        return $retArray;
202
    }
203
204
    /**
205
     *
206
     * @param IteratorInterface $it
207
     * @param string $name
208
     * @param array $fields
209
     * @param bool $echoToBrowser
210
     * @return string
211
     */
212
    public static function saveToCSV($it, $name = "data.csv", $fields = null, $echoToBrowser = true)
213
    {
214
        if ($echoToBrowser) {
215
            ob_clean();
216
217
            header("Content-Type: text/csv;");
218
            header("Content-Disposition: attachment; filename=$name");
219
        }
220
221
        $first = true;
222
        $line = "";
223
        foreach ($it as $sr) {
224
            if ($first) {
225
                $first = false;
226
227
                if (is_null($fields)) {
228
                    $fields = $sr->getFieldNames();
229
                }
230
231
                $line .= '"' . implode('","', $fields) . '"' . "\n";
232
            }
233
234
            $raw = array();
235
            foreach ($fields as $field) {
236
                $raw[] = $sr->getField($field);
237
            }
238
            $line .= '"' . implode('","', array_values($raw)) . '"' . "\n";
239
240
            if ($echoToBrowser) {
241
                echo $line;
242
                $line = "";
243
            }
244
        }
245
246
        if (!$echoToBrowser) {
247
            return $line;
248
        }
249
        
250
        return null;
251
    }
252
253
    /**
254
     * Get a IDbFunctions class containing specific database operations
255
     * @return DBFunctionsInterface
256
     */
257
    public function getDbFunctions()
258
    {
259
        return $this->getDBDataset()->getDbFunctions();
260
    }
261
262
    public function beginTransaction()
263
    {
264
        $this->getDBDataset()->beginTransaction();
265
    }
266
267
    public function commitTransaction()
268
    {
269
        $this->getDBDataset()->commitTransaction();
270
    }
271
272
    public function rollbackTransaction()
273
    {
274
        $this->getDBDataset()->rollbackTransaction();
275
    }
276
277
    /**
278
     * @return bool
279
     */
280
    public function getDebug()
281
    {
282
        return AnyDatasetContext::getInstance()->getDebug();
283
    }
284
}
285