summaryrefslogtreecommitdiff
path: root/vendor/doctrine/dbal/src/SQL/Builder
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/doctrine/dbal/src/SQL/Builder')
-rw-r--r--vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php73
-rw-r--r--vendor/doctrine/dbal/src/SQL/Builder/DefaultSelectSQLBuilder.php94
-rw-r--r--vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php54
-rw-r--r--vendor/doctrine/dbal/src/SQL/Builder/SelectSQLBuilder.php14
4 files changed, 235 insertions, 0 deletions
diff --git a/vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php b/vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php
new file mode 100644
index 0000000..5f6a77a
--- /dev/null
+++ b/vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php
@@ -0,0 +1,73 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\DBAL\SQL\Builder;
6
7use Doctrine\DBAL\Platforms\AbstractPlatform;
8use Doctrine\DBAL\Schema\Schema;
9use Doctrine\DBAL\Schema\Sequence;
10use Doctrine\DBAL\Schema\Table;
11
12use function array_merge;
13
14final class CreateSchemaObjectsSQLBuilder
15{
16 public function __construct(private readonly AbstractPlatform $platform)
17 {
18 }
19
20 /** @return list<string> */
21 public function buildSQL(Schema $schema): array
22 {
23 return array_merge(
24 $this->buildNamespaceStatements($schema->getNamespaces()),
25 $this->buildSequenceStatements($schema->getSequences()),
26 $this->buildTableStatements($schema->getTables()),
27 );
28 }
29
30 /**
31 * @param list<string> $namespaces
32 *
33 * @return list<string>
34 */
35 private function buildNamespaceStatements(array $namespaces): array
36 {
37 $statements = [];
38
39 if ($this->platform->supportsSchemas()) {
40 foreach ($namespaces as $namespace) {
41 $statements[] = $this->platform->getCreateSchemaSQL($namespace);
42 }
43 }
44
45 return $statements;
46 }
47
48 /**
49 * @param list<Table> $tables
50 *
51 * @return list<string>
52 */
53 private function buildTableStatements(array $tables): array
54 {
55 return $this->platform->getCreateTablesSQL($tables);
56 }
57
58 /**
59 * @param list<Sequence> $sequences
60 *
61 * @return list<string>
62 */
63 private function buildSequenceStatements(array $sequences): array
64 {
65 $statements = [];
66
67 foreach ($sequences as $sequence) {
68 $statements[] = $this->platform->getCreateSequenceSQL($sequence);
69 }
70
71 return $statements;
72 }
73}
diff --git a/vendor/doctrine/dbal/src/SQL/Builder/DefaultSelectSQLBuilder.php b/vendor/doctrine/dbal/src/SQL/Builder/DefaultSelectSQLBuilder.php
new file mode 100644
index 0000000..a30120e
--- /dev/null
+++ b/vendor/doctrine/dbal/src/SQL/Builder/DefaultSelectSQLBuilder.php
@@ -0,0 +1,94 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\DBAL\SQL\Builder;
6
7use Doctrine\DBAL\Exception;
8use Doctrine\DBAL\Platforms\AbstractPlatform;
9use Doctrine\DBAL\Platforms\Exception\NotSupported;
10use Doctrine\DBAL\Query\ForUpdate\ConflictResolutionMode;
11use Doctrine\DBAL\Query\SelectQuery;
12
13use function count;
14use function implode;
15
16final class DefaultSelectSQLBuilder implements SelectSQLBuilder
17{
18 /** @internal The SQL builder should be instantiated only by database platforms. */
19 public function __construct(
20 private readonly AbstractPlatform $platform,
21 private readonly ?string $forUpdateSQL,
22 private readonly ?string $skipLockedSQL,
23 ) {
24 }
25
26 /** @throws Exception */
27 public function buildSQL(SelectQuery $query): string
28 {
29 $parts = ['SELECT'];
30
31 if ($query->isDistinct()) {
32 $parts[] = 'DISTINCT';
33 }
34
35 $parts[] = implode(', ', $query->getColumns());
36
37 $from = $query->getFrom();
38
39 if (count($from) > 0) {
40 $parts[] = 'FROM ' . implode(', ', $from);
41 }
42
43 $where = $query->getWhere();
44
45 if ($where !== null) {
46 $parts[] = 'WHERE ' . $where;
47 }
48
49 $groupBy = $query->getGroupBy();
50
51 if (count($groupBy) > 0) {
52 $parts[] = 'GROUP BY ' . implode(', ', $groupBy);
53 }
54
55 $having = $query->getHaving();
56
57 if ($having !== null) {
58 $parts[] = 'HAVING ' . $having;
59 }
60
61 $orderBy = $query->getOrderBy();
62
63 if (count($orderBy) > 0) {
64 $parts[] = 'ORDER BY ' . implode(', ', $orderBy);
65 }
66
67 $sql = implode(' ', $parts);
68 $limit = $query->getLimit();
69
70 if ($limit->isDefined()) {
71 $sql = $this->platform->modifyLimitQuery($sql, $limit->getMaxResults(), $limit->getFirstResult());
72 }
73
74 $forUpdate = $query->getForUpdate();
75
76 if ($forUpdate !== null) {
77 if ($this->forUpdateSQL === null) {
78 throw NotSupported::new('FOR UPDATE');
79 }
80
81 $sql .= ' ' . $this->forUpdateSQL;
82
83 if ($forUpdate->getConflictResolutionMode() === ConflictResolutionMode::SKIP_LOCKED) {
84 if ($this->skipLockedSQL === null) {
85 throw NotSupported::new('SKIP LOCKED');
86 }
87
88 $sql .= ' ' . $this->skipLockedSQL;
89 }
90 }
91
92 return $sql;
93 }
94}
diff --git a/vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php b/vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php
new file mode 100644
index 0000000..c038489
--- /dev/null
+++ b/vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php
@@ -0,0 +1,54 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\DBAL\SQL\Builder;
6
7use Doctrine\DBAL\Platforms\AbstractPlatform;
8use Doctrine\DBAL\Schema\Schema;
9use Doctrine\DBAL\Schema\Sequence;
10use Doctrine\DBAL\Schema\Table;
11
12use function array_merge;
13
14final class DropSchemaObjectsSQLBuilder
15{
16 public function __construct(private readonly AbstractPlatform $platform)
17 {
18 }
19
20 /** @return list<string> */
21 public function buildSQL(Schema $schema): array
22 {
23 return array_merge(
24 $this->buildSequenceStatements($schema->getSequences()),
25 $this->buildTableStatements($schema->getTables()),
26 );
27 }
28
29 /**
30 * @param list<Table> $tables
31 *
32 * @return list<string>
33 */
34 private function buildTableStatements(array $tables): array
35 {
36 return $this->platform->getDropTablesSQL($tables);
37 }
38
39 /**
40 * @param list<Sequence> $sequences
41 *
42 * @return list<string>
43 */
44 private function buildSequenceStatements(array $sequences): array
45 {
46 $statements = [];
47
48 foreach ($sequences as $sequence) {
49 $statements[] = $this->platform->getDropSequenceSQL($sequence->getQuotedName($this->platform));
50 }
51
52 return $statements;
53 }
54}
diff --git a/vendor/doctrine/dbal/src/SQL/Builder/SelectSQLBuilder.php b/vendor/doctrine/dbal/src/SQL/Builder/SelectSQLBuilder.php
new file mode 100644
index 0000000..c013f96
--- /dev/null
+++ b/vendor/doctrine/dbal/src/SQL/Builder/SelectSQLBuilder.php
@@ -0,0 +1,14 @@
1<?php
2
3declare(strict_types=1);
4
5namespace Doctrine\DBAL\SQL\Builder;
6
7use Doctrine\DBAL\Exception;
8use Doctrine\DBAL\Query\SelectQuery;
9
10interface SelectSQLBuilder
11{
12 /** @throws Exception */
13 public function buildSQL(SelectQuery $query): string;
14}