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
6cdae127
Commit
6cdae127
authored
May 10, 2006
by
doctrine
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Transactional SELECT MAX(id) bug fixed
parent
5c76c577
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
59 additions
and
47 deletions
+59
-47
Session.class.php
classes/Session.class.php
+13
-17
Mysql.class.php
classes/Session/Mysql.class.php
+20
-21
Table.class.php
classes/Table.class.php
+11
-0
SessionTestCase.class.php
tests/SessionTestCase.class.php
+11
-5
run.php
tests/run.php
+4
-4
No files found.
classes/Session.class.php
View file @
6cdae127
...
@@ -429,8 +429,6 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
...
@@ -429,8 +429,6 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
if
(
empty
(
$this
->
insert
))
if
(
empty
(
$this
->
insert
))
return
false
;
return
false
;
foreach
(
$this
->
insert
as
$name
=>
$inserts
)
{
foreach
(
$this
->
insert
as
$name
=>
$inserts
)
{
if
(
!
isset
(
$inserts
[
0
]))
if
(
!
isset
(
$inserts
[
0
]))
continue
;
continue
;
...
@@ -438,18 +436,12 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
...
@@ -438,18 +436,12 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
$record
=
$inserts
[
0
];
$record
=
$inserts
[
0
];
$table
=
$record
->
getTable
();
$table
=
$record
->
getTable
();
$seq
=
$table
->
getSequenceName
();
$seq
=
$table
->
getSequenceName
();
$increment
=
false
;
$increment
=
false
;
$id
=
null
;
$keys
=
$table
->
getPrimaryKeys
();
$keys
=
$table
->
getPrimaryKeys
();
if
(
count
(
$keys
)
==
1
&&
$keys
[
0
]
==
$table
->
getIdentifier
())
{
$id
=
null
;
// record uses auto_increment column
$sql
=
"SELECT MAX("
.
$table
->
getIdentifier
()
.
") FROM "
.
$record
->
getTable
()
->
getTableName
();
if
(
count
(
$keys
)
==
1
&&
$keys
[
0
]
==
$table
->
getIdentifier
())
{
$stmt
=
$this
->
dbh
->
query
(
$sql
);
$data
=
$stmt
->
fetch
(
PDO
::
FETCH_NUM
);
$id
=
$data
[
0
];
$stmt
->
closeCursor
();
$increment
=
true
;
$increment
=
true
;
}
}
...
@@ -459,13 +451,18 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
...
@@ -459,13 +451,18 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
// listen the onPreInsert event
// listen the onPreInsert event
$record
->
getTable
()
->
getAttribute
(
Doctrine
::
ATTR_LISTENER
)
->
onPreInsert
(
$record
);
$record
->
getTable
()
->
getAttribute
(
Doctrine
::
ATTR_LISTENER
)
->
onPreInsert
(
$record
);
if
(
$increment
)
{
$this
->
insert
(
$record
);
if
(
$increment
&&
$k
==
0
)
{
// record uses auto_increment column
// record uses auto_increment column
$id
++
;
$id
=
$table
->
getMaxIdentifier
();
}
}
$record
->
setID
(
$id
);
$id
++
;
$this
->
insert
(
$record
,
$id
);
// listen the onInsert event
// listen the onInsert event
$record
->
getTable
()
->
getAttribute
(
Doctrine
::
ATTR_LISTENER
)
->
onInsert
(
$record
);
$record
->
getTable
()
->
getAttribute
(
Doctrine
::
ATTR_LISTENER
)
->
onInsert
(
$record
);
...
@@ -682,7 +679,7 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
...
@@ -682,7 +679,7 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
* @param Doctrine_Record $record
* @param Doctrine_Record $record
* @return boolean
* @return boolean
*/
*/
private
function
insert
(
Doctrine_Record
$record
,
$id
=
null
)
{
private
function
insert
(
Doctrine_Record
$record
)
{
$array
=
$record
->
getPrepared
();
$array
=
$record
->
getPrepared
();
if
(
empty
(
$array
))
if
(
empty
(
$array
))
...
@@ -710,7 +707,6 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
...
@@ -710,7 +707,6 @@ abstract class Doctrine_Session extends Doctrine_Configurable implements Countab
$stmt
->
execute
(
array_values
(
$array
));
$stmt
->
execute
(
array_values
(
$array
));
$record
->
setID
(
$id
);
return
true
;
return
true
;
}
}
/**
/**
...
...
classes/Session/Mysql.class.php
View file @
6cdae127
...
@@ -68,9 +68,12 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
...
@@ -68,9 +68,12 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
/**
/**
* bulkInsert
* bulkInsert
* inserts all the objects in the pending insert list into database
* inserts all the objects in the pending insert list into database
* TODO: THIS IS NOT WORKING YET AS THERE ARE BUGS IN COMPONENTS USING SELF-REFERENCENCING
*
*
* @return boolean
* @return boolean
*/
*/
/**
public function bulkInsert() {
public function bulkInsert() {
if(empty($this->insert))
if(empty($this->insert))
return false;
return false;
...
@@ -82,21 +85,7 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
...
@@ -82,21 +85,7 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
$record = $inserts[0];
$record = $inserts[0];
$table = $record->getTable();
$table = $record->getTable();
$seq = $table->getSequenceName();
$seq = $table->getSequenceName();
$increment
=
false
;
$id
=
null
;
$keys = $table->getPrimaryKeys();
$keys = $table->getPrimaryKeys();
if
(
count
(
$keys
)
==
1
&&
$keys
[
0
]
==
$table
->
getIdentifier
())
{
// record uses auto_increment column
$sql
=
"SELECT MAX("
.
$table
->
getIdentifier
()
.
") FROM "
.
$record
->
getTable
()
->
getTableName
();
$stmt
=
$this
->
getDBH
()
->
query
(
$sql
);
$data
=
$stmt
->
fetch
(
PDO
::
FETCH_NUM
);
$id
=
$data
[
0
];
$stmt
->
closeCursor
();
$increment
=
true
;
}
$marks = array();
$marks = array();
$params = array();
$params = array();
...
@@ -105,12 +94,6 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
...
@@ -105,12 +94,6 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
// listen the onPreInsert event
// listen the onPreInsert event
$record->getTable()->getAttribute(Doctrine::ATTR_LISTENER)->onPreInsert($record);
$record->getTable()->getAttribute(Doctrine::ATTR_LISTENER)->onPreInsert($record);
if
(
$increment
)
{
// record uses auto_increment column
$id
++
;
}
$array = $record->getPrepared();
$array = $record->getPrepared();
if(isset($this->validator)) {
if(isset($this->validator)) {
...
@@ -126,7 +109,6 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
...
@@ -126,7 +109,6 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
$marks[$key][] = "(".substr(str_repeat("?, ",count($array)),0,-2).")";
$marks[$key][] = "(".substr(str_repeat("?, ",count($array)),0,-2).")";
$params[$key] = array_merge($params[$key], array_values($array));
$params[$key] = array_merge($params[$key], array_values($array));
$record
->
setID
(
$id
);
// listen the onInsert event
// listen the onInsert event
$record->getTable()->getAttribute(Doctrine::ATTR_LISTENER)->onInsert($record);
$record->getTable()->getAttribute(Doctrine::ATTR_LISTENER)->onInsert($record);
...
@@ -141,11 +123,28 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
...
@@ -141,11 +123,28 @@ class Doctrine_Session_Mysql extends Doctrine_Session_Common {
$stmt->execute($params[$key]);
$stmt->execute($params[$key]);
}
}
}
}
if(count($keys) == 1 && $keys[0] == $table->getIdentifier()) {
// record uses auto_increment column
$sql = "SELECT MAX(".$table->getIdentifier().") FROM ".$record->getTable()->getTableName();
$stmt = $this->getDBH()->query($sql);
$data = $stmt->fetch(PDO::FETCH_NUM);
$id = $data[0];
$stmt->closeCursor();
foreach(array_reverse($inserts) as $record) {
$record->setID((int) $id);
$id--;
}
}
}
}
$this->insert = array();
$this->insert = array();
return true;
return true;
}
}
*/
}
}
?>
?>
classes/Table.class.php
View file @
6cdae127
...
@@ -638,6 +638,17 @@ class Doctrine_Table extends Doctrine_Configurable {
...
@@ -638,6 +638,17 @@ class Doctrine_Table extends Doctrine_Configurable {
public
function
setData
(
array
$data
)
{
public
function
setData
(
array
$data
)
{
$this
->
data
=
$data
;
$this
->
data
=
$data
;
}
}
/**
* returns the maximum primary key value
*
* @return integer
*/
final
public
function
getMaxIdentifier
()
{
$sql
=
"SELECT MAX("
.
$this
->
getIdentifier
()
.
") FROM "
.
$this
->
getTableName
();
$stmt
=
$this
->
session
->
getDBH
()
->
query
(
$sql
);
$data
=
$stmt
->
fetch
(
PDO
::
FETCH_NUM
);
return
isset
(
$data
[
0
])
?
$data
[
0
]
:
1
;
}
/**
/**
* @return boolean whether or not a newly created object is new or not
* @return boolean whether or not a newly created object is new or not
*/
*/
...
...
tests/SessionTestCase.class.php
View file @
6cdae127
...
@@ -6,6 +6,15 @@ class Doctrine_SessionTestCase extends Doctrine_UnitTestCase {
...
@@ -6,6 +6,15 @@ class Doctrine_SessionTestCase extends Doctrine_UnitTestCase {
//print_r($tree);
//print_r($tree);
}
}
public
function
testBulkInsert
()
{
$u1
=
new
User
();
$u1
->
name
=
"Jean Reno"
;
$u1
->
save
();
$id
=
$u1
->
getID
();
$u1
->
delete
();
}
public
function
testFlush
()
{
public
function
testFlush
()
{
...
@@ -35,16 +44,13 @@ class Doctrine_SessionTestCase extends Doctrine_UnitTestCase {
...
@@ -35,16 +44,13 @@ class Doctrine_SessionTestCase extends Doctrine_UnitTestCase {
$this
->
session
->
flush
();
$this
->
session
->
flush
();
$this
->
assertTrue
(
gettype
(
$user
->
getID
())
==
"integer"
);
$this
->
assertTrue
(
gettype
(
$user
->
email_id
)
==
"integer"
);
$this
->
assertTrue
(
is_numeric
(
$user
->
Phonenumber
[
0
]
->
entity_id
));
$this
->
assertTrue
(
is_numeric
(
$user
->
Phonenumber
[
0
]
->
entity_id
));
$this
->
assertEqual
(
count
(
$user
->
Group
),
2
);
$this
->
assertEqual
(
count
(
$user
->
Group
),
2
);
$user
=
$this
->
objTable
->
find
(
12
);
$user
=
$this
->
objTable
->
find
(
$user
->
getID
()
);
$this
->
assertEqual
(
$user
->
getID
(),
12
);
$this
->
assertEqual
(
$user
->
getID
(),
$user
->
getID
()
);
$this
->
assertTrue
(
is_numeric
(
$user
->
getID
()));
$this
->
assertTrue
(
is_numeric
(
$user
->
getID
()));
$this
->
assertTrue
(
is_numeric
(
$user
->
email_id
));
$this
->
assertTrue
(
is_numeric
(
$user
->
email_id
));
...
...
tests/run.php
View file @
6cdae127
...
@@ -8,7 +8,6 @@ require_once("EventListenerTestCase.class.php");
...
@@ -8,7 +8,6 @@ require_once("EventListenerTestCase.class.php");
require_once
(
"BatchIteratorTestCase.class.php"
);
require_once
(
"BatchIteratorTestCase.class.php"
);
require_once
(
"CacheFileTestCase.class.php"
);
require_once
(
"CacheFileTestCase.class.php"
);
require_once
(
"RecordTestCase.class.php"
);
require_once
(
"RecordTestCase.class.php"
);
require_once
(
"DQLParserTestCase.class.php"
);
require_once
(
"AccessTestCase.class.php"
);
require_once
(
"AccessTestCase.class.php"
);
require_once
(
"ValidatorTestCase.class.php"
);
require_once
(
"ValidatorTestCase.class.php"
);
require_once
(
"CollectionTestCase.class.php"
);
require_once
(
"CollectionTestCase.class.php"
);
...
@@ -28,13 +27,13 @@ $test = new GroupTest("Doctrine Framework Unit Tests");
...
@@ -28,13 +27,13 @@ $test = new GroupTest("Doctrine Framework Unit Tests");
$test
->
addTestCase
(
new
Doctrine_RecordTestCase
());
$test
->
addTestCase
(
new
Doctrine_TableTestCase
());
$test
->
addTestCase
(
new
Doctrine_SessionTestCase
());
$test
->
addTestCase
(
new
Doctrine_SessionTestCase
());
//$test->addTestCase(new Doctrine_DQL_ParserTestCase());
$test
->
addTestCase
(
new
Doctrine_RecordTestCase
());
$test
->
addTestCase
(
new
Doctrine_TableTestCase
());
$test
->
addTestCase
(
new
Doctrine_ValidatorTestCase
());
$test
->
addTestCase
(
new
Doctrine_ValidatorTestCase
());
...
@@ -55,6 +54,7 @@ $test->addTestCase(new Doctrine_Collection_OffsetTestCase());
...
@@ -55,6 +54,7 @@ $test->addTestCase(new Doctrine_Collection_OffsetTestCase());
$test
->
addTestCase
(
new
Sensei_UnitTestCase
());
$test
->
addTestCase
(
new
Sensei_UnitTestCase
());
$test
->
addTestCase
(
new
Doctrine_QueryTestCase
());
$test
->
addTestCase
(
new
Doctrine_QueryTestCase
());
//$test->addTestCase(new Doctrine_Cache_FileTestCase());
//$test->addTestCase(new Doctrine_Cache_FileTestCase());
//$test->addTestCase(new Doctrine_Cache_SqliteTestCase());
//$test->addTestCase(new Doctrine_Cache_SqliteTestCase());
...
...
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