All pastes #953697 Raw Edit

Someone

public text v1 · immutable
#953697 ·published 2008-03-23 07:08 UTC
rendered paste body
create function trig_ip_overlap_i() returns trigger as  $$
declare r int4;
begin
  select into r count(*)
  from ip_alloc a
  where (a.ip_addr << new.ip_addr or a.ip_addr >> new.ip_addr or a.ip_addr =  new.ip_addr)
  if r>0 then
    raise exception 'Block will overlap';
  end if;
  return new;
end;
$$ language 'plpgsql';

create function trig_ip_overlap_u() returns trigger as  $$
declare r int4;
begin
  select into r count(*)
  from ip_alloc a
  where (a.ip_addr << new.ip_addr or a.ip_addr >> new.ip_addr or a.ip_addr =  new.ip_addr)
  and a.ip_addr <> old.ip_addr;
  if r>0 then
    raise exception 'Block will overlap';
  end if;
  return new;
end;
$$ language 'plpgsql';

drop  trigger trig_ip_overlap_aiu on ip_alloc;
drop  trigger trig_ip_overlap_ai on ip_alloc;
drop  trigger trig_ip_overlap_au on ip_alloc;

create trigger trig_ip_overlap_ai before insert on ip_alloc
for each row execute procedure trig_ip_overlay_i();

create trigger trig_ip_overlap_au before insert on ip_alloc
for each row execute procedure trig_ip_overlay_u();