getDriverName() !== 'pgsql' || ! preg_match('/^(compras_receipts_test_|payable_sgf_)[a-f0-9]{12}$/D', $db->getDatabaseName()) || $db->selectOne('select current_database() as d')->d !== $db->getDatabaseName()) { throw new LogicException('Payables schema refused outside isolated QA.'); } // Compras migrations now install the same shared schema before QA fixtures. if (Schema::hasTable('pa_sources')) { foreach (['pa_access', 'pa_sources', 'pa_proposals', 'pa_obligations', 'pa_commands', 'pa_events', 'pa_outbox'] as $table) { if (! Schema::hasTable($table)) { throw new LogicException('Incomplete payables schema; no automatic repair.'); } } $triggers = DB::selectOne("select count(*) as n from pg_trigger where tgname='pa_history_immutable' and tgrelid in ('pa_sources'::regclass,'pa_proposals'::regclass,'pa_obligations'::regclass,'pa_commands'::regclass,'pa_events'::regclass,'pa_outbox'::regclass)"); if ((int) $triggers->n !== 6) { throw new LogicException('Payables append-only protection missing.'); } return; } require_once __DIR__.'/src/PayablesSchema.php'; PayablesSchema::install();