]> git.joonet.de Git - adminer.git/commitdiff
Bzip2 compression
authorjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Fri, 28 Aug 2009 14:44:43 +0000 (14:44 +0000)
committerjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Fri, 28 Aug 2009 14:44:43 +0000 (14:44 +0000)
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1036 7c3ca157-0c34-0410-bff1-cbf682f78f5c

adminer/dump.inc.php
adminer/include/export.inc.php
adminer/include/functions.inc.php
adminer/select.inc.php

index 6966ab08fc317ca0f0c27988cbdc12384c70f576..c6baa49ba64a9679282b277fbe37d1e848d9370b 100644 (file)
@@ -146,6 +146,7 @@ DROP PROCEDURE adminer_drop;
                        }
                }
        }
+       dump();
        exit;
 }
 
@@ -164,7 +165,7 @@ if ($dbh->server_info >= 5) {
 }
 echo "<tr><th>" . lang('Output') . "<td><input type='hidden' name='token' value='$token'>$dump_output\n"; // token is not needed but checked in bootstrap for all POST data
 echo "<tr><th>" . lang('Format') . "<td>$dump_format\n";
-echo "<tr><th>" . lang('Compression') . "<td>" . ($dump_compress ? $dump_compress : lang('None of the supported PHP extensions (%s) are available.', 'zlib')) . "\n";
+echo "<tr><th>" . lang('Compression') . "<td>" . ($dump_compress ? $dump_compress : lang('None of the supported PHP extensions (%s) are available.', 'zlib, bz2')) . "\n";
 echo "<tr><th>" . lang('Database') . "<td><select name='db_style'>" . optionlist($db_style, (strlen($_GET["db"]) ? '' : 'CREATE')) . "</select>\n";
 echo "<tr><th>" . lang('Tables') . "<td><select name='table_style'>" . optionlist($table_style, 'DROP+CREATE') . "</select>\n";
 echo "<tr><th>" . lang('Data') . "<td><select name='data_style'>" . optionlist($data_style, 'INSERT') . "</select>\n";
index 13f6d63585c8386aa6913108e73260c2726f4ec1..2cdced7cb9df96ed034b04fa05caee842c1be1c7 100644 (file)
@@ -127,39 +127,47 @@ function dump_data($table, $style, $select = "") {
                                                $s = "\n($s)";
                                                if (!$buffer) {
                                                        $buffer = $insert . $s;
+                                               } elseif (strlen($buffer) + 1 + strlen($s) < $max_packet) { // 1 - separator length
+                                                       $buffer .= ",$s";
                                                } else {
-                                                       if (strlen($buffer) + 1 + strlen($s) < $max_packet) { // 1 - separator length
-                                                               $buffer .= ",$s";
-                                                       } else {
-                                                               dump("$buffer;\n");
-                                                               $buffer = $insert . $s;
-                                                       }
+                                                       $buffer .= ";\n";
+                                                       dump($buffer);
+                                                       $buffer = $insert . $s;
                                                }
                                        }
                                }
                        }
                        if ($_POST["format"] != "csv" && $style != "INSERT+UPDATE" && $buffer) {
-                               dump("$buffer;\n");
+                               $buffer .= ";\n";
+                               dump($buffer);
                        }
                }
        }
 }
 
 function dump_headers($identifier, $multi_table = false) {
+       $compress = $_POST["compress"];
        $filename = (strlen($identifier) ? friendly_url($identifier) : "dump");
        $ext = ($_POST["format"] == "sql" ? "sql" : ($multi_table ? "tar" : "csv")); // multiple CSV packed to TAR
-       header("Content-Type: " . ($_POST["compress"] == "gz" ? "application/x-gzip" : ($ext == "tar" ? "application/x-tar" : ($ext == "sql" || $_POST["output"] != "file" ? "text/plain" : "text/csv")) . "; charset=utf-8"));
-       if ($_POST["output"] == "file" || $_POST["compress"]) {
-               header("Content-Disposition: attachment; filename=$filename.$ext" . ($_POST["compress"] == "gz" ? ".gz" : ""));
+       header("Content-Type: " .
+               ($compress == "bz2" ? "application/x-bzip" :
+               ($compress == "gz" ? "application/x-gzip" :
+               ($ext == "tar" ? "application/x-tar" :
+               ($ext == "sql" || $_POST["output"] != "file" ? "text/plain" : "text/csv") . "; charset=utf-8"
+       ))));
+       if ($_POST["output"] == "file" || $compress) {
+               header("Content-Disposition: attachment; filename=$filename.$ext" . (ereg('[0-9a-z]', $compress) ? ".$compress" : ""));
        }
        return $ext;
 }
 
 $compress = array();
 if (function_exists('gzencode')) {
-       $compress['gz'] = 'GZIP';
+       $compress['gz'] = 'gzip';
+}
+if (function_exists('bzcompress')) {
+       $compress['bz2'] = 'bzip2';
 }
-// bzcompress can't be called repetitively, bzopen requires temporary file
 // ZipArchive requires temporary file, ZIP can be created by gzcompress - see PEAR File_Archive
 $dump_output = "<select name='output'>" . optionlist(array('text' => lang('open'), 'file' => lang('save'))) . "</select>";
 $dump_format = "<select name='format'>" . optionlist(array('sql' => 'SQL', 'csv' => 'CSV')) . "</select>";
index 6dd971c40a6c638823f74e1504fe33217da925f3..8318968f441a2388d427bbca53a787f5c8c1b803 100644 (file)
@@ -360,9 +360,18 @@ function process_input($field) {
        }
 }
 
-function dump($string) {
-       if ($_POST["compress"] == "gz") {
-               echo gzencode($string);
+function dump($string = null) { // null $string forces sending of buffer
+       static $buffer = ""; // used to improve compression and to allow GZ archives unpackable in Total Commander
+       if ($_POST["compress"]) {
+               $buffer .= $string;
+               if (!isset($string) || strlen($buffer) > 1e6) {
+                       if ($_POST["compress"] == "bz2") {
+                               echo bzcompress($buffer); // should not be called repeatedly but it would require whole buffer in memory or temporary file
+                       } else {
+                               echo gzencode($buffer);
+                       }
+                       $buffer = "";
+               }
        } else {
                echo $string;
        }
index 9bf4882e9e6e39fb2d50fcd7027116aa8b645866..3f7754cfd793ae48518744954831e9907b23d846 100644 (file)
@@ -48,6 +48,7 @@ if ($_POST && !$error) {
                        }
                        dump_data($_GET["select"], "INSERT", implode(" UNION ALL ", $union));
                }
+               dump();
                exit;
        }
        if (!$adminer->selectEmailProcess($where)) {