1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12: namespace Nette\Database\Drivers;
13:
14: use Nette;
15:
16:
17: 18: 19: 20: 21:
22: class OciDriver extends Nette\Object implements Nette\Database\ISupplementalDriver
23: {
24:
25: private $connection;
26:
27:
28: private $fmtDateTime;
29:
30:
31: public function __construct(Nette\Database\Connection $connection, array $options)
32: {
33: $this->connection = $connection;
34: $this->fmtDateTime = isset($options['formatDateTime']) ? $options['formatDateTime'] : 'U';
35: }
36:
37:
38:
39:
40:
41: 42: 43:
44: public function delimite($name)
45: {
46:
47: return '"' . str_replace('"', '""', $name) . '"';
48: }
49:
50:
51: 52: 53:
54: public function formatBool($value)
55: {
56: return $value ? '1' : '0';
57: }
58:
59:
60: 61: 62:
63: public function formatDateTime(\DateTime $value)
64: {
65: return $value->format($this->fmtDateTime);
66: }
67:
68:
69: 70: 71:
72: public function formatLike($value, $pos)
73: {
74: throw new Nette\NotImplementedException;
75: }
76:
77:
78: 79: 80:
81: public function applyLimit(& $sql, $limit, $offset)
82: {
83: if ($offset > 0) {
84:
85: $sql = 'SELECT * FROM (SELECT t.*, ROWNUM AS "__rnum" FROM (' . $sql . ') t '
86: . ($limit >= 0 ? 'WHERE ROWNUM <= ' . ((int) $offset + (int) $limit) : '')
87: . ') WHERE "__rnum" > '. (int) $offset;
88:
89: } elseif ($limit >= 0) {
90: $sql = 'SELECT * FROM (' . $sql . ') WHERE ROWNUM <= ' . (int) $limit;
91: }
92: }
93:
94:
95: 96: 97:
98: public function normalizeRow($row, $statement)
99: {
100: return $row;
101: }
102:
103:
104:
105:
106:
107: 108: 109:
110: public function getTables()
111: {
112: $tables = array();
113: foreach ($this->connection->query('SELECT * FROM cat') as $row) {
114: if ($row[1] === 'TABLE' || $row[1] === 'VIEW') {
115: $tables[] = array(
116: 'name' => $row[0],
117: 'view' => $row[1] === 'VIEW',
118: );
119: }
120: }
121: return $tables;
122: }
123:
124:
125: 126: 127:
128: public function getColumns($table)
129: {
130: throw new Nette\NotImplementedException;
131: }
132:
133:
134: 135: 136:
137: public function getIndexes($table)
138: {
139: throw new Nette\NotImplementedException;
140: }
141:
142:
143: 144: 145:
146: public function getForeignKeys($table)
147: {
148: throw new Nette\NotImplementedException;
149: }
150:
151:
152: 153: 154:
155: public function isSupported($item)
156: {
157: return $item === self::SUPPORT_COLUMNS_META || $item === self::SUPPORT_SEQUENCE;
158: }
159:
160: }
161: