-- Klammern in hire_employee.
--
-- Der Protokolleintrag baute den Namen so:
--
--     payload->>'first_name' || ' ' || payload->>'last_name'
--
-- In PostgreSQL bindet `||` **stärker** als `->>`. Gelesen wird also
--
--     payload ->> ('first_name' || ' ' || payload) ->> 'last_name'
--
-- und das endet in „operator does not exist: text ->> unknown". Jede
-- Neueinstellung scheiterte daran.
--
-- Warum es niemandem auffiel: davor stand in derselben Anweisung ein Aufruf
-- von auth.uid(). Die Rechteprüfung auf das Schema `auth` schlug schon
-- während der Analyse fehl, und der Parser kam nie bis zu diesem Ausdruck.
-- Ein Fehler hat den anderen verdeckt — beide mussten weg, damit eine
-- Einstellung durchläuft.

do $$
declare
  v_def text;
  v_alt constant text := 'payload->>''first_name'' || '' '' || payload->>''last_name''';
  v_neu constant text := '(payload->>''first_name'') || '' '' || (payload->>''last_name'')';
begin
  select pg_get_functiondef(p.oid) into v_def
    from pg_proc p
    join pg_namespace n on n.oid = p.pronamespace
   where n.nspname = 'public' and p.proname = 'hire_employee'
   limit 1;

  if v_def is null then
    raise exception 'hire_employee() nicht gefunden.';
  end if;

  if position(v_alt in v_def) = 0 then
    raise notice 'hire_employee(): bereits geklammert.';
  else
    execute replace(v_def, v_alt, v_neu);
    raise notice 'hire_employee(): geklammert.';
  end if;
end;
$$;

-- ═══ Gegenprobe ══════════════════════════════════════════════════
-- Der Ausdruck selbst, in beiden Lesarten. Ohne Klammern wirft er; mit
-- Klammern kommt der Name heraus. Das hält die Regel fest, damit sie beim
-- nächsten Mal nicht neu entdeckt werden muss.
do $$
declare
  v_payload jsonb := '{"first_name": "Anna", "last_name": "Berger"}'::jsonb;
  v_name text;
begin
  v_name := (v_payload->>'first_name') || ' ' || (v_payload->>'last_name');
  if v_name <> 'Anna Berger' then
    raise exception 'Geklammert ergibt „%" statt „Anna Berger".', v_name;
  end if;

  begin
    execute $probe$ select ('{"a":"x"}'::jsonb)->>'a' || ' ' || ('{"a":"x"}'::jsonb)->>'a' $probe$;
    raise exception 'Ungeklammert wirft nicht mehr — die Vorrangregel hat sich geändert, die Prüfung ist wertlos geworden.';
  exception
    when undefined_function then null;  -- erwartet: text ->> unknown
  end;
end;
$$;
