source: TI01-discovery-Ingest/trunk/v4.5.0/ingestAutomation-upgrade/database/ingest_procedures_v4.5.0.sql @ 8169

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI01-discovery-Ingest/trunk/v4.5.0/ingestAutomation-upgrade/database/ingest_procedures_v4.5.0.sql@8169
Revision 8169, 7.4 KB checked in by sdonegan, 7 years ago (diff)

Further debugging to include missing datacentre_dpws_id column in update procedure too

Line 
1/*
2 * Procedures used by the DB code as part of the ingest process
3 *
4 * C Byrom Apr 08
5 *
6 */
7DROP FUNCTION add_document_to_history() CASCADE;
8CREATE FUNCTION add_document_to_history() RETURNS TRIGGER AS 
9$$
10    BEGIN
11        -- This inserts the currently stored information
12        -- into the original_document_history table
13                -- NB, only do this when we are not just incrementing the harvest count
14                IF OLD.harvest_count=NEW.harvest_count THEN
15                INSERT INTO original_document_history
16                SELECT * FROM original_document WHERE original_document_id=NEW.original_document_id;
17                END IF;
18                RETURN NEW;
19     END;
20$$ LANGUAGE 'plpgsql';
21
22DROP FUNCTION create_document(filename_in varchar(255), discovery_id_in varchar(255), datacentre_dpws_id_in text,
23        doc_type_in text, original_document_in text, authors text, parameters text, scope text, dataset_name_in text, datacentre_name_in text, metadata_update_date_in timestamp, dataset_start_date_in timestamp, dataset_end_date_in timestamp) CASCADE;
24CREATE FUNCTION create_document(filename_in varchar(255), discovery_id_in varchar(255), datacentre_dpws_id_in text
25        doc_type_in text, original_document_in text, authors text, parameters text, scope text, dataset_name_in text, datacentre_name_in text, metadata_update_date_in timestamp, dataset_start_date_in timestamp, dataset_end_date_in timestamp) RETURNS integer AS 
26$$
27        DECLARE
28                db_id integer;
29    BEGIN
30        -- This inserts a new document into the DB
31        INSERT INTO ORIGINAL_DOCUMENT (original_document_id, original_document_filename, datacentre_dpws_id,
32            discovery_id, original_format, document_ts_vector, authors_ts_vector, 
33            parameters_ts_vector, scope_ts_vector, create_date, harvest_count, scn, dataset_name, datacentre_name, dataset_metadata_update_date, dataset_start_date_nom, dataset_end_date_nom,update_date ) VALUES (
34            DEFAULT, filename_in, discovery_id_in, datacentre_dpws_id_in, doc_type_in, 
35                        to_tsvector('english', original_document_in), to_tsvector('english', authors), 
36                        to_tsvector('english', parameters), to_tsvector('english', scope), current_timestamp, 1, 1, dataset_name_in, datacentre_name_in, metadata_update_date_in, dataset_start_date_in, dataset_end_date_in, current_timestamp);
37
38                SELECT original_document_id INTO db_id FROM ORIGINAL_DOCUMENT WHERE discovery_id = discovery_id_in;
39                RETURN db_id;
40     END;
41$$ LANGUAGE 'plpgsql';
42
43
44DROP FUNCTION delete_document(original_document_id_in int) CASCADE;
45CREATE FUNCTION delete_document(original_document_id_in int) RETURNS VOID AS 
46$$
47        DECLARE
48                db_id integer;
49                tdID integer;
50                sdID integer;
51    BEGIN
52        -- This deletes a document from the DB
53
54        -- get temporal_data_id from spatial_temporal_data (SJD 090209) --NOTE can't mix SELECT and DELETE bits here!!
55        --SELECT INTO tdID temporal_data_id FROM SPATIAL_TEMPO_DATA WHERE original_document_id = original_document_id_in;
56        --SELECT INTO sdID spatial_data_id FROM SPATIAL_TEMPORAL_DATA WHERE original_document_id = original_document_id_in;
57       
58        --got rid of spatial_temporal_data for MEDIN db updates
59        DELETE FROM spatial_data WHERE original_document_id = original_document_id_in;
60        DELETE FROM temporal_data WHERE original_document_id = original_document_id_in;
61       
62        DELETE FROM TRANSFORMED_DOCUMENT WHERE original_document_id = original_document_id_in;
63       
64        DELETE FROM ORIGINAL_DOCUMENT WHERE original_document_id = original_document_id_in;
65
66        END;
67$$ LANGUAGE 'plpgsql';
68
69
70DROP FUNCTION update_document(original_document_id_in int, filename_in varchar(255), datacentre_dpws_id_in text,
71        discovery_id_in varchar(255), doc_type_in text, original_document_in text, 
72        authors text, parameters text, scope text, scn_in int,dataset_name_in text, datacentre_name_in text, metadata_update_date_in timestamp, dataset_start_date_in timestamp, dataset_end_date_in timestamp) CASCADE;
73CREATE FUNCTION update_document(original_document_id_in int, filename_in varchar(255), datacentre_dpws_id_in text,
74        discovery_id_in varchar(255), doc_type_in text, original_document_in text, 
75        authors text, parameters text, scope text, scn_in int,dataset_name_in text, datacentre_name_in text, metadata_update_date_in timestamp, dataset_start_date_in timestamp, dataset_end_date_in timestamp) 
76        RETURNS VOID AS 
77$$
78        DECLARE
79                scn_current integer;
80    BEGIN
81        -- This updates an existing document
82
83                -- check the scn is valid before an update is done
84                SELECT scn INTO scn_current FROM ORIGINAL_DOCUMENT WHERE 
85                        original_document_id = original_document_id_in;
86                IF scn_in <> scn_current THEN
87                        RAISE EXCEPTION 'Invalid SCN specified (current scn=%, specified scn=%) -
88                                implies record has been changed during update - exiting...', scn_current, scn_in;
89                END IF;
90
91        UPDATE ORIGINAL_DOCUMENT SET
92                        original_document_filename = filename_in,
93            discovery_id = discovery_id_in,
94                        original_format = doc_type_in,
95                        datacentre_dpws_id = datacentre_dpws_id_in,
96            document_ts_vector = to_tsvector('english', original_document_in),
97            authors_ts_vector = to_tsvector('english', authors),
98            parameters_ts_vector = to_tsvector('english', parameters),
99            scope_ts_vector = to_tsvector('english', scope),
100            update_date = current_timestamp, 
101                        harvest_count = 1,
102                        scn = scn_in + 1,
103                dataset_name = dataset_name_in,
104                datacentre_name = datacentre_name_in,
105                dataset_metadata_update_date = metadata_update_date_in,
106                dataset_start_date_nom = dataset_start_date_in, 
107                dataset_end_date_nom = dataset_end_date_in
108                        WHERE original_document_id = original_document_id_in;
109     END;
110$$ LANGUAGE 'plpgsql';
111
112
113DROP FUNCTION add_spatiotemporal_row(original_document_id_in int, north_in real, 
114        south_in real, west_in real, east_in real, start_time_in timestamp, 
115        end_time_in timestamp) CASCADE;
116CREATE FUNCTION add_spatiotemporal_row(original_document_id_in int, north_in real, 
117        south_in real, west_in real, east_in real, start_time_in timestamp, 
118        end_time_in timestamp) RETURNS void AS 
119$$
120        DECLARE
121                spatial_db_id integer := null;
122                temporal_db_id integer := null;
123                cmdStr text;
124
125    BEGIN
126        -- This inserts a new row in the spatial data table, if required
127                IF west_in is not null AND east_in is not null AND
128                        north_in is not null AND south_in is not null THEN
129
130                        cmdStr := 'INSERT INTO SPATIAL_DATA (spatial_data_id, original_document_id, geometry, create_date)
131                                VALUES (DEFAULT, '|| original_document_id_in ||',
132                                SetSRID(''BOX3D(' || west_in || ' ' || south_in || ', ' || east_in || ' ' || 
133                                        north_in || ')''::box3d,4326),
134                                current_timestamp)'; 
135       
136                -- For debugging only
137                        --raise notice 'cmdStr is: %', cmdStr;
138
139                EXECUTE cmdStr;
140
141                        SELECT MAX(spatial_data_id) INTO spatial_db_id FROM SPATIAL_DATA;
142                        --RAISE NOTICE 'Spatial data added - with ID: %', spatial_db_id;
143                END IF;
144
145        -- This inserts a new row in the temporal data table, if required
146        IF start_time_in is not null OR end_time_in is not null THEN
147                INSERT INTO TEMPORAL_DATA (temporal_data_id, original_document_id, start_time, end_time, create_date) 
148                                VALUES (DEFAULT, original_document_id_in, start_time_in, end_time_in, current_timestamp);
149
150                        SELECT MAX(temporal_data_id) INTO temporal_db_id FROM TEMPORAL_DATA;
151                        --RAISE NOTICE 'Temporal data added - with ID: %', temporal_db_id;
152                END IF;
153
154               
155               
156     END;
157$$ LANGUAGE 'plpgsql';
Note: See TracBrowser for help on using the repository browser.