-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathQueryBuilder.php
More file actions
94 lines (86 loc) · 2.32 KB
/
Copy pathQueryBuilder.php
File metadata and controls
94 lines (86 loc) · 2.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
namespace StellarWP\DB\QueryBuilder;
use StellarWP\DB\QueryBuilder\Concerns\Aggregate;
use StellarWP\DB\QueryBuilder\Concerns\CRUD;
use StellarWP\DB\QueryBuilder\Concerns\FromClause;
use StellarWP\DB\QueryBuilder\Concerns\GroupByStatement;
use StellarWP\DB\QueryBuilder\Concerns\HavingClause;
use StellarWP\DB\QueryBuilder\Concerns\JoinClause;
use StellarWP\DB\QueryBuilder\Concerns\LimitStatement;
use StellarWP\DB\QueryBuilder\Concerns\MetaQuery;
use StellarWP\DB\QueryBuilder\Concerns\OffsetStatement;
use StellarWP\DB\QueryBuilder\Concerns\OrderByStatement;
use StellarWP\DB\QueryBuilder\Concerns\SelectStatement;
use StellarWP\DB\QueryBuilder\Concerns\TablePrefix;
use StellarWP\DB\QueryBuilder\Concerns\UnionOperator;
use StellarWP\DB\QueryBuilder\Concerns\WhereClause;
/**
* @since 1.0.0
*/
class QueryBuilder {
use Aggregate;
use CRUD;
use FromClause;
use GroupByStatement;
use HavingClause;
use JoinClause;
use LimitStatement;
use MetaQuery;
use OffsetStatement;
use OrderByStatement;
use SelectStatement;
use TablePrefix;
use UnionOperator;
use WhereClause;
/**
* @return string
*/
public function getSQL() {
$sql = array_merge(
$this->getSelectSQL(),
$this->getFromSQL(),
$this->getJoinSQL(),
$this->getWhereSQL(),
$this->getGroupBySQL(),
$this->getHavingSQL(),
$this->getOrderBySQL(),
$this->getLimitSQL(),
$this->getOffsetSQL(),
$this->getUnionSQL()
);
return $this->buildSQL($sql);
}
/**
* Generate the SQL for a DELETE query. Only the FROM, WHERE, ORDER BY, and LIMIT clauses are included.
* RETURNING is not supported.
* Note that aliases are supported only on MySQL >= 8.0.24 and MariaDB >= 11.6.
*
* @see https://mariadb.com/docs/server/reference/sql-statements/data-manipulation/changing-deleting-data/delete
* @see https://dev.mysql.com/doc/refman/8.4/en/delete.html
*
* @return string DELETE query.
*/
public function deleteSQL() {
$sql = array_merge(
$this->getFromSQL(),
$this->getWhereSQL(),
$this->getOrderBySQL(),
$this->getLimitSQL()
);
return 'DELETE ' . $this->buildSQL($sql);
}
/**
* Build the SQL query from the given parts.
*
* @param array $sql The SQL query parts.
*
* @return string SQL query.
*/
private function buildSQL( $sql ) {
return str_replace(
[ ' ', ' ' ],
' ',
implode( ' ', $sql )
);
}
}