Skip to content

Commit

Permalink
doctrine#1277 DDC-3346 DDC-3531 - switching persister context at runt…
Browse files Browse the repository at this point in the history
…ime, depending on choices
  • Loading branch information
Ocramius committed Jan 22, 2015
1 parent c8d6673 commit 8a7087b
Show file tree
Hide file tree
Showing 4 changed files with 48 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r'
$sql = $this->getSQLTableAlias($class->name, $tableAlias) . '.'
. $this->quoteStrategy->getColumnName($field, $class, $this->platform);

$this->cachedPersisterContexts['noLimits']->rsm->addFieldResult($alias, $columnAlias, $field, $class->name);
$this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name);

if (isset($class->fieldMappings[$field]['requireSQLConversion'])) {
$type = Type::getType($class->getTypeOfField($field));
Expand All @@ -88,7 +88,7 @@ protected function getSelectJoinColumnSQL($tableAlias, $joinColumnName, $classNa
{
$columnAlias = $this->getSQLColumnAlias($joinColumnName);

$this->cachedPersisterContexts['noLimits']->rsm->addMetaResult('r', $columnAlias, $joinColumnName, false, $type);
$this->currentPersisterContext->rsm->addMetaResult('r', $columnAlias, $joinColumnName, false, $type);

return $tableAlias . '.' . $joinColumnName . ' AS ' . $columnAlias;
}
Expand Down
64 changes: 32 additions & 32 deletions lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ public function getClassMetadata()
*/
public function getResultSetMapping()
{
return $this->cachedPersisterContexts['noLimits']->rsm;
return $this->currentPersisterContext->rsm;
}

/**
Expand Down Expand Up @@ -700,8 +700,8 @@ public function load(array $criteria, $entity = null, $assoc = null, array $hint
$hints[Query::HINT_REFRESH_ENTITY] = $entity;
}

$hydrator = $this->em->newHydrator($this->cachedPersisterContexts['noLimits']->selectJoinSql ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT);
$entities = $hydrator->hydrateAll($stmt, $this->cachedPersisterContexts['noLimits']->rsm, $hints);
$hydrator = $this->em->newHydrator($this->currentPersisterContext->selectJoinSql ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT);
$entities = $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, $hints);

return $entities ? $entities[0] : null;
}
Expand Down Expand Up @@ -790,7 +790,7 @@ public function refresh(array $id, $entity, $lockMode = null)
$stmt = $this->conn->executeQuery($sql, $params, $types);

$hydrator = $this->em->newHydrator(Query::HYDRATE_OBJECT);
$hydrator->hydrateAll($stmt, $this->cachedPersisterContexts['noLimits']->rsm, array(Query::HINT_REFRESH => true));
$hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, array(Query::HINT_REFRESH => true));
}

/**
Expand Down Expand Up @@ -820,9 +820,9 @@ public function loadCriteria(Criteria $criteria)
list($params, $types) = $this->expandCriteriaParameters($criteria);

$stmt = $this->conn->executeQuery($query, $params, $types);
$hydrator = $this->em->newHydrator(($this->cachedPersisterContexts['noLimits']->selectJoinSql) ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT);
$hydrator = $this->em->newHydrator(($this->currentPersisterContext->selectJoinSql) ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT);

return $hydrator->hydrateAll($stmt, $this->cachedPersisterContexts['noLimits']->rsm, array(UnitOfWork::HINT_DEFEREAGERLOAD => true));
return $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, array(UnitOfWork::HINT_DEFEREAGERLOAD => true));
}

/**
Expand Down Expand Up @@ -867,9 +867,9 @@ public function loadAll(array $criteria = array(), array $orderBy = null, $limit
list($params, $types) = $this->expandParameters($criteria);
$stmt = $this->conn->executeQuery($sql, $params, $types);

$hydrator = $this->em->newHydrator(($this->cachedPersisterContexts['noLimits']->selectJoinSql) ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT);
$hydrator = $this->em->newHydrator(($this->currentPersisterContext->selectJoinSql) ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT);

return $hydrator->hydrateAll($stmt, $this->cachedPersisterContexts['noLimits']->rsm, array(UnitOfWork::HINT_DEFEREAGERLOAD => true));
return $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, array(UnitOfWork::HINT_DEFEREAGERLOAD => true));
}

/**
Expand All @@ -894,11 +894,11 @@ public function getManyToManyCollection(array $assoc, $sourceEntity, $offset = n
*/
private function loadArrayFromStatement($assoc, $stmt)
{
$rsm = $this->cachedPersisterContexts['noLimits']->rsm;
$rsm = $this->currentPersisterContext->rsm;
$hints = array(UnitOfWork::HINT_DEFEREAGERLOAD => true);

if (isset($assoc['indexBy'])) {
$rsm = clone ($this->cachedPersisterContexts['noLimits']->rsm); // this is necessary because the "default rsm" should be changed.
$rsm = clone ($this->currentPersisterContext->rsm); // this is necessary because the "default rsm" should be changed.
$rsm->addIndexBy('r', $assoc['indexBy']);
}

Expand All @@ -916,14 +916,14 @@ private function loadArrayFromStatement($assoc, $stmt)
*/
private function loadCollectionFromStatement($assoc, $stmt, $coll)
{
$rsm = $this->cachedPersisterContexts['noLimits']->rsm;
$rsm = $this->currentPersisterContext->rsm;
$hints = array(
UnitOfWork::HINT_DEFEREAGERLOAD => true,
'collection' => $coll
);

if (isset($assoc['indexBy'])) {
$rsm = clone ($this->cachedPersisterContexts['noLimits']->rsm); // this is necessary because the "default rsm" should be changed.
$rsm = clone ($this->currentPersisterContext->rsm); // this is necessary because the "default rsm" should be changed.
$rsm->addIndexBy('r', $assoc['indexBy']);
}

Expand Down Expand Up @@ -1064,7 +1064,7 @@ public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit

$select = 'SELECT ' . $columnList;
$from = ' FROM ' . $tableName . ' '. $tableAlias;
$join = $this->cachedPersisterContexts['noLimits']->selectJoinSql . $joinSql;
$join = $this->currentPersisterContext->selectJoinSql . $joinSql;
$where = ($conditionSql ? ' WHERE ' . $conditionSql : '');
$lock = $this->platform->appendLockHint($from, $lockMode);
$query = $select
Expand Down Expand Up @@ -1176,19 +1176,19 @@ protected final function getOrderBySQL(array $orderBy, $baseTableAlias)
protected function getSelectColumnsSQL(/*$hasLimitClause = false*/)
{
//if ( ! $hasLimitClause && $this->selectColumnListSql !== null) {
if ($this->cachedPersisterContexts['noLimits']->selectColumnListSql !== null) {
return $this->cachedPersisterContexts['noLimits']->selectColumnListSql;
if ($this->currentPersisterContext->selectColumnListSql !== null) {
return $this->currentPersisterContext->selectColumnListSql;
}

$columnList = array();
$this->cachedPersisterContexts['noLimits']->rsm->addEntityResult($this->class->name, 'r'); // r for root
$this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); // r for root

// Add regular columns to select list
foreach ($this->class->fieldNames as $field) {
$columnList[] = $this->getSelectColumnSQL($field, $this->class);
}

$this->cachedPersisterContexts['noLimits']->selectJoinSql = '';
$this->currentPersisterContext->selectJoinSql = '';
$eagerAliasCounter = 0;

foreach ($this->class->associationMappings as $assocField => $assoc) {
Expand All @@ -1213,7 +1213,7 @@ protected function getSelectColumnsSQL(/*$hasLimitClause = false*/)
}

$assocAlias = 'e' . ($eagerAliasCounter++);
$this->cachedPersisterContexts['noLimits']->rsm->addJoinedEntityResult($assoc['targetEntity'], $assocAlias, 'r', $assocField);
$this->currentPersisterContext->rsm->addJoinedEntityResult($assoc['targetEntity'], $assocAlias, 'r', $assocField);

foreach ($eagerEntity->fieldNames as $field) {
$columnList[] = $this->getSelectColumnSQL($field, $eagerEntity, $assocAlias);
Expand All @@ -1233,7 +1233,7 @@ protected function getSelectColumnsSQL(/*$hasLimitClause = false*/)
$joinCondition = array();

if (isset($assoc['indexBy'])) {
$this->cachedPersisterContexts['noLimits']->rsm->addIndexBy($assocAlias, $assoc['indexBy']);
$this->currentPersisterContext->rsm->addIndexBy($assocAlias, $assoc['indexBy']);
}

if ( ! $assoc['isOwningSide']) {
Expand All @@ -1246,7 +1246,7 @@ protected function getSelectColumnsSQL(/*$hasLimitClause = false*/)

if ($assoc['isOwningSide']) {
$tableAlias = $this->getSQLTableAlias($association['targetEntity'], $assocAlias);
$this->cachedPersisterContexts['noLimits']->selectJoinSql .= ' ' . $this->getJoinSQLForJoinColumns($association['joinColumns']);
$this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForJoinColumns($association['joinColumns']);

foreach ($association['joinColumns'] as $joinColumn) {
$sourceCol = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform);
Expand All @@ -1262,7 +1262,7 @@ protected function getSelectColumnsSQL(/*$hasLimitClause = false*/)

} else {

$this->cachedPersisterContexts['noLimits']->selectJoinSql .= ' LEFT JOIN';
$this->currentPersisterContext->selectJoinSql .= ' LEFT JOIN';

foreach ($association['joinColumns'] as $joinColumn) {
$sourceCol = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform);
Expand All @@ -1273,13 +1273,13 @@ protected function getSelectColumnsSQL(/*$hasLimitClause = false*/)
}
}

$this->cachedPersisterContexts['noLimits']->selectJoinSql .= ' ' . $joinTableName . ' ' . $joinTableAlias . ' ON ';
$this->cachedPersisterContexts['noLimits']->selectJoinSql .= implode(' AND ', $joinCondition);
$this->currentPersisterContext->selectJoinSql .= ' ' . $joinTableName . ' ' . $joinTableAlias . ' ON ';
$this->currentPersisterContext->selectJoinSql .= implode(' AND ', $joinCondition);
}

$this->cachedPersisterContexts['noLimits']->selectColumnListSql = implode(', ', $columnList);
$this->currentPersisterContext->selectColumnListSql = implode(', ', $columnList);

return $this->cachedPersisterContexts['noLimits']->selectColumnListSql;
return $this->currentPersisterContext->selectColumnListSql;
}

/**
Expand Down Expand Up @@ -1310,7 +1310,7 @@ protected function getSelectColumnAssociationSQL($field, $assoc, ClassMetadata $
. '.' . $quotedColumn . ' AS ' . $resultColumnName;
$type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);

$this->cachedPersisterContexts['noLimits']->rsm->addMetaResult($alias, $resultColumnName, $quotedColumn, $isIdentifier, $type);
$this->currentPersisterContext->rsm->addMetaResult($alias, $resultColumnName, $quotedColumn, $isIdentifier, $type);
}

return implode(', ', $columnList);
Expand Down Expand Up @@ -1448,7 +1448,7 @@ protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r'
$sql = $tableAlias . '.' . $columnName;
$columnAlias = $this->getSQLColumnAlias($class->columnNames[$field]);

$this->cachedPersisterContexts['noLimits']->rsm->addFieldResult($alias, $columnAlias, $field);
$this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field);

if (isset($class->fieldMappings[$field]['requireSQLConversion'])) {
$type = Type::getType($class->getTypeOfField($field));
Expand All @@ -1474,13 +1474,13 @@ protected function getSQLTableAlias($className, $assocName = '')
$className .= '#' . $assocName;
}

if (isset($this->cachedPersisterContexts['noLimits']->sqlTableAliases[$className])) {
return $this->cachedPersisterContexts['noLimits']->sqlTableAliases[$className];
if (isset($this->currentPersisterContext->sqlTableAliases[$className])) {
return $this->currentPersisterContext->sqlTableAliases[$className];
}

$tableAlias = 't' . $this->cachedPersisterContexts['noLimits']->sqlAliasCounter++;
$tableAlias = 't' . $this->currentPersisterContext->sqlAliasCounter++;

$this->cachedPersisterContexts['noLimits']->sqlTableAliases[$className] = $tableAlias;
$this->currentPersisterContext->sqlTableAliases[$className] = $tableAlias;

return $tableAlias;
}
Expand Down Expand Up @@ -1926,7 +1926,7 @@ protected function getJoinSQLForJoinColumns($joinColumns)
*/
public function getSQLColumnAlias($columnName)
{
return $this->quoteStrategy->getColumnAlias($columnName, $this->cachedPersisterContexts['noLimits']->sqlAliasCounter++, $this->platform);
return $this->quoteStrategy->getColumnAlias($columnName, $this->currentPersisterContext->sqlAliasCounter++, $this->platform);
}

/**
Expand Down
16 changes: 8 additions & 8 deletions lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php
Original file line number Diff line number Diff line change
Expand Up @@ -422,19 +422,19 @@ protected function getLockTablesSql($lockMode)
protected function getSelectColumnsSQL()
{
// Create the column list fragment only once
if ($this->cachedPersisterContexts['noLimits']->selectColumnListSql !== null) {
return $this->cachedPersisterContexts['noLimits']->selectColumnListSql;
if ($this->currentPersisterContext->selectColumnListSql !== null) {
return $this->currentPersisterContext->selectColumnListSql;
}

$columnList = array();
//$this->cachedPersisterContexts['noLimits']->rsm = new ResultSetMapping();
//$this->currentPersisterContext->rsm = new ResultSetMapping();
$discrColumn = $this->class->discriminatorColumn['name'];
$baseTableAlias = $this->getSQLTableAlias($this->class->name);
$resultColumnName = $this->platform->getSQLResultCasing($discrColumn);

$this->cachedPersisterContexts['noLimits']->rsm->addEntityResult($this->class->name, 'r');
$this->cachedPersisterContexts['noLimits']->rsm->setDiscriminatorColumn('r', $resultColumnName);
$this->cachedPersisterContexts['noLimits']->rsm->addMetaResult('r', $resultColumnName, $discrColumn);
$this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r');
$this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName);
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn);

// Add regular columns
foreach ($this->class->fieldMappings as $fieldName => $mapping) {
Expand Down Expand Up @@ -525,9 +525,9 @@ protected function getSelectColumnsSQL()
}
}

$this->cachedPersisterContexts['noLimits']->selectColumnListSql = implode(', ', $columnList);
$this->currentPersisterContext->selectColumnListSql = implode(', ', $columnList);

return $this->cachedPersisterContexts['noLimits']->selectColumnListSql;
return $this->currentPersisterContext->selectColumnListSql;
}

/**
Expand Down
12 changes: 6 additions & 6 deletions lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ protected function getDiscriminatorColumnTableName()
*/
protected function getSelectColumnsSQL()
{
if ($this->cachedPersisterContexts['noLimits']->selectColumnListSql !== null) {
return $this->cachedPersisterContexts['noLimits']->selectColumnListSql;
if ($this->currentPersisterContext->selectColumnListSql !== null) {
return $this->currentPersisterContext->selectColumnListSql;
}

$columnList[] = parent::getSelectColumnsSQL();
Expand All @@ -63,8 +63,8 @@ protected function getSelectColumnsSQL()

$resultColumnName = $this->platform->getSQLResultCasing($discrColumn);

$this->cachedPersisterContexts['noLimits']->rsm->setDiscriminatorColumn('r', $resultColumnName);
$this->cachedPersisterContexts['noLimits']->rsm->addMetaResult('r', $resultColumnName, $discrColumn);
$this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName);
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn);

// Append subclass columns
foreach ($this->class->subClasses as $subClassName) {
Expand Down Expand Up @@ -106,9 +106,9 @@ protected function getSelectColumnsSQL()
}
}

$this->cachedPersisterContexts['noLimits']->selectColumnListSql = implode(', ', $columnList);
$this->currentPersisterContext->selectColumnListSql = implode(', ', $columnList);

return $this->cachedPersisterContexts['noLimits']->selectColumnListSql;
return $this->currentPersisterContext->selectColumnListSql;
}

/**
Expand Down

0 comments on commit 8a7087b

Please sign in to comment.