Skip to content

Commit

Permalink
Constraint memory used in TAR export
Browse files Browse the repository at this point in the history
  • Loading branch information
vrana committed May 1, 2013
1 parent 17a8495 commit 601cdd4
Show file tree
Hide file tree
Showing 6 changed files with 33 additions and 9 deletions.
6 changes: 4 additions & 2 deletions adminer/dump.inc.php
Expand Up @@ -71,7 +71,8 @@
$data = (DB == "" || in_array($name, (array) $_POST["data"]));
if ($table || $data) {
if ($ext == "tar") {
ob_start();
$tmp_file = new TmpFile;
ob_start(array($tmp_file, 'write'), 1e5);
}
$adminer->dumpTable($name, ($table ? $_POST["table_style"] : ""), (is_view($table_status) ? 2 : 0));
if (is_view($table_status)) {
Expand All @@ -84,7 +85,8 @@
echo "\nDELIMITER ;;\n$triggers\nDELIMITER ;\n";
}
if ($ext == "tar") {
tar_file((DB != "" ? "" : "$db/") . "$name.csv", ob_get_clean());
ob_end_flush();
tar_file((DB != "" ? "" : "$db/") . "$name.csv", $tmp_file);
} elseif ($is_sql) {
echo "\n";
}
Expand Down
12 changes: 6 additions & 6 deletions adminer/include/editing.inc.php
Expand Up @@ -409,22 +409,22 @@ function remove_definer($query) {
return preg_replace('~^([A-Z =]+) DEFINER=`' . preg_replace('~@(.*)~', '`@`(%|\\1)', logged_user()) . '`~', '\\1', $query); //! proper escaping of user
}

/** Get string to add a file in TAR
* @param string
/** Add a file to TAR
* @param string
* @param TmpFile
* @return null prints the output
*/
function tar_file($filename, $contents) {
$return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct(strlen($contents)), decoct(time()));
function tar_file($filename, $tmp_file) {
$return = pack("a100a8a8a8a12a12", $filename, 644, 0, 0, decoct($tmp_file->size), decoct(time()));
$checksum = 8*32; // space for checksum itself
for ($i=0; $i < strlen($return); $i++) {
$checksum += ord($return[$i]);
}
$return .= sprintf("%06o", $checksum) . "\0 ";
echo $return;
echo str_repeat("\0", 512 - strlen($return));
echo $contents;
echo str_repeat("\0", 511 - (strlen($contents) + 511) % 512);
$tmp_file->send();
echo str_repeat("\0", 511 - ($tmp_file->size + 511) % 512);
}

/** Get INI bytes value
Expand Down
21 changes: 21 additions & 0 deletions adminer/include/tmpfile.inc.php
@@ -0,0 +1,21 @@
<?php

class TmpFile {
var $handler;
var $size;

function TmpFile() {
$this->handler = tmpfile();
}

function write($contents) {
$this->size += strlen($contents);
fwrite($this->handler, $contents);
}

function send() {
fseek($this->handler, 0);
fpassthru($this->handler);
fclose($this->handler);
}
}
1 change: 1 addition & 0 deletions adminer/index.php
Expand Up @@ -8,6 +8,7 @@
*/

include "./include/bootstrap.inc.php";
include "./include/tmpfile.inc.php";

$enum_length = "'(?:''|[^'\\\\]|\\\\.)*+'";
$inout = "IN|OUT|INOUT";
Expand Down
1 change: 1 addition & 0 deletions changes.txt
Expand Up @@ -4,6 +4,7 @@ Print run time next to executed queries
Disable SQL export when applying functions in select
Allow using lang() in plugins (customization)
Remove bzip2 compression support
Constraint memory used in TAR export
Allow exporting views dependent on each other (bug #3459151)
MySQL: Optimize create table page and Editor navigation
MySQL: Display bit type as binary number
Expand Down
1 change: 0 additions & 1 deletion todo.txt
Expand Up @@ -4,7 +4,6 @@ Variables editation
Blob download and image display in edit form (important for Editor with hidden fields in select and SQL command)
Add title to Logout, edit (in select) and select (in menu) for style "hever"
Export by GET parameters
Files are missing in TAR due to exhausted memory - can be fixed by creating a temporary file
Draggable columns in alter table (thanks to Michal Manak)
<option class> for system databases and schemas - information_schema and driver-specific (thanks to Vaclav Novotny)
Define foreign keys name - http://forum.zdrojak.root.cz/index.php?topic=185.msg1255#msg1255
Expand Down

0 comments on commit 601cdd4

Please sign in to comment.