diff --git a/sql/upgrades/108.sql b/sql/upgrades/108.sql new file mode 100644 index 000000000..673ceac61 --- /dev/null +++ b/sql/upgrades/108.sql @@ -0,0 +1,58 @@ +-- SWH DB schema upgrade +-- from_version: 107 +-- to_version: 108 +-- description: Add a new object_counts table to make counters more relevant + +insert into dbversion(version, release, description) + values(108, now(), 'Work In Progress'); + +CREATE TABLE object_counts ( + object_type text NOT NULL, + "value" bigint, + last_update timestamp with time zone +); + +ALTER TABLE object_counts + ADD CONSTRAINT object_counts_pkey PRIMARY KEY (object_type); + +CREATE OR REPLACE FUNCTION swh_update_counter(object_type text) RETURNS void + LANGUAGE plpgsql + AS $_$ +begin + execute format(' + insert into object_counts + (value, last_update, object_type) + values + ((select count(*) from %1$I), NOW(), %1$L) + on conflict (object_type) do update set + value = excluded.value, + last_update = excluded.last_update', + object_type); + return; +end; +$_$; + +CREATE OR REPLACE FUNCTION swh_stat_counters() RETURNS SETOF counter + LANGUAGE sql STABLE + AS $$ + select object_type as label, value as value + from object_counts + where object_type in ( + 'content', + 'directory', + 'directory_entry_dir', + 'directory_entry_file', + 'directory_entry_rev', + 'occurrence', + 'occurrence_history', + 'origin', + 'person', + 'entity', + 'entity_history', + 'release', + 'revision', + 'revision_history', + 'skipped_content' + ); +$$; +