nidus-sync/db/fieldseeker-schema/insert/insert_servicerequest_versioned.sql
Eli Ribble 97ec2c767d
Big checkpoint on new schema work
I have to checkpoint this because I'm trying to get a very complicated
multi-layered SQL query for inserting version history into the database
and I need to improve it iteratively

I've got a new binary that I can use to directly test complex stored
procedures. This is to shorted my testing loop.
2025-12-02 22:12:43 +00:00

208 lines
12 KiB
SQL

-- Prepared statement for conditional insert with versioning for fieldseeker.servicerequest
-- Only inserts a new version if data has changed
PREPARE insert_servicerequest_versioned(bigint, timestamp, fieldseeker.servicerequest_servicerequestsource_enum, varchar, fieldseeker.servicerequest_servicerequestpriority_enum, fieldseeker.servicerequest_servicerequest_supervisor_eba07b90_c885_4fe6_8080_7aa775403b9a_enum, fieldseeker.servicerequest_servicerequest_assignedtech_71d0d685_868f_4b7a_87e2_3661a3ee67c5_enum, fieldseeker.servicerequest_servicerequeststatus_enum, fieldseeker.servicerequest_notinuit_f_enum, varchar, varchar, varchar, varchar, varchar, varchar, varchar, varchar, fieldseeker.servicerequest_servicerequestregion_enum, varchar, varchar, fieldseeker.servicerequest_servicerequestcontactpreferences_enum, varchar, varchar, varchar, varchar, fieldseeker.servicerequest_servicerequestregion_enum, varchar, varchar, varchar, varchar, fieldseeker.servicerequest_notinuit_f_enum, fieldseeker.servicerequest_servicerequesttarget_enum, varchar, varchar, varchar, varchar, varchar, timestamp, varchar, integer, fieldseeker.servicerequest_notinuit_f_enum, varchar, timestamp, fieldseeker.servicerequest_notinuit_f_enum, timestamp, varchar, timestamp, fieldseeker.servicerequest_servicerequestrejectedreason_enum, timestamp, varchar, varchar, timestamp, fieldseeker.servicerequest_servicerequestnextaction_enum, smallint, uuid, varchar, timestamp, varchar, timestamp, timestamp, smallint, varchar, varchar, varchar, varchar, varchar, varchar, varchar, uuid, smallint, timestamp, smallint, timestamp, fieldseeker.servicerequest_servicerequest_dog_2b95ec97_1286_4fcd_88f4_f0e31113f696_enum, fieldseeker.servicerequest_servicerequest_schedule_period_3f40c046_afd1_4abd_8bf4_389650d29a49_enum, varchar, fieldseeker.servicerequest_servicerequest_spanish_aaa3dc66_9f9a_4527_8ecd_c9f76db33879_enum, timestamp, varchar, timestamp, varchar, fieldseeker.servicerequest_servicerequestissues_enum, varchar, varchar, varchar, varchar) AS
WITH
-- Get the current latest version of this record
latest_version AS (
SELECT * FROM fieldseeker.servicerequest
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.servicerequest
WHERE objectid = $1
)
-- Perform conditional insert
INSERT INTO fieldseeker.servicerequest (
objectid, recdatetime, source, entrytech, priority, supervisor, assignedtech, status, clranon, clrfname, clrphone1, clrphone2, clremail, clrcompany, clraddr1, clraddr2, clrcity, clrstate, clrzip, clrother, clrcontpref, reqcompany, reqaddr1, reqaddr2, reqcity, reqstate, reqzip, reqcrossst, reqsubdiv, reqmapgrid, reqpermission, reqtarget, reqdescr, reqnotesfortech, reqnotesforcust, reqfldnotes, reqprogramactions, datetimeclosed, techclosed, sr_number, reviewed, reviewedby, revieweddate, accepted, accepteddate, rejectedby, rejecteddate, rejectedreason, duedate, acceptedby, comments, estcompletedate, nextaction, recordstatus, globalid, created_user, created_date, last_edited_user, last_edited_date, firstresponsedate, responsedaycount, allowed, xvalue, yvalue, validx, validy, externalid, externalerror, pointlocid, notified, notifieddate, scheduled, scheduleddate, dog, schedule_period, schedule_notes, spanish, creationdate, creator, editdate, editor, issuesreported, jurisdiction, notificationtimestamp, zone, zone2,
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, $30, $31, $32, $33, $34, $35, $36, $37, $38, $39, $40, $41, $42, $43, $44, $45, $46, $47, $48, $49, $50, $51, $52, $53, $54, $55, $56, $57, $58, $59, $60, $61, $62, $63, $64, $65, $66, $67, $68, $69, $70, $71, $72, $73, $74, $75, $76, $77, $78, $79, $80, $81, $82, $83, $84, $85, $86,
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.recdatetime IS NOT DISTINCT FROM $2 AND
lv.source IS NOT DISTINCT FROM $3 AND
lv.entrytech IS NOT DISTINCT FROM $4 AND
lv.priority IS NOT DISTINCT FROM $5 AND
lv.supervisor IS NOT DISTINCT FROM $6 AND
lv.assignedtech IS NOT DISTINCT FROM $7 AND
lv.status IS NOT DISTINCT FROM $8 AND
lv.clranon IS NOT DISTINCT FROM $9 AND
lv.clrfname IS NOT DISTINCT FROM $10 AND
lv.clrphone1 IS NOT DISTINCT FROM $11 AND
lv.clrphone2 IS NOT DISTINCT FROM $12 AND
lv.clremail IS NOT DISTINCT FROM $13 AND
lv.clrcompany IS NOT DISTINCT FROM $14 AND
lv.clraddr1 IS NOT DISTINCT FROM $15 AND
lv.clraddr2 IS NOT DISTINCT FROM $16 AND
lv.clrcity IS NOT DISTINCT FROM $17 AND
lv.clrstate IS NOT DISTINCT FROM $18 AND
lv.clrzip IS NOT DISTINCT FROM $19 AND
lv.clrother IS NOT DISTINCT FROM $20 AND
lv.clrcontpref IS NOT DISTINCT FROM $21 AND
lv.reqcompany IS NOT DISTINCT FROM $22 AND
lv.reqaddr1 IS NOT DISTINCT FROM $23 AND
lv.reqaddr2 IS NOT DISTINCT FROM $24 AND
lv.reqcity IS NOT DISTINCT FROM $25 AND
lv.reqstate IS NOT DISTINCT FROM $26 AND
lv.reqzip IS NOT DISTINCT FROM $27 AND
lv.reqcrossst IS NOT DISTINCT FROM $28 AND
lv.reqsubdiv IS NOT DISTINCT FROM $29 AND
lv.reqmapgrid IS NOT DISTINCT FROM $30 AND
lv.reqpermission IS NOT DISTINCT FROM $31 AND
lv.reqtarget IS NOT DISTINCT FROM $32 AND
lv.reqdescr IS NOT DISTINCT FROM $33 AND
lv.reqnotesfortech IS NOT DISTINCT FROM $34 AND
lv.reqnotesforcust IS NOT DISTINCT FROM $35 AND
lv.reqfldnotes IS NOT DISTINCT FROM $36 AND
lv.reqprogramactions IS NOT DISTINCT FROM $37 AND
lv.datetimeclosed IS NOT DISTINCT FROM $38 AND
lv.techclosed IS NOT DISTINCT FROM $39 AND
lv.sr_number IS NOT DISTINCT FROM $40 AND
lv.reviewed IS NOT DISTINCT FROM $41 AND
lv.reviewedby IS NOT DISTINCT FROM $42 AND
lv.revieweddate IS NOT DISTINCT FROM $43 AND
lv.accepted IS NOT DISTINCT FROM $44 AND
lv.accepteddate IS NOT DISTINCT FROM $45 AND
lv.rejectedby IS NOT DISTINCT FROM $46 AND
lv.rejecteddate IS NOT DISTINCT FROM $47 AND
lv.rejectedreason IS NOT DISTINCT FROM $48 AND
lv.duedate IS NOT DISTINCT FROM $49 AND
lv.acceptedby IS NOT DISTINCT FROM $50 AND
lv.comments IS NOT DISTINCT FROM $51 AND
lv.estcompletedate IS NOT DISTINCT FROM $52 AND
lv.nextaction IS NOT DISTINCT FROM $53 AND
lv.recordstatus IS NOT DISTINCT FROM $54 AND
lv.globalid IS NOT DISTINCT FROM $55 AND
lv.created_user IS NOT DISTINCT FROM $56 AND
lv.created_date IS NOT DISTINCT FROM $57 AND
lv.last_edited_user IS NOT DISTINCT FROM $58 AND
lv.last_edited_date IS NOT DISTINCT FROM $59 AND
lv.firstresponsedate IS NOT DISTINCT FROM $60 AND
lv.responsedaycount IS NOT DISTINCT FROM $61 AND
lv.allowed IS NOT DISTINCT FROM $62 AND
lv.xvalue IS NOT DISTINCT FROM $63 AND
lv.yvalue IS NOT DISTINCT FROM $64 AND
lv.validx IS NOT DISTINCT FROM $65 AND
lv.validy IS NOT DISTINCT FROM $66 AND
lv.externalid IS NOT DISTINCT FROM $67 AND
lv.externalerror IS NOT DISTINCT FROM $68 AND
lv.pointlocid IS NOT DISTINCT FROM $69 AND
lv.notified IS NOT DISTINCT FROM $70 AND
lv.notifieddate IS NOT DISTINCT FROM $71 AND
lv.scheduled IS NOT DISTINCT FROM $72 AND
lv.scheduleddate IS NOT DISTINCT FROM $73 AND
lv.dog IS NOT DISTINCT FROM $74 AND
lv.schedule_period IS NOT DISTINCT FROM $75 AND
lv.schedule_notes IS NOT DISTINCT FROM $76 AND
lv.spanish IS NOT DISTINCT FROM $77 AND
lv.creationdate IS NOT DISTINCT FROM $78 AND
lv.creator IS NOT DISTINCT FROM $79 AND
lv.editdate IS NOT DISTINCT FROM $80 AND
lv.editor IS NOT DISTINCT FROM $81 AND
lv.issuesreported IS NOT DISTINCT FROM $82 AND
lv.jurisdiction IS NOT DISTINCT FROM $83 AND
lv.notificationtimestamp IS NOT DISTINCT FROM $84 AND
lv.zone IS NOT DISTINCT FROM $85 AND
lv.zone2 IS NOT DISTINCT FROM $86
)
RETURNING *;
-- Example usage: EXECUTE insert_servicerequest_versioned(id, value1, value2, ...);
-- Parameters in order:
-- $1: OBJECTID (bigint)
-- $2: RECDATETIME (timestamp)
-- $3: SOURCE (fieldseeker.servicerequest_servicerequestsource_enum)
-- $4: ENTRYTECH (varchar)
-- $5: PRIORITY (fieldseeker.servicerequest_servicerequestpriority_enum)
-- $6: SUPERVISOR (fieldseeker.servicerequest_servicerequest_supervisor_eba07b90_c885_4fe6_8080_7aa775403b9a_enum)
-- $7: ASSIGNEDTECH (fieldseeker.servicerequest_servicerequest_assignedtech_71d0d685_868f_4b7a_87e2_3661a3ee67c5_enum)
-- $8: STATUS (fieldseeker.servicerequest_servicerequeststatus_enum)
-- $9: CLRANON (fieldseeker.servicerequest_notinuit_f_enum)
-- $10: CLRFNAME (varchar)
-- $11: CLRPHONE1 (varchar)
-- $12: CLRPHONE2 (varchar)
-- $13: CLREMAIL (varchar)
-- $14: CLRCOMPANY (varchar)
-- $15: CLRADDR1 (varchar)
-- $16: CLRADDR2 (varchar)
-- $17: CLRCITY (varchar)
-- $18: CLRSTATE (fieldseeker.servicerequest_servicerequestregion_enum)
-- $19: CLRZIP (varchar)
-- $20: CLROTHER (varchar)
-- $21: CLRCONTPREF (fieldseeker.servicerequest_servicerequestcontactpreferences_enum)
-- $22: REQCOMPANY (varchar)
-- $23: REQADDR1 (varchar)
-- $24: REQADDR2 (varchar)
-- $25: REQCITY (varchar)
-- $26: REQSTATE (fieldseeker.servicerequest_servicerequestregion_enum)
-- $27: REQZIP (varchar)
-- $28: REQCROSSST (varchar)
-- $29: REQSUBDIV (varchar)
-- $30: REQMAPGRID (varchar)
-- $31: REQPERMISSION (fieldseeker.servicerequest_notinuit_f_enum)
-- $32: REQTARGET (fieldseeker.servicerequest_servicerequesttarget_enum)
-- $33: REQDESCR (varchar)
-- $34: REQNOTESFORTECH (varchar)
-- $35: REQNOTESFORCUST (varchar)
-- $36: REQFLDNOTES (varchar)
-- $37: REQPROGRAMACTIONS (varchar)
-- $38: DATETIMECLOSED (timestamp)
-- $39: TECHCLOSED (varchar)
-- $40: SR_NUMBER (integer)
-- $41: REVIEWED (fieldseeker.servicerequest_notinuit_f_enum)
-- $42: REVIEWEDBY (varchar)
-- $43: REVIEWEDDATE (timestamp)
-- $44: ACCEPTED (fieldseeker.servicerequest_notinuit_f_enum)
-- $45: ACCEPTEDDATE (timestamp)
-- $46: REJECTEDBY (varchar)
-- $47: REJECTEDDATE (timestamp)
-- $48: REJECTEDREASON (fieldseeker.servicerequest_servicerequestrejectedreason_enum)
-- $49: DUEDATE (timestamp)
-- $50: ACCEPTEDBY (varchar)
-- $51: COMMENTS (varchar)
-- $52: ESTCOMPLETEDATE (timestamp)
-- $53: NEXTACTION (fieldseeker.servicerequest_servicerequestnextaction_enum)
-- $54: RECORDSTATUS (smallint)
-- $55: GlobalID (uuid)
-- $56: created_user (varchar)
-- $57: created_date (timestamp)
-- $58: last_edited_user (varchar)
-- $59: last_edited_date (timestamp)
-- $60: FIRSTRESPONSEDATE (timestamp)
-- $61: RESPONSEDAYCOUNT (smallint)
-- $62: ALLOWED (varchar)
-- $63: XVALUE (varchar)
-- $64: YVALUE (varchar)
-- $65: VALIDX (varchar)
-- $66: VALIDY (varchar)
-- $67: EXTERNALID (varchar)
-- $68: EXTERNALERROR (varchar)
-- $69: POINTLOCID (uuid)
-- $70: NOTIFIED (smallint)
-- $71: NOTIFIEDDATE (timestamp)
-- $72: SCHEDULED (smallint)
-- $73: SCHEDULEDDATE (timestamp)
-- $74: DOG (fieldseeker.servicerequest_servicerequest_dog_2b95ec97_1286_4fcd_88f4_f0e31113f696_enum)
-- $75: schedule_period (fieldseeker.servicerequest_servicerequest_schedule_period_3f40c046_afd1_4abd_8bf4_389650d29a49_enum)
-- $76: schedule_notes (varchar)
-- $77: Spanish (fieldseeker.servicerequest_servicerequest_spanish_aaa3dc66_9f9a_4527_8ecd_c9f76db33879_enum)
-- $78: CreationDate (timestamp)
-- $79: Creator (varchar)
-- $80: EditDate (timestamp)
-- $81: Editor (varchar)
-- $82: ISSUESREPORTED (fieldseeker.servicerequest_servicerequestissues_enum)
-- $83: JURISDICTION (varchar)
-- $84: NOTIFICATIONTIMESTAMP (varchar)
-- $85: ZONE (varchar)
-- $86: ZONE2 (varchar)