control triple creation via an 'instead of insert' trigger on vtriples

This commit is contained in:
Helmut Merz 2020-02-19 13:20:52 +01:00
parent 1ff292f9ba
commit 9350627e9c
5 changed files with 36 additions and 10 deletions

View file

@ -33,3 +33,9 @@ create or replace function show_text(tid bigint) returns text as $$
select text from texts select text from texts
where texts.id = tid; where texts.id = tid;
$$ language sql; $$ language sql;
create or replace function show_type(tid smallint) returns text as $$
select dtname from datatypes dt
where dt.id = tid;
$$ language sql stable;

View file

@ -7,5 +7,8 @@
\i fload.sql \i fload.sql
\i fshow.sql \i fshow.sql
-- create triggers
\i tgtriple.sql
-- load data -- load data
\i lbase.sql \i lbase.sql

View file

@ -21,10 +21,8 @@ select load_datatype('int');
select load_datatype('decimal'); select load_datatype('decimal');
select load_datatype('timestamp'); select load_datatype('timestamp');
-- basic triples: type assignments for insert into vtriples (stname, stext, ptext, otname, otext, creation) values
-- type -> Property; Property, Class -> Class ('node', 'rdf:type', 'rdf:type', 'node', 'rdf:Property', :event),
('node', 'rdf:Property', 'rdf:type', 'node', 'rdfs:Class', :event),
select load_triple('node', 'rdf:type', 'rdf:type', 'node', 'rdf:Property', :event); ('node', 'rdfs:Class', 'rdf:type', 'node', 'rdfs:Class', :event),
select load_triple('node', 'rdf:Property', 'rdf:type', 'node', 'rdfs:Class', :event); ('node', 'rdfs:label', 'rdf:type', 'node', 'rdf:Property', :event);
select load_triple('node', 'rdfs:Class', 'rdf:type', 'node', 'rdfs:Class', :event);
select load_triple('node', 'rdfs:label', 'rdf:type', 'node', 'rdfs:Property', :event);

16
pgsql/tgtriples.sql Normal file
View file

@ -0,0 +1,16 @@
-- create triggers for triples table
create or replace function insert_triple() returns trigger as $$
declare
trid bigint;
begin
trid := load_triple(new.stname, new.stext, new.ptext,
new.otname, new.otext, new.creation);
return new;
end;
$$ language plpgsql;
create trigger insert_triple instead of insert on vtriples
for each row execute procedure insert_triple();

View file

@ -3,9 +3,12 @@
create or replace view vtriples as create or replace view vtriples as
select triples.id, select triples.id,
stype, svalue, show_value(stype, svalue) as stext, stype, svalue, predicate, otype, ovalue, creation,
predicate, show_value(dt.id, predicate) as ptext, show_type(stype) as stname,
otype, ovalue, show_value(otype, ovalue) as otext, show_value(stype, svalue) as stext,
show_value(dt.id, predicate) as ptext,
show_type(otype) as otname,
show_value(otype, ovalue) as otext,
to_char(events.tstamp, 'YYYY-MM-DD HH24:MI:SS') as ts to_char(events.tstamp, 'YYYY-MM-DD HH24:MI:SS') as ts
from triples, datatypes dt, events from triples, datatypes dt, events
where dtname = 'node' where dtname = 'node'