Completed
Push — master ( 96636c...782a93 )
by Edgard
22:00 queued 11:00
created

PdoAdapter::commit()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 0
Metric Value
dl 0
loc 10
ccs 0
cts 8
cp 0
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 7
nc 2
nop 0
crap 6
1
<?php
2
3
/**
4
 * @link http://www.yiiframework.com/
5
 * @copyright Copyright (c) 2008 Yii Software LLC
6
 * @license http://www.yiiframework.com/license/
7
 */
8
9
namespace edgardmessias\db\firebird;
10
11
use PDO;
12
13
/**
14
 * Description of PdoAdapter
15
 *
16
 * @author Edgard Lorraine Messias <[email protected]>
17
 */
18
class PdoAdapter extends PDO
19
{
20
21
    private $_inTransaction = false;
22
23
    /**
24
     * Do some basic setup for Firebird.
25
     * o Force use of exceptions on error.
26
     * o Force all metadata to lower case.
27
     *   Yii will behave in unpredicatable ways if
28
     *   metadata is not lowercase.
29
     * o Ensure that table names are not prefixed to
30
     *    fieldnames when returning metadata.
31
     * Finally call parent constructor.
32
     *
33
     */
34 7
    public function __construct($dsn, $username, $password, $driver_options = [])
35
    {
36
        // Windows OS paths with backslashes should be changed
37 7
        $dsn = str_replace("\\", "/", $dsn);
38
        // apply error mode
39 7
        $driver_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
40
        // lower case column names in results are necessary for Yii ActiveRecord proper functioning
41 7
        $driver_options[PDO::ATTR_CASE] = PDO::CASE_LOWER;
42
        // ensure we only receive fieldname not tablename.fieldname.
43 7
        $driver_options[PDO::ATTR_FETCH_TABLE_NAMES] = false;
44 7
        parent::__construct($dsn, $username, $password, $driver_options);
45 7
    }
46
47
    /**
48
     * Initiates a transaction
49
     * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
50
     */
51
    public function beginTransaction($isolationLevel = null)
52
    {
53
        $this->setAttribute(PDO::ATTR_AUTOCOMMIT, false);
54
55
        if ($isolationLevel === false) {
56
            $this->_inTransaction = true;
57
            return true;
58
        }
59
60
        if ($isolationLevel === null) {
61
            $r = $this->exec("SET TRANSACTION");
62
            $success = ($r !== false);
63
            if ($success) {
64
                $this->_inTransaction = true;
65
            }
66
            return ($success);
67
        }
68
69
        $r = $this->exec("SET TRANSACTION ISOLATION LEVEL $isolationLevel");
70
        $success = ($r !== false);
71
        if ($success) {
72
            $this->_inTransaction = true;
73
        }
74
        return ($success);
75
    }
76
77
    /**
78
     * Commits a transaction
79
     * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
80
     */
81
    public function commit()
82
    {
83
        $r = $this->exec("COMMIT");
84
        $this->setAttribute(PDO::ATTR_AUTOCOMMIT, true);
85
        $success = ($r !== false);
86
        if ($success) {
87
            $this->_inTransaction = false;
88
        }
89
        return ($success);
90
    }
91
92
    /**
93
     * Rolls back a transaction
94
     * @return bool <b>TRUE</b> on success or <b>FALSE</b> on failure.
95
     */
96
    public function rollBack()
97
    {
98
        $r = $this->exec("ROLLBACK");
99
        $this->setAttribute(PDO::ATTR_AUTOCOMMIT, true);
100
        $success = ($r !== false);
101
        if ($success) {
102
            $this->_inTransaction = false;
103
        }
104
        return ($success);
105
    }
106
107
    /**
108
     * Checks if inside a transaction
109
     * @return bool <b>TRUE</b> if a transaction is currently active, and <b>FALSE</b> if not.
110
     */
111
    public function inTransaction()
112
    {
113
        return $this->_inTransaction;
114
    }
115
}
116