1: <?php
2:
3: namespace PHPixie\Database\Driver\PDO;
4:
5: class Connection extends \PHPixie\Database\Type\SQL\Connection
6: {
7: protected $adapter;
8: protected $adapterName;
9: protected $pdo;
10:
11: public function insertId()
12: {
13: return $this->adapter->insertId();
14: }
15:
16: public function connect()
17: {
18: $config = $this->config;
19:
20: $options = $config->get('connectionOptions', array());
21: if (!is_array($options))
22: throw new \PHPixie\Database\Exception("PDO 'connectionOptions' configuration parameter must be an array");
23:
24: $this->pdo = $this->buildPdo(
25: $config->get('connection'),
26: $config->get('user',''),
27: $config->get('password', ''),
28: $options
29: );
30:
31: $this->pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
32: $this->adapterName = strtolower(str_replace('PDO_', '', $this->pdo->getAttribute(\PDO::ATTR_DRIVER_NAME)));
33: $this->adapter = $this->driver->adapter($this->adapterName, $config, $this);
34: }
35:
36: public function disconnect()
37: {
38: $this->adapter = null;
39: $this->pdo = null;
40: }
41:
42: public function listColumns($table)
43: {
44: return $this->adapter->listColumns($table);
45: }
46:
47: public function execute($query, $params = array())
48: {
49: $cursor = $this->pdo->prepare($query);
50: $cursor->execute($params);
51:
52: return $this->driver->result($cursor);
53: }
54:
55: public function pdo()
56: {
57: return $this->pdo;
58: }
59:
60: public function adapterName()
61: {
62: return $this->adapterName;
63: }
64:
65: protected function buildPdo($connection, $user, $password, $connectionOptions)
66: {
67: return new \PDO($connection, $user, $password, $connectionOptions);
68: }
69:
70: public function beginTransaction()
71: {
72: $this->pdo->beginTransaction();
73: }
74:
75: public function commitTransaction()
76: {
77: $this->pdo->commit();
78: }
79:
80: public function rollbackTransaction()
81: {
82: $this->pdo->rollBack();
83: }
84:
85: public function inTransaction()
86: {
87: return $this->pdo->inTransaction();
88: }
89:
90: public function rollbackTransactionTo($savepoint)
91: {
92: $this->adapter->rollbackTransactionTo($savepoint);
93: }
94:
95: protected function createTransactionSavepoint($name)
96: {
97: $this->adapter->createTransactionSavepoint($name);
98: }
99:
100:
101: }
102: