addArgument('file', InputArgument::REQUIRED, 'O caminho do arquivo SQL a ser importado'); } protected function execute(InputInterface $input, OutputInterface $output): int { $file = $input->getArgument('file'); if (!file_exists($file)) { $output->writeln("Arquivo não encontrado: {$file}"); return Command::FAILURE; } $output->writeln("Importando arquivo: {$file}"); try { $sql = file_get_contents($file); if (!$sql) { $output->writeln("Falha ao ler o arquivo SQL ou arquivo vazio."); return Command::FAILURE; } $connection = Capsule::connection(); $queries = $this->splitSqlQueries($sql); $totalQueries = count($queries); $successCount = 0; $output->writeln("Total de queries encontradas: {$totalQueries}"); foreach ($queries as $index => $query) { $query = trim($query); if (empty($query)) { continue; } try { $connection->statement($query); $successCount++; $output->writeln("Query " . ($index + 1) . "/{$totalQueries} executada com sucesso"); } catch (\Exception $e) { $output->writeln("Erro na query " . ($index + 1) . ": " . $e->getMessage() . ""); $output->writeln("Query: " . substr($query, 0, 100) . "..."); } } $output->writeln("Importação concluída. {$successCount}/{$totalQueries} queries executadas com sucesso."); return Command::SUCCESS; } catch (\Exception $e) { $output->writeln("Erro ao importar arquivo: " . $e->getMessage() . ""); return Command::FAILURE; } } private function splitSqlQueries(string $sql): array { $queries = []; $current = ''; $inString = false; $stringChar = ''; $length = strlen($sql); for ($i = 0; $i < $length; $i++) { $char = $sql[$i]; if (($char === "'" || $char === '"') && ($i === 0 || $sql[$i - 1] !== '\\')) { if (!$inString) { $inString = true; $stringChar = $char; } elseif ($char === $stringChar) { $inString = false; } } if (!$inString && $char === ';') { $queries[] = trim($current); $current = ''; } else { $current .= $char; } } $current = trim($current); if (!empty($current)) { $queries[] = $current; } return array_filter($queries, function($query) { return !empty(trim($query)); }); } }