Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into 2.3
Browse files Browse the repository at this point in the history
  • Loading branch information
beberlei committed Aug 29, 2012
2 parents 9d909cd + ece6a00 commit 131d300
Show file tree
Hide file tree
Showing 9 changed files with 222 additions and 8 deletions.
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"require": {
"php": ">=5.3.2",
"ext-pdo": "*",
"doctrine/dbal": "2.3.*",
"doctrine/dbal": ">=2.3-dev,<2.5-dev",
"symfony/console": "2.*"
},
"suggest": {
Expand All @@ -26,7 +26,7 @@
"bin": ["bin/doctrine", "bin/doctrine.php"],
"extra": {
"branch-alias": {
"dev-master": "2.3.x-dev"
"dev-master": "2.4.x-dev"
}
}
}
1 change: 0 additions & 1 deletion lib/Doctrine/ORM/EntityRepository.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
use Doctrine\Common\Collections\Selectable;
use Doctrine\Common\Collections\Criteria;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\ExpressionBuilder;

/**
* An EntityRepository serves as a repository for entities with generic as well as
Expand Down
3 changes: 2 additions & 1 deletion lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php
Original file line number Diff line number Diff line change
Expand Up @@ -1188,7 +1188,7 @@ protected function _validateAndCompleteFieldMapping(array &$mapping)

// Complete fieldName and columnName mapping
if ( ! isset($mapping['columnName'])) {
$mapping['columnName'] = $this->namingStrategy->propertyToColumnName($mapping['fieldName']);
$mapping['columnName'] = $this->namingStrategy->propertyToColumnName($mapping['fieldName'], $this->name);
}

if ($mapping['columnName'][0] === '`') {
Expand Down Expand Up @@ -1465,6 +1465,7 @@ protected function _validateAndCompleteManyToManyMapping(array $mapping)
if ( ! isset($mapping['joinTable']['name'])) {
$mapping['joinTable']['name'] = $this->namingStrategy->joinTableName($mapping['sourceEntity'], $mapping['targetEntity'], $mapping['fieldName']);
}

if ( ! isset($mapping['joinTable']['joinColumns'])) {
$mapping['joinTable']['joinColumns'] = array(array(
'name' => $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity']),
Expand Down
2 changes: 1 addition & 1 deletion lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public function classToTableName($className)
/**
* {@inheritdoc}
*/
public function propertyToColumnName($propertyName)
public function propertyToColumnName($propertyName, $className = null)
{
return $propertyName;
}
Expand Down
3 changes: 2 additions & 1 deletion lib/Doctrine/ORM/Mapping/NamingStrategy.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,10 @@ function classToTableName($className);
* Return a column name for a property
*
* @param string $propertyName A property
* @param string $className The fully-qualified class name
* @return string A column name
*/
function propertyToColumnName($propertyName);
function propertyToColumnName($propertyName, $className = null);

/**
* Return the default reference column name
Expand Down
2 changes: 1 addition & 1 deletion lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ public function classToTableName($className)
/**
* {@inheritdoc}
*/
public function propertyToColumnName($propertyName)
public function propertyToColumnName($propertyName, $className = null)
{
return $this->underscore($propertyName);
}
Expand Down
2 changes: 1 addition & 1 deletion lib/Doctrine/ORM/Version.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ class Version
/**
* Current Doctrine Version
*/
const VERSION = '2.3.0-DEV';
const VERSION = '2.4.0-DEV';

/**
* Compares a Doctrine version with the current one.
Expand Down
182 changes: 182 additions & 0 deletions tests/Doctrine/Tests/ORM/Functional/Ticket/DDC1925Test.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,182 @@
<?php

namespace Doctrine\Tests\ORM\Functional\Ticket;

use Doctrine\Common\Collections\ArrayCollection;

require_once __DIR__ . '/../../../TestInit.php';

/**
* @group DDC-1925
* @group DDC-1210
*/
class DDC1925Test extends \Doctrine\Tests\OrmFunctionalTestCase
{
public function testIssue()
{
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1925User'),
$this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1925Product'),
));

$user = new DDC1925User();
$user->setTitle("Test User");
$this->_em->persist($user);

$product = new DDC1925Product();
$product->setTitle("Test product");
$this->_em->persist($product);
$this->_em->flush();

$product->addBuyer($user);

$this->_em->getUnitOfWork()->computeChangeSets();

$this->_em->persist($product);
$this->_em->flush();
}
}

/**
* @Table
* @Entity
*/
class DDC1925Product
{
/**
* @var integer $id
*
* @Column(name="id", type="integer")
* @Id
* @GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string $title
*
* @Column(name="title", type="string", length=255)
*/
private $title;

/**
* @ManyToMany(targetEntity="DDC1925User")
* @JoinTable(
* name="user_purchases",
* joinColumns={@JoinColumn(name="product_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="user_id", referencedColumnName="id")}
* )
*/
private $buyers;

/**
* Default constructor
*/
public function __construct()
{
$this->buyers = new ArrayCollection();
}

/**
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* @param string $title
*/
public function setTitle($title)
{
$this->title = $title;
}

/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}

/**
* @param string $buyers
*/
public function setBuyers($buyers)
{
$this->buyers = $buyers;
}

/**
* @return string
*/
public function getBuyers()
{
return $this->buyers;
}

/**
* @param DDC1925User $buyer
*/
public function addBuyer(DDC1925User $buyer)
{
$this->buyers[] = $buyer;
}
}

/**
* @Table
* @Entity
*/
class DDC1925User
{
/**
* @var integer
*
* @Column(name="id", type="integer")
* @Id
* @GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
*
* @Column(name="title", type="string", length=255)
*/
private $title;

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set title
*
* @param string $title
*/
public function setTitle($title)
{
$this->title = $title;
}

/**
* Get title
*
* @return string
*/
public function getTitle()
{
return $this->title;
}
}
31 changes: 31 additions & 0 deletions tests/Doctrine/Tests/ORM/Mapping/ClassMetadataTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -922,6 +922,26 @@ public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategy()
$this->assertEquals('doctrineglobal_article_cms_cmsuser', $articleMetadata->associationMappings['author']['joinTable']['name']);
}

/**
* @group DDC-984
* @group DDC-559
*/
public function testFullyQualifiedClassNameShouldBeGivenToNamingStrategyPropertyToColumnName()
{
$namingStrategy = new MyPrefixNamingStrategy();
$metadata = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsAddress', $namingStrategy);

$metadata->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);

$metadata->mapField(array('fieldName'=>'country'));
$metadata->mapField(array('fieldName'=>'city'));

$this->assertEquals($metadata->fieldNames, array(
'cmsaddress_country' => 'country',
'cmsaddress_city' => 'city'
));
}

/**
* @group DDC-1746
*/
Expand Down Expand Up @@ -993,3 +1013,14 @@ public function classToTableName($className)
return strtolower($className);
}
}

class MyPrefixNamingStrategy extends \Doctrine\ORM\Mapping\DefaultNamingStrategy
{
/**
* {@inheritdoc}
*/
public function propertyToColumnName($propertyName, $className = null)
{
return strtolower($this->classToTableName($className)) . '_' . $propertyName;
}
}

0 comments on commit 131d300

Please sign in to comment.