PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / doctrine / orm / src / Query / ResultSetMappingBuilder.php
mailpoet / vendor-prefixed / doctrine / orm / src / Query Last commit date
AST 9 months ago Exec 9 months ago Expr 9 months ago Filter 9 months ago Expr.php 9 months ago FilterCollection.php 9 months ago Lexer.php 9 months ago OutputWalker.php 9 months ago Parameter.php 9 months ago ParameterTypeInferer.php 9 months ago Parser.php 9 months ago ParserResult.php 9 months ago Printer.php 9 months ago QueryException.php 9 months ago QueryExpressionVisitor.php 9 months ago ResultSetMapping.php 9 months ago ResultSetMappingBuilder.php 9 months ago SqlOutputWalker.php 9 months ago SqlWalker.php 9 months ago TokenType.php 9 months ago TreeWalker.php 9 months ago TreeWalkerAdapter.php 9 months ago TreeWalkerChain.php 9 months ago TreeWalkerChainIterator.php 9 months ago index.php 9 months ago
ResultSetMappingBuilder.php
266 lines
1 <?php
2 declare (strict_types=1);
3 namespace MailPoetVendor\Doctrine\ORM\Query;
4 if (!defined('ABSPATH')) exit;
5 use MailPoetVendor\Doctrine\DBAL\Types\Type;
6 use MailPoetVendor\Doctrine\ORM\EntityManagerInterface;
7 use MailPoetVendor\Doctrine\ORM\Internal\SQLResultCasing;
8 use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata;
9 use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadataInfo;
10 use MailPoetVendor\Doctrine\ORM\Mapping\MappingException;
11 use MailPoetVendor\Doctrine\ORM\Utility\PersisterHelper;
12 use InvalidArgumentException;
13 use LogicException;
14 use function assert;
15 use function explode;
16 use function in_array;
17 use function sprintf;
18 use function str_contains;
19 use function strtolower;
20 class ResultSetMappingBuilder extends ResultSetMapping
21 {
22 use SQLResultCasing;
23 public const COLUMN_RENAMING_NONE = 1;
24 public const COLUMN_RENAMING_CUSTOM = 2;
25 public const COLUMN_RENAMING_INCREMENT = 3;
26 private $sqlCounter = 0;
27 private $em;
28 private $defaultRenameMode;
29 public function __construct(EntityManagerInterface $em, $defaultRenameMode = self::COLUMN_RENAMING_NONE)
30 {
31 $this->em = $em;
32 $this->defaultRenameMode = $defaultRenameMode;
33 }
34 public function addRootEntityFromClassMetadata($class, $alias, $renamedColumns = [], $renameMode = null)
35 {
36 $renameMode = $renameMode ?: $this->defaultRenameMode;
37 $columnAliasMap = $this->getColumnAliasMap($class, $renameMode, $renamedColumns);
38 $this->addEntityResult($class, $alias);
39 $this->addAllClassFields($class, $alias, $columnAliasMap);
40 }
41 public function addJoinedEntityFromClassMetadata($class, $alias, $parentAlias, $relation, $renamedColumns = [], $renameMode = null)
42 {
43 $renameMode = $renameMode ?: $this->defaultRenameMode;
44 $columnAliasMap = $this->getColumnAliasMap($class, $renameMode, $renamedColumns);
45 $this->addJoinedEntityResult($class, $alias, $parentAlias, $relation);
46 $this->addAllClassFields($class, $alias, $columnAliasMap);
47 }
48 protected function addAllClassFields($class, $alias, $columnAliasMap = [])
49 {
50 $classMetadata = $this->em->getClassMetadata($class);
51 $platform = $this->em->getConnection()->getDatabasePlatform();
52 if (!$this->isInheritanceSupported($classMetadata)) {
53 throw new InvalidArgumentException('ResultSetMapping builder does not currently support your inheritance scheme.');
54 }
55 foreach ($classMetadata->getColumnNames() as $columnName) {
56 $propertyName = $classMetadata->getFieldName($columnName);
57 $columnAlias = $this->getSQLResultCasing($platform, $columnAliasMap[$columnName]);
58 if (isset($this->fieldMappings[$columnAlias])) {
59 throw new InvalidArgumentException(sprintf("The column '%s' conflicts with another column in the mapper.", $columnName));
60 }
61 $this->addFieldResult($alias, $columnAlias, $propertyName);
62 $enumType = $classMetadata->getFieldMapping($propertyName)['enumType'] ?? null;
63 if (!empty($enumType)) {
64 $this->addEnumResult($columnAlias, $enumType);
65 }
66 }
67 foreach ($classMetadata->associationMappings as $associationMapping) {
68 if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) {
69 $targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']);
70 $isIdentifier = isset($associationMapping['id']) && $associationMapping['id'] === \true;
71 foreach ($associationMapping['joinColumns'] as $joinColumn) {
72 $columnName = $joinColumn['name'];
73 $columnAlias = $this->getSQLResultCasing($platform, $columnAliasMap[$columnName]);
74 $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);
75 if (isset($this->metaMappings[$columnAlias])) {
76 throw new InvalidArgumentException(sprintf("The column '%s' conflicts with another column in the mapper.", $columnAlias));
77 }
78 $this->addMetaResult($alias, $columnAlias, $columnName, $isIdentifier, $columnType);
79 }
80 }
81 }
82 }
83 private function isInheritanceSupported(ClassMetadata $classMetadata) : bool
84 {
85 if ($classMetadata->isInheritanceTypeSingleTable() && in_array($classMetadata->name, $classMetadata->discriminatorMap, \true)) {
86 return \true;
87 }
88 return !($classMetadata->isInheritanceTypeSingleTable() || $classMetadata->isInheritanceTypeJoined());
89 }
90 private function getColumnAlias(string $columnName, int $mode, array $customRenameColumns) : string
91 {
92 switch ($mode) {
93 case self::COLUMN_RENAMING_INCREMENT:
94 return $columnName . $this->sqlCounter++;
95 case self::COLUMN_RENAMING_CUSTOM:
96 return $customRenameColumns[$columnName] ?? $columnName;
97 case self::COLUMN_RENAMING_NONE:
98 return $columnName;
99 default:
100 throw new InvalidArgumentException(sprintf('%d is not a valid value for $mode', $mode));
101 }
102 }
103 private function getColumnAliasMap(string $className, int $mode, array $customRenameColumns) : array
104 {
105 if ($customRenameColumns) {
106 // for BC with 2.2-2.3 API
107 $mode = self::COLUMN_RENAMING_CUSTOM;
108 }
109 $columnAlias = [];
110 $class = $this->em->getClassMetadata($className);
111 foreach ($class->getColumnNames() as $columnName) {
112 $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns);
113 }
114 foreach ($class->associationMappings as $associationMapping) {
115 if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) {
116 foreach ($associationMapping['joinColumns'] as $joinColumn) {
117 $columnName = $joinColumn['name'];
118 $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns);
119 }
120 }
121 }
122 return $columnAlias;
123 }
124 public function addNamedNativeQueryMapping(ClassMetadataInfo $class, array $queryMapping)
125 {
126 if (isset($queryMapping['resultClass'])) {
127 return $this->addNamedNativeQueryResultClassMapping($class, $queryMapping['resultClass']);
128 }
129 return $this->addNamedNativeQueryResultSetMapping($class, $queryMapping['resultSetMapping']);
130 }
131 public function addNamedNativeQueryResultClassMapping(ClassMetadataInfo $class, $resultClassName)
132 {
133 $classMetadata = $this->em->getClassMetadata($resultClassName);
134 assert($classMetadata->reflClass !== null);
135 $shortName = $classMetadata->reflClass->getShortName();
136 $alias = strtolower($shortName[0]) . '0';
137 $this->addEntityResult($class->name, $alias);
138 if ($classMetadata->discriminatorColumn) {
139 $discrColumn = $classMetadata->discriminatorColumn;
140 $this->setDiscriminatorColumn($alias, $discrColumn['name']);
141 $this->addMetaResult($alias, $discrColumn['name'], $discrColumn['fieldName'], \false, $discrColumn['type']);
142 }
143 foreach ($classMetadata->getColumnNames() as $key => $columnName) {
144 $propertyName = $classMetadata->getFieldName($columnName);
145 $this->addFieldResult($alias, $columnName, $propertyName);
146 }
147 foreach ($classMetadata->associationMappings as $associationMapping) {
148 if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadata::TO_ONE) {
149 $targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']);
150 foreach ($associationMapping['joinColumns'] as $joinColumn) {
151 $columnName = $joinColumn['name'];
152 $columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);
153 $this->addMetaResult($alias, $columnName, $columnName, $classMetadata->isIdentifier($columnName), $columnType);
154 }
155 }
156 }
157 return $this;
158 }
159 public function addNamedNativeQueryResultSetMapping(ClassMetadataInfo $class, $resultSetMappingName)
160 {
161 if ($class->reflClass === null) {
162 throw new LogicException('Given class metadata has now class reflector.');
163 }
164 $counter = 0;
165 $resultMapping = $class->getSqlResultSetMapping($resultSetMappingName);
166 $rootShortName = $class->reflClass->getShortName();
167 $rootAlias = strtolower($rootShortName[0]) . $counter;
168 if (isset($resultMapping['entities'])) {
169 foreach ($resultMapping['entities'] as $entityMapping) {
170 $classMetadata = $this->em->getClassMetadata($entityMapping['entityClass']);
171 assert($classMetadata->reflClass !== null);
172 if ($class->reflClass->name === $classMetadata->reflClass->name) {
173 $this->addEntityResult($classMetadata->name, $rootAlias);
174 $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $rootAlias);
175 } else {
176 $shortName = $classMetadata->reflClass->getShortName();
177 $joinAlias = strtolower($shortName[0]) . ++$counter;
178 $associations = $class->getAssociationsByTargetClass($classMetadata->name);
179 $this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $joinAlias);
180 foreach ($associations as $relation => $mapping) {
181 $this->addJoinedEntityResult($mapping['targetEntity'], $joinAlias, $rootAlias, $relation);
182 }
183 }
184 }
185 }
186 if (isset($resultMapping['columns'])) {
187 foreach ($resultMapping['columns'] as $entityMapping) {
188 $type = isset($class->fieldNames[$entityMapping['name']]) ? PersisterHelper::getTypeOfColumn($entityMapping['name'], $class, $this->em) : 'string';
189 $this->addScalarResult($entityMapping['name'], $entityMapping['name'], $type);
190 }
191 }
192 return $this;
193 }
194 public function addNamedNativeQueryEntityResultMapping(ClassMetadataInfo $classMetadata, array $entityMapping, $alias)
195 {
196 if (isset($entityMapping['discriminatorColumn']) && $entityMapping['discriminatorColumn']) {
197 $discriminatorColumn = $entityMapping['discriminatorColumn'];
198 $discriminatorType = $classMetadata->getDiscriminatorColumn()['type'];
199 $this->setDiscriminatorColumn($alias, $discriminatorColumn);
200 $this->addMetaResult($alias, $discriminatorColumn, $discriminatorColumn, \false, $discriminatorType);
201 }
202 if (isset($entityMapping['fields']) && !empty($entityMapping['fields'])) {
203 foreach ($entityMapping['fields'] as $field) {
204 $fieldName = $field['name'];
205 $relation = null;
206 if (str_contains($fieldName, '.')) {
207 [$relation, $fieldName] = explode('.', $fieldName);
208 }
209 if ($relation !== null && isset($classMetadata->associationMappings[$relation])) {
210 if ($relation) {
211 $associationMapping = $classMetadata->associationMappings[$relation];
212 $joinAlias = $alias . $relation;
213 $parentAlias = $alias;
214 $this->addJoinedEntityResult($associationMapping['targetEntity'], $joinAlias, $parentAlias, $relation);
215 $this->addFieldResult($joinAlias, $field['column'], $fieldName);
216 } else {
217 $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name);
218 }
219 } else {
220 if (!isset($classMetadata->fieldMappings[$fieldName])) {
221 throw new InvalidArgumentException("Entity '" . $classMetadata->name . "' has no field '" . $fieldName . "'. ");
222 }
223 $this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name);
224 }
225 }
226 } else {
227 foreach ($classMetadata->getColumnNames() as $columnName) {
228 $propertyName = $classMetadata->getFieldName($columnName);
229 $this->addFieldResult($alias, $columnName, $propertyName);
230 }
231 }
232 return $this;
233 }
234 public function generateSelectClause($tableAliases = [])
235 {
236 $sql = '';
237 foreach ($this->columnOwnerMap as $columnName => $dqlAlias) {
238 $tableAlias = $tableAliases[$dqlAlias] ?? $dqlAlias;
239 if ($sql !== '') {
240 $sql .= ', ';
241 }
242 if (isset($this->fieldMappings[$columnName])) {
243 $class = $this->em->getClassMetadata($this->declaringClasses[$columnName]);
244 $fieldName = $this->fieldMappings[$columnName];
245 $classFieldMapping = $class->fieldMappings[$fieldName];
246 $columnSql = $tableAlias . '.' . $classFieldMapping['columnName'];
247 if (isset($classFieldMapping['requireSQLConversion']) && $classFieldMapping['requireSQLConversion'] === \true) {
248 $type = Type::getType($classFieldMapping['type']);
249 $columnSql = $type->convertToPHPValueSQL($columnSql, $this->em->getConnection()->getDatabasePlatform());
250 }
251 $sql .= $columnSql;
252 } elseif (isset($this->metaMappings[$columnName])) {
253 $sql .= $tableAlias . '.' . $this->metaMappings[$columnName];
254 } elseif (isset($this->discriminatorColumns[$dqlAlias])) {
255 $sql .= $tableAlias . '.' . $this->discriminatorColumns[$dqlAlias];
256 }
257 $sql .= ' AS ' . $columnName;
258 }
259 return $sql;
260 }
261 public function __toString()
262 {
263 return $this->generateSelectClause([]);
264 }
265 }
266