]> git.joonet.de Git - adminer.git/commitdiff
Optimize export speed
authorjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Fri, 28 Aug 2009 13:16:54 +0000 (13:16 +0000)
committerjakubvrana <jakubvrana@7c3ca157-0c34-0410-bff1-cbf682f78f5c>
Fri, 28 Aug 2009 13:16:54 +0000 (13:16 +0000)
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@1033 7c3ca157-0c34-0410-bff1-cbf682f78f5c

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

index 6ce59d7fdb4414761775851d595026fd07736d86..6966ab08fc317ca0f0c27988cbdc12384c70f576 100644 (file)
@@ -146,7 +146,6 @@ DROP PROCEDURE adminer_drop;
                        }
                }
        }
-       dump();
        exit;
 }
 
index 3bd3e4f37abe195e4461581b55e6af4dab341035..13f6d63585c8386aa6913108e73260c2726f4ec1 100644 (file)
@@ -1,5 +1,5 @@
 <?php
-//! memory consumption, speed
+//! memory consumption
 
 function dump_table($table, $style, $is_view = false) {
        global $dbh;
@@ -103,12 +103,15 @@ function dump_data($table, $style, $select = "") {
                $result = $dbh->query(($select ? $select : "SELECT * FROM " . idf_escape($table))); //! enum and set as numbers, microtime
                if ($result) {
                        $fields = fields($table);
-                       $length = 0;
+                       $insert = "";
+                       $buffer = "";
                        while ($row = $result->fetch_assoc()) {
                                if ($_POST["format"] == "csv") {
                                        dump_csv($row);
                                } else {
-                                       $insert = "INSERT INTO " . idf_escape($table) . " (" . implode(", ", array_map('idf_escape', array_keys($row))) . ") VALUES";
+                                       if (!$insert) {
+                                               $insert = "INSERT INTO " . idf_escape($table) . " (" . implode(", ", array_map('idf_escape', array_keys($row))) . ") VALUES";
+                                       }
                                        $row2 = array();
                                        foreach ($row as $key => $val) {
                                                $row2[$key] = (isset($val) ? (ereg('int|float|double|decimal', $fields[$key]["type"]) ? $val : $dbh->quote($val)) : "NULL"); //! columns looking like functions
@@ -122,23 +125,21 @@ function dump_data($table, $style, $select = "") {
                                                dump("$insert ($s) ON DUPLICATE KEY UPDATE " . implode(", ", $set) . ";\n");
                                        } else {
                                                $s = "\n($s)";
-                                               if (!$length) {
-                                                       dump($insert . $s);
-                                                       $length = strlen($insert) + strlen($s);
+                                               if (!$buffer) {
+                                                       $buffer = $insert . $s;
                                                } else {
-                                                       $length += 1 + strlen($s); // 1 - separator length
-                                                       if ($length < $max_packet) {
-                                                               dump(",$s");
+                                                       if (strlen($buffer) + 1 + strlen($s) < $max_packet) { // 1 - separator length
+                                                               $buffer .= ",$s";
                                                        } else {
-                                                               dump(";\n$insert$s");
-                                                               $length = strlen($insert) + strlen($s);
+                                                               dump("$buffer;\n");
+                                                               $buffer = $insert . $s;
                                                        }
                                                }
                                        }
                                }
                        }
-                       if ($_POST["format"] != "csv" && $style != "INSERT+UPDATE" && $result->num_rows) {
-                               dump(";\n");
+                       if ($_POST["format"] != "csv" && $style != "INSERT+UPDATE" && $buffer) {
+                               dump("$buffer;\n");
                        }
                }
        }
@@ -151,8 +152,6 @@ function dump_headers($identifier, $multi_table = false) {
        if ($_POST["output"] == "file" || $_POST["compress"]) {
                header("Content-Disposition: attachment; filename=$filename.$ext" . ($_POST["compress"] == "gz" ? ".gz" : ""));
        }
-       ob_flush();
-       flush();
        return $ext;
 }
 
index 6eb7caad0bdda42c8478630f4842f6a0f92df6ed..6dd971c40a6c638823f74e1504fe33217da925f3 100644 (file)
@@ -360,14 +360,9 @@ function process_input($field) {
        }
 }
 
-function dump($string = null) { // null $string forces sending of buffer
-       static $buffer = "";
+function dump($string) {
        if ($_POST["compress"] == "gz") {
-               $buffer .= $string;
-               if (!isset($string) || strlen($buffer) > 1e6) {
-                       echo gzencode($buffer);
-                       $buffer = "";
-               }
+               echo gzencode($string);
        } else {
                echo $string;
        }
index 3f7754cfd793ae48518744954831e9907b23d846..9bf4882e9e6e39fb2d50fcd7027116aa8b645866 100644 (file)
@@ -48,7 +48,6 @@ if ($_POST && !$error) {
                        }
                        dump_data($_GET["select"], "INSERT", implode(" UNION ALL ", $union));
                }
-               dump();
                exit;
        }
        if (!$adminer->selectEmailProcess($where)) {