@@ -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,12 +189,14 @@ 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 (!feof ($ handle )) {
196198 $ s = (string ) fgets ($ handle );
199+ $ size += strlen ($ s );
197200 if (!strncasecmp ($ s , 'DELIMITER ' , 10 )) {
198201 $ delimiter = trim (substr ($ s , 10 ));
199202
@@ -202,6 +205,9 @@ public static function loadFromFile(Connection $connection, $file): int
202205 $ pdo ->exec ($ sql );
203206 $ sql = '' ;
204207 $ count ++;
208+ if ($ onProgress ) {
209+ $ onProgress ($ count , isset ($ stat ['size ' ]) ? $ size * 100 / $ stat ['size ' ] : NULL );
210+ }
205211
206212 } else {
207213 $ sql .= $ s ;
@@ -210,6 +216,9 @@ public static function loadFromFile(Connection $connection, $file): int
210216 if (rtrim ($ sql ) !== '' ) {
211217 $ pdo ->exec ($ sql );
212218 $ count ++;
219+ if ($ onProgress ) {
220+ $ onProgress ($ count , isset ($ stat ['size ' ]) ? 100 : NULL );
221+ }
213222 }
214223 fclose ($ handle );
215224 return $ count ;
0 commit comments