diff --git a/sql/upgrades/036.sql b/sql/upgrades/036.sql index 5014dbd8..d8dcbb58 100644 --- a/sql/upgrades/036.sql +++ b/sql/upgrades/036.sql @@ -1,61 +1,61 @@ -- SWH DB schema upgrade -- from_version: 35 -- to_version: 36 -- description: Retrieve revision by occurrence criterions filtering insert into dbversion(version, release, description) values(36, now(), 'Work In Progress'); -create or replace function swh_occurrence_get_by( +create function swh_occurrence_get_by( origin_id bigint, branch_name text default NULL, validity text default NULL) returns setof occurrence_history language plpgsql as $$ declare filters text[] := array[] :: text[]; -- AND-clauses used to filter content q text; begin if origin_id is not null then filters := filters || format('origin = %L', origin_id); end if; if branch_name is not null then filters := filters || format('branch = %L', branch_name); end if; if validity is not null then filters := filters || format('lower(validity) <= %L and %L <= upper(validity)', validity, validity); end if; if cardinality(filters) = 0 then raise exception 'At least one filter amongst (origin_id, branch_name, validity) is needed'; else q = format('select * ' || 'from occurrence_history ' || 'where %s ' || 'order by validity desc', array_to_string(filters, ' and ')); return query execute q; end if; end $$; -CREATE OR REPLACE FUNCTION swh_revision_get_by(origin_id bigint, branch_name text = NULL::text, validity tstzrange = NULL::tstzrange) RETURNS SETOF revision_entry +CREATE OR REPLACE FUNCTION swh_revision_get_by(origin_id bigint, branch_name text = NULL::text, validity text = NULL::text) RETURNS SETOF revision_entry LANGUAGE sql STABLE AS $$ select r.id, r.date, r.date_offset, r.committer_date, r.committer_date_offset, r.type, r.directory, r.message, a.name, a.email, c.name, c.email, r.metadata, r.synthetic, array_agg(rh.parent_id::bytea order by rh.parent_rank) as parents from swh_occurrence_get_by(origin_id, branch_name, validity) as occ inner join revision r on occ.revision = r.id left join person a on a.id = r.author left join person c on c.id = r.committer left join revision_history rh on rh.id = r.id group by r.id, a.name, a.email, r.date, r.date_offset, c.name, c.email, r.committer_date, r.committer_date_offset, r.type, r.directory, r.message, r.metadata, r.synthetic; $$;