# softwareheritage-dev Model

## Schema public

standard public schema

### Table: content

Structure of content

sha1

  sha1 `PRIMARY KEY`

sha1_git

  sha1_git `NOT NULL`

sha256

  sha256 `NOT NULL`

blake2s256

  blake2s256

length

  bigint `NOT NULL`

ctime

  timestamp with time zone `NOT NULL` `DEFAULT now()`

status

  content_status `NOT NULL` `DEFAULT 'visible'::content_status`

object_id

  bigserial `NOT NULL`

Indexes on content

content_blake2s256_idx

  blake2s256

content_ctime_idx

  ctime

content_sha256_idx

  sha256

### Table: dbversion

Structure of dbversion

version

  integer `PRIMARY KEY`

release

  timestamp with time zone

description

  text

### Table: directory

Structure of directory

id

  sha1_git `PRIMARY KEY`

dir_entries

  bigint[]

file_entries

  bigint[]

rev_entries

  bigint[]

object_id

  bigserial `NOT NULL`

Indexes on directory

directory_dir_entries_idx

  dir_entries

directory_file_entries_idx

  file_entries

directory_rev_entries_idx

  rev_entries

### Table: directory_entry_dir

Structure of directory_entry_dir

id

  bigserial `PRIMARY KEY`

target

  sha1_git

name

  unix_path

perms

  file_perms

### Table: directory_entry_file

Structure of directory_entry_file

id

  bigserial `PRIMARY KEY`

target

  sha1_git

name

  unix_path

perms

  file_perms

### Table: directory_entry_rev

Structure of directory_entry_rev

id

  bigserial `PRIMARY KEY`

target

  sha1_git

name

  unix_path

perms

  file_perms

### Table: fetch_history

Structure of fetch_history

id

  bigserial `PRIMARY KEY`

origin

  bigint `REFERENCES`

date

  timestamp with time zone `NOT NULL`

status

  boolean

result

  jsonb

stdout

  text

stderr

  text

duration

  interval

### Table: metadata_provider

Metadata provider information

Structure of metadata_provider

id

  serial `PRIMARY KEY`

  Provider's identifier

provider_name

  text `NOT NULL`

  Provider's name

provider_type

  text `NOT NULL`

provider_url

  text

  Provider's url

metadata

  jsonb

  Other metadata about provider

Indexes on metadata_provider

metadata_provider_provider_name_provider_url_idx

  provider_name, provider_url

Tables referencing origin_metadata via Foreign Key Constraints

### Table: object_counts

Structure of object_counts

object_type

  text `PRIMARY KEY`

value

  bigint

last_update

  timestamp with time zone

single_update

  boolean

### Table: object_counts_bucketed

Structure of object_counts_bucketed

line

  serial `PRIMARY KEY`

object_type

  text `NOT NULL`

identifier

  text `NOT NULL`

bucket_start

  bytea

bucket_end

  bytea

value

  bigint

last_update

  timestamp with time zone

### Table: occurrence_history

Structure of occurrence_history

origin

  bigint `NOT NULL` `REFERENCES`

branch

  bytea `NOT NULL`

target

  sha1_git `NOT NULL`

target_type

  object_type `NOT NULL`

visits

  bigint[] `NOT NULL`

object_id

  bigserial `PRIMARY KEY`

snapshot_branch_id

  bigint

Indexes on occurrence_history

occurrence_history_origin_branch_idx

  origin, branch

occurrence_history_target_target_type_idx

  target, target_type

### Table: origin

Structure of origin

id

  bigserial `PRIMARY KEY`

type

  text

url

  text `NOT NULL`

Indexes on origin

origin_type_url_idx

  type, url

Tables referencing fetch_history via Foreign Key Constraints

### Table: origin_metadata

keeps all metadata found concerning an origin

Structure of origin_metadata

id

  bigserial `PRIMARY KEY`

  the origin_metadata object's id

origin_id

  bigint `NOT NULL` `REFERENCES`

  the origin id for which the metadata was found

discovery_date

  timestamp with time zone `NOT NULL`

  the date of retrieval

provider_id

  bigint `NOT NULL` `REFERENCES`

  the metadata provider: github, openhub, deposit, etc.

tool_id

  bigint `NOT NULL` `REFERENCES`

  the tool used for extracting metadata: lister-github, etc.

metadata

  jsonb `NOT NULL`

  metadata in json format but with original terms

Indexes on origin_metadata

origin_metadata_origin_id_provider_id_tool_id_idx

  origin_id, provider_id, tool_id

### Table: origin_visit

Structure of origin_visit

origin

  bigint `PRIMARY KEY` `REFERENCES`

  Visited origin

visit

  bigint `PRIMARY KEY`

  Sequential visit number for the origin

date

  timestamp with time zone `NOT NULL`

  Visit timestamp

status

  origin_visit_status `NOT NULL`

  Visit result

metadata

  jsonb

  Origin metadata at visit time

snapshot_id

  bigint `REFERENCES`

  Origin snapshot at visit time

Indexes on origin_visit

origin_visit_date_idx

  date

### Table: person

Structure of person

id

  bigserial `PRIMARY KEY`

name

  bytea

email

  bytea

fullname

  bytea `NOT NULL`

Indexes on person

person_email_idx

  email

person_name_idx

  name

Tables referencing release via Foreign Key Constraints

### Table: release

Structure of release

id

  sha1_git `PRIMARY KEY`

target

  sha1_git

date

  timestamp with time zone

date_offset

  smallint

name

  bytea

comment

  bytea

author

  bigint `REFERENCES`

synthetic

  boolean `NOT NULL` `DEFAULT false`

object_id

  bigserial `NOT NULL`

target_type

  object_type `NOT NULL`

date_neg_utc_offset

  boolean

Indexes on release

release_target_target_type_idx

  target, target_type

### Table: revision

Structure of revision

id

  sha1_git `PRIMARY KEY`

date

  timestamp with time zone

date_offset

  smallint

committer_date

  timestamp with time zone

committer_date_offset

  smallint

type

  revision_type `NOT NULL`

directory

  sha1_git

message

  bytea

author

  bigint `REFERENCES`

committer

  bigint `REFERENCES`

synthetic

  boolean `NOT NULL` `DEFAULT false`

metadata

  jsonb

object_id

  bigserial `NOT NULL`

date_neg_utc_offset

  boolean

committer_date_neg_utc_offset

  boolean

Indexes on revision

revision_directory_idx

  directory

Tables referencing revision_history via Foreign Key Constraints

### Table: revision_history

Structure of revision_history

id

  sha1_git `PRIMARY KEY` `REFERENCES`

parent_id

  sha1_git

parent_rank

  integer `PRIMARY KEY`

Indexes on revision_history

revision_history_parent_id_idx

  parent_id

### Table: skipped_content

Structure of skipped_content

sha1

  sha1 `UNIQUE#1`

sha1_git

  sha1_git `UNIQUE#1`

sha256

  sha256 `UNIQUE#1`

blake2s256

  blake2s256

length

  bigint `NOT NULL`

ctime

  timestamp with time zone `NOT NULL` `DEFAULT now()`

status

  content_status `NOT NULL` `DEFAULT 'absent'::content_status`

reason

  text `NOT NULL`

origin

  bigint `REFERENCES`

object_id

  bigserial `NOT NULL`

Indexes on skipped_content

skipped_content_blake2s256_idx

  blake2s256

skipped_content_sha1_git_idx

  sha1_git

skipped_content_sha1_idx

  sha1

skipped_content_sha256_idx

  sha256

### Table: snapshot

Structure of snapshot

object_id

  bigserial `PRIMARY KEY`

id

  sha1_git

Tables referencing origin_visit via Foreign Key Constraints

### Table: snapshot_branch

Structure of snapshot_branch

object_id

  bigserial `PRIMARY KEY`

name

  bytea `NOT NULL`

target

  bytea

target_type

  snapshot_target

Constraints on snapshot_branch

snapshot_branch_target_check

  CHECK (((target_type IS NULL) = (target IS NULL)))

snapshot_target_check

  CHECK (((target_type <> ALL (ARRAY['content'::snapshot_target, 'directory'::snapshot_target, 'revision'::snapshot_target, 'release'::snapshot_target, 'snapshot'::snapshot_target])) OR (length(target) = 20)))

Tables referencing snapshot_branches via Foreign Key Constraints

### Table: snapshot_branches

Structure of snapshot_branches

snapshot_id

  bigint `PRIMARY KEY` `REFERENCES`

branch_id

  bigint `PRIMARY KEY` `REFERENCES`

### Table: tool

Tool information

Structure of tool

id

  serial `PRIMARY KEY`

  Tool identifier

name

  text `NOT NULL`

version

  text `NOT NULL`

  Tool version

configuration

  jsonb

  Tool configuration: command line, flags, etc...

Tables referencing origin_metadata via Foreign Key Constraints

### armor(bytea)

armor(bytea)

Function Properties

Language Return Type
- C text

    pg_armor

### armor(bytea, text[], text[])

armor(bytea, text[], text[])

Function Properties

Language Return Type
- C text

    pg_armor

### cash_dist(money, money)

cash_dist(money, money)

Function Properties

Language Return Type
- C money

    cash_dist

### crypt(text, text)

crypt(text, text)

Function Properties

Language Return Type
- C text

    pg_crypt

### date_dist(date, date)

date_dist(date, date)

Function Properties

Language Return Type
- C integer

    date_dist

### dearmor(text)

dearmor(text)

Function Properties

Language Return Type
- C bytea

    pg_dearmor

### decrypt(bytea, bytea, text)

decrypt(bytea, bytea, text)

Function Properties

Language Return Type
- C bytea

    pg_decrypt

### decrypt_iv(bytea, bytea, bytea, text)

decrypt_iv(bytea, bytea, bytea, text)

Function Properties

Language Return Type
- C bytea

    pg_decrypt_iv

### digest(bytea, text)

digest(bytea, text)

Function Properties

Language Return Type
- C bytea

    pg_digest

### digest(text, text)

digest(text, text)

Function Properties

Language Return Type
- C bytea

    pg_digest

### encrypt(bytea, bytea, text)

encrypt(bytea, bytea, text)

Function Properties

Language Return Type
- C bytea

    pg_encrypt

### encrypt_iv(bytea, bytea, bytea, text)

encrypt_iv(bytea, bytea, bytea, text)

Function Properties

Language Return Type
- C bytea

    pg_encrypt_iv

### float4_dist(real, real)

float4_dist(real, real)

Function Properties

Language Return Type
- C real

    float4_dist

### float8_dist(double precision, double precision)

float8_dist(double precision, double precision)

Function Properties

Language Return Type
- C double precision

    float8_dist

### gbt_bit_compress(internal)

gbt_bit_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_bit_compress

### gbt_bit_consistent(internal, "bit", smallint, oid, internal)

gbt_bit_consistent(internal, "bit", smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_bit_consistent

### gbt_bit_penalty(internal, internal, internal)

gbt_bit_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_bit_penalty

### gbt_bit_picksplit(internal, internal)

gbt_bit_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_bit_picksplit

### gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal)

gbt_bit_same(public.gbtreekey_var, public.gbtreekey_var, internal)

Function Properties

Language Return Type
- C internal

    gbt_bit_same

### gbt_bit_union(internal, internal)

gbt_bit_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey_var

    gbt_bit_union

### gbt_bpchar_compress(internal)

gbt_bpchar_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_bpchar_compress

### gbt_bpchar_consistent(internal, bpchar, smallint, oid, internal)

gbt_bpchar_consistent(internal, bpchar, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_bpchar_consistent

### gbt_bytea_compress(internal)

gbt_bytea_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_bytea_compress

### gbt_bytea_consistent(internal, bytea, smallint, oid, internal)

gbt_bytea_consistent(internal, bytea, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_bytea_consistent

### gbt_bytea_penalty(internal, internal, internal)

gbt_bytea_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_bytea_penalty

### gbt_bytea_picksplit(internal, internal)

gbt_bytea_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_bytea_picksplit

### gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal)

gbt_bytea_same(public.gbtreekey_var, public.gbtreekey_var, internal)

Function Properties

Language Return Type
- C internal

    gbt_bytea_same

### gbt_bytea_union(internal, internal)

gbt_bytea_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey_var

    gbt_bytea_union

### gbt_cash_compress(internal)

gbt_cash_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_cash_compress

### gbt_cash_consistent(internal, money, smallint, oid, internal)

gbt_cash_consistent(internal, money, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_cash_consistent

### gbt_cash_distance(internal, money, smallint, oid, internal)

gbt_cash_distance(internal, money, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_cash_distance

### gbt_cash_fetch(internal)

gbt_cash_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_cash_fetch

### gbt_cash_penalty(internal, internal, internal)

gbt_cash_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_cash_penalty

### gbt_cash_picksplit(internal, internal)

gbt_cash_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_cash_picksplit

### gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal)

gbt_cash_same(public.gbtreekey16, public.gbtreekey16, internal)

Function Properties

Language Return Type
- C internal

    gbt_cash_same

### gbt_cash_union(internal, internal)

gbt_cash_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey16

    gbt_cash_union

### gbt_date_compress(internal)

gbt_date_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_date_compress

### gbt_date_consistent(internal, date, smallint, oid, internal)

gbt_date_consistent(internal, date, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_date_consistent

### gbt_date_distance(internal, date, smallint, oid, internal)

gbt_date_distance(internal, date, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_date_distance

### gbt_date_fetch(internal)

gbt_date_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_date_fetch

### gbt_date_penalty(internal, internal, internal)

gbt_date_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_date_penalty

### gbt_date_picksplit(internal, internal)

gbt_date_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_date_picksplit

### gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal)

gbt_date_same(public.gbtreekey8, public.gbtreekey8, internal)

Function Properties

Language Return Type
- C internal

    gbt_date_same

### gbt_date_union(internal, internal)

gbt_date_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey8

    gbt_date_union

### gbt_decompress(internal)

gbt_decompress(internal)

Function Properties

Language Return Type
- C internal

    gbt_decompress

### gbt_enum_compress(internal)

gbt_enum_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_enum_compress

### gbt_enum_consistent(internal, anyenum, smallint, oid, internal)

gbt_enum_consistent(internal, anyenum, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_enum_consistent

### gbt_enum_fetch(internal)

gbt_enum_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_enum_fetch

### gbt_enum_penalty(internal, internal, internal)

gbt_enum_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_enum_penalty

### gbt_enum_picksplit(internal, internal)

gbt_enum_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_enum_picksplit

### gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal)

gbt_enum_same(public.gbtreekey8, public.gbtreekey8, internal)

Function Properties

Language Return Type
- C internal

    gbt_enum_same

### gbt_enum_union(internal, internal)

gbt_enum_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey8

    gbt_enum_union

### gbt_float4_compress(internal)

gbt_float4_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_float4_compress

### gbt_float4_consistent(internal, real, smallint, oid, internal)

gbt_float4_consistent(internal, real, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_float4_consistent

### gbt_float4_distance(internal, real, smallint, oid, internal)

gbt_float4_distance(internal, real, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_float4_distance

### gbt_float4_fetch(internal)

gbt_float4_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_float4_fetch

### gbt_float4_penalty(internal, internal, internal)

gbt_float4_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_float4_penalty

### gbt_float4_picksplit(internal, internal)

gbt_float4_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_float4_picksplit

### gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal)

gbt_float4_same(public.gbtreekey8, public.gbtreekey8, internal)

Function Properties

Language Return Type
- C internal

    gbt_float4_same

### gbt_float4_union(internal, internal)

gbt_float4_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey8

    gbt_float4_union

### gbt_float8_compress(internal)

gbt_float8_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_float8_compress

### gbt_float8_consistent(internal, double precision, smallint, oid, internal)

gbt_float8_consistent(internal, double precision, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_float8_consistent

### gbt_float8_distance(internal, double precision, smallint, oid, internal)

gbt_float8_distance(internal, double precision, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_float8_distance

### gbt_float8_fetch(internal)

gbt_float8_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_float8_fetch

### gbt_float8_penalty(internal, internal, internal)

gbt_float8_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_float8_penalty

### gbt_float8_picksplit(internal, internal)

gbt_float8_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_float8_picksplit

### gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal)

gbt_float8_same(public.gbtreekey16, public.gbtreekey16, internal)

Function Properties

Language Return Type
- C internal

    gbt_float8_same

### gbt_float8_union(internal, internal)

gbt_float8_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey16

    gbt_float8_union

### gbt_inet_compress(internal)

gbt_inet_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_inet_compress

### gbt_inet_consistent(internal, inet, smallint, oid, internal)

gbt_inet_consistent(internal, inet, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_inet_consistent

### gbt_inet_penalty(internal, internal, internal)

gbt_inet_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_inet_penalty

### gbt_inet_picksplit(internal, internal)

gbt_inet_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_inet_picksplit

### gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal)

gbt_inet_same(public.gbtreekey16, public.gbtreekey16, internal)

Function Properties

Language Return Type
- C internal

    gbt_inet_same

### gbt_inet_union(internal, internal)

gbt_inet_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey16

    gbt_inet_union

### gbt_int2_compress(internal)

gbt_int2_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_int2_compress

### gbt_int2_consistent(internal, smallint, smallint, oid, internal)

gbt_int2_consistent(internal, smallint, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_int2_consistent

### gbt_int2_distance(internal, smallint, smallint, oid, internal)

gbt_int2_distance(internal, smallint, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_int2_distance

### gbt_int2_fetch(internal)

gbt_int2_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_int2_fetch

### gbt_int2_penalty(internal, internal, internal)

gbt_int2_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_int2_penalty

### gbt_int2_picksplit(internal, internal)

gbt_int2_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_int2_picksplit

### gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal)

gbt_int2_same(public.gbtreekey4, public.gbtreekey4, internal)

Function Properties

Language Return Type
- C internal

    gbt_int2_same

### gbt_int2_union(internal, internal)

gbt_int2_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey4

    gbt_int2_union

### gbt_int4_compress(internal)

gbt_int4_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_int4_compress

### gbt_int4_consistent(internal, integer, smallint, oid, internal)

gbt_int4_consistent(internal, integer, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_int4_consistent

### gbt_int4_distance(internal, integer, smallint, oid, internal)

gbt_int4_distance(internal, integer, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_int4_distance

### gbt_int4_fetch(internal)

gbt_int4_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_int4_fetch

### gbt_int4_penalty(internal, internal, internal)

gbt_int4_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_int4_penalty

### gbt_int4_picksplit(internal, internal)

gbt_int4_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_int4_picksplit

### gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal)

gbt_int4_same(public.gbtreekey8, public.gbtreekey8, internal)

Function Properties

Language Return Type
- C internal

    gbt_int4_same

### gbt_int4_union(internal, internal)

gbt_int4_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey8

    gbt_int4_union

### gbt_int8_compress(internal)

gbt_int8_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_int8_compress

### gbt_int8_consistent(internal, bigint, smallint, oid, internal)

gbt_int8_consistent(internal, bigint, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_int8_consistent

### gbt_int8_distance(internal, bigint, smallint, oid, internal)

gbt_int8_distance(internal, bigint, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_int8_distance

### gbt_int8_fetch(internal)

gbt_int8_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_int8_fetch

### gbt_int8_penalty(internal, internal, internal)

gbt_int8_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_int8_penalty

### gbt_int8_picksplit(internal, internal)

gbt_int8_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_int8_picksplit

### gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal)

gbt_int8_same(public.gbtreekey16, public.gbtreekey16, internal)

Function Properties

Language Return Type
- C internal

    gbt_int8_same

### gbt_int8_union(internal, internal)

gbt_int8_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey16

    gbt_int8_union

### gbt_intv_compress(internal)

gbt_intv_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_intv_compress

### gbt_intv_consistent(internal, interval, smallint, oid, internal)

gbt_intv_consistent(internal, interval, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_intv_consistent

### gbt_intv_decompress(internal)

gbt_intv_decompress(internal)

Function Properties

Language Return Type
- C internal

    gbt_intv_decompress

### gbt_intv_distance(internal, interval, smallint, oid, internal)

gbt_intv_distance(internal, interval, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_intv_distance

### gbt_intv_fetch(internal)

gbt_intv_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_intv_fetch

### gbt_intv_penalty(internal, internal, internal)

gbt_intv_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_intv_penalty

### gbt_intv_picksplit(internal, internal)

gbt_intv_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_intv_picksplit

### gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal)

gbt_intv_same(public.gbtreekey32, public.gbtreekey32, internal)

Function Properties

Language Return Type
- C internal

    gbt_intv_same

### gbt_intv_union(internal, internal)

gbt_intv_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey32

    gbt_intv_union

### gbt_macad8_compress(internal)

gbt_macad8_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_macad8_compress

### gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal)

gbt_macad8_consistent(internal, macaddr8, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_macad8_consistent

### gbt_macad8_fetch(internal)

gbt_macad8_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_macad8_fetch

### gbt_macad8_penalty(internal, internal, internal)

gbt_macad8_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_macad8_penalty

### gbt_macad8_picksplit(internal, internal)

gbt_macad8_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_macad8_picksplit

### gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal)

gbt_macad8_same(public.gbtreekey16, public.gbtreekey16, internal)

Function Properties

Language Return Type
- C internal

    gbt_macad8_same

### gbt_macad8_union(internal, internal)

gbt_macad8_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey16

    gbt_macad8_union

### gbt_macad_compress(internal)

gbt_macad_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_macad_compress

### gbt_macad_consistent(internal, macaddr, smallint, oid, internal)

gbt_macad_consistent(internal, macaddr, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_macad_consistent

### gbt_macad_fetch(internal)

gbt_macad_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_macad_fetch

### gbt_macad_penalty(internal, internal, internal)

gbt_macad_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_macad_penalty

### gbt_macad_picksplit(internal, internal)

gbt_macad_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_macad_picksplit

### gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal)

gbt_macad_same(public.gbtreekey16, public.gbtreekey16, internal)

Function Properties

Language Return Type
- C internal

    gbt_macad_same

### gbt_macad_union(internal, internal)

gbt_macad_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey16

    gbt_macad_union

### gbt_numeric_compress(internal)

gbt_numeric_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_numeric_compress

### gbt_numeric_consistent(internal, numeric, smallint, oid, internal)

gbt_numeric_consistent(internal, numeric, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_numeric_consistent

### gbt_numeric_penalty(internal, internal, internal)

gbt_numeric_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_numeric_penalty

### gbt_numeric_picksplit(internal, internal)

gbt_numeric_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_numeric_picksplit

### gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal)

gbt_numeric_same(public.gbtreekey_var, public.gbtreekey_var, internal)

Function Properties

Language Return Type
- C internal

    gbt_numeric_same

### gbt_numeric_union(internal, internal)

gbt_numeric_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey_var

    gbt_numeric_union

### gbt_oid_compress(internal)

gbt_oid_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_oid_compress

### gbt_oid_consistent(internal, oid, smallint, oid, internal)

gbt_oid_consistent(internal, oid, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_oid_consistent

### gbt_oid_distance(internal, oid, smallint, oid, internal)

gbt_oid_distance(internal, oid, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_oid_distance

### gbt_oid_fetch(internal)

gbt_oid_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_oid_fetch

### gbt_oid_penalty(internal, internal, internal)

gbt_oid_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_oid_penalty

### gbt_oid_picksplit(internal, internal)

gbt_oid_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_oid_picksplit

### gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal)

gbt_oid_same(public.gbtreekey8, public.gbtreekey8, internal)

Function Properties

Language Return Type
- C internal

    gbt_oid_same

### gbt_oid_union(internal, internal)

gbt_oid_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey8

    gbt_oid_union

### gbt_text_compress(internal)

gbt_text_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_text_compress

### gbt_text_consistent(internal, text, smallint, oid, internal)

gbt_text_consistent(internal, text, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_text_consistent

### gbt_text_penalty(internal, internal, internal)

gbt_text_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_text_penalty

### gbt_text_picksplit(internal, internal)

gbt_text_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_text_picksplit

### gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal)

gbt_text_same(public.gbtreekey_var, public.gbtreekey_var, internal)

Function Properties

Language Return Type
- C internal

    gbt_text_same

### gbt_text_union(internal, internal)

gbt_text_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey_var

    gbt_text_union

### gbt_time_compress(internal)

gbt_time_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_time_compress

### gbt_time_consistent(internal, time without time zone, smallint, oid, internal)

gbt_time_consistent(internal, time without time zone, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_time_consistent

### gbt_time_distance(internal, time without time zone, smallint, oid, internal)

gbt_time_distance(internal, time without time zone, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_time_distance

### gbt_time_fetch(internal)

gbt_time_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_time_fetch

### gbt_time_penalty(internal, internal, internal)

gbt_time_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_time_penalty

### gbt_time_picksplit(internal, internal)

gbt_time_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_time_picksplit

### gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal)

gbt_time_same(public.gbtreekey16, public.gbtreekey16, internal)

Function Properties

Language Return Type
- C internal

    gbt_time_same

### gbt_time_union(internal, internal)

gbt_time_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey16

    gbt_time_union

### gbt_timetz_compress(internal)

gbt_timetz_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_timetz_compress

### gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal)

gbt_timetz_consistent(internal, time with time zone, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_timetz_consistent

### gbt_ts_compress(internal)

gbt_ts_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_ts_compress

### gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal)

gbt_ts_consistent(internal, timestamp without time zone, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_ts_consistent

### gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal)

gbt_ts_distance(internal, timestamp without time zone, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_ts_distance

### gbt_ts_fetch(internal)

gbt_ts_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_ts_fetch

### gbt_ts_penalty(internal, internal, internal)

gbt_ts_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_ts_penalty

### gbt_ts_picksplit(internal, internal)

gbt_ts_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_ts_picksplit

### gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal)

gbt_ts_same(public.gbtreekey16, public.gbtreekey16, internal)

Function Properties

Language Return Type
- C internal

    gbt_ts_same

### gbt_ts_union(internal, internal)

gbt_ts_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey16

    gbt_ts_union

### gbt_tstz_compress(internal)

gbt_tstz_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_tstz_compress

### gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal)

gbt_tstz_consistent(internal, timestamp with time zone, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_tstz_consistent

### gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal)

gbt_tstz_distance(internal, timestamp with time zone, smallint, oid, internal)

Function Properties

Language Return Type
- C double precision

    gbt_tstz_distance

### gbt_uuid_compress(internal)

gbt_uuid_compress(internal)

Function Properties

Language Return Type
- C internal

    gbt_uuid_compress

### gbt_uuid_consistent(internal, uuid, smallint, oid, internal)

gbt_uuid_consistent(internal, uuid, smallint, oid, internal)

Function Properties

Language Return Type
- C boolean

    gbt_uuid_consistent

### gbt_uuid_fetch(internal)

gbt_uuid_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_uuid_fetch

### gbt_uuid_penalty(internal, internal, internal)

gbt_uuid_penalty(internal, internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_uuid_penalty

### gbt_uuid_picksplit(internal, internal)

gbt_uuid_picksplit(internal, internal)

Function Properties

Language Return Type
- C internal

    gbt_uuid_picksplit

### gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal)

gbt_uuid_same(public.gbtreekey32, public.gbtreekey32, internal)

Function Properties

Language Return Type
- C internal

    gbt_uuid_same

### gbt_uuid_union(internal, internal)

gbt_uuid_union(internal, internal)

Function Properties

Language Return Type
- C gbtreekey32

    gbt_uuid_union

### gbt_var_decompress(internal)

gbt_var_decompress(internal)

Function Properties

Language Return Type
- C internal

    gbt_var_decompress

### gbt_var_fetch(internal)

gbt_var_fetch(internal)

Function Properties

Language Return Type
- C internal

    gbt_var_fetch

### gbtreekey16_in(cstring)

gbtreekey16_in(cstring)

Function Properties

Language Return Type
- C gbtreekey16

    gbtreekey_in

### gbtreekey16_out(public.gbtreekey16)

gbtreekey16_out(public.gbtreekey16)

Function Properties

Language Return Type
- C cstring

    gbtreekey_out

### gbtreekey32_in(cstring)

gbtreekey32_in(cstring)

Function Properties

Language Return Type
- C gbtreekey32

    gbtreekey_in

### gbtreekey32_out(public.gbtreekey32)

gbtreekey32_out(public.gbtreekey32)

Function Properties

Language Return Type
- C cstring

    gbtreekey_out

### gbtreekey4_in(cstring)

gbtreekey4_in(cstring)

Function Properties

Language Return Type
- C gbtreekey4

    gbtreekey_in

### gbtreekey4_out(public.gbtreekey4)

gbtreekey4_out(public.gbtreekey4)

Function Properties

Language Return Type
- C cstring

    gbtreekey_out

### gbtreekey8_in(cstring)

gbtreekey8_in(cstring)

Function Properties

Language Return Type
- C gbtreekey8

    gbtreekey_in

### gbtreekey8_out(public.gbtreekey8)

gbtreekey8_out(public.gbtreekey8)

Function Properties

Language Return Type
- C cstring

    gbtreekey_out

### gbtreekey_var_in(cstring)

gbtreekey_var_in(cstring)

Function Properties

Language Return Type
- C gbtreekey_var

    gbtreekey_in

### gbtreekey_var_out(public.gbtreekey_var)

gbtreekey_var_out(public.gbtreekey_var)

Function Properties

Language Return Type
- C cstring

    gbtreekey_out

### gen_random_bytes(integer)

gen_random_bytes(integer)

Function Properties

Language Return Type
- C bytea

    pg_random_bytes

### gen_random_uuid()

gen_random_uuid()

Function Properties

Language Return Type
- C uuid

    pg_random_uuid

### gen_salt(text)

gen_salt(text)

Function Properties

Language Return Type
- C text

    pg_gen_salt

### gen_salt(text, integer)

gen_salt(text, integer)

Function Properties

Language Return Type
- C text

    pg_gen_salt_rounds

### hash_sha1(text)

hash_sha1(text)

Function Properties

Language Return Type
- SQL text

Compute SHA1 hash as text

       select encode(digest($1, 'sha1'), 'hex')

### hmac(bytea, bytea, text)

hmac(bytea, bytea, text)

Function Properties

Language Return Type
- C bytea

    pg_hmac

### hmac(text, text, text)

hmac(text, text, text)

Function Properties

Language Return Type
- C bytea

    pg_hmac

### int2_dist(smallint, smallint)

int2_dist(smallint, smallint)

Function Properties

Language Return Type
- C smallint

    int2_dist

### int4_dist(integer, integer)

int4_dist(integer, integer)

Function Properties

Language Return Type
- C integer

    int4_dist

### int8_dist(bigint, bigint)

int8_dist(bigint, bigint)

Function Properties

Language Return Type
- C bigint

    int8_dist

### interval_dist(interval, interval)

interval_dist(interval, interval)

Function Properties

Language Return Type
- C interval

    interval_dist

### notify_new_content()

notify_new_content()

Function Properties

Language Return Type
- PLPGSQL trigger

      begin
        perform pg_notify('new_content', json_build_object(
          'sha1', encode(new.sha1, 'hex'),
          'sha1_git', encode(new.sha1_git, 'hex'),
          'sha256', encode(new.sha256, 'hex'),
          'blake2s256', encode(new.blake2s256, 'hex')
        )::text);
        return null;
      end;

### notify_new_directory()

notify_new_directory()

Function Properties

Language Return Type
- PLPGSQL trigger

      begin
        perform pg_notify('new_directory', json_build_object('id', encode(new.id, 'hex'))::text);
        return null;
      end;

### notify_new_origin()

notify_new_origin()

Function Properties

Language Return Type
- PLPGSQL trigger

      begin
        perform pg_notify('new_origin', json_build_object('id', new.id)::text);
        return null;
      end;

### notify_new_origin_visit()

notify_new_origin_visit()

Function Properties

Language Return Type
- PLPGSQL trigger

      begin
        perform pg_notify('new_origin_visit', json_build_object(
          'origin', new.origin,
          'visit', new.visit
        )::text);
        return null;
      end;

### notify_new_release()

notify_new_release()

Function Properties

Language Return Type
- PLPGSQL trigger

      begin
        perform pg_notify('new_release', json_build_object('id', encode(new.id, 'hex'))::text);
        return null;
      end;

### notify_new_revision()

notify_new_revision()

Function Properties

Language Return Type
- PLPGSQL trigger

      begin
        perform pg_notify('new_revision', json_build_object('id', encode(new.id, 'hex'))::text);
        return null;
      end;

### notify_new_skipped_content()

notify_new_skipped_content()

Function Properties

Language Return Type
- PLPGSQL trigger

      begin
        perform pg_notify('new_skipped_content', json_build_object(
          'sha1', encode(new.sha1, 'hex'),
          'sha1_git', encode(new.sha1_git, 'hex'),
          'sha256', encode(new.sha256, 'hex'),
          'blake2s256', encode(new.blake2s256, 'hex')
        )::text);
        return null;
      end;

### oid_dist(oid, oid)

oid_dist(oid, oid)

Function Properties

Language Return Type
- C oid

    oid_dist

### pgp_armor_headers(value text)

pgp_armor_headers(value text)

Function Properties

Language Return Type
- C SET OF record

    pgp_armor_headers

### pgp_key_id(bytea)

pgp_key_id(bytea)

Function Properties

Language Return Type
- C text

    pgp_key_id_w

### pgp_pub_decrypt(bytea, bytea)

pgp_pub_decrypt(bytea, bytea)

Function Properties

Language Return Type
- C text

    pgp_pub_decrypt_text

### pgp_pub_decrypt(bytea, bytea, text)

pgp_pub_decrypt(bytea, bytea, text)

Function Properties

Language Return Type
- C text

    pgp_pub_decrypt_text

### pgp_pub_decrypt(bytea, bytea, text, text)

pgp_pub_decrypt(bytea, bytea, text, text)

Function Properties

Language Return Type
- C text

    pgp_pub_decrypt_text

### pgp_pub_decrypt_bytea(bytea, bytea)

pgp_pub_decrypt_bytea(bytea, bytea)

Function Properties

Language Return Type
- C bytea

    pgp_pub_decrypt_bytea

### pgp_pub_decrypt_bytea(bytea, bytea, text)

pgp_pub_decrypt_bytea(bytea, bytea, text)

Function Properties

Language Return Type
- C bytea

    pgp_pub_decrypt_bytea

### pgp_pub_decrypt_bytea(bytea, bytea, text, text)

pgp_pub_decrypt_bytea(bytea, bytea, text, text)

Function Properties

Language Return Type
- C bytea

    pgp_pub_decrypt_bytea

### pgp_pub_encrypt(text, bytea)

pgp_pub_encrypt(text, bytea)

Function Properties

Language Return Type
- C bytea

    pgp_pub_encrypt_text

### pgp_pub_encrypt(text, bytea, text)

pgp_pub_encrypt(text, bytea, text)

Function Properties

Language Return Type
- C bytea

    pgp_pub_encrypt_text

### pgp_pub_encrypt_bytea(bytea, bytea)

pgp_pub_encrypt_bytea(bytea, bytea)

Function Properties

Language Return Type
- C bytea

    pgp_pub_encrypt_bytea

### pgp_pub_encrypt_bytea(bytea, bytea, text)

pgp_pub_encrypt_bytea(bytea, bytea, text)

Function Properties

Language Return Type
- C bytea

    pgp_pub_encrypt_bytea

### pgp_sym_decrypt(bytea, text)

pgp_sym_decrypt(bytea, text)

Function Properties

Language Return Type
- C text

    pgp_sym_decrypt_text

### pgp_sym_decrypt(bytea, text, text)

pgp_sym_decrypt(bytea, text, text)

Function Properties

Language Return Type
- C text

    pgp_sym_decrypt_text

### pgp_sym_decrypt_bytea(bytea, text)

pgp_sym_decrypt_bytea(bytea, text)

Function Properties

Language Return Type
- C bytea

    pgp_sym_decrypt_bytea

### pgp_sym_decrypt_bytea(bytea, text, text)

pgp_sym_decrypt_bytea(bytea, text, text)

Function Properties

Language Return Type
- C bytea

    pgp_sym_decrypt_bytea

### pgp_sym_encrypt(text, text)

pgp_sym_encrypt(text, text)

Function Properties

Language Return Type
- C bytea

    pgp_sym_encrypt_text

### pgp_sym_encrypt(text, text, text)

pgp_sym_encrypt(text, text, text)

Function Properties

Language Return Type
- C bytea

    pgp_sym_encrypt_text

### pgp_sym_encrypt_bytea(bytea, text)

pgp_sym_encrypt_bytea(bytea, text)

Function Properties

Language Return Type
- C bytea

    pgp_sym_encrypt_bytea

### pgp_sym_encrypt_bytea(bytea, text, text)

pgp_sym_encrypt_bytea(bytea, text, text)

Function Properties

Language Return Type
- C bytea

    pgp_sym_encrypt_bytea

### swh_content_add()

swh_content_add()

Function Properties

Language Return Type
- PLPGSQL void

    begin
        insert into content (sha1, sha1_git, sha256, blake2s256, length, status)
            select distinct sha1, sha1_git, sha256, blake2s256, length, status from tmp_content;
        return;
    end

### swh_content_find(blake2s256 public.sha1, sha256 public.sha1_git, sha1_git public.sha256, sha1 public.blake2s256)

swh_content_find(blake2s256 public.sha1, sha256 public.sha1_git, sha1_git public.sha256, sha1 public.blake2s256)

Function Properties

Language Return Type
- PLPGSQL content

    declare
        con content;
        filters text[] := array[] :: text[];  -- AND-clauses used to filter content
        q text;
    begin
        if sha1 is not null then
            filters := filters || format('sha1 = %L', sha1);
        end if;
        if sha1_git is not null then
            filters := filters || format('sha1_git = %L', sha1_git);
        end if;
        if sha256 is not null then
            filters := filters || format('sha256 = %L', sha256);
        end if;
        if blake2s256 is not null then
            filters := filters || format('blake2s256 = %L', blake2s256);
        end if;

        if cardinality(filters) = 0 then
            return null;
        else
            q = format('select * from content where %s',
                       array_to_string(filters, ' and '));
            execute q into con;
    	return con;
        end if;
    end

### swh_content_find_directory(content_id public.sha1)

swh_content_find_directory(content_id public.sha1)

Function Properties

Language Return Type
- SQL content_dir

        with recursive path as (
    	-- Recursively build a path from the requested content to a root
    	-- directory. Each iteration returns a pair (dir_id, filename) where
    	-- filename is relative to dir_id. Stops when no parent directory can
    	-- be found.
    	(select dir.id as dir_id, dir_entry_f.name as name, 0 as depth
    	 from directory_entry_file as dir_entry_f
    	 join content on content.sha1_git = dir_entry_f.target
    	 join directory as dir on dir.file_entries @> array[dir_entry_f.id]
    	 where content.sha1 = content_id
    	 limit 1)
    	union all
    	(select dir.id as dir_id,
    		(dir_entry_d.name || '/' || path.name)::unix_path as name,
    		path.depth + 1
    	 from path
    	 join directory_entry_dir as dir_entry_d on dir_entry_d.target = path.dir_id
    	 join directory as dir on dir.dir_entries @> array[dir_entry_d.id]
    	 limit 1)
        )
        select dir_id, name from path order by depth desc limit 1;

### swh_content_list_by_object_id(max_incl bigint, min_excl bigint)

swh_content_list_by_object_id(max_incl bigint, min_excl bigint)

Function Properties

Language Return Type
- SQL SET OF content

        select * from content
        where object_id > min_excl and object_id <= max_incl
        order by object_id;

### swh_content_update(columns_update text[])

swh_content_update(columns_update text[])

Function Properties

Language Return Type
- PLPGSQL void

Update existing content's columns

    declare
       query text;
       tmp_array text[];
    begin
        if array_length(columns_update, 1) = 0 then
            raise exception 'Please, provide the list of column names to update.';
        end if;

        tmp_array := array(select format('%1$s=t.%1$s', unnest) from unnest(columns_update));

        query = format('update content set %s
                        from tmp_content t where t.sha1 = content.sha1',
                        array_to_string(tmp_array, ', '));

        execute query;

        return;
    end

### swh_directory_add()

swh_directory_add()

Function Properties

Language Return Type
- PLPGSQL void

    begin
        perform swh_directory_entry_add('file');
        perform swh_directory_entry_add('dir');
        perform swh_directory_entry_add('rev');

        insert into directory
        select * from tmp_directory t
        where not exists (
            select 1 from directory d
    	where d.id = t.id);

        return;
    end

### swh_directory_entry_add(typ public.directory_entry_type)

swh_directory_entry_add(typ public.directory_entry_type)

Function Properties

Language Return Type
- PLPGSQL void

    begin
        execute format('
        insert into directory_entry_%1$s (target, name, perms)
        select distinct t.target, t.name, t.perms
        from tmp_directory_entry_%1$s t
        where not exists (
        select 1
        from directory_entry_%1$s i
        where t.target = i.target and t.name = i.name and t.perms = i.perms)
       ', typ);

        execute format('
        with new_entries as (
    	select t.dir_id, array_agg(i.id) as entries
    	from tmp_directory_entry_%1$s t
    	inner join directory_entry_%1$s i
    	using (target, name, perms)
    	group by t.dir_id
        )
        update tmp_directory as d
        set %1$s_entries = new_entries.entries
        from new_entries
        where d.id = new_entries.dir_id
        ', typ);

        return;
    end

### swh_directory_missing()

swh_directory_missing()

Function Properties

Language Return Type
- PLPGSQL SET OF sha1_git

    begin
        return query
    	select id from tmp_directory t
    	where not exists (
    	    select 1 from directory d
    	    where d.id = t.id);
        return;
    end

### swh_directory_walk(walked_dir_id public.sha1_git)

swh_directory_walk(walked_dir_id public.sha1_git)

Function Properties

Language Return Type
- SQL SET OF directory_entry

        with recursive entries as (
            select dir_id, type, target, name, perms, status, sha1, sha1_git,
                   sha256, length
            from swh_directory_walk_one(walked_dir_id)
            union all
            select dir_id, type, target, (dirname || '/' || name)::unix_path as name,
                   perms, status, sha1, sha1_git, sha256, length
            from (select (swh_directory_walk_one(dirs.target)).*, dirs.name as dirname
                  from (select target, name from entries where type = 'dir') as dirs) as with_parent
        )
        select dir_id, type, target, name, perms, status, sha1, sha1_git, sha256, length
        from entries

### swh_directory_walk_one(walked_dir_id public.sha1_git)

swh_directory_walk_one(walked_dir_id public.sha1_git)

Function Properties

Language Return Type
- SQL SET OF directory_entry

        with dir as (
    	select id as dir_id, dir_entries, file_entries, rev_entries
    	from directory
    	where id = walked_dir_id),
        ls_d as (select dir_id, unnest(dir_entries) as entry_id from dir),
        ls_f as (select dir_id, unnest(file_entries) as entry_id from dir),
        ls_r as (select dir_id, unnest(rev_entries) as entry_id from dir)
        (select dir_id, 'dir'::directory_entry_type as type,
                e.target, e.name, e.perms, NULL::content_status,
                NULL::sha1, NULL::sha1_git, NULL::sha256, NULL::bigint
         from ls_d
         left join directory_entry_dir e on ls_d.entry_id = e.id)
        union
        (select dir_id, 'file'::directory_entry_type as type,
                e.target, e.name, e.perms, c.status,
                c.sha1, c.sha1_git, c.sha256, c.length
         from ls_f
         left join directory_entry_file e on ls_f.entry_id = e.id
         left join content c on e.target = c.sha1_git)
        union
        (select dir_id, 'rev'::directory_entry_type as type,
                e.target, e.name, e.perms, NULL::content_status,
                NULL::sha1, NULL::sha1_git, NULL::sha256, NULL::bigint
         from ls_r
         left join directory_entry_rev e on ls_r.entry_id = e.id)
        order by name;

### swh_find_directory_entry_by_path(dir_or_content_path public.sha1_git, walked_dir_id bytea[])

swh_find_directory_entry_by_path(dir_or_content_path public.sha1_git, walked_dir_id bytea[])

Function Properties

Language Return Type
- PLPGSQL directory_entry

    declare
        end_index integer;
        paths bytea default '';
        path bytea;
        res bytea[];
        r record;
    begin
        end_index := array_upper(dir_or_content_path, 1);
        res[1] := walked_dir_id;

        for i in 1..end_index
        loop
            path := dir_or_content_path[i];
            -- concatenate path for patching the name in the result record (if we found it)
            if i = 1 then
                paths = path;
            else
                paths := paths || '/' || path;  -- concatenate paths
            end if;

            if i <> end_index then
                select *
                from swh_directory_walk_one(res[i] :: sha1_git)
                where name=path
                and type = 'dir'
                limit 1 into r;
            else
                select *
                from swh_directory_walk_one(res[i] :: sha1_git)
                where name=path
                limit 1 into r;
            end if;

            -- find the path
            if r is null then
               return null;
            else
                -- store the next dir to lookup the next local path from
                res[i+1] := r.target;
            end if;
        end loop;

        -- at this moment, r is the result. Patch its 'name' with the full path before returning it.
        r.name := paths;
        return r;
    end

### swh_mktemp(tblname regclass)

swh_mktemp(tblname regclass)

Function Properties

Language Return Type
- PLPGSQL void

    begin
        execute format('
    	create temporary table tmp_%1$I
    	    (like %1$I including defaults)
    	    on commit drop;
          alter table tmp_%1$I drop column if exists object_id;
    	', tblname);
        return;
    end

### swh_mktemp_dir_entry(tblname regclass)

swh_mktemp_dir_entry(tblname regclass)

Function Properties

Language Return Type
- PLPGSQL void

    begin
        execute format('
    	create temporary table tmp_%1$I
    	    (like %1$I including defaults, dir_id sha1_git)
    	    on commit drop;
            alter table tmp_%1$I drop column id;
    	', tblname);
        return;
    end

### swh_mktemp_occurrence_history()

swh_mktemp_occurrence_history()

Function Properties

Language Return Type
- SQL void

        create temporary table tmp_occurrence_history(
            like occurrence_history including defaults,
            visit bigint not null
        ) on commit drop;
        alter table tmp_occurrence_history
          drop column visits,
          drop column object_id;

### swh_mktemp_release()

swh_mktemp_release()

Function Properties

Language Return Type
- SQL void

        create temporary table tmp_release (
            like release including defaults,
            author_fullname bytea,
            author_name bytea,
            author_email bytea
        ) on commit drop;
        alter table tmp_release drop column author;
        alter table tmp_release drop column object_id;

### swh_mktemp_revision()

swh_mktemp_revision()

Function Properties

Language Return Type
- SQL void

        create temporary table tmp_revision (
            like revision including defaults,
            author_fullname bytea,
            author_name bytea,
            author_email bytea,
            committer_fullname bytea,
            committer_name bytea,
            committer_email bytea
        ) on commit drop;
        alter table tmp_revision drop column author;
        alter table tmp_revision drop column committer;
        alter table tmp_revision drop column object_id;

### swh_mktemp_snapshot_branch()

swh_mktemp_snapshot_branch()

Function Properties

Language Return Type
- SQL void

      create temporary table tmp_snapshot_branch (
          name bytea not null,
          target bytea,
          target_type snapshot_target
      ) on commit drop;

### swh_mktemp_tool()

swh_mktemp_tool()

Function Properties

Language Return Type
- SQL void

        create temporary table tmp_tool (
          like tool including defaults
        ) on commit drop;
        alter table tmp_tool drop column id;

### swh_occurrence_get_by(date bigint, branch_name bytea, origin_id timestamp with time zone)

swh_occurrence_get_by(date bigint, branch_name bytea, origin_id timestamp with time zone)

Function Properties

Language Return Type
- PLPGSQL SET OF occurrence_history

    declare
        filters text[] := array[] :: text[];  -- AND-clauses used to filter content
        visit_id bigint;
        q text;
    begin
        if origin_id is null then
            raise exception 'Needs an origin_id to get an occurrence.';
        end if;
        filters := filters || format('origin = %L', origin_id);
        if branch_name is not null then
            filters := filters || format('branch = %L', branch_name);
        end if;
        if date is not null then
            select visit from swh_visit_find_by_date(origin_id, date) into visit_id;
        else
            select visit from origin_visit where origin = origin_id order by origin_visit.date desc limit 1 into visit_id;
        end if;
        if visit_id is null then
            return;
        end if;
        filters := filters || format('%L = any(visits)', visit_id);

        q = format('select * from occurrence_history where %s',
                   array_to_string(filters, ' and '));
        return query execute q;
    end

### swh_occurrence_history_add()

swh_occurrence_history_add()

Function Properties

Language Return Type
- PLPGSQL void

    declare
      origin_id origin.id%type;
    begin
      -- Create or update occurrence_history
      with occurrence_history_id_visit as (
        select tmp_occurrence_history.*, object_id, visits from tmp_occurrence_history
        left join occurrence_history using(origin, branch, target, target_type)
      ),
      occurrences_to_update as (
        select object_id, visit from occurrence_history_id_visit where object_id is not null
      ),
      update_occurrences as (
        update occurrence_history
        set visits = array(select unnest(occurrence_history.visits) as e
                            union
                           select occurrences_to_update.visit as e
                           order by e)
        from occurrences_to_update
        where occurrence_history.object_id = occurrences_to_update.object_id
      )
      insert into occurrence_history (origin, branch, target, target_type, visits)
        select origin, branch, target, target_type, ARRAY[visit]
          from occurrence_history_id_visit
          where object_id is null;
      return;
    end

### swh_origin_metadata_get_by_origin(origin integer)

swh_origin_metadata_get_by_origin(origin integer)

Function Properties

Language Return Type
- SQL SET OF origin_metadata_signature

        select om.id as id, origin_id, discovery_date, tool_id, om.metadata,
               mp.id as provider_id, provider_name, provider_type, provider_url
        from origin_metadata as om
        inner join metadata_provider mp on om.provider_id = mp.id
        where om.origin_id = origin
        order by discovery_date desc;

### swh_origin_metadata_get_by_provider_type(type integer, origin text)

swh_origin_metadata_get_by_provider_type(type integer, origin text)

Function Properties

Language Return Type
- SQL SET OF origin_metadata_signature

        select om.id as id, origin_id, discovery_date, tool_id, om.metadata,
               mp.id as provider_id, provider_name, provider_type, provider_url
        from origin_metadata as om
        inner join metadata_provider mp on om.provider_id = mp.id
        where om.origin_id = origin
        and mp.provider_type = type
        order by discovery_date desc;

### swh_origin_visit_add(date bigint, origin_id timestamp with time zone)

swh_origin_visit_add(date bigint, origin_id timestamp with time zone)

Function Properties

Language Return Type
- SQL bigint

      with last_known_visit as (
        select coalesce(max(visit), 0) as visit
        from origin_visit
        where origin = origin_id
      )
      insert into origin_visit (origin, date, visit, status)
      values (origin_id, date, (select visit from last_known_visit) + 1, 'ongoing')
      returning visit;

### swh_person_add_from_release()

swh_person_add_from_release()

Function Properties

Language Return Type
- PLPGSQL void

    begin
        with t as (
            select distinct author_fullname as fullname, author_name as name, author_email as email from tmp_release
        ) insert into person (fullname, name, email)
        select fullname, name, email from t
        where not exists (
            select 1
            from person p
            where t.fullname = p.fullname
        );
        return;
    end

### swh_person_add_from_revision()

swh_person_add_from_revision()

Function Properties

Language Return Type
- PLPGSQL void

    begin
        with t as (
            select author_fullname as fullname, author_name as name, author_email as email from tmp_revision
        union
            select committer_fullname as fullname, committer_name as name, committer_email as email from tmp_revision
        ) insert into person (fullname, name, email)
        select distinct fullname, name, email from t
        where not exists (
            select 1
            from person p
            where t.fullname = p.fullname
        );
        return;
    end

### swh_release_add()

swh_release_add()

Function Properties

Language Return Type
- PLPGSQL void

    begin
        perform swh_person_add_from_release();

        insert into release (id, target, target_type, date, date_offset, date_neg_utc_offset, name, comment, author, synthetic)
        select t.id, t.target, t.target_type, t.date, t.date_offset, t.date_neg_utc_offset, t.name, t.comment, a.id, t.synthetic
        from tmp_release t
        left join person a on a.fullname = t.author_fullname;
        return;
    end

### swh_release_list_by_object_id(max_incl bigint, min_excl bigint)

swh_release_list_by_object_id(max_incl bigint, min_excl bigint)

Function Properties

Language Return Type
- SQL SET OF release_entry

        with rels as (
            select * from release
            where object_id > min_excl and object_id <= max_incl
        )
        select r.id, r.target, r.target_type, r.date, r.date_offset, r.date_neg_utc_offset, r.name, r.comment,
               r.synthetic, p.id as author_id, p.fullname as author_fullname, p.name as author_name, p.email as author_email, r.object_id
        from rels r
        left join person p on p.id = r.author
        order by r.object_id;

### swh_revision_add()

swh_revision_add()

Function Properties

Language Return Type
- PLPGSQL void

    begin
        perform swh_person_add_from_revision();

        insert into revision (id, date, date_offset, date_neg_utc_offset, committer_date, committer_date_offset, committer_date_neg_utc_offset, type, directory, message, author, committer, metadata, synthetic)
        select t.id, t.date, t.date_offset, t.date_neg_utc_offset, t.committer_date, t.committer_date_offset, t.committer_date_neg_utc_offset, t.type, t.directory, t.message, a.id, c.id, t.metadata, t.synthetic
        from tmp_revision t
        left join person a on a.fullname = t.author_fullname
        left join person c on c.fullname = t.committer_fullname;
        return;
    end

### swh_revision_get_by(date bigint, branch_name bytea, origin_id timestamp with time zone)

swh_revision_get_by(date bigint, branch_name bytea, origin_id timestamp with time zone)

Function Properties

Language Return Type
- SQL SET OF revision_entry

        select r.id, r.date, r.date_offset, r.date_neg_utc_offset,
            r.committer_date, r.committer_date_offset, r.committer_date_neg_utc_offset,
            r.type, r.directory, r.message,
            a.id, a.fullname, a.name, a.email, c.id, c.fullname, c.name, c.email, r.metadata, r.synthetic,
            array(select rh.parent_id::bytea
                from revision_history rh
                where rh.id = r.id
                order by rh.parent_rank
            ) as parents, r.object_id
        from swh_occurrence_get_by(origin_id, branch_name, date) as occ
        inner join revision r on occ.target = r.id
        left join person a on a.id = r.author
        left join person c on c.id = r.committer;

### swh_revision_list(parents bytea[], id bigint)

swh_revision_list(parents bytea[], id bigint)

Function Properties

Language Return Type
- SQL SET OF record

        with recursive full_rev_list(id) as (
            (select id from revision where id = ANY(root_revisions))
            union
            (select h.parent_id
             from revision_history as h
             join full_rev_list on h.id = full_rev_list.id)
        ),
        rev_list as (select id from full_rev_list limit num_revs)
        select rev_list.id as id,
               array(select rh.parent_id::bytea
                     from revision_history rh
                     where rh.id = rev_list.id
                     order by rh.parent_rank
                    ) as parent
        from rev_list;

### swh_revision_list_by_object_id(max_incl bigint, min_excl bigint)

swh_revision_list_by_object_id(max_incl bigint, min_excl bigint)

Function Properties

Language Return Type
- SQL SET OF revision_entry

        with revs as (
            select * from revision
            where object_id > min_excl and object_id <= max_incl
        )
        select r.id, r.date, r.date_offset, r.date_neg_utc_offset,
               r.committer_date, r.committer_date_offset, r.committer_date_neg_utc_offset,
               r.type, r.directory, r.message,
               a.id, a.fullname, a.name, a.email, c.id, c.fullname, c.name, c.email, r.metadata, r.synthetic,
               array(select rh.parent_id::bytea from revision_history rh where rh.id = r.id order by rh.parent_rank)
                   as parents, r.object_id
        from revs r
        left join person a on a.id = r.author
        left join person c on c.id = r.committer
        order by r.object_id;

### swh_revision_list_children(parents bytea[], id bigint)

swh_revision_list_children(parents bytea[], id bigint)

Function Properties

Language Return Type
- SQL SET OF record

        with recursive full_rev_list(id) as (
            (select id from revision where id = ANY(root_revisions))
            union
            (select h.id
             from revision_history as h
             join full_rev_list on h.parent_id = full_rev_list.id)
        ),
        rev_list as (select id from full_rev_list limit num_revs)
        select rev_list.id as id,
               array(select rh.parent_id::bytea
                     from revision_history rh
                     where rh.id = rev_list.id
                     order by rh.parent_rank
                    ) as parent
        from rev_list;

### swh_revision_log(num_revs bytea[], root_revisions bigint)

swh_revision_log(num_revs bytea[], root_revisions bigint)

Function Properties

Language Return Type
- SQL SET OF revision_entry

        select t.id, r.date, r.date_offset, r.date_neg_utc_offset,
               r.committer_date, r.committer_date_offset, r.committer_date_neg_utc_offset,
               r.type, r.directory, r.message,
               a.id, a.fullname, a.name, a.email,
               c.id, c.fullname, c.name, c.email,
               r.metadata, r.synthetic, t.parents, r.object_id
        from swh_revision_list(root_revisions, num_revs) as t
        left join revision r on t.id = r.id
        left join person a on a.id = r.author
        left join person c on c.id = r.committer;

### swh_revision_walk(revision_id public.sha1_git)

swh_revision_walk(revision_id public.sha1_git)

Function Properties

Language Return Type
- SQL SET OF directory_entry

Recursively list the revision targeted directory arborescence

      select dir_id, type, target, name, perms, status, sha1, sha1_git, sha256, length
      from swh_directory_walk((select directory from revision where id=revision_id))

### swh_skipped_content_add()

swh_skipped_content_add()

Function Properties

Language Return Type
- PLPGSQL void

    begin
        insert into skipped_content (sha1, sha1_git, sha256, blake2s256, length, status, reason, origin)
            select distinct sha1, sha1_git, sha256, blake2s256, length, status, reason, origin
    	from tmp_skipped_content
    	where (coalesce(sha1, ''), coalesce(sha1_git, ''), coalesce(sha256, '')) in (
                select coalesce(sha1, ''), coalesce(sha1_git, ''), coalesce(sha256, '')
                from swh_skipped_content_missing()
            );
            -- TODO XXX use postgres 9.5 "UPSERT" support here, when available.
            -- Specifically, using "INSERT .. ON CONFLICT IGNORE" we can avoid
            -- the extra swh_content_missing() query here.
        return;
    end

### swh_skipped_content_missing()

swh_skipped_content_missing()

Function Properties

Language Return Type
- PLPGSQL SET OF content_signature

    begin
        return query
    	select sha1, sha1_git, sha256, blake2s256 from tmp_skipped_content t
    	where not exists
    	(select 1 from skipped_content s where
    	    s.sha1 is not distinct from t.sha1 and
    	    s.sha1_git is not distinct from t.sha1_git and
    	    s.sha256 is not distinct from t.sha256);
        return;
    end

### swh_snapshot_add(snapshot_id bigint, visit bigint, origin public.sha1_git)

swh_snapshot_add(snapshot_id bigint, visit bigint, origin public.sha1_git)

Function Properties

Language Return Type
- PLPGSQL void

    declare
      snapshot_object_id snapshot.object_id%type;
    begin
      select object_id from snapshot where id = snapshot_id into snapshot_object_id;
      if snapshot_object_id is null then
         insert into snapshot (id) values (snapshot_id) returning object_id into snapshot_object_id;
         insert into snapshot_branch (name, target_type, target)
           select name, target_type, target from tmp_snapshot_branch tmp
           where not exists (
             select 1
             from snapshot_branch sb
             where sb.name = tmp.name
               and sb.target = tmp.target
               and sb.target_type = tmp.target_type
           )
           on conflict do nothing;
         insert into snapshot_branches (snapshot_id, branch_id)
         select snapshot_object_id, sb.object_id as branch_id
           from tmp_snapshot_branch tmp
           join snapshot_branch sb
           using (name, target, target_type)
           where tmp.target is not null and tmp.target_type is not null
         union
         select snapshot_object_id, sb.object_id as branch_id
           from tmp_snapshot_branch tmp
           join snapshot_branch sb
           using (name)
           where tmp.target is null and tmp.target_type is null
             and sb.target is null and sb.target_type is null;
      end if;
      update origin_visit ov
        set snapshot_id = snapshot_object_id
        where ov.origin=swh_snapshot_add.origin and ov.visit=swh_snapshot_add.visit;
    end;

### swh_snapshot_count_branches(id public.sha1_git)

swh_snapshot_count_branches(id public.sha1_git)

Function Properties

Language Return Type
- SQL SET OF snapshot_size

      SELECT target_type, count(name)
      from swh_snapshot_get_by_id(swh_snapshot_count_branches.id)
      group by target_type;

### swh_snapshot_get_by_id(target_types public.sha1_git, branches_count bytea, branches_from bigint, id public.snapshot_target[])

swh_snapshot_get_by_id(target_types public.sha1_git, branches_count bytea, branches_from bigint, id public.snapshot_target[])

Function Properties

Language Return Type
- SQL SET OF snapshot_result

      select
        swh_snapshot_get_by_id.id as snapshot_id, name, target, target_type
      from snapshot_branches
      inner join snapshot_branch on snapshot_branches.branch_id = snapshot_branch.object_id
      where snapshot_id = (select object_id from snapshot where snapshot.id = swh_snapshot_get_by_id.id)
        and (target_types is null or target_type = any(target_types))
        and name >= branches_from
      order by name limit branches_count

### swh_snapshot_get_by_origin_visit(visit_id bigint, origin_id bigint)

swh_snapshot_get_by_origin_visit(visit_id bigint, origin_id bigint)

Function Properties

Language Return Type
- SQL sha1_git

      select snapshot.id
      from origin_visit
      left join snapshot
      on snapshot.object_id = origin_visit.snapshot_id
      where origin_visit.origin=origin_id and origin_visit.visit=visit_id;

### swh_stat_counters()

swh_stat_counters()

Function Properties

Language Return Type
- SQL SET OF counter

        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_history',
            'origin',
            'origin_visit',
            'person',
            'release',
            'revision',
            'revision_history',
            'skipped_content',
            'snapshot'
        );

### swh_tool_add()

swh_tool_add()

Function Properties

Language Return Type
- PLPGSQL SET OF tool

    begin
          insert into tool(name, version, configuration)
          select name, version, configuration from tmp_tool tmp
          on conflict(name, version, configuration) do nothing;

          return query
              select id, name, version, configuration
              from tmp_tool join tool
                  using(name, version, configuration);

          return;
    end

### swh_update_counter(object_type text)

swh_update_counter(object_type text)

Function Properties

Language Return Type
- PLPGSQL void

    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;

### swh_update_counter_bucketed()

swh_update_counter_bucketed()

Function Properties

Language Return Type
- PLPGSQL void

    declare
      query text;
      line_to_update int;
      new_value bigint;
    begin
      select
        object_counts_bucketed.line,
        format(
          'select count(%I) from %I where %s',
          coalesce(identifier, '*'),
          object_type,
          coalesce(
            concat_ws(
              ' and ',
              case when bucket_start is not null then
                format('%I >= %L', identifier, bucket_start) -- lower bound condition, inclusive
              end,
              case when bucket_end is not null then
                format('%I < %L', identifier, bucket_end) -- upper bound condition, exclusive
              end
            ),
            'true'
          )
        )
        from object_counts_bucketed
        order by coalesce(last_update, now() - '1 month'::interval) asc
        limit 1
        into line_to_update, query;

      execute query into new_value;

      update object_counts_bucketed
        set value = new_value,
            last_update = now()
        where object_counts_bucketed.line = line_to_update;

    END

### swh_update_counters_from_buckets()

swh_update_counters_from_buckets()

Function Properties

Language Return Type
- PLPGSQL trigger

    begin
    with to_update as (
      select object_type, sum(value) as value, max(last_update) as last_update
      from object_counts_bucketed ob1
      where not exists (
        select 1 from object_counts_bucketed ob2
        where ob1.object_type = ob2.object_type
        and value is null
        )
      group by object_type
    ) update object_counts
      set
        value = to_update.value,
        last_update = to_update.last_update
      from to_update
      where
        object_counts.object_type = to_update.object_type
        and object_counts.value != to_update.value;
    return null;
    end

### swh_visit_find_by_date(visit_date bigint, origin timestamp with time zone)

swh_visit_find_by_date(visit_date bigint, origin timestamp with time zone)

Function Properties

Language Return Type
- SQL origin_visit

      with closest_two_visits as ((
        select ov, (date - visit_date) as interval
        from origin_visit ov
        where ov.origin = origin
              and ov.date >= visit_date
        order by ov.date asc
        limit 1
      ) union (
        select ov, (visit_date - date) as interval
        from origin_visit ov
        where ov.origin = origin
              and ov.date < visit_date
        order by ov.date desc
        limit 1
      )) select (ov).* from closest_two_visits order by interval limit 1

### swh_visit_get(origin bigint)

swh_visit_get(origin bigint)

Function Properties

Language Return Type
- SQL origin_visit

        select *
        from origin_visit
        where origin=origin
        order by date desc

### time_dist(time without time zone, time without time zone)

time_dist(time without time zone, time without time zone)

Function Properties

Language Return Type
- C interval

    time_dist

### ts_dist(timestamp without time zone, timestamp without time zone)

ts_dist(timestamp without time zone, timestamp without time zone)

Function Properties

Language Return Type
- C interval

    ts_dist

### tstz_dist(timestamp with time zone, timestamp with time zone)

tstz_dist(timestamp with time zone, timestamp with time zone)

Function Properties

Language Return Type
- C interval

    tstz_dist