Skip to content

Commit 2c000fe

Browse files
committed
Helpers::loadFromFile added $onProgress
1 parent 6f1637a commit 2c000fe

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/Database/Helpers.php

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,10 @@ public static function detectType(string $type): string
177177

178178
/**
179179
* Import SQL dump from file - extremely fast.
180+
* @param $onProgress function (int $count, ?float $percent): void
180181
* @return int count of commands
181182
*/
182-
public static function loadFromFile(Connection $connection, $file): int
183+
public static function loadFromFile(Connection $connection, string $file, callable $onProgress = NULL): int
183184
{
184185
@set_time_limit(0); // @ function may be disabled
185186

@@ -188,11 +189,13 @@ public static function loadFromFile(Connection $connection, $file): int
188189
throw new Nette\FileNotFoundException("Cannot open file '$file'.");
189190
}
190191

191-
$count = 0;
192+
$stat = fstat($handle);
193+
$count = $size = 0;
192194
$delimiter = ';';
193195
$sql = '';
194196
$pdo = $connection->getPdo(); // native query without logging
195197
while (($s = fgets($handle)) !== FALSE) {
198+
$size += strlen($s);
196199
if (!strncasecmp($s, 'DELIMITER ', 10)) {
197200
$delimiter = trim(substr($s, 10));
198201

@@ -201,6 +204,9 @@ public static function loadFromFile(Connection $connection, $file): int
201204
$pdo->exec($sql);
202205
$sql = '';
203206
$count++;
207+
if ($onProgress) {
208+
$onProgress($count, isset($stat['size']) ? $size * 100 / $stat['size'] : NULL);
209+
}
204210

205211
} else {
206212
$sql .= $s;
@@ -209,6 +215,9 @@ public static function loadFromFile(Connection $connection, $file): int
209215
if (rtrim($sql) !== '') {
210216
$pdo->exec($sql);
211217
$count++;
218+
if ($onProgress) {
219+
$onProgress($count, isset($stat['size']) ? 100 : NULL);
220+
}
212221
}
213222
fclose($handle);
214223
return $count;

0 commit comments

Comments
 (0)