DB_utility.php
Go to the documentation of this file.00001 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 class CI_DB_utility extends CI_DB_forge {
00026
00027 var $db;
00028 var $data_cache = array();
00029
00030
00031
00032
00033
00034
00035
00036 function CI_DB_utility()
00037 {
00038
00039 $CI =& get_instance();
00040 $this->db =& $CI->db;
00041
00042 log_message('debug', "Database Utility Class Initialized");
00043 }
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 function list_databases()
00054 {
00055
00056 if (isset($this->data_cache['db_names']))
00057 {
00058 return $this->data_cache['db_names'];
00059 }
00060
00061 $query = $this->db->query($this->_list_databases());
00062 $dbs = array();
00063 if ($query->num_rows() > 0)
00064 {
00065 foreach ($query->result_array() as $row)
00066 {
00067 $dbs[] = current($row);
00068 }
00069 }
00070
00071 $this->data_cache['db_names'] = $dbs;
00072 return $this->data_cache['db_names'];
00073 }
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 function optimize_table($table_name)
00085 {
00086 $sql = $this->_optimize_table($table_name);
00087
00088 if (is_bool($sql))
00089 {
00090 show_error('db_must_use_set');
00091 }
00092
00093 $query = $this->db->query($sql);
00094 $res = $query->result_array();
00095
00096
00097
00098 return current($res);
00099 }
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 function optimize_database()
00110 {
00111 $result = array();
00112 foreach ($this->db->list_tables() as $table_name)
00113 {
00114 $sql = $this->_optimize_table($table_name);
00115
00116 if (is_bool($sql))
00117 {
00118 return $sql;
00119 }
00120
00121 $query = $this->db->query($sql);
00122
00123
00124
00125
00126 $res = $query->result_array();
00127 $res = current($res);
00128 $key = str_replace($this->db->database.'.', '', current($res));
00129 $keys = array_keys($res);
00130 unset($res[$keys[0]]);
00131
00132 $result[$key] = $res;
00133 }
00134
00135 return $result;
00136 }
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147 function repair_table($table_name)
00148 {
00149 $sql = $this->_repair_table($table_name);
00150
00151 if (is_bool($sql))
00152 {
00153 return $sql;
00154 }
00155
00156 $query = $this->db->query($sql);
00157
00158
00159
00160 $res = $query->result_array();
00161 return current($res);
00162 }
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176 function csv_from_result($query, $delim = ",", $newline = "\n", $enclosure = '"')
00177 {
00178 if ( ! is_object($query) OR ! method_exists($query, 'field_names'))
00179 {
00180 show_error('You must submit a valid result object');
00181 }
00182
00183 $out = '';
00184
00185
00186 foreach ($query->list_fields() as $name)
00187 {
00188 $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $name).$enclosure.$delim;
00189 }
00190
00191 $out = rtrim($out);
00192 $out .= $newline;
00193
00194
00195 foreach ($query->result_array() as $row)
00196 {
00197 foreach ($row as $item)
00198 {
00199 $out .= $enclosure.str_replace($enclosure, $enclosure.$enclosure, $item).$enclosure.$delim;
00200 }
00201 $out = rtrim($out);
00202 $out .= $newline;
00203 }
00204
00205 return $out;
00206 }
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218 function xml_from_result($query, $params = array())
00219 {
00220 if ( ! is_object($query) OR ! method_exists($query, 'field_names'))
00221 {
00222 show_error('You must submit a valid result object');
00223 }
00224
00225
00226 foreach (array('root' => 'root', 'element' => 'element', 'newline' => "\n", 'tab' => "\t") as $key => $val)
00227 {
00228 if ( ! isset($params[$key]))
00229 {
00230 $params[$key] = $val;
00231 }
00232 }
00233
00234
00235 extract($params);
00236
00237
00238 $CI =& get_instance();
00239 $CI->load->helper('xml');
00240
00241
00242 $xml = "<{$root}>".$newline;
00243 foreach ($query->result_array() as $row)
00244 {
00245 $xml .= $tab."<{$element}>".$newline;
00246
00247 foreach ($row as $key => $val)
00248 {
00249 $xml .= $tab.$tab."<{$key}>".xml_convert($val)."</{$key}>".$newline;
00250 }
00251 $xml .= $tab."</{$element}>".$newline;
00252 }
00253 $xml .= "</$root>".$newline;
00254
00255 return $xml;
00256 }
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266 function backup($params = array())
00267 {
00268
00269
00270
00271 if (is_string($params))
00272 {
00273 $params = array('tables' => $params);
00274 }
00275
00276
00277
00278
00279 $prefs = array(
00280 'tables' => array(),
00281 'ignore' => array(),
00282 'filename' => '',
00283 'format' => 'gzip',
00284 'add_drop' => TRUE,
00285 'add_insert' => TRUE,
00286 'newline' => "\n"
00287 );
00288
00289
00290 if (count($params) > 0)
00291 {
00292 foreach ($prefs as $key => $val)
00293 {
00294 if (isset($params[$key]))
00295 {
00296 $prefs[$key] = $params[$key];
00297 }
00298 }
00299 }
00300
00301
00302
00303
00304
00305 if (count($prefs['tables']) == 0)
00306 {
00307 $prefs['tables'] = $this->db->list_tables();
00308 }
00309
00310
00311
00312
00313 if ( ! in_array($prefs['format'], array('gzip', 'zip', 'txt'), TRUE))
00314 {
00315 $prefs['format'] = 'txt';
00316 }
00317
00318
00319
00320
00321
00322 if (($prefs['format'] == 'gzip' AND ! @function_exists('gzencode'))
00323 OR ($prefs['format'] == 'zip' AND ! @function_exists('gzcompress')))
00324 {
00325 if ($this->db->db_debug)
00326 {
00327 return $this->db->display_error('db_unsuported_compression');
00328 }
00329
00330 $prefs['format'] = 'txt';
00331 }
00332
00333
00334
00335
00336 if ($prefs['filename'] == '' AND $prefs['format'] == 'zip')
00337 {
00338 $prefs['filename'] = (count($prefs['tables']) == 1) ? $prefs['tables'] : $this->db->database;
00339 $prefs['filename'] .= '_'.date('Y-m-d_H-i', time());
00340 }
00341
00342
00343
00344
00345 if ($prefs['format'] == 'gzip')
00346 {
00347 return gzencode($this->_backup($prefs));
00348 }
00349
00350
00351
00352
00353 if ($prefs['format'] == 'txt')
00354 {
00355 return $this->_backup($prefs);
00356 }
00357
00358
00359
00360
00361 if ($prefs['format'] == 'zip')
00362 {
00363
00364 if (preg_match("|.+?\.zip$|", $prefs['filename']))
00365 {
00366 $prefs['filename'] = str_replace('.zip', '', $prefs['filename']);
00367 }
00368
00369
00370 if ( ! preg_match("|.+?\.sql$|", $prefs['filename']))
00371 {
00372 $prefs['filename'] .= '.sql';
00373 }
00374
00375
00376
00377 $CI =& get_instance();
00378 $CI->load->library('zip');
00379 $CI->zip->add_data($prefs['filename'], $this->_backup($prefs));
00380 return $CI->zip->get_zip();
00381 }
00382
00383 }
00384
00385 }
00386
00387
00388
00389