php-src/ext/pdo
Anatol Belski d11734b4b0 reworked the patch, less new stuff but worky
TLS is already used in TSRM, the way exporting the tsrm cache through
a thread local variable is not portable. Additionally, the current
patch suffers from bugs which are hard to find, but prevent it to
be worky with apache. What is done here is mainly uses the idea
from the RFC patch, but

- __thread variable is removed
- offset math and declarations are removed
- extra macros and definitions are removed

What is done merely is

- use an inline function to access the tsrm cache. The function uses
  the portable tsrm_tls_get macro which is cheap
- all the TSRM_* macros are set to placebo. Thus this opens the way
  remove them later

Except that, the logic is old. TSRMLS_FETCH will have to be done once
per thread, then tsrm_get_ls_cache() can be used. Things seeming to be
worky are cli, cli server and apache. I also tried to enable bz2
shared and it has worked out of the box. The change is yet minimal
diffing to the current master bus is a worky start, IMHO. Though will
have to recheck the other previously done SAPIs - embed and cgi.

The offsets can be added to the tsrm_resource_type struct, then
it'll not be needed to declare them in the userspace. Even the
"done" member type can be changed to int16 or smaller, then adding
the offset as int16 will not change the struct size. As well on the
todo might be removing the hashed storage, thread_id != thread_id and
linked list logic in favour of the explicit TLS operations.
2014-09-25 18:48:27 +02:00
..
tests Reverted incorrectly changed test. Now it's the same as in PHP-5.6. 2014-08-20 12:03:47 +04:00
config.m4 Fixed bug #66604 'pdo/php_pdo_error.h' not copied to the include dir 2014-04-13 08:53:21 +02:00
config.w32 Fixed bug #66604 'pdo/php_pdo_error.h' not copied to the include dir 2014-04-13 08:53:21 +02:00
CREDITS
Makefile.frag Allow PDO drivers custom methods to trigger errors/exceptions 2013-06-04 16:49:16 +02:00
package2.xml
pdo_dbh.c s/PHP 5/PHP 7/ 2014-09-19 18:33:14 +02:00
pdo_sql_parser.c reworked the patch, less new stuff but worky 2014-09-25 18:48:27 +02:00
pdo_sql_parser.re s/PHP 5/PHP 7/ 2014-09-19 18:33:14 +02:00
pdo_sqlstate.c s/PHP 5/PHP 7/ 2014-09-19 18:33:14 +02:00
pdo_stmt.c s/PHP 5/PHP 7/ 2014-09-19 18:33:14 +02:00
pdo.c s/PHP 5/PHP 7/ 2014-09-19 18:33:14 +02:00
pdo.php
php_pdo_driver.h s/PHP 5/PHP 7/ 2014-09-19 18:33:14 +02:00
php_pdo_error.h s/PHP 5/PHP 7/ 2014-09-19 18:33:14 +02:00
php_pdo_int.h s/PHP 5/PHP 7/ 2014-09-19 18:33:14 +02:00
php_pdo.h s/PHP 5/PHP 7/ 2014-09-19 18:33:14 +02:00
README
TODO Already exists in PECL 2007-07-25 22:26:14 +00:00

$Id$

PHP Data Objects
================

Concept: Data Access Abstraction

Goals:

1/  Be light-weight
2/  Provide common API for common database operations
3/  Be performant
4/  Keep majority of PHP specific stuff in the PDO core (such as persistent
    resource management); drivers should only have to worry about getting the
    data and not about PHP internals.


Transactions and autocommit
===========================

When you create a database handle, you *should* specify the autocommit
behaviour that you require.  PDO will default to autocommit on.

$dbh = new PDO("...", $user, $pass, array(PDO_ATTR_AUTOCOMMIT => true));

When auto-commit is on, the driver will implicitly commit each query as it is
executed.  This works fine for most simple tasks but can be significantly
slower when you are making a large number of udpates.

$dbh = new PDO("...", $user, $pass, array(PDO_ATTR_AUTOCOMMIT => false));

When auto-commit is off, you must then use $dbh->beginTransaction() to
initiate a transaction.  When your work is done, you then call $dbh->commit()
or $dbh->rollBack() to persist or abort your changes respectively.  Not all
databases support transactions.

You can change the auto-commit mode at run-time:

$dbh->setAttribute(PDO_ATTR_AUTOCOMMIT, false);

Regardless of the error handling mode set on the database handle, if the
autocommit mode cannot be changed, an exception will be thrown.

Some drivers will allow you to temporarily disable autocommit if you call
$dbh->beginTransaction().  When you commit() or rollBack() such a transaction,
the handle will switch back to autocommit mode again.  If the mode could not
be changed, an exception will be raised, as noted above.

When the database handle is closed or destroyed (or at request end for
persistent handles), the driver will implicitly rollBack().  It is your
responsibility to call commit() when you are done making changes and
autocommit is turned off.

vim:tw=78:et