1
0
mirror of synced 2025-02-02 21:41:45 +03:00

Merge pull request #1545 from doctrine/general-fixes

[RFC] General fixes
This commit is contained in:
Marco Pivetta 2015-11-06 22:56:00 -05:00
commit 378f6546b4
54 changed files with 609 additions and 395 deletions

View File

@ -29,7 +29,5 @@ matrix:
exclude:
- php: hhvm
env: DB=pgsql # driver for PostgreSQL currently unsupported by HHVM, requires 3rd party dependency
allow_failures:
- php: 7.0
sudo: false

View File

@ -76,7 +76,6 @@ class DefaultEntityHydrator implements EntityHydrator
$data = array_merge($data, $key->identifier); // why update has no identifier values ?
foreach ($metadata->associationMappings as $name => $assoc) {
if ( ! isset($data[$name])) {
continue;
}
@ -92,18 +91,16 @@ class DefaultEntityHydrator implements EntityHydrator
unset($data[$name]);
foreach ($associationIds as $fieldName => $fieldValue) {
if (isset($targetClassMetadata->associationMappings[$fieldName])){
$targetAssoc = $targetClassMetadata->associationMappings[$fieldName];
foreach($assoc['targetToSourceKeyColumns'] as $referencedColumn => $localColumn) {
if (isset($targetAssoc['sourceToTargetKeyColumns'][$referencedColumn])) {
$data[$localColumn] = $fieldValue;
}
}
}else{
$data[$assoc['targetToSourceKeyColumns'][$targetClassMetadata->columnNames[$fieldName]]] = $fieldValue;
} else {
$data[$assoc['targetToSourceKeyColumns'][$targetClassMetadata->fieldMappings[$fieldName]['columnName']]] = $fieldValue;
}
}
@ -126,7 +123,6 @@ class DefaultEntityHydrator implements EntityHydrator
// @TODO - fix it !
// handle UnitOfWork#createEntity hash generation
if ( ! is_array($targetId)) {
$data[reset($assoc['joinColumnFieldNames'])] = $targetId;
$targetEntity = $this->em->getClassMetadata($assoc['targetEntity']);

View File

@ -120,6 +120,7 @@ abstract class AbstractHydrator
$this->_hints = $hints;
$evm = $this->_em->getEventManager();
$evm->addEventListener(array(Events::onClear), $this);
$this->prepare();
@ -398,13 +399,15 @@ abstract class AbstractHydrator
case (isset($this->_rsm->metaMappings[$key])):
// Meta column (has meaning in relational schema only, i.e. foreign keys or discriminator columns).
$fieldName = $this->_rsm->metaMappings[$key];
$dqlAlias = $this->_rsm->columnOwnerMap[$key];
$classMetadata = $this->getClassMetadata($this->_rsm->aliasMap[$dqlAlias]);
$type = isset($this->_rsm->typeMappings[$key])
$fieldName = $this->_rsm->metaMappings[$key];
$dqlAlias = $this->_rsm->columnOwnerMap[$key];
$type = isset($this->_rsm->typeMappings[$key])
? Type::getType($this->_rsm->typeMappings[$key])
: null;
// Cache metadata fetch
$this->getClassMetadata($this->_rsm->aliasMap[$dqlAlias]);
return $this->_cache[$key] = array(
'isIdentifier' => isset($this->_rsm->isIdentifierColumn[$dqlAlias][$key]),
'isMetaColumn' => true,

View File

@ -399,7 +399,6 @@ class ClassMetadataInfo implements ClassMetadata
/**
* READ-ONLY: An array of field names. Used to look up field names from column names.
* Keys are column names and values are field names.
* This is the reverse lookup map of $_columnNames.
*
* @var array
*/
@ -412,7 +411,7 @@ class ClassMetadataInfo implements ClassMetadata
*
* @var array
*
* @todo We could get rid of this array by just using $fieldMappings[$fieldName]['columnName'].
* @deprecated 3.0 Remove this.
*/
public $columnNames = array();
@ -742,7 +741,7 @@ class ClassMetadataInfo implements ClassMetadata
* Populates the entity identifier of an entity.
*
* @param object $entity
* @param mixed $id
* @param array $id
*
* @return void
*
@ -812,7 +811,7 @@ class ClassMetadataInfo implements ClassMetadata
// This metadata is always serialized/cached.
$serialized = array(
'associationMappings',
'columnNames', //TODO: Not really needed. Can use fieldMappings[$fieldName]['columnName']
'columnNames', //TODO: 3.0 Remove this. Can use fieldMappings[$fieldName]['columnName']
'fieldMappings',
'fieldNames',
'embeddedClasses',
@ -1177,9 +1176,11 @@ class ClassMetadataInfo implements ClassMetadata
public function isUniqueField($fieldName)
{
$mapping = $this->getFieldMapping($fieldName);
if ($mapping !== false) {
return isset($mapping['unique']) && $mapping['unique'] == true;
}
return false;
}
@ -1193,9 +1194,11 @@ class ClassMetadataInfo implements ClassMetadata
public function isNullable($fieldName)
{
$mapping = $this->getFieldMapping($fieldName);
if ($mapping !== false) {
return isset($mapping['nullable']) && $mapping['nullable'] == true;
}
return false;
}
@ -1210,8 +1213,9 @@ class ClassMetadataInfo implements ClassMetadata
*/
public function getColumnName($fieldName)
{
return isset($this->columnNames[$fieldName]) ?
$this->columnNames[$fieldName] : $fieldName;
return isset($this->columnNames[$fieldName])
? $this->columnNames[$fieldName]
: $fieldName;
}
/**
@ -1229,6 +1233,7 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! isset($this->fieldMappings[$fieldName])) {
throw MappingException::mappingNotFound($this->name, $fieldName);
}
return $this->fieldMappings[$fieldName];
}
@ -1249,6 +1254,7 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! isset($this->associationMappings[$fieldName])) {
throw MappingException::mappingNotFound($this->name, $fieldName);
}
return $this->associationMappings[$fieldName];
}
@ -1272,8 +1278,9 @@ class ClassMetadataInfo implements ClassMetadata
*/
public function getFieldName($columnName)
{
return isset($this->fieldNames[$columnName]) ?
$this->fieldNames[$columnName] : $columnName;
return isset($this->fieldNames[$columnName])
? $this->fieldNames[$columnName]
: $columnName;
}
/**
@ -1292,6 +1299,7 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! isset($this->namedQueries[$queryName])) {
throw MappingException::queryNotFound($this->name, $queryName);
}
return $this->namedQueries[$queryName]['dql'];
}
@ -1380,6 +1388,7 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! isset($mapping['fieldName']) || strlen($mapping['fieldName']) == 0) {
throw MappingException::missingFieldName($this->name);
}
if ( ! isset($mapping['type'])) {
// Default to string
$mapping['type'] = 'string';
@ -1396,6 +1405,7 @@ class ClassMetadataInfo implements ClassMetadata
}
$this->columnNames[$mapping['fieldName']] = $mapping['columnName'];
if (isset($this->fieldNames[$mapping['columnName']]) || ($this->discriminatorColumn != null && $this->discriminatorColumn['name'] == $mapping['columnName'])) {
throw MappingException::duplicateColumnName($this->name, $mapping['columnName']);
}
@ -1411,6 +1421,7 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! in_array($mapping['fieldName'], $this->identifier)) {
$this->identifier[] = $mapping['fieldName'];
}
// Check for composite key
if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) {
$this->isIdentifierComposite = true;
@ -1441,9 +1452,11 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! isset($mapping['mappedBy'])) {
$mapping['mappedBy'] = null;
}
if ( ! isset($mapping['inversedBy'])) {
$mapping['inversedBy'] = null;
}
$mapping['isOwningSide'] = true; // assume owning side until we hit mappedBy
// unset optional indexBy attribute if its empty
@ -1460,10 +1473,7 @@ class ClassMetadataInfo implements ClassMetadata
$mapping['targetEntity'] = ltrim($mapping['targetEntity'], '\\');
}
if ( ($mapping['type'] & self::MANY_TO_ONE) > 0 &&
isset($mapping['orphanRemoval']) &&
$mapping['orphanRemoval'] == true) {
if (($mapping['type'] & self::MANY_TO_ONE) > 0 && isset($mapping['orphanRemoval']) && $mapping['orphanRemoval'] == true) {
throw MappingException::illegalOrphanRemoval($this->name, $mapping['fieldName']);
}
@ -1483,6 +1493,7 @@ class ClassMetadataInfo implements ClassMetadata
$this->identifier[] = $mapping['fieldName'];
$this->containsForeignIdentifier = true;
}
// Check for composite key
if ( ! $this->isIdentifierComposite && count($this->identifier) > 1) {
$this->isIdentifierComposite = true;
@ -1498,6 +1509,7 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! isset($mapping['fieldName']) || strlen($mapping['fieldName']) == 0) {
throw MappingException::missingFieldName($this->name);
}
if ( ! isset($mapping['targetEntity'])) {
throw MappingException::missingTargetEntity($mapping['fieldName']);
}
@ -1569,13 +1581,16 @@ class ClassMetadataInfo implements ClassMetadata
if ($mapping['isOwningSide']) {
if ( ! isset($mapping['joinColumns']) || ! $mapping['joinColumns']) {
// Apply default join column
$mapping['joinColumns'] = array(array(
'name' => $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name),
'referencedColumnName' => $this->namingStrategy->referenceColumnName()
));
$mapping['joinColumns'] = array(
array(
'name' => $this->namingStrategy->joinColumnName($mapping['fieldName'], $this->name),
'referencedColumnName' => $this->namingStrategy->referenceColumnName()
)
);
}
$uniqueConstraintColumns = array();
foreach ($mapping['joinColumns'] as &$joinColumn) {
if ($mapping['type'] === self::ONE_TO_ONE && ! $this->isInheritanceTypeSingleTable()) {
if (count($mapping['joinColumns']) == 1) {
@ -1607,14 +1622,16 @@ class ClassMetadataInfo implements ClassMetadata
$mapping['sourceToTargetKeyColumns'][$joinColumn['name']] = $joinColumn['referencedColumnName'];
$mapping['joinColumnFieldNames'][$joinColumn['name']] = isset($joinColumn['fieldName'])
? $joinColumn['fieldName'] : $joinColumn['name'];
? $joinColumn['fieldName']
: $joinColumn['name'];
}
if ($uniqueConstraintColumns) {
if ( ! $this->table) {
throw new RuntimeException("ClassMetadataInfo::setTable() has to be called before defining a one to one relationship.");
}
$this->table['uniqueConstraints'][$mapping['fieldName']."_uniq"] = array(
$this->table['uniqueConstraints'][$mapping['fieldName'] . "_uniq"] = array(
'columns' => $uniqueConstraintColumns
);
}
@ -1679,6 +1696,7 @@ class ClassMetadataInfo implements ClassMetadata
protected function _validateAndCompleteManyToManyMapping(array $mapping)
{
$mapping = $this->_validateAndCompleteAssociationMapping($mapping);
if ($mapping['isOwningSide']) {
// owning side MUST have a join table
if ( ! isset($mapping['joinTable']['name'])) {
@ -1689,16 +1707,23 @@ class ClassMetadataInfo implements ClassMetadata
&& (! (isset($mapping['joinTable']['joinColumns']) || isset($mapping['joinTable']['inverseJoinColumns'])));
if ( ! isset($mapping['joinTable']['joinColumns'])) {
$mapping['joinTable']['joinColumns'] = array(array(
$mapping['joinTable']['joinColumns'] = array(
array(
'name' => $this->namingStrategy->joinKeyColumnName($mapping['sourceEntity'], $selfReferencingEntityWithoutJoinColumns ? 'source' : null),
'referencedColumnName' => $this->namingStrategy->referenceColumnName(),
'onDelete' => 'CASCADE'));
'onDelete' => 'CASCADE'
)
);
}
if ( ! isset($mapping['joinTable']['inverseJoinColumns'])) {
$mapping['joinTable']['inverseJoinColumns'] = array(array(
$mapping['joinTable']['inverseJoinColumns'] = array(
array(
'name' => $this->namingStrategy->joinKeyColumnName($mapping['targetEntity'], $selfReferencingEntityWithoutJoinColumns ? 'target' : null),
'referencedColumnName' => $this->namingStrategy->referenceColumnName(),
'onDelete' => 'CASCADE'));
'onDelete' => 'CASCADE'
)
);
}
$mapping['joinTableColumns'] = array();
@ -1790,6 +1815,7 @@ class ClassMetadataInfo implements ClassMetadata
if ($this->isIdentifierComposite) {
throw MappingException::singleIdNotAllowedOnCompositePrimaryKey($this->name);
}
return $this->identifier[0];
}
@ -1848,13 +1874,15 @@ class ClassMetadataInfo implements ClassMetadata
{
if ($fieldNames === null) {
return array_keys($this->fieldNames);
} else {
$columnNames = array();
foreach ($fieldNames as $fieldName) {
$columnNames[] = $this->getColumnName($fieldName);
}
return $columnNames;
}
$columnNames = array();
foreach ($fieldNames as $fieldName) {
$columnNames[] = $this->getColumnName($fieldName);
}
return $columnNames;
}
/**
@ -2003,11 +2031,14 @@ class ClassMetadataInfo implements ClassMetadata
* @param string $fieldName
*
* @return \Doctrine\DBAL\Types\Type|string|null
*
* @todo 3.0 Remove this. PersisterHelper should fix it somehow
*/
public function getTypeOfField($fieldName)
{
return isset($this->fieldMappings[$fieldName]) ?
$this->fieldMappings[$fieldName]['type'] : null;
return isset($this->fieldMappings[$fieldName])
? $this->fieldMappings[$fieldName]['type']
: null;
}
/**
@ -2017,8 +2048,8 @@ class ClassMetadataInfo implements ClassMetadata
*
* @return \Doctrine\DBAL\Types\Type|string|null
*
* @deprecated this method is bogous and unreliable, since it cannot resolve the type of a column that is
* derived by a referenced field on a different entity.
* @deprecated 3.0 remove this. this method is bogous and unreliable, since it cannot resolve the type of a column
* that is derived by a referenced field on a different entity.
*/
public function getTypeOfColumn($columnName)
{
@ -2082,6 +2113,7 @@ class ClassMetadataInfo implements ClassMetadata
public function setParentClasses(array $classNames)
{
$this->parentClasses = $classNames;
if (count($classNames) > 0) {
$this->rootEntityName = array_pop($classNames);
}
@ -2101,6 +2133,7 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! $this->_isInheritanceType($type)) {
throw MappingException::invalidInheritanceType($this->name, $type);
}
$this->inheritanceType = $type;
}
@ -2195,6 +2228,7 @@ class ClassMetadataInfo implements ClassMetadata
unset($this->fieldMappings[$fieldName]);
unset($this->fieldNames[$mapping['columnName']]);
unset($this->columnNames[$mapping['fieldName']]);
$this->_validateAndCompleteFieldMapping($overrideMapping);
$this->fieldMappings[$fieldName] = $overrideMapping;
@ -2394,10 +2428,11 @@ class ClassMetadataInfo implements ClassMetadata
$name = $queryMapping['name'];
$query = $queryMapping['query'];
$dql = str_replace('__CLASS__', $this->name, $query);
$this->namedQueries[$name] = array(
'name' => $name,
'query' => $query,
'dql' => $dql
'dql' => $dql,
);
}
@ -2430,8 +2465,8 @@ class ClassMetadataInfo implements ClassMetadata
}
$queryMapping['isSelfClass'] = false;
if (isset($queryMapping['resultClass'])) {
if (isset($queryMapping['resultClass'])) {
if ($queryMapping['resultClass'] === '__CLASS__') {
$queryMapping['isSelfClass'] = true;
@ -2516,7 +2551,9 @@ class ClassMetadataInfo implements ClassMetadata
public function mapOneToOne(array $mapping)
{
$mapping['type'] = self::ONE_TO_ONE;
$mapping = $this->_validateAndCompleteOneToOneMapping($mapping);
$this->_storeAssociationMapping($mapping);
}
@ -2530,7 +2567,9 @@ class ClassMetadataInfo implements ClassMetadata
public function mapOneToMany(array $mapping)
{
$mapping['type'] = self::ONE_TO_MANY;
$mapping = $this->_validateAndCompleteOneToManyMapping($mapping);
$this->_storeAssociationMapping($mapping);
}
@ -2544,8 +2583,10 @@ class ClassMetadataInfo implements ClassMetadata
public function mapManyToOne(array $mapping)
{
$mapping['type'] = self::MANY_TO_ONE;
// A many-to-one mapping is essentially a one-one backreference
$mapping = $this->_validateAndCompleteOneToOneMapping($mapping);
$this->_storeAssociationMapping($mapping);
}
@ -2559,7 +2600,9 @@ class ClassMetadataInfo implements ClassMetadata
public function mapManyToMany(array $mapping)
{
$mapping['type'] = self::MANY_TO_MANY;
$mapping = $this->_validateAndCompleteManyToManyMapping($mapping);
$this->_storeAssociationMapping($mapping);
}
@ -2677,9 +2720,10 @@ class ClassMetadataInfo implements ClassMetadata
public function addEntityListener($eventName, $class, $method)
{
$class = $this->fullyQualifiedClassName($class);
$listener = array(
'class' => $class,
'method' => $method
'method' => $method,
);
if ( ! class_exists($class)) {
@ -2764,6 +2808,7 @@ class ClassMetadataInfo implements ClassMetadata
{
$className = $this->fullyQualifiedClassName($className);
$className = ltrim($className, '\\');
$this->discriminatorMap[$name] = $className;
if ($this->name === $className) {
@ -2830,8 +2875,8 @@ class ClassMetadataInfo implements ClassMetadata
*/
public function isSingleValuedAssociation($fieldName)
{
return isset($this->associationMappings[$fieldName]) &&
($this->associationMappings[$fieldName]['type'] & self::TO_ONE);
return isset($this->associationMappings[$fieldName])
&& ($this->associationMappings[$fieldName]['type'] & self::TO_ONE);
}
/**
@ -2839,8 +2884,8 @@ class ClassMetadataInfo implements ClassMetadata
*/
public function isCollectionValuedAssociation($fieldName)
{
return isset($this->associationMappings[$fieldName]) &&
! ($this->associationMappings[$fieldName]['type'] & self::TO_ONE);
return isset($this->associationMappings[$fieldName])
&& ! ($this->associationMappings[$fieldName]['type'] & self::TO_ONE);
}
/**
@ -2852,11 +2897,9 @@ class ClassMetadataInfo implements ClassMetadata
*/
public function isAssociationWithSingleJoinColumn($fieldName)
{
return (
isset($this->associationMappings[$fieldName]) &&
isset($this->associationMappings[$fieldName]['joinColumns'][0]) &&
!isset($this->associationMappings[$fieldName]['joinColumns'][1])
);
return isset($this->associationMappings[$fieldName])
&& isset($this->associationMappings[$fieldName]['joinColumns'][0])
&& ! isset($this->associationMappings[$fieldName]['joinColumns'][1]);
}
/**
@ -2873,6 +2916,7 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! $this->isAssociationWithSingleJoinColumn($fieldName)) {
throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName);
}
return $this->associationMappings[$fieldName]['joinColumns'][0]['name'];
}
@ -2890,6 +2934,7 @@ class ClassMetadataInfo implements ClassMetadata
if ( ! $this->isAssociationWithSingleJoinColumn($fieldName)) {
throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName);
}
return $this->associationMappings[$fieldName]['joinColumns'][0]['referencedColumnName'];
}
@ -2961,6 +3006,8 @@ class ClassMetadataInfo implements ClassMetadata
* @param array $definition
*
* @return void
*
* @throws MappingException
*/
public function setSequenceGeneratorDefinition(array $definition)
{
@ -3142,7 +3189,9 @@ class ClassMetadataInfo implements ClassMetadata
*/
public function getQuotedTableName($platform)
{
return isset($this->table['quoted']) ? $platform->quoteIdentifier($this->table['name']) : $this->table['name'];
return isset($this->table['quoted'])
? $platform->quoteIdentifier($this->table['name'])
: $this->table['name'];
}
/**
@ -3157,7 +3206,9 @@ class ClassMetadataInfo implements ClassMetadata
*/
public function getQuotedJoinTableName(array $assoc, $platform)
{
return isset($assoc['joinTable']['quoted']) ? $platform->quoteIdentifier($assoc['joinTable']['name']) : $assoc['joinTable']['name'];
return isset($assoc['joinTable']['quoted'])
? $platform->quoteIdentifier($assoc['joinTable']['name'])
: $assoc['joinTable']['name'];
}
/**
@ -3165,7 +3216,8 @@ class ClassMetadataInfo implements ClassMetadata
*/
public function isAssociationInverseSide($fieldName)
{
return isset($this->associationMappings[$fieldName]) && ! $this->associationMappings[$fieldName]['isOwningSide'];
return isset($this->associationMappings[$fieldName])
&& ! $this->associationMappings[$fieldName]['isOwningSide'];
}
/**
@ -3184,11 +3236,13 @@ class ClassMetadataInfo implements ClassMetadata
public function getAssociationsByTargetClass($targetClass)
{
$relations = array();
foreach ($this->associationMappings as $mapping) {
if ($mapping['targetEntity'] == $targetClass) {
$relations[$mapping['fieldName']] = $mapping;
}
}
return $relations;
}
@ -3303,9 +3357,8 @@ class ClassMetadataInfo implements ClassMetadata
public function getSequenceName(AbstractPlatform $platform)
{
$sequencePrefix = $this->getSequencePrefix($platform);
$columnName = $this->getSingleIdentifierColumnName();
$sequenceName = $sequencePrefix . '_' . $columnName . '_seq';
$columnName = $this->getSingleIdentifierColumnName();
$sequenceName = $sequencePrefix . '_' . $columnName . '_seq';
return $sequenceName;
}

View File

@ -54,6 +54,7 @@ class AnnotationDriver extends AbstractAnnotationDriver
{
/* @var $metadata \Doctrine\ORM\Mapping\ClassMetadataInfo */
$class = $metadata->getReflectionClass();
if ( ! $class) {
// this happens when running annotation driver in combination with
// static reflection services. This is not the nicest fix
@ -78,11 +79,13 @@ class AnnotationDriver extends AbstractAnnotationDriver
if ($entityAnnot->repositoryClass !== null) {
$metadata->setCustomRepositoryClass($entityAnnot->repositoryClass);
}
if ($entityAnnot->readOnly) {
$metadata->markReadOnly();
}
} else if (isset($classAnnotations['Doctrine\ORM\Mapping\MappedSuperclass'])) {
$mappedSuperclassAnnot = $classAnnotations['Doctrine\ORM\Mapping\MappedSuperclass'];
$metadata->setCustomRepositoryClass($mappedSuperclassAnnot->repositoryClass);
$metadata->isMappedSuperclass = true;
} else if (isset($classAnnotations['Doctrine\ORM\Mapping\Embeddable'])) {
@ -227,17 +230,21 @@ class AnnotationDriver extends AbstractAnnotationDriver
// Evaluate InheritanceType annotation
if (isset($classAnnotations['Doctrine\ORM\Mapping\InheritanceType'])) {
$inheritanceTypeAnnot = $classAnnotations['Doctrine\ORM\Mapping\InheritanceType'];
$metadata->setInheritanceType(constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceTypeAnnot->value));
$metadata->setInheritanceType(
constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceTypeAnnot->value)
);
if ($metadata->inheritanceType != \Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_NONE) {
// Evaluate DiscriminatorColumn annotation
if (isset($classAnnotations['Doctrine\ORM\Mapping\DiscriminatorColumn'])) {
$discrColumnAnnot = $classAnnotations['Doctrine\ORM\Mapping\DiscriminatorColumn'];
$metadata->setDiscriminatorColumn(array(
'name' => $discrColumnAnnot->name,
'type' => $discrColumnAnnot->type,
'length' => $discrColumnAnnot->length,
'columnDefinition' => $discrColumnAnnot->columnDefinition
'name' => $discrColumnAnnot->name,
'type' => $discrColumnAnnot->type,
'length' => $discrColumnAnnot->length,
'columnDefinition' => $discrColumnAnnot->columnDefinition,
));
} else {
$metadata->setDiscriminatorColumn(array('name' => 'dtype', 'type' => 'string', 'length' => 255));
@ -273,6 +280,7 @@ class AnnotationDriver extends AbstractAnnotationDriver
$mapping = array();
$mapping['fieldName'] = $property->getName();
// Evaluate @Cache annotation
if (($cacheAnnot = $this->reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\Cache')) !== null) {
$mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], array(
@ -400,6 +408,7 @@ class AnnotationDriver extends AbstractAnnotationDriver
} else if ($embeddedAnnot = $this->reader->getPropertyAnnotation($property, 'Doctrine\ORM\Mapping\Embedded')) {
$mapping['class'] = $embeddedAnnot->class;
$mapping['columnPrefix'] = $embeddedAnnot->columnPrefix;
$metadata->mapEmbedded($mapping);
}
}
@ -415,9 +424,11 @@ class AnnotationDriver extends AbstractAnnotationDriver
// Check for JoinColumn/JoinColumns annotations
if ($associationOverride->joinColumns) {
$joinColumns = array();
foreach ($associationOverride->joinColumns as $joinColumn) {
$joinColumns[] = $this->joinColumnToArray($joinColumn);
}
$override['joinColumns'] = $joinColumns;
}
@ -452,8 +463,10 @@ class AnnotationDriver extends AbstractAnnotationDriver
// Evaluate AttributeOverrides annotation
if (isset($classAnnotations['Doctrine\ORM\Mapping\AttributeOverrides'])) {
$attributeOverridesAnnot = $classAnnotations['Doctrine\ORM\Mapping\AttributeOverrides'];
foreach ($attributeOverridesAnnot->value as $attributeOverrideAnnot) {
$attributeOverride = $this->columnToArray($attributeOverrideAnnot->name, $attributeOverrideAnnot->column);
$metadata->setAttributeOverride($attributeOverrideAnnot->name, $attributeOverride);
}
}
@ -471,6 +484,7 @@ class AnnotationDriver extends AbstractAnnotationDriver
$hasMapping = false;
$listenerClass = new \ReflectionClass($listenerClassName);
/* @var $method \ReflectionMethod */
foreach ($listenerClass->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) {
// find method callbacks.
@ -481,6 +495,7 @@ class AnnotationDriver extends AbstractAnnotationDriver
$metadata->addEntityListener($value[1], $listenerClassName, $value[0]);
}
}
// Evaluate the listener using naming convention.
if ( ! $hasMapping ) {
EntityListenerBuilder::bindEntityListener($metadata, $listenerClassName);
@ -492,9 +507,7 @@ class AnnotationDriver extends AbstractAnnotationDriver
if (isset($classAnnotations['Doctrine\ORM\Mapping\HasLifecycleCallbacks'])) {
/* @var $method \ReflectionMethod */
foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) {
foreach ($this->getMethodCallbacks($method) as $value) {
$metadata->addLifecycleCallback($value[0], $value[1]);
}
}

View File

@ -715,6 +715,7 @@ class YamlDriver extends FileDriver
if (isset($column['type'])) {
$params = explode('(', $column['type']);
$column['type'] = $params[0];
$mapping['type'] = $column['type'];

View File

@ -471,7 +471,7 @@ final class PersistentCollection extends AbstractLazyCollection implements Selec
$this->changed();
if ($this->em) {
if (is_object($value) && $this->em) {
$this->em->getUnitOfWork()->cancelOrphanRemoval($value);
}
}
@ -485,7 +485,7 @@ final class PersistentCollection extends AbstractLazyCollection implements Selec
$this->changed();
if ($this->em) {
if (is_object($value) && $this->em) {
$this->em->getUnitOfWork()->cancelOrphanRemoval($value);
}

View File

@ -23,6 +23,7 @@ use Doctrine\Common\Collections\Criteria;
use Doctrine\Common\Proxy\Proxy;
use Doctrine\DBAL\Types\Type;
use Doctrine\ORM\PersistentCollection;
use Doctrine\ORM\Utility\PersisterHelper;
/**
* Persister for one-to-many collections.
@ -251,7 +252,7 @@ class OneToManyPersister extends AbstractCollectionPersister
foreach ($idColumnNames as $idColumnName) {
$columnDefinitions[$idColumnName] = array(
'notnull' => true,
'type' => Type::getType($rootClass->getTypeOfColumn($idColumnName)),
'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $this->em)),
);
}

View File

@ -60,16 +60,19 @@ abstract class AbstractEntityInheritancePersister extends BasicEntityPersister
*/
protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r')
{
$tableAlias = $alias == 'r' ? '' : $alias;
$columnName = $class->columnNames[$field];
$columnAlias = $this->getSQLColumnAlias($columnName);
$sql = $this->getSQLTableAlias($class->name, $tableAlias) . '.'
. $this->quoteStrategy->getColumnName($field, $class, $this->platform);
$tableAlias = $alias == 'r' ? '' : $alias;
$fieldMapping = $class->fieldMappings[$field];
$columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']);
$sql = sprintf(
'%s.%s',
$this->getSQLTableAlias($class->name, $tableAlias),
$this->quoteStrategy->getColumnName($field, $class, $this->platform)
);
$this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name);
if (isset($class->fieldMappings[$field]['requireSQLConversion'])) {
$type = Type::getType($class->getTypeOfField($field));
if (isset($fieldMapping['requireSQLConversion'])) {
$type = Type::getType($fieldMapping['type']);
$sql = $type->convertToPHPValueSQL($sql, $this->platform);
}

View File

@ -331,10 +331,11 @@ class BasicEntityPersister implements EntityPersister
*/
protected function fetchVersionValue($versionedClass, array $id)
{
$versionField = $versionedClass->versionField;
$tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform);
$identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform);
$columnName = $this->quoteStrategy->getColumnName($versionField, $versionedClass, $this->platform);
$versionField = $versionedClass->versionField;
$fieldMapping = $versionedClass->fieldMappings[$versionField];
$tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform);
$identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform);
$columnName = $this->quoteStrategy->getColumnName($versionField, $versionedClass, $this->platform);
// FIXME: Order with composite keys might not be correct
$sql = 'SELECT ' . $columnName
@ -345,7 +346,7 @@ class BasicEntityPersister implements EntityPersister
$value = $this->conn->fetchColumn($sql, array_values($flatId));
return Type::getType($versionedClass->fieldMappings[$versionField]['type'])->convertToPHPValue($value, $this->platform);
return Type::getType($fieldMapping['type'])->convertToPHPValue($value, $this->platform);
}
/**
@ -424,7 +425,6 @@ class BasicEntityPersister implements EntityPersister
foreach ($this->class->identifier as $idField) {
if ( ! isset($this->class->associationMappings[$idField])) {
$params[] = $identifier[$idField];
$types[] = $this->class->fieldMappings[$idField]['type'];
$where[] = $this->quoteStrategy->getColumnName($idField, $this->class, $this->platform);
@ -550,18 +550,18 @@ class BasicEntityPersister implements EntityPersister
*/
public function delete($entity)
{
$self = $this;
$class = $this->class;
$identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity);
$tableName = $this->quoteStrategy->getTableName($class, $this->platform);
$idColumns = $this->quoteStrategy->getIdentifierColumnNames($class, $this->platform);
$id = array_combine($idColumns, $identifier);
$types = array_map(function ($identifier) use ($class) {
$types = array_map(function ($identifier) use ($class, $self) {
if (isset($class->fieldMappings[$identifier])) {
return $class->fieldMappings[$identifier]['type'];
}
$targetMapping = $this->em->getClassMetadata($class->associationMappings[$identifier]['targetEntity']);
$targetMapping = $self->em->getClassMetadata($class->associationMappings[$identifier]['targetEntity']);
if (isset($targetMapping->fieldMappings[$targetMapping->identifier[0]])) {
return $targetMapping->fieldMappings[$targetMapping->identifier[0]]['type'];
@ -572,7 +572,6 @@ class BasicEntityPersister implements EntityPersister
}
throw ORMException::unrecognizedField($targetMapping->identifier[0]);
}, $class->identifier);
$this->deleteJoinTableRecords($identifier);
@ -623,8 +622,11 @@ class BasicEntityPersister implements EntityPersister
$newVal = $change[1];
if ( ! isset($this->class->associationMappings[$field])) {
$columnName = $this->class->columnNames[$field];
$this->columnTypes[$columnName] = $this->class->fieldMappings[$field]['type'];
$fieldMapping = $this->class->fieldMappings[$field];
$columnName = $fieldMapping['columnName'];
$this->columnTypes[$columnName] = $fieldMapping['type'];
$result[$this->getOwningTable($field)][$columnName] = $newVal;
continue;
@ -988,7 +990,6 @@ class BasicEntityPersister implements EntityPersister
$quotedJoinTable = $this->quoteStrategy->getJoinTableName($association, $class, $this->platform);
foreach ($joinColumns as $joinColumn) {
$sourceKeyColumn = $joinColumn['referencedColumnName'];
$quotedKeyColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform);
@ -1314,19 +1315,19 @@ class BasicEntityPersister implements EntityPersister
return '';
}
$columnList = array();
$targetClass = $this->em->getClassMetadata($assoc['targetEntity']);
$columnList = array();
$targetClass = $this->em->getClassMetadata($assoc['targetEntity']);
$isIdentifier = isset($assoc['id']) && $assoc['id'] === true;
$sqlTableAlias = $this->getSQLTableAlias($class->name, ($alias == 'r' ? '' : $alias));
foreach ($assoc['joinColumns'] as $joinColumn) {
$type = null;
$isIdentifier = isset($assoc['id']) && $assoc['id'] === true;
$quotedColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform);
$resultColumnName = $this->getSQLColumnAlias($joinColumn['name']);
$columnList[] = $this->getSQLTableAlias($class->name, ($alias == 'r' ? '' : $alias) )
. '.' . $quotedColumn . ' AS ' . $resultColumnName;
$type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);
$this->currentPersisterContext->rsm->addMetaResult($alias, $resultColumnName, $quotedColumn, $isIdentifier, $type);
$columnList[] = sprintf('%s.%s AS %s', $sqlTableAlias, $quotedColumn, $resultColumnName);
}
return implode(', ', $columnList);
@ -1393,7 +1394,6 @@ class BasicEntityPersister implements EntityPersister
if (isset($this->class->fieldNames[$column])
&& isset($this->columnTypes[$this->class->fieldNames[$column]])
&& isset($this->class->fieldMappings[$this->class->fieldNames[$column]]['requireSQLConversion'])) {
$type = Type::getType($this->columnTypes[$this->class->fieldNames[$column]]);
$placeholder = $type->convertToDatabaseValueSQL('?', $this->platform);
}
@ -1432,6 +1432,7 @@ class BasicEntityPersister implements EntityPersister
if (isset($this->class->associationMappings[$name])) {
$assoc = $this->class->associationMappings[$name];
if ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) {
foreach ($assoc['joinColumns'] as $joinColumn) {
$columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform);
@ -1462,17 +1463,17 @@ class BasicEntityPersister implements EntityPersister
*/
protected function getSelectColumnSQL($field, ClassMetadata $class, $alias = 'r')
{
$root = $alias == 'r' ? '' : $alias ;
$tableAlias = $this->getSQLTableAlias($class->name, $root);
$columnName = $this->quoteStrategy->getColumnName($field, $class, $this->platform);
$sql = $tableAlias . '.' . $columnName;
$columnAlias = $this->getSQLColumnAlias($class->columnNames[$field]);
$root = $alias == 'r' ? '' : $alias ;
$tableAlias = $this->getSQLTableAlias($class->name, $root);
$fieldMapping = $class->fieldMappings[$field];
$sql = sprintf('%s.%s', $tableAlias, $this->quoteStrategy->getColumnName($field, $class, $this->platform));
$columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']);
$this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field);
if (isset($class->fieldMappings[$field]['requireSQLConversion'])) {
$type = Type::getType($class->getTypeOfField($field));
$sql = $type->convertToPHPValueSQL($sql, $this->platform);
if (isset($fieldMapping['requireSQLConversion'])) {
$type = Type::getType($fieldMapping['type']);
$sql = $type->convertToPHPValueSQL($sql, $this->platform);
}
return $sql . ' AS ' . $columnAlias;
@ -1593,22 +1594,26 @@ class BasicEntityPersister implements EntityPersister
$placeholder = '?';
if (isset($this->class->fieldMappings[$field]['requireSQLConversion'])) {
$placeholder = Type::getType($this->class->getTypeOfField($field))->convertToDatabaseValueSQL($placeholder, $this->platform);
$type = Type::getType($this->class->fieldMappings[$field]['type']);
$placeholder = $type->convertToDatabaseValueSQL($placeholder, $this->platform);
}
if (null !== $comparison) {
// special case null value handling
if (($comparison === Comparison::EQ || $comparison === Comparison::IS) && null ===$value) {
$selectedColumns[] = $column . ' IS NULL';
continue;
}
if ($comparison === Comparison::NEQ && null === $value) {
$selectedColumns[] = $column . ' IS NOT NULL';
continue;
}
$selectedColumns[] = $column . ' ' . sprintf(self::$comparisonMap[$comparison], $placeholder);
continue;
}
@ -1617,15 +1622,18 @@ class BasicEntityPersister implements EntityPersister
if (false !== array_search(null, $value, true)) {
$selectedColumns[] = sprintf('(%s OR %s IS NULL)', $in, $column);
continue;
}
$selectedColumns[] = $in;
continue;
}
if (null === $value) {
$selectedColumns[] = sprintf('%s IS NULL', $column);
continue;
}
@ -1647,7 +1655,7 @@ class BasicEntityPersister implements EntityPersister
*/
private function getSelectConditionStatementColumnSQL($field, $assoc = null)
{
if (isset($this->class->columnNames[$field])) {
if (isset($this->class->fieldMappings[$field])) {
$className = (isset($this->class->fieldMappings[$field]['inherited']))
? $this->class->fieldMappings[$field]['inherited']
: $this->class->name;
@ -1677,7 +1685,6 @@ class BasicEntityPersister implements EntityPersister
}
} else {
if ( ! $association['isOwningSide']) {
throw ORMException::invalidFindByInverseAssociation($this->class->name, $field);
}
@ -1767,8 +1774,7 @@ class BasicEntityPersister implements EntityPersister
$parameters = array();
$owningAssoc = $this->class->associationMappings[$assoc['mappedBy']];
$sourceClass = $this->em->getClassMetadata($assoc['sourceEntity']);
$tableAlias = $this->getSQLTableAlias(isset($owningAssoc['inherited']) ? $owningAssoc['inherited'] : $this->class->name);
$tableAlias = $this->getSQLTableAlias(isset($owningAssoc['inherited']) ? $owningAssoc['inherited'] : $this->class->name);
foreach ($owningAssoc['targetToSourceKeyColumns'] as $sourceKeyColumn => $targetKeyColumn) {
if ($sourceClass->containsForeignIdentifier) {
@ -1873,7 +1879,7 @@ class BasicEntityPersister implements EntityPersister
switch (true) {
case (isset($class->fieldMappings[$field])):
$types = array_merge($types, PersisterHelper::getTypeOfField($field, $class, $this->em));
$types = array_merge($types, array($class->fieldMappings[$field]['type']));
break;
case (isset($class->associationMappings[$field])):
@ -1900,12 +1906,11 @@ class BasicEntityPersister implements EntityPersister
}
if (is_array($value)) {
return array_map(
function ($type) {
return Type::getType($type)->getBindingType() + Connection::ARRAY_PARAM_OFFSET;
},
$types
);
return array_map(function ($type) {
$type = Type::getType($type);
return $type->getBindingType() + Connection::ARRAY_PARAM_OFFSET;
}, $types);
}
return $types;

View File

@ -257,11 +257,13 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister
// table were affected.
if ($isVersioned) {
if ( ! isset($updateData[$versionedTable])) {
$tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform);
$tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform);
$this->updateTable($entity, $tableName, array(), true);
}
$identifiers = $this->em->getUnitOfWork()->getEntityIdentifier($entity);
$this->assignDefaultVersionValue($entity, $identifiers);
}
}
@ -434,12 +436,13 @@ class JoinedSubclassPersister extends AbstractEntityInheritancePersister
$columnList = array();
$discrColumn = $this->class->discriminatorColumn['name'];
$discrColumnType = $this->class->discriminatorColumn['type'];
$baseTableAlias = $this->getSQLTableAlias($this->class->name);
$resultColumnName = $this->platform->getSQLResultCasing($discrColumn);
$this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r');
$this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName);
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn);
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn, false, $discrColumnType);
// Add regular columns
foreach ($this->class->fieldMappings as $fieldName => $mapping) {

View File

@ -58,13 +58,15 @@ class SingleTablePersister extends AbstractEntityInheritancePersister
$tableAlias = $this->getSQLTableAlias($rootClass->name);
// Append discriminator column
$discrColumn = $this->class->discriminatorColumn['name'];
$discrColumn = $this->class->discriminatorColumn['name'];
$discrColumnType = $this->class->discriminatorColumn['type'];
$columnList[] = $tableAlias . '.' . $discrColumn;
$resultColumnName = $this->platform->getSQLResultCasing($discrColumn);
$this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName);
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn);
$this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumn, false, $discrColumnType);
// Append subclass columns
foreach ($this->class->subClasses as $subClassName) {
@ -81,17 +83,14 @@ class SingleTablePersister extends AbstractEntityInheritancePersister
// Foreign key columns
foreach ($subClass->associationMappings as $assoc) {
if ( ! $assoc['isOwningSide']
|| ! ($assoc['type'] & ClassMetadata::TO_ONE)
|| isset($assoc['inherited'])) {
if ( ! $assoc['isOwningSide'] || ! ($assoc['type'] & ClassMetadata::TO_ONE) || isset($assoc['inherited'])) {
continue;
}
$className = isset($assoc['inherited']) ? $assoc['inherited'] : $this->class->name;
$targetClass = $this->em->getClassMetadata($assoc['targetEntity']);
foreach ($assoc['targetToSourceKeyColumns'] as $srcColumn) {
$className = isset($assoc['inherited']) ? $assoc['inherited'] : $this->class->name;
$targetClass = $this->em->getClassMetadata($assoc['targetEntity']);
$columnList[] = $this->getSelectJoinColumnSQL(
$tableAlias,
$srcColumn,

View File

@ -20,7 +20,9 @@
namespace Doctrine\ORM\Query\Exec;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Types\Type;
use Doctrine\ORM\Query\AST;
use Doctrine\ORM\Utility\PersisterHelper;
/**
* Executes the SQL statements for bulk DQL DELETE statements on classes in
@ -103,7 +105,7 @@ class MultiTableDeleteExecutor extends AbstractSqlExecutor
foreach ($idColumnNames as $idColumnName) {
$columnDefinitions[$idColumnName] = array(
'notnull' => true,
'type' => \Doctrine\DBAL\Types\Type::getType($rootClass->getTypeOfColumn($idColumnName))
'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em)),
);
}
$this->_createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' ('

View File

@ -21,9 +21,9 @@ namespace Doctrine\ORM\Query\Exec;
use Doctrine\DBAL\Connection;
use Doctrine\DBAL\Types\Type;
use Doctrine\ORM\Query\ParameterTypeInferer;
use Doctrine\ORM\Query\AST;
use Doctrine\ORM\Utility\PersisterHelper;
/**
* Executes the SQL statements for bulk DQL UPDATE statements on classes in
@ -111,8 +111,8 @@ class MultiTableUpdateExecutor extends AbstractSqlExecutor
foreach ($updateItems as $updateItem) {
$field = $updateItem->pathExpression->field;
if (isset($class->fieldMappings[$field]) && ! isset($class->fieldMappings[$field]['inherited']) ||
isset($class->associationMappings[$field]) && ! isset($class->associationMappings[$field]['inherited'])) {
if ((isset($class->fieldMappings[$field]) && ! isset($class->fieldMappings[$field]['inherited'])) ||
(isset($class->associationMappings[$field]) && ! isset($class->associationMappings[$field]['inherited']))) {
$newValue = $updateItem->newValue;
if ( ! $affected) {
@ -148,7 +148,7 @@ class MultiTableUpdateExecutor extends AbstractSqlExecutor
foreach ($idColumnNames as $idColumnName) {
$columnDefinitions[$idColumnName] = array(
'notnull' => true,
'type' => Type::getType($rootClass->getTypeOfColumn($idColumnName))
'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em)),
);
}

View File

@ -558,6 +558,8 @@ class ResultSetMapping
* @param string $type The column type
*
* @return ResultSetMapping This ResultSetMapping instance.
*
* @todo Make all methods of this class require all parameters and not infer anything
*/
public function addMetaResult($alias, $columnName, $fieldName, $isIdentifierColumn = false, $type = null)
{

View File

@ -19,8 +19,11 @@
namespace Doctrine\ORM\Query;
use Doctrine\DBAL\Types\Type;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\ORM\Mapping\MappingException;
use Doctrine\ORM\Utility\PersisterHelper;
/**
* A ResultSetMappingBuilder uses the EntityManager to automatically populate entity fields.
@ -160,20 +163,19 @@ class ResultSetMappingBuilder extends ResultSetMapping
foreach ($classMetadata->associationMappings as $associationMapping) {
if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadataInfo::TO_ONE) {
$targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']);
$isIdentifier = isset($associationMapping['id']) && $associationMapping['id'] === true;
foreach ($associationMapping['joinColumns'] as $joinColumn) {
$columnName = $joinColumn['name'];
$columnAlias = $platform->getSQLResultCasing($columnAliasMap[$columnName]);
$columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);
if (isset($this->metaMappings[$columnAlias])) {
throw new \InvalidArgumentException("The column '$columnAlias' conflicts with another column in the mapper.");
}
$this->addMetaResult(
$alias,
$columnAlias,
$columnName,
(isset($associationMapping['id']) && $associationMapping['id'] === true)
);
$this->addMetaResult($alias, $columnAlias, $columnName, $isIdentifier, $columnType);
}
}
}
@ -284,21 +286,27 @@ class ResultSetMappingBuilder extends ResultSetMapping
$this->addEntityResult($class->name, $alias);
if ($classMetadata->discriminatorColumn) {
$discriminatorColumn = $classMetadata->discriminatorColumn;
$this->setDiscriminatorColumn($alias, $discriminatorColumn['name']);
$this->addMetaResult($alias, $discriminatorColumn['name'], $discriminatorColumn['fieldName']);
$discrColumn = $classMetadata->discriminatorColumn;
$this->setDiscriminatorColumn($alias, $discrColumn['name']);
$this->addMetaResult($alias, $discrColumn['name'], $discrColumn['fieldName'], false, $discrColumn['type']);
}
foreach ($classMetadata->getColumnNames() as $key => $columnName) {
$propertyName = $classMetadata->getFieldName($columnName);
$propertyName = $classMetadata->getFieldName($columnName);
$this->addFieldResult($alias, $columnName, $propertyName);
}
foreach ($classMetadata->associationMappings as $associationMapping) {
if ($associationMapping['isOwningSide'] && $associationMapping['type'] & ClassMetadataInfo::TO_ONE) {
$targetClass = $this->em->getClassMetadata($associationMapping['targetEntity']);
foreach ($associationMapping['joinColumns'] as $joinColumn) {
$columnName = $joinColumn['name'];
$this->addMetaResult($alias, $columnName, $columnName, $classMetadata->isIdentifier($columnName));
$columnName = $joinColumn['name'];
$columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);
$this->addMetaResult($alias, $columnName, $columnName, $classMetadata->isIdentifier($columnName), $columnType);
}
}
}
@ -318,8 +326,8 @@ class ResultSetMappingBuilder extends ResultSetMapping
{
$counter = 0;
$resultMapping = $class->getSqlResultSetMapping($resultSetMappingName);
$rooShortName = $class->reflClass->getShortName();
$rootAlias = strtolower($rooShortName[0]) . $counter;
$rootShortName = $class->reflClass->getShortName();
$rootAlias = strtolower($rootShortName[0]) . $counter;
if (isset($resultMapping['entities'])) {
@ -334,9 +342,10 @@ class ResultSetMappingBuilder extends ResultSetMapping
$joinAlias = strtolower($shortName[0]) . ++ $counter;
$associations = $class->getAssociationsByTargetClass($classMetadata->name);
$this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $joinAlias);
foreach ($associations as $relation => $mapping) {
$this->addJoinedEntityResult($mapping['targetEntity'], $joinAlias, $rootAlias, $relation);
$this->addNamedNativeQueryEntityResultMapping($classMetadata, $entityMapping, $joinAlias);
}
}
@ -345,7 +354,11 @@ class ResultSetMappingBuilder extends ResultSetMapping
if (isset($resultMapping['columns'])) {
foreach ($resultMapping['columns'] as $entityMapping) {
$this->addScalarResult($entityMapping['name'], $entityMapping['name']);
$type = isset($class->fieldNames[$entityMapping['name']])
? PersisterHelper::getTypeOfColumn($entityMapping['name'], $class, $this->em)
: 'string';
$this->addScalarResult($entityMapping['name'], $entityMapping['name'], $type);
}
}
@ -361,14 +374,17 @@ class ResultSetMappingBuilder extends ResultSetMapping
*
* @return ResultSetMappingBuilder
*
* @throws MappingException
* @throws \InvalidArgumentException
*/
public function addNamedNativeQueryEntityResultMapping(ClassMetadataInfo $classMetadata, array $entityMapping, $alias)
{
if (isset($entityMapping['discriminatorColumn']) && $entityMapping['discriminatorColumn']) {
$discriminatorColumn = $entityMapping['discriminatorColumn'];
$discriminatorType = $classMetadata->discriminatorColumn['type'];
$this->setDiscriminatorColumn($alias, $discriminatorColumn);
$this->addMetaResult($alias, $discriminatorColumn, $discriminatorColumn);
$this->addMetaResult($alias, $discriminatorColumn, $discriminatorColumn, false, $discriminatorType);
}
if (isset($entityMapping['fields']) && !empty($entityMapping['fields'])) {
@ -376,32 +392,34 @@ class ResultSetMappingBuilder extends ResultSetMapping
$fieldName = $field['name'];
$relation = null;
if(strpos($fieldName, '.')){
if (strpos($fieldName, '.') !== false) {
list($relation, $fieldName) = explode('.', $fieldName);
}
if (isset($classMetadata->associationMappings[$relation])) {
if($relation) {
if ($relation) {
$associationMapping = $classMetadata->associationMappings[$relation];
$joinAlias = $alias.$relation;
$parentAlias = $alias;
$this->addJoinedEntityResult($associationMapping['targetEntity'], $joinAlias, $parentAlias, $relation);
$this->addFieldResult($joinAlias, $field['column'], $fieldName);
}else {
} else {
$this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name);
}
} else {
if(!isset($classMetadata->fieldMappings[$fieldName])) {
if( ! isset($classMetadata->fieldMappings[$fieldName])) {
throw new \InvalidArgumentException("Entity '".$classMetadata->name."' has no field '".$fieldName."'. ");
}
$this->addFieldResult($alias, $field['column'], $fieldName, $classMetadata->name);
}
}
} else {
foreach ($classMetadata->getColumnNames() as $columnName) {
$propertyName = $classMetadata->getFieldName($columnName);
$propertyName = $classMetadata->getFieldName($columnName);
$this->addFieldResult($alias, $columnName, $propertyName);
}
}

View File

@ -22,9 +22,10 @@ namespace Doctrine\ORM\Query;
use Doctrine\DBAL\LockMode;
use Doctrine\DBAL\Types\Type;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Query;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\Query;
use Doctrine\ORM\Utility\PersisterHelper;
/**
* The SqlWalker is a TreeWalker that walks over a DQL AST and constructs
@ -456,8 +457,11 @@ class SqlWalker implements TreeWalker
$values[] = $conn->quote($this->em->getClassMetadata($subclassName)->discriminatorValue);
}
$sqlParts[] = (($this->useSqlTableAliases) ? $this->getSQLTableAlias($class->getTableName(), $dqlAlias) . '.' : '')
. $class->discriminatorColumn['name'] . ' IN (' . implode(', ', $values) . ')';
$sqlTableAlias = ($this->useSqlTableAliases)
? $this->getSQLTableAlias($class->getTableName(), $dqlAlias) . '.'
: '';
$sqlParts[] = $sqlTableAlias . $class->discriminatorColumn['name'] . ' IN (' . implode(', ', $values) . ')';
}
$sql = implode(' AND ', $sqlParts);
@ -735,7 +739,7 @@ class SqlWalker implements TreeWalker
$sqlSelectExpressions[] = $tblAlias . '.' . $discrColumn['name'] . ' AS ' . $columnAlias;
$this->rsm->setDiscriminatorColumn($dqlAlias, $columnAlias);
$this->rsm->addMetaResult($dqlAlias, $columnAlias, $discrColumn['fieldName']);
$this->rsm->addMetaResult($dqlAlias, $columnAlias, $discrColumn['fieldName'], false, $discrColumn['type']);
}
// Add foreign key columns to SQL, if necessary
@ -751,23 +755,19 @@ class SqlWalker implements TreeWalker
continue;
}
$targetClass = $this->em->getClassMetadata($assoc['targetEntity']);
$isIdentifier = (isset($assoc['id']) && $assoc['id'] === true);
$owningClass = (isset($assoc['inherited'])) ? $this->em->getClassMetadata($assoc['inherited']) : $class;
$sqlTableAlias = $this->getSQLTableAlias($owningClass->getTableName(), $dqlAlias);
$targetClass = $this->em->getClassMetadata($assoc['targetEntity']);
foreach ($assoc['joinColumns'] as $joinColumn) {
$columnName = $joinColumn['name'];
$columnAlias = $this->getSQLColumnAlias($columnName);
$columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);
foreach ($assoc['targetToSourceKeyColumns'] as $targetColumn => $srcColumn) {
$columnAlias = $this->getSQLColumnAlias($srcColumn);
$sqlSelectExpressions[] = $sqlTableAlias . '.' . $columnName . ' AS ' . $columnAlias;
$type = null;
$isIdentifier = (isset($assoc['id']) && $assoc['id'] === true);
$sqlSelectExpressions[] = $sqlTableAlias . '.' . $srcColumn . ' AS ' . $columnAlias;
if (isset($targetClass->fieldNames[$targetColumn])) {
$type = $targetClass->fieldMappings[$targetClass->fieldNames[$targetColumn]]['type'];
}
$this->rsm->addMetaResult($dqlAlias, $columnAlias, $srcColumn, $isIdentifier, $type);
$this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $isIdentifier, $columnType);
}
}
@ -785,14 +785,18 @@ class SqlWalker implements TreeWalker
// Skip if association is inherited
if (isset($assoc['inherited'])) continue;
if ( ! ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE)) continue;
if ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) {
$targetClass = $this->em->getClassMetadata($assoc['targetEntity']);
foreach ($assoc['targetToSourceKeyColumns'] as $srcColumn) {
$columnAlias = $this->getSQLColumnAlias($srcColumn);
foreach ($assoc['joinColumns'] as $joinColumn) {
$columnName = $joinColumn['name'];
$columnAlias = $this->getSQLColumnAlias($columnName);
$columnType = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em);
$sqlSelectExpressions[] = $sqlTableAlias . '.' . $srcColumn . ' AS ' . $columnAlias;
$sqlSelectExpressions[] = $sqlTableAlias . '.' . $columnName . ' AS ' . $columnAlias;
$this->rsm->addMetaResult($dqlAlias, $columnAlias, $srcColumn);
$this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $subClass->isIdentifier($columnName), $columnType);
}
}
}
}
@ -1296,15 +1300,13 @@ class SqlWalker implements TreeWalker
: $class->getTableName();
$sqlTableAlias = $this->getSQLTableAlias($tableName, $dqlAlias);
$fieldMapping = $class->fieldMappings[$fieldName];
$columnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform);
$columnAlias = $this->getSQLColumnAlias($class->fieldMappings[$fieldName]['columnName']);
$columnAlias = $this->getSQLColumnAlias($fieldMapping['columnName']);
$col = $sqlTableAlias . '.' . $columnName;
$col = $sqlTableAlias . '.' . $columnName;
$fieldType = $class->getTypeOfField($fieldName);
if (isset($class->fieldMappings[$fieldName]['requireSQLConversion'])) {
$type = Type::getType($fieldType);
if (isset($fieldMapping['requireSQLConversion'])) {
$type = Type::getType($fieldMapping['type']);
$col = $type->convertToPHPValueSQL($col, $this->conn->getDatabasePlatform());
}
@ -1313,9 +1315,10 @@ class SqlWalker implements TreeWalker
$this->scalarResultAliasMap[$resultAlias] = $columnAlias;
if ( ! $hidden) {
$this->rsm->addScalarResult($columnAlias, $resultAlias, $fieldType);
$this->rsm->addScalarResult($columnAlias, $resultAlias, $fieldMapping['type']);
$this->scalarFields[$dqlAlias][$fieldName] = $columnAlias;
}
break;
case ($expr instanceof AST\AggregateExpression):
@ -1400,8 +1403,8 @@ class SqlWalker implements TreeWalker
$col = $sqlTableAlias . '.' . $quotedColumnName;
if (isset($class->fieldMappings[$fieldName]['requireSQLConversion'])) {
$type = Type::getType($class->getTypeOfField($fieldName));
if (isset($mapping['requireSQLConversion'])) {
$type = Type::getType($mapping['type']);
$col = $type->convertToPHPValueSQL($col, $this->platform);
}
@ -1422,7 +1425,7 @@ class SqlWalker implements TreeWalker
$sqlTableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias);
foreach ($subClass->fieldMappings as $fieldName => $mapping) {
if (isset($mapping['inherited']) || $partialFieldSet && !in_array($fieldName, $partialFieldSet)) {
if (isset($mapping['inherited']) || ($partialFieldSet && !in_array($fieldName, $partialFieldSet))) {
continue;
}
@ -1431,8 +1434,8 @@ class SqlWalker implements TreeWalker
$col = $sqlTableAlias . '.' . $quotedColumnName;
if (isset($subClass->fieldMappings[$fieldName]['requireSQLConversion'])) {
$type = Type::getType($subClass->getTypeOfField($fieldName));
if (isset($mapping['requireSQLConversion'])) {
$type = Type::getType($mapping['type']);
$col = $type->convertToPHPValueSQL($col, $this->platform);
}
@ -1543,11 +1546,10 @@ class SqlWalker implements TreeWalker
break;
case ($e instanceof AST\PathExpression):
$fieldName = $e->field;
$dqlAlias = $e->identificationVariable;
$qComp = $this->queryComponents[$dqlAlias];
$class = $qComp['metadata'];
$fieldType = $class->getTypeOfField($fieldName);
$fieldType = $class->fieldMappings[$e->field]['type'];
$sqlSelectExpressions[] = trim($e->dispatch($this)) . ' AS ' . $columnAlias;
break;

View File

@ -89,7 +89,7 @@ class LimitSubqueryWalker extends TreeWalkerAdapter
$this->_getQuery()->setHint(
self::IDENTIFIER_TYPE,
Type::getType($rootClass->getTypeOfField($identifier))
Type::getType($rootClass->fieldMappings[$identifier]['type'])
);
$pathExpression = new PathExpression(
@ -97,9 +97,11 @@ class LimitSubqueryWalker extends TreeWalkerAdapter
$rootAlias,
$identifier
);
$pathExpression->type = PathExpression::TYPE_STATE_FIELD;
array_unshift($selectExpressions, new SelectExpression($pathExpression, '_dctrn_id'));
$AST->selectClause->selectExpressions = $selectExpressions;
if (isset($AST->orderByClause)) {

View File

@ -26,7 +26,7 @@ namespace Doctrine\Tests\Models\DDC869;
class DDC869ChequePayment extends DDC869Payment
{
/** @column(type="string") */
/** @Column(type="string") */
protected $serialNumber;
public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata)

View File

@ -26,7 +26,7 @@ namespace Doctrine\Tests\Models\DDC869;
class DDC869CreditCardPayment extends DDC869Payment
{
/** @column(type="string") */
/** @Column(type="string") */
protected $creditCardNumber;
public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata)

View File

@ -33,7 +33,7 @@ class DDC869Payment
*/
protected $id;
/** @column(type="float") */
/** @Column(type="float") */
protected $value;

View File

@ -23,7 +23,7 @@ use Doctrine\Common\Collections\ArrayCollection;
*/
class DDC964Admin extends DDC964User
{
public static function loadMetadata($metadata)
public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata)
{
$metadata->setAssociationOverride('address',array(
'joinColumns'=>array(array(

View File

@ -26,7 +26,7 @@ use Doctrine\Common\Collections\ArrayCollection;
*/
class DDC964Guest extends DDC964User
{
public static function loadMetadata($metadata)
public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata)
{
$metadata->setAttributeOverride('id', array(
'columnName' => 'guest_id',

View File

@ -107,7 +107,7 @@ class DDC964User
$this->address = $address;
}
public static function loadMetadata($metadata)
public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata)
{
$metadata->mapField(array(
'id' => true,

View File

@ -0,0 +1,30 @@
<?php
namespace Doctrine\Tests\Models\Generic;
/**
* @Entity
* @Table(name="`not-a-simple-entity`")
*/
class NonAlphaColumnsEntity
{
/**
* @Id
* @Column(type="integer", name="`simple-entity-id`")
* @GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @Column(type="string", name="`simple-entity-value`")
*/
public $value;
/**
* @param string $value
*/
public function __construct($value)
{
$this->value = $value;
}
}

View File

@ -1,19 +1,19 @@
<?php
/**
* @entity
* @table(name="articles")
* @Entity
* @Table(name="articles")
*/
class DoctrineGlobal_Article
{
/**
* @id
* @column(type="int")
* @Id
* @Column(type="integer")
*/
protected $id;
/**
* @column(type="string")
* @Column(type="string")
*/
protected $headline;
@ -32,7 +32,7 @@ class DoctrineGlobal_Article
protected $author;
/**
* @ManyToMany(targetEntity="\DoctrineGlobal_User")
* @ManyToMany(targetEntity="DoctrineGlobal_User")
* @JoinTable(name="editor_articles",
* joinColumns={@JoinColumn(name="article_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="editor_id", referencedColumnName="id", unique=true)}
@ -49,19 +49,22 @@ class DoctrineGlobal_User
{
/**
* @Id
* @column(type="integer")
* @Column(type="integer")
*
* @var int
*/
private $id;
/**
* @column(type="string", length=64)
* @Column(type="string", length=64)
*
* @var string
*/
private $username;
/**
* @column(type="string", length=128)
* @Column(type="string", length=128)
*
* @var string
*/
private $email;

View File

@ -492,7 +492,7 @@ class DefaultQueryCacheTest extends OrmTestCase
$key = new QueryCacheKey('query.key1', 0);
$rsm = new ResultSetMappingBuilder($this->em);
$rsm->addScalarResult('id', 'u');
$rsm->addScalarResult('id', 'u', 'integer');
$this->queryCache->put($key, $rsm, $result);
}

View File

@ -58,12 +58,16 @@ class DetachedEntityTest extends \Doctrine\Tests\OrmFunctionalTestCase
$this->_em->persist($user);
$this->_em->flush();
$this->assertTrue($this->_em->contains($user));
$this->assertTrue($user->phonenumbers->isInitialized());
$serialized = serialize($user);
$this->_em->clear();
$this->assertFalse($this->_em->contains($user));
unset($user);
$user = unserialize($serialized);
@ -71,9 +75,12 @@ class DetachedEntityTest extends \Doctrine\Tests\OrmFunctionalTestCase
$this->assertEquals(1, count($user->getPhonenumbers()), "Pre-Condition: 1 Phonenumber");
$ph2 = new CmsPhonenumber;
$ph2->phonenumber = "56789";
$user->addPhonenumber($ph2);
$oldPhonenumbers = $user->getPhonenumbers();
$this->assertEquals(2, count($oldPhonenumbers), "Pre-Condition: 2 Phonenumbers");
$this->assertFalse($this->_em->contains($user));

View File

@ -32,8 +32,10 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testJoinedChildInsertSetsInitialVersionValue()
{
$test = new OptimisticJoinedChild();
$test->name = 'child';
$test->whatever = 'whatever';
$this->_em->persist($test);
$this->_em->flush();
@ -48,7 +50,9 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testJoinedChildFailureThrowsException(OptimisticJoinedChild $child)
{
$q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticJoinedChild t WHERE t.id = :id');
$q->setParameter('id', $child->id);
$test = $q->getSingleResult();
// Manually update/increment the version so we can try and save the same
@ -58,6 +62,7 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
// Now lets change a property and try and save it again
$test->whatever = 'ok';
try {
$this->_em->flush();
} catch (OptimisticLockException $e) {
@ -68,7 +73,9 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testJoinedParentInsertSetsInitialVersionValue()
{
$test = new OptimisticJoinedParent();
$test->name = 'parent';
$this->_em->persist($test);
$this->_em->flush();
@ -83,7 +90,9 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testJoinedParentFailureThrowsException(OptimisticJoinedParent $parent)
{
$q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticJoinedParent t WHERE t.id = :id');
$q->setParameter('id', $parent->id);
$test = $q->getSingleResult();
// Manually update/increment the version so we can try and save the same
@ -93,6 +102,7 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
// Now lets change a property and try and save it again
$test->name = 'WHATT???';
try {
$this->_em->flush();
} catch (OptimisticLockException $e) {
@ -106,6 +116,7 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
for ($i = 0; $i < 5; $i++) {
$test->name = 'test' . $i;
$this->_em->persist($test);
$this->_em->flush();
@ -117,7 +128,9 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testStandardInsertSetsInitialVersionValue()
{
$test = new OptimisticStandard();
$test->name = 'test';
$this->_em->persist($test);
$this->_em->flush();
@ -133,7 +146,9 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testStandardFailureThrowsException(OptimisticStandard $entity)
{
$q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticStandard t WHERE t.id = :id');
$q->setParameter('id', $entity->id);
$test = $q->getSingleResult();
// Manually update/increment the version so we can try and save the same
@ -143,6 +158,7 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
// Now lets change a property and try and save it again
$test->name = 'WHATT???';
try {
$this->_em->flush();
} catch (OptimisticLockException $e) {
@ -153,7 +169,9 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testLockWorksWithProxy()
{
$test = new OptimisticStandard();
$test->name = 'test';
$this->_em->persist($test);
$this->_em->flush();
$this->_em->clear();
@ -166,6 +184,7 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testOptimisticTimestampSetsDefaultValue()
{
$test = new OptimisticTimestamp();
$test->name = 'Testing';
$this->assertNull($test->version, "Pre-Condition");
@ -184,18 +203,22 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testOptimisticTimestampFailureThrowsException(OptimisticTimestamp $entity)
{
$q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticTimestamp t WHERE t.id = :id');
$q->setParameter('id', $entity->id);
$test = $q->getSingleResult();
$this->assertInstanceOf('DateTime', $test->version);
// Manually increment the version datetime column
$format = $this->_em->getConnection()->getDatabasePlatform()->getDateTimeFormatString();
$this->_conn->executeQuery('UPDATE optimistic_timestamp SET version = ? WHERE id = ?', array(date($format, strtotime($test->version->format($format)) + 3600), $test->id));
// Try and update the record and it should throw an exception
$caughtException = null;
$test->name = 'Testing again';
try {
$this->_em->flush();
} catch (OptimisticLockException $e) {
@ -213,15 +236,19 @@ class OptimisticTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testOptimisticTimestampLockFailureThrowsException(OptimisticTimestamp $entity)
{
$q = $this->_em->createQuery('SELECT t FROM Doctrine\Tests\ORM\Functional\Locking\OptimisticTimestamp t WHERE t.id = :id');
$q->setParameter('id', $entity->id);
$test = $q->getSingleResult();
$this->assertInstanceOf('DateTime', $test->version);
// Try to lock the record with an older timestamp and it should throw an exception
$caughtException = null;
try {
$expectedVersionExpired = DateTime::createFromFormat('U', $test->version->getTimestamp()-3600);
$this->_em->lock($test, LockMode::OPTIMISTIC, $expectedVersionExpired);
} catch (OptimisticLockException $e) {
$caughtException = $e;
@ -294,7 +321,10 @@ class OptimisticStandard
*/
private $version;
function getVersion() {return $this->version;}
public function getVersion()
{
return $this->version;
}
}
/**

View File

@ -7,13 +7,10 @@ use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Query\ResultSetMapping;
use Doctrine\ORM\Query\ResultSetMappingBuilder;
use Doctrine\ORM\Query\Parameter;
use Doctrine\Tests\Models\CMS\CmsUser;
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
use Doctrine\Tests\Models\CMS\CmsAddress;
use Doctrine\Tests\Models\CMS\CmsEmail;
use Doctrine\Tests\Models\CMS\CmsArticle;
use Doctrine\Tests\Models\Company\CompanyFixContract;
use Doctrine\Tests\Models\Company\CompanyEmployee;
use Doctrine\Tests\Models\Company\CompanyPerson;
@ -85,7 +82,7 @@ class NativeQueryTest extends \Doctrine\Tests\OrmFunctionalTestCase
$rsm->addFieldResult('a', $this->platform->getSQLResultCasing('country'), 'country');
$rsm->addFieldResult('a', $this->platform->getSQLResultCasing('zip'), 'zip');
$rsm->addFieldResult('a', $this->platform->getSQLResultCasing('city'), 'city');
$rsm->addMetaResult('a', $this->platform->getSQLResultCasing('user_id'), 'user_id');
$rsm->addMetaResult('a', $this->platform->getSQLResultCasing('user_id'), 'user_id', false, 'integer');
$query = $this->_em->createNativeQuery('SELECT a.id, a.country, a.zip, a.city, a.user_id FROM cms_addresses a WHERE a.id = ?', $rsm);
$query->setParameter(1, $addr->id);

View File

@ -37,13 +37,14 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testResultCache()
{
$user = new CmsUser;
$user->name = 'Roman';
$user->username = 'romanb';
$user->status = 'dev';
$this->_em->persist($user);
$this->_em->flush();
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
$cache = new ArrayCache();
@ -73,8 +74,8 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testSetResultCacheId()
{
$cache = new ArrayCache;
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
$query->setResultCacheDriver($cache);
$query->setResultCacheId('testing_result_cache_id');
@ -87,9 +88,9 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testUseResultCache()
{
$cache = new \Doctrine\Common\Cache\ArrayCache();
$cache = new ArrayCache();
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux');
$query->useResultCache(true);
$query->setResultCacheDriver($cache);
$query->setResultCacheId('testing_result_cache_id');
@ -105,10 +106,10 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
*/
public function testUseResultCacheParams()
{
$cache = new \Doctrine\Common\Cache\ArrayCache();
$cache = new ArrayCache();
$sqlCount = count($this->_sqlLoggerStack->queries);
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux WHERE ux.id = ?1');
$query = $this->_em->createQuery('select ux from Doctrine\Tests\Models\CMS\CmsUser ux WHERE ux.id = ?1');
$query->setParameter(1, 1);
$query->setResultCacheDriver($cache);
$query->useResultCache(true);
@ -131,16 +132,20 @@ class ResultCacheTest extends \Doctrine\Tests\OrmFunctionalTestCase
public function testNativeQueryResultCaching()
{
$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addScalarResult('id', 'u');
$query = $this->_em->createNativeQuery('select u.id FROM cms_users u WHERE u.id = ?', $rsm);
$query->setParameter(1, 10);
$cache = new ArrayCache();
$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addScalarResult('id', 'u', 'integer');
$query = $this->_em->createNativeQuery('select u.id FROM cms_users u WHERE u.id = ?', $rsm);
$query->setParameter(1, 10);
$query->setResultCacheDriver($cache)->useResultCache(true);
$this->assertEquals(0, $this->getCacheSize($cache));
$query->getResult();
$this->assertEquals(1, $this->getCacheSize($cache));
return $query;

View File

@ -10,15 +10,12 @@ use Doctrine\Common\Cache\ArrayCache;
use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\Tests\Models\CMS\CmsUser;
use Doctrine\Tests\Models\CMS\CmsPhonenumber;
use Doctrine\Tests\Models\CMS\CmsAddress;
use Doctrine\Tests\Models\CMS\CmsGroup;
use Doctrine\Tests\Models\CMS\CmsArticle;
use Doctrine\Tests\Models\CMS\CmsComment;
use Doctrine\Tests\Models\Company\CompanyPerson;
use Doctrine\Tests\Models\Company\CompanyManager;
use Doctrine\Tests\Models\Company\CompanyEmployee;
use Doctrine\Tests\Models\Company\CompanyOrganization;
use Doctrine\Tests\Models\Company\CompanyAuction;

View File

@ -12,7 +12,9 @@ class DDC1050Test extends \Doctrine\Tests\OrmFunctionalTestCase
public function setUp()
{
$this->markTestSkipped('performance skipped');
$this->useModelSet('cms');
parent::setUp();
}

View File

@ -12,6 +12,7 @@ class DDC1655Test extends \Doctrine\Tests\OrmFunctionalTestCase
public function setUp()
{
parent::setUp();
try {
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1655Foo'),
@ -19,7 +20,6 @@ class DDC1655Test extends \Doctrine\Tests\OrmFunctionalTestCase
$this->_em->getClassMetadata(__NAMESPACE__ . '\\DDC1655Baz'),
));
} catch(\Exception $e) {
}
}

View File

@ -29,7 +29,7 @@ class DDC1695Test extends \Doctrine\Tests\OrmFunctionalTestCase
class DDC1695News
{
/**
* @var int $idNews
* @var int
*
* @Column(name="`IdNews`", type="integer", nullable=false)
* @Id
@ -38,119 +38,119 @@ class DDC1695News
private $idNews;
/**
* @var bigint $iduser
* @var int
*
* @Column(name="`IdUser`", type="bigint", nullable=false)
*/
private $idUser;
/**
* @var int $idLanguage
* @var int
*
* @Column(name="`IdLanguage`", type="integer", nullable=false)
*/
private $idLanguage;
/**
* @var int $idCondition
* @var int
*
* @Column(name="`IdCondition`", type="integer", nullable=true)
*/
private $idCondition;
/**
* @var int $idHealthProvider
* @var int
*
* @Column(name="`IdHealthProvider`", type="integer", nullable=true)
*/
private $idHealthProvider;
/**
* @var int $idSpeciality
* @var int
*
* @Column(name="`IdSpeciality`", type="integer", nullable=true)
*/
private $idSpeciality;
/**
* @var int $idMedicineType
* @var int
*
* @Column(name="`IdMedicineType`", type="integer", nullable=true)
*/
private $idMedicineType;
/**
* @var int $idTreatment
* @var int
*
* @Column(name="`IdTreatment`", type="integer", nullable=true)
*/
private $idTreatment;
/**
* @var string $title
* @var string
*
* @Column(name="`Title`", type="string", nullable=true)
*/
private $title;
/**
* @var string $smallText
* @var string
*
* @Column(name="`SmallText`", type="string", nullable=true)
*/
private $smallText;
/**
* @var string $longText
* @var string
*
* @Column(name="`LongText`", type="string", nullable=true)
*/
private $longText;
/**
* @var datetimetz $publishDate
* @var DateTimeZone
*
* @Column(name="`PublishDate`", type="datetimetz", nullable=true)
*/
private $publishDate;
/**
* @var tsvector $idxNews
* @var array
*
* @Column(name="`IdxNews`", type="tsvector", nullable=true)
* @Column(name="`IdxNews`", type="json_array", nullable=true)
*/
private $idxNews;
/**
* @var bool $highlight
* @var bool
*
* @Column(name="`Highlight`", type="boolean", nullable=false)
*/
private $highlight;
/**
* @var int $order
* @var int
*
* @Column(name="`Order`", type="integer", nullable=false)
*/
private $order;
/**
* @var bool $deleted
* @var bool
*
* @Column(name="`Deleted`", type="boolean", nullable=false)
*/
private $deleted;
/**
* @var bool $active
* @var bool
*
* @Column(name="`Active`", type="boolean", nullable=false)
*/
private $active;
/**
* @var bool $updateToHighlighted
* @var bool
*
* @Column(name="`UpdateToHighlighted`", type="boolean", nullable=true)
*/

View File

@ -18,7 +18,7 @@ class DDC3634Test extends OrmFunctionalTestCase {
$metadata = $this->_em->getClassMetadata(DDC3634Entity::CLASSNAME);
if (! $metadata->idGenerator->isPostInsertGenerator()) {
if ( ! $metadata->idGenerator->isPostInsertGenerator()) {
$this->markTestSkipped('Need a post-insert ID generator in order to make this test work correctly');
}

View File

@ -24,6 +24,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testSimpleEntityQuery()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name');
@ -45,7 +46,6 @@ class ArrayHydratorTest extends HydrationTestCase
$result = $hydrator->hydrateAll($stmt, $rsm);
$this->assertEquals(2, count($result));
$this->assertTrue(is_array($result));
$this->assertEquals(1, $result[0]['id']);
@ -64,12 +64,12 @@ class ArrayHydratorTest extends HydrationTestCase
public function testSimpleEntityWithScalarQuery($userEntityKey)
{
$alias = $userEntityKey ?: 'u';
$rsm = new ResultSetMapping;
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', $alias);
$rsm->addFieldResult($alias, 's__id', 'id');
$rsm->addFieldResult($alias, 's__name', 'name');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
// Faked result set
$resultSet = array(
@ -90,7 +90,6 @@ class ArrayHydratorTest extends HydrationTestCase
$result = $hydrator->hydrateAll($stmt, $rsm);
$this->assertEquals(2, count($result));
$this->assertTrue(is_array($result));
$this->assertArrayHasKey('nameUpper', $result[0]);
@ -117,6 +116,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testSimpleEntityQueryWithAliasedUserEntity()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', 'user');
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name');
@ -138,7 +138,6 @@ class ArrayHydratorTest extends HydrationTestCase
$result = $hydrator->hydrateAll($stmt, $rsm);
$this->assertEquals(2, count($result));
$this->assertTrue(is_array($result));
$this->assertArrayHasKey('user', $result[0]);
@ -157,6 +156,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testSimpleMultipleRootEntityQuery()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsArticle', 'a');
$rsm->addFieldResult('u', 'u__id', 'id');
@ -206,6 +206,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testSimpleMultipleRootEntityQueryWithAliasedUserEntity()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', 'user');
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsArticle', 'a');
$rsm->addFieldResult('u', 'u__id', 'id');
@ -259,6 +260,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testSimpleMultipleRootEntityQueryWithAliasedArticleEntity()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsArticle', 'a', 'article');
$rsm->addFieldResult('u', 'u__id', 'id');
@ -312,6 +314,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testSimpleMultipleRootEntityQueryWithAliasedEntities()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', 'user');
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsArticle', 'a', 'article');
$rsm->addFieldResult('u', 'u__id', 'id');
@ -369,10 +372,11 @@ class ArrayHydratorTest extends HydrationTestCase
public function testMixedQueryNormalJoin($userEntityKey)
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'numPhones');
$rsm->addScalarResult('sclr0', 'numPhones', 'integer');
// Faked result set
$resultSet = array(
@ -417,6 +421,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testMixedQueryFetchJoin($userEntityKey)
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addJoinedEntityResult(
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
@ -426,7 +431,7 @@ class ArrayHydratorTest extends HydrationTestCase
);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
// Faked result set
@ -487,6 +492,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testMixedQueryFetchJoinCustomIndex($userEntityKey)
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addJoinedEntityResult(
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
@ -496,7 +502,7 @@ class ArrayHydratorTest extends HydrationTestCase
);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
$rsm->addIndexBy('u', 'id');
$rsm->addIndexBy('p', 'phonenumber');
@ -565,6 +571,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testMixedQueryMultipleFetchJoin()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult(
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
@ -580,7 +587,7 @@ class ArrayHydratorTest extends HydrationTestCase
);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
$rsm->addFieldResult('a', 'a__id', 'id');
$rsm->addFieldResult('a', 'a__topic', 'topic');
@ -682,8 +689,8 @@ class ArrayHydratorTest extends HydrationTestCase
*/
public function testMixedQueryMultipleDeepMixedFetchJoin()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addJoinedEntityResult(
'Doctrine\Tests\Models\CMS\CmsPhonenumber',
@ -705,7 +712,7 @@ class ArrayHydratorTest extends HydrationTestCase
);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
$rsm->addFieldResult('a', 'a__id', 'id');
$rsm->addFieldResult('a', 'a__topic', 'topic');
@ -840,6 +847,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testEntityQueryCustomResultSetOrder()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\Forum\ForumCategory', 'c');
$rsm->addJoinedEntityResult(
'Doctrine\Tests\Models\Forum\ForumBoard',
@ -915,13 +923,14 @@ class ArrayHydratorTest extends HydrationTestCase
public function testChainedJoinWithScalars($entityKey)
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $entityKey ?: null);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('a__id', 'id');
$rsm->addScalarResult('a__topic', 'topic');
$rsm->addScalarResult('c__id', 'cid');
$rsm->addScalarResult('c__topic', 'ctopic');
$rsm->addScalarResult('a__id', 'id', 'integer');
$rsm->addScalarResult('a__topic', 'topic', 'string');
$rsm->addScalarResult('c__id', 'cid', 'integer');
$rsm->addScalarResult('c__topic', 'ctopic', 'string');
// Faked result set
$resultSet = array(
@ -984,6 +993,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testResultIteration()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name');
@ -1028,6 +1038,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testResultIterationWithAliasedUserEntity()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', 'user');
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name');
@ -1075,6 +1086,7 @@ class ArrayHydratorTest extends HydrationTestCase
public function testSkipUnknownColumns()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name');
@ -1108,10 +1120,11 @@ class ArrayHydratorTest extends HydrationTestCase
public function testMissingIdForRootEntity($userEntityKey)
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
// Faked result set
$resultSet = array(
@ -1166,10 +1179,11 @@ class ArrayHydratorTest extends HydrationTestCase
public function testIndexByAndMixedResult($userEntityKey)
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addIndexBy('u', 'id');
// Faked result set

View File

@ -373,7 +373,7 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'numPhones');
$rsm->addScalarResult('sclr0', 'numPhones', 'integer');
// Faked result set
$resultSet = array(
@ -429,7 +429,7 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
// Faked result set
$resultSet = array(
@ -506,7 +506,7 @@ class ObjectHydratorTest extends HydrationTestCase
);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
$rsm->addIndexBy('u', 'id');
$rsm->addIndexBy('p', 'phonenumber');
@ -591,7 +591,7 @@ class ObjectHydratorTest extends HydrationTestCase
);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
$rsm->addFieldResult('a', 'a__id', 'id');
$rsm->addFieldResult('a', 'a__topic', 'topic');
@ -707,7 +707,7 @@ class ObjectHydratorTest extends HydrationTestCase
);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
$rsm->addFieldResult('a', 'a__id', 'id');
$rsm->addFieldResult('a', 'a__topic', 'topic');
@ -953,8 +953,8 @@ class ObjectHydratorTest extends HydrationTestCase
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addScalarResult('sclr0', 'id');
$rsm->addScalarResult('sclr1', 'name');
$rsm->addScalarResult('sclr0', 'id', 'integer');
$rsm->addScalarResult('sclr1', 'name', 'string');
// Faked result set
$resultSet = array(
@ -994,7 +994,7 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm->addEntityResult('Doctrine\Tests\Models\ECommerce\ECommerceProduct', 'p');
$rsm->addFieldResult('p', 'p__id', 'id');
$rsm->addFieldResult('p', 'p__name', 'name');
$rsm->addMetaResult('p', 'p__shipping_id', 'shipping_id');
$rsm->addMetaResult('p', 'p__shipping_id', 'shipping_id', false, 'integer');
// Faked result set
$resultSet = array(
@ -1039,7 +1039,7 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm->addEntityResult('Doctrine\Tests\Models\ECommerce\ECommerceProduct', 'p', 'product');
$rsm->addFieldResult('p', 'p__id', 'id');
$rsm->addFieldResult('p', 'p__name', 'name');
$rsm->addMetaResult('p', 'p__shipping_id', 'shipping_id');
$rsm->addMetaResult('p', 'p__shipping_id', 'shipping_id', false, 'integer');
// Faked result set
$resultSet = array(
@ -1620,7 +1620,7 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
// Faked result set
$resultSet = array(
@ -1685,7 +1685,7 @@ class ObjectHydratorTest extends HydrationTestCase
);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addFieldResult('p', 'p__phonenumber', 'phonenumber');
// Faked result set
@ -1747,10 +1747,10 @@ class ObjectHydratorTest extends HydrationTestCase
);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addFieldResult('a', 'a__id', 'id');
$rsm->addFieldResult('a', 'a__city', 'city');
$rsm->addMetaResult('a', 'user_id', 'user_id');
$rsm->addMetaResult('a', 'user_id', 'user_id', false, 'string');
// Faked result set
$resultSet = array(
@ -1795,7 +1795,7 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__status', 'status');
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addIndexBy('u', 'id');
// Faked result set
@ -1837,7 +1837,7 @@ class ObjectHydratorTest extends HydrationTestCase
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u', $userEntityKey ?: null);
$rsm->addScalarResult('sclr0', 'nameUpper');
$rsm->addScalarResult('sclr0', 'nameUpper', 'string');
$rsm->addIndexByScalar('sclr0');
// Faked result set
@ -1877,7 +1877,6 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm->addEntityResult('Doctrine\Tests\Models\Company\CompanyFixContract', 'c');
$rsm->addJoinedEntityResult('Doctrine\Tests\Models\Company\CompanyEmployee', 'e', 'c', 'salesPerson');
$rsm->addFieldResult('c', 'c__id', 'id');
$rsm->setDiscriminatorColumn('c', 'c_discr');
@ -1905,14 +1904,12 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm->addEntityResult('Doctrine\Tests\Models\Company\CompanyFixContract', 'c');
$rsm->addJoinedEntityResult('Doctrine\Tests\Models\Company\CompanyEmployee', 'e', 'c', 'salesPerson');
$rsm->addFieldResult('c', 'c__id', 'id');
$rsm->addMetaResult('c', 'c_discr', 'discr');
$rsm->addMetaResult('c', 'c_discr', 'discr', false, 'string');
$rsm->setDiscriminatorColumn('c', 'c_discr');
$rsm->addFieldResult('e', 'e__id', 'id');
$rsm->addFieldResult('e', 'e__name', 'name');
$rsm->addMetaResult('e ', 'e_discr', 'discr');
$rsm->addMetaResult('e ', 'e_discr', 'discr', false, 'string');
$rsm->setDiscriminatorColumn('e', 'e_discr');
$resultSet = array(
@ -1940,10 +1937,9 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm = new ResultSetMapping;
$rsm->addEntityResult('Doctrine\Tests\Models\Company\CompanyPerson', 'p');
$rsm->addFieldResult('p', 'p__id', 'id');
$rsm->addFieldResult('p', 'p__name', 'name');
$rsm->addMetaResult('p', 'discr', 'discr');
$rsm->addMetaResult('p', 'discr', 'discr', false, 'string');
$rsm->setDiscriminatorColumn('p', 'discr');
$resultSet = array(
@ -1968,14 +1964,16 @@ class ObjectHydratorTest extends HydrationTestCase
$rsm->addFieldResult('e1', 'a1__id', 'id');
$rsm->addFieldResult('e2', 'e2__id', 'id');
$result = (new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em))
->hydrateAll(
new HydratorMockStatement([[
'a1__id' => '1',
'e2__id' => '1',
]]),
$rsm
);
$resultSet = array(
array(
'a1__id' => '1',
'e2__id' => '1',
)
);
$stmt = new HydratorMockStatement($resultSet);
$hydrator = new \Doctrine\ORM\Internal\Hydration\ObjectHydrator($this->_em);
$result = $hydrator->hydrateAll($stmt, $rsm);
$this->assertCount(1, $result);
$this->assertInstanceOf(EntityWithArrayDefaultArrayValueM2M::CLASSNAME, $result[0]);

View File

@ -71,17 +71,16 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
{
$rms = $this->_rsm;
$rms->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser','u')
->addJoinedEntityResult('Doctrine\Tests\Models\CMS\CmsPhonenumber','p','u','phonenumbers')
->addFieldResult('u', 'id', 'id')
->addFieldResult('u', 'name', 'name')
->setDiscriminatorColumn('name', 'name')
->addIndexByColumn('id', 'id')
->addIndexBy('username', 'username')
->addIndexByScalar('sclr0')
->addScalarResult('sclr0', 'numPhones')
->addMetaResult('a', 'user_id', 'user_id');
$this->_rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser','u');
$this->_rsm->addJoinedEntityResult('Doctrine\Tests\Models\CMS\CmsPhonenumber','p','u','phonenumbers');
$this->_rsm->addFieldResult('u', 'id', 'id');
$this->_rsm->addFieldResult('u', 'name', 'name');
$this->_rsm->setDiscriminatorColumn('name', 'name');
$this->_rsm->addIndexByColumn('id', 'id');
$this->_rsm->addIndexBy('username', 'username');
$this->_rsm->addIndexByScalar('sclr0');
$this->_rsm->addScalarResult('sclr0', 'numPhones');
$this->_rsm->addMetaResult('a', 'user_id', 'user_id');
$this->assertTrue($rms->hasIndexBy('id'));
$this->assertTrue($rms->isFieldResult('id'));
@ -118,6 +117,7 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
'query' => 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id',
'resultSetMapping' => 'find-all',
));
$cm->addSqlResultSetMapping(array(
'name' => 'find-all',
'entities' => array(
@ -155,7 +155,6 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
)
));
$queryMapping = $cm->getNamedNativeQuery('find-all');
$rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em);
@ -190,6 +189,7 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
'query' => 'SELECT u.id AS user_id, e.id AS email_id, u.name, e.email, u.id + e.id AS scalarColumn FROM cms_users u INNER JOIN cms_emails e ON e.id = u.email_id',
'resultSetMapping' => 'find-all',
));
$cm->addSqlResultSetMapping(array(
'name' => 'find-all',
'entities' => array(
@ -204,14 +204,12 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
)
));
$queryMapping = $cm->getNamedNativeQuery('find-all');
$rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em);
$rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em);
$rsm->addNamedNativeQueryMapping($cm, $queryMapping);
$this->assertEquals('scalarColumn', $rsm->getScalarAlias('scalarColumn'));
$this->assertEquals('c0', $rsm->getEntityAlias('id'));
$this->assertEquals('c0', $rsm->getEntityAlias('name'));
$this->assertEquals('c0', $rsm->getEntityAlias('status'));
@ -229,6 +227,7 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
public function testAddNamedNativeQueryResultClass()
{
$cm = new ClassMetadata('Doctrine\Tests\Models\CMS\CmsUser');
$cm->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
$cm->addNamedNativeQuery(array(
@ -238,11 +237,10 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
));
$queryMapping = $cm->getNamedNativeQuery('find-all');
$rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em);
$rsm = new \Doctrine\ORM\Query\ResultSetMappingBuilder($this->_em);
$rsm->addNamedNativeQueryMapping($cm, $queryMapping);
$this->assertEquals('c0', $rsm->getEntityAlias('id'));
$this->assertEquals('c0', $rsm->getEntityAlias('name'));
$this->assertEquals('c0', $rsm->getEntityAlias('status'));
@ -259,9 +257,9 @@ class ResultSetMappingTest extends \Doctrine\Tests\OrmTestCase
public function testIndexByMetadataColumn()
{
$this->_rsm->addEntityResult('Doctrine\Tests\Models\Legacy\LegacyUser', 'u');
$this->_rsm->addJoinedEntityResult('Doctrine\Tests\Models\Legacy', 'lu', 'u', '_references');
$this->_rsm->addMetaResult('lu', '_source', '_source', true);
$this->_rsm->addMetaResult('lu', '_target', '_target', true);
$this->_rsm->addJoinedEntityResult('Doctrine\Tests\Models\LegacyUserReference', 'lu', 'u', '_references');
$this->_rsm->addMetaResult('lu', '_source', '_source', true, 'integer');
$this->_rsm->addMetaResult('lu', '_target', '_target', true, 'integer');
$this->_rsm->addIndexBy('lu', '_source');
$this->assertTrue($this->_rsm->hasIndexBy('lu'));

View File

@ -49,9 +49,9 @@ class ScalarHydratorTest extends HydrationTestCase
public function testHydrateScalarResults()
{
$rsm = new ResultSetMapping();
$rsm->addScalarResult('foo1', 'foo');
$rsm->addScalarResult('bar2', 'bar');
$rsm->addScalarResult('baz3', 'baz');
$rsm->addScalarResult('foo1', 'foo', 'string');
$rsm->addScalarResult('bar2', 'bar', 'string');
$rsm->addScalarResult('baz3', 'baz', 'string');
$resultSet = array(
array(
@ -76,9 +76,9 @@ class ScalarHydratorTest extends HydrationTestCase
$rsm->addEntityResult('Doctrine\Tests\Models\CMS\CmsUser', 'u');
$rsm->addFieldResult('u', 'u__id', 'id');
$rsm->addFieldResult('u', 'u__name', 'name');
$rsm->addScalarResult('foo1', 'foo');
$rsm->addScalarResult('bar2', 'bar');
$rsm->addScalarResult('baz3', 'baz');
$rsm->addScalarResult('foo1', 'foo', 'string');
$rsm->addScalarResult('bar2', 'bar', 'string');
$rsm->addScalarResult('baz3', 'baz', 'string');
$resultSet = array(
array(

View File

@ -19,7 +19,7 @@ class SimpleObjectHydratorTest extends HydrationTestCase
$rsm->addEntityResult('Doctrine\Tests\Models\Company\CompanyPerson', 'p');
$rsm->addFieldResult('p', 'p__id', 'id');
$rsm->addFieldResult('p', 'p__name', 'name');
$rsm->addMetaResult('p ', 'discr', 'discr');
$rsm->addMetaResult('p ', 'discr', 'discr', false, 'string');
$rsm->setDiscriminatorColumn('p', 'discr');
$resultSet = array(
array(
@ -71,7 +71,7 @@ class SimpleObjectHydratorTest extends HydrationTestCase
$rsm->addFieldResult('p', 'p__id', 'id');
$rsm->addFieldResult('p', 'p__name', 'name');
$rsm->addMetaResult('p', 'discr', 'discr');
$rsm->addMetaResult('p', 'discr', 'discr', false, 'string');
$rsm->setDiscriminatorColumn('p', 'discr');
$resultSet = array(

View File

@ -491,8 +491,8 @@ abstract class AbstractMappingDriverTest extends \Doctrine\Tests\OrmTestCase
$class = $factory->getMetadataFor('Doctrine\Tests\Models\DDC1476\DDC1476EntityWithDefaultFieldType');
$this->assertEquals('ID', $class->columnNames['id']);
$this->assertEquals('NAME', $class->columnNames['name']);
$this->assertEquals('ID', $class->getColumnName('id'));
$this->assertEquals('NAME', $class->getColumnName('name'));
$this->assertEquals('DDC1476ENTITY_WITH_DEFAULT_FIELD_TYPE', $class->table['name']);
}

View File

@ -254,7 +254,7 @@ class ClassMetadataFactoryTest extends \Doctrine\Tests\OrmTestCase
$cm1->initializeReflection(new \Doctrine\Common\Persistence\Mapping\RuntimeReflectionService);
$cm1->setPrimaryTable(array('name' => '`group`'));
// Add a mapped field
$cm1->mapField(array('fieldName' => 'name', 'type' => 'varchar'));
$cm1->mapField(array('fieldName' => 'name', 'type' => 'string'));
// Add a mapped field
$cm1->mapField(array('fieldName' => 'id', 'type' => 'integer', 'id' => true));
// and a mapped association

View File

@ -1,7 +1,5 @@
<?php
use Doctrine\ORM\Mapping\ClassMetadataInfo;
$metadata->setPrimaryTable(array(
'name' => 'company_person',
));

View File

@ -1,7 +1,5 @@
<?php
use Doctrine\ORM\Mapping\ClassMetadataInfo;
$metadata->setPrimaryTable(array(
'name' => 'cms_users',
));

View File

@ -2,7 +2,7 @@
use Doctrine\ORM\Mapping\ClassMetadataInfo;
$metadata->setInheritanceType(\Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_JOINED);
$metadata->setInheritanceType(ClassMetadataInfo::INHERITANCE_TYPE_JOINED);
$metadata->setTableName( 'company_contracts');
$metadata->setDiscriminatorColumn(array(
'name' => 'discr',

View File

@ -1,7 +1,5 @@
<?php
use Doctrine\ORM\Mapping\ClassMetadataInfo;
$metadata->setPrimaryTable(array(
'name' => 'company_person',
));

View File

@ -9,6 +9,7 @@ use Doctrine\Tests\Mocks\ConnectionMock;
use Doctrine\Tests\Mocks\DriverMock;
use Doctrine\Tests\Mocks\EntityManagerMock;
use Doctrine\Tests\Models\ECommerce\ECommerceCart;
use Doctrine\Tests\Models\ECommerce\ECommerceProduct;
use Doctrine\Tests\OrmTestCase;
/**
@ -83,4 +84,28 @@ class PersistentCollectionTest extends OrmTestCase
$this->collection->next();
$this->assertTrue($this->collection->isInitialized());
}
/**
* @group DDC-3382
*/
public function testNonObjects()
{
$this->setUpPersistentCollection();
$this->assertEmpty($this->collection);
$this->collection->add("dummy");
$this->assertNotEmpty($this->collection);
$product = new ECommerceProduct();
$this->collection->set(1, $product);
$this->collection->set(2, "dummy");
$this->collection->set(3, null);
$this->assertSame($product, $this->collection->get(1));
$this->assertSame("dummy", $this->collection->get(2));
$this->assertSame(null, $this->collection->get(3));
}
}

View File

@ -92,7 +92,7 @@ class BasicEntityPersisterTypeValueSqlTest extends \Doctrine\Tests\OrmTestCase
*/
public function testStripNonAlphanumericCharactersFromSelectColumnListSQL()
{
$persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\Ticket\DDC1719SimpleEntity'));
$persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata('Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity'));
$method = new \ReflectionMethod($persister, 'getSelectColumnsSQL');
$method->setAccessible(true);
@ -143,16 +143,16 @@ class BasicEntityPersisterTypeValueSqlTest extends \Doctrine\Tests\OrmTestCase
public function testCountCondition()
{
$persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\Ticket\DDC1719SimpleEntity'));
$persister = new BasicEntityPersister($this->_em, $this->_em->getClassMetadata('Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity'));
// Using a criteria as array
$statement = $persister->getCountSQL(array('value' => 'bar'));
$this->assertEquals('SELECT COUNT(*) FROM "ddc-1719-simple-entity" t0 WHERE t0."simple-entity-value" = ?', $statement);
$this->assertEquals('SELECT COUNT(*) FROM "not-a-simple-entity" t0 WHERE t0."simple-entity-value" = ?', $statement);
// Using a criteria object
$criteria = new Criteria(Criteria::expr()->eq('value', 'bar'));
$statement = $persister->getCountSQL($criteria);
$this->assertEquals('SELECT COUNT(*) FROM "ddc-1719-simple-entity" t0 WHERE t0."simple-entity-value" = ?', $statement);
$this->assertEquals('SELECT COUNT(*) FROM "not-a-simple-entity" t0 WHERE t0."simple-entity-value" = ?', $statement);
}
public function testCountEntities()

View File

@ -1889,18 +1889,18 @@ class SelectSqlGenerationTest extends \Doctrine\Tests\OrmTestCase
public function testStripNonAlphanumericCharactersFromAlias()
{
$this->assertSqlGeneration(
'SELECT e FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1719SimpleEntity e',
'SELECT d0_."simple-entity-id" AS simpleentityid_0, d0_."simple-entity-value" AS simpleentityvalue_1 FROM "ddc-1719-simple-entity" d0_'
'SELECT e FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e',
'SELECT n0_."simple-entity-id" AS simpleentityid_0, n0_."simple-entity-value" AS simpleentityvalue_1 FROM "not-a-simple-entity" n0_'
);
$this->assertSqlGeneration(
'SELECT e.value FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1719SimpleEntity e ORDER BY e.value',
'SELECT d0_."simple-entity-value" AS simpleentityvalue_0 FROM "ddc-1719-simple-entity" d0_ ORDER BY d0_."simple-entity-value" ASC'
'SELECT e.value FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e ORDER BY e.value',
'SELECT n0_."simple-entity-value" AS simpleentityvalue_0 FROM "not-a-simple-entity" n0_ ORDER BY n0_."simple-entity-value" ASC'
);
$this->assertSqlGeneration(
'SELECT TRIM(e.value) FROM Doctrine\Tests\ORM\Functional\Ticket\DDC1719SimpleEntity e ORDER BY e.value',
'SELECT TRIM(d0_."simple-entity-value") AS sclr_0 FROM "ddc-1719-simple-entity" d0_ ORDER BY d0_."simple-entity-value" ASC'
'SELECT TRIM(e.value) FROM Doctrine\Tests\Models\Generic\NonAlphaColumnsEntity e ORDER BY e.value',
'SELECT TRIM(n0_."simple-entity-value") AS sclr_0 FROM "not-a-simple-entity" n0_ ORDER BY n0_."simple-entity-value" ASC'
);
}

View File

@ -4,7 +4,6 @@ namespace Doctrine\Tests\ORM\Tools;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Persistence\Mapping\RuntimeReflectionService;
use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Mapping\ClassMetadataFactory;
use Doctrine\ORM\Mapping\ClassMetadataInfo;
use Doctrine\ORM\Mapping\Driver\AnnotationDriver;
@ -408,7 +407,7 @@ class EntityGeneratorTest extends OrmTestCase
$reflectionService = new RuntimeReflectionService();
$cm = new ClassMetadata($metadata->name);
$cm = new ClassMetadataInfo($metadata->name);
$cm->initializeReflection($reflectionService);
$driver = $this->createAnnotationDriver();
@ -427,7 +426,7 @@ class EntityGeneratorTest extends OrmTestCase
$isbn = $this->newInstance($embeddedMetadata);
$cm = new ClassMetadata($embeddedMetadata->name);
$cm = new ClassMetadataInfo($embeddedMetadata->name);
$cm->initializeReflection($reflectionService);
$driver->loadMetadataForClass($cm->name, $cm);
@ -450,7 +449,7 @@ class EntityGeneratorTest extends OrmTestCase
$reflectionService = new RuntimeReflectionService();
$cm = new ClassMetadata($metadata->name);
$cm = new ClassMetadataInfo($metadata->name);
$cm->initializeReflection($reflectionService);
$driver->loadMetadataForClass($cm->name, $cm);
@ -464,7 +463,7 @@ class EntityGeneratorTest extends OrmTestCase
$isbn = $this->newInstance($embeddedMetadata);
$cm = new ClassMetadata($embeddedMetadata->name);
$cm = new ClassMetadataInfo($embeddedMetadata->name);
$cm->initializeReflection($reflectionService);
$driver->loadMetadataForClass($cm->name, $cm);
@ -488,7 +487,7 @@ class EntityGeneratorTest extends OrmTestCase
$this->newInstance($metadata); // force instantiation (causes autoloading to kick in)
$driver = new AnnotationDriver(new AnnotationReader(), array());
$cm = new ClassMetadata($metadata->name);
$cm = new ClassMetadataInfo($metadata->name);
$cm->initializeReflection(new RuntimeReflectionService);
$driver->loadMetadataForClass($cm->name, $cm);
@ -593,7 +592,7 @@ class EntityGeneratorTest extends OrmTestCase
*/
public function testGetInheritanceTypeString()
{
$reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata');
$reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadataInfo');
$method = new \ReflectionMethod($this->_generator, 'getInheritanceTypeString');
$constants = $reflection->getConstants();
$pattern = '/^INHERITANCE_TYPE_/';
@ -647,7 +646,7 @@ class EntityGeneratorTest extends OrmTestCase
*/
public function testGetIdGeneratorTypeString()
{
$reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadata');
$reflection = new \ReflectionClass('\Doctrine\ORM\Mapping\ClassMetadataInfo');
$method = new \ReflectionMethod($this->_generator, 'getIdGeneratorTypeString');
$constants = $reflection->getConstants();
$pattern = '/^GENERATOR_TYPE_/';

View File

@ -71,25 +71,25 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
'xml' => 'Doctrine\ORM\Mapping\Driver\XmlDriver',
'yaml' => 'Doctrine\ORM\Mapping\Driver\YamlDriver',
);
$this->assertArrayHasKey($type, $mappingDriver, "There is no metadata driver for the type '" . $type . "'.");
$class = $mappingDriver[$type];
if ($type === 'annotation') {
$driver = $this->createAnnotationDriver(array($path));
} else {
$driver = new $class($path);
}
$this->assertArrayHasKey($type, $mappingDriver, "There is no metadata driver for the type '" . $type . "'.");
$class = $mappingDriver[$type];
$driver = ($type === 'annotation')
? $this->createAnnotationDriver(array($path))
: new $class($path);
return $driver;
}
protected function _createClassMetadataFactory($em, $type)
{
if ($type === 'annotation') {
$factory = new ClassMetadataFactory();
} else {
$factory = new DisconnectedClassMetadataFactory();
}
$factory = ($type === 'annotation')
? new ClassMetadataFactory()
: new DisconnectedClassMetadataFactory();
$factory->setEntityManager($em);
return $factory;
}
@ -110,11 +110,14 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$type = $this->_getType();
$cme = new ClassMetadataExporter();
$exporter = $cme->getExporter($type, __DIR__ . '/export/' . $type);
if ($type === 'annotation') {
$entityGenerator = new EntityGenerator();
$entityGenerator->setAnnotationPrefix("");
$exporter->setEntityGenerator($entityGenerator);
}
$this->_extension = $exporter->getExtension();
$exporter->setMetadata($metadata);
@ -215,6 +218,7 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
public function testFieldsAreProperlySerialized()
{
$type = $this->_getType();
if ($type == 'xml') {
$xml = simplexml_load_file(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.xml');
@ -224,8 +228,7 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$nodes = $xml->xpath("/d:doctrine-mapping/d:entity/d:field[@name='name' and @type='string' and @unique='true']");
$this->assertEquals(1, count($nodes));
}
else {
} else {
$this->markTestSkipped('Test not available for '.$type.' driver');
}
}
@ -361,6 +364,7 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
public function testCascadeAllCollapsed()
{
$type = $this->_getType();
if ($type == 'xml') {
$xml = simplexml_load_file(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.xml');
@ -369,19 +373,18 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
$this->assertEquals(1, count($nodes));
$this->assertEquals('cascade-all', $nodes[0]->getName());
} elseif ($type == 'yaml') {
} else if ($type == 'yaml') {
$yaml = new \Symfony\Component\Yaml\Parser();
$value = $yaml->parse(file_get_contents(__DIR__ . '/export/'.$type.'/Doctrine.Tests.ORM.Tools.Export.ExportedUser.dcm.yml'));
$this->assertTrue(isset($value['Doctrine\Tests\ORM\Tools\Export\ExportedUser']['oneToMany']['interests']['cascade']));
$this->assertEquals(1, count($value['Doctrine\Tests\ORM\Tools\Export\ExportedUser']['oneToMany']['interests']['cascade']));
$this->assertEquals('all', $value['Doctrine\Tests\ORM\Tools\Export\ExportedUser']['oneToMany']['interests']['cascade'][0]);
} else {
$this->markTestSkipped('Test not available for '.$type.' driver');
}
}
public function __destruct()
{
# $this->_deleteDirectory(__DIR__ . '/export/'.$this->_getType());
@ -393,11 +396,13 @@ abstract class AbstractClassMetadataExporterTest extends \Doctrine\Tests\OrmTest
return unlink($path);
} else if (is_dir($path)) {
$files = glob(rtrim($path,'/').'/*');
if (is_array($files)) {
foreach ($files as $file){
$this->_deleteDirectory($file);
}
}
return rmdir($path);
}
}

View File

@ -299,7 +299,13 @@ abstract class OrmFunctionalTestCase extends OrmTestCase
*/
protected function tearDown()
{
$conn = static::$_sharedConn;
$conn = static::$_sharedConn;
// In case test is skipped, tearDown is called, but no setup may have run
if ( ! $conn) {
return;
}
$platform = $conn->getDatabasePlatform();
$this->_sqlLoggerStack->enabled = false;

View File

@ -2,7 +2,9 @@
namespace Doctrine\Tests;
use Doctrine\Common\Annotations;
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\Common\Version;
use Doctrine\ORM\Cache\DefaultCacheFactory;
/**
@ -57,40 +59,41 @@ abstract class OrmTestCase extends DoctrineTestCase
*/
protected function createAnnotationDriver($paths = array(), $alias = null)
{
if (version_compare(\Doctrine\Common\Version::VERSION, '3.0.0', '>=')) {
$reader = new \Doctrine\Common\Annotations\CachedReader(
new \Doctrine\Common\Annotations\AnnotationReader(), new ArrayCache()
);
}
else if (version_compare(\Doctrine\Common\Version::VERSION, '2.2.0-DEV', '>=')) {
if (version_compare(Version::VERSION, '3.0.0', '>=')) {
$reader = new Annotations\CachedReader(new Annotations\AnnotationReader(), new ArrayCache());
} else if (version_compare(Version::VERSION, '2.2.0-DEV', '>=')) {
// Register the ORM Annotations in the AnnotationRegistry
$reader = new \Doctrine\Common\Annotations\SimpleAnnotationReader();
$reader = new Annotations\SimpleAnnotationReader();
$reader->addNamespace('Doctrine\ORM\Mapping');
$reader = new \Doctrine\Common\Annotations\CachedReader($reader, new ArrayCache());
}
else if (version_compare(\Doctrine\Common\Version::VERSION, '2.1.0-BETA3-DEV', '>=')) {
$reader = new \Doctrine\Common\Annotations\AnnotationReader();
$reader = new Annotations\CachedReader($reader, new ArrayCache());
} else if (version_compare(Version::VERSION, '2.1.0-BETA3-DEV', '>=')) {
$reader = new Annotations\AnnotationReader();
$reader->setIgnoreNotImportedAnnotations(true);
$reader->setEnableParsePhpImports(false);
if ($alias) {
$reader->setAnnotationNamespaceAlias('Doctrine\ORM\Mapping\\', $alias);
} else {
$reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\');
}
$reader = new \Doctrine\Common\Annotations\CachedReader(
new \Doctrine\Common\Annotations\IndexedReader($reader), new ArrayCache()
);
$reader = new Annotations\CachedReader(new Annotations\IndexedReader($reader), new ArrayCache());
} else {
$reader = new \Doctrine\Common\Annotations\AnnotationReader();
$reader = new Annotations\AnnotationReader();
if ($alias) {
$reader->setAnnotationNamespaceAlias('Doctrine\ORM\Mapping\\', $alias);
} else {
$reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\');
}
}
\Doctrine\Common\Annotations\AnnotationRegistry::registerFile(
__DIR__ . "/../../../lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php");
return new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, (array)$paths);
Annotations\AnnotationRegistry::registerFile(__DIR__ . "/../../../lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php");
return new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($reader, (array) $paths);
}
/**
@ -112,7 +115,7 @@ abstract class OrmTestCase extends DoctrineTestCase
{
$metadataCache = $withSharedMetadata
? self::getSharedMetadataCacheImpl()
: new \Doctrine\Common\Cache\ArrayCache;
: new ArrayCache();
$config = new \Doctrine\ORM\Configuration();
@ -166,7 +169,7 @@ abstract class OrmTestCase extends DoctrineTestCase
private static function getSharedMetadataCacheImpl()
{
if (self::$_metadataCacheImpl === null) {
self::$_metadataCacheImpl = new \Doctrine\Common\Cache\ArrayCache;
self::$_metadataCacheImpl = new ArrayCache();
}
return self::$_metadataCacheImpl;
@ -178,7 +181,7 @@ abstract class OrmTestCase extends DoctrineTestCase
private static function getSharedQueryCacheImpl()
{
if (self::$_queryCacheImpl === null) {
self::$_queryCacheImpl = new \Doctrine\Common\Cache\ArrayCache;
self::$_queryCacheImpl = new ArrayCache();
}
return self::$_queryCacheImpl;
@ -190,7 +193,7 @@ abstract class OrmTestCase extends DoctrineTestCase
protected function getSharedSecondLevelCacheDriverImpl()
{
if ($this->secondLevelCacheDriverImpl === null) {
$this->secondLevelCacheDriverImpl = new \Doctrine\Common\Cache\ArrayCache();
$this->secondLevelCacheDriverImpl = new ArrayCache();
}
return $this->secondLevelCacheDriverImpl;