--> Trigger tests
CREATE TABLE trigt (
	last varchar(64),
	data bigint
) WITHOUT OIDS;

INSERT INTO trigt VALUES ('existing', -321);
INSERT INTO trigt VALUES ('existing', 34883924);
INSERT INTO trigt VALUES ('existing', 8498382);
INSERT INTO trigt VALUES ('existing', -328138238382);
INSERT INTO trigt VALUES ('existing', 328138238382);

SELECT * FROM trigt;

--> Delete it test
CREATE OR REPLACE FUNCTION deleter()
RETURNS TRIGGER LANGUAGE plpy
AS 'return kw["TUPLE"]';

CREATE TRIGGER deleter
 BEFORE DELETE ON trigt
 FOR EACH ROW
  EXECUTE PROCEDURE deleter();

DELETE FROM trigt WHERE data < 0;
SELECT * FROM trigt;

DROP TRIGGER deleter ON trigt;

--> Don't delete it test
CREATE OR REPLACE FUNCTION dont_delete_it()
RETURNS TRIGGER LANGUAGE plpy
AS 'pass';

CREATE TRIGGER deleter
 BEFORE DELETE ON trigt
 FOR EACH ROW
  EXECUTE PROCEDURE dont_delete_it();

DELETE FROM trigt;
SELECT * FROM trigt;

DROP TRIGGER deleter ON trigt;

--> Show the got a return value in an AFTER trigger warning
CREATE OR REPLACE FUNCTION warner ()
RETURNS TRIGGER LANGUAGE plpy
AS 'return kw["TD"]("fake", 0)';

CREATE TRIGGER warner
 AFTER INSERT ON trigt
 FOR EACH ROW
  EXECUTE PROCEDURE warner();
INSERT INTO trigt VALUES ('warning check', 123);
DROP TRIGGER warner ON trigt;

--> Raise exception in trigger
CREATE OR REPLACE FUNCTION trig_exc ()
RETURNS TRIGGER LANGUAGE plpy
AS 'raise SyntaxError';

CREATE TRIGGER exc
 BEFORE INSERT ON trigt
 FOR EACH ROW
  EXECUTE PROCEDURE trig_exc();
INSERT INTO trigt VALUES ('exception check', 123);
DROP TRIGGER exc ON trigt;


--> Insert a different tuple instead of the given one
CREATE OR REPLACE FUNCTION insert_instead ()
RETURNS TRIGGER LANGUAGE plpy
AS 'return ("inserted", 55)';

CREATE TRIGGER insert_instead
 BEFORE INSERT ON trigt
 FOR EACH ROW
  EXECUTE PROCEDURE insert_instead();

INSERT INTO trigt VALUES ('should never exist', 123);
INSERT INTO trigt VALUES ('should never exist', 321);

SELECT * FROM trigt;
DROP TRIGGER insert_instead ON trigt;

--> Show last state and drop table for retesting
SELECT * FROM trigt;
DROP TABLE trigt;

/* vim: set filetype=sql: */
