PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.16.9
GiveWP – Donation Plugin and Fundraising Platform v4.16.9
4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 All 255 releases
give / src / Framework / QueryBuilder / Concerns / SelectStatement.php

SelectStatement.php in GiveWP – Donation Plugin and Fundraising Platform 4.16.9, at src/Framework/QueryBuilder/Concerns/SelectStatement.php

128 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Give\Framework\QueryBuilder\Concerns;
4
5 use Give\Framework\Database\DB;
6 use Give\Framework\QueryBuilder\Clauses\RawSQL;
7 use Give\Framework\QueryBuilder\Clauses\Select;
8
9 /**
10 * @since 2.19.0
11 */
12 trait SelectStatement
13 {
14 /**
15 * @var Select[]|RawSQL[]
16 */
17 protected $selects = [];
18
19 /**
20 * @var bool
21 */
22 protected $distinct = false;
23
24 /**
25 * @var bool
26 */
27 private $includeSelectKeyword = true;
28
29 /**
30 * @param array $columns
31 *
32 * @return $this
33 */
34 public function select(...$columns)
35 {
36 $selects = array_map(function ($select) {
37 if (is_array($select)) {
38 list($column, $alias) = $select;
39
40 return new Select($column, $alias);
41 }
42
43 return new Select($select);
44 }, $columns);
45
46 $this->selects = array_merge($this->selects, $selects);
47
48 return $this;
49 }
50
51 /**
52 * Add raw SQL SELECT statement
53 *
54 * @param string $sql
55 * @param ...$args
56 */
57 public function selectRaw($sql, ...$args)
58 {
59 $this->selects[] = new RawSQL($sql, $args);
60
61 return $this;
62 }
63
64
65 /**
66 * Select distinct
67 *
68 * @return $this
69 */
70 public function distinct()
71 {
72 $this->distinct = true;
73
74 return $this;
75 }
76
77 /**
78 * @return string[]
79 */
80 protected function getSelectSQL()
81 {
82 // Select all by default
83 if (empty($this->selects)) {
84 $this->select('*');
85 }
86
87 $selects = [];
88
89 foreach ($this->selects as $i => $select) {
90 if ($select instanceof RawSQL) {
91 if ($i === 0) {
92 // If the first element is an instance of RawSQL
93 // then we don't need the starting SELECT keyword because we assume that the dev will include that in RawSQL
94 $this->includeSelectKeyword = false;
95 }
96 $selects[] = $select->sql;
97 continue;
98 }
99
100 if ($select->alias) {
101 $selects[] = DB::prepare(
102 '%1s AS %2s',
103 $select->column,
104 $select->alias
105 );
106
107 continue;
108 }
109
110 $selects[] = DB::prepare('%1s', $select->column);
111 }
112
113 $selectStatements = implode(', ', $selects);
114
115 if ($this->includeSelectKeyword) {
116 $keyword = 'SELECT ';
117
118 if ($this->distinct) {
119 $keyword .= 'DISTINCT ';
120 }
121
122 return [$keyword . $selectStatements];
123 }
124
125 return [$selectStatements];
126 }
127 }
128