Initially made it through full update with new fieldseeker schema

This commit is contained in:
Eli Ribble 2025-12-05 23:11:57 +00:00
parent 0904f086b2
commit bd16f69e28
No known key found for this signature in database
510 changed files with 13617 additions and 14851 deletions

View file

@ -1,94 +1,169 @@
-- Prepared statement for conditional insert with versioning for fieldseeker.speciesabundance
-- Only inserts a new version if data has changed
PREPARE insert_speciesabundance_versioned(bigint, uuid, varchar, smallint, smallint, smallint, smallint, smallint, smallint, fieldseeker.speciesabundance_notinuit_f_enum, uuid, varchar, timestamp, varchar, timestamp, smallint, smallint, integer, integer, timestamp, varchar, timestamp, varchar, integer, double precision, double precision, double precision, varchar, varchar) AS
WITH
-- Get the current latest version of this record
latest_version AS (
SELECT * FROM fieldseeker.speciesabundance
WHERE objectid = $1
ORDER BY VERSION DESC
LIMIT 1
),
-- Calculate the next version number
next_version AS (
SELECT COALESCE(MAX(VERSION) + 1, 1) as version_num
FROM fieldseeker.speciesabundance
WHERE objectid = $1
)
-- Perform conditional insert
INSERT INTO fieldseeker.speciesabundance (
objectid, trapdata_id, species, males, unknown, bloodedfem, gravidfem, larvae, poolstogen, processed, globalid, created_user, created_date, last_edited_user, last_edited_date, pupae, eggs, females, total, creationdate, creator, editdate, editor, yearweek, globalzscore, r7score, r8score, h3r7, h3r8,
VERSION
)
SELECT
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29,
v.version_num
FROM next_version v
WHERE
-- Only insert if no record exists yet OR data has changed
NOT EXISTS (SELECT 1 FROM latest_version lv WHERE
lv.objectid IS NOT DISTINCT FROM $1 AND
lv.trapdata_id IS NOT DISTINCT FROM $2 AND
lv.species IS NOT DISTINCT FROM $3 AND
lv.males IS NOT DISTINCT FROM $4 AND
lv.unknown IS NOT DISTINCT FROM $5 AND
lv.bloodedfem IS NOT DISTINCT FROM $6 AND
lv.gravidfem IS NOT DISTINCT FROM $7 AND
lv.larvae IS NOT DISTINCT FROM $8 AND
lv.poolstogen IS NOT DISTINCT FROM $9 AND
lv.processed IS NOT DISTINCT FROM $10 AND
lv.globalid IS NOT DISTINCT FROM $11 AND
lv.created_user IS NOT DISTINCT FROM $12 AND
lv.created_date IS NOT DISTINCT FROM $13 AND
lv.last_edited_user IS NOT DISTINCT FROM $14 AND
lv.last_edited_date IS NOT DISTINCT FROM $15 AND
lv.pupae IS NOT DISTINCT FROM $16 AND
lv.eggs IS NOT DISTINCT FROM $17 AND
lv.females IS NOT DISTINCT FROM $18 AND
lv.total IS NOT DISTINCT FROM $19 AND
lv.creationdate IS NOT DISTINCT FROM $20 AND
lv.creator IS NOT DISTINCT FROM $21 AND
lv.editdate IS NOT DISTINCT FROM $22 AND
lv.editor IS NOT DISTINCT FROM $23 AND
lv.yearweek IS NOT DISTINCT FROM $24 AND
lv.globalzscore IS NOT DISTINCT FROM $25 AND
lv.r7score IS NOT DISTINCT FROM $26 AND
lv.r8score IS NOT DISTINCT FROM $27 AND
lv.h3r7 IS NOT DISTINCT FROM $28 AND
lv.h3r8 IS NOT DISTINCT FROM $29
)
RETURNING *;
-- Example usage: EXECUTE insert_speciesabundance_versioned(id, value1, value2, ...);
-- Parameters in order:
-- $1: OBJECTID (bigint)
-- $2: TRAPDATA_ID (uuid)
-- $3: SPECIES (varchar)
-- $4: MALES (smallint)
-- $5: UNKNOWN (smallint)
-- $6: BLOODEDFEM (smallint)
-- $7: GRAVIDFEM (smallint)
-- $8: LARVAE (smallint)
-- $9: POOLSTOGEN (smallint)
-- $10: PROCESSED (fieldseeker.speciesabundance_notinuit_f_enum)
-- $11: GlobalID (uuid)
-- $12: created_user (varchar)
-- $13: created_date (timestamp)
-- $14: last_edited_user (varchar)
-- $15: last_edited_date (timestamp)
-- $16: PUPAE (smallint)
-- $17: EGGS (smallint)
-- $18: FEMALES (integer)
-- $19: TOTAL (integer)
-- $20: CreationDate (timestamp)
-- $21: Creator (varchar)
-- $22: EditDate (timestamp)
-- $23: Editor (varchar)
-- $24: yearWeek (integer)
-- $25: globalZScore (double precision)
-- $26: r7Score (double precision)
-- $27: r8Score (double precision)
-- $28: h3r7 (varchar)
-- $29: h3r8 (varchar)
-- +goose StatementBegin
CREATE OR REPLACE FUNCTION fieldseeker.insert_speciesabundance(
p_objectid bigint,
p_trapdata_id uuid,
p_species varchar,
p_males smallint,
p_unknown smallint,
p_bloodedfem smallint,
p_gravidfem smallint,
p_larvae smallint,
p_poolstogen smallint,
p_processed smallint,
p_globalid uuid,
p_created_user varchar,
p_created_date timestamp,
p_last_edited_user varchar,
p_last_edited_date timestamp,
p_pupae smallint,
p_eggs smallint,
p_females integer,
p_total integer,
p_creationdate timestamp,
p_creator varchar,
p_editdate timestamp,
p_editor varchar,
p_yearweek integer,
p_globalzscore double precision,
p_r7score double precision,
p_r8score double precision,
p_h3r7 varchar,
p_h3r8 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.speciesabundance lv
WHERE lv.objectid = p_objectid
AND lv.trapdata_id IS NOT DISTINCT FROM p_trapdata_id
AND lv.species IS NOT DISTINCT FROM p_species
AND lv.males IS NOT DISTINCT FROM p_males
AND lv.unknown IS NOT DISTINCT FROM p_unknown
AND lv.bloodedfem IS NOT DISTINCT FROM p_bloodedfem
AND lv.gravidfem IS NOT DISTINCT FROM p_gravidfem
AND lv.larvae IS NOT DISTINCT FROM p_larvae
AND lv.poolstogen IS NOT DISTINCT FROM p_poolstogen
AND lv.processed IS NOT DISTINCT FROM p_processed
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.pupae IS NOT DISTINCT FROM p_pupae
AND lv.eggs IS NOT DISTINCT FROM p_eggs
AND lv.females IS NOT DISTINCT FROM p_females
AND lv.total IS NOT DISTINCT FROM p_total
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.yearweek IS NOT DISTINCT FROM p_yearweek
AND lv.globalzscore IS NOT DISTINCT FROM p_globalzscore
AND lv.r7score IS NOT DISTINCT FROM p_r7score
AND lv.r8score IS NOT DISTINCT FROM p_r8score
AND lv.h3r7 IS NOT DISTINCT FROM p_h3r7
AND lv.h3r8 IS NOT DISTINCT FROM p_h3r8
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.speciesabundance
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.speciesabundance
WHERE objectid = p_objectid;
-- Insert new version
INSERT INTO fieldseeker.speciesabundance (
objectid,
trapdata_id,
species,
males,
unknown,
bloodedfem,
gravidfem,
larvae,
poolstogen,
processed,
globalid,
created_user,
created_date,
last_edited_user,
last_edited_date,
pupae,
eggs,
females,
total,
creationdate,
creator,
editdate,
editor,
yearweek,
globalzscore,
r7score,
r8score,
h3r7,
h3r8,
geometry,
geospatial,
VERSION
) VALUES (
p_objectid,
p_trapdata_id,
p_species,
p_males,
p_unknown,
p_bloodedfem,
p_gravidfem,
p_larvae,
p_poolstogen,
p_processed,
p_globalid,
p_created_user,
p_created_date,
p_last_edited_user,
p_last_edited_date,
p_pupae,
p_eggs,
p_females,
p_total,
p_creationdate,
p_creator,
p_editdate,
p_editor,
p_yearweek,
p_globalzscore,
p_r7score,
p_r8score,
p_h3r7,
p_h3r8,
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