CREATE FUNCTION call_cleanup () RETURNS opaque AS ' DECLARE -- Declare variables to hold the information. call_callid TEXT; call_method TEXT; call_time TIMESTAMP; call_src_user TEXT; call_sip_code TEXT; call_src_domain TEXT; call_dst_user TEXT; call_dst_domain TEXT; BEGIN IF NEW.method = "BYE" THEN SELECT * FROM acc WHERE callid = NEW.callid AND method = "BYE" AND NEW.sip_code = "200"; IF NOT FOUND THEN SELECT * INTO callid AS call_callid, "time" AS call_time, src_user AS call_src_user, src_domain AS call_src_domain, dst_user AS call_dst_user, dst_domain AS dst_domain, sip_code AS call_sip_code FROM acc WHERE callid = NEW.callid AND method = "INVITE" AND NEW.sip_code = "200" ORDER BY time LIMIT 1; INSERT INTO call_records(callid, time src_user, src_domain, dst_user, dst_domain, duration) VALUES(call_callid, call_time, call_src_user, call_src_domain, call_dst_user, call_dst_domain, NEW.time - call_time); END IF; END IF; RETURN NEW; END; ' LANGUAGE 'plpgsql';