source: TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/database/ingest_procedures_MEDIN.sql @ 7185

Subversion URL: http://proj.badc.rl.ac.uk/svn/ndg/TI01-discovery-Ingest/trunk/v4.3.0/ingestAutomation-upgrade/database/ingest_procedures_MEDIN.sql@7185
Revision 7185, 7.2 KB checked in by sdonegan, 10 years ago (diff)

Adding files from v4.2.0 tag to form basis for v4.3.0 version

RevLine 
[7185]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), 
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), 
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, 
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, 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), 
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), 
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            document_ts_vector = to_tsvector('english', original_document_in),
96            authors_ts_vector = to_tsvector('english', authors),
97            parameters_ts_vector = to_tsvector('english', parameters),
98            scope_ts_vector = to_tsvector('english', scope),
99            update_date = current_timestamp, 
100                        harvest_count = 1,
101                        scn = scn_in + 1,
102                dataset_name = dataset_name_in,
103                datacentre_name = datacentre_name_in,
104                dataset_metadata_update_date = metadata_update_date_in,
105                dataset_start_date_nom = dataset_start_date_in, 
106                dataset_end_date_nom = dataset_end_date_in
107                        WHERE original_document_id = original_document_id_in;
108     END;
109$$ LANGUAGE 'plpgsql';
110
111
112DROP FUNCTION add_spatiotemporal_row(original_document_id_in int, north_in real, 
113        south_in real, west_in real, east_in real, start_time_in timestamp, 
114        end_time_in timestamp) CASCADE;
115CREATE FUNCTION add_spatiotemporal_row(original_document_id_in int, north_in real, 
116        south_in real, west_in real, east_in real, start_time_in timestamp, 
117        end_time_in timestamp) RETURNS void AS 
118$$
119        DECLARE
120                spatial_db_id integer := null;
121                temporal_db_id integer := null;
122                cmdStr text;
123
124    BEGIN
125        -- This inserts a new row in the spatial data table, if required
126                IF west_in is not null AND east_in is not null AND
127                        north_in is not null AND south_in is not null THEN
128
129                        cmdStr := 'INSERT INTO SPATIAL_DATA (spatial_data_id, original_document_id, geometry, create_date)
130                                VALUES (DEFAULT, '|| original_document_id_in ||',
131                                SetSRID(''BOX3D(' || west_in || ' ' || south_in || ', ' || east_in || ' ' || 
132                                        north_in || ')''::box3d,4326),
133                                current_timestamp)'; 
134       
135                -- For debugging only
136                        --raise notice 'cmdStr is: %', cmdStr;
137
138                EXECUTE cmdStr;
139
140                        SELECT MAX(spatial_data_id) INTO spatial_db_id FROM SPATIAL_DATA;
141                        --RAISE NOTICE 'Spatial data added - with ID: %', spatial_db_id;
142                END IF;
143
144        -- This inserts a new row in the temporal data table, if required
145        IF start_time_in is not null OR end_time_in is not null THEN
146                INSERT INTO TEMPORAL_DATA (temporal_data_id, original_document_id, start_time, end_time, create_date) 
147                                VALUES (DEFAULT, original_document_id_in, start_time_in, end_time_in, current_timestamp);
148
149                        SELECT MAX(temporal_data_id) INTO temporal_db_id FROM TEMPORAL_DATA;
150                        --RAISE NOTICE 'Temporal data added - with ID: %', temporal_db_id;
151                END IF;
152
153               
154               
155     END;
156$$ LANGUAGE 'plpgsql';
Note: See TracBrowser for help on using the repository browser.