diff options
Diffstat (limited to 'vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php')
-rw-r--r-- | vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php b/vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php new file mode 100644 index 0000000..6260336 --- /dev/null +++ b/vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php | |||
@@ -0,0 +1,145 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Doctrine\ORM\Mapping; | ||
6 | |||
7 | use Doctrine\DBAL\Platforms\AbstractPlatform; | ||
8 | use Doctrine\ORM\Internal\SQLResultCasing; | ||
9 | |||
10 | use function array_map; | ||
11 | use function array_merge; | ||
12 | use function assert; | ||
13 | use function is_numeric; | ||
14 | use function preg_replace; | ||
15 | use function substr; | ||
16 | |||
17 | /** | ||
18 | * A set of rules for determining the physical column, alias and table quotes | ||
19 | */ | ||
20 | class DefaultQuoteStrategy implements QuoteStrategy | ||
21 | { | ||
22 | use SQLResultCasing; | ||
23 | |||
24 | public function getColumnName(string $fieldName, ClassMetadata $class, AbstractPlatform $platform): string | ||
25 | { | ||
26 | return isset($class->fieldMappings[$fieldName]->quoted) | ||
27 | ? $platform->quoteIdentifier($class->fieldMappings[$fieldName]->columnName) | ||
28 | : $class->fieldMappings[$fieldName]->columnName; | ||
29 | } | ||
30 | |||
31 | /** | ||
32 | * {@inheritDoc} | ||
33 | * | ||
34 | * @todo Table names should be computed in DBAL depending on the platform | ||
35 | */ | ||
36 | public function getTableName(ClassMetadata $class, AbstractPlatform $platform): string | ||
37 | { | ||
38 | $tableName = $class->table['name']; | ||
39 | |||
40 | if (! empty($class->table['schema'])) { | ||
41 | $tableName = $class->table['schema'] . '.' . $class->table['name']; | ||
42 | } | ||
43 | |||
44 | return isset($class->table['quoted']) | ||
45 | ? $platform->quoteIdentifier($tableName) | ||
46 | : $tableName; | ||
47 | } | ||
48 | |||
49 | /** | ||
50 | * {@inheritDoc} | ||
51 | */ | ||
52 | public function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform): string | ||
53 | { | ||
54 | return isset($definition['quoted']) | ||
55 | ? $platform->quoteIdentifier($definition['sequenceName']) | ||
56 | : $definition['sequenceName']; | ||
57 | } | ||
58 | |||
59 | public function getJoinColumnName(JoinColumnMapping $joinColumn, ClassMetadata $class, AbstractPlatform $platform): string | ||
60 | { | ||
61 | return isset($joinColumn->quoted) | ||
62 | ? $platform->quoteIdentifier($joinColumn->name) | ||
63 | : $joinColumn->name; | ||
64 | } | ||
65 | |||
66 | public function getReferencedJoinColumnName( | ||
67 | JoinColumnMapping $joinColumn, | ||
68 | ClassMetadata $class, | ||
69 | AbstractPlatform $platform, | ||
70 | ): string { | ||
71 | return isset($joinColumn->quoted) | ||
72 | ? $platform->quoteIdentifier($joinColumn->referencedColumnName) | ||
73 | : $joinColumn->referencedColumnName; | ||
74 | } | ||
75 | |||
76 | public function getJoinTableName( | ||
77 | ManyToManyOwningSideMapping $association, | ||
78 | ClassMetadata $class, | ||
79 | AbstractPlatform $platform, | ||
80 | ): string { | ||
81 | $schema = ''; | ||
82 | |||
83 | if (isset($association->joinTable->schema)) { | ||
84 | $schema = $association->joinTable->schema . '.'; | ||
85 | } | ||
86 | |||
87 | $tableName = $association->joinTable->name; | ||
88 | |||
89 | if (isset($association->joinTable->quoted)) { | ||
90 | $tableName = $platform->quoteIdentifier($tableName); | ||
91 | } | ||
92 | |||
93 | return $schema . $tableName; | ||
94 | } | ||
95 | |||
96 | /** | ||
97 | * {@inheritDoc} | ||
98 | */ | ||
99 | public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform): array | ||
100 | { | ||
101 | $quotedColumnNames = []; | ||
102 | |||
103 | foreach ($class->identifier as $fieldName) { | ||
104 | if (isset($class->fieldMappings[$fieldName])) { | ||
105 | $quotedColumnNames[] = $this->getColumnName($fieldName, $class, $platform); | ||
106 | |||
107 | continue; | ||
108 | } | ||
109 | |||
110 | // Association defined as Id field | ||
111 | $assoc = $class->associationMappings[$fieldName]; | ||
112 | assert($assoc->isToOneOwningSide()); | ||
113 | $joinColumns = $assoc->joinColumns; | ||
114 | $assocQuotedColumnNames = array_map( | ||
115 | static fn (JoinColumnMapping $joinColumn) => isset($joinColumn->quoted) | ||
116 | ? $platform->quoteIdentifier($joinColumn->name) | ||
117 | : $joinColumn->name, | ||
118 | $joinColumns, | ||
119 | ); | ||
120 | |||
121 | $quotedColumnNames = array_merge($quotedColumnNames, $assocQuotedColumnNames); | ||
122 | } | ||
123 | |||
124 | return $quotedColumnNames; | ||
125 | } | ||
126 | |||
127 | public function getColumnAlias( | ||
128 | string $columnName, | ||
129 | int $counter, | ||
130 | AbstractPlatform $platform, | ||
131 | ClassMetadata|null $class = null, | ||
132 | ): string { | ||
133 | // 1 ) Concatenate column name and counter | ||
134 | // 2 ) Trim the column alias to the maximum identifier length of the platform. | ||
135 | // If the alias is to long, characters are cut off from the beginning. | ||
136 | // 3 ) Strip non alphanumeric characters | ||
137 | // 4 ) Prefix with "_" if the result its numeric | ||
138 | $columnName .= '_' . $counter; | ||
139 | $columnName = substr($columnName, -$platform->getMaxIdentifierLength()); | ||
140 | $columnName = preg_replace('/[^A-Za-z0-9_]/', '', $columnName); | ||
141 | $columnName = is_numeric($columnName) ? '_' . $columnName : $columnName; | ||
142 | |||
143 | return $this->getSQLResultCasing($platform, $columnName); | ||
144 | } | ||
145 | } | ||