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