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