Constraint memory used in TAR export

This commit is contained in:
Jakub Vrana 2013-05-01 09:33:23 -07:00
parent 17a8495c2e
commit 601cdd43c1
6 changed files with 33 additions and 9 deletions

View file

@ -71,7 +71,8 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
$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)) {
@ -84,7 +85,8 @@ SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
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";
}

View file

@ -409,13 +409,13 @@ 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]);
@ -423,8 +423,8 @@ function tar_file($filename, $contents) {
$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

View file

@ -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);
}
}

View file

@ -8,6 +8,7 @@
*/
include "./include/bootstrap.inc.php";
include "./include/tmpfile.inc.php";
$enum_length = "'(?:''|[^'\\\\]|\\\\.)*+'";
$inout = "IN|OUT|INOUT";

View file

@ -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

View file

@ -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