summaryrefslogtreecommitdiff
path: root/vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php
diff options
context:
space:
mode:
authorpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
committerpolo <ordipolo@gmx.fr>2024-08-13 23:45:21 +0200
commitbf6655a534a6775d30cafa67bd801276bda1d98d (patch)
treec6381e3f6c81c33eab72508f410b165ba05f7e9c /vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php
parent94d67a4b51f8e62e7d518cce26a526ae1ec48278 (diff)
downloadAppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.zip
VERSION 0.2 doctrine ORM et entités
Diffstat (limited to 'vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php')
-rw-r--r--vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php145
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
3declare(strict_types=1);
4
5namespace Doctrine\ORM\Mapping;
6
7use Doctrine\DBAL\Platforms\AbstractPlatform;
8use Doctrine\ORM\Internal\SQLResultCasing;
9
10use function array_map;
11use function array_merge;
12use function assert;
13use function is_numeric;
14use function preg_replace;
15use function substr;
16
17/**
18 * A set of rules for determining the physical column, alias and table quotes
19 */
20class 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}