Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
doctrine-dbal
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Tomáš Trávníček
doctrine-dbal
Commits
bb6e54fb
Commit
bb6e54fb
authored
Oct 09, 2009
by
romanb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[2.0][DDC-21] Fixed.
parent
204b6d71
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
248 additions
and
79 deletions
+248
-79
ObjectHydrator.php
lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php
+104
-71
AnnotationDriver.php
lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php
+1
-1
UnitOfWork.php
lib/Doctrine/ORM/UnitOfWork.php
+4
-6
AllTests.php
tests/Doctrine/Tests/ORM/Functional/AllTests.php
+1
-0
IdentityMapTest.php
tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php
+137
-0
StandardEntityPersisterTest.php
...rine/Tests/ORM/Functional/StandardEntityPersisterTest.php
+1
-1
No files found.
lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php
View file @
bb6e54fb
This diff is collapsed.
Click to expand it.
lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php
View file @
bb6e54fb
...
...
@@ -273,7 +273,7 @@ class AnnotationDriver implements Driver
$mapping
[
'mappedBy'
]
=
$manyToManyAnnot
->
mappedBy
;
$mapping
[
'cascade'
]
=
$manyToManyAnnot
->
cascade
;
$metadata
->
mapManyToMany
(
$mapping
);
}
}
}
// Evaluate HasLifecycleCallbacks annotation
...
...
lib/Doctrine/ORM/UnitOfWork.php
View file @
bb6e54fb
...
...
@@ -1080,10 +1080,8 @@ class UnitOfWork implements PropertyChangedListener
*/
public
function
tryGetByIdHash
(
$idHash
,
$rootClassName
)
{
if
(
$this
->
containsIdHash
(
$idHash
,
$rootClassName
))
{
return
$this
->
getByIdHash
(
$idHash
,
$rootClassName
);
}
return
false
;
return
isset
(
$this
->
_identityMap
[
$rootClassName
][
$idHash
])
?
$this
->
_identityMap
[
$rootClassName
][
$idHash
]
:
false
;
}
/**
...
...
@@ -1656,8 +1654,7 @@ class UnitOfWork implements PropertyChangedListener
* @param string $className The name of the entity class.
* @param array $data The data for the entity.
* @return object The created entity instance.
* @internal Highly performance-sensitive method. Run the performance test suites when
* making modifications.
* @internal Highly performance-sensitive method.
*/
public
function
createEntity
(
$className
,
array
$data
,
$hints
=
array
())
{
...
...
@@ -1703,6 +1700,7 @@ class UnitOfWork implements PropertyChangedListener
}
}
//TODO: These should be invoked later, because associations are not yet loaded here.
if
(
isset
(
$class
->
lifecycleCallbacks
[
Events
::
postLoad
]))
{
$class
->
invokeLifecycleCallbacks
(
Events
::
postLoad
,
$entity
);
}
...
...
tests/Doctrine/Tests/ORM/Functional/AllTests.php
View file @
bb6e54fb
...
...
@@ -40,6 +40,7 @@ class AllTests
$suite
->
addTestSuite
(
'Doctrine\Tests\ORM\Functional\StandardEntityPersisterTest'
);
$suite
->
addTestSuite
(
'Doctrine\Tests\ORM\Functional\MappedSuperclassTest'
);
$suite
->
addTestSuite
(
'Doctrine\Tests\ORM\Functional\EntityRepositoryTest'
);
$suite
->
addTestSuite
(
'Doctrine\Tests\ORM\Functional\IdentityMapTest'
);
$suite
->
addTest
(
Locking\AllTests
::
suite
());
$suite
->
addTest
(
SchemaTool\AllTests
::
suite
());
...
...
tests/Doctrine/Tests/ORM/Functional/IdentityMapTest.php
0 → 100644
View file @
bb6e54fb
<?php
namespace
Doctrine\Tests\ORM\Functional
;
use
Doctrine\Tests\Models\CMS\CmsUser
,
Doctrine\Tests\Models\CMS\CmsAddress
,
Doctrine\Tests\Models\CMS\CmsPhonenumber
,
Doctrine\ORM\Query
;
require_once
__DIR__
.
'/../../TestInit.php'
;
/**
* IdentityMapTest
*
* Tests correct behavior and usage of the identity map. Local values and associations
* that are already fetched always prevail, unless explicitly refreshed.
*
* @author Roman Borschel <roman@code-factory.org>
*/
class
IdentityMapTest
extends
\Doctrine\Tests\OrmFunctionalTestCase
{
protected
function
setUp
()
{
$this
->
useModelSet
(
'cms'
);
parent
::
setUp
();
}
public
function
testSingleValuedAssociationIdentityMapBehavior
()
{
$address
=
new
CmsAddress
;
$address
->
country
=
'de'
;
$address
->
zip
=
'12345'
;
$address
->
city
=
'Berlin'
;
$user1
=
new
CmsUser
;
$user1
->
status
=
'dev'
;
$user1
->
username
=
'romanb'
;
$user1
->
name
=
'Roman B.'
;
$user2
=
new
CmsUser
;
$user2
->
status
=
'dev'
;
$user2
->
username
=
'gblanco'
;
$user2
->
name
=
'Guilherme Blanco'
;
$address
->
setUser
(
$user1
);
$this
->
_em
->
persist
(
$address
);
$this
->
_em
->
persist
(
$user1
);
$this
->
_em
->
persist
(
$user2
);
$this
->
_em
->
flush
();
$this
->
assertSame
(
$user1
,
$address
->
user
);
//external update to CmsAddress
$this
->
_em
->
getConnection
()
->
executeUpdate
(
'update cms_addresses set user_id = ?'
,
array
(
$user2
->
getId
()));
//select
$q
=
$this
->
_em
->
createQuery
(
'select a, u from Doctrine\Tests\Models\CMS\CmsAddress a join a.user u'
);
$address2
=
$q
->
getSingleResult
();
$this
->
assertSame
(
$address
,
$address2
);
// Should still be $user1
$this
->
assertSame
(
$user1
,
$address2
->
user
);
$this
->
assertTrue
(
$user2
->
address
===
null
);
// But we want to have this external change!
// Solution 1: refresh(), broken atm!
//$this->_em->refresh($address2);
// Solution 2: Alternatively, a refresh query should work
$q
=
$this
->
_em
->
createQuery
(
'select a, u from Doctrine\Tests\Models\CMS\CmsAddress a join a.user u'
);
$q
->
setHint
(
Query
::
HINT_REFRESH
,
true
);
$address3
=
$q
->
getSingleResult
();
$this
->
assertSame
(
$address
,
$address3
);
// should still be the same, always from identity map
// Now the association should be "correct", referencing $user2
$this
->
assertSame
(
$user2
,
$address2
->
user
);
$this
->
assertSame
(
$user2
->
address
,
$address2
);
// check back reference also
// Attention! refreshes can result in broken bidirectional associations! this is currently expected!
// $user1 still points to $address2!
$this
->
assertSame
(
$user1
->
address
,
$address2
);
}
public
function
testCollectionValuedAssociationIdentityMapBehavior
()
{
$user
=
new
CmsUser
;
$user
->
status
=
'dev'
;
$user
->
username
=
'romanb'
;
$user
->
name
=
'Roman B.'
;
$phone1
=
new
CmsPhonenumber
;
$phone1
->
phonenumber
=
123
;
$phone2
=
new
CmsPhonenumber
;
$phone2
->
phonenumber
=
234
;
$phone3
=
new
CmsPhonenumber
;
$phone3
->
phonenumber
=
345
;
$user
->
addPhonenumber
(
$phone1
);
$user
->
addPhonenumber
(
$phone2
);
$user
->
addPhonenumber
(
$phone3
);
$this
->
_em
->
persist
(
$user
);
// cascaded to phone numbers
$this
->
_em
->
flush
();
$this
->
assertEquals
(
3
,
count
(
$user
->
getPhonenumbers
()));
//external update to CmsAddress
$this
->
_em
->
getConnection
()
->
executeUpdate
(
'insert into cms_phonenumbers (phonenumber, user_id) VALUES (?,?)'
,
array
(
999
,
$user
->
getId
()));
//select
$q
=
$this
->
_em
->
createQuery
(
'select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'
);
$user2
=
$q
->
getSingleResult
();
$this
->
assertSame
(
$user
,
$user2
);
// Should still be the same 3 phonenumbers
$this
->
assertEquals
(
3
,
count
(
$user2
->
getPhonenumbers
()));
// But we want to have this external change!
// Solution 1: refresh().
//$this->_em->refresh($user2); broken atm!
// Solution 2: Alternatively, a refresh query should work
$q
=
$this
->
_em
->
createQuery
(
'select u, p from Doctrine\Tests\Models\CMS\CmsUser u join u.phonenumbers p'
);
$q
->
setHint
(
Query
::
HINT_REFRESH
,
true
);
$user3
=
$q
->
getSingleResult
();
$this
->
assertSame
(
$user
,
$user3
);
// should still be the same, always from identity map
// Now the collection should be refreshed with correct count
$this
->
assertEquals
(
4
,
count
(
$user3
->
getPhonenumbers
()));
}
}
tests/Doctrine/Tests/ORM/Functional/StandardEntityPersisterTest.php
View file @
bb6e54fb
...
...
@@ -88,7 +88,7 @@ class StandardEntityPersisterTest extends \Doctrine\Tests\OrmFunctionalTestCase
// (change from ArrayCollection to PersistentCollection)
$f3
=
new
ECommerceFeature
();
$f3
->
setDescription
(
'XVID'
);
$p
->
add
f
eature
(
$f3
);
$p
->
add
F
eature
(
$f3
);
// Now we persist the Feature #3
$this
->
_em
->
persist
(
$p
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment