--------- REL_PERSON_ORGANIZATION CREATE OR REPLACE FUNCTION CALL_REL_PERSON_ORGANIZATION_InsertBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PERSON_ORGANIZATION(); PERFORM ObtainAffectedTuples_REL_PERSON_ORGANIZATION(new.PERSONID, new.ORGANIZATIONID); triples := RDF_State_REL_PERSON_ORGANIZATION(); PERFORM saveChangeset(triples, CAST('REL_PERSON_ORGANIZATION' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(-1 AS INT2)); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_ORGANIZATION_InsertAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_REL_PERSON_ORGANIZATION(); PERFORM saveChangeset(triples, CAST('REL_PERSON_ORGANIZATION' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_ORGANIZATION_DeleteBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PERSON_ORGANIZATION(); PERFORM ObtainAffectedTuples_REL_PERSON_ORGANIZATION(old.PERSONID, old.ORGANIZATIONID); triples := RDF_State_REL_PERSON_ORGANIZATION(); PERFORM saveChangeset(triples, CAST('REL_PERSON_ORGANIZATION' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(-1 AS INT2)); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_ORGANIZATION_DeleteAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_REL_PERSON_ORGANIZATION(); PERFORM saveChangeset(triples, CAST('REL_PERSON_ORGANIZATION' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_ORGANIZATION_UpdateBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PERSON_ORGANIZATION(); PERFORM ObtainAffectedTuples_REL_PERSON_ORGANIZATION(old.PERSONID, old.ORGANIZATIONID); triples := RDF_State_REL_PERSON_ORGANIZATION(); PERFORM saveChangeset(triples, CAST('REL_PERSON_ORGANIZATION' AS VARCHAR), CAST('update' AS VARCHAR), CAST(-1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_ORGANIZATION_UpdateAfter() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PERSON_ORGANIZATION(); PERFORM ObtainAffectedTuples_REL_PERSON_ORGANIZATION(new.PERSONID, new.ORGANIZATIONID); triples := RDF_State_REL_PERSON_ORGANIZATION(); PERFORM saveChangeset(triples, CAST('REL_PERSON_ORGANIZATION' AS VARCHAR), CAST('update' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION GET_REL_PERSON_ORGANIZATION() returns varchar LANGUAGE JAVA as 'output.ClasseGrande.ObtainTuples_REL_PERSON_ORGANIZATION()'; --- CREATE or REPLACE FUNCTION RDF_State_REL_PERSON_ORGANIZATION() returns text LANGUAGE java as 'output.ComputeChangeset.RDF_State_REL_PERSON_ORGANIZATION()'; --- CREATE or REPLACE FUNCTION ObtainAffectedTuples_REL_PERSON_ORGANIZATION( PERSONID INT4, ORGANIZATIONID INT4 ) returns void LANGUAGE java as 'output.ComputeChangeset.ObtainAffectedTuples_REL_PERSON_ORGANIZATION(java.lang.Integer, java.lang.Integer)'; --- CREATE or REPLACE FUNCTION createTempTableREL_PERSON_ORGANIZATION() returns void LANGUAGE java as 'output.ComputeChangeset.createTempTableREL_PERSON_ORGANIZATION()'; --- CREATE TRIGGER REL_PERSON_ORGANIZATION_InsertBefore BEFORE INSERT ON REL_PERSON_ORGANIZATION FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_ORGANIZATION_InsertBefore(); --- CREATE TRIGGER REL_PERSON_ORGANIZATIONInsertAfter AFTER INSERT ON REL_PERSON_ORGANIZATION FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_ORGANIZATION_InsertAfter(); --- CREATE TRIGGER REL_PERSON_ORGANIZATION_DeleteBefore BEFORE DELETE ON REL_PERSON_ORGANIZATION FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_ORGANIZATION_DeleteBefore(); --- CREATE TRIGGER REL_PERSON_ORGANIZATIONDeleteAfter AFTER DELETE ON REL_PERSON_ORGANIZATION FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_ORGANIZATION_DeleteAfter(); --- CREATE TRIGGER REL_PERSON_ORGANIZATION_UpdateBefore BEFORE UPDATE ON REL_PERSON_ORGANIZATION FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_ORGANIZATION_UpdateBefore(); --- CREATE TRIGGER REL_PERSON_ORGANIZATION_UpdateAfter AFTER UPDATE ON REL_PERSON_ORGANIZATION FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_ORGANIZATION_UpdateAfter(); --- --------- TOPICS CREATE OR REPLACE FUNCTION CALL_TOPICS_InsertBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableTOPICS(); PERFORM ObtainAffectedTuples_TOPICS(new.TOPICID, new.TOPICNAME, new.URI, new.PARENTID); triples := RDF_State_TOPICS(); PERFORM saveChangeset(triples, CAST('TOPICS' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(-1 AS INT2)); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_TOPICS_InsertAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_TOPICS(); PERFORM saveChangeset(triples, CAST('TOPICS' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_TOPICS_DeleteBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableTOPICS(); PERFORM ObtainAffectedTuples_TOPICS(old.TOPICID, old.TOPICNAME, old.URI, old.PARENTID); triples := RDF_State_TOPICS(); PERFORM saveChangeset(triples, CAST('TOPICS' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(-1 AS INT2)); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_TOPICS_DeleteAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_TOPICS(); PERFORM saveChangeset(triples, CAST('TOPICS' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_TOPICS_UpdateBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableTOPICS(); PERFORM ObtainAffectedTuples_TOPICS(old.TOPICID, old.TOPICNAME, old.URI, old.PARENTID); triples := RDF_State_TOPICS(); PERFORM saveChangeset(triples, CAST('TOPICS' AS VARCHAR), CAST('update' AS VARCHAR), CAST(-1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_TOPICS_UpdateAfter() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableTOPICS(); PERFORM ObtainAffectedTuples_TOPICS(new.TOPICID, new.TOPICNAME, new.URI, new.PARENTID); triples := RDF_State_TOPICS(); PERFORM saveChangeset(triples, CAST('TOPICS' AS VARCHAR), CAST('update' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION GET_TOPICS() returns varchar LANGUAGE JAVA as 'output.ClasseGrande.ObtainTuples_TOPICS()'; --- CREATE or REPLACE FUNCTION RDF_State_TOPICS() returns text LANGUAGE java as 'output.ComputeChangeset.RDF_State_TOPICS()'; --- CREATE or REPLACE FUNCTION ObtainAffectedTuples_TOPICS( TOPICID SERIAL, TOPICNAME VARCHAR, URI VARCHAR, PARENTID INT4 ) returns void LANGUAGE java as 'output.ComputeChangeset.ObtainAffectedTuples_TOPICS(java.lang.Integer, java.lang.String, java.lang.String, java.lang.Integer)'; --- CREATE or REPLACE FUNCTION createTempTableTOPICS() returns void LANGUAGE java as 'output.ComputeChangeset.createTempTableTOPICS()'; --- CREATE TRIGGER TOPICS_InsertBefore BEFORE INSERT ON TOPICS FOR EACH ROW EXECUTE PROCEDURE CALL_TOPICS_InsertBefore(); --- CREATE TRIGGER TOPICSInsertAfter AFTER INSERT ON TOPICS FOR EACH ROW EXECUTE PROCEDURE CALL_TOPICS_InsertAfter(); --- CREATE TRIGGER TOPICS_DeleteBefore BEFORE DELETE ON TOPICS FOR EACH ROW EXECUTE PROCEDURE CALL_TOPICS_DeleteBefore(); --- CREATE TRIGGER TOPICSDeleteAfter AFTER DELETE ON TOPICS FOR EACH ROW EXECUTE PROCEDURE CALL_TOPICS_DeleteAfter(); --- CREATE TRIGGER TOPICS_UpdateBefore BEFORE UPDATE ON TOPICS FOR EACH ROW EXECUTE PROCEDURE CALL_TOPICS_UpdateBefore(); --- CREATE TRIGGER TOPICS_UpdateAfter AFTER UPDATE ON TOPICS FOR EACH ROW EXECUTE PROCEDURE CALL_TOPICS_UpdateAfter(); --- --------- PERSONS CREATE OR REPLACE FUNCTION CALL_PERSONS_InsertBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTablePERSONS(); PERFORM ObtainAffectedTuples_PERSONS(new.PERID, new.TYPE, new.FIRSTNAME, new.LASTNAME, new.ADDRESS, new.EMAIL, new.HOMEPAGE, new.PHONE, new.URI, new.PHOTO); triples := RDF_State_PERSONS(); PERFORM saveChangeset(triples, CAST('PERSONS' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(-1 AS INT2)); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PERSONS_InsertAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_PERSONS(); PERFORM saveChangeset(triples, CAST('PERSONS' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PERSONS_DeleteBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTablePERSONS(); PERFORM ObtainAffectedTuples_PERSONS(old.PERID, old.TYPE, old.FIRSTNAME, old.LASTNAME, old.ADDRESS, old.EMAIL, old.HOMEPAGE, old.PHONE, old.URI, old.PHOTO); triples := RDF_State_PERSONS(); PERFORM saveChangeset(triples, CAST('PERSONS' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(-1 AS INT2)); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PERSONS_DeleteAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_PERSONS(); PERFORM saveChangeset(triples, CAST('PERSONS' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PERSONS_UpdateBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTablePERSONS(); PERFORM ObtainAffectedTuples_PERSONS(old.PERID, old.TYPE, old.FIRSTNAME, old.LASTNAME, old.ADDRESS, old.EMAIL, old.HOMEPAGE, old.PHONE, old.URI, old.PHOTO); triples := RDF_State_PERSONS(); PERFORM saveChangeset(triples, CAST('PERSONS' AS VARCHAR), CAST('update' AS VARCHAR), CAST(-1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PERSONS_UpdateAfter() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTablePERSONS(); PERFORM ObtainAffectedTuples_PERSONS(new.PERID, new.TYPE, new.FIRSTNAME, new.LASTNAME, new.ADDRESS, new.EMAIL, new.HOMEPAGE, new.PHONE, new.URI, new.PHOTO); triples := RDF_State_PERSONS(); PERFORM saveChangeset(triples, CAST('PERSONS' AS VARCHAR), CAST('update' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION GET_PERSONS() returns varchar LANGUAGE JAVA as 'output.ClasseGrande.ObtainTuples_PERSONS()'; --- CREATE or REPLACE FUNCTION RDF_State_PERSONS() returns text LANGUAGE java as 'output.ComputeChangeset.RDF_State_PERSONS()'; --- CREATE or REPLACE FUNCTION ObtainAffectedTuples_PERSONS( PERID SERIAL, TYPE VARCHAR, FIRSTNAME VARCHAR, LASTNAME VARCHAR, ADDRESS VARCHAR, EMAIL VARCHAR, HOMEPAGE VARCHAR, PHONE VARCHAR, URI VARCHAR, PHOTO VARCHAR ) returns void LANGUAGE java as 'output.ComputeChangeset.ObtainAffectedTuples_PERSONS(java.lang.Integer, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String)'; --- CREATE or REPLACE FUNCTION createTempTablePERSONS() returns void LANGUAGE java as 'output.ComputeChangeset.createTempTablePERSONS()'; --- CREATE TRIGGER PERSONS_InsertBefore BEFORE INSERT ON PERSONS FOR EACH ROW EXECUTE PROCEDURE CALL_PERSONS_InsertBefore(); --- CREATE TRIGGER PERSONSInsertAfter AFTER INSERT ON PERSONS FOR EACH ROW EXECUTE PROCEDURE CALL_PERSONS_InsertAfter(); --- CREATE TRIGGER PERSONS_DeleteBefore BEFORE DELETE ON PERSONS FOR EACH ROW EXECUTE PROCEDURE CALL_PERSONS_DeleteBefore(); --- CREATE TRIGGER PERSONSDeleteAfter AFTER DELETE ON PERSONS FOR EACH ROW EXECUTE PROCEDURE CALL_PERSONS_DeleteAfter(); --- CREATE TRIGGER PERSONS_UpdateBefore BEFORE UPDATE ON PERSONS FOR EACH ROW EXECUTE PROCEDURE CALL_PERSONS_UpdateBefore(); --- CREATE TRIGGER PERSONS_UpdateAfter AFTER UPDATE ON PERSONS FOR EACH ROW EXECUTE PROCEDURE CALL_PERSONS_UpdateAfter(); --- --------- REL_PAPER_TOPIC CREATE OR REPLACE FUNCTION CALL_REL_PAPER_TOPIC_InsertBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PAPER_TOPIC(); PERFORM ObtainAffectedTuples_REL_PAPER_TOPIC(new.PAPERID, new.TOPICID, new.RELATIONTYPE); triples := RDF_State_REL_PAPER_TOPIC(); PERFORM saveChangeset(triples, CAST('REL_PAPER_TOPIC' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(-1 AS INT2)); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PAPER_TOPIC_InsertAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_REL_PAPER_TOPIC(); PERFORM saveChangeset(triples, CAST('REL_PAPER_TOPIC' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PAPER_TOPIC_DeleteBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PAPER_TOPIC(); PERFORM ObtainAffectedTuples_REL_PAPER_TOPIC(old.PAPERID, old.TOPICID, old.RELATIONTYPE); triples := RDF_State_REL_PAPER_TOPIC(); PERFORM saveChangeset(triples, CAST('REL_PAPER_TOPIC' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(-1 AS INT2)); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PAPER_TOPIC_DeleteAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_REL_PAPER_TOPIC(); PERFORM saveChangeset(triples, CAST('REL_PAPER_TOPIC' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PAPER_TOPIC_UpdateBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PAPER_TOPIC(); PERFORM ObtainAffectedTuples_REL_PAPER_TOPIC(old.PAPERID, old.TOPICID, old.RELATIONTYPE); triples := RDF_State_REL_PAPER_TOPIC(); PERFORM saveChangeset(triples, CAST('REL_PAPER_TOPIC' AS VARCHAR), CAST('update' AS VARCHAR), CAST(-1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PAPER_TOPIC_UpdateAfter() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PAPER_TOPIC(); PERFORM ObtainAffectedTuples_REL_PAPER_TOPIC(new.PAPERID, new.TOPICID, new.RELATIONTYPE); triples := RDF_State_REL_PAPER_TOPIC(); PERFORM saveChangeset(triples, CAST('REL_PAPER_TOPIC' AS VARCHAR), CAST('update' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION GET_REL_PAPER_TOPIC() returns varchar LANGUAGE JAVA as 'output.ClasseGrande.ObtainTuples_REL_PAPER_TOPIC()'; --- CREATE or REPLACE FUNCTION RDF_State_REL_PAPER_TOPIC() returns text LANGUAGE java as 'output.ComputeChangeset.RDF_State_REL_PAPER_TOPIC()'; --- CREATE or REPLACE FUNCTION ObtainAffectedTuples_REL_PAPER_TOPIC( PAPERID INT4, TOPICID INT4, RELATIONTYPE INT4 ) returns void LANGUAGE java as 'output.ComputeChangeset.ObtainAffectedTuples_REL_PAPER_TOPIC(java.lang.Integer, java.lang.Integer, java.lang.Integer)'; --- CREATE or REPLACE FUNCTION createTempTableREL_PAPER_TOPIC() returns void LANGUAGE java as 'output.ComputeChangeset.createTempTableREL_PAPER_TOPIC()'; --- CREATE TRIGGER REL_PAPER_TOPIC_InsertBefore BEFORE INSERT ON REL_PAPER_TOPIC FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PAPER_TOPIC_InsertBefore(); --- CREATE TRIGGER REL_PAPER_TOPICInsertAfter AFTER INSERT ON REL_PAPER_TOPIC FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PAPER_TOPIC_InsertAfter(); --- CREATE TRIGGER REL_PAPER_TOPIC_DeleteBefore BEFORE DELETE ON REL_PAPER_TOPIC FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PAPER_TOPIC_DeleteBefore(); --- CREATE TRIGGER REL_PAPER_TOPICDeleteAfter AFTER DELETE ON REL_PAPER_TOPIC FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PAPER_TOPIC_DeleteAfter(); --- CREATE TRIGGER REL_PAPER_TOPIC_UpdateBefore BEFORE UPDATE ON REL_PAPER_TOPIC FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PAPER_TOPIC_UpdateBefore(); --- CREATE TRIGGER REL_PAPER_TOPIC_UpdateAfter AFTER UPDATE ON REL_PAPER_TOPIC FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PAPER_TOPIC_UpdateAfter(); --- --------- ORGANIZATIONS CREATE OR REPLACE FUNCTION CALL_ORGANIZATIONS_InsertBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableORGANIZATIONS(); PERFORM ObtainAffectedTuples_ORGANIZATIONS(new.ORGID, new.TYPE, new.NAME, new.ADDRESS, new.LOCATION, new.POSTCODE, new.COUNTRY, new.URI, new.BELONGSTO, new.HOMEPAGE); triples := RDF_State_ORGANIZATIONS(); PERFORM saveChangeset(triples, CAST('ORGANIZATIONS' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(-1 AS INT2)); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_ORGANIZATIONS_InsertAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_ORGANIZATIONS(); PERFORM saveChangeset(triples, CAST('ORGANIZATIONS' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_ORGANIZATIONS_DeleteBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableORGANIZATIONS(); PERFORM ObtainAffectedTuples_ORGANIZATIONS(old.ORGID, old.TYPE, old.NAME, old.ADDRESS, old.LOCATION, old.POSTCODE, old.COUNTRY, old.URI, old.BELONGSTO, old.HOMEPAGE); triples := RDF_State_ORGANIZATIONS(); PERFORM saveChangeset(triples, CAST('ORGANIZATIONS' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(-1 AS INT2)); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_ORGANIZATIONS_DeleteAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_ORGANIZATIONS(); PERFORM saveChangeset(triples, CAST('ORGANIZATIONS' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_ORGANIZATIONS_UpdateBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableORGANIZATIONS(); PERFORM ObtainAffectedTuples_ORGANIZATIONS(old.ORGID, old.TYPE, old.NAME, old.ADDRESS, old.LOCATION, old.POSTCODE, old.COUNTRY, old.URI, old.BELONGSTO, old.HOMEPAGE); triples := RDF_State_ORGANIZATIONS(); PERFORM saveChangeset(triples, CAST('ORGANIZATIONS' AS VARCHAR), CAST('update' AS VARCHAR), CAST(-1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_ORGANIZATIONS_UpdateAfter() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableORGANIZATIONS(); PERFORM ObtainAffectedTuples_ORGANIZATIONS(new.ORGID, new.TYPE, new.NAME, new.ADDRESS, new.LOCATION, new.POSTCODE, new.COUNTRY, new.URI, new.BELONGSTO, new.HOMEPAGE); triples := RDF_State_ORGANIZATIONS(); PERFORM saveChangeset(triples, CAST('ORGANIZATIONS' AS VARCHAR), CAST('update' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION GET_ORGANIZATIONS() returns varchar LANGUAGE JAVA as 'output.ClasseGrande.ObtainTuples_ORGANIZATIONS()'; --- CREATE or REPLACE FUNCTION RDF_State_ORGANIZATIONS() returns text LANGUAGE java as 'output.ComputeChangeset.RDF_State_ORGANIZATIONS()'; --- CREATE or REPLACE FUNCTION ObtainAffectedTuples_ORGANIZATIONS( ORGID SERIAL, TYPE VARCHAR, NAME VARCHAR, ADDRESS TEXT, LOCATION VARCHAR, POSTCODE VARCHAR, COUNTRY VARCHAR, URI VARCHAR, BELONGSTO INT4, HOMEPAGE VARCHAR ) returns void LANGUAGE java as 'output.ComputeChangeset.ObtainAffectedTuples_ORGANIZATIONS(java.lang.Integer, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String)'; --- CREATE or REPLACE FUNCTION createTempTableORGANIZATIONS() returns void LANGUAGE java as 'output.ComputeChangeset.createTempTableORGANIZATIONS()'; --- CREATE TRIGGER ORGANIZATIONS_InsertBefore BEFORE INSERT ON ORGANIZATIONS FOR EACH ROW EXECUTE PROCEDURE CALL_ORGANIZATIONS_InsertBefore(); --- CREATE TRIGGER ORGANIZATIONSInsertAfter AFTER INSERT ON ORGANIZATIONS FOR EACH ROW EXECUTE PROCEDURE CALL_ORGANIZATIONS_InsertAfter(); --- CREATE TRIGGER ORGANIZATIONS_DeleteBefore BEFORE DELETE ON ORGANIZATIONS FOR EACH ROW EXECUTE PROCEDURE CALL_ORGANIZATIONS_DeleteBefore(); --- CREATE TRIGGER ORGANIZATIONSDeleteAfter AFTER DELETE ON ORGANIZATIONS FOR EACH ROW EXECUTE PROCEDURE CALL_ORGANIZATIONS_DeleteAfter(); --- CREATE TRIGGER ORGANIZATIONS_UpdateBefore BEFORE UPDATE ON ORGANIZATIONS FOR EACH ROW EXECUTE PROCEDURE CALL_ORGANIZATIONS_UpdateBefore(); --- CREATE TRIGGER ORGANIZATIONS_UpdateAfter AFTER UPDATE ON ORGANIZATIONS FOR EACH ROW EXECUTE PROCEDURE CALL_ORGANIZATIONS_UpdateAfter(); --- --------- PAPERS CREATE OR REPLACE FUNCTION CALL_PAPERS_InsertBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTablePAPERS(); PERFORM ObtainAffectedTuples_PAPERS(new.PAPERID, new.TITLE, new.ABSTRACT, new.URI, new.YEAR, new.CONFERENCE, new.PUBLISH); triples := RDF_State_PAPERS(); PERFORM saveChangeset(triples, CAST('PAPERS' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(-1 AS INT2)); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PAPERS_InsertAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_PAPERS(); PERFORM saveChangeset(triples, CAST('PAPERS' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PAPERS_DeleteBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTablePAPERS(); PERFORM ObtainAffectedTuples_PAPERS(old.PAPERID, old.TITLE, old.ABSTRACT, old.URI, old.YEAR, old.CONFERENCE, old.PUBLISH); triples := RDF_State_PAPERS(); PERFORM saveChangeset(triples, CAST('PAPERS' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(-1 AS INT2)); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PAPERS_DeleteAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_PAPERS(); PERFORM saveChangeset(triples, CAST('PAPERS' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PAPERS_UpdateBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTablePAPERS(); PERFORM ObtainAffectedTuples_PAPERS(old.PAPERID, old.TITLE, old.ABSTRACT, old.URI, old.YEAR, old.CONFERENCE, old.PUBLISH); triples := RDF_State_PAPERS(); PERFORM saveChangeset(triples, CAST('PAPERS' AS VARCHAR), CAST('update' AS VARCHAR), CAST(-1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_PAPERS_UpdateAfter() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTablePAPERS(); PERFORM ObtainAffectedTuples_PAPERS(new.PAPERID, new.TITLE, new.ABSTRACT, new.URI, new.YEAR, new.CONFERENCE, new.PUBLISH); triples := RDF_State_PAPERS(); PERFORM saveChangeset(triples, CAST('PAPERS' AS VARCHAR), CAST('update' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION GET_PAPERS() returns varchar LANGUAGE JAVA as 'output.ClasseGrande.ObtainTuples_PAPERS()'; --- CREATE or REPLACE FUNCTION RDF_State_PAPERS() returns text LANGUAGE java as 'output.ComputeChangeset.RDF_State_PAPERS()'; --- CREATE or REPLACE FUNCTION ObtainAffectedTuples_PAPERS( PAPERID SERIAL, TITLE VARCHAR, ABSTRACT TEXT, URI VARCHAR, YEAR INT4, CONFERENCE INT4, PUBLISH INT2 ) returns void LANGUAGE java as 'output.ComputeChangeset.ObtainAffectedTuples_PAPERS(java.lang.Integer, java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.Integer, java.lang.Integer)'; --- CREATE or REPLACE FUNCTION createTempTablePAPERS() returns void LANGUAGE java as 'output.ComputeChangeset.createTempTablePAPERS()'; --- CREATE TRIGGER PAPERS_InsertBefore BEFORE INSERT ON PAPERS FOR EACH ROW EXECUTE PROCEDURE CALL_PAPERS_InsertBefore(); --- CREATE TRIGGER PAPERSInsertAfter AFTER INSERT ON PAPERS FOR EACH ROW EXECUTE PROCEDURE CALL_PAPERS_InsertAfter(); --- CREATE TRIGGER PAPERS_DeleteBefore BEFORE DELETE ON PAPERS FOR EACH ROW EXECUTE PROCEDURE CALL_PAPERS_DeleteBefore(); --- CREATE TRIGGER PAPERSDeleteAfter AFTER DELETE ON PAPERS FOR EACH ROW EXECUTE PROCEDURE CALL_PAPERS_DeleteAfter(); --- CREATE TRIGGER PAPERS_UpdateBefore BEFORE UPDATE ON PAPERS FOR EACH ROW EXECUTE PROCEDURE CALL_PAPERS_UpdateBefore(); --- CREATE TRIGGER PAPERS_UpdateAfter AFTER UPDATE ON PAPERS FOR EACH ROW EXECUTE PROCEDURE CALL_PAPERS_UpdateAfter(); --- --------- CONFERENCES CREATE OR REPLACE FUNCTION CALL_CONFERENCES_InsertBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableCONFERENCES(); PERFORM ObtainAffectedTuples_CONFERENCES(new.CONFID, new.NAME, new.URI, new.DATE, new.LOCATION, new.DATUM); triples := RDF_State_CONFERENCES(); PERFORM saveChangeset(triples, CAST('CONFERENCES' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(-1 AS INT2)); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_CONFERENCES_InsertAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_CONFERENCES(); PERFORM saveChangeset(triples, CAST('CONFERENCES' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_CONFERENCES_DeleteBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableCONFERENCES(); PERFORM ObtainAffectedTuples_CONFERENCES(old.CONFID, old.NAME, old.URI, old.DATE, old.LOCATION, old.DATUM); triples := RDF_State_CONFERENCES(); PERFORM saveChangeset(triples, CAST('CONFERENCES' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(-1 AS INT2)); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_CONFERENCES_DeleteAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_CONFERENCES(); PERFORM saveChangeset(triples, CAST('CONFERENCES' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_CONFERENCES_UpdateBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableCONFERENCES(); PERFORM ObtainAffectedTuples_CONFERENCES(old.CONFID, old.NAME, old.URI, old.DATE, old.LOCATION, old.DATUM); triples := RDF_State_CONFERENCES(); PERFORM saveChangeset(triples, CAST('CONFERENCES' AS VARCHAR), CAST('update' AS VARCHAR), CAST(-1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_CONFERENCES_UpdateAfter() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableCONFERENCES(); PERFORM ObtainAffectedTuples_CONFERENCES(new.CONFID, new.NAME, new.URI, new.DATE, new.LOCATION, new.DATUM); triples := RDF_State_CONFERENCES(); PERFORM saveChangeset(triples, CAST('CONFERENCES' AS VARCHAR), CAST('update' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION GET_CONFERENCES() returns varchar LANGUAGE JAVA as 'output.ClasseGrande.ObtainTuples_CONFERENCES()'; --- CREATE or REPLACE FUNCTION RDF_State_CONFERENCES() returns text LANGUAGE java as 'output.ComputeChangeset.RDF_State_CONFERENCES()'; --- CREATE or REPLACE FUNCTION ObtainAffectedTuples_CONFERENCES( CONFID SERIAL, NAME VARCHAR, URI VARCHAR, DATE VARCHAR, LOCATION VARCHAR, DATUM TIMESTAMP ) returns void LANGUAGE java as 'output.ComputeChangeset.ObtainAffectedTuples_CONFERENCES(java.lang.Integer, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.sql.Timestamp)'; --- CREATE or REPLACE FUNCTION createTempTableCONFERENCES() returns void LANGUAGE java as 'output.ComputeChangeset.createTempTableCONFERENCES()'; --- CREATE TRIGGER CONFERENCES_InsertBefore BEFORE INSERT ON CONFERENCES FOR EACH ROW EXECUTE PROCEDURE CALL_CONFERENCES_InsertBefore(); --- CREATE TRIGGER CONFERENCESInsertAfter AFTER INSERT ON CONFERENCES FOR EACH ROW EXECUTE PROCEDURE CALL_CONFERENCES_InsertAfter(); --- CREATE TRIGGER CONFERENCES_DeleteBefore BEFORE DELETE ON CONFERENCES FOR EACH ROW EXECUTE PROCEDURE CALL_CONFERENCES_DeleteBefore(); --- CREATE TRIGGER CONFERENCESDeleteAfter AFTER DELETE ON CONFERENCES FOR EACH ROW EXECUTE PROCEDURE CALL_CONFERENCES_DeleteAfter(); --- CREATE TRIGGER CONFERENCES_UpdateBefore BEFORE UPDATE ON CONFERENCES FOR EACH ROW EXECUTE PROCEDURE CALL_CONFERENCES_UpdateBefore(); --- CREATE TRIGGER CONFERENCES_UpdateAfter AFTER UPDATE ON CONFERENCES FOR EACH ROW EXECUTE PROCEDURE CALL_CONFERENCES_UpdateAfter(); --- --------- REL_PERSON_PAPER CREATE OR REPLACE FUNCTION CALL_REL_PERSON_PAPER_InsertBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PERSON_PAPER(); PERFORM ObtainAffectedTuples_REL_PERSON_PAPER(new.PERSONID, new.PAPERID); triples := RDF_State_REL_PERSON_PAPER(); PERFORM saveChangeset(triples, CAST('REL_PERSON_PAPER' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(-1 AS INT2)); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_PAPER_InsertAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_REL_PERSON_PAPER(); PERFORM saveChangeset(triples, CAST('REL_PERSON_PAPER' AS VARCHAR), CAST('insert' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_PAPER_DeleteBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PERSON_PAPER(); PERFORM ObtainAffectedTuples_REL_PERSON_PAPER(old.PERSONID, old.PAPERID); triples := RDF_State_REL_PERSON_PAPER(); PERFORM saveChangeset(triples, CAST('REL_PERSON_PAPER' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(-1 AS INT2)); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_PAPER_DeleteAfter() returns trigger as $$ DECLARE triples text;BEGIN triples:= RDF_State_REL_PERSON_PAPER(); PERFORM saveChangeset(triples, CAST('REL_PERSON_PAPER' AS VARCHAR), CAST('delete' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN OLD; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_PAPER_UpdateBefore() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PERSON_PAPER(); PERFORM ObtainAffectedTuples_REL_PERSON_PAPER(old.PERSONID, old.PAPERID); triples := RDF_State_REL_PERSON_PAPER(); PERFORM saveChangeset(triples, CAST('REL_PERSON_PAPER' AS VARCHAR), CAST('update' AS VARCHAR), CAST(-1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION CALL_REL_PERSON_PAPER_UpdateAfter() returns trigger as $$ DECLARE triples text;BEGIN PERFORM openConn(); PERFORM createTempTableREL_PERSON_PAPER(); PERFORM ObtainAffectedTuples_REL_PERSON_PAPER(new.PERSONID, new.PAPERID); triples := RDF_State_REL_PERSON_PAPER(); PERFORM saveChangeset(triples, CAST('REL_PERSON_PAPER' AS VARCHAR), CAST('update' AS VARCHAR), CAST(1 AS INT2)); PERFORM closeConn(); RETURN NEW; END; $$ LANGUAGE plpgsql; --- CREATE OR REPLACE FUNCTION GET_REL_PERSON_PAPER() returns varchar LANGUAGE JAVA as 'output.ClasseGrande.ObtainTuples_REL_PERSON_PAPER()'; --- CREATE or REPLACE FUNCTION RDF_State_REL_PERSON_PAPER() returns text LANGUAGE java as 'output.ComputeChangeset.RDF_State_REL_PERSON_PAPER()'; --- CREATE or REPLACE FUNCTION ObtainAffectedTuples_REL_PERSON_PAPER( PERSONID INT4, PAPERID INT4 ) returns void LANGUAGE java as 'output.ComputeChangeset.ObtainAffectedTuples_REL_PERSON_PAPER(java.lang.Integer, java.lang.Integer)'; --- CREATE or REPLACE FUNCTION createTempTableREL_PERSON_PAPER() returns void LANGUAGE java as 'output.ComputeChangeset.createTempTableREL_PERSON_PAPER()'; --- CREATE TRIGGER REL_PERSON_PAPER_InsertBefore BEFORE INSERT ON REL_PERSON_PAPER FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_PAPER_InsertBefore(); --- CREATE TRIGGER REL_PERSON_PAPERInsertAfter AFTER INSERT ON REL_PERSON_PAPER FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_PAPER_InsertAfter(); --- CREATE TRIGGER REL_PERSON_PAPER_DeleteBefore BEFORE DELETE ON REL_PERSON_PAPER FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_PAPER_DeleteBefore(); --- CREATE TRIGGER REL_PERSON_PAPERDeleteAfter AFTER DELETE ON REL_PERSON_PAPER FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_PAPER_DeleteAfter(); --- CREATE TRIGGER REL_PERSON_PAPER_UpdateBefore BEFORE UPDATE ON REL_PERSON_PAPER FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_PAPER_UpdateBefore(); --- CREATE TRIGGER REL_PERSON_PAPER_UpdateAfter AFTER UPDATE ON REL_PERSON_PAPER FOR EACH ROW EXECUTE PROCEDURE CALL_REL_PERSON_PAPER_UpdateAfter(); --- CREATE or REPLACE FUNCTION openConn() returns void LANGUAGE java as 'output.ComputeChangeset.openConn'; CREATE or REPLACE FUNCTION closeConn() returns void LANGUAGE java as 'output.ComputeChangeset.closeConn'; CREATE OR REPLACE FUNCTION saveChangeset(triples1 TEXT, table1 VARCHAR, event1 VARCHAR, type1 INT2) returns void as $$ BEGIN IF triples1 != '' THEN INSERT INTO changesets(triples,"table",event, type, time) VALUES(triples1,table1, event1,type1, CURRENT_TIMESTAMP); END IF; END; $$ LANGUAGE plpgsql; CREATE TABLE changesets ( id serial NOT NULL, triples text, type smallint, "time" timestamp without time zone, "table" character varying, event character varying, CONSTRAINT id PRIMARY KEY (id) );