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
bcf9ca78
Commit
bcf9ca78
authored
Jun 05, 2006
by
doctrine
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Serialization model rewrite
parent
02a283f5
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
94 additions
and
41 deletions
+94
-41
Collection.php
Doctrine/Collection.php
+46
-1
Record.php
Doctrine/Record.php
+37
-30
Session.php
Doctrine/Session.php
+3
-4
QueryTestCase.class.php
tests/QueryTestCase.class.php
+2
-2
RecordTestCase.class.php
tests/RecordTestCase.class.php
+6
-4
No files found.
Doctrine/Collection.php
View file @
bcf9ca78
...
...
@@ -8,7 +8,7 @@ require_once("Access.php");
* @url www.phpdoctrine.com
* @license LGPL
*/
class
Doctrine_Collection
extends
Doctrine_Access
implements
Countable
,
IteratorAggregate
{
class
Doctrine_Collection
extends
Doctrine_Access
implements
Countable
,
IteratorAggregate
,
Serializable
{
/**
* @var array $data an array containing the data access objects of this collection
*/
...
...
@@ -69,6 +69,51 @@ class Doctrine_Collection extends Doctrine_Access implements Countable, Iterator
public
function
getTable
()
{
return
$this
->
table
;
}
/**
* this method is automatically called when this Doctrine_Collection is serialized
*
* @return array
*/
public
function
serialize
()
{
$vars
=
get_object_vars
(
$this
);
unset
(
$vars
[
'reference'
]);
unset
(
$vars
[
'reference_field'
]);
unset
(
$vars
[
'relation'
]);
unset
(
$vars
[
'expandable'
]);
unset
(
$vars
[
'expanded'
]);
unset
(
$vars
[
'generator'
]);
$vars
[
'table'
]
=
$vars
[
'table'
]
->
getComponentName
();
return
serialize
(
$vars
);
}
/**
* unseralize
* this method is automatically called everytime a Doctrine_Collection object is unserialized
*
* @return void
*/
public
function
unserialize
(
$serialized
)
{
$manager
=
Doctrine_Manager
::
getInstance
();
$session
=
$manager
->
getCurrentSession
();
$array
=
unserialize
(
$serialized
);
foreach
(
$array
as
$name
=>
$values
)
{
$this
->
$name
=
$values
;
}
$this
->
table
=
$session
->
getTable
(
$this
->
table
->
getComponenName
());
$this
->
expanded
=
array
();
$this
->
expandable
=
true
;
$name
=
$table
->
getAttribute
(
Doctrine
::
ATTR_COLL_KEY
);
if
(
$name
!==
null
)
{
$this
->
generator
=
new
Doctrine_IndexGenerator
(
$name
);
}
}
/**
* whether or not an offset batch has been expanded
* @return boolean
...
...
Doctrine/Record.php
View file @
bcf9ca78
...
...
@@ -3,7 +3,7 @@ require_once("Access.php");
/**
* Doctrine_Record
*/
abstract
class
Doctrine_Record
extends
Doctrine_Access
implements
Countable
,
IteratorAggregate
{
abstract
class
Doctrine_Record
extends
Doctrine_Access
implements
Countable
,
IteratorAggregate
,
Serializable
{
/**
* STATE CONSTANTS
*/
...
...
@@ -247,10 +247,10 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
$name
=
$this
->
table
->
getIdentifier
();
if
(
$exists
)
{
if
(
isset
(
$this
->
data
[
$name
]))
if
(
isset
(
$this
->
data
[
$name
])
&&
$this
->
data
[
$name
]
!==
self
::
$null
)
$this
->
id
=
$this
->
data
[
$name
];
}
unset
(
$this
->
data
[
$name
]);
break
;
...
...
@@ -272,21 +272,24 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
*
* @return array
*/
public
function
__sleep
()
{
public
function
serialize
()
{
$this
->
table
->
getAttribute
(
Doctrine
::
ATTR_LISTENER
)
->
onSleep
(
$this
);
// unset all vars that won't need to be serialized
unset
(
$this
->
associations
);
unset
(
$this
->
collections
);
unset
(
$this
->
references
);
unset
(
$this
->
originals
);
unset
(
$this
->
oid
);
$vars
=
get_object_vars
(
$this
);
unset
(
$vars
[
'references'
]);
unset
(
$vars
[
'collections'
]);
unset
(
$vars
[
'originals'
]);
unset
(
$vars
[
'table'
]);
if
(
!
is_array
(
$this
->
id
))
{
$name
=
$this
->
table
->
getIdentifier
();
$this
->
data
=
array_merge
(
$this
->
data
,
array
(
$name
=>
$this
->
id
));
}
foreach
(
$this
->
data
as
$k
=>
$v
)
{
if
(
$v
instanceof
Doctrine_Record
)
$this
->
data
[
$k
]
=
array
(
);
unset
(
$this
->
data
[
$k
]
);
elseif
(
$v
===
self
::
$null
)
{
unset
(
$this
->
data
[
$k
]);
}
else
{
...
...
@@ -298,11 +301,8 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
endswitch
;
}
}
$this
->
table
=
$this
->
table
->
getComponentName
();
return
array_keys
(
get_object_vars
(
$this
));
return
serialize
(
$vars
);
}
/**
* unseralize
...
...
@@ -310,17 +310,21 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
*
* @return void
*/
public
function
__wakeup
()
{
$name
=
$this
->
table
;
public
function
unserialize
(
$serialized
)
{
$manager
=
Doctrine_Manager
::
getInstance
();
$sess
=
$manager
->
getCurrentSession
();
$sess
ion
=
$manager
->
getCurrentSession
();
$this
->
oid
=
self
::
$index
;
self
::
$index
++
;
$this
->
table
=
$sess
->
getTable
(
$name
);
$this
->
table
=
$session
->
getTable
(
get_class
(
$this
));
$array
=
unserialize
(
$serialized
);
foreach
(
$array
as
$name
=>
$values
)
{
$this
->
$name
=
$values
;
}
$this
->
table
->
getRepository
()
->
add
(
$this
);
...
...
@@ -336,6 +340,8 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
$this
->
table
->
getAttribute
(
Doctrine
::
ATTR_LISTENER
)
->
onWakeUp
(
$this
);
}
/**
* addCollection
* @param Doctrine_Collection $collection
...
...
@@ -494,9 +500,9 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
return
$this
->
data
[
$name
];
}
if
(
$name
==
$this
->
table
->
getIdentifier
())
{
if
(
$name
==
=
$this
->
table
->
getIdentifier
())
return
$this
->
id
;
}
if
(
!
isset
(
$this
->
references
[
$name
]))
$this
->
loadReference
(
$name
);
...
...
@@ -579,7 +585,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
$fk
=
$this
->
table
->
getForeignKey
(
$name
);
// one-to-many or one-to-one relation
if
(
$fk
instanceof
Doctrine_ForeignKey
||
if
(
$fk
instanceof
Doctrine_ForeignKey
||
$fk
instanceof
Doctrine_LocalKey
)
{
switch
(
$fk
->
getType
())
:
case
Doctrine_Relation
::
MANY_COMPOSITE
:
...
...
@@ -702,7 +708,7 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
$type
=
$this
->
table
->
getTypeOf
(
$v
);
if
(
$type
==
'array'
||
$type
==
'object'
)
{
$type
==
'object'
)
{
$a
[
$v
]
=
serialize
(
$this
->
data
[
$v
]);
continue
;
...
...
@@ -905,9 +911,10 @@ abstract class Doctrine_Record extends Doctrine_Access implements Countable, Ite
$this
->
state
=
Doctrine_Record
::
STATE_CLEAN
;
$this
->
modified
=
array
();
}
else
{
$this
->
id
=
$id
;
$this
->
state
=
Doctrine_Record
::
STATE_CLEAN
;
$this
->
modified
=
array
();
$name
=
$this
->
table
->
getIdentifier
();
$this
->
id
=
$id
;
$this
->
state
=
Doctrine_Record
::
STATE_CLEAN
;
$this
->
modified
=
array
();
}
}
/**
...
...
Doctrine/Session.php
View file @
bcf9ca78
...
...
@@ -77,12 +77,11 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
* @param PDO $pdo -- database handle
*/
public
function
__construct
(
Doctrine_Manager
$manager
,
PDO
$pdo
)
{
$this
->
dbh
=
$pdo
;
$this
->
setParent
(
$manager
);
$this
->
dbh
=
$pdo
;
$this
->
state
=
Doctrine_Session
::
STATE_OPEN
;
$this
->
setParent
(
$manager
);
$this
->
dbh
->
setAttribute
(
PDO
::
ATTR_CASE
,
PDO
::
CASE_LOWER
);
$this
->
dbh
->
setAttribute
(
PDO
::
ATTR_ERRMODE
,
PDO
::
ERRMODE_EXCEPTION
);
...
...
tests/QueryTestCase.class.php
View file @
bcf9ca78
...
...
@@ -14,7 +14,7 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase {
$this
->
dbh
->
query
(
"DROP TABLE IF EXISTS test_entries"
);
parent
::
prepareTables
();
}
public
function
testOneToOne
RelationFetching2
()
{
public
function
testOneToOne
SharedRelations
()
{
$status
=
new
Log_Status
();
$status
->
name
=
'success'
;
...
...
@@ -45,7 +45,7 @@ class Doctrine_QueryTestCase extends Doctrine_UnitTestCase {
$this
->
assertEqual
(
$entries
[
0
]
->
Log_Status
->
name
,
'success'
);
// the second Log_Status is fetched from identityMap
$this
->
assertTrue
(
$entries
[
1
]
->
Log_Status
instanceof
Log_Status
);
$this
->
assertEqual
(
$entries
[
1
]
->
Log_Status
->
name
,
'success'
);
...
...
tests/RecordTestCase.class.php
View file @
bcf9ca78
...
...
@@ -3,10 +3,12 @@ require_once("UnitTestCase.class.php");
class
Doctrine_RecordTestCase
extends
Doctrine_UnitTestCase
{
public
function
testSerialize
()
{
//$user = $this->session->getTable("User")->find(4);
//$str = serialize($user);
//$user2 = unserialize($str);
//$this->assertEqual($user2->getID(),$user->getID());
$user
=
$this
->
session
->
getTable
(
"User"
)
->
find
(
4
);
$str
=
serialize
(
$user
);
$user2
=
unserialize
(
$str
);
$this
->
assertTrue
(
$user2
instanceof
User
);
$this
->
assertEqual
(
$user2
->
getID
(),
$user
->
getID
());
}
public
function
testCallback
()
{
...
...
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