1337 lines
57 KiB
Plaintext
1337 lines
57 KiB
Plaintext
|
QUERY: create table Room (
|
||
|
roomno char(8),
|
||
|
comment text
|
||
|
);
|
||
|
QUERY: create unique index Room_rno on Room using btree (roomno bpchar_ops);
|
||
|
QUERY: create table WSlot (
|
||
|
slotname char(20),
|
||
|
roomno char(8),
|
||
|
slotlink char(20),
|
||
|
backlink char(20)
|
||
|
);
|
||
|
QUERY: create unique index WSlot_name on WSlot using btree (slotname bpchar_ops);
|
||
|
QUERY: create table PField (
|
||
|
name text,
|
||
|
comment text
|
||
|
);
|
||
|
QUERY: create unique index PField_name on PField using btree (name text_ops);
|
||
|
QUERY: create table PSlot (
|
||
|
slotname char(20),
|
||
|
pfname text,
|
||
|
slotlink char(20),
|
||
|
backlink char(20)
|
||
|
);
|
||
|
QUERY: create unique index PSlot_name on PSlot using btree (slotname bpchar_ops);
|
||
|
QUERY: create table PLine (
|
||
|
slotname char(20),
|
||
|
phonenumber char(20),
|
||
|
comment text,
|
||
|
backlink char(20)
|
||
|
);
|
||
|
QUERY: create unique index PLine_name on PLine using btree (slotname bpchar_ops);
|
||
|
QUERY: create table Hub (
|
||
|
name char(14),
|
||
|
comment text,
|
||
|
nslots integer
|
||
|
);
|
||
|
QUERY: create unique index Hub_name on Hub using btree (name bpchar_ops);
|
||
|
QUERY: create table HSlot (
|
||
|
slotname char(20),
|
||
|
hubname char(14),
|
||
|
slotno integer,
|
||
|
slotlink char(20)
|
||
|
);
|
||
|
QUERY: create unique index HSlot_name on HSlot using btree (slotname bpchar_ops);
|
||
|
QUERY: create index HSlot_hubname on HSlot using btree (hubname bpchar_ops);
|
||
|
QUERY: create table System (
|
||
|
name text,
|
||
|
comment text
|
||
|
);
|
||
|
QUERY: create unique index System_name on System using btree (name text_ops);
|
||
|
QUERY: create table IFace (
|
||
|
slotname char(20),
|
||
|
sysname text,
|
||
|
ifname text,
|
||
|
slotlink char(20)
|
||
|
);
|
||
|
QUERY: create unique index IFace_name on IFace using btree (slotname bpchar_ops);
|
||
|
QUERY: create table PHone (
|
||
|
slotname char(20),
|
||
|
comment text,
|
||
|
slotlink char(20)
|
||
|
);
|
||
|
QUERY: create unique index PHone_name on PHone using btree (slotname bpchar_ops);
|
||
|
QUERY: create function tg_room_au() returns opaque as '
|
||
|
begin
|
||
|
if new.roomno != old.roomno then
|
||
|
update WSlot set roomno = new.roomno where roomno = old.roomno;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_room_au after update
|
||
|
on Room for each row execute procedure tg_room_au();
|
||
|
QUERY: create function tg_room_ad() returns opaque as '
|
||
|
begin
|
||
|
delete from WSlot where roomno = old.roomno;
|
||
|
return old;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_room_ad after delete
|
||
|
on Room for each row execute procedure tg_room_ad();
|
||
|
QUERY: create function tg_wslot_biu() returns opaque as '
|
||
|
begin
|
||
|
if count(*) = 0 from Room where roomno = new.roomno then
|
||
|
raise exception ''Room % does not exist'', new.roomno;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_wslot_biu before insert or update
|
||
|
on WSlot for each row execute procedure tg_wslot_biu();
|
||
|
QUERY: create function tg_pfield_au() returns opaque as '
|
||
|
begin
|
||
|
if new.name != old.name then
|
||
|
update PSlot set pfname = new.name where pfname = old.name;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_pfield_au after update
|
||
|
on PField for each row execute procedure tg_pfield_au();
|
||
|
QUERY: create function tg_pfield_ad() returns opaque as '
|
||
|
begin
|
||
|
delete from PSlot where pfname = old.name;
|
||
|
return old;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_pfield_ad after delete
|
||
|
on PField for each row execute procedure tg_pfield_ad();
|
||
|
QUERY: create function tg_pslot_biu() returns opaque as '
|
||
|
declare
|
||
|
pfrec record;
|
||
|
rename new to ps;
|
||
|
begin
|
||
|
select into pfrec * from PField where name = ps.pfname;
|
||
|
if not found then
|
||
|
raise exception ''Patchfield "%" does not exist'', ps.pfname;
|
||
|
end if;
|
||
|
return ps;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_pslot_biu before insert or update
|
||
|
on PSlot for each row execute procedure tg_pslot_biu();
|
||
|
QUERY: create function tg_system_au() returns opaque as '
|
||
|
begin
|
||
|
if new.name != old.name then
|
||
|
update IFace set sysname = new.name where sysname = old.name;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_system_au after update
|
||
|
on System for each row execute procedure tg_system_au();
|
||
|
QUERY: create function tg_iface_biu() returns opaque as '
|
||
|
declare
|
||
|
sname text;
|
||
|
sysrec record;
|
||
|
begin
|
||
|
select into sysrec * from system where name = new.sysname;
|
||
|
if not found then
|
||
|
raise exception ''system "%" does not exist'', new.sysname;
|
||
|
end if;
|
||
|
sname := ''IF.'' || new.sysname;
|
||
|
sname := sname || ''.'';
|
||
|
sname := sname || new.ifname;
|
||
|
if length(sname) > 20 then
|
||
|
raise exception ''IFace slotname "%" too long (20 char max)'', sname;
|
||
|
end if;
|
||
|
new.slotname := sname;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_iface_biu before insert or update
|
||
|
on IFace for each row execute procedure tg_iface_biu();
|
||
|
QUERY: create function tg_hub_a() returns opaque as '
|
||
|
declare
|
||
|
hname text;
|
||
|
dummy integer;
|
||
|
begin
|
||
|
if tg_op = ''INSERT'' then
|
||
|
dummy := tg_hub_adjustslots(new.name, 0, new.nslots);
|
||
|
return new;
|
||
|
end if;
|
||
|
if tg_op = ''UPDATE'' then
|
||
|
if new.name != old.name then
|
||
|
update HSlot set hubname = new.name where hubname = old.name;
|
||
|
end if;
|
||
|
dummy := tg_hub_adjustslots(new.name, old.nslots, new.nslots);
|
||
|
return new;
|
||
|
end if;
|
||
|
if tg_op = ''DELETE'' then
|
||
|
dummy := tg_hub_adjustslots(old.name, old.nslots, 0);
|
||
|
return old;
|
||
|
end if;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_hub_a after insert or update or delete
|
||
|
on Hub for each row execute procedure tg_hub_a();
|
||
|
QUERY: create function tg_hub_adjustslots(bpchar, integer, integer)
|
||
|
returns integer as '
|
||
|
declare
|
||
|
hname alias for $1;
|
||
|
oldnslots alias for $2;
|
||
|
newnslots alias for $3;
|
||
|
begin
|
||
|
if newnslots = oldnslots then
|
||
|
return 0;
|
||
|
end if;
|
||
|
if newnslots < oldnslots then
|
||
|
delete from HSlot where hubname = hname and slotno > newnslots;
|
||
|
return 0;
|
||
|
end if;
|
||
|
for i in oldnslots + 1 .. newnslots loop
|
||
|
insert into HSlot (slotname, hubname, slotno, slotlink)
|
||
|
values (''HS.dummy'', hname, i, '''');
|
||
|
end loop;
|
||
|
return 0;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create function tg_hslot_biu() returns opaque as '
|
||
|
declare
|
||
|
sname text;
|
||
|
xname HSlot.slotname%TYPE;
|
||
|
hubrec record;
|
||
|
begin
|
||
|
select into hubrec * from Hub where name = new.hubname;
|
||
|
if not found then
|
||
|
raise exception ''no manual manipulation of HSlot'';
|
||
|
end if;
|
||
|
if new.slotno < 1 or new.slotno > hubrec.nslots then
|
||
|
raise exception ''no manual manipulation of HSlot'';
|
||
|
end if;
|
||
|
if tg_op = ''UPDATE'' then
|
||
|
if new.hubname != old.hubname then
|
||
|
if count(*) > 0 from Hub where name = old.hubname then
|
||
|
raise exception ''no manual manipulation of HSlot'';
|
||
|
end if;
|
||
|
end if;
|
||
|
end if;
|
||
|
sname := ''HS.'' || trim(new.hubname);
|
||
|
sname := sname || ''.'';
|
||
|
sname := sname || new.slotno::text;
|
||
|
if length(sname) > 20 then
|
||
|
raise exception ''HSlot slotname "%" too long (20 char max)'', sname;
|
||
|
end if;
|
||
|
new.slotname := sname;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_hslot_biu before insert or update
|
||
|
on HSlot for each row execute procedure tg_hslot_biu();
|
||
|
QUERY: create function tg_hslot_bd() returns opaque as '
|
||
|
declare
|
||
|
hubrec record;
|
||
|
begin
|
||
|
select into hubrec * from Hub where name = old.hubname;
|
||
|
if not found then
|
||
|
return old;
|
||
|
end if;
|
||
|
if old.slotno > hubrec.nslots then
|
||
|
return old;
|
||
|
end if;
|
||
|
raise exception ''no manual manipulation of HSlot'';
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_hslot_bd before delete
|
||
|
on HSlot for each row execute procedure tg_hslot_bd();
|
||
|
QUERY: create function tg_chkslotname() returns opaque as '
|
||
|
begin
|
||
|
if substr(new.slotname, 1, 2) != tg_argv[0] then
|
||
|
raise exception ''slotname must begin with %'', tg_argv[0];
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_chkslotname before insert
|
||
|
on PSlot for each row execute procedure tg_chkslotname('PS');
|
||
|
QUERY: create trigger tg_chkslotname before insert
|
||
|
on WSlot for each row execute procedure tg_chkslotname('WS');
|
||
|
QUERY: create trigger tg_chkslotname before insert
|
||
|
on PLine for each row execute procedure tg_chkslotname('PL');
|
||
|
QUERY: create trigger tg_chkslotname before insert
|
||
|
on IFace for each row execute procedure tg_chkslotname('IF');
|
||
|
QUERY: create trigger tg_chkslotname before insert
|
||
|
on PHone for each row execute procedure tg_chkslotname('PH');
|
||
|
QUERY: create function tg_chkslotlink() returns opaque as '
|
||
|
begin
|
||
|
if new.slotlink isnull then
|
||
|
new.slotlink := '''';
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_chkslotlink before insert or update
|
||
|
on PSlot for each row execute procedure tg_chkslotlink();
|
||
|
QUERY: create trigger tg_chkslotlink before insert or update
|
||
|
on WSlot for each row execute procedure tg_chkslotlink();
|
||
|
QUERY: create trigger tg_chkslotlink before insert or update
|
||
|
on IFace for each row execute procedure tg_chkslotlink();
|
||
|
QUERY: create trigger tg_chkslotlink before insert or update
|
||
|
on HSlot for each row execute procedure tg_chkslotlink();
|
||
|
QUERY: create trigger tg_chkslotlink before insert or update
|
||
|
on PHone for each row execute procedure tg_chkslotlink();
|
||
|
QUERY: create function tg_chkbacklink() returns opaque as '
|
||
|
begin
|
||
|
if new.backlink isnull then
|
||
|
new.backlink := '''';
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_chkbacklink before insert or update
|
||
|
on PSlot for each row execute procedure tg_chkbacklink();
|
||
|
QUERY: create trigger tg_chkbacklink before insert or update
|
||
|
on WSlot for each row execute procedure tg_chkbacklink();
|
||
|
QUERY: create trigger tg_chkbacklink before insert or update
|
||
|
on PLine for each row execute procedure tg_chkbacklink();
|
||
|
QUERY: create function tg_pslot_bu() returns opaque as '
|
||
|
begin
|
||
|
if new.slotname != old.slotname then
|
||
|
delete from PSlot where slotname = old.slotname;
|
||
|
insert into PSlot (
|
||
|
slotname,
|
||
|
pfname,
|
||
|
slotlink,
|
||
|
backlink
|
||
|
) values (
|
||
|
new.slotname,
|
||
|
new.pfname,
|
||
|
new.slotlink,
|
||
|
new.backlink
|
||
|
);
|
||
|
return null;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_pslot_bu before update
|
||
|
on PSlot for each row execute procedure tg_pslot_bu();
|
||
|
QUERY: create function tg_wslot_bu() returns opaque as '
|
||
|
begin
|
||
|
if new.slotname != old.slotname then
|
||
|
delete from WSlot where slotname = old.slotname;
|
||
|
insert into WSlot (
|
||
|
slotname,
|
||
|
roomno,
|
||
|
slotlink,
|
||
|
backlink
|
||
|
) values (
|
||
|
new.slotname,
|
||
|
new.roomno,
|
||
|
new.slotlink,
|
||
|
new.backlink
|
||
|
);
|
||
|
return null;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_wslot_bu before update
|
||
|
on WSlot for each row execute procedure tg_Wslot_bu();
|
||
|
QUERY: create function tg_pline_bu() returns opaque as '
|
||
|
begin
|
||
|
if new.slotname != old.slotname then
|
||
|
delete from PLine where slotname = old.slotname;
|
||
|
insert into PLine (
|
||
|
slotname,
|
||
|
phonenumber,
|
||
|
comment,
|
||
|
backlink
|
||
|
) values (
|
||
|
new.slotname,
|
||
|
new.phonenumber,
|
||
|
new.comment,
|
||
|
new.backlink
|
||
|
);
|
||
|
return null;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_pline_bu before update
|
||
|
on PLine for each row execute procedure tg_pline_bu();
|
||
|
QUERY: create function tg_iface_bu() returns opaque as '
|
||
|
begin
|
||
|
if new.slotname != old.slotname then
|
||
|
delete from IFace where slotname = old.slotname;
|
||
|
insert into IFace (
|
||
|
slotname,
|
||
|
sysname,
|
||
|
ifname,
|
||
|
slotlink
|
||
|
) values (
|
||
|
new.slotname,
|
||
|
new.sysname,
|
||
|
new.ifname,
|
||
|
new.slotlink
|
||
|
);
|
||
|
return null;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_iface_bu before update
|
||
|
on IFace for each row execute procedure tg_iface_bu();
|
||
|
QUERY: create function tg_hslot_bu() returns opaque as '
|
||
|
begin
|
||
|
if new.slotname != old.slotname or new.hubname != old.hubname then
|
||
|
delete from HSlot where slotname = old.slotname;
|
||
|
insert into HSlot (
|
||
|
slotname,
|
||
|
hubname,
|
||
|
slotno,
|
||
|
slotlink
|
||
|
) values (
|
||
|
new.slotname,
|
||
|
new.hubname,
|
||
|
new.slotno,
|
||
|
new.slotlink
|
||
|
);
|
||
|
return null;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_hslot_bu before update
|
||
|
on HSlot for each row execute procedure tg_hslot_bu();
|
||
|
QUERY: create function tg_phone_bu() returns opaque as '
|
||
|
begin
|
||
|
if new.slotname != old.slotname then
|
||
|
delete from PHone where slotname = old.slotname;
|
||
|
insert into PHone (
|
||
|
slotname,
|
||
|
comment,
|
||
|
slotlink
|
||
|
) values (
|
||
|
new.slotname,
|
||
|
new.comment,
|
||
|
new.slotlink
|
||
|
);
|
||
|
return null;
|
||
|
end if;
|
||
|
return new;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_phone_bu before update
|
||
|
on PHone for each row execute procedure tg_phone_bu();
|
||
|
QUERY: create function tg_backlink_a() returns opaque as '
|
||
|
declare
|
||
|
dummy integer;
|
||
|
begin
|
||
|
if tg_op = ''INSERT'' then
|
||
|
if new.backlink != '''' then
|
||
|
dummy := tg_backlink_set(new.backlink, new.slotname);
|
||
|
end if;
|
||
|
return new;
|
||
|
end if;
|
||
|
if tg_op = ''UPDATE'' then
|
||
|
if new.backlink != old.backlink then
|
||
|
if old.backlink != '''' then
|
||
|
dummy := tg_backlink_unset(old.backlink, old.slotname);
|
||
|
end if;
|
||
|
if new.backlink != '''' then
|
||
|
dummy := tg_backlink_set(new.backlink, new.slotname);
|
||
|
end if;
|
||
|
else
|
||
|
if new.slotname != old.slotname and new.backlink != '''' then
|
||
|
dummy := tg_slotlink_set(new.backlink, new.slotname);
|
||
|
end if;
|
||
|
end if;
|
||
|
return new;
|
||
|
end if;
|
||
|
if tg_op = ''DELETE'' then
|
||
|
if old.backlink != '''' then
|
||
|
dummy := tg_backlink_unset(old.backlink, old.slotname);
|
||
|
end if;
|
||
|
return old;
|
||
|
end if;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_backlink_a after insert or update or delete
|
||
|
on PSlot for each row execute procedure tg_backlink_a('PS');
|
||
|
QUERY: create trigger tg_backlink_a after insert or update or delete
|
||
|
on WSlot for each row execute procedure tg_backlink_a('WS');
|
||
|
QUERY: create trigger tg_backlink_a after insert or update or delete
|
||
|
on PLine for each row execute procedure tg_backlink_a('PL');
|
||
|
QUERY: create function tg_backlink_set(bpchar, bpchar)
|
||
|
returns integer as '
|
||
|
declare
|
||
|
myname alias for $1;
|
||
|
blname alias for $2;
|
||
|
mytype char(2);
|
||
|
link char(4);
|
||
|
rec record;
|
||
|
begin
|
||
|
mytype := substr(myname, 1, 2);
|
||
|
link := mytype || substr(blname, 1, 2);
|
||
|
if link = ''PLPL'' then
|
||
|
raise exception
|
||
|
''backlink between two phone lines does not make sense'';
|
||
|
end if;
|
||
|
if link in (''PLWS'', ''WSPL'') then
|
||
|
raise exception
|
||
|
''direct link of phone line to wall slot not permitted'';
|
||
|
end if;
|
||
|
if mytype = ''PS'' then
|
||
|
select into rec * from PSlot where slotname = myname;
|
||
|
if not found then
|
||
|
raise exception ''% does not exists'', myname;
|
||
|
end if;
|
||
|
if rec.backlink != blname then
|
||
|
update PSlot set backlink = blname where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''WS'' then
|
||
|
select into rec * from WSlot where slotname = myname;
|
||
|
if not found then
|
||
|
raise exception ''% does not exists'', myname;
|
||
|
end if;
|
||
|
if rec.backlink != blname then
|
||
|
update WSlot set backlink = blname where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''PL'' then
|
||
|
select into rec * from PLine where slotname = myname;
|
||
|
if not found then
|
||
|
raise exception ''% does not exists'', myname;
|
||
|
end if;
|
||
|
if rec.backlink != blname then
|
||
|
update PLine set backlink = blname where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
raise exception ''illegal backlink beginning with %'', mytype;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create function tg_backlink_unset(bpchar, bpchar)
|
||
|
returns integer as '
|
||
|
declare
|
||
|
myname alias for $1;
|
||
|
blname alias for $2;
|
||
|
mytype char(2);
|
||
|
rec record;
|
||
|
begin
|
||
|
mytype := substr(myname, 1, 2);
|
||
|
if mytype = ''PS'' then
|
||
|
select into rec * from PSlot where slotname = myname;
|
||
|
if not found then
|
||
|
return 0;
|
||
|
end if;
|
||
|
if rec.backlink = blname then
|
||
|
update PSlot set backlink = '''' where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''WS'' then
|
||
|
select into rec * from WSlot where slotname = myname;
|
||
|
if not found then
|
||
|
return 0;
|
||
|
end if;
|
||
|
if rec.backlink = blname then
|
||
|
update WSlot set backlink = '''' where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''PL'' then
|
||
|
select into rec * from PLine where slotname = myname;
|
||
|
if not found then
|
||
|
return 0;
|
||
|
end if;
|
||
|
if rec.backlink = blname then
|
||
|
update PLine set backlink = '''' where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create function tg_slotlink_a() returns opaque as '
|
||
|
declare
|
||
|
dummy integer;
|
||
|
begin
|
||
|
if tg_op = ''INSERT'' then
|
||
|
if new.slotlink != '''' then
|
||
|
dummy := tg_slotlink_set(new.slotlink, new.slotname);
|
||
|
end if;
|
||
|
return new;
|
||
|
end if;
|
||
|
if tg_op = ''UPDATE'' then
|
||
|
if new.slotlink != old.slotlink then
|
||
|
if old.slotlink != '''' then
|
||
|
dummy := tg_slotlink_unset(old.slotlink, old.slotname);
|
||
|
end if;
|
||
|
if new.slotlink != '''' then
|
||
|
dummy := tg_slotlink_set(new.slotlink, new.slotname);
|
||
|
end if;
|
||
|
else
|
||
|
if new.slotname != old.slotname and new.slotlink != '''' then
|
||
|
dummy := tg_slotlink_set(new.slotlink, new.slotname);
|
||
|
end if;
|
||
|
end if;
|
||
|
return new;
|
||
|
end if;
|
||
|
if tg_op = ''DELETE'' then
|
||
|
if old.slotlink != '''' then
|
||
|
dummy := tg_slotlink_unset(old.slotlink, old.slotname);
|
||
|
end if;
|
||
|
return old;
|
||
|
end if;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create trigger tg_slotlink_a after insert or update or delete
|
||
|
on PSlot for each row execute procedure tg_slotlink_a('PS');
|
||
|
QUERY: create trigger tg_slotlink_a after insert or update or delete
|
||
|
on WSlot for each row execute procedure tg_slotlink_a('WS');
|
||
|
QUERY: create trigger tg_slotlink_a after insert or update or delete
|
||
|
on IFace for each row execute procedure tg_slotlink_a('IF');
|
||
|
QUERY: create trigger tg_slotlink_a after insert or update or delete
|
||
|
on HSlot for each row execute procedure tg_slotlink_a('HS');
|
||
|
QUERY: create trigger tg_slotlink_a after insert or update or delete
|
||
|
on PHone for each row execute procedure tg_slotlink_a('PH');
|
||
|
QUERY: create function tg_slotlink_set(bpchar, bpchar)
|
||
|
returns integer as '
|
||
|
declare
|
||
|
myname alias for $1;
|
||
|
blname alias for $2;
|
||
|
mytype char(2);
|
||
|
link char(4);
|
||
|
rec record;
|
||
|
begin
|
||
|
mytype := substr(myname, 1, 2);
|
||
|
link := mytype || substr(blname, 1, 2);
|
||
|
if link = ''PHPH'' then
|
||
|
raise exception
|
||
|
''slotlink between two phones does not make sense'';
|
||
|
end if;
|
||
|
if link in (''PHHS'', ''HSPH'') then
|
||
|
raise exception
|
||
|
''link of phone to hub does not make sense'';
|
||
|
end if;
|
||
|
if link in (''PHIF'', ''IFPH'') then
|
||
|
raise exception
|
||
|
''link of phone to hub does not make sense'';
|
||
|
end if;
|
||
|
if link in (''PSWS'', ''WSPS'') then
|
||
|
raise exception
|
||
|
''slotlink from patchslot to wallslot not permitted'';
|
||
|
end if;
|
||
|
if mytype = ''PS'' then
|
||
|
select into rec * from PSlot where slotname = myname;
|
||
|
if not found then
|
||
|
raise exception ''% does not exists'', myname;
|
||
|
end if;
|
||
|
if rec.slotlink != blname then
|
||
|
update PSlot set slotlink = blname where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''WS'' then
|
||
|
select into rec * from WSlot where slotname = myname;
|
||
|
if not found then
|
||
|
raise exception ''% does not exists'', myname;
|
||
|
end if;
|
||
|
if rec.slotlink != blname then
|
||
|
update WSlot set slotlink = blname where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''IF'' then
|
||
|
select into rec * from IFace where slotname = myname;
|
||
|
if not found then
|
||
|
raise exception ''% does not exists'', myname;
|
||
|
end if;
|
||
|
if rec.slotlink != blname then
|
||
|
update IFace set slotlink = blname where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''HS'' then
|
||
|
select into rec * from HSlot where slotname = myname;
|
||
|
if not found then
|
||
|
raise exception ''% does not exists'', myname;
|
||
|
end if;
|
||
|
if rec.slotlink != blname then
|
||
|
update HSlot set slotlink = blname where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''PH'' then
|
||
|
select into rec * from PHone where slotname = myname;
|
||
|
if not found then
|
||
|
raise exception ''% does not exists'', myname;
|
||
|
end if;
|
||
|
if rec.slotlink != blname then
|
||
|
update PHone set slotlink = blname where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
raise exception ''illegal slotlink beginning with %'', mytype;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create function tg_slotlink_unset(bpchar, bpchar)
|
||
|
returns integer as '
|
||
|
declare
|
||
|
myname alias for $1;
|
||
|
blname alias for $2;
|
||
|
mytype char(2);
|
||
|
rec record;
|
||
|
begin
|
||
|
mytype := substr(myname, 1, 2);
|
||
|
if mytype = ''PS'' then
|
||
|
select into rec * from PSlot where slotname = myname;
|
||
|
if not found then
|
||
|
return 0;
|
||
|
end if;
|
||
|
if rec.slotlink = blname then
|
||
|
update PSlot set slotlink = '''' where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''WS'' then
|
||
|
select into rec * from WSlot where slotname = myname;
|
||
|
if not found then
|
||
|
return 0;
|
||
|
end if;
|
||
|
if rec.slotlink = blname then
|
||
|
update WSlot set slotlink = '''' where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''IF'' then
|
||
|
select into rec * from IFace where slotname = myname;
|
||
|
if not found then
|
||
|
return 0;
|
||
|
end if;
|
||
|
if rec.slotlink = blname then
|
||
|
update IFace set slotlink = '''' where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''HS'' then
|
||
|
select into rec * from HSlot where slotname = myname;
|
||
|
if not found then
|
||
|
return 0;
|
||
|
end if;
|
||
|
if rec.slotlink = blname then
|
||
|
update HSlot set slotlink = '''' where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
if mytype = ''PH'' then
|
||
|
select into rec * from PHone where slotname = myname;
|
||
|
if not found then
|
||
|
return 0;
|
||
|
end if;
|
||
|
if rec.slotlink = blname then
|
||
|
update PHone set slotlink = '''' where slotname = myname;
|
||
|
end if;
|
||
|
return 0;
|
||
|
end if;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create function pslot_backlink_view(bpchar)
|
||
|
returns text as '
|
||
|
<<outer>>
|
||
|
declare
|
||
|
rec record;
|
||
|
bltype char(2);
|
||
|
retval text;
|
||
|
begin
|
||
|
select into rec * from PSlot where slotname = $1;
|
||
|
if not found then
|
||
|
return '''';
|
||
|
end if;
|
||
|
if rec.backlink = '''' then
|
||
|
return ''-'';
|
||
|
end if;
|
||
|
bltype := substr(rec.backlink, 1, 2);
|
||
|
if bltype = ''PL'' then
|
||
|
declare
|
||
|
rec record;
|
||
|
begin
|
||
|
select into rec * from PLine where slotname = outer.rec.backlink;
|
||
|
retval := ''Phone line '' || trim(rec.phonenumber);
|
||
|
if rec.comment != '''' then
|
||
|
retval := retval || '' ('';
|
||
|
retval := retval || rec.comment;
|
||
|
retval := retval || '')'';
|
||
|
end if;
|
||
|
return retval;
|
||
|
end;
|
||
|
end if;
|
||
|
if bltype = ''WS'' then
|
||
|
select into rec * from WSlot where slotname = rec.backlink;
|
||
|
retval := trim(rec.slotname) || '' in room '';
|
||
|
retval := retval || trim(rec.roomno);
|
||
|
retval := retval || '' -> '';
|
||
|
return retval || wslot_slotlink_view(rec.slotname);
|
||
|
end if;
|
||
|
return rec.backlink;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create function pslot_slotlink_view(bpchar)
|
||
|
returns text as '
|
||
|
declare
|
||
|
psrec record;
|
||
|
sltype char(2);
|
||
|
retval text;
|
||
|
begin
|
||
|
select into psrec * from PSlot where slotname = $1;
|
||
|
if not found then
|
||
|
return '''';
|
||
|
end if;
|
||
|
if psrec.slotlink = '''' then
|
||
|
return ''-'';
|
||
|
end if;
|
||
|
sltype := substr(psrec.slotlink, 1, 2);
|
||
|
if sltype = ''PS'' then
|
||
|
retval := trim(psrec.slotlink) || '' -> '';
|
||
|
return retval || pslot_backlink_view(psrec.slotlink);
|
||
|
end if;
|
||
|
if sltype = ''HS'' then
|
||
|
retval := comment from Hub H, HSlot HS
|
||
|
where HS.slotname = psrec.slotlink
|
||
|
and H.name = HS.hubname;
|
||
|
retval := retval || '' slot '';
|
||
|
retval := retval || slotno::text from HSlot
|
||
|
where slotname = psrec.slotlink;
|
||
|
return retval;
|
||
|
end if;
|
||
|
return psrec.slotlink;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create function wslot_slotlink_view(bpchar)
|
||
|
returns text as '
|
||
|
declare
|
||
|
rec record;
|
||
|
sltype char(2);
|
||
|
retval text;
|
||
|
begin
|
||
|
select into rec * from WSlot where slotname = $1;
|
||
|
if not found then
|
||
|
return '''';
|
||
|
end if;
|
||
|
if rec.slotlink = '''' then
|
||
|
return ''-'';
|
||
|
end if;
|
||
|
sltype := substr(rec.slotlink, 1, 2);
|
||
|
if sltype = ''PH'' then
|
||
|
select into rec * from PHone where slotname = rec.slotlink;
|
||
|
retval := ''Phone '' || trim(rec.slotname);
|
||
|
if rec.comment != '''' then
|
||
|
retval := retval || '' ('';
|
||
|
retval := retval || rec.comment;
|
||
|
retval := retval || '')'';
|
||
|
end if;
|
||
|
return retval;
|
||
|
end if;
|
||
|
if sltype = ''IF'' then
|
||
|
declare
|
||
|
syrow System%RowType;
|
||
|
ifrow IFace%ROWTYPE;
|
||
|
begin
|
||
|
select into ifrow * from IFace where slotname = rec.slotlink;
|
||
|
select into syrow * from System where name = ifrow.sysname;
|
||
|
retval := syrow.name || '' IF '';
|
||
|
retval := retval || ifrow.ifname;
|
||
|
if syrow.comment != '''' then
|
||
|
retval := retval || '' ('';
|
||
|
retval := retval || syrow.comment;
|
||
|
retval := retval || '')'';
|
||
|
end if;
|
||
|
return retval;
|
||
|
end;
|
||
|
end if;
|
||
|
return rec.slotlink;
|
||
|
end;
|
||
|
' language 'plpgsql';
|
||
|
QUERY: create view Pfield_v1 as select PF.pfname, PF.slotname,
|
||
|
pslot_backlink_view(PF.slotname) as backside,
|
||
|
pslot_slotlink_view(PF.slotname) as patch
|
||
|
from PSlot PF;
|
||
|
QUERY: insert into Room values ('001', 'Entrance');
|
||
|
QUERY: insert into Room values ('002', 'Office');
|
||
|
QUERY: insert into Room values ('003', 'Office');
|
||
|
QUERY: insert into Room values ('004', 'Technical');
|
||
|
QUERY: insert into Room values ('101', 'Office');
|
||
|
QUERY: insert into Room values ('102', 'Conference');
|
||
|
QUERY: insert into Room values ('103', 'Restroom');
|
||
|
QUERY: insert into Room values ('104', 'Technical');
|
||
|
QUERY: insert into Room values ('105', 'Office');
|
||
|
QUERY: insert into Room values ('106', 'Office');
|
||
|
QUERY: insert into WSlot values ('WS.001.1a', '001', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.001.1b', '001', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.001.2a', '001', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.001.2b', '001', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.001.3a', '001', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.001.3b', '001', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.002.1a', '002', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.002.1b', '002', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.002.2a', '002', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.002.2b', '002', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.002.3a', '002', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.002.3b', '002', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.003.1a', '003', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.003.1b', '003', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.003.2a', '003', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.003.2b', '003', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.003.3a', '003', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.003.3b', '003', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.101.1a', '101', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.101.1b', '101', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.101.2a', '101', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.101.2b', '101', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.101.3a', '101', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.101.3b', '101', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.102.1a', '102', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.102.1b', '102', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.102.2a', '102', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.102.2b', '102', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.102.3a', '102', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.102.3b', '102', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.105.1a', '105', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.105.1b', '105', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.105.2a', '105', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.105.2b', '105', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.105.3a', '105', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.105.3b', '105', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.106.1a', '106', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.106.1b', '106', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.106.2a', '106', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.106.2b', '106', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.106.3a', '106', '', '');
|
||
|
QUERY: insert into WSlot values ('WS.106.3b', '106', '', '');
|
||
|
QUERY: insert into PField values ('PF0_1', 'Wallslots basement');
|
||
|
QUERY: insert into PSlot values ('PS.base.a1', 'PF0_1', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.a2', 'PF0_1', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.a3', 'PF0_1', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.a4', 'PF0_1', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.a5', 'PF0_1', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.a6', 'PF0_1', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.b1', 'PF0_1', '', 'WS.002.1a');
|
||
|
QUERY: insert into PSlot values ('PS.base.b2', 'PF0_1', '', 'WS.002.1b');
|
||
|
QUERY: insert into PSlot values ('PS.base.b3', 'PF0_1', '', 'WS.002.2a');
|
||
|
QUERY: insert into PSlot values ('PS.base.b4', 'PF0_1', '', 'WS.002.2b');
|
||
|
QUERY: insert into PSlot values ('PS.base.b5', 'PF0_1', '', 'WS.002.3a');
|
||
|
QUERY: insert into PSlot values ('PS.base.b6', 'PF0_1', '', 'WS.002.3b');
|
||
|
QUERY: insert into PSlot values ('PS.base.c1', 'PF0_1', '', 'WS.003.1a');
|
||
|
QUERY: insert into PSlot values ('PS.base.c2', 'PF0_1', '', 'WS.003.1b');
|
||
|
QUERY: insert into PSlot values ('PS.base.c3', 'PF0_1', '', 'WS.003.2a');
|
||
|
QUERY: insert into PSlot values ('PS.base.c4', 'PF0_1', '', 'WS.003.2b');
|
||
|
QUERY: insert into PSlot values ('PS.base.c5', 'PF0_1', '', 'WS.003.3a');
|
||
|
QUERY: insert into PSlot values ('PS.base.c6', 'PF0_1', '', 'WS.003.3b');
|
||
|
QUERY: insert into PField values ('PF0_X', 'Phonelines basement');
|
||
|
QUERY: insert into PSlot values ('PS.base.ta1', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.ta2', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.ta3', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.ta4', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.ta5', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.ta6', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.tb1', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.tb2', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.tb3', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.tb4', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.tb5', 'PF0_X', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.base.tb6', 'PF0_X', '', '');
|
||
|
QUERY: insert into PField values ('PF1_1', 'Wallslots 1st floor');
|
||
|
QUERY: insert into PSlot values ('PS.1st.a1', 'PF1_1', '', 'WS.101.1a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.a2', 'PF1_1', '', 'WS.101.1b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.a3', 'PF1_1', '', 'WS.101.2a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.a4', 'PF1_1', '', 'WS.101.2b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.a5', 'PF1_1', '', 'WS.101.3a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.a6', 'PF1_1', '', 'WS.101.3b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.b1', 'PF1_1', '', 'WS.102.1a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.b2', 'PF1_1', '', 'WS.102.1b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.b3', 'PF1_1', '', 'WS.102.2a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.b4', 'PF1_1', '', 'WS.102.2b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.b5', 'PF1_1', '', 'WS.102.3a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.b6', 'PF1_1', '', 'WS.102.3b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.c1', 'PF1_1', '', 'WS.105.1a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.c2', 'PF1_1', '', 'WS.105.1b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.c3', 'PF1_1', '', 'WS.105.2a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.c4', 'PF1_1', '', 'WS.105.2b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.c5', 'PF1_1', '', 'WS.105.3a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.c6', 'PF1_1', '', 'WS.105.3b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.d1', 'PF1_1', '', 'WS.106.1a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.d2', 'PF1_1', '', 'WS.106.1b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.d3', 'PF1_1', '', 'WS.106.2a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.d4', 'PF1_1', '', 'WS.106.2b');
|
||
|
QUERY: insert into PSlot values ('PS.1st.d5', 'PF1_1', '', 'WS.106.3a');
|
||
|
QUERY: insert into PSlot values ('PS.1st.d6', 'PF1_1', '', 'WS.106.3b');
|
||
|
QUERY: update PSlot set backlink = 'WS.001.1a' where slotname = 'PS.base.a1';
|
||
|
QUERY: update PSlot set backlink = 'WS.001.1b' where slotname = 'PS.base.a3';
|
||
|
QUERY: select * from WSlot where roomno = '001' order by slotname;
|
||
|
slotname | roomno| slotlink|backlink
|
||
|
--------------------+--------+--------------------+--------------------
|
||
|
WS.001.1a |001 | |PS.base.a1
|
||
|
WS.001.1b |001 | |PS.base.a3
|
||
|
WS.001.2a |001 | |
|
||
|
WS.001.2b |001 | |
|
||
|
WS.001.3a |001 | |
|
||
|
WS.001.3b |001 | |
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: select * from PSlot where slotname ~ 'PS.base.a' order by slotname;
|
||
|
slotname |pfname| slotlink|backlink
|
||
|
--------------------+------+--------------------+--------------------
|
||
|
PS.base.a1 |PF0_1 | |WS.001.1a
|
||
|
PS.base.a2 |PF0_1 | |
|
||
|
PS.base.a3 |PF0_1 | |WS.001.1b
|
||
|
PS.base.a4 |PF0_1 | |
|
||
|
PS.base.a5 |PF0_1 | |
|
||
|
PS.base.a6 |PF0_1 | |
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: update PSlot set backlink = 'WS.001.2a' where slotname = 'PS.base.a3';
|
||
|
QUERY: select * from WSlot where roomno = '001' order by slotname;
|
||
|
slotname | roomno| slotlink|backlink
|
||
|
--------------------+--------+--------------------+--------------------
|
||
|
WS.001.1a |001 | |PS.base.a1
|
||
|
WS.001.1b |001 | |
|
||
|
WS.001.2a |001 | |PS.base.a3
|
||
|
WS.001.2b |001 | |
|
||
|
WS.001.3a |001 | |
|
||
|
WS.001.3b |001 | |
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: select * from PSlot where slotname ~ 'PS.base.a' order by slotname;
|
||
|
slotname |pfname| slotlink|backlink
|
||
|
--------------------+------+--------------------+--------------------
|
||
|
PS.base.a1 |PF0_1 | |WS.001.1a
|
||
|
PS.base.a2 |PF0_1 | |
|
||
|
PS.base.a3 |PF0_1 | |WS.001.2a
|
||
|
PS.base.a4 |PF0_1 | |
|
||
|
PS.base.a5 |PF0_1 | |
|
||
|
PS.base.a6 |PF0_1 | |
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: update PSlot set backlink = 'WS.001.1b' where slotname = 'PS.base.a2';
|
||
|
QUERY: select * from WSlot where roomno = '001' order by slotname;
|
||
|
slotname | roomno| slotlink|backlink
|
||
|
--------------------+--------+--------------------+--------------------
|
||
|
WS.001.1a |001 | |PS.base.a1
|
||
|
WS.001.1b |001 | |PS.base.a2
|
||
|
WS.001.2a |001 | |PS.base.a3
|
||
|
WS.001.2b |001 | |
|
||
|
WS.001.3a |001 | |
|
||
|
WS.001.3b |001 | |
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: select * from PSlot where slotname ~ 'PS.base.a' order by slotname;
|
||
|
slotname |pfname| slotlink|backlink
|
||
|
--------------------+------+--------------------+--------------------
|
||
|
PS.base.a1 |PF0_1 | |WS.001.1a
|
||
|
PS.base.a2 |PF0_1 | |WS.001.1b
|
||
|
PS.base.a3 |PF0_1 | |WS.001.2a
|
||
|
PS.base.a4 |PF0_1 | |
|
||
|
PS.base.a5 |PF0_1 | |
|
||
|
PS.base.a6 |PF0_1 | |
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: update WSlot set backlink = 'PS.base.a4' where slotname = 'WS.001.2b';
|
||
|
QUERY: update WSlot set backlink = 'PS.base.a6' where slotname = 'WS.001.3a';
|
||
|
QUERY: select * from WSlot where roomno = '001' order by slotname;
|
||
|
slotname | roomno| slotlink|backlink
|
||
|
--------------------+--------+--------------------+--------------------
|
||
|
WS.001.1a |001 | |PS.base.a1
|
||
|
WS.001.1b |001 | |PS.base.a2
|
||
|
WS.001.2a |001 | |PS.base.a3
|
||
|
WS.001.2b |001 | |PS.base.a4
|
||
|
WS.001.3a |001 | |PS.base.a6
|
||
|
WS.001.3b |001 | |
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: select * from PSlot where slotname ~ 'PS.base.a' order by slotname;
|
||
|
slotname |pfname| slotlink|backlink
|
||
|
--------------------+------+--------------------+--------------------
|
||
|
PS.base.a1 |PF0_1 | |WS.001.1a
|
||
|
PS.base.a2 |PF0_1 | |WS.001.1b
|
||
|
PS.base.a3 |PF0_1 | |WS.001.2a
|
||
|
PS.base.a4 |PF0_1 | |WS.001.2b
|
||
|
PS.base.a5 |PF0_1 | |
|
||
|
PS.base.a6 |PF0_1 | |WS.001.3a
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: update WSlot set backlink = 'PS.base.a6' where slotname = 'WS.001.3b';
|
||
|
QUERY: select * from WSlot where roomno = '001' order by slotname;
|
||
|
slotname | roomno| slotlink|backlink
|
||
|
--------------------+--------+--------------------+--------------------
|
||
|
WS.001.1a |001 | |PS.base.a1
|
||
|
WS.001.1b |001 | |PS.base.a2
|
||
|
WS.001.2a |001 | |PS.base.a3
|
||
|
WS.001.2b |001 | |PS.base.a4
|
||
|
WS.001.3a |001 | |
|
||
|
WS.001.3b |001 | |PS.base.a6
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: select * from PSlot where slotname ~ 'PS.base.a' order by slotname;
|
||
|
slotname |pfname| slotlink|backlink
|
||
|
--------------------+------+--------------------+--------------------
|
||
|
PS.base.a1 |PF0_1 | |WS.001.1a
|
||
|
PS.base.a2 |PF0_1 | |WS.001.1b
|
||
|
PS.base.a3 |PF0_1 | |WS.001.2a
|
||
|
PS.base.a4 |PF0_1 | |WS.001.2b
|
||
|
PS.base.a5 |PF0_1 | |
|
||
|
PS.base.a6 |PF0_1 | |WS.001.3b
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: update WSlot set backlink = 'PS.base.a5' where slotname = 'WS.001.3a';
|
||
|
QUERY: select * from WSlot where roomno = '001' order by slotname;
|
||
|
slotname | roomno| slotlink|backlink
|
||
|
--------------------+--------+--------------------+--------------------
|
||
|
WS.001.1a |001 | |PS.base.a1
|
||
|
WS.001.1b |001 | |PS.base.a2
|
||
|
WS.001.2a |001 | |PS.base.a3
|
||
|
WS.001.2b |001 | |PS.base.a4
|
||
|
WS.001.3a |001 | |PS.base.a5
|
||
|
WS.001.3b |001 | |PS.base.a6
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: select * from PSlot where slotname ~ 'PS.base.a' order by slotname;
|
||
|
slotname |pfname| slotlink|backlink
|
||
|
--------------------+------+--------------------+--------------------
|
||
|
PS.base.a1 |PF0_1 | |WS.001.1a
|
||
|
PS.base.a2 |PF0_1 | |WS.001.1b
|
||
|
PS.base.a3 |PF0_1 | |WS.001.2a
|
||
|
PS.base.a4 |PF0_1 | |WS.001.2b
|
||
|
PS.base.a5 |PF0_1 | |WS.001.3a
|
||
|
PS.base.a6 |PF0_1 | |WS.001.3b
|
||
|
(6 rows)
|
||
|
|
||
|
QUERY: insert into PField values ('PF1_2', 'Phonelines 1st floor');
|
||
|
QUERY: insert into PSlot values ('PS.1st.ta1', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.ta2', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.ta3', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.ta4', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.ta5', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.ta6', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.tb1', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.tb2', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.tb3', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.tb4', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.tb5', 'PF1_2', '', '');
|
||
|
QUERY: insert into PSlot values ('PS.1st.tb6', 'PF1_2', '', '');
|
||
|
QUERY: update PField set name = 'PF0_2' where name = 'PF0_X';
|
||
|
QUERY: select * from PSlot order by slotname;
|
||
|
slotname |pfname| slotlink|backlink
|
||
|
--------------------+------+--------------------+--------------------
|
||
|
PS.1st.a1 |PF1_1 | |WS.101.1a
|
||
|
PS.1st.a2 |PF1_1 | |WS.101.1b
|
||
|
PS.1st.a3 |PF1_1 | |WS.101.2a
|
||
|
PS.1st.a4 |PF1_1 | |WS.101.2b
|
||
|
PS.1st.a5 |PF1_1 | |WS.101.3a
|
||
|
PS.1st.a6 |PF1_1 | |WS.101.3b
|
||
|
PS.1st.b1 |PF1_1 | |WS.102.1a
|
||
|
PS.1st.b2 |PF1_1 | |WS.102.1b
|
||
|
PS.1st.b3 |PF1_1 | |WS.102.2a
|
||
|
PS.1st.b4 |PF1_1 | |WS.102.2b
|
||
|
PS.1st.b5 |PF1_1 | |WS.102.3a
|
||
|
PS.1st.b6 |PF1_1 | |WS.102.3b
|
||
|
PS.1st.c1 |PF1_1 | |WS.105.1a
|
||
|
PS.1st.c2 |PF1_1 | |WS.105.1b
|
||
|
PS.1st.c3 |PF1_1 | |WS.105.2a
|
||
|
PS.1st.c4 |PF1_1 | |WS.105.2b
|
||
|
PS.1st.c5 |PF1_1 | |WS.105.3a
|
||
|
PS.1st.c6 |PF1_1 | |WS.105.3b
|
||
|
PS.1st.d1 |PF1_1 | |WS.106.1a
|
||
|
PS.1st.d2 |PF1_1 | |WS.106.1b
|
||
|
PS.1st.d3 |PF1_1 | |WS.106.2a
|
||
|
PS.1st.d4 |PF1_1 | |WS.106.2b
|
||
|
PS.1st.d5 |PF1_1 | |WS.106.3a
|
||
|
PS.1st.d6 |PF1_1 | |WS.106.3b
|
||
|
PS.1st.ta1 |PF1_2 | |
|
||
|
PS.1st.ta2 |PF1_2 | |
|
||
|
PS.1st.ta3 |PF1_2 | |
|
||
|
PS.1st.ta4 |PF1_2 | |
|
||
|
PS.1st.ta5 |PF1_2 | |
|
||
|
PS.1st.ta6 |PF1_2 | |
|
||
|
PS.1st.tb1 |PF1_2 | |
|
||
|
PS.1st.tb2 |PF1_2 | |
|
||
|
PS.1st.tb3 |PF1_2 | |
|
||
|
PS.1st.tb4 |PF1_2 | |
|
||
|
PS.1st.tb5 |PF1_2 | |
|
||
|
PS.1st.tb6 |PF1_2 | |
|
||
|
PS.base.a1 |PF0_1 | |WS.001.1a
|
||
|
PS.base.a2 |PF0_1 | |WS.001.1b
|
||
|
PS.base.a3 |PF0_1 | |WS.001.2a
|
||
|
PS.base.a4 |PF0_1 | |WS.001.2b
|
||
|
PS.base.a5 |PF0_1 | |WS.001.3a
|
||
|
PS.base.a6 |PF0_1 | |WS.001.3b
|
||
|
PS.base.b1 |PF0_1 | |WS.002.1a
|
||
|
PS.base.b2 |PF0_1 | |WS.002.1b
|
||
|
PS.base.b3 |PF0_1 | |WS.002.2a
|
||
|
PS.base.b4 |PF0_1 | |WS.002.2b
|
||
|
PS.base.b5 |PF0_1 | |WS.002.3a
|
||
|
PS.base.b6 |PF0_1 | |WS.002.3b
|
||
|
PS.base.c1 |PF0_1 | |WS.003.1a
|
||
|
PS.base.c2 |PF0_1 | |WS.003.1b
|
||
|
PS.base.c3 |PF0_1 | |WS.003.2a
|
||
|
PS.base.c4 |PF0_1 | |WS.003.2b
|
||
|
PS.base.c5 |PF0_1 | |WS.003.3a
|
||
|
PS.base.c6 |PF0_1 | |WS.003.3b
|
||
|
PS.base.ta1 |PF0_2 | |
|
||
|
PS.base.ta2 |PF0_2 | |
|
||
|
PS.base.ta3 |PF0_2 | |
|
||
|
PS.base.ta4 |PF0_2 | |
|
||
|
PS.base.ta5 |PF0_2 | |
|
||
|
PS.base.ta6 |PF0_2 | |
|
||
|
PS.base.tb1 |PF0_2 | |
|
||
|
PS.base.tb2 |PF0_2 | |
|
||
|
PS.base.tb3 |PF0_2 | |
|
||
|
PS.base.tb4 |PF0_2 | |
|
||
|
PS.base.tb5 |PF0_2 | |
|
||
|
PS.base.tb6 |PF0_2 | |
|
||
|
(66 rows)
|
||
|
|
||
|
QUERY: select * from WSlot order by slotname;
|
||
|
slotname | roomno| slotlink|backlink
|
||
|
--------------------+--------+--------------------+--------------------
|
||
|
WS.001.1a |001 | |PS.base.a1
|
||
|
WS.001.1b |001 | |PS.base.a2
|
||
|
WS.001.2a |001 | |PS.base.a3
|
||
|
WS.001.2b |001 | |PS.base.a4
|
||
|
WS.001.3a |001 | |PS.base.a5
|
||
|
WS.001.3b |001 | |PS.base.a6
|
||
|
WS.002.1a |002 | |PS.base.b1
|
||
|
WS.002.1b |002 | |PS.base.b2
|
||
|
WS.002.2a |002 | |PS.base.b3
|
||
|
WS.002.2b |002 | |PS.base.b4
|
||
|
WS.002.3a |002 | |PS.base.b5
|
||
|
WS.002.3b |002 | |PS.base.b6
|
||
|
WS.003.1a |003 | |PS.base.c1
|
||
|
WS.003.1b |003 | |PS.base.c2
|
||
|
WS.003.2a |003 | |PS.base.c3
|
||
|
WS.003.2b |003 | |PS.base.c4
|
||
|
WS.003.3a |003 | |PS.base.c5
|
||
|
WS.003.3b |003 | |PS.base.c6
|
||
|
WS.101.1a |101 | |PS.1st.a1
|
||
|
WS.101.1b |101 | |PS.1st.a2
|
||
|
WS.101.2a |101 | |PS.1st.a3
|
||
|
WS.101.2b |101 | |PS.1st.a4
|
||
|
WS.101.3a |101 | |PS.1st.a5
|
||
|
WS.101.3b |101 | |PS.1st.a6
|
||
|
WS.102.1a |102 | |PS.1st.b1
|
||
|
WS.102.1b |102 | |PS.1st.b2
|
||
|
WS.102.2a |102 | |PS.1st.b3
|
||
|
WS.102.2b |102 | |PS.1st.b4
|
||
|
WS.102.3a |102 | |PS.1st.b5
|
||
|
WS.102.3b |102 | |PS.1st.b6
|
||
|
WS.105.1a |105 | |PS.1st.c1
|
||
|
WS.105.1b |105 | |PS.1st.c2
|
||
|
WS.105.2a |105 | |PS.1st.c3
|
||
|
WS.105.2b |105 | |PS.1st.c4
|
||
|
WS.105.3a |105 | |PS.1st.c5
|
||
|
WS.105.3b |105 | |PS.1st.c6
|
||
|
WS.106.1a |106 | |PS.1st.d1
|
||
|
WS.106.1b |106 | |PS.1st.d2
|
||
|
WS.106.2a |106 | |PS.1st.d3
|
||
|
WS.106.2b |106 | |PS.1st.d4
|
||
|
WS.106.3a |106 | |PS.1st.d5
|
||
|
WS.106.3b |106 | |PS.1st.d6
|
||
|
(42 rows)
|
||
|
|
||
|
QUERY: insert into PLine values ('PL.001', '-0', 'Central call', 'PS.base.ta1');
|
||
|
QUERY: insert into PLine values ('PL.002', '-101', '', 'PS.base.ta2');
|
||
|
QUERY: insert into PLine values ('PL.003', '-102', '', 'PS.base.ta3');
|
||
|
QUERY: insert into PLine values ('PL.004', '-103', '', 'PS.base.ta5');
|
||
|
QUERY: insert into PLine values ('PL.005', '-104', '', 'PS.base.ta6');
|
||
|
QUERY: insert into PLine values ('PL.006', '-106', '', 'PS.base.tb2');
|
||
|
QUERY: insert into PLine values ('PL.007', '-108', '', 'PS.base.tb3');
|
||
|
QUERY: insert into PLine values ('PL.008', '-109', '', 'PS.base.tb4');
|
||
|
QUERY: insert into PLine values ('PL.009', '-121', '', 'PS.base.tb5');
|
||
|
QUERY: insert into PLine values ('PL.010', '-122', '', 'PS.base.tb6');
|
||
|
QUERY: insert into PLine values ('PL.015', '-134', '', 'PS.1st.ta1');
|
||
|
QUERY: insert into PLine values ('PL.016', '-137', '', 'PS.1st.ta3');
|
||
|
QUERY: insert into PLine values ('PL.017', '-139', '', 'PS.1st.ta4');
|
||
|
QUERY: insert into PLine values ('PL.018', '-362', '', 'PS.1st.tb1');
|
||
|
QUERY: insert into PLine values ('PL.019', '-363', '', 'PS.1st.tb2');
|
||
|
QUERY: insert into PLine values ('PL.020', '-364', '', 'PS.1st.tb3');
|
||
|
QUERY: insert into PLine values ('PL.021', '-365', '', 'PS.1st.tb5');
|
||
|
QUERY: insert into PLine values ('PL.022', '-367', '', 'PS.1st.tb6');
|
||
|
QUERY: insert into PLine values ('PL.028', '-501', 'Fax entrance', 'PS.base.ta2');
|
||
|
QUERY: insert into PLine values ('PL.029', '-502', 'Fax 1st floor', 'PS.1st.ta1');
|
||
|
QUERY: insert into PHone values ('PH.hc001', 'Hicom standard', 'WS.001.1a');
|
||
|
QUERY: update PSlot set slotlink = 'PS.base.ta1' where slotname = 'PS.base.a1';
|
||
|
QUERY: insert into PHone values ('PH.hc002', 'Hicom standard', 'WS.002.1a');
|
||
|
QUERY: update PSlot set slotlink = 'PS.base.ta5' where slotname = 'PS.base.b1';
|
||
|
QUERY: insert into PHone values ('PH.hc003', 'Hicom standard', 'WS.002.2a');
|
||
|
QUERY: update PSlot set slotlink = 'PS.base.tb2' where slotname = 'PS.base.b3';
|
||
|
QUERY: insert into PHone values ('PH.fax001', 'Canon fax', 'WS.001.2a');
|
||
|
QUERY: update PSlot set slotlink = 'PS.base.ta2' where slotname = 'PS.base.a3';
|
||
|
QUERY: insert into Hub values ('base.hub1', 'Patchfield PF0_1 hub', 16);
|
||
|
QUERY: insert into System values ('orion', 'PC');
|
||
|
QUERY: insert into IFace values ('IF', 'orion', 'eth0', 'WS.002.1b');
|
||
|
QUERY: update PSlot set slotlink = 'HS.base.hub1.1' where slotname = 'PS.base.b2';
|
||
|
QUERY: select * from PField_v1 where pfname = 'PF0_1' order by slotname;
|
||
|
pfname|slotname |backside |patch
|
||
|
------+--------------------+--------------------------------------------------------+---------------------------------------------
|
||
|
PF0_1 |PS.base.a1 |WS.001.1a in room 001 -> Phone PH.hc001 (Hicom standard)|PS.base.ta1 -> Phone line -0 (Central call)
|
||
|
PF0_1 |PS.base.a2 |WS.001.1b in room 001 -> - |-
|
||
|
PF0_1 |PS.base.a3 |WS.001.2a in room 001 -> Phone PH.fax001 (Canon fax) |PS.base.ta2 -> Phone line -501 (Fax entrance)
|
||
|
PF0_1 |PS.base.a4 |WS.001.2b in room 001 -> - |-
|
||
|
PF0_1 |PS.base.a5 |WS.001.3a in room 001 -> - |-
|
||
|
PF0_1 |PS.base.a6 |WS.001.3b in room 001 -> - |-
|
||
|
PF0_1 |PS.base.b1 |WS.002.1a in room 002 -> Phone PH.hc002 (Hicom standard)|PS.base.ta5 -> Phone line -103
|
||
|
PF0_1 |PS.base.b2 |WS.002.1b in room 002 -> orion IF eth0 (PC) |Patchfield PF0_1 hub slot 1
|
||
|
PF0_1 |PS.base.b3 |WS.002.2a in room 002 -> Phone PH.hc003 (Hicom standard)|PS.base.tb2 -> Phone line -106
|
||
|
PF0_1 |PS.base.b4 |WS.002.2b in room 002 -> - |-
|
||
|
PF0_1 |PS.base.b5 |WS.002.3a in room 002 -> - |-
|
||
|
PF0_1 |PS.base.b6 |WS.002.3b in room 002 -> - |-
|
||
|
PF0_1 |PS.base.c1 |WS.003.1a in room 003 -> - |-
|
||
|
PF0_1 |PS.base.c2 |WS.003.1b in room 003 -> - |-
|
||
|
PF0_1 |PS.base.c3 |WS.003.2a in room 003 -> - |-
|
||
|
PF0_1 |PS.base.c4 |WS.003.2b in room 003 -> - |-
|
||
|
PF0_1 |PS.base.c5 |WS.003.3a in room 003 -> - |-
|
||
|
PF0_1 |PS.base.c6 |WS.003.3b in room 003 -> - |-
|
||
|
(18 rows)
|
||
|
|
||
|
QUERY: select * from PField_v1 where pfname = 'PF0_2' order by slotname;
|
||
|
pfname|slotname |backside |patch
|
||
|
------+--------------------+------------------------------+----------------------------------------------------------------------
|
||
|
PF0_2 |PS.base.ta1 |Phone line -0 (Central call) |PS.base.a1 -> WS.001.1a in room 001 -> Phone PH.hc001 (Hicom standard)
|
||
|
PF0_2 |PS.base.ta2 |Phone line -501 (Fax entrance)|PS.base.a3 -> WS.001.2a in room 001 -> Phone PH.fax001 (Canon fax)
|
||
|
PF0_2 |PS.base.ta3 |Phone line -102 |-
|
||
|
PF0_2 |PS.base.ta4 |- |-
|
||
|
PF0_2 |PS.base.ta5 |Phone line -103 |PS.base.b1 -> WS.002.1a in room 002 -> Phone PH.hc002 (Hicom standard)
|
||
|
PF0_2 |PS.base.ta6 |Phone line -104 |-
|
||
|
PF0_2 |PS.base.tb1 |- |-
|
||
|
PF0_2 |PS.base.tb2 |Phone line -106 |PS.base.b3 -> WS.002.2a in room 002 -> Phone PH.hc003 (Hicom standard)
|
||
|
PF0_2 |PS.base.tb3 |Phone line -108 |-
|
||
|
PF0_2 |PS.base.tb4 |Phone line -109 |-
|
||
|
PF0_2 |PS.base.tb5 |Phone line -121 |-
|
||
|
PF0_2 |PS.base.tb6 |Phone line -122 |-
|
||
|
(12 rows)
|
||
|
|
||
|
QUERY: insert into PField values ('PF1_1', 'should fail due to unique index');
|
||
|
ERROR: Cannot insert a duplicate key into a unique index
|
||
|
QUERY: update PSlot set backlink = 'WS.not.there' where slotname = 'PS.base.a1';
|
||
|
ERROR: WS.not.there does not exists
|
||
|
QUERY: update PSlot set backlink = 'XX.illegal' where slotname = 'PS.base.a1';
|
||
|
ERROR: illegal backlink beginning with XX
|
||
|
QUERY: update PSlot set slotlink = 'PS.not.there' where slotname = 'PS.base.a1';
|
||
|
ERROR: PS.not.there does not exists
|
||
|
QUERY: update PSlot set slotlink = 'XX.illegal' where slotname = 'PS.base.a1';
|
||
|
ERROR: illegal slotlink beginning with XX
|
||
|
QUERY: insert into HSlot values ('HS', 'base.hub1', 1, '');
|
||
|
ERROR: Cannot insert a duplicate key into a unique index
|
||
|
QUERY: insert into HSlot values ('HS', 'base.hub1', 20, '');
|
||
|
ERROR: no manual manipulation of HSlot
|
||
|
QUERY: delete from HSlot;
|
||
|
ERROR: no manual manipulation of HSlot
|
||
|
QUERY: insert into IFace values ('IF', 'notthere', 'eth0', '');
|
||
|
ERROR: system "notthere" does not exist
|
||
|
QUERY: insert into IFace values ('IF', 'orion', 'ethernet_interface_name_too_long', '');
|
||
|
ERROR: IFace slotname "IF.orion.ethernet_interface_name_too_long" too long (20 char max)
|