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
ResultSetMapping.php
190 lines
| 1 | <?php |
| 2 | declare (strict_types=1); |
| 3 | namespace MailPoetVendor\Doctrine\ORM\Query; |
| 4 | if (!defined('ABSPATH')) exit; |
| 5 | use function array_merge; |
| 6 | use function count; |
| 7 | class ResultSetMapping |
| 8 | { |
| 9 | public $isMixed = \false; |
| 10 | public $isSelect = \true; |
| 11 | public $aliasMap = []; |
| 12 | public $relationMap = []; |
| 13 | public $parentAliasMap = []; |
| 14 | public $fieldMappings = []; |
| 15 | public $columnAliasMappings = []; |
| 16 | public $scalarMappings = []; |
| 17 | public $enumMappings = []; |
| 18 | public $typeMappings = []; |
| 19 | public $entityMappings = []; |
| 20 | public $metaMappings = []; |
| 21 | public $columnOwnerMap = []; |
| 22 | public $discriminatorColumns = []; |
| 23 | public $indexByMap = []; |
| 24 | public $declaringClasses = []; |
| 25 | public $isIdentifierColumn = []; |
| 26 | public $newObjectMappings = []; |
| 27 | public $metadataParameterMapping = []; |
| 28 | public $discriminatorParameters = []; |
| 29 | public function addEntityResult($class, $alias, $resultAlias = null) |
| 30 | { |
| 31 | $this->aliasMap[$alias] = $class; |
| 32 | $this->entityMappings[$alias] = $resultAlias; |
| 33 | if ($resultAlias !== null) { |
| 34 | $this->isMixed = \true; |
| 35 | } |
| 36 | return $this; |
| 37 | } |
| 38 | public function setDiscriminatorColumn($alias, $discrColumn) |
| 39 | { |
| 40 | $this->discriminatorColumns[$alias] = $discrColumn; |
| 41 | $this->columnOwnerMap[$discrColumn] = $alias; |
| 42 | return $this; |
| 43 | } |
| 44 | public function addIndexBy($alias, $fieldName) |
| 45 | { |
| 46 | $found = \false; |
| 47 | foreach (array_merge($this->metaMappings, $this->fieldMappings) as $columnName => $columnFieldName) { |
| 48 | if (!($columnFieldName === $fieldName && $this->columnOwnerMap[$columnName] === $alias)) { |
| 49 | continue; |
| 50 | } |
| 51 | $this->addIndexByColumn($alias, $columnName); |
| 52 | $found = \true; |
| 53 | break; |
| 54 | } |
| 55 | return $this; |
| 56 | } |
| 57 | public function addIndexByScalar($resultColumnName) |
| 58 | { |
| 59 | $this->indexByMap['scalars'] = $resultColumnName; |
| 60 | return $this; |
| 61 | } |
| 62 | public function addIndexByColumn($alias, $resultColumnName) |
| 63 | { |
| 64 | $this->indexByMap[$alias] = $resultColumnName; |
| 65 | return $this; |
| 66 | } |
| 67 | public function hasIndexBy($alias) |
| 68 | { |
| 69 | return isset($this->indexByMap[$alias]); |
| 70 | } |
| 71 | public function isFieldResult($columnName) |
| 72 | { |
| 73 | return isset($this->fieldMappings[$columnName]); |
| 74 | } |
| 75 | public function addFieldResult($alias, $columnName, $fieldName, $declaringClass = null) |
| 76 | { |
| 77 | // column name (in result set) => field name |
| 78 | $this->fieldMappings[$columnName] = $fieldName; |
| 79 | // column name => alias of owner |
| 80 | $this->columnOwnerMap[$columnName] = $alias; |
| 81 | // field name => class name of declaring class |
| 82 | $declaringClass = $declaringClass ?: $this->aliasMap[$alias]; |
| 83 | $this->declaringClasses[$columnName] = $declaringClass; |
| 84 | $this->columnAliasMappings[$declaringClass][$alias][$fieldName] = $columnName; |
| 85 | if (!$this->isMixed && $this->scalarMappings) { |
| 86 | $this->isMixed = \true; |
| 87 | } |
| 88 | return $this; |
| 89 | } |
| 90 | public function hasColumnAliasByField(string $alias, string $fieldName) : bool |
| 91 | { |
| 92 | $declaringClass = $this->aliasMap[$alias]; |
| 93 | return isset($this->columnAliasMappings[$declaringClass][$alias][$fieldName]); |
| 94 | } |
| 95 | public function getColumnAliasByField(string $alias, string $fieldName) : string |
| 96 | { |
| 97 | $declaringClass = $this->aliasMap[$alias]; |
| 98 | return $this->columnAliasMappings[$declaringClass][$alias][$fieldName]; |
| 99 | } |
| 100 | public function addJoinedEntityResult($class, $alias, $parentAlias, $relation) |
| 101 | { |
| 102 | $this->aliasMap[$alias] = $class; |
| 103 | $this->parentAliasMap[$alias] = $parentAlias; |
| 104 | $this->relationMap[$alias] = $relation; |
| 105 | return $this; |
| 106 | } |
| 107 | public function addScalarResult($columnName, $alias, $type = 'string') |
| 108 | { |
| 109 | $this->scalarMappings[$columnName] = $alias; |
| 110 | $this->typeMappings[$columnName] = $type; |
| 111 | if (!$this->isMixed && $this->fieldMappings) { |
| 112 | $this->isMixed = \true; |
| 113 | } |
| 114 | return $this; |
| 115 | } |
| 116 | public function addEnumResult($columnName, $enumType) |
| 117 | { |
| 118 | $this->enumMappings[$columnName] = $enumType; |
| 119 | return $this; |
| 120 | } |
| 121 | public function addMetadataParameterMapping($parameter, $attribute) |
| 122 | { |
| 123 | $this->metadataParameterMapping[$parameter] = $attribute; |
| 124 | } |
| 125 | public function isScalarResult($columnName) |
| 126 | { |
| 127 | return isset($this->scalarMappings[$columnName]); |
| 128 | } |
| 129 | public function getClassName($alias) |
| 130 | { |
| 131 | return $this->aliasMap[$alias]; |
| 132 | } |
| 133 | public function getScalarAlias($columnName) |
| 134 | { |
| 135 | return $this->scalarMappings[$columnName]; |
| 136 | } |
| 137 | public function getDeclaringClass($columnName) |
| 138 | { |
| 139 | return $this->declaringClasses[$columnName]; |
| 140 | } |
| 141 | public function getRelation($alias) |
| 142 | { |
| 143 | return $this->relationMap[$alias]; |
| 144 | } |
| 145 | public function isRelation($alias) |
| 146 | { |
| 147 | return isset($this->relationMap[$alias]); |
| 148 | } |
| 149 | public function getEntityAlias($columnName) |
| 150 | { |
| 151 | return $this->columnOwnerMap[$columnName]; |
| 152 | } |
| 153 | public function getParentAlias($alias) |
| 154 | { |
| 155 | return $this->parentAliasMap[$alias]; |
| 156 | } |
| 157 | public function hasParentAlias($alias) |
| 158 | { |
| 159 | return isset($this->parentAliasMap[$alias]); |
| 160 | } |
| 161 | public function getFieldName($columnName) |
| 162 | { |
| 163 | return $this->fieldMappings[$columnName]; |
| 164 | } |
| 165 | public function getAliasMap() |
| 166 | { |
| 167 | return $this->aliasMap; |
| 168 | } |
| 169 | public function getEntityResultCount() |
| 170 | { |
| 171 | return count($this->aliasMap); |
| 172 | } |
| 173 | public function isMixedResult() |
| 174 | { |
| 175 | return $this->isMixed; |
| 176 | } |
| 177 | public function addMetaResult($alias, $columnName, $fieldName, $isIdentifierColumn = \false, $type = null) |
| 178 | { |
| 179 | $this->metaMappings[$columnName] = $fieldName; |
| 180 | $this->columnOwnerMap[$columnName] = $alias; |
| 181 | if ($isIdentifierColumn) { |
| 182 | $this->isIdentifierColumn[$alias][$columnName] = \true; |
| 183 | } |
| 184 | if ($type) { |
| 185 | $this->typeMappings[$columnName] = $type; |
| 186 | } |
| 187 | return $this; |
| 188 | } |
| 189 | } |
| 190 |