Completed
Push — master ( 7f591d...75938c )
by James Ekow Abaka
21:31 queued 19:26
created

QueryEngine::getDeleteQuery()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 7
ccs 5
cts 5
cp 1
rs 9.4285
cc 1
eloc 5
nc 1
nop 1
crap 1
1
<?php
2
3
namespace ntentan\nibii;
4
5
class QueryEngine {
6
7
    private $db;
8
9 33
    public function setDriver($driver) {
10 33
        $this->db = $driver;
11 33
    }
12
13
    /**
14
     * Generates an SQL insert query string for the model based on the fields
15
     * currently stored in the model.
16
     * 
17
     * @param RecordWrapper $model
18
     * @return string
19
     */
20 4
    public function getInsertQuery($model) {
21 4
        $data = $model->getData();
22 4
        $table = $model->getDBStoreInformation()['quoted_table'];
23 4
        $fields = array_keys($data[0]);
24 4
        $quotedFields = [];
25 4
        $valueFields = [];
26
27 4
        foreach ($fields as $field) {
28 4
            $quotedFields[] = $this->db->quoteIdentifier($field);
29 4
            $valueFields[] = ":{$field}";
30
        }
31
32 4
        return "INSERT INTO " . $table .
33 4
            " (" . implode(", ", $quotedFields) . ") VALUES (" . implode(', ', $valueFields) . ")";
34
    }
35
36 6
    public function getBulkUpdateQuery($data, $parameters) {
37 6
        $updateData = [];
38 6
        foreach ($data as $field => $value) {
39 6
            $updateData[] = "{$this->db->quoteIdentifier($field)} = :$field";
40
        }
41
42 6
        return sprintf(
43 6
            "UPDATE %s SET %s %s", 
44 6
            $parameters->getTable(), 
45 6
            implode(', ', $updateData), 
46 6
            $parameters->getWhereClause()
47
        );
48
    }
49
50
    /**
51
     * Generates an SQL update query string for the model based on the data
52
     * currently stored in the model.
53
     * 
54
     * @param RecordWrapper $model
55
     * @return string
56
     */    
57 2
    public function getUpdateQuery($model) {
58 2
        $data = $model->getData();
59 2
        $fields = array_keys($data[0]);
60 2
        $valueFields = [];
61 2
        $conditions = [];
62 2
        $primaryKey = $model->getDescription()->getPrimaryKey();
63
64 2
        foreach ($fields as $field) {
65 2
            $quotedField = $this->db->quoteIdentifier($field);
66
67 2
            if (array_search($field, $primaryKey) !== false) {
68 2
                $conditions[] = "{$quotedField} = :{$field}";
69
            } else {
70 2
                $valueFields[] = "{$quotedField} = :{$field}";
71
            }
72
        }
73
74
        return "UPDATE " .
75 2
            $model->getDBStoreInformation()['quoted_table'] .
76 2
            " SET " . implode(', ', $valueFields) .
77 2
            " WHERE " . implode(' AND ', $conditions);
78
    }
79
80 25
    public function getSelectQuery($parameters) {
81 25
        return sprintf(
82 25
            "SELECT %s FROM %s%s%s%s%s", 
83 25
            $parameters->getFields(), 
84 25
            $parameters->getTable(), 
85 25
            $parameters->getWhereClause(), 
86 25
            $parameters->getSorts(), 
87 25
            $parameters->getLimit(), 
88 25
            $parameters->getOffset()
89
        );
90
    }
91
92
    public function getCountQuery($parameters) {
93
        return sprintf(
94
            "SELECT count(*) as count FROM %s%s", 
95
            $parameters->getTable(), 
96
            $parameters->getWhereClause()
97
        );
98
    }
99
100 2
    public function getDeleteQuery($parameters) {
101 2
        return sprintf(
102 2
            "DELETE FROM %s%s", 
103 2
            $parameters->getTable(), 
104 2
            $parameters->getWhereClause()
105
        );
106
    }
107
108
}
109