Skip to content

Commit

Permalink
Merge pull request #10641 from greg0ire/move-to-1-properties-down
Browse files Browse the repository at this point in the history
Move $(sourceToTarget|targetToSource)KeyColumns down
  • Loading branch information
greg0ire committed Apr 20, 2023
2 parents 6857118 + f171d49 commit c019f86
Show file tree
Hide file tree
Showing 9 changed files with 32 additions and 69 deletions.
2 changes: 1 addition & 1 deletion lib/Doctrine/ORM/Mapping/ClassMetadata.php
Original file line number Diff line number Diff line change
Expand Up @@ -1726,7 +1726,7 @@ public function setAssociationOverride(string $fieldName, array $overrideMapping
switch ($mapping['type']) {
case self::ONE_TO_ONE:
case self::MANY_TO_ONE:
$mapping['sourceToTargetKeyColumns'] = null;
$mapping['sourceToTargetKeyColumns'] = [];
break;
case self::MANY_TO_MANY:
$mapping['relationToSourceKeyColumns'] = [];
Expand Down
8 changes: 8 additions & 0 deletions lib/Doctrine/ORM/Mapping/ManyToOneAssociationMapping.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,12 @@
*/
final class ManyToOneAssociationMapping extends ToOneAssociationMapping implements AssociationOwningSideMapping
{
/** @var array<string, string> */
public array $sourceToTargetKeyColumns = [];

/** @var array<string, string> */
public array $targetToSourceKeyColumns = [];

/** @var list<JoinColumnMapping> */
public array $joinColumns = [];

Expand All @@ -18,6 +24,8 @@ public function __sleep(): array
$serialized = parent::__sleep();

$serialized[] = 'joinColumns';
$serialized[] = 'sourceToTargetKeyColumns';
$serialized[] = 'targetToSourceKeyColumns';

return $serialized;
}
Expand Down
8 changes: 8 additions & 0 deletions lib/Doctrine/ORM/Mapping/OneToOneOwningSideMapping.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,12 @@

final class OneToOneOwningSideMapping extends OneToOneAssociationMapping implements AssociationOwningSideMapping
{
/** @var array<string, string> */
public array $sourceToTargetKeyColumns = [];

/** @var array<string, string> */
public array $targetToSourceKeyColumns = [];

/** @var list<JoinColumnMapping> */
public array $joinColumns = [];

Expand All @@ -15,6 +21,8 @@ public function __sleep(): array
$serialized = parent::__sleep();

$serialized[] = 'joinColumns';
$serialized[] = 'sourceToTargetKeyColumns';
$serialized[] = 'targetToSourceKeyColumns';

return $serialized;
}
Expand Down
22 changes: 0 additions & 22 deletions lib/Doctrine/ORM/Mapping/ToOneAssociationMapping.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,6 @@

abstract class ToOneAssociationMapping extends AssociationMapping
{
/** @var array<string, string>|null */
public array|null $sourceToTargetKeyColumns = null;

/** @var array<string, string>|null */
public array|null $targetToSourceKeyColumns = null;

/**
* @param array<string, mixed> $mappingArray
* @psalm-param array{
Expand Down Expand Up @@ -171,20 +165,4 @@ public function toArray(): array

return $array;
}

/** @return list<string> */
public function __sleep(): array
{
$serialized = parent::__sleep();

if ($this->sourceToTargetKeyColumns !== null) {
$serialized[] = 'sourceToTargetKeyColumns';
}

if ($this->targetToSourceKeyColumns !== null) {
$serialized[] = 'targetToSourceKeyColumns';
}

return $serialized;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
use Doctrine\ORM\Utility\PersisterHelper;

use function array_combine;
use function assert;
use function implode;

/**
Expand Down Expand Up @@ -476,7 +475,6 @@ protected function getInsertColumnList(): array
if (isset($this->class->associationMappings[$name])) {
$assoc = $this->class->associationMappings[$name];
if ($assoc->isToOneOwningSide()) {
assert($assoc->targetToSourceKeyColumns !== null);
foreach ($assoc->targetToSourceKeyColumns as $sourceCol) {
$columns[] = $sourceCol;
}
Expand Down
10 changes: 5 additions & 5 deletions lib/Doctrine/ORM/Query/SqlWalker.php
Original file line number Diff line number Diff line change
Expand Up @@ -597,12 +597,13 @@ public function walkPathExpression(AST\PathExpression $pathExpr): string
}

$assoc = $class->associationMappings[$fieldName];
assert($assoc->isToOne());

if (! $assoc->isOwningSide()) {
throw QueryException::associationPathInverseSideNotSupported($pathExpr);
}

assert($assoc->isToOneOwningSide());

// COMPOSITE KEYS NOT (YET?) SUPPORTED
if (count($assoc['sourceToTargetKeyColumns']) > 1) {
throw QueryException::associationPathCompositeKeyNotSupported();
Expand All @@ -612,7 +613,6 @@ public function walkPathExpression(AST\PathExpression $pathExpr): string
$sql .= $this->getSQLTableAlias($class->getTableName(), $dqlAlias) . '.';
}

assert($assoc->targetToSourceKeyColumns !== null);
$sql .= reset($assoc->targetToSourceKeyColumns);
break;

Expand Down Expand Up @@ -799,17 +799,17 @@ public function walkIndexBy(AST\IndexBy $indexBy): void
}

$association = $class->associationMappings[$fieldName];
assert($association->isToOne());

if (! $association->isOwningSide()) {
throw QueryException::associationPathInverseSideNotSupported($pathExpression);
}

if (count($association['sourceToTargetKeyColumns']) > 1) {
assert($association->isToOneOwningSide());

if (count($association->sourceToTargetKeyColumns) > 1) {
throw QueryException::associationPathCompositeKeyNotSupported();
}

assert($association->targetToSourceKeyColumns !== null);
$field = reset($association->targetToSourceKeyColumns);
break;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,15 @@ public function testItSurvivesSerialization(): void
targetEntity: self::class,
);

$mapping->joinColumns = [new JoinColumnMapping('id')];
$mapping->joinColumns = [new JoinColumnMapping('id')];
$mapping->sourceToTargetKeyColumns = ['foo' => 'bar'];
$mapping->targetToSourceKeyColumns = ['bar' => 'foo'];

$resurrectedMapping = unserialize(serialize($mapping));
assert($resurrectedMapping instanceof ManyToOneAssociationMapping);

self::assertCount(1, $resurrectedMapping->joinColumns);
self::assertSame(['foo' => 'bar'], $resurrectedMapping->sourceToTargetKeyColumns);
self::assertSame(['bar' => 'foo'], $resurrectedMapping->targetToSourceKeyColumns);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,15 @@ public function testItSurvivesSerialization(): void
targetEntity: self::class,
);

$mapping->joinColumns = [new JoinColumnMapping('id')];
$mapping->joinColumns = [new JoinColumnMapping('id')];
$mapping->sourceToTargetKeyColumns = ['foo' => 'bar'];
$mapping->targetToSourceKeyColumns = ['bar' => 'foo'];

$resurrectedMapping = unserialize(serialize($mapping));
assert($resurrectedMapping instanceof OneToOneOwningSideMapping);

self::assertCount(1, $resurrectedMapping->joinColumns);
self::assertSame(['foo' => 'bar'], $resurrectedMapping->sourceToTargetKeyColumns);
self::assertSame(['bar' => 'foo'], $resurrectedMapping->targetToSourceKeyColumns);
}
}
37 changes: 0 additions & 37 deletions tests/Doctrine/Tests/ORM/Mapping/ToOneAssociationMappingTest.php

This file was deleted.

0 comments on commit c019f86

Please sign in to comment.