databaseManager->getConnection($sourceConnection); $targetConn = $this->databaseManager->getConnection($targetConnection); // Compare the schemas $comparator = new SchemaComparator($sourceConn, $targetConn); $difference = $comparator->compare($sourceSchema, $targetSchema); if (! $difference->hasDifferences()) { echo "No schema differences found.\n"; return ExitCode::SUCCESS; } // Display a summary of the differences echo "Schema Difference Summary:\n"; echo str_repeat('-', 80) . "\n"; $summary = $difference->getSummary(); echo "Source schema: " . ($difference->sourceSchema ?? 'default') . "\n"; echo "Target schema: " . ($difference->targetSchema ?? 'default') . "\n"; echo "\n"; echo "Missing tables: {$summary['missing_tables']}\n"; echo "Extra tables: {$summary['extra_tables']}\n"; echo "Modified tables: " . count($difference->tableDifferences) . "\n"; if ($detailed) { echo "\nDetailed Differences:\n"; echo str_repeat('-', 80) . "\n"; // Display missing tables if (! empty($difference->missingTables)) { echo "\nMissing Tables (in target):\n"; foreach (array_keys($difference->missingTables) as $tableName) { echo " - {$tableName}\n"; } } // Display extra tables if (! empty($difference->extraTables)) { echo "\nExtra Tables (in target):\n"; foreach (array_keys($difference->extraTables) as $tableName) { echo " - {$tableName}\n"; } } // Display table differences if (! empty($difference->tableDifferences)) { echo "\nTable Differences:\n"; foreach ($difference->tableDifferences as $tableDiff) { echo "\n" . $tableDiff->getDescription(); } } } else { echo "\nFor detailed differences, use the --detailed flag.\n"; } return ExitCode::SUCCESS; } catch (\Throwable $e) { echo "Error comparing schemas: {$e->getMessage()}\n"; if (isset($_ENV['APP_DEBUG']) && $_ENV['APP_DEBUG']) { echo $e->getTraceAsString() . "\n"; } return ExitCode::SOFTWARE_ERROR; } } }