mirror of
https://github.com/dg/dibi.git
synced 2025-07-31 19:30:30 +02:00
Helpers::loadFromFile added $onProgress
This commit is contained in:
@@ -614,11 +614,12 @@ class Connection
|
||||
/**
|
||||
* Import SQL dump from file.
|
||||
* @param string filename
|
||||
* @param callable function (int $count, ?float $percent): void
|
||||
* @return int count of sql commands
|
||||
*/
|
||||
public function loadFile($file)
|
||||
public function loadFile($file, callable $onProgress = NULL)
|
||||
{
|
||||
return Helpers::loadFromFile($this, $file);
|
||||
return Helpers::loadFromFile($this, $file, $onProgress);
|
||||
}
|
||||
|
||||
|
||||
|
@@ -238,7 +238,7 @@ class Helpers
|
||||
* Import SQL dump from file.
|
||||
* @return int count of sql commands
|
||||
*/
|
||||
public static function loadFromFile(Connection $connection, $file)
|
||||
public static function loadFromFile(Connection $connection, $file, callable $onProgress = NULL)
|
||||
{
|
||||
@set_time_limit(0); // intentionally @
|
||||
|
||||
@@ -247,11 +247,13 @@ class Helpers
|
||||
throw new \RuntimeException("Cannot open file '$file'.");
|
||||
}
|
||||
|
||||
$count = 0;
|
||||
$stat = fstat($handle);
|
||||
$count = $size = 0;
|
||||
$delimiter = ';';
|
||||
$sql = '';
|
||||
$driver = $connection->getDriver();
|
||||
while (($s = fgets($handle)) !== FALSE) {
|
||||
$size += strlen($s);
|
||||
if (strtoupper(substr($s, 0, 10)) === 'DELIMITER ') {
|
||||
$delimiter = trim(substr($s, 10));
|
||||
|
||||
@@ -260,6 +262,9 @@ class Helpers
|
||||
$driver->query($sql);
|
||||
$sql = '';
|
||||
$count++;
|
||||
if ($onProgress) {
|
||||
call_user_func($onProgress, $count, isset($stat['size']) ? $size * 100 / $stat['size'] : NULL);
|
||||
}
|
||||
|
||||
} else {
|
||||
$sql .= $s;
|
||||
@@ -269,6 +274,9 @@ class Helpers
|
||||
if (rtrim($sql) !== '') {
|
||||
$driver->query($sql);
|
||||
$count++;
|
||||
if ($onProgress) {
|
||||
call_user_func($onProgress, $count, isset($stat['size']) ? 100 : NULL);
|
||||
}
|
||||
}
|
||||
fclose($handle);
|
||||
return $count;
|
||||
|
Reference in New Issue
Block a user