1 : <?php
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
22 :
23 :
24 :
25 :
26 :
27 :
28 :
29 :
30 :
31 :
32 :
33 : class MysqlOutputter extends DatabaseOutputter {
34 : private $username;
35 : private $password;
36 : private $server;
37 : private $database;
38 : private $db;
39 :
40 :
41 :
42 :
43 : public function __construct($username, $password, $server, $database)
44 : {
45 0 : $this->username = $username;
46 0 : $this->password = $password;
47 0 : $this->server = $server;
48 0 : $this->database = $database;
49 0 : }
50 :
51 :
52 :
53 :
54 :
55 : public function __destruct()
56 : {
57 0 : if ($this->db) mysql_close($this->db);
58 0 : }
59 :
60 :
61 :
62 :
63 :
64 :
65 : protected function connect()
66 : {
67 0 : $this->db = @mysql_connect($this->server, $this->username, $this->password);
68 0 : if ($this->db == false) return false;
69 0 : mysql_select_db($this->database, $this->db);
70 0 : return true;
71 : }
72 :
73 :
74 :
75 :
76 :
77 : protected function query($query)
78 : {
79 0 : $return = mysql_query($query, $this->db);
80 0 : if ($return === false) {
81 0 : echo "<p>Error in query <em>{$query}</em>. MySQL reported the following: <em>" . mysql_error() . "</em></p>";
82 0 : }
83 0 : return $return;
84 : }
85 :
86 :
87 :
88 :
89 :
90 :
91 : protected function sql_safen($input)
92 : {
93 0 : if ($input === null) {
94 0 : return 'NULL';
95 0 : } else if (is_integer($input)) {
96 0 : return $input;
97 : } else {
98 0 : return "'" . mysql_real_escape_string($input, $this->db) . "'";
99 : }
100 : }
101 :
102 :
103 :
104 :
105 :
106 : protected function fetch_row($res)
107 : {
108 0 : return mysql_fetch_row($res);
109 : }
110 :
111 :
112 :
113 :
114 :
115 : protected function fetch_assoc($res)
116 : {
117 0 : return mysql_fetch_assoc($res);
118 : }
119 :
120 :
121 :
122 :
123 :
124 : protected function affected_rows($res)
125 : {
126 0 : return mysql_affected_rows();
127 : }
128 :
129 :
130 :
131 :
132 :
133 : protected function insert_id()
134 : {
135 0 : return mysql_insert_id();
136 : }
137 :
138 :
139 :
140 :
141 :
142 : protected function get_table_list()
143 : {
144 0 : $q = "SHOW TABLES";
145 0 : $res = $this->query ($q);
146 :
147 0 : $tables = array();
148 0 : while ($row = $this->fetch_row($res)) {
149 0 : $tables[] = $row[0];
150 0 : }
151 :
152 0 : return $tables;
153 : }
154 :
155 :
156 :
157 :
158 :
159 :
160 :
161 :
162 :
163 :
164 :
165 :
166 :
167 :
168 : protected function get_sql_type($internal_type_name)
169 : {
170 : switch ($internal_type_name) {
171 0 : case 'serial': return 'SERIAL';
172 0 : case 'smallnum': return 'SMALLINT UNSIGNED';
173 0 : case 'largenum': return 'BIGINT UNSIGNED';
174 0 : case 'string': return 'VARCHAR(255)';
175 0 : case 'text': return 'MEDIUMTEXT';
176 0 : default:
177 0 : throw new Exception ("Undefined type '{$internal_type_name}' specified");
178 : break;
179 0 : }
180 : }
181 :
182 :
183 :
184 :
185 :
186 :
187 :
188 :
189 :
190 :
191 :
192 :
193 :
194 :
195 :
196 : protected function get_column_details($table_name)
197 : {
198 0 : $q = 'SHOW COLUMNS IN ' . $table_name;
199 0 : $res = $this->query ($q);
200 :
201 0 : $columns = array();
202 0 : while ($row = $this->fetch_assoc($res)) {
203 0 : if ($row['Null'] == 'YES') {
204 0 : $row['NotNull'] = false;
205 0 : } else {
206 0 : $row['NotNull'] = true;
207 : }
208 :
209 :
210 0 : $row['Type'] = preg_replace('/\(.+\)/', '', $row['Type']);
211 0 : $row['Type'] = strtolower($row['Type']);
212 0 : switch ($row['Type']) {
213 0 : case 'smallint unsigned': $row['Type'] = 'smallnum'; break;
214 0 : case 'smallint': $row['Type'] = 'smallnum'; break;
215 0 : case 'bigint unsigned':
216 0 : $row['Type'] = 'largenum';
217 0 : if ($row['NotNull'] and stripos('auto_increment', $row['Extra']) !== false) {
218 0 : $row['Type'] = 'serial';
219 0 : }
220 0 : break;
221 0 : case 'bigint': $row['Type'] = 'largenum'; break;
222 0 : case 'int unsigned': $row['Type'] = 'largenum'; break;
223 0 : case 'int': $row['Type'] = 'largenum'; break;
224 0 : case 'varchar': $row['Type'] = 'string'; break;
225 0 : case 'mediumtext': $row['Type'] = 'text'; break;
226 0 : }
227 :
228 0 : unset ($row['Extra'], $row['Default']);
229 0 : $columns[] = $row;
230 0 : }
231 :
232 0 : return $columns;
233 : }
234 :
235 :
236 :
237 :
238 :
239 : protected function get_alter_column_query($table, $column_name, $new_type, $not_null)
240 : {
241 0 : $new_type = $this->get_sql_type($new_type);
242 :
243 0 : $q = "ALTER TABLE {$table} MODIFY COLUMN {$column_name} {$new_type}";
244 0 : return $q;
245 : }
246 :
247 :
248 :
249 :
250 :
251 : protected function create_table($table_name, $dest_table)
252 : {
253 0 : $q = "CREATE TABLE {$table_name} (\n";
254 0 : foreach ($dest_table['Columns'] as $col_name => $col_def) {
255 0 : $dest_sql = $this->get_sql_type($col_def['Type']);
256 0 : if ($col_def['NotNull']) $dest_sql .= ' not null';
257 :
258 0 : $q .= " {$col_name} {$dest_sql},\n";
259 0 : }
260 0 : $q .= " PRIMARY KEY ({$dest_table['PK']})\n";
261 0 : $q .= ") ENGINE=MyISAM";
262 0 : echo "<b>Query:\n{$q}</b>\n";
263 :
264 0 : $res = $this->query ($q);
265 0 : if ($res) echo 'Affected rows: ', $this->affected_rows($res), "\n";
266 0 : }
267 :
268 :
269 :
270 :
271 :
272 : protected function start_transaction()
273 : {
274 0 : $this->query('START TRANSACTION');
275 0 : }
276 :
277 :
278 :
279 :
280 :
281 : protected function commit_transaction()
282 : {
283 0 : $this->query('COMMIT');
284 0 : }
285 :
286 :
287 :
288 :
289 :
290 : protected function rollback_transaction()
291 : {
292 0 : $this->query('ROLLBACK');
293 0 : }
294 :
295 :
296 : }
297 :
298 :
299 : ?>
|