Commit 6db507c4 authored by romanb's avatar romanb

Some array/object related fixes to hydration

parent 580f21c4
...@@ -150,7 +150,8 @@ class Doctrine_ORM_Internal_Hydration_StandardHydrator extends Doctrine_ORM_Inte ...@@ -150,7 +150,8 @@ class Doctrine_ORM_Internal_Hydration_StandardHydrator extends Doctrine_ORM_Inte
if (count($result) > 1 || count($result[0]) > 1) { if (count($result) > 1 || count($result[0]) > 1) {
throw Doctrine_ORM_Exceptions_HydrationException::nonUniqueResult(); throw Doctrine_ORM_Exceptions_HydrationException::nonUniqueResult();
} }
return array_shift($this->_gatherScalarRowData($result[0], $cache)); $result = $this->_gatherScalarRowData($result[0], $cache);
return array_shift($result);
} }
// Process result set // Process result set
...@@ -245,9 +246,14 @@ class Doctrine_ORM_Internal_Hydration_StandardHydrator extends Doctrine_ORM_Inte ...@@ -245,9 +246,14 @@ class Doctrine_ORM_Internal_Hydration_StandardHydrator extends Doctrine_ORM_Inte
$driver->getReferenceValue($baseElement, $relationAlias)); $driver->getReferenceValue($baseElement, $relationAlias));
} }
} else if ( ! isset($baseElement[$relationAlias])) { } else if ( ! isset($baseElement[$relationAlias])) {
if ($hydrationMode == Doctrine_Query::HYDRATE_ARRAY) {
$array = array();
$driver->setRelatedElement($baseElement, $relationAlias, $array);
} else {
$driver->setRelatedElement($baseElement, $relationAlias, $driver->setRelatedElement($baseElement, $relationAlias,
$driver->getElementCollection($entityName)); $driver->getElementCollection($entityName));
} }
}
} else { } else {
// x-1 relation // x-1 relation
$oneToOne = true; $oneToOne = true;
...@@ -260,9 +266,16 @@ class Doctrine_ORM_Internal_Hydration_StandardHydrator extends Doctrine_ORM_Inte ...@@ -260,9 +266,16 @@ class Doctrine_ORM_Internal_Hydration_StandardHydrator extends Doctrine_ORM_Inte
$driver->getElement($data, $entityName)); $driver->getElement($data, $entityName));
} }
} }
if ($hydrationMode == Doctrine_Query::HYDRATE_ARRAY) {
if (($coll =& $driver->getReferenceValue($baseElement, $relationAlias)) !== null) { if (($coll =& $driver->getReferenceValue($baseElement, $relationAlias)) !== null) {
$this->_updateResultPointer($resultPointers, $coll, $index, $dqlAlias, $oneToOne); $this->_updateResultPointer($resultPointers, $coll, $index, $dqlAlias, $oneToOne);
} }
} else {
if (($coll = $driver->getReferenceValue($baseElement, $relationAlias)) !== null) {
$this->_updateResultPointer($resultPointers, $coll, $index, $dqlAlias, $oneToOne);
}
}
} }
// append scalar values to mixed result sets // append scalar values to mixed result sets
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment