X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=admin%2Fdb%2Fmaintenance_db.inc;h=ea9b84ff1089d08b4906e5dd857c07f8fc902c0a;hb=e4d4ced43ebacbfd1a11022dc9711c3fcc5f1e71;hp=5ce47443dd6e23ca7f1401eb042734be013c461b;hpb=ff52c8193fbfd4c616599d360c2f062a38e18bc6;p=fa-stable.git diff --git a/admin/db/maintenance_db.inc b/admin/db/maintenance_db.inc index 5ce47443..ea9b84ff 100644 --- a/admin/db/maintenance_db.inc +++ b/admin/db/maintenance_db.inc @@ -18,6 +18,8 @@ * @param $strSortType String containing either asc or desc [default to asc] * @desc Naturally sorts an array using by the column $strSortBy */ +define('EXPORT_MAX_INSERT', 50000); + function array_natsort($aryData, $strIndex, $strSortBy, $strSortType=false) { // if the parameters are invalid @@ -178,7 +180,7 @@ function update_extensions($extensions) { } // update per company files - $cnt = count($db_connections); + $cnt = max(1, count($db_connections)); for($i = 0; $i < $cnt; $i++) { $newexts = $extensions; @@ -253,7 +255,9 @@ function write_lang() function db_import($filename, $connection, $force=true) { - global $db, $go_debug; + global $db, $go_debug, $sql_trail; + + $sql_trail = false; $allowed_commands = array( "create" => 'table_queries', @@ -280,10 +284,12 @@ function db_import($filename, $connection, $force=true) ini_set("max_execution_time", "180"); db_query("SET foreign_key_checks=0"); + $check_line_end = false; // uncrompress gziped backup files if (strpos($filename, ".gz") || strpos($filename, ".GZ")) - $lines = db_ungzip("lines", $filename); - elseif (strpos($filename, ".zip") || strpos($filename, ".ZIP")) + { $lines = db_ungzip("lines", $filename); + $check_line_len = true; + } elseif (strpos($filename, ".zip") || strpos($filename, ".ZIP")) $lines = db_unzip("lines", $filename); else $lines = file("". $filename); @@ -293,16 +299,16 @@ function db_import($filename, $connection, $force=true) $delimiter = ';'; foreach($lines as $line_no => $line) { + $gzfile_bug = $check_line_len && (strlen($line) == 8190); // there is a bug in php (at least 4.1.1-5.5.9) gzfile which limits line length to 8190 bytes! + $line = trim($line); - $line = str_replace("0_", $connection["tbpref"], $line); if ($query_table == '') { // check if line begins with one of allowed queries foreach($allowed_commands as $cmd => $table) { -// if (strtolower(substr($line, 0, strlen($cmd))) == $cmd) - if (stripos($line, $cmd) === 0) + if (strtolower(substr($line, 0, strlen($cmd))) == $cmd) { if ($cmd == 'delimiter') { $delimiter = trim(substr($line, 10)); @@ -317,8 +323,7 @@ function db_import($filename, $connection, $force=true) if($query_table != '') // inside allowed query { $table = $query_table; - - if (substr($line, -strlen($delimiter)) == $delimiter) // end of query found + if (!$gzfile_bug && substr($line, -strlen($delimiter)) == $delimiter) // end of query found { $line = substr($line, 0, strlen($line) - strlen($delimiter)); // strip delimiter $query_table = ''; @@ -327,7 +332,7 @@ function db_import($filename, $connection, $force=true) } } - +/* { // for debugging purposes global $path_to_root; $f = fopen($path_to_root.'/tmp/dbimport.txt', 'w+'); @@ -336,7 +341,7 @@ function db_import($filename, $connection, $force=true) fwrite($f, print_r($data_queries,true)); fclose($f); } - +*/ // execute drop tables if exists queries if (is_array($drop_queries)) { @@ -376,7 +381,7 @@ function db_import($filename, $connection, $force=true) } } } - + db_query("SET foreign_key_checks=1"); if ($delimiter != ';') db_query("delimiter ;"); // just for any case @@ -554,12 +559,12 @@ function db_export($conn, $filename, $zip='no', $comment='', $tbpref = TB_PREF, // if ($auto_incr[$tablename]) // $out.=" AUTO_INCREMENT=".$auto_incr[$tablename]; $out.=" ;"; - $out.="\n\n\n"; + $out.="\n\n"; // export data if (!$error) { - $out.="### Data of table `".$tablename."` ###\n\n"; + $out.="### Data of table `".$tablename."` ###\n"; // check if field types are NULL or NOT NULL $res3 = db_query("SHOW COLUMNS FROM `" . $tablename . "`"); @@ -572,18 +577,40 @@ function db_export($conn, $filename, $zip='no', $comment='', $tbpref = TB_PREF, } $res2 = db_query("SELECT * FROM `" . $tablename . "`"); + $maxinsert = 0; + $insert = ''; for ($j = 0; $j < db_num_rows($res2); $j++) { - $out .= "INSERT INTO `" . $tablename . "` VALUES ("; $row2 = db_fetch_row($res2); - // run through each field + $values = '('; for ($k = 0; $k < $nf = db_num_fields($res2); $k++) { - $out .= db_escape($row2[$k], $field_null[$k]); + $values .= db_escape($row2[$k], $field_null[$k]); if ($k < ($nf - 1)) - $out .= ", "; + $values .= ', '; + } + $values .= ')'; + $len = strlen($values); + if ($maxinsert < $len+1) + { + $maxinsert = EXPORT_MAX_INSERT; + if ($insert) + { + $out .= $insert .';'; // flush insert query + $insert = ''; + } } - $out .= ");\n"; + + if ($insert == '') + { + $insert = "\nINSERT INTO `" . $tablename . "` VALUES\n"; + $maxinsert -= strlen($insert); + } else { + $insert .= ",\n"; + } + + $maxinsert -= $len; + $insert .= $values; // if saving is successful, then empty $out, else set error flag if (strlen($out) > $max_size && $zip != "zip") @@ -594,7 +621,8 @@ function db_export($conn, $filename, $zip='no', $comment='', $tbpref = TB_PREF, $error = true; } } - + if ($insert) + $out .= $insert. ';'; // an error occurred! Try to delete file and return error status } elseif ($error)