-
-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathDDLQueryBuilder.php
104 lines (88 loc) · 3.44 KB
/
DDLQueryBuilder.php
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
95
96
97
98
99
100
101
102
103
104
<?php
declare(strict_types=1);
namespace Yiisoft\Db\Oracle;
use Yiisoft\Db\Exception\Exception;
use Yiisoft\Db\Exception\NotSupportedException;
use Yiisoft\Db\QueryBuilder\AbstractDDLQueryBuilder;
use Yiisoft\Db\Schema\Column\ColumnInterface;
/**
* Implements a (Data Definition Language) SQL statements for Oracle Server.
*/
final class DDLQueryBuilder extends AbstractDDLQueryBuilder
{
public function addDefaultValue(string $table, string $name, string $column, mixed $value): string
{
throw new NotSupportedException(__METHOD__ . ' is not supported by Oracle.');
}
public function addForeignKey(
string $table,
string $name,
array|string $columns,
string $referenceTable,
array|string $referenceColumns,
?string $delete = null,
?string $update = null
): string {
$sql = 'ALTER TABLE ' . $this->quoter->quoteTableName($table)
. ' ADD CONSTRAINT ' . $this->quoter->quoteColumnName($name)
. ' FOREIGN KEY (' . $this->queryBuilder->buildColumns($columns) . ')'
. ' REFERENCES ' . $this->quoter->quoteTableName($referenceTable)
. ' (' . $this->queryBuilder->buildColumns($referenceColumns) . ')';
if ($delete !== null) {
$sql .= ' ON DELETE ' . $delete;
}
if ($update !== null) {
throw new Exception('Oracle does not support ON UPDATE clause.');
}
return $sql;
}
public function alterColumn(string $table, string $column, ColumnInterface|string $type): string
{
return 'ALTER TABLE '
. $this->quoter->quoteTableName($table)
. ' MODIFY '
. $this->quoter->quoteColumnName($column)
. ' ' . $this->queryBuilder->buildColumnDefinition($type);
}
public function checkIntegrity(string $schema = '', string $table = '', bool $check = true): string
{
throw new NotSupportedException(__METHOD__ . ' is not supported by Oracle.');
}
public function dropCommentFromColumn(string $table, string $column): string
{
return 'COMMENT ON COLUMN '
. $this->quoter->quoteTableName($table)
. '.'
. $this->quoter->quoteColumnName($column)
. " IS ''";
}
public function dropCommentFromTable(string $table): string
{
return 'COMMENT ON TABLE ' . $this->quoter->quoteTableName($table) . " IS ''";
}
public function dropDefaultValue(string $table, string $name): string
{
throw new NotSupportedException(__METHOD__ . ' is not supported by Oracle.');
}
public function dropIndex(string $table, string $name): string
{
return 'DROP INDEX ' . $this->quoter->quoteTableName($name);
}
/**
* @throws NotSupportedException Oracle doesn't support "IF EXISTS" option on drop table.
*/
public function dropTable(string $table, bool $ifExists = false, bool $cascade = false): string
{
if ($ifExists) {
throw new NotSupportedException('Oracle doesn\'t support "IF EXISTS" option on drop table.');
}
return 'DROP TABLE '
. $this->quoter->quoteTableName($table)
. ($cascade ? ' CASCADE CONSTRAINTS' : '');
}
public function renameTable(string $oldName, string $newName): string
{
return 'ALTER TABLE ' . $this->quoter->quoteTableName($oldName) . ' RENAME TO ' .
$this->quoter->quoteTableName($newName);
}
}