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