38 lines
2.1 KiB
PHP
38 lines
2.1 KiB
PHP
<?php
|
|
|
|
use Illuminate\Contracts\Console\Kernel;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
require __DIR__.'/../vendor/autoload.php';
|
|
$app = require __DIR__.'/../bootstrap/app.php';
|
|
$app->make(Kernel::class)->bootstrap();
|
|
$db = DB::connection();
|
|
$baseline = isset($argv[1]) ? json_decode(file_get_contents($argv[1]), true, 512, JSON_THROW_ON_ERROR) : null;
|
|
$report = $db->transaction(function () use ($db, $baseline): array {
|
|
$db->statement('SET TRANSACTION ISOLATION LEVEL REPEATABLE READ, READ ONLY');
|
|
$counts = [];
|
|
foreach ($db->select("SELECT tablename FROM pg_tables WHERE schemaname='skills_edu' ORDER BY tablename") as $table) {
|
|
$counts[$table->tablename] = $db->table('skills_edu.'.$table->tablename)->count();
|
|
}
|
|
|
|
$differences = [];
|
|
foreach ($baseline['row_counts'] ?? [] as $table => $before) {
|
|
$expected = $before + ($table === 'public.migrations' ? 6 : 0);
|
|
$actual = $db->table($table)->count();
|
|
if ($actual !== $expected) {
|
|
$differences[$table] = ['expected' => $expected, 'actual' => $actual];
|
|
}
|
|
}
|
|
|
|
return ['server' => $db->selectOne('SHOW server_version')->server_version,
|
|
'baseline_tables_checked' => count($baseline['row_counts'] ?? []), 'baseline_differences' => $differences,
|
|
'tables' => $counts, 'table_count' => count($counts),
|
|
'foreign_keys' => (int) $db->selectOne("SELECT count(*) AS n FROM pg_constraint c JOIN pg_namespace ns ON ns.oid=c.connamespace WHERE ns.nspname='skills_edu' AND c.contype='f'")->n,
|
|
'indexes' => $db->table('pg_indexes')->where('schemaname', 'skills_edu')->count(),
|
|
'registered_migrations' => $db->table('migrations')->where('migration', 'like', '2026_09_30_%_skills_education_%')->count(),
|
|
'sql_sha256' => array_combine(array_map('basename', glob(database_path('sql/skills-education/*.sql'))), array_map(fn ($file) => hash_file('sha256', $file), glob(database_path('sql/skills-education/*.sql')))),
|
|
];
|
|
});
|
|
echo json_encode($report, JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR).PHP_EOL;
|
|
exit($report['table_count'] === 24 && $report['registered_migrations'] === 6 && $report['baseline_differences'] === [] ? 0 : 1);
|