Anker aus der laufenden Definition, und ein Test, der sich selbst durchwinkt
All checks were successful
CI / Lint, Typen, Tests, Build (push) Successful in 11m33s
CI / Migrationen auf leerer Datenbank (push) Successful in 10m15s

Zwei Fehler aus dem ersten Lauf des Rauchtests, beide von mir.

Der Anker fuer transfer_employee stammte aus 20260727120200 und fand nichts:
die Funktion ist seither dynamisch gepatcht worden, die Belegungsabfrage ist
zweizeilig und beruecksichtigt den Stichtag. Dieselbe Falle wie immer, nur
diesmal nicht im Rumpf einer Funktion, sondern im Anker auf sie -- fuer
hire_employee und rehire_employee stimmten die Anker, weil sie aus der zuletzt
erzeugten Fassung kamen. Die Migration war nie angewendet (sie bricht als
Ganzes ab), deshalb die Datei korrigiert statt eine neue geschrieben.

Und der Rauchtest hat sich an einer Stelle selbst durchgewunken: das `raise`
fuer den Fehlschlag stand innerhalb des Blocks mit exception-Zweig, wurde also
vom eigenen Handler gefangen -- und weil seine Meldung das Wort "vorgemerkte"
enthielt, bestand die Pruefung auf die erwartete Fehlermeldung. Der Schritt
galt als bestanden, obwohl die Migration gar nicht angewendet war. Jetzt merkt
sich der Block nur, ob es ging, und ausgewertet wird danach.
This commit is contained in:
2026-09-29 19:24:58 +02:00
parent 194b6d8916
commit a0b9f6dc80
2 changed files with 28 additions and 8 deletions

View File

@@ -115,10 +115,20 @@ end
$migration$;
-- ═══ transfer_employee ════════════════════════════════════════════
--
-- Der Anker steht auf der zweiten Zeile der Belegungsabfrage. Die erste
-- Fassung dieser Migration zielte auf
--
-- where pa.position_id = v_target_position and pa.valid_to is null;
--
-- also auf den Wortlaut aus 20260727120200 — und fand nichts. Die Funktion ist
-- seither dynamisch gepatcht worden: die Abfrage ist zweizeilig und
-- berücksichtigt den Stichtag. Dieselbe Falle wie immer, nur diesmal nicht im
-- Rumpf einer Funktion, sondern im Anker auf sie.
do $migration$
declare
v_alt constant text := $anker$where pa.position_id = v_target_position and pa.valid_to is null;$anker$;
v_neu constant text := $anker$where pa.position_id = v_target_position and pa.valid_to is null;
v_alt constant text := $anker$and (pa.valid_to is null or pa.valid_to > v_effective);$anker$;
v_neu constant text := $anker$and (pa.valid_to is null or pa.valid_to > v_effective);
declare
v_vorgemerkt date := planstelle_vorgemerkt(v_target_position, v_effective, v_employee_id);