153 lines
3.9 KiB
PL/PgSQL
153 lines
3.9 KiB
PL/PgSQL
|
|
-- +goose StatementBegin
|
|
CREATE OR REPLACE FUNCTION fieldseeker.insert_inspectionsampledetail(
|
|
p_objectid bigint,
|
|
|
|
p_inspsample_id uuid,
|
|
p_fieldspecies varchar,
|
|
p_flarvcount smallint,
|
|
p_fpupcount smallint,
|
|
p_feggcount smallint,
|
|
p_flstages varchar,
|
|
p_fdomstage varchar,
|
|
p_fadultact varchar,
|
|
p_labspecies varchar,
|
|
p_llarvcount smallint,
|
|
p_lpupcount smallint,
|
|
p_leggcount smallint,
|
|
p_ldomstage varchar,
|
|
p_comments varchar,
|
|
p_globalid uuid,
|
|
p_created_user varchar,
|
|
p_created_date timestamp,
|
|
p_last_edited_user varchar,
|
|
p_last_edited_date timestamp,
|
|
p_processed smallint,
|
|
p_creationdate timestamp,
|
|
p_creator varchar,
|
|
p_editdate timestamp,
|
|
p_editor varchar,
|
|
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.inspectionsampledetail lv
|
|
WHERE lv.objectid = p_objectid
|
|
|
|
AND lv.inspsample_id IS NOT DISTINCT FROM p_inspsample_id
|
|
AND lv.fieldspecies IS NOT DISTINCT FROM p_fieldspecies
|
|
AND lv.flarvcount IS NOT DISTINCT FROM p_flarvcount
|
|
AND lv.fpupcount IS NOT DISTINCT FROM p_fpupcount
|
|
AND lv.feggcount IS NOT DISTINCT FROM p_feggcount
|
|
AND lv.flstages IS NOT DISTINCT FROM p_flstages
|
|
AND lv.fdomstage IS NOT DISTINCT FROM p_fdomstage
|
|
AND lv.fadultact IS NOT DISTINCT FROM p_fadultact
|
|
AND lv.labspecies IS NOT DISTINCT FROM p_labspecies
|
|
AND lv.llarvcount IS NOT DISTINCT FROM p_llarvcount
|
|
AND lv.lpupcount IS NOT DISTINCT FROM p_lpupcount
|
|
AND lv.leggcount IS NOT DISTINCT FROM p_leggcount
|
|
AND lv.ldomstage IS NOT DISTINCT FROM p_ldomstage
|
|
AND lv.comments IS NOT DISTINCT FROM p_comments
|
|
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.processed IS NOT DISTINCT FROM p_processed
|
|
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.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.inspectionsampledetail
|
|
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.inspectionsampledetail
|
|
WHERE objectid = p_objectid;
|
|
|
|
-- Insert new version
|
|
INSERT INTO fieldseeker.inspectionsampledetail (
|
|
objectid,
|
|
|
|
inspsample_id,
|
|
fieldspecies,
|
|
flarvcount,
|
|
fpupcount,
|
|
feggcount,
|
|
flstages,
|
|
fdomstage,
|
|
fadultact,
|
|
labspecies,
|
|
llarvcount,
|
|
lpupcount,
|
|
leggcount,
|
|
ldomstage,
|
|
comments,
|
|
globalid,
|
|
created_user,
|
|
created_date,
|
|
last_edited_user,
|
|
last_edited_date,
|
|
processed,
|
|
creationdate,
|
|
creator,
|
|
editdate,
|
|
editor,
|
|
geometry,
|
|
geospatial,
|
|
VERSION
|
|
) VALUES (
|
|
p_objectid,
|
|
|
|
p_inspsample_id,
|
|
p_fieldspecies,
|
|
p_flarvcount,
|
|
p_fpupcount,
|
|
p_feggcount,
|
|
p_flstages,
|
|
p_fdomstage,
|
|
p_fadultact,
|
|
p_labspecies,
|
|
p_llarvcount,
|
|
p_lpupcount,
|
|
p_leggcount,
|
|
p_ldomstage,
|
|
p_comments,
|
|
p_globalid,
|
|
p_created_user,
|
|
p_created_date,
|
|
p_last_edited_user,
|
|
p_last_edited_date,
|
|
p_processed,
|
|
p_creationdate,
|
|
p_creator,
|
|
p_editdate,
|
|
p_editor,
|
|
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
|