create or replace function ms_mv_tickets_ut() returns trigger
security definer language 'plpgsql' as $$
begin
  if old.order_confirmation_code != new.order_confirmation_code then
    perform movie_showtimes_invalidate_row(o.movie_showtime_id)
      from orders o
      where o.confirmation_code = new.order_confirmation_code;
    perform movie_showtimes_invalidate_row(o.movie_showtime_id)
      from orders o
      where o.confirmation_code = old.order_confirmation_code;
  end if;
  return null;
end
$$;

create or replace function ms_mv_tickets_dt() returns trigger
security definer language 'plpgsql' as $$
begin
  perform movie_showtimes_invalidate_row(o.movie_showtime_id)
      from orders o
      where o.confirmation_code = old.order_confirmation_code;
  return null;
end
$$;

create or replace function ms_mv_tickets_it() returns trigger
security definer language 'plpgsql' as $$
begin
  perform movie_showtimes_invalidate_row(o.movie_showtime_id)
      from orders o
      where o.confirmation_code = new.order_confirmation_code;
  return null;
end
$$;

create trigger ms_mv_tickets_ut after update on tickets
  for each row execute procedure ms_mv_tickets_ut();

create trigger ms_mv_tickets_dt after delete on tickets
  for each row execute procedure ms_mv_tickets_ut();

create trigger ms_mv_tickets_it after insert on tickets
  for each row execute procedure ms_mv_tickets_it();



