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
081ef099
Commit
081ef099
authored
Feb 14, 2008
by
romanb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactoring
parent
c62abc99
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
17 additions
and
28 deletions
+17
-28
Abstract.php
lib/Doctrine/Mapper/Abstract.php
+1
-6
Transaction.php
lib/Doctrine/Transaction.php
+16
-22
No files found.
lib/Doctrine/Mapper/Abstract.php
View file @
081ef099
...
...
@@ -749,12 +749,7 @@ abstract class Doctrine_Mapper_Abstract extends Doctrine_Configurable implements
$record
->
state
(
$state
);
$conn
->
commit
();
}
catch
(
Exception
$e
)
{
// save() calls can be nested recursively and exceptions bubble up, so check
// if there are any internal transactions left that need to be rolled back
// before doing so.
if
(
$conn
->
getInternalTransactionLevel
()
>
0
)
{
$conn
->
rollback
();
}
$conn
->
rollback
();
throw
$e
;
}
...
...
lib/Doctrine/Transaction.php
View file @
081ef099
...
...
@@ -35,17 +35,17 @@ Doctrine::autoload('Doctrine_Connection_Module');
class
Doctrine_Transaction
extends
Doctrine_Connection_Module
{
/**
*
Doctrine_Transaction is in sleep state when it has no active transactions
*
A transaction is in sleep state when it is not active.
*/
const
STATE_SLEEP
=
0
;
/**
*
Doctrine_Transaction is in active state when it has one active transaction
*
A transaction is in active state when it is active.
*/
const
STATE_ACTIVE
=
1
;
/**
*
Doctrine_Transaction is in busy state when it has multiple active transactions
*
A transaction is in busy state when it is active and has a nesting level > 1.
*/
const
STATE_BUSY
=
2
;
...
...
@@ -63,24 +63,27 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
* lower or equal to the overall nesting level.
* A level of 0 means there is currently no active
* transaction that was initiated by Doctrine itself.
* @todo package:orm. I guess the DBAL does not start transactions on its own?
*/
protected
$_internalNestingLevel
=
0
;
/**
* @var array $invalid an array containing all invalid records within this transaction
* @todo What about a more verbose name? $invalidRecords?
* package:orm
*/
protected
$invalid
=
array
();
protected
$invalid
=
array
();
/**
* @var array $savepoints an array containing all savepoints
*/
protected
$savePoints
=
array
();
protected
$savePoints
=
array
();
/**
* @var array $_collections an array of Doctrine_Collection objects that were affected during the Transaction
* @todo package:orm
*/
protected
$_collections
=
array
();
protected
$_collections
=
array
();
/**
* addCollection
...
...
@@ -92,6 +95,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
*
* @param Doctrine_Collection $coll a collection to be added
* @return Doctrine_Transaction this object
* @todo package:orm
*/
public
function
addCollection
(
Doctrine_Collection
$coll
)
{
...
...
@@ -128,6 +132,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
* @param Doctrine_Record $record
* @return boolean false if record already existed in invalid records list,
* otherwise true
* @todo package:orm
*/
public
function
addInvalid
(
Doctrine_Record
$record
)
{
...
...
@@ -143,6 +148,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
* Return the invalid records
*
* @return array An array of invalid records
* @todo package:orm
*/
public
function
getInvalid
()
{
...
...
@@ -154,6 +160,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
* get the current transaction nesting level
*
* @return integer
* @todo Name suggestion: getLevel(). $transaction->getTransactionLevel() looks odd.
*/
public
function
getTransactionLevel
()
{
...
...
@@ -165,6 +172,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
* get the current internal transaction nesting level
*
* @return integer
* @todo package:orm. I guess the DBAL does not start transactions itself?
*/
public
function
getInternalTransactionLevel
()
{
...
...
@@ -186,6 +194,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
* @param string $savepoint name of a savepoint to set
* @throws Doctrine_Transaction_Exception if the transaction fails at database level
* @return integer current transaction nesting level
* @todo Name suggestion: begin(). $transaction->beginTransaction() looks odd.
*/
public
function
beginTransaction
(
$savepoint
=
null
)
{
...
...
@@ -267,9 +276,6 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
if
(
$this
->
_nestingLevel
==
1
||
$this
->
_internalNestingLevel
==
1
)
{
if
(
!
empty
(
$this
->
invalid
))
{
if
(
$this
->
_internalNestingLevel
==
1
)
{
// transaction was started by doctrine, so we are responsible
// for a rollback
$this
->
rollback
();
$tmp
=
$this
->
invalid
;
$this
->
invalid
=
array
();
throw
new
Doctrine_Validator_Exception
(
$tmp
);
...
...
@@ -295,7 +301,7 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
if
(
$this
->
_nestingLevel
>
0
)
{
$this
->
_nestingLevel
--
;
}
if
(
$this
->
_internalNestingLevel
>
0
)
{
if
(
$this
->
_internalNestingLevel
>
0
)
{
$this
->
_internalNestingLevel
--
;
}
}
...
...
@@ -316,12 +322,6 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
* @param string $savepoint name of a savepoint to rollback to
* @throws Doctrine_Transaction_Exception if the rollback operation fails at database level
* @return boolean false if rollback couldn't be performed, true otherwise
* @todo Shouldnt this method only commit a rollback if the transactionLevel is 1
* (STATE_ACTIVE)? Explanation: Otherwise a rollback that is triggered from inside doctrine
* in an (emulated) nested transaction would lead to a complete database level
* rollback even though the client code did not yet want to do that.
* In other words: if the user starts a transaction doctrine shouldnt roll it back.
* Doctrine should only roll back transactions started by doctrine. Thoughts?
*/
public
function
rollback
(
$savepoint
=
null
)
{
...
...
@@ -341,19 +341,14 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
if
(
!
is_null
(
$savepoint
))
{
$this
->
_nestingLevel
-=
$this
->
removeSavePoints
(
$savepoint
);
$event
=
new
Doctrine_Event
(
$this
,
Doctrine_Event
::
SAVEPOINT_ROLLBACK
);
$listener
->
preSavepointRollback
(
$event
);
if
(
!
$event
->
skipOperation
)
{
$this
->
rollbackSavePoint
(
$savepoint
);
}
$listener
->
postSavepointRollback
(
$event
);
}
else
{
$event
=
new
Doctrine_Event
(
$this
,
Doctrine_Event
::
TX_ROLLBACK
);
$listener
->
preTransactionRollback
(
$event
);
if
(
!
$event
->
skipOperation
)
{
...
...
@@ -365,7 +360,6 @@ class Doctrine_Transaction extends Doctrine_Connection_Module
throw
new
Doctrine_Transaction_Exception
(
$e
->
getMessage
());
}
}
$listener
->
postTransactionRollback
(
$event
);
}
...
...
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