schedule-version-precision.sql 1008 B

123456789101112131415161718
  1. -- Patch only the version predicates, retaining deployed function hotfixes.
  2. -- API updatedAt uses JavaScript Date, which truncates PostgreSQL microseconds.
  3. DO $$
  4. DECLARE fn regprocedure; definition text; old_predicate text; new_predicate text;
  5. BEGIN
  6. FOREACH fn IN ARRAY ARRAY[
  7. 'xs_schedule_save(text,text,jsonb,jsonb,text,text,text)'::regprocedure,
  8. 'xs_schedule_cancel(text,text,boolean,text,text,text)'::regprocedure
  9. ] LOOP
  10. definition=pg_get_functiondef(fn);
  11. old_predicate=CASE WHEN fn::text LIKE 'xs_schedule_save(%' THEN 'old_c."updatedAt"<>expected::timestamptz' ELSE 'c."updatedAt"<>expected::timestamptz' END;
  12. new_predicate=replace(old_predicate,'<>expected',')<>expected');
  13. new_predicate='date_trunc(''milliseconds'','||new_predicate;
  14. IF strpos(definition,new_predicate)>0 THEN CONTINUE;END IF;
  15. IF strpos(definition,old_predicate)=0 THEN RAISE EXCEPTION 'Unknown schedule version predicate: %',fn;END IF;
  16. EXECUTE replace(definition,old_predicate,new_predicate);
  17. END LOOP;
  18. END $$;