From 9350627e9c8ce00c7335bfa3b3c377b31322a0be Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Wed, 19 Feb 2020 13:20:52 +0100 Subject: [PATCH] control triple creation via an 'instead of insert' trigger on vtriples --- pgsql/fshow.sql | 6 ++++++ pgsql/init.sql | 3 +++ pgsql/lbase.sql | 12 +++++------- pgsql/tgtriples.sql | 16 ++++++++++++++++ pgsql/vtriples.sql | 9 ++++++--- 5 files changed, 36 insertions(+), 10 deletions(-) create mode 100644 pgsql/tgtriples.sql diff --git a/pgsql/fshow.sql b/pgsql/fshow.sql index 270a2ce..9ae9c2b 100644 --- a/pgsql/fshow.sql +++ b/pgsql/fshow.sql @@ -33,3 +33,9 @@ create or replace function show_text(tid bigint) returns text as $$ select text from texts where texts.id = tid; $$ 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; diff --git a/pgsql/init.sql b/pgsql/init.sql index 5c6b0e7..1dff721 100644 --- a/pgsql/init.sql +++ b/pgsql/init.sql @@ -7,5 +7,8 @@ \i fload.sql \i fshow.sql +-- create triggers +\i tgtriple.sql + -- load data \i lbase.sql diff --git a/pgsql/lbase.sql b/pgsql/lbase.sql index 6d7b59a..92db7e7 100644 --- a/pgsql/lbase.sql +++ b/pgsql/lbase.sql @@ -21,10 +21,8 @@ select load_datatype('int'); select load_datatype('decimal'); select load_datatype('timestamp'); --- basic triples: type assignments for --- type -> Property; Property, Class -> Class - -select load_triple('node', 'rdf:type', 'rdf:type', 'node', 'rdf:Property', :event); -select load_triple('node', 'rdf:Property', 'rdf:type', 'node', 'rdfs:Class', :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); +insert into vtriples (stname, stext, ptext, otname, otext, creation) values + ('node', 'rdf:type', 'rdf:type', 'node', 'rdf:Property', :event), + ('node', 'rdf:Property', 'rdf:type', 'node', 'rdfs:Class', :event), + ('node', 'rdfs:Class', 'rdf:type', 'node', 'rdfs:Class', :event), + ('node', 'rdfs:label', 'rdf:type', 'node', 'rdf:Property', :event); diff --git a/pgsql/tgtriples.sql b/pgsql/tgtriples.sql new file mode 100644 index 0000000..7571629 --- /dev/null +++ b/pgsql/tgtriples.sql @@ -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(); diff --git a/pgsql/vtriples.sql b/pgsql/vtriples.sql index ed42b00..98af7e1 100644 --- a/pgsql/vtriples.sql +++ b/pgsql/vtriples.sql @@ -3,9 +3,12 @@ create or replace view vtriples as select triples.id, - stype, svalue, show_value(stype, svalue) as stext, - predicate, show_value(dt.id, predicate) as ptext, - otype, ovalue, show_value(otype, ovalue) as otext, + stype, svalue, predicate, otype, ovalue, creation, + show_type(stype) as stname, + 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 from triples, datatypes dt, events where dtname = 'node'