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 / Internal / Hydration / ArrayHydrator.php
mailpoet / vendor-prefixed / doctrine / orm / src / Internal / Hydration Last commit date
AbstractHydrator.php 9 months ago ArrayHydrator.php 9 months ago HydrationException.php 9 months ago IterableResult.php 9 months ago ObjectHydrator.php 9 months ago ScalarColumnHydrator.php 9 months ago ScalarHydrator.php 9 months ago SimpleObjectHydrator.php 9 months ago SingleScalarHydrator.php 9 months ago index.php 9 months ago
ArrayHydrator.php
187 lines
1 <?php
2 declare (strict_types=1);
3 namespace MailPoetVendor\Doctrine\ORM\Internal\Hydration;
4 if (!defined('ABSPATH')) exit;
5 use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata;
6 use function count;
7 use function end;
8 use function is_array;
9 use function key;
10 use function reset;
11 class ArrayHydrator extends AbstractHydrator
12 {
13 private $rootAliases = [];
14 private $isSimpleQuery = \false;
15 private $identifierMap = [];
16 private $resultPointers = [];
17 private $idTemplate = [];
18 private $resultCounter = 0;
19 protected function prepare()
20 {
21 $this->isSimpleQuery = count($this->resultSetMapping()->aliasMap) <= 1;
22 foreach ($this->resultSetMapping()->aliasMap as $dqlAlias => $className) {
23 $this->identifierMap[$dqlAlias] = [];
24 $this->resultPointers[$dqlAlias] = [];
25 $this->idTemplate[$dqlAlias] = '';
26 }
27 }
28 protected function hydrateAllData()
29 {
30 $result = [];
31 while ($data = $this->statement()->fetchAssociative()) {
32 $this->hydrateRowData($data, $result);
33 }
34 return $result;
35 }
36 protected function hydrateRowData(array $row, array &$result)
37 {
38 // 1) Initialize
39 $id = $this->idTemplate;
40 // initialize the id-memory
41 $nonemptyComponents = [];
42 $rowData = $this->gatherRowData($row, $id, $nonemptyComponents);
43 // 2) Now hydrate the data found in the current row.
44 foreach ($rowData['data'] as $dqlAlias => $data) {
45 $index = \false;
46 if (isset($this->resultSetMapping()->parentAliasMap[$dqlAlias])) {
47 // It's a joined result
48 $parent = $this->resultSetMapping()->parentAliasMap[$dqlAlias];
49 $path = $parent . '.' . $dqlAlias;
50 // missing parent data, skipping as RIGHT JOIN hydration is not supported.
51 if (!isset($nonemptyComponents[$parent])) {
52 continue;
53 }
54 // Get a reference to the right element in the result tree.
55 // This element will get the associated element attached.
56 if ($this->resultSetMapping()->isMixed && isset($this->rootAliases[$parent])) {
57 $first = reset($this->resultPointers);
58 // TODO: Exception if $key === null ?
59 $baseElement =& $this->resultPointers[$parent][key($first)];
60 } elseif (isset($this->resultPointers[$parent])) {
61 $baseElement =& $this->resultPointers[$parent];
62 } else {
63 unset($this->resultPointers[$dqlAlias]);
64 // Ticket #1228
65 continue;
66 }
67 $relationAlias = $this->resultSetMapping()->relationMap[$dqlAlias];
68 $parentClass = $this->_metadataCache[$this->resultSetMapping()->aliasMap[$parent]];
69 $relation = $parentClass->associationMappings[$relationAlias];
70 // Check the type of the relation (many or single-valued)
71 if (!($relation['type'] & ClassMetadata::TO_ONE)) {
72 $oneToOne = \false;
73 if (!isset($baseElement[$relationAlias])) {
74 $baseElement[$relationAlias] = [];
75 }
76 if (isset($nonemptyComponents[$dqlAlias])) {
77 $indexExists = isset($this->identifierMap[$path][$id[$parent]][$id[$dqlAlias]]);
78 $index = $indexExists ? $this->identifierMap[$path][$id[$parent]][$id[$dqlAlias]] : \false;
79 $indexIsValid = $index !== \false ? isset($baseElement[$relationAlias][$index]) : \false;
80 if (!$indexExists || !$indexIsValid) {
81 $element = $data;
82 if (isset($this->resultSetMapping()->indexByMap[$dqlAlias])) {
83 $baseElement[$relationAlias][$row[$this->resultSetMapping()->indexByMap[$dqlAlias]]] = $element;
84 } else {
85 $baseElement[$relationAlias][] = $element;
86 }
87 end($baseElement[$relationAlias]);
88 $this->identifierMap[$path][$id[$parent]][$id[$dqlAlias]] = key($baseElement[$relationAlias]);
89 }
90 }
91 } else {
92 $oneToOne = \true;
93 if (!isset($nonemptyComponents[$dqlAlias]) && !isset($baseElement[$relationAlias])) {
94 $baseElement[$relationAlias] = null;
95 } elseif (!isset($baseElement[$relationAlias])) {
96 $baseElement[$relationAlias] = $data;
97 }
98 }
99 $coll =& $baseElement[$relationAlias];
100 if (is_array($coll)) {
101 $this->updateResultPointer($coll, $index, $dqlAlias, $oneToOne);
102 }
103 } else {
104 // It's a root result element
105 $this->rootAliases[$dqlAlias] = \true;
106 // Mark as root
107 $entityKey = $this->resultSetMapping()->entityMappings[$dqlAlias] ?: 0;
108 // if this row has a NULL value for the root result id then make it a null result.
109 if (!isset($nonemptyComponents[$dqlAlias])) {
110 $result[] = $this->resultSetMapping()->isMixed ? [$entityKey => null] : null;
111 $resultKey = $this->resultCounter;
112 ++$this->resultCounter;
113 continue;
114 }
115 // Check for an existing element
116 if ($this->isSimpleQuery || !isset($this->identifierMap[$dqlAlias][$id[$dqlAlias]])) {
117 $element = $this->resultSetMapping()->isMixed ? [$entityKey => $data] : $data;
118 if (isset($this->resultSetMapping()->indexByMap[$dqlAlias])) {
119 $resultKey = $row[$this->resultSetMapping()->indexByMap[$dqlAlias]];
120 $result[$resultKey] = $element;
121 } else {
122 $resultKey = $this->resultCounter;
123 $result[] = $element;
124 ++$this->resultCounter;
125 }
126 $this->identifierMap[$dqlAlias][$id[$dqlAlias]] = $resultKey;
127 } else {
128 $index = $this->identifierMap[$dqlAlias][$id[$dqlAlias]];
129 $resultKey = $index;
130 }
131 $this->updateResultPointer($result, $index, $dqlAlias, \false);
132 }
133 }
134 if (!isset($resultKey)) {
135 $this->resultCounter++;
136 }
137 // Append scalar values to mixed result sets
138 if (isset($rowData['scalars'])) {
139 if (!isset($resultKey)) {
140 // this only ever happens when no object is fetched (scalar result only)
141 $resultKey = isset($this->resultSetMapping()->indexByMap['scalars']) ? $row[$this->resultSetMapping()->indexByMap['scalars']] : $this->resultCounter - 1;
142 }
143 foreach ($rowData['scalars'] as $name => $value) {
144 $result[$resultKey][$name] = $value;
145 }
146 }
147 // Append new object to mixed result sets
148 if (isset($rowData['newObjects'])) {
149 if (!isset($resultKey)) {
150 $resultKey = $this->resultCounter - 1;
151 }
152 $scalarCount = isset($rowData['scalars']) ? count($rowData['scalars']) : 0;
153 foreach ($rowData['newObjects'] as $objIndex => $newObject) {
154 $class = $newObject['class'];
155 $args = $newObject['args'];
156 $obj = $class->newInstanceArgs($args);
157 if (count($args) === $scalarCount || $scalarCount === 0 && count($rowData['newObjects']) === 1) {
158 $result[$resultKey] = $obj;
159 continue;
160 }
161 $result[$resultKey][$objIndex] = $obj;
162 }
163 }
164 }
165 private function updateResultPointer(?array &$coll, $index, string $dqlAlias, bool $oneToOne) : void
166 {
167 if ($coll === null) {
168 unset($this->resultPointers[$dqlAlias]);
169 // Ticket #1228
170 return;
171 }
172 if ($oneToOne) {
173 $this->resultPointers[$dqlAlias] =& $coll;
174 return;
175 }
176 if ($index !== \false) {
177 $this->resultPointers[$dqlAlias] =& $coll[$index];
178 return;
179 }
180 if (!$coll) {
181 return;
182 }
183 end($coll);
184 $this->resultPointers[$dqlAlias] =& $coll[key($coll)];
185 }
186 }
187