-- +goose StatementBegin CREATE OR REPLACE FUNCTION fieldseeker.insert_linelocation( p_objectid bigint, p_name varchar, p_zone varchar, p_habitat varchar, p_priority varchar, p_usetype varchar, p_active smallint, p_description varchar, p_accessdesc varchar, p_comments varchar, p_symbology varchar, p_externalid varchar, p_acres double precision, p_nextactiondatescheduled timestamp, p_larvinspectinterval smallint, p_length_ft double precision, p_width_ft double precision, p_zone2 varchar, p_locationnumber integer, p_globalid uuid, p_created_user varchar, p_created_date timestamp, p_last_edited_user varchar, p_last_edited_date timestamp, p_lastinspectdate timestamp, p_lastinspectbreeding varchar, p_lastinspectavglarvae double precision, p_lastinspectavgpupae double precision, p_lastinspectlstages varchar, p_lastinspectactiontaken varchar, p_lastinspectfieldspecies varchar, p_lasttreatdate timestamp, p_lasttreatproduct varchar, p_lasttreatqty double precision, p_lasttreatqtyunit varchar, p_hectares double precision, p_lastinspectactivity varchar, p_lasttreatactivity varchar, p_length_meters double precision, p_width_meters double precision, p_lastinspectconditions varchar, p_waterorigin varchar, p_creationdate timestamp, p_creator varchar, p_editdate timestamp, p_editor varchar, p_jurisdiction varchar, p_shape__length double precision, p_geometry jsonb, p_geospatial geometry ) RETURNS TABLE(row_inserted boolean, version_num integer) AS $$ DECLARE v_next_version integer; v_changes_exist boolean; BEGIN -- Check if changes exist SELECT NOT EXISTS ( SELECT 1 FROM fieldseeker.linelocation lv WHERE lv.objectid = p_objectid AND lv.name IS NOT DISTINCT FROM p_name AND lv.zone IS NOT DISTINCT FROM p_zone AND lv.habitat IS NOT DISTINCT FROM p_habitat AND lv.priority IS NOT DISTINCT FROM p_priority AND lv.usetype IS NOT DISTINCT FROM p_usetype AND lv.active IS NOT DISTINCT FROM p_active AND lv.description IS NOT DISTINCT FROM p_description AND lv.accessdesc IS NOT DISTINCT FROM p_accessdesc AND lv.comments IS NOT DISTINCT FROM p_comments AND lv.symbology IS NOT DISTINCT FROM p_symbology AND lv.externalid IS NOT DISTINCT FROM p_externalid AND lv.acres IS NOT DISTINCT FROM p_acres AND lv.nextactiondatescheduled IS NOT DISTINCT FROM p_nextactiondatescheduled AND lv.larvinspectinterval IS NOT DISTINCT FROM p_larvinspectinterval AND lv.length_ft IS NOT DISTINCT FROM p_length_ft AND lv.width_ft IS NOT DISTINCT FROM p_width_ft AND lv.zone2 IS NOT DISTINCT FROM p_zone2 AND lv.locationnumber IS NOT DISTINCT FROM p_locationnumber AND lv.globalid IS NOT DISTINCT FROM p_globalid AND lv.created_user IS NOT DISTINCT FROM p_created_user AND lv.created_date IS NOT DISTINCT FROM p_created_date AND lv.last_edited_user IS NOT DISTINCT FROM p_last_edited_user AND lv.last_edited_date IS NOT DISTINCT FROM p_last_edited_date AND lv.lastinspectdate IS NOT DISTINCT FROM p_lastinspectdate AND lv.lastinspectbreeding IS NOT DISTINCT FROM p_lastinspectbreeding AND lv.lastinspectavglarvae IS NOT DISTINCT FROM p_lastinspectavglarvae AND lv.lastinspectavgpupae IS NOT DISTINCT FROM p_lastinspectavgpupae AND lv.lastinspectlstages IS NOT DISTINCT FROM p_lastinspectlstages AND lv.lastinspectactiontaken IS NOT DISTINCT FROM p_lastinspectactiontaken AND lv.lastinspectfieldspecies IS NOT DISTINCT FROM p_lastinspectfieldspecies AND lv.lasttreatdate IS NOT DISTINCT FROM p_lasttreatdate AND lv.lasttreatproduct IS NOT DISTINCT FROM p_lasttreatproduct AND lv.lasttreatqty IS NOT DISTINCT FROM p_lasttreatqty AND lv.lasttreatqtyunit IS NOT DISTINCT FROM p_lasttreatqtyunit AND lv.hectares IS NOT DISTINCT FROM p_hectares AND lv.lastinspectactivity IS NOT DISTINCT FROM p_lastinspectactivity AND lv.lasttreatactivity IS NOT DISTINCT FROM p_lasttreatactivity AND lv.length_meters IS NOT DISTINCT FROM p_length_meters AND lv.width_meters IS NOT DISTINCT FROM p_width_meters AND lv.lastinspectconditions IS NOT DISTINCT FROM p_lastinspectconditions AND lv.waterorigin IS NOT DISTINCT FROM p_waterorigin AND lv.creationdate IS NOT DISTINCT FROM p_creationdate AND lv.creator IS NOT DISTINCT FROM p_creator AND lv.editdate IS NOT DISTINCT FROM p_editdate AND lv.editor IS NOT DISTINCT FROM p_editor AND lv.jurisdiction IS NOT DISTINCT FROM p_jurisdiction AND lv.shape__length IS NOT DISTINCT FROM p_shape__length AND lv.geometry IS NOT DISTINCT FROM p_geometry AND lv.geospatial IS NOT DISTINCT FROM p_geospatial ORDER BY VERSION DESC LIMIT 1 ) INTO v_changes_exist; -- If no changes, return false with current version IF NOT v_changes_exist THEN RETURN QUERY SELECT FALSE AS row_inserted, (SELECT VERSION FROM fieldseeker.linelocation WHERE objectid = p_objectid ORDER BY VERSION DESC LIMIT 1) AS version_num; RETURN; END IF; -- Calculate next version SELECT COALESCE(MAX(VERSION) + 1, 1) INTO v_next_version FROM fieldseeker.linelocation WHERE objectid = p_objectid; -- Insert new version INSERT INTO fieldseeker.linelocation ( objectid, name, zone, habitat, priority, usetype, active, description, accessdesc, comments, symbology, externalid, acres, nextactiondatescheduled, larvinspectinterval, length_ft, width_ft, zone2, locationnumber, globalid, created_user, created_date, last_edited_user, last_edited_date, lastinspectdate, lastinspectbreeding, lastinspectavglarvae, lastinspectavgpupae, lastinspectlstages, lastinspectactiontaken, lastinspectfieldspecies, lasttreatdate, lasttreatproduct, lasttreatqty, lasttreatqtyunit, hectares, lastinspectactivity, lasttreatactivity, length_meters, width_meters, lastinspectconditions, waterorigin, creationdate, creator, editdate, editor, jurisdiction, shape__length, geometry, geospatial, VERSION ) VALUES ( p_objectid, p_name, p_zone, p_habitat, p_priority, p_usetype, p_active, p_description, p_accessdesc, p_comments, p_symbology, p_externalid, p_acres, p_nextactiondatescheduled, p_larvinspectinterval, p_length_ft, p_width_ft, p_zone2, p_locationnumber, p_globalid, p_created_user, p_created_date, p_last_edited_user, p_last_edited_date, p_lastinspectdate, p_lastinspectbreeding, p_lastinspectavglarvae, p_lastinspectavgpupae, p_lastinspectlstages, p_lastinspectactiontaken, p_lastinspectfieldspecies, p_lasttreatdate, p_lasttreatproduct, p_lasttreatqty, p_lasttreatqtyunit, p_hectares, p_lastinspectactivity, p_lasttreatactivity, p_length_meters, p_width_meters, p_lastinspectconditions, p_waterorigin, p_creationdate, p_creator, p_editdate, p_editor, p_jurisdiction, p_shape__length, p_geometry, p_geospatial, v_next_version ); -- Return success with new version RETURN QUERY SELECT TRUE AS row_inserted, v_next_version AS version_num; END; $$ LANGUAGE plpgsql; -- +goose StatementEnd