--
-- This file is part of TALER
-- Copyright (C) 2026 Taler Systems SA
--
-- TALER is free software; you can redistribute it and/or modify it under the
-- terms of the GNU General Public License as published by the Free Software
-- Foundation; either version 3, or (at your option) any later version.
--
-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-- A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License along with
-- TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
--


DROP FUNCTION IF EXISTS expire_locks;
CREATE FUNCTION expire_locks(
  IN in_now INT8
)
RETURNS INT8
LANGUAGE plpgsql
AS $$
DECLARE
  rec RECORD;
  s TEXT;
  total INT8 := 0;
  affected INT8;
BEGIN
  DELETE FROM merchant_inventory_locks
    WHERE expiration < in_now;
  GET DIAGNOSTICS affected = ROW_COUNT;
  total := total + affected;

  DELETE FROM merchant_orders
    WHERE pay_deadline < in_now;
  GET DIAGNOSTICS affected = ROW_COUNT;
  total := total + affected;

  DELETE FROM merchant_contract_terms
    WHERE NOT paid
     AND pay_deadline < in_now;
  GET DIAGNOSTICS affected = ROW_COUNT;
  total := total + affected;
  RETURN total;
END
$$;

COMMENT ON FUNCTION expire_locks(INT8)
  IS 'DELETEs expired inventory locks, unpaid orders past their'
     ' pay_deadline, and unpaid contracts past their'
     ' pay_deadline.  Returns the total number of rows deleted.';
