@@ -5,7 +5,9 @@ pdo_sqlite
55--FILE--
66<?php
77
8- $ pdo = PDO ::connect ('sqlite::memory: ' );
8+ $ dsn = 'sqlite:file:foo?mode=memory&cache=shared ' ;
9+ $ pdo = PDO ::connect ($ dsn );
10+ $ pdo2 = PDO ::connect ($ dsn );
911
1012// Deferred by default before any transaction mode is set
1113var_dump ($ pdo ->getAttribute (PDO \Sqlite::ATTR_TRANSACTION_MODE ) === PDO \Sqlite::ATTR_TRANSACTION_MODE_DEFERRED );
@@ -31,6 +33,39 @@ var_dump($pdo->setAttribute(PDO\Sqlite::ATTR_TRANSACTION_MODE, 123));
3133var_dump ($ pdo ->setAttribute (PDO \Sqlite::ATTR_TRANSACTION_MODE_DEFERRED , true ));
3234var_dump ($ pdo ->setAttribute (PDO \Sqlite::ATTR_TRANSACTION_MODE_IMMEDIATE , true ));
3335var_dump ($ pdo ->setAttribute (PDO \Sqlite::ATTR_TRANSACTION_MODE_EXCLUSIVE , true ));
36+
37+ // Set $pdo to deferred, try to get immediate transaction in $pdo2. There should be no lock contention
38+ $ pdo ->setAttribute (PDO \Sqlite::ATTR_TRANSACTION_MODE , PDO \Sqlite::ATTR_TRANSACTION_MODE_DEFERRED );
39+ $ pdo ->beginTransaction ();
40+ try {
41+ $ pdo2 ->exec ('begin immediate transaction ' );
42+ $ pdo2 ->rollBack ();
43+ printf ("Database is not locked \n" );
44+ } catch (PDOException $ e ) {
45+ printf ("Database is locked \n" );
46+ }
47+ $ pdo ->rollBack ();
48+
49+ // Set $pdo to immediate, try to get immediate transaction in $pdo2. There SHOULD be lock contention
50+ $ pdo ->setAttribute (PDO \Sqlite::ATTR_TRANSACTION_MODE , PDO \Sqlite::ATTR_TRANSACTION_MODE_IMMEDIATE );
51+ $ pdo ->beginTransaction ();
52+ try {
53+ $ pdo2 ->exec ('begin immediate transaction ' );
54+ printf ("Database is not locked \n" );
55+ } catch (PDOException $ e ) {
56+ printf ("Database is locked \n" );
57+ }
58+ $ pdo ->rollBack ();
59+
60+ // Set $pdo to exclusive, try to get immediate transaction in $pdo2. There SHOULD be lock contention
61+ $ pdo ->setAttribute (PDO \Sqlite::ATTR_TRANSACTION_MODE , PDO \Sqlite::ATTR_TRANSACTION_MODE_EXCLUSIVE );
62+ $ pdo ->beginTransaction ();
63+ try {
64+ $ pdo2 ->exec ('begin immediate transaction ' );
65+ printf ("Database is not locked \n" );
66+ } catch (PDOException $ e ) {
67+ printf ("Database is locked \n" );
68+ }
3469?>
3570--EXPECT--
3671bool(true)
@@ -46,3 +81,6 @@ bool(false)
4681bool(false)
4782bool(false)
4883bool(false)
84+ Database is not locked
85+ Database is locked
86+ Database is locked
0 commit comments