Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
25 / 25
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
1 / 1
Insert
100.00% covered (success)
100.00%
25 / 25
100.00% covered (success)
100.00%
5 / 5
9
100.00% covered (success)
100.00%
1 / 1
 sql
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
2
 valuesSQL
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
3
 params
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 reset
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 allTablesReferenced
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3namespace BO\Zmsdb\Query\Builder;
4
5/**
6 * Insert
7 *
8 * Generates an SQL query for an INSERT operation.
9 *
10 * @package     BO\Zmsdb\Query\Builder
11 * @author      Alex Gisby<alex@solution10.com>
12 * @license     MIT
13 */
14class Insert extends Query
15{
16    use TableName;
17    use Values;
18
19    /**
20     * @var     string      The base part of the query
21     */
22    protected $queryBase = 'INSERT INTO';
23
24    /**
25     * Generates the full SQL statement for this query with all the composite parts.
26     *
27     * @return  string
28     */
29    public function sql()
30    {
31        if ($this->table === null) {
32            return '';
33        }
34
35        $candidateParts = [
36            $this->queryBase,
37            $this->dialect->quoteTable($this->table),
38            $this->valuesSQL(),
39        ];
40
41        return implode(' ', $candidateParts);
42    }
43
44    /**
45     * Returns the values part of a query for an INSERT statement (so using VALUES())
46     *
47     * @return  string
48     */
49    protected function valuesSQL()
50    {
51        $sql = '';
52        if (!empty($this->values)) {
53            $keyParts = [];
54            $valueParts = [];
55            foreach (array_keys($this->values) as $field) {
56                $keyParts[]     = $this->dialect->quoteField($field);
57                $valueParts[]   = '?';
58            }
59
60            $sql .= '(' . implode(', ', $keyParts) . ') ';
61            $sql .= 'VALUES (' . implode(', ', $valueParts) . ')';
62        }
63        return $sql;
64    }
65
66    /**
67     * Returns all the parameters, in the correct order, to pass into PDO.
68     *
69     * @return  array
70     */
71    public function params()
72    {
73        return array_values($this->values);
74    }
75
76    /**
77     * Resets the entire query.
78     *
79     * @return  $this
80     */
81    public function reset()
82    {
83        $this->table = null;
84        $this->resetValues();
85        return $this;
86    }
87
88    /*
89     * ------------------- All Tables ------------------------
90     */
91
92    /**
93     * Returns all the tables that this query makes mention of, in FROMs and JOINs
94     *
95     * @return  array
96     */
97    public function allTablesReferenced()
98    {
99        if ($this->table()) {
100            return [$this->table()];
101        }
102        return [];
103    }
104}