1: <?php
2:
3: 4: 5: 6:
7:
8: namespace Nette\Database\Drivers;
9:
10: use Nette;
11:
12:
13: 14: 15:
16: class OdbcDriver extends Nette\Object implements Nette\Database\ISupplementalDriver
17: {
18:
19: public function convertException(\PDOException $e)
20: {
21: return Nette\Database\DriverException::from($e);
22: }
23:
24:
25:
26:
27:
28: 29: 30:
31: public function delimite($name)
32: {
33: return '[' . str_replace(array('[', ']'), array('[[', ']]'), $name) . ']';
34: }
35:
36:
37: 38: 39:
40: public function formatBool($value)
41: {
42: return $value ? '1' : '0';
43: }
44:
45:
46: 47: 48:
49: public function formatDateTime( $value)
50: {
51: return $value->format('#m/d/Y H:i:s#');
52: }
53:
54:
55: 56: 57:
58: public function formatDateInterval(\DateInterval $value)
59: {
60: throw new Nette\NotSupportedException;
61: }
62:
63:
64: 65: 66:
67: public function formatLike($value, $pos)
68: {
69: $value = strtr($value, array("'" => "''", '%' => '[%]', '_' => '[_]', '[' => '[[]'));
70: return ($pos <= 0 ? "'%" : "'") . $value . ($pos >= 0 ? "%'" : "'");
71: }
72:
73:
74: 75: 76:
77: public function applyLimit(& $sql, $limit, $offset)
78: {
79: if ($limit >= 0) {
80: $sql = preg_replace('#^\s*(SELECT|UPDATE|DELETE)#i', '$0 TOP ' . (int) $limit, $sql, 1, $count);
81: if (!$count) {
82: throw new Nette\InvalidArgumentException('SQL query must begin with SELECT, UPDATE or DELETE command.');
83: }
84: }
85:
86: if ($offset) {
87: throw new Nette\NotSupportedException('Offset is not supported by this database.');
88: }
89: }
90:
91:
92: 93: 94:
95: public function normalizeRow($row)
96: {
97: return $row;
98: }
99:
100:
101:
102:
103:
104: 105: 106:
107: public function getTables()
108: {
109: throw new Nette\NotImplementedException;
110: }
111:
112:
113: 114: 115:
116: public function getColumns($table)
117: {
118: throw new Nette\NotImplementedException;
119: }
120:
121:
122: 123: 124:
125: public function getIndexes($table)
126: {
127: throw new Nette\NotImplementedException;
128: }
129:
130:
131: 132: 133:
134: public function getForeignKeys($table)
135: {
136: throw new Nette\NotImplementedException;
137: }
138:
139:
140: 141: 142:
143: public function getColumnTypes(\PDOStatement $statement)
144: {
145: return Nette\Database\Helpers::detectTypes($statement);
146: }
147:
148:
149: 150: 151: 152:
153: public function isSupported($item)
154: {
155: return $item === self::SUPPORT_SUBSELECT;
156: }
157:
158: }
159: