DROP TABLE test CASCADE;
CREATE TABLE test (
 val BIGINT PRIMARY KEY,
 accum INTEGER
);
DROP TABLE testarray CASCADE;
CREATE TABLE testarray (
 val BIGINT PRIMARY KEY,
 accum INTEGER[]
);
DROP TABLE test_trigger CASCADE;
CREATE TABLE test_trigger (
 val BIGINT,
 accum INTEGER
);
DROP FUNCTION test_pgsql(BIGINT, INTEGER);
CREATE FUNCTION test_pgsql(BIGINT, INTEGER) RETURNS INTEGER AS 'DECLARE ival ALIAS FOR $1; iaccum ALIAS FOR $2; BEGIN UPDATE test SET accum = accum + iaccum WHERE val = ival; IF FOUND THEN RETURN 1; ELSE INSERT INTO test VALUES (ival, iaccum); END IF; RETURN 1; END' LANGUAGE 'plpgsql';

DROP FUNCTION test_pgsql_trig() CASCADE;
CREATE FUNCTION test_pgsql_trig() RETURNS TRIGGER AS 'BEGIN UPDATE test SET accum = accum + NEW.accum WHERE val = NEW.val; IF FOUND THEN RETURN NULL; ELSE INSERT INTO test VALUES (NEW.val, NEW.accum); END IF; RETURN NULL; END' LANGUAGE 'plpgsql';

CREATE TRIGGER test_pgsql_triger BEFORE INSERT ON test_trigger
    FOR EACH ROW EXECUTE PROCEDURE test_pgsql_trig();

VACUUM ANALYZE ;


/*
#CREATE FUNCTION ${SCHEMA}.sysd_featuresetid(TEXT) RETURNS integer AS 'SELECT featureset_id FROM ${SCHEMA}.sysd_featureset WHERE featureset_xml_md5 = $1;' LANGUAGE SQL;
#
#CREATE FUNCTION emp_stamp () RETURNS TRIGGER AS '
#    BEGIN
#        -- Check that empname and salary are given
#        IF NEW.empname ISNULL THEN
#            RAISE EXCEPTION ''empname cannot be NULL value'';
#        END IF;
#        IF NEW.salary ISNULL THEN
#            RAISE EXCEPTION ''% cannot have NULL salary'', NEW.empname;
#        END IF;
#
#        -- Who works for us when she must pay for it?
#        IF NEW.salary < 0 THEN
#            RAISE EXCEPTION ''% cannot have a negative salary'', NEW.empname;
#        END IF;
#
#        -- Remember who changed the payroll when
#        NEW.last_date := ''now'';
#        NEW.last_user := current_user;
#        RETURN NEW;
#    END;
#' LANGUAGE 'plpgsql';
#
#CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp
#    FOR EACH ROW EXECUTE PROCEDURE emp_stamp();
#
*/
