Re: [PDO] Re: [PHP-DEV] [PATCH] New PDO methods for PostgreSQL driver
| From: | Oskar Eisemuth | Date: | Tue, 25 May 2010 09:02:46 +0000 |
| Subject: | Re: [PDO] Re: [PHP-DEV] [PATCH] New PDO methods for PostgreSQL driver | ||
| References: | 1 2 3 | Groups: | php.pdo |
| Request: | Send a blank email to pdo+get-395@lists.php.net to get a copy of this message | ||
Lester Caine schrieb:
Christopher Jones wrote:A basic driver specific dsn to handle several databases. Then you only need a driver specific handle switch function. beginTransaction would default to all databases in your DSN. PDO::firebirdUseDatabase(); + Keeps the whole logic in the driver, can use optimized ways to handle transactions. - Driver specific, the dsn gets very long. - Removes the concept of PDO being a database instance. A firebird specific pool driver could be used as well: $dbh1 = new PDO(..); $dbh2 = new PDO(..); $dbhpool = new PDO('firebird:pool'); $dbhpool->firebirdAttachChild($dbh1); $dbhpool->firebirdAttachChild($dbh2); $dbhpool->beginTransaction() + Separates the basic usage from the advance usage, for most people PDO still will be one database handle. The other route would be a dummy driver for all drivers: Could be a bit problematical if you mix database drivers. $dbhpool = new PDO('pool:'); $dbhpool->poolAttach($dbh1); $dbhpool->poolAttach($dbh2); $dbhpool->beginTransaction(); + With some emulation it may work across Servers and Drivers via transaction save points? + Allows one instance to have less good transaction support in the pool, will get commit first, then the others... - Not easy to handle, needs several hacks to hijack beginTransaction/commit - Against the low level design of PDO Or the same as transaction object... $tobj = new PDOCrossTransaction(); $tobj->attach($dbh1); $tobj->attach($dbh2); $tobj->beginTransaction($options); + Can change the function declaration for transaction options So I don't think there is a really a need to change fundamental all stuff of PDO to support this... Oskar EisemuthAlso I haven't seen anything to explain your earlier comment to Lester that "In particular you'll need two database connections (one with the original driver and one with PDO) in order to use the native copy* functions.".I see my name, but not connection with the quote ... But in addition to Denis's examples of where you need two database connections, 2 phase commit across multiple databases has been part of Firebird for many years, and other databases are now copying it. This requires combining database connections in the one transaction, and is something that PDO is unable to handle at all? It's one of the items on http://wiki.php.net/internals/pdo/brainstorming?s[]=pdo ... as is the question "Is the goal to eventually replace the native extensions?" I see several possible ways without a complete new userland API to handle several database connections in PDO: