1--TEST--
2PDO PgSQL isInTransaction
3--EXTENSIONS--
4pdo
5pdo_pgsql
6--SKIPIF--
7<?php
8require __DIR__ . '/config.inc';
9require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
10PDOTest::skip();
11?>
12--FILE--
13<?php
14require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
15$db = PDOTest::test_factory(__DIR__ . '/common.phpt');
16$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
17$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
18
19$db->exec('CREATE TABLE test_is_in_transaction (a integer not null primary key, b text)');
20
21$db->beginTransaction();
22try {
23echo "Test PDO::PGSQL_TRANSACTION_INTRANS\n";
24var_dump($db->inTransaction());
25
26$stmt = $db->prepare("INSERT INTO test_is_in_transaction (a, b) values (?, ?)");
27$stmt->bindValue(1, 1);
28$stmt->bindValue(2, "test insert");
29$stmt->execute();
30
31$db->commit();
32
33echo "Test PDO::PGSQL_TRANSACTION_IDLE\n";
34var_dump($db->inTransaction());
35
36$db->beginTransaction();
37
38try {
39$stmt = $db->prepare("INSERT INTO test_is_in_transaction (a, b) values (?, ?)");
40$stmt->bindValue(1, "error");
41$stmt->bindValue(2, "test insert");
42$stmt->execute();
43} catch (Exception $e) {
44    /* We catch the exception because the execute will give error and we must test the PDO::PGSQL_TRANSACTION_ERROR */
45    echo "Test PDO::PGSQL_TRANSACTION_INERROR\n";
46    var_dump($db->inTransaction());
47    $db->rollBack();
48}
49
50echo "Test PDO::PGSQL_TRANSACTION_IDLE\n";
51var_dump($db->inTransaction());
52
53} catch (Exception $e) {
54    /* catch exceptions so that we can show the relative error */
55    echo "Exception! at line ", $e->getLine(), "\n";
56    var_dump($e->getMessage());
57}
58?>
59--CLEAN--
60<?php
61require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
62$db = PDOTest::test_factory(__DIR__ . '/common.phpt');
63$db->exec('DROP TABLE test_is_in_transaction');
64?>
65--EXPECT--
66Test PDO::PGSQL_TRANSACTION_INTRANS
67bool(true)
68Test PDO::PGSQL_TRANSACTION_IDLE
69bool(false)
70Test PDO::PGSQL_TRANSACTION_INERROR
71bool(true)
72Test PDO::PGSQL_TRANSACTION_IDLE
73bool(false)
74