Skip to content
Snippets Groups Projects
Commit d96f03fb authored by Jorrit Schaap's avatar Jorrit Schaap
Browse files

Task #8721: added lta.on_fileinfo_inserted_add_directory_stats function and trigger

parent 1738d4d0
No related branches found
No related tags found
No related merge requests found
...@@ -95,7 +95,7 @@ CREATE TABLE scraper.last_directory_visit ( ...@@ -95,7 +95,7 @@ CREATE TABLE scraper.last_directory_visit (
CREATE TABLE metainfo.directory_stats ( CREATE TABLE metainfo.directory_stats (
id serial, id serial,
directory_id integer NOT NULL REFERENCES lta.directory ON DELETE CASCADE DEFERRABLE INITIALLY IMMEDIATE, directory_id integer UNIQUE NOT NULL REFERENCES lta.directory ON DELETE CASCADE DEFERRABLE INITIALLY IMMEDIATE,
num_files integer, num_files integer,
total_file_size bigint, total_file_size bigint,
min_file_size bigint, min_file_size bigint,
...@@ -154,6 +154,47 @@ CREATE TRIGGER trigger_directory_inserted ...@@ -154,6 +154,47 @@ CREATE TRIGGER trigger_directory_inserted
FOR EACH ROW FOR EACH ROW
EXECUTE PROCEDURE lta.on_directory_inserted_add_directory_closure_entry(); EXECUTE PROCEDURE lta.on_directory_inserted_add_directory_closure_entry();
--------------------------------------------------------------------------------
DROP TRIGGER IF EXISTS trigger_fileinfo_inserted ON lta.fileinfo;
DROP FUNCTION IF EXISTS lta.on_fileinfo_inserted_add_directory_stats();
CREATE OR REPLACE FUNCTION lta.on_fileinfo_inserted_add_directory_stats()
RETURNS trigger AS
$BODY$
BEGIN
INSERT INTO metainfo.directory_stats (directory_id)
VALUES (new.directory_id)
ON CONFLICT DO NOTHING ;
CREATE TEMPORARY TABLE temp_fileinfo_for_dirstats
ON COMMIT DROP
AS (SELECT fi.size, fi.creation_date FROM lta.fileinfo fi
WHERE fi.directory_id = NEW.directory_id) ;
UPDATE metainfo.directory_stats SET
num_files=(SELECT count(size) FROM temp_fileinfo_for_dirstats),
total_file_size=(SELECT sum(size) FROM temp_fileinfo_for_dirstats),
min_file_size=(SELECT min(size) FROM temp_fileinfo_for_dirstats),
max_file_size=(SELECT max(size) FROM temp_fileinfo_for_dirstats),
min_file_creation_date=(SELECT min(creation_date) FROM temp_fileinfo_for_dirstats),
max_file_creation_date=(SELECT max(creation_date) FROM temp_fileinfo_for_dirstats)
WHERE directory_id = NEW.directory_id ;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
CREATE TRIGGER trigger_fileinfo_inserted
AFTER INSERT
ON lta.fileinfo
FOR EACH ROW
EXECUTE PROCEDURE lta.on_fileinfo_inserted_add_directory_stats();
--------------------------------------------------------------------------------
-- END TRIGGERS -- END TRIGGERS
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment