evergreen Functions
This page documents all 1095 function(s) in the evergreen schema.
Function Index
| Function | Return Type | Language | Volatility | Security |
|---|---|---|---|---|
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
STABLE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
STABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
STABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
STABLE |
||
|
plpgsql |
STABLE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plperlu |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plperlu |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
direct_opt_in_check(patron_id integer, staff_id integer, …) |
|
plpgsql |
STABLE |
|
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plperlu |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
plpgsql |
IMMUTABLE |
||
|
plpgsql |
IMMUTABLE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
find_next_open_time(circ_lib integer, initial timestamp w…) |
|
plpgsql |
VOLATILE |
|
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plperlu |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
plperlu |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
STABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
STABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plperlu |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plperlu |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plperlu |
IMMUTABLE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
STABLE |
||
|
sql |
STABLE |
||
located_uris_as_uris(bibid bigint, ouid integer, pref_lib …) |
|
sql |
STABLE |
|
|
plperlu |
IMMUTABLE |
||
|
plperlu |
VOLATILE |
||
|
plperlu |
VOLATILE |
||
|
plperlu |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
oils_i18n_update_apply(old_ident text, new_ident text, hint …) |
|
plpgsql |
VOLATILE |
|
|
plpgsql |
STABLE |
||
|
plperlu |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
plpgsql |
IMMUTABLE |
||
|
plpgsql |
VOLATILE |
||
|
plperlu |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
STABLE |
||
|
sql |
IMMUTABLE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
STABLE |
||
|
plperlu |
IMMUTABLE |
||
|
plperlu |
IMMUTABLE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
STABLE |
||
|
plpgsql |
STABLE |
||
|
sql |
STABLE |
||
|
sql |
STABLE |
||
|
sql |
STABLE |
||
|
sql |
STABLE |
||
|
plpgsql |
STABLE |
||
|
plperlu |
IMMUTABLE |
||
|
plperlu |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
setup_delete_protect_rule(t_schema text, t_table text, t_additi…) |
|
plpgsql |
VOLATILE |
|
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
upgrade_deps_block_check(my_db_patch text, my_applied_to text) |
|
plpgsql |
VOLATILE |
|
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plperlu |
IMMUTABLE |
||
|
plperlu |
IMMUTABLE |
||
|
plperlu |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
plpgsql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
VOLATILE |
||
|
sql |
IMMUTABLE |
||
|
sql |
IMMUTABLE |
||
|
sql |
VOLATILE |
||
|
plpgsql |
STABLE |
_add
Signature: evergreen._add(text, integer)
Returns: integer
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _add($1, $2, '')
_add
Signature: evergreen._add(text, integer, text)
Returns: integer
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
EXECUTE 'INSERT INTO __tcache__ (label, value, note) values (' ||
quote_literal($1) || ', ' || $2 || ', ' || quote_literal(COALESCE($3, '')) || ')';
RETURN $2;
END;
_agg
Signature: evergreen._agg(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT kind = 'a' FROM tap_funky WHERE name = $1 AND is_visible;
_agg
Signature: evergreen._agg(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT kind = 'a' FROM tap_funky WHERE schema = $1 AND name = $2
_agg
Signature: evergreen._agg(name, name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT kind = 'a'
FROM tap_funky
WHERE schema = $1
AND name = $2
AND args = array_to_string($3, ',')
_agg
Signature: evergreen._agg(name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT kind = 'a'
FROM tap_funky
WHERE name = $1
AND args = array_to_string($2, ',')
AND is_visible;
_alike
Signature: evergreen._alike(boolean, anyelement, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
result ALIAS FOR $1;
got ALIAS FOR $2;
rx ALIAS FOR $3;
descr ALIAS FOR $4;
output TEXT;
BEGIN
output := ok( result, descr );
RETURN output || CASE result WHEN TRUE THEN '' ELSE E'\n' || diag(
' ' || COALESCE( quote_literal(got), 'NULL' ) ||
E'\n doesn''t match: ' || COALESCE( quote_literal(rx), 'NULL' )
) END;
END;
_ancestor_of
Signature: evergreen._ancestor_of(name, name, integer)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
WITH RECURSIVE inheritance_chain AS (
-- select the ancestor tuple
SELECT i.inhrelid AS descendent_id, 1 AS inheritance_level
FROM pg_catalog.pg_inherits i
WHERE i.inhparent = (
SELECT c1.oid
FROM pg_catalog.pg_class c1
JOIN pg_catalog.pg_namespace n1
ON c1.relnamespace = n1.oid
WHERE c1.relname = $1
AND pg_catalog.pg_table_is_visible( c1.oid )
)
UNION
-- select the descendents
SELECT i.inhrelid AS descendent_id,
p.inheritance_level + 1 AS inheritance_level
FROM pg_catalog.pg_inherits i
JOIN inheritance_chain p
ON p.descendent_id = i.inhparent
WHERE i.inhrelid = (
SELECT c1.oid
FROM pg_catalog.pg_class c1
JOIN pg_catalog.pg_namespace n1
ON c1.relnamespace = n1.oid
WHERE c1.relname = $2
AND pg_catalog.pg_table_is_visible( c1.oid )
)
)
SELECT EXISTS(
SELECT true
FROM inheritance_chain
WHERE inheritance_level = COALESCE($3, inheritance_level)
AND descendent_id = (
SELECT c1.oid
FROM pg_catalog.pg_class c1
JOIN pg_catalog.pg_namespace n1
ON c1.relnamespace = n1.oid
WHERE c1.relname = $2
AND pg_catalog.pg_table_is_visible( c1.oid )
)
);
_ancestor_of
Signature: evergreen._ancestor_of(name, name, name, name, integer)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
WITH RECURSIVE inheritance_chain AS (
-- select the ancestor tuple
SELECT i.inhrelid AS descendent_id, 1 AS inheritance_level
FROM pg_catalog.pg_inherits i
WHERE i.inhparent = (
SELECT c1.oid
FROM pg_catalog.pg_class c1
JOIN pg_catalog.pg_namespace n1
ON c1.relnamespace = n1.oid
WHERE c1.relname = $2
AND n1.nspname = $1
)
UNION
-- select the descendents
SELECT i.inhrelid AS descendent_id,
p.inheritance_level + 1 AS inheritance_level
FROM pg_catalog.pg_inherits i
JOIN inheritance_chain p
ON p.descendent_id = i.inhparent
WHERE i.inhrelid = (
SELECT c1.oid
FROM pg_catalog.pg_class c1
JOIN pg_catalog.pg_namespace n1
ON c1.relnamespace = n1.oid
WHERE c1.relname = $4
AND n1.nspname = $3
)
)
SELECT EXISTS(
SELECT true
FROM inheritance_chain
WHERE inheritance_level = COALESCE($5, inheritance_level)
AND descendent_id = (
SELECT c1.oid
FROM pg_catalog.pg_class c1
JOIN pg_catalog.pg_namespace n1
ON c1.relnamespace = n1.oid
WHERE c1.relname = $4
AND n1.nspname = $3
)
);
_are
Signature: evergreen._are(text, name[], name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
what ALIAS FOR $1;
extras ALIAS FOR $2;
missing ALIAS FOR $3;
descr ALIAS FOR $4;
msg TEXT := '';
res BOOLEAN := TRUE;
BEGIN
IF extras[1] IS NOT NULL THEN
res = FALSE;
msg := E'\n' || diag(
' Extra ' || what || E':\n '
|| _ident_array_to_sorted_string( extras, E'\n ' )
);
END IF;
IF missing[1] IS NOT NULL THEN
res = FALSE;
msg := msg || E'\n' || diag(
' Missing ' || what || E':\n '
|| _ident_array_to_sorted_string( missing, E'\n ' )
);
END IF;
RETURN ok(res, descr) || msg;
END;
_areni
Signature: evergreen._areni(text, text[], text[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
what ALIAS FOR $1;
extras ALIAS FOR $2;
missing ALIAS FOR $3;
descr ALIAS FOR $4;
msg TEXT := '';
res BOOLEAN := TRUE;
BEGIN
IF extras[1] IS NOT NULL THEN
res = FALSE;
msg := E'\n' || diag(
' Extra ' || what || E':\n '
|| _array_to_sorted_string( extras, E'\n ' )
);
END IF;
IF missing[1] IS NOT NULL THEN
res = FALSE;
msg := msg || E'\n' || diag(
' Missing ' || what || E':\n '
|| _array_to_sorted_string( missing, E'\n ' )
);
END IF;
RETURN ok(res, descr) || msg;
END;
_array_to_sorted_string
Signature: evergreen._array_to_sorted_string(name[], text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT array_to_string(ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
ORDER BY $1[i]
), $2);
_assets_are
Signature: evergreen._assets_are(text, text[], text[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _areni(
$1,
ARRAY(
SELECT UPPER($2[i]) AS thing
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
ORDER BY thing
),
ARRAY(
SELECT $3[i] AS thing
FROM generate_series(1, array_upper($3, 1)) s(i)
EXCEPT
SELECT UPPER($2[i])
FROM generate_series(1, array_upper($2, 1)) s(i)
ORDER BY thing
),
$4
);
_cast_exists
Signature: evergreen._cast_exists(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_cast c
WHERE _cmp_types(castsource, $1)
AND _cmp_types(casttarget, $2)
);
_cast_exists
Signature: evergreen._cast_exists(name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_cast c
JOIN pg_catalog.pg_proc p ON c.castfunc = p.oid
WHERE _cmp_types(castsource, $1)
AND _cmp_types(casttarget, $2)
AND p.proname = $3
);
_cast_exists
Signature: evergreen._cast_exists(name, name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_cast c
JOIN pg_catalog.pg_proc p ON c.castfunc = p.oid
JOIN pg_catalog.pg_namespace n ON p.pronamespace = n.oid
WHERE _cmp_types(castsource, $1)
AND _cmp_types(casttarget, $2)
AND n.nspname = $3
AND p.proname = $4
);
_cdi
Signature: evergreen._cdi(name, name, anyelement)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_default_is(
$1, $2, $3,
'Column ' || quote_ident($1) || '.' || quote_ident($2) || ' should default to '
|| COALESCE( quote_literal($3), 'NULL')
);
_cdi
Signature: evergreen._cdi(name, name, anyelement, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF NOT _cexists( $1, $2 ) THEN
RETURN fail( $4 ) || E'\n'
|| diag (' Column ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist' );
END IF;
IF NOT _has_def( $1, $2 ) THEN
RETURN fail( $4 ) || E'\n'
|| diag (' Column ' || quote_ident($1) || '.' || quote_ident($2) || ' has no default' );
END IF;
RETURN _def_is(
pg_catalog.pg_get_expr(d.adbin, d.adrelid),
pg_catalog.format_type(a.atttypid, a.atttypmod),
$3, $4
)
FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a, pg_catalog.pg_attrdef d
WHERE c.oid = a.attrelid
AND pg_table_is_visible(c.oid)
AND a.atthasdef
AND a.attrelid = d.adrelid
AND a.attnum = d.adnum
AND c.relname = $1
AND a.attnum > 0
AND NOT a.attisdropped
AND a.attname = $2;
END;
_cdi
Signature: evergreen._cdi(name, name, name, anyelement, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF NOT _cexists( $1, $2, $3 ) THEN
RETURN fail( $5 ) || E'\n'
|| diag (' Column ' || quote_ident($1) || '.' || quote_ident($2) || '.' || quote_ident($3) || ' does not exist' );
END IF;
IF NOT _has_def( $1, $2, $3 ) THEN
RETURN fail( $5 ) || E'\n'
|| diag (' Column ' || quote_ident($1) || '.' || quote_ident($2) || '.' || quote_ident($3) || ' has no default' );
END IF;
RETURN _def_is(
pg_catalog.pg_get_expr(d.adbin, d.adrelid),
pg_catalog.format_type(a.atttypid, a.atttypmod),
$4, $5
)
FROM pg_catalog.pg_namespace n, pg_catalog.pg_class c, pg_catalog.pg_attribute a,
pg_catalog.pg_attrdef d
WHERE n.oid = c.relnamespace
AND c.oid = a.attrelid
AND a.atthasdef
AND a.attrelid = d.adrelid
AND a.attnum = d.adnum
AND n.nspname = $1
AND c.relname = $2
AND a.attnum > 0
AND NOT a.attisdropped
AND a.attname = $3;
END;
_cexists
Signature: evergreen._cexists(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE c.relname = $1
AND pg_catalog.pg_table_is_visible(c.oid)
AND a.attnum > 0
AND NOT a.attisdropped
AND a.attname = $2
);
_cexists
Signature: evergreen._cexists(name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE n.nspname = $1
AND c.relname = $2
AND a.attnum > 0
AND NOT a.attisdropped
AND a.attname = $3
);
_ckeys
Signature: evergreen._ckeys(name, character)
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM _keys($1, $2) LIMIT 1;
_ckeys
Signature: evergreen._ckeys(name, name, character)
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM _keys($1, $2, $3) LIMIT 1;
_cleanup
Signature: evergreen._cleanup()
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DROP SEQUENCE __tresults___numb_seq;
DROP TABLE __tcache__;
DROP SEQUENCE __tcache___id_seq;
SELECT TRUE;
_cmp_types
Signature: evergreen._cmp_types(oid, name)
Returns: boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
dtype TEXT := pg_catalog.format_type($1, NULL);
BEGIN
RETURN dtype = _quote_ident_like($2, dtype);
END;
_col_is_null
Signature: evergreen._col_is_null(name, name, name, text, boolean)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
qcol CONSTANT text := quote_ident($1) || '.' || quote_ident($2) || '.' || quote_ident($3);
c_desc CONSTANT text := coalesce(
$4,
'Column ' || qcol || ' should '
|| CASE WHEN $5 THEN 'be NOT' ELSE 'allow' END || ' NULL'
);
BEGIN
IF NOT _cexists( $1, $2, $3 ) THEN
RETURN fail( c_desc ) || E'\n'
|| diag (' Column ' || qcol || ' does not exist' );
END IF;
RETURN ok(
EXISTS(
SELECT true
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE n.nspname = $1
AND c.relname = $2
AND a.attnum > 0
AND NOT a.attisdropped
AND a.attname = $3
AND a.attnotnull = $5
), c_desc
);
END;
_col_is_null
Signature: evergreen._col_is_null(name, name, text, boolean)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
qcol CONSTANT text := quote_ident($1) || '.' || quote_ident($2);
c_desc CONSTANT text := coalesce(
$3,
'Column ' || qcol || ' should '
|| CASE WHEN $4 THEN 'be NOT' ELSE 'allow' END || ' NULL'
);
BEGIN
IF NOT _cexists( $1, $2 ) THEN
RETURN fail( c_desc ) || E'\n'
|| diag (' Column ' || qcol || ' does not exist' );
END IF;
RETURN ok(
EXISTS(
SELECT true
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE pg_catalog.pg_table_is_visible(c.oid)
AND c.relname = $1
AND a.attnum > 0
AND NOT a.attisdropped
AND a.attname = $2
AND a.attnotnull = $4
), c_desc
);
END;
_constraint
Signature: evergreen._constraint(name, character, name[], text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
akey NAME[];
keys TEXT[] := '{}';
have TEXT;
BEGIN
FOR akey IN SELECT * FROM _keys($1, $2) LOOP
IF akey = $3 THEN RETURN pass($4); END IF;
keys = keys || akey::text;
END LOOP;
IF array_upper(keys, 0) = 1 THEN
have := 'No ' || $5 || ' constraints';
ELSE
have := array_to_string(keys, E'\n ');
END IF;
RETURN fail($4) || E'\n' || diag(
' have: ' || have
|| E'\n want: ' || CASE WHEN $3 IS NULL THEN 'NULL' ELSE $3::text END
);
END;
_constraint
Signature: evergreen._constraint(name, name, character, name[], text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
akey NAME[];
keys TEXT[] := '{}';
have TEXT;
BEGIN
FOR akey IN SELECT * FROM _keys($1, $2, $3) LOOP
IF akey = $4 THEN RETURN pass($5); END IF;
keys = keys || akey::text;
END LOOP;
IF array_upper(keys, 0) = 1 THEN
have := 'No ' || $6 || ' constraints';
ELSE
have := array_to_string(keys, E'\n ');
END IF;
RETURN fail($5) || E'\n' || diag(
' have: ' || have
|| E'\n want: ' || CASE WHEN $4 IS NULL THEN 'NULL' ELSE $4::text END
);
END;
_contract_on
Signature: evergreen._contract_on(text)
Returns: "char"
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT CASE substring(LOWER($1) FROM 1 FOR 1)
WHEN 's' THEN '1'::"char"
WHEN 'u' THEN '2'::"char"
WHEN 'i' THEN '3'::"char"
WHEN 'd' THEN '4'::"char"
ELSE '0'::"char" END
_currtest
Signature: evergreen._currtest()
Returns: integer
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
RETURN currval('__tresults___numb_seq');
EXCEPTION
WHEN object_not_in_prerequisite_state THEN RETURN 0;
END;
_db_privs
Signature: evergreen._db_privs()
Returns: name[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
pgversion INTEGER := pg_version_num();
BEGIN
IF pgversion < 80200 THEN
RETURN ARRAY['CREATE', 'TEMPORARY'];
ELSE
RETURN ARRAY['CREATE', 'CONNECT', 'TEMPORARY'];
END IF;
END;
_def_is
Signature: evergreen._def_is(text, text, anyelement, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
thing text;
BEGIN
-- Function or special SQL syntax.
IF $1 ~ '^[^'']+[(]' OR $1 = ANY('{CURRENT_CATALOG,CURRENT_ROLE,CURRENT_SCHEMA,CURRENT_USER,SESSION_USER,USER}') THEN
RETURN is( $1, $3, $4 );
END IF;
EXECUTE 'SELECT is('
|| COALESCE($1, 'NULL' || '::' || $2) || '::' || $2 || ', '
|| COALESCE(quote_literal($3), 'NULL') || '::' || $2 || ', '
|| COALESCE(quote_literal($4), 'NULL')
|| ')' INTO thing;
RETURN thing;
END;
_definer
Signature: evergreen._definer(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_definer FROM tap_funky WHERE name = $1 AND is_visible;
_definer
Signature: evergreen._definer(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_definer FROM tap_funky WHERE schema = $1 AND name = $2
_definer
Signature: evergreen._definer(name, name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_definer
FROM tap_funky
WHERE schema = $1
AND name = $2
AND args = array_to_string($3, ',')
_definer
Signature: evergreen._definer(name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_definer
FROM tap_funky
WHERE name = $1
AND args = array_to_string($2, ',')
AND is_visible;
_dexists
Signature: evergreen._dexists(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_type t
WHERE t.typname = $1
AND pg_catalog.pg_type_is_visible(t.oid)
);
_dexists
Signature: evergreen._dexists(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_type t on n.oid = t.typnamespace
WHERE n.nspname = $1
AND t.typname = $2
);
_do_ne
Signature: evergreen._do_ne(text, text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have ALIAS FOR $1;
want ALIAS FOR $2;
extras TEXT[] := '{}';
missing TEXT[] := '{}';
res BOOLEAN := TRUE;
msg TEXT := '';
BEGIN
BEGIN
-- Find extra records.
EXECUTE 'SELECT EXISTS ( '
|| '( SELECT * FROM ' || have || ' EXCEPT ' || $4
|| ' SELECT * FROM ' || want
|| ' ) UNION ( '
|| ' SELECT * FROM ' || want || ' EXCEPT ' || $4
|| ' SELECT * FROM ' || have
|| ' ) LIMIT 1 )' INTO res;
-- Drop the temporary tables.
EXECUTE 'DROP TABLE ' || have;
EXECUTE 'DROP TABLE ' || want;
EXCEPTION WHEN syntax_error OR datatype_mismatch THEN
msg := E'\n' || diag(
E' Columns differ between queries:\n'
|| ' have: (' || _temptypes(have) || E')\n'
|| ' want: (' || _temptypes(want) || ')'
);
EXECUTE 'DROP TABLE ' || have;
EXECUTE 'DROP TABLE ' || want;
RETURN ok(FALSE, $3) || msg;
END;
-- Return the value from the query.
RETURN ok(res, $3);
END;
_docomp
Signature: evergreen._docomp(text, text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have ALIAS FOR $1;
want ALIAS FOR $2;
extras TEXT[] := '{}';
missing TEXT[] := '{}';
res BOOLEAN := TRUE;
msg TEXT := '';
rec RECORD;
BEGIN
BEGIN
-- Find extra records.
FOR rec in EXECUTE 'SELECT * FROM ' || have || ' EXCEPT ' || $4
|| 'SELECT * FROM ' || want LOOP
extras := extras || rec::text;
END LOOP;
-- Find missing records.
FOR rec in EXECUTE 'SELECT * FROM ' || want || ' EXCEPT ' || $4
|| 'SELECT * FROM ' || have LOOP
missing := missing || rec::text;
END LOOP;
-- Drop the temporary tables.
EXECUTE 'DROP TABLE ' || have;
EXECUTE 'DROP TABLE ' || want;
EXCEPTION WHEN syntax_error OR datatype_mismatch THEN
msg := E'\n' || diag(
E' Columns differ between queries:\n'
|| ' have: (' || _temptypes(have) || E')\n'
|| ' want: (' || _temptypes(want) || ')'
);
EXECUTE 'DROP TABLE ' || have;
EXECUTE 'DROP TABLE ' || want;
RETURN ok(FALSE, $3) || msg;
END;
-- What extra records do we have?
IF extras[1] IS NOT NULL THEN
res := FALSE;
msg := E'\n' || diag(
E' Extra records:\n '
|| array_to_string( extras, E'\n ' )
);
END IF;
-- What missing records do we have?
IF missing[1] IS NOT NULL THEN
res := FALSE;
msg := msg || E'\n' || diag(
E' Missing records:\n '
|| array_to_string( missing, E'\n ' )
);
END IF;
RETURN ok(res, $3) || msg;
END;
_error_diag
Signature: evergreen._error_diag(text, text, text, text, text, text, text, text, text, text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT COALESCE(
COALESCE( NULLIF($1, '') || ': ', '' ) || COALESCE( NULLIF($2, ''), '' ),
'NO ERROR FOUND'
)
|| COALESCE(E'\n DETAIL: ' || nullif($3, ''), '')
|| COALESCE(E'\n HINT: ' || nullif($4, ''), '')
|| COALESCE(E'\n SCHEMA: ' || nullif($6, ''), '')
|| COALESCE(E'\n TABLE: ' || nullif($7, ''), '')
|| COALESCE(E'\n COLUMN: ' || nullif($8, ''), '')
|| COALESCE(E'\n CONSTRAINT: ' || nullif($9, ''), '')
|| COALESCE(E'\n TYPE: ' || nullif($10, ''), '')
-- We need to manually indent all the context lines
|| COALESCE(E'\n CONTEXT:\n'
|| regexp_replace(NULLIF( $5, ''), '^', ' ', 'gn'
), '');
_expand_context
Signature: evergreen._expand_context(character)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT CASE $1
WHEN 'i' THEN 'implicit'
WHEN 'a' THEN 'assignment'
WHEN 'e' THEN 'explicit'
ELSE 'unknown' END
_expand_on
Signature: evergreen._expand_on(character)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT CASE $1
WHEN '1' THEN 'SELECT'
WHEN '2' THEN 'UPDATE'
WHEN '3' THEN 'INSERT'
WHEN '4' THEN 'DELETE'
ELSE 'UNKNOWN' END
_expand_vol
Signature: evergreen._expand_vol(character)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT CASE $1
WHEN 'i' THEN 'IMMUTABLE'
WHEN 's' THEN 'STABLE'
WHEN 'v' THEN 'VOLATILE'
ELSE 'UNKNOWN' END
_ext_exists
Signature: evergreen._ext_exists(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_extension ex
WHERE ex.extname = $1
);
_ext_exists
Signature: evergreen._ext_exists(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_extension ex
JOIN pg_catalog.pg_namespace n ON ex.extnamespace = n.oid
WHERE n.nspname = $1
AND ex.extname = $2
);
_extensions
Signature: evergreen._extensions()
Returns: SETOF name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT extname FROM pg_catalog.pg_extension
_extensions
Signature: evergreen._extensions(name)
Returns: SETOF name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT e.extname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_extension e ON n.oid = e.extnamespace
WHERE n.nspname = $1
_extras
Signature: evergreen._extras(character, name, name[])
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _extras(ARRAY[$1], $2, $3);
_extras
Signature: evergreen._extras(character, name[])
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _extras(ARRAY[$1], $2);
_extras
Signature: evergreen._extras(character[], name, name[])
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT c.relname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
WHERE c.relkind = ANY($1)
AND n.nspname = $2
AND c.relname NOT IN('pg_all_foreign_keys', 'tap_funky', '__tresults___numb_seq', '__tcache___id_seq')
EXCEPT
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
);
_extras
Signature: evergreen._extras(character[], name[])
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT c.relname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
AND n.nspname <> 'pg_catalog'
AND c.relkind = ANY($1)
AND c.relname NOT IN ('__tcache__', 'pg_all_foreign_keys', 'tap_funky', '__tresults___numb_seq', '__tcache___id_seq')
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
);
_finish
Signature: evergreen._finish(integer, integer, integer, boolean DEFAULT NULL::boolean)
Returns: SETOF text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
curr_test ALIAS FOR $1;
exp_tests INTEGER := $2;
num_faild ALIAS FOR $3;
plural CHAR;
raise_ex ALIAS FOR $4;
BEGIN
plural := CASE exp_tests WHEN 1 THEN '' ELSE 's' END;
IF curr_test IS NULL THEN
RAISE EXCEPTION '# No tests run!';
END IF;
IF exp_tests = 0 OR exp_tests IS NULL THEN
-- No plan. Output one now.
exp_tests = curr_test;
RETURN NEXT '1..' || exp_tests;
END IF;
IF curr_test <> exp_tests THEN
RETURN NEXT diag(
'Looks like you planned ' || exp_tests || ' test' ||
plural || ' but ran ' || curr_test
);
ELSIF num_faild > 0 THEN
IF raise_ex THEN
RAISE EXCEPTION '% test% failed of %', num_faild, CASE num_faild WHEN 1 THEN '' ELSE 's' END, exp_tests;
END IF;
RETURN NEXT diag(
'Looks like you failed ' || num_faild || ' test' ||
CASE num_faild WHEN 1 THEN '' ELSE 's' END
|| ' of ' || exp_tests
);
ELSE
END IF;
RETURN;
END;
_fkexists
Signature: evergreen._fkexists(name, name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT TRUE
FROM pg_all_foreign_keys
WHERE fk_schema_name = $1
AND quote_ident(fk_table_name) = quote_ident($2)
AND fk_columns = $3
);
_fkexists
Signature: evergreen._fkexists(name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT TRUE
FROM pg_all_foreign_keys
WHERE quote_ident(fk_table_name) = quote_ident($1)
AND pg_catalog.pg_table_is_visible(fk_table_oid)
AND fk_columns = $2
);
_fprivs_are
Signature: evergreen._fprivs_are(text, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_func_privs($2, $1);
BEGIN
IF grants[1] = 'undefined_function' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Function ' || $1 || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
_func_compare
Signature: evergreen._func_compare(name, name, anyelement, anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT CASE WHEN $3 IS NULL
THEN ok( FALSE, $5 ) || _nosuch($1, $2, '{}')
ELSE is( $3, $4, $5 )
END;
_func_compare
Signature: evergreen._func_compare(name, name, boolean, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT CASE WHEN $3 IS NULL
THEN ok( FALSE, $4 ) || _nosuch($1, $2, '{}')
ELSE ok( $3, $4 )
END;
_func_compare
Signature: evergreen._func_compare(name, name, name[], anyelement, anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT CASE WHEN $4 IS NULL
THEN ok( FALSE, $6 ) || _nosuch($1, $2, $3)
ELSE is( $4, $5, $6 )
END;
_func_compare
Signature: evergreen._func_compare(name, name, name[], boolean, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT CASE WHEN $4 IS NULL
THEN ok( FALSE, $5 ) || _nosuch($1, $2, $3)
ELSE ok( $4, $5 )
END;
_funkargs
Signature: evergreen._funkargs(name[])
Returns: text
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
BEGIN
RETURN array_to_string($1::regtype[], ',');
EXCEPTION WHEN undefined_object THEN
RETURN array_to_string($1, ',');
END;
_get
Signature: evergreen._get(text)
Returns: integer
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
DECLARE
ret integer;
BEGIN
EXECUTE 'SELECT value FROM __tcache__ WHERE label = ' || quote_literal($1) || ' LIMIT 1' INTO ret;
RETURN ret;
END;
_get_ac_privs
Signature: evergreen._get_ac_privs(name, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
privs TEXT[] := ARRAY['INSERT', 'REFERENCES', 'SELECT', 'UPDATE'];
grants TEXT[] := '{}';
BEGIN
FOR i IN 1..array_upper(privs, 1) LOOP
BEGIN
IF pg_catalog.has_any_column_privilege($1, $2, privs[i]) THEN
grants := grants || privs[i];
END IF;
EXCEPTION WHEN undefined_table THEN
-- Not a valid table name.
RETURN '{undefined_table}';
WHEN undefined_object THEN
-- Not a valid role.
RETURN '{undefined_role}';
WHEN invalid_parameter_value THEN
-- Not a valid permission on this version of PostgreSQL; ignore;
END;
END LOOP;
RETURN grants;
END;
_get_col_ns_type
Signature: evergreen._get_col_ns_type(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
-- Always include the namespace.
SELECT CASE WHEN pg_catalog.pg_type_is_visible(t.oid)
THEN quote_ident(tn.nspname) || '.'
ELSE ''
END || pg_catalog.format_type(a.atttypid, a.atttypmod)
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
JOIN pg_catalog.pg_type t ON a.atttypid = t.oid
JOIN pg_catalog.pg_namespace tn ON t.typnamespace = tn.oid
WHERE n.nspname = $1
AND c.relname = $2
AND a.attname = $3
AND attnum > 0
AND NOT a.attisdropped
_get_col_privs
Signature: evergreen._get_col_privs(name, text, name)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
privs TEXT[] := ARRAY['INSERT', 'REFERENCES', 'SELECT', 'UPDATE'];
grants TEXT[] := '{}';
BEGIN
FOR i IN 1..array_upper(privs, 1) LOOP
IF pg_catalog.has_column_privilege($1, $2, $3, privs[i]) THEN
grants := grants || privs[i];
END IF;
END LOOP;
RETURN grants;
EXCEPTION
-- Not a valid column name.
WHEN undefined_column THEN RETURN '{undefined_column}';
-- Not a valid table name.
WHEN undefined_table THEN RETURN '{undefined_table}';
-- Not a valid role.
WHEN undefined_object THEN RETURN '{undefined_role}';
END;
_get_col_type
Signature: evergreen._get_col_type(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.format_type(a.atttypid, a.atttypmod)
FROM pg_catalog.pg_attribute a
JOIN pg_catalog.pg_class c ON a.attrelid = c.oid
WHERE pg_catalog.pg_table_is_visible(c.oid)
AND c.relname = $1
AND a.attname = $2
AND attnum > 0
AND NOT a.attisdropped
_get_col_type
Signature: evergreen._get_col_type(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.format_type(a.atttypid, a.atttypmod)
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE n.nspname = $1
AND c.relname = $2
AND a.attname = $3
AND attnum > 0
AND NOT a.attisdropped
_get_context
Signature: evergreen._get_context(name, name)
Returns: "char"
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT c.castcontext
FROM pg_catalog.pg_cast c
WHERE _cmp_types(castsource, $1)
AND _cmp_types(casttarget, $2)
_get_db_owner
Signature: evergreen._get_db_owner(name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(datdba)
FROM pg_catalog.pg_database
WHERE datname = $1;
_get_db_privs
Signature: evergreen._get_db_privs(name, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
privs TEXT[] := _db_privs();
grants TEXT[] := '{}';
BEGIN
FOR i IN 1..array_upper(privs, 1) LOOP
BEGIN
IF pg_catalog.has_database_privilege($1, $2, privs[i]) THEN
grants := grants || privs[i];
END IF;
EXCEPTION WHEN invalid_catalog_name THEN
-- Not a valid db name.
RETURN '{invalid_catalog_name}';
WHEN undefined_object THEN
-- Not a valid role.
RETURN '{undefined_role}';
WHEN invalid_parameter_value THEN
-- Not a valid permission on this version of PostgreSQL; ignore;
END;
END LOOP;
RETURN grants;
END;
_get_dtype
Signature: evergreen._get_dtype(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.format_type(t.oid, t.typtypmod)
FROM pg_catalog.pg_type d
JOIN pg_catalog.pg_type t ON d.typbasetype = t.oid
WHERE d.typisdefined
AND pg_catalog.pg_type_is_visible(d.oid)
AND d.typname = LOWER($1)
AND d.typtype = 'd'
_get_dtype
Signature: evergreen._get_dtype(name, text, boolean)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT CASE WHEN $3 AND pg_catalog.pg_type_is_visible(t.oid)
THEN quote_ident(tn.nspname) || '.'
ELSE ''
END || pg_catalog.format_type(t.oid, t.typtypmod)
FROM pg_catalog.pg_type d
JOIN pg_catalog.pg_namespace dn ON d.typnamespace = dn.oid
JOIN pg_catalog.pg_type t ON d.typbasetype = t.oid
JOIN pg_catalog.pg_namespace tn ON t.typnamespace = tn.oid
WHERE d.typisdefined
AND dn.nspname = $1
AND d.typname = LOWER($2)
AND d.typtype = 'd'
_get_fdw_privs
Signature: evergreen._get_fdw_privs(name, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF pg_catalog.has_foreign_data_wrapper_privilege($1, $2, 'USAGE') THEN
RETURN '{USAGE}';
ELSE
RETURN '{}';
END IF;
EXCEPTION WHEN undefined_object THEN
-- Same error code for unknown user or fdw. So figure out which.
RETURN CASE WHEN SQLERRM LIKE '%' || $1 || '%' THEN
'{undefined_role}'
ELSE
'{undefined_fdw}'
END;
END;
_get_func_owner
Signature: evergreen._get_func_owner(name, name, name[])
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT owner
FROM tap_funky
WHERE schema = $1
AND name = $2
AND args = array_to_string($3, ',')
_get_func_owner
Signature: evergreen._get_func_owner(name, name[])
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT owner
FROM tap_funky
WHERE name = $1
AND args = array_to_string($2, ',')
AND is_visible
_get_func_privs
Signature: evergreen._get_func_privs(text, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF pg_catalog.has_function_privilege($1, $2, 'EXECUTE') THEN
RETURN '{EXECUTE}';
ELSE
RETURN '{}';
END IF;
EXCEPTION
-- Not a valid func name.
WHEN undefined_function THEN RETURN '{undefined_function}';
-- Not a valid role.
WHEN undefined_object THEN RETURN '{undefined_role}';
END;
_get_index_owner
Signature: evergreen._get_index_owner(name, name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(ci.relowner)
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
WHERE ct.relname = $1
AND ci.relname = $2
AND pg_catalog.pg_table_is_visible(ct.oid);
_get_index_owner
Signature: evergreen._get_index_owner(name, name, name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(ci.relowner)
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE n.nspname = $1
AND ct.relname = $2
AND ci.relname = $3;
_get_lang_privs
Signature: evergreen._get_lang_privs(name, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF pg_catalog.has_language_privilege($1, $2, 'USAGE') THEN
RETURN '{USAGE}';
ELSE
RETURN '{}';
END IF;
EXCEPTION WHEN undefined_object THEN
-- Same error code for unknown user or language. So figure out which.
RETURN CASE WHEN SQLERRM LIKE '%' || $1 || '%' THEN
'{undefined_role}'
ELSE
'{undefined_language}'
END;
END;
_get_language_owner
Signature: evergreen._get_language_owner(name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(lanowner)
FROM pg_catalog.pg_language
WHERE lanname = $1;
_get_latest
Signature: evergreen._get_latest(text)
Returns: integer[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
DECLARE
ret integer[];
BEGIN
EXECUTE 'SELECT ARRAY[id, value] FROM __tcache__ WHERE label = ' ||
quote_literal($1) || ' AND id = (SELECT MAX(id) FROM __tcache__ WHERE label = ' ||
quote_literal($1) || ') LIMIT 1' INTO ret;
RETURN ret;
EXCEPTION WHEN undefined_table THEN
RAISE EXCEPTION 'You tried to run a test without a plan! Gotta have a plan';
END;
_get_latest
Signature: evergreen._get_latest(text, integer)
Returns: integer
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
DECLARE
ret integer;
BEGIN
EXECUTE 'SELECT MAX(id) FROM __tcache__ WHERE label = ' ||
quote_literal($1) || ' AND value = ' || $2 INTO ret;
RETURN ret;
END;
_get_note
Signature: evergreen._get_note(integer)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
DECLARE
ret text;
BEGIN
EXECUTE 'SELECT note FROM __tcache__ WHERE id = ' || $1 || ' LIMIT 1' INTO ret;
RETURN ret;
END;
_get_note
Signature: evergreen._get_note(text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
DECLARE
ret text;
BEGIN
EXECUTE 'SELECT note FROM __tcache__ WHERE label = ' || quote_literal($1) || ' LIMIT 1' INTO ret;
RETURN ret;
END;
_get_opclass_owner
Signature: evergreen._get_opclass_owner(name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(opcowner)
FROM pg_catalog.pg_opclass
WHERE opcname = $1
AND pg_catalog.pg_opclass_is_visible(oid);
_get_opclass_owner
Signature: evergreen._get_opclass_owner(name, name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(opcowner)
FROM pg_catalog.pg_opclass oc
JOIN pg_catalog.pg_namespace n ON oc.opcnamespace = n.oid
WHERE n.nspname = $1
AND opcname = $2;
_get_rel_owner
Signature: evergreen._get_rel_owner(character, name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _get_rel_owner(ARRAY[$1], $2);
_get_rel_owner
Signature: evergreen._get_rel_owner(character, name, name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _get_rel_owner(ARRAY[$1], $2, $3);
_get_rel_owner
Signature: evergreen._get_rel_owner(character[], name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(c.relowner)
FROM pg_catalog.pg_class c
WHERE c.relkind = ANY($1)
AND c.relname = $2
AND pg_catalog.pg_table_is_visible(c.oid)
_get_rel_owner
Signature: evergreen._get_rel_owner(character[], name, name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(c.relowner)
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = ANY($1)
AND n.nspname = $2
AND c.relname = $3
_get_rel_owner
Signature: evergreen._get_rel_owner(name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(c.relowner)
FROM pg_catalog.pg_class c
WHERE c.relname = $1
AND pg_catalog.pg_table_is_visible(c.oid)
_get_rel_owner
Signature: evergreen._get_rel_owner(name, name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(c.relowner)
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = $1
AND c.relname = $2
_get_schema_owner
Signature: evergreen._get_schema_owner(name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(nspowner)
FROM pg_catalog.pg_namespace
WHERE nspname = $1;
_get_schema_privs
Signature: evergreen._get_schema_privs(name, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
privs TEXT[] := ARRAY['CREATE', 'USAGE'];
grants TEXT[] := '{}';
BEGIN
FOR i IN 1..array_upper(privs, 1) LOOP
IF pg_catalog.has_schema_privilege($1, $2, privs[i]) THEN
grants := grants || privs[i];
END IF;
END LOOP;
RETURN grants;
EXCEPTION
-- Not a valid schema name.
WHEN invalid_schema_name THEN RETURN '{invalid_schema_name}';
-- Not a valid role.
WHEN undefined_object THEN RETURN '{undefined_role}';
END;
_get_sequence_privs
Signature: evergreen._get_sequence_privs(name, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
privs TEXT[] := ARRAY['SELECT', 'UPDATE', 'USAGE'];
grants TEXT[] := '{}';
BEGIN
FOR i IN 1..array_upper(privs, 1) LOOP
BEGIN
IF pg_catalog.has_sequence_privilege($1, $2, privs[i]) THEN
grants := grants || privs[i];
END IF;
EXCEPTION WHEN undefined_table THEN
-- Not a valid sequence name.
RETURN '{undefined_table}';
WHEN undefined_object THEN
-- Not a valid role.
RETURN '{undefined_role}';
WHEN invalid_parameter_value THEN
-- Not a valid permission on this version of PostgreSQL; ignore;
END;
END LOOP;
RETURN grants;
END;
_get_server_privs
Signature: evergreen._get_server_privs(name, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF pg_catalog.has_server_privilege($1, $2, 'USAGE') THEN
RETURN '{USAGE}';
ELSE
RETURN '{}';
END IF;
EXCEPTION WHEN undefined_object THEN
-- Same error code for unknown user or server. So figure out which.
RETURN CASE WHEN SQLERRM LIKE '%' || $1 || '%' THEN
'{undefined_role}'
ELSE
'{undefined_server}'
END;
END;
_get_table_privs
Signature: evergreen._get_table_privs(name, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
privs TEXT[] := _table_privs();
grants TEXT[] := '{}';
BEGIN
FOR i IN 1..array_upper(privs, 1) LOOP
BEGIN
IF pg_catalog.has_table_privilege($1, $2, privs[i]) THEN
grants := grants || privs[i];
END IF;
EXCEPTION WHEN undefined_table THEN
-- Not a valid table name.
RETURN '{undefined_table}';
WHEN undefined_object THEN
-- Not a valid role.
RETURN '{undefined_role}';
WHEN invalid_parameter_value THEN
-- Not a valid permission on this version of PostgreSQL; ignore;
END;
END LOOP;
RETURN grants;
END;
_get_tablespace_owner
Signature: evergreen._get_tablespace_owner(name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(spcowner)
FROM pg_catalog.pg_tablespace
WHERE spcname = $1;
_get_tablespaceprivs
Signature: evergreen._get_tablespaceprivs(name, text)
Returns: text[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF pg_catalog.has_tablespace_privilege($1, $2, 'CREATE') THEN
RETURN '{CREATE}';
ELSE
RETURN '{}';
END IF;
EXCEPTION WHEN undefined_object THEN
-- Same error code for unknown user or tablespace. So figure out which.
RETURN CASE WHEN SQLERRM LIKE '%' || $1 || '%' THEN
'{undefined_role}'
ELSE
'{undefined_tablespace}'
END;
END;
_get_type_owner
Signature: evergreen._get_type_owner(name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(typowner)
FROM pg_catalog.pg_type
WHERE typname = $1
AND pg_catalog.pg_type_is_visible(oid)
_get_type_owner
Signature: evergreen._get_type_owner(name, name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT pg_catalog.pg_get_userbyid(t.typowner)
FROM pg_catalog.pg_type t
JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE n.nspname = $1
AND t.typname = $2
_got_func
Signature: evergreen._got_func(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS( SELECT TRUE FROM tap_funky WHERE name = $1 AND is_visible);
_got_func
Signature: evergreen._got_func(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS( SELECT TRUE FROM tap_funky WHERE schema = $1 AND name = $2 );
_got_func
Signature: evergreen._got_func(name, name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT TRUE
FROM tap_funky
WHERE schema = $1
AND name = $2
AND args = _funkargs($3)
);
_got_func
Signature: evergreen._got_func(name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT TRUE
FROM tap_funky
WHERE name = $1
AND args = _funkargs($2)
AND is_visible
);
_grolist
Signature: evergreen._grolist(name)
Returns: oid[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT member
FROM pg_catalog.pg_auth_members m
JOIN pg_catalog.pg_roles r ON m.roleid = r.oid
WHERE r.rolname = $1
);
_has_def
Signature: evergreen._has_def(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT a.atthasdef
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE c.relname = $1
AND a.attnum > 0
AND NOT a.attisdropped
AND a.attname = $2
AND pg_catalog.pg_table_is_visible(c.oid)
_has_def
Signature: evergreen._has_def(name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT a.atthasdef
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE n.nspname = $1
AND c.relname = $2
AND a.attnum > 0
AND NOT a.attisdropped
AND a.attname = $3
_has_group
Signature: evergreen._has_group(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_group
WHERE groname = $1
);
_has_role
Signature: evergreen._has_role(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_roles
WHERE rolname = $1
);
_has_type
Signature: evergreen._has_type(name, character[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_type t
WHERE t.typisdefined
AND pg_catalog.pg_type_is_visible(t.oid)
AND t.typname = $1
AND t.typtype = ANY( COALESCE($2, ARRAY['b', 'c', 'd', 'p', 'e']) )
);
_has_type
Signature: evergreen._has_type(name, name, character[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_type t
JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid
WHERE t.typisdefined
AND n.nspname = $1
AND t.typname = $2
AND t.typtype = ANY( COALESCE($3, ARRAY['b', 'c', 'd', 'p', 'e']) )
);
_has_user
Signature: evergreen._has_user(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
SELECT EXISTS( SELECT true FROM pg_catalog.pg_user WHERE usename = $1);
_hasc
Signature: evergreen._hasc(name, character)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_constraint x ON c.oid = x.conrelid
WHERE pg_table_is_visible(c.oid)
AND c.relname = $1
AND x.contype = $2
);
_hasc
Signature: evergreen._hasc(name, name, character)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON c.relnamespace = n.oid
JOIN pg_catalog.pg_constraint x ON c.oid = x.conrelid
WHERE n.nspname = $1
AND c.relname = $2
AND x.contype = $3
);
_have_index
Signature: evergreen._have_index(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
WHERE ct.relname = $1
AND ci.relname = $2
AND pg_catalog.pg_table_is_visible(ct.oid)
);
_have_index
Signature: evergreen._have_index(name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE n.nspname = $1
AND ct.relname = $2
AND ci.relname = $3
);
_ident_array_to_sorted_string
Signature: evergreen._ident_array_to_sorted_string(name[], text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT array_to_string(ARRAY(
SELECT quote_ident($1[i])
FROM generate_series(1, array_upper($1, 1)) s(i)
ORDER BY $1[i]
), $2);
_ident_array_to_string
Signature: evergreen._ident_array_to_string(name[], text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT array_to_string(ARRAY(
SELECT quote_ident($1[i])
FROM generate_series(1, array_upper($1, 1)) s(i)
ORDER BY i
), $2);
_ikeys
Signature: evergreen._ikeys(name, name)
Returns: text[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT pg_catalog.pg_get_indexdef( ci.oid, s.i + 1, false)
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN generate_series(0, current_setting('max_index_keys')::int - 1) s(i)
ON x.indkey[s.i] IS NOT NULL
WHERE ct.relname = $1
AND ci.relname = $2
AND pg_catalog.pg_table_is_visible(ct.oid)
ORDER BY s.i
);
_ikeys
Signature: evergreen._ikeys(name, name, name)
Returns: text[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT pg_catalog.pg_get_indexdef( ci.oid, s.i + 1, false)
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
JOIN generate_series(0, current_setting('max_index_keys')::int - 1) s(i)
ON x.indkey[s.i] IS NOT NULL
WHERE ct.relname = $2
AND ci.relname = $3
AND n.nspname = $1
ORDER BY s.i
);
_inherited
Signature: evergreen._inherited(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_class c
WHERE c.relkind = 'r'
AND pg_catalog.pg_table_is_visible( c.oid )
AND c.relname = $1
AND c.relhassubclass = true
);
_inherited
Signature: evergreen._inherited(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
AND n.nspname = $1
AND c.relname = $2
AND c.relhassubclass = true
);
_is_indexed
Signature: evergreen._is_indexed(name, name, text[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS( SELECT TRUE FROM (
SELECT _ikeys(coalesce($1, n.nspname), $2, ci.relname) AS cols
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE ($1 IS NULL OR n.nspname = $1)
AND ct.relname = $2
) icols
WHERE cols = $3 )
_is_instead
Signature: evergreen._is_instead(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT r.is_instead
FROM pg_catalog.pg_rewrite r
JOIN pg_catalog.pg_class c ON c.oid = r.ev_class
WHERE r.rulename = $2
AND c.relname = $1
AND pg_catalog.pg_table_is_visible(c.oid)
_is_instead
Signature: evergreen._is_instead(name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT r.is_instead
FROM pg_catalog.pg_rewrite r
JOIN pg_catalog.pg_class c ON c.oid = r.ev_class
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE r.rulename = $3
AND c.relname = $2
AND n.nspname = $1
_is_schema
Signature: evergreen._is_schema(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_namespace
WHERE nspname = $1
);
_is_super
Signature: evergreen._is_super(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
SELECT rolsuper
FROM pg_catalog.pg_roles
WHERE rolname = $1
_is_trusted
Signature: evergreen._is_trusted(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT lanpltrusted FROM pg_catalog.pg_language WHERE lanname = $1;
_is_verbose
Signature: evergreen._is_verbose()
Returns: boolean
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
SELECT current_setting('client_min_messages') NOT IN (
'warning', 'error', 'fatal', 'panic'
);
_keys
Signature: evergreen._keys(name, character)
Returns: SETOF name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _pg_sv_column_array(x.conrelid,x.conkey) -- name[] doesn't support collation
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_constraint x ON c.oid = x.conrelid
AND c.relname = $1
AND x.contype = $2
WHERE pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1
_keys
Signature: evergreen._keys(name, name, character)
Returns: SETOF name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _pg_sv_column_array(x.conrelid,x.conkey) -- name[] doesn't support collation
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_constraint x ON c.oid = x.conrelid
WHERE n.nspname = $1
AND c.relname = $2
AND x.contype = $3
ORDER BY 1
_lang
Signature: evergreen._lang(name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT l.lanname
FROM tap_funky f
JOIN pg_catalog.pg_language l ON f.langoid = l.oid
WHERE f.name = $1
AND f.is_visible;
_lang
Signature: evergreen._lang(name, name)
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT l.lanname
FROM tap_funky f
JOIN pg_catalog.pg_language l ON f.langoid = l.oid
WHERE f.schema = $1
and f.name = $2
_lang
Signature: evergreen._lang(name, name, name[])
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT l.lanname
FROM tap_funky f
JOIN pg_catalog.pg_language l ON f.langoid = l.oid
WHERE f.schema = $1
and f.name = $2
AND f.args = array_to_string($3, ',')
_lang
Signature: evergreen._lang(name, name[])
Returns: name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT l.lanname
FROM tap_funky f
JOIN pg_catalog.pg_language l ON f.langoid = l.oid
WHERE f.name = $1
AND f.args = array_to_string($2, ',')
AND f.is_visible;
_missing
Signature: evergreen._missing(character, name, name[])
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _missing(ARRAY[$1], $2, $3);
_missing
Signature: evergreen._missing(character, name[])
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _missing(ARRAY[$1], $2);
_missing
Signature: evergreen._missing(character[], name, name[])
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
EXCEPT
SELECT c.relname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
WHERE c.relkind = ANY($1)
AND n.nspname = $2
);
_missing
Signature: evergreen._missing(character[], name[])
Returns: name[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT c.relname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND c.relkind = ANY($1)
);
_nosuch
Signature: evergreen._nosuch(name, name, name[])
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT E'\n' || diag(
' Function '
|| CASE WHEN $1 IS NOT NULL THEN quote_ident($1) || '.' ELSE '' END
|| quote_ident($2) || '('
|| array_to_string($3, ', ') || ') does not exist'
);
_op_exists
Signature: evergreen._op_exists(name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_operator o
WHERE pg_catalog.pg_operator_is_visible(o.oid)
AND o.oprname = $2
AND CASE o.oprkind WHEN 'l' THEN $1 IS NULL
ELSE _cmp_types(o.oprleft, $1) END
AND CASE o.oprkind WHEN 'r' THEN $3 IS NULL
ELSE _cmp_types(o.oprright, $3) END
);
_op_exists
Signature: evergreen._op_exists(name, name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_operator o
WHERE pg_catalog.pg_operator_is_visible(o.oid)
AND o.oprname = $2
AND CASE o.oprkind WHEN 'l' THEN $1 IS NULL
ELSE _cmp_types(o.oprleft, $1) END
AND CASE o.oprkind WHEN 'r' THEN $3 IS NULL
ELSE _cmp_types(o.oprright, $3) END
AND _cmp_types(o.oprresult, $4)
);
_op_exists
Signature: evergreen._op_exists(name, name, name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_operator o
JOIN pg_catalog.pg_namespace n ON o.oprnamespace = n.oid
WHERE n.nspname = $2
AND o.oprname = $3
AND CASE o.oprkind WHEN 'l' THEN $1 IS NULL
ELSE _cmp_types(o.oprleft, $1) END
AND CASE o.oprkind WHEN 'r' THEN $4 IS NULL
ELSE _cmp_types(o.oprright, $4) END
AND _cmp_types(o.oprresult, $5)
);
_opc_exists
Signature: evergreen._opc_exists(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_opclass oc
WHERE oc.opcname = $1
AND pg_opclass_is_visible(oid)
);
_opc_exists
Signature: evergreen._opc_exists(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS (
SELECT TRUE
FROM pg_catalog.pg_opclass oc
JOIN pg_catalog.pg_namespace n ON oc.opcnamespace = n.oid
WHERE n.nspname = $1
AND oc.opcname = $2
);
_partof
Signature: evergreen._partof(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_class cc
JOIN pg_catalog.pg_inherits i ON cc.oid = i.inhrelid
JOIN pg_catalog.pg_class pc ON i.inhparent = pc.oid
WHERE cc.relname = $1
AND cc.relispartition
AND pc.relname = $2
AND pc.relkind = 'p'
AND pg_catalog.pg_table_is_visible(cc.oid)
AND pg_catalog.pg_table_is_visible(pc.oid)
)
_partof
Signature: evergreen._partof(name, name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_namespace cn
JOIN pg_catalog.pg_class cc ON cn.oid = cc.relnamespace
JOIN pg_catalog.pg_inherits i ON cc.oid = i.inhrelid
JOIN pg_catalog.pg_class pc ON i.inhparent = pc.oid
JOIN pg_catalog.pg_namespace pn ON pc.relnamespace = pn.oid
WHERE cn.nspname = $1
AND cc.relname = $2
AND cc.relispartition
AND pn.nspname = $3
AND pc.relname = $4
AND pc.relkind = 'p'
)
_parts
Signature: evergreen._parts(name)
Returns: SETOF name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT i.inhrelid::regclass::name
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_inherits i ON c.oid = i.inhparent
WHERE c.relname = $1
AND c.relkind = 'p'
AND pg_catalog.pg_table_is_visible(c.oid)
_parts
Signature: evergreen._parts(name, name)
Returns: SETOF name
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT i.inhrelid::regclass::name
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_inherits i ON c.oid = i.inhparent
WHERE n.nspname = $1
AND c.relname = $2
AND c.relkind = 'p'
_pg_sv_column_array
Signature: evergreen._pg_sv_column_array(oid, smallint[])
Returns: name[]
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT a.attname
FROM pg_catalog.pg_attribute a
JOIN generate_series(1, array_upper($2, 1)) s(i) ON a.attnum = $2[i]
WHERE attrelid = $1
ORDER BY i
)
_pg_sv_table_accessible
Signature: evergreen._pg_sv_table_accessible(oid, oid)
Returns: boolean
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
SELECT CASE WHEN has_schema_privilege($1, 'USAGE') THEN (
has_table_privilege($2, 'SELECT')
OR has_table_privilege($2, 'INSERT')
or has_table_privilege($2, 'UPDATE')
OR has_table_privilege($2, 'DELETE')
OR has_table_privilege($2, 'RULE')
OR has_table_privilege($2, 'REFERENCES')
OR has_table_privilege($2, 'TRIGGER')
) ELSE FALSE
END;
_pg_sv_type_array
Signature: evergreen._pg_sv_type_array(oid[])
Returns: name[]
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT t.typname
FROM pg_catalog.pg_type t
JOIN generate_series(1, array_upper($1, 1)) s(i) ON t.oid = $1[i]
ORDER BY i
)
_prokind
Signature: evergreen._prokind(p_oid oid)
Returns: "char"
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
BEGIN
IF pg_version_num() >= 110000 THEN
RETURN prokind FROM pg_catalog.pg_proc WHERE oid = p_oid;
ELSE
RETURN CASE proisagg WHEN true THEN 'a' WHEN false THEN 'f' END
FROM pg_catalog.pg_proc WHERE oid = p_oid;
END IF;
END;
_query
Signature: evergreen._query(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT CASE
WHEN $1 LIKE '"%' OR $1 !~ '[[:space:]]' THEN 'EXECUTE ' || $1
ELSE $1
END;
_quote_ident_like
Signature: evergreen._quote_ident_like(text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have TEXT;
pcision TEXT;
BEGIN
-- Just return it if rhs isn't quoted.
IF $2 !~ '"' THEN RETURN $1; END IF;
-- If it's quoted ident without precision, return it quoted.
IF $2 ~ '"$' THEN RETURN quote_ident($1); END IF;
pcision := substring($1 FROM '[(][^")]+[)]$');
-- Just quote it if thre is no precision.
if pcision IS NULL THEN RETURN quote_ident($1); END IF;
-- Quote the non-precision part and concatenate with precision.
RETURN quote_ident(substring($1 FOR char_length($1) - char_length(pcision)))
|| pcision;
END;
_refine_vol
Signature: evergreen._refine_vol(text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT _expand_vol(substring(LOWER($1) FROM 1 FOR 1)::char);
_relcomp
Signature: evergreen._relcomp(text, anyarray, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _docomp(
_temptable( $1, '__taphave__' ),
_temptable( $2, '__tapwant__' ),
$3, $4
);
_relcomp
Signature: evergreen._relcomp(text, text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _docomp(
_temptable( $1, '__taphave__' ),
_temptable( $2, '__tapwant__' ),
$3, $4
);
_relcomp
Signature: evergreen._relcomp(text, text, text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have TEXT := _temptable( $1, '__taphave__' );
want TEXT := _temptable( $2, '__tapwant__' );
results TEXT[] := '{}';
res BOOLEAN := TRUE;
msg TEXT := '';
rec RECORD;
BEGIN
BEGIN
-- Find relevant records.
FOR rec in EXECUTE 'SELECT * FROM ' || want || ' ' || $4
|| ' SELECT * FROM ' || have LOOP
results := results || rec::text;
END LOOP;
-- Drop the temporary tables.
EXECUTE 'DROP TABLE ' || have;
EXECUTE 'DROP TABLE ' || want;
EXCEPTION WHEN syntax_error OR datatype_mismatch THEN
msg := E'\n' || diag(
E' Columns differ between queries:\n'
|| ' have: (' || _temptypes(have) || E')\n'
|| ' want: (' || _temptypes(want) || ')'
);
EXECUTE 'DROP TABLE ' || have;
EXECUTE 'DROP TABLE ' || want;
RETURN ok(FALSE, $3) || msg;
END;
-- What records do we have?
IF results[1] IS NOT NULL THEN
res := FALSE;
msg := msg || E'\n' || diag(
' ' || $5 || E' records:\n '
|| array_to_string( results, E'\n ' )
);
END IF;
RETURN ok(res, $3) || msg;
END;
_relexists
Signature: evergreen._relexists(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_class c
WHERE pg_catalog.pg_table_is_visible(c.oid)
AND c.relname = $1
);
_relexists
Signature: evergreen._relexists(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
WHERE n.nspname = $1
AND c.relname = $2
);
_relne
Signature: evergreen._relne(text, anyarray, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _do_ne(
_temptable( $1, '__taphave__' ),
_temptable( $2, '__tapwant__' ),
$3, $4
);
_relne
Signature: evergreen._relne(text, text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _do_ne(
_temptable( $1, '__taphave__' ),
_temptable( $2, '__tapwant__' ),
$3, $4
);
_returns
Signature: evergreen._returns(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT returns FROM tap_funky WHERE name = $1 AND is_visible;
_returns
Signature: evergreen._returns(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT returns FROM tap_funky WHERE schema = $1 AND name = $2
_returns
Signature: evergreen._returns(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT returns
FROM tap_funky
WHERE schema = $1
AND name = $2
AND args = array_to_string($3, ',')
_returns
Signature: evergreen._returns(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT returns
FROM tap_funky
WHERE name = $1
AND args = array_to_string($2, ',')
AND is_visible;
_rexists
Signature: evergreen._rexists(character, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _rexists(ARRAY[$1], $2);
_rexists
Signature: evergreen._rexists(character, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _rexists(ARRAY[$1], $2, $3);
_rexists
Signature: evergreen._rexists(character[], name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_class c
WHERE c.relkind = ANY($1)
AND pg_catalog.pg_table_is_visible(c.oid)
AND c.relname = $2
);
_rexists
Signature: evergreen._rexists(character[], name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
WHERE c.relkind = ANY($1)
AND n.nspname = $2
AND c.relname = $3
);
_rule_on
Signature: evergreen._rule_on(name, name)
Returns: "char"
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT r.ev_type
FROM pg_catalog.pg_rewrite r
JOIN pg_catalog.pg_class c ON c.oid = r.ev_class
WHERE r.rulename = $2
AND c.relname = $1
_rule_on
Signature: evergreen._rule_on(name, name, name)
Returns: "char"
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT r.ev_type
FROM pg_catalog.pg_rewrite r
JOIN pg_catalog.pg_class c ON c.oid = r.ev_class
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE r.rulename = $3
AND c.relname = $2
AND n.nspname = $1
_runem
Signature: evergreen._runem(text[], boolean)
Returns: SETOF text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
tap text;
lbound int := array_lower($1, 1);
BEGIN
IF lbound IS NULL THEN RETURN; END IF;
FOR i IN lbound..array_upper($1, 1) LOOP
-- Send the name of the function to diag if warranted.
IF $2 THEN RETURN NEXT diag( $1[i] || '()' ); END IF;
-- Execute the tap function and return its results.
FOR tap IN EXECUTE 'SELECT * FROM ' || $1[i] || '()' LOOP
RETURN NEXT tap;
END LOOP;
END LOOP;
RETURN;
END;
_runner
Signature: evergreen._runner(text[], text[], text[], text[], text[])
Returns: SETOF text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
startup ALIAS FOR $1;
shutdown ALIAS FOR $2;
setup ALIAS FOR $3;
teardown ALIAS FOR $4;
tests ALIAS FOR $5;
tap TEXT;
tfaild INTEGER := 0;
ffaild INTEGER := 0;
tnumb INTEGER := 0;
fnumb INTEGER := 0;
tok BOOLEAN := TRUE;
BEGIN
BEGIN
-- No plan support.
PERFORM * FROM no_plan();
FOR tap IN SELECT * FROM _runem(startup, false) LOOP RETURN NEXT tap; END LOOP;
EXCEPTION
-- Catch all exceptions and simply rethrow custom exceptions. This
-- will roll back everything in the above block.
WHEN raise_exception THEN RAISE EXCEPTION '%', SQLERRM;
END;
-- Record how startup tests have failed.
tfaild := num_failed();
FOR i IN 1..COALESCE(array_upper(tests, 1), 0) LOOP
-- What subtest are we running?
RETURN NEXT ' ' || diag_test_name('Subtest: ' || tests[i]);
-- Reset the results.
tok := TRUE;
tnumb := COALESCE(_get('curr_test'), 0);
IF tnumb > 0 THEN
EXECUTE 'ALTER SEQUENCE __tresults___numb_seq RESTART WITH 1';
PERFORM _set('curr_test', 0);
PERFORM _set('failed', 0);
END IF;
DECLARE
errstate text;
errmsg text;
detail text;
hint text;
context text;
schname text;
tabname text;
colname text;
chkname text;
typname text;
BEGIN
BEGIN
-- Run the setup functions.
FOR tap IN SELECT * FROM _runem(setup, false) LOOP
RETURN NEXT regexp_replace(tap, '^', ' ', 'gn');
END LOOP;
-- Run the actual test function.
FOR tap IN EXECUTE 'SELECT * FROM ' || tests[i] || '()' LOOP
RETURN NEXT regexp_replace(tap, '^', ' ', 'gn');
END LOOP;
-- Run the teardown functions.
FOR tap IN SELECT * FROM _runem(teardown, false) LOOP
RETURN NEXT regexp_replace(tap, '^', ' ', 'gn');
END LOOP;
-- Emit the plan.
fnumb := COALESCE(_get('curr_test'), 0);
RETURN NEXT ' 1..' || fnumb;
-- Emit any error messages.
IF fnumb = 0 THEN
RETURN NEXT ' # No tests run!';
tok = false;
ELSE
-- Report failures.
ffaild := num_failed();
IF ffaild > 0 THEN
tok := FALSE;
RETURN NEXT ' ' || diag(
'Looks like you failed ' || ffaild || ' test' ||
CASE tfaild WHEN 1 THEN '' ELSE 's' END
|| ' of ' || fnumb
);
END IF;
END IF;
EXCEPTION WHEN raise_exception THEN
-- Something went wrong. Record that fact.
errstate := SQLSTATE;
errmsg := SQLERRM;
GET STACKED DIAGNOSTICS
detail = PG_EXCEPTION_DETAIL,
hint = PG_EXCEPTION_HINT,
context = PG_EXCEPTION_CONTEXT,
schname = SCHEMA_NAME,
tabname = TABLE_NAME,
colname = COLUMN_NAME,
chkname = CONSTRAINT_NAME,
typname = PG_DATATYPE_NAME;
END;
-- Always raise an exception to rollback any changes.
RAISE EXCEPTION '__TAP_ROLLBACK__';
EXCEPTION WHEN raise_exception THEN
IF errmsg IS NOT NULL THEN
-- Something went wrong. Emit the error message.
tok := FALSE;
RETURN NEXT regexp_replace( diag('Test died: ' || _error_diag(
errstate, errmsg, detail, hint, context, schname, tabname, colname, chkname, typname
)), '^', ' ', 'gn');
errmsg := NULL;
END IF;
END;
-- Restore the sequence.
EXECUTE 'ALTER SEQUENCE __tresults___numb_seq RESTART WITH ' || tnumb + 1;
PERFORM _set('curr_test', tnumb);
PERFORM _set('failed', tfaild);
-- Record this test.
RETURN NEXT ok(tok, tests[i]);
IF NOT tok THEN tfaild := tfaild + 1; END IF;
END LOOP;
-- Run the shutdown functions.
FOR tap IN SELECT * FROM _runem(shutdown, false) LOOP RETURN NEXT tap; END LOOP;
-- Finish up.
FOR tap IN SELECT * FROM _finish( COALESCE(_get('curr_test'), 0), 0, tfaild ) LOOP
RETURN NEXT tap;
END LOOP;
-- Clean up and return.
PERFORM _cleanup();
RETURN;
END;
_set
Signature: evergreen._set(integer, integer)
Returns: integer
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
EXECUTE 'UPDATE __tcache__ SET value = ' || $2
|| ' WHERE id = ' || $1;
RETURN $2;
END;
_set
Signature: evergreen._set(text, integer)
Returns: integer
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _set($1, $2, '')
_set
Signature: evergreen._set(text, integer, text)
Returns: integer
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
rcount integer;
BEGIN
EXECUTE 'UPDATE __tcache__ SET value = ' || $2
|| CASE WHEN $3 IS NULL THEN '' ELSE ', note = ' || quote_literal($3) END
|| ' WHERE label = ' || quote_literal($1);
GET DIAGNOSTICS rcount = ROW_COUNT;
IF rcount = 0 THEN
RETURN _add( $1, $2, $3 );
END IF;
RETURN $2;
END;
_strict
Signature: evergreen._strict(name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_strict FROM tap_funky WHERE name = $1 AND is_visible;
_strict
Signature: evergreen._strict(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_strict FROM tap_funky WHERE schema = $1 AND name = $2
_strict
Signature: evergreen._strict(name, name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_strict
FROM tap_funky
WHERE schema = $1
AND name = $2
AND args = array_to_string($3, ',')
_strict
Signature: evergreen._strict(name, name[])
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_strict
FROM tap_funky
WHERE name = $1
AND args = array_to_string($2, ',')
AND is_visible;
_table_privs
Signature: evergreen._table_privs()
Returns: name[]
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
pgversion INTEGER := pg_version_num();
BEGIN
IF pgversion < 80200 THEN RETURN ARRAY[
'DELETE', 'INSERT', 'REFERENCES', 'RULE', 'SELECT', 'TRIGGER', 'UPDATE'
];
ELSIF pgversion < 80400 THEN RETURN ARRAY[
'DELETE', 'INSERT', 'REFERENCES', 'SELECT', 'TRIGGER', 'UPDATE'
];
ELSE RETURN ARRAY[
'DELETE', 'INSERT', 'REFERENCES', 'SELECT', 'TRIGGER', 'TRUNCATE', 'UPDATE'
];
END IF;
END;
_temptable
Signature: evergreen._temptable(anyarray, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
CREATE TEMP TABLE _____coltmp___ AS
SELECT $1[i]
FROM generate_series(array_lower($1, 1), array_upper($1, 1)) s(i);
EXECUTE 'ALTER TABLE _____coltmp___ RENAME TO ' || $2;
return $2;
END;
_temptable
Signature: evergreen._temptable(text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
EXECUTE 'CREATE TEMP TABLE ' || $2 || ' AS ' || _query($1);
return $2;
END;
_temptypes
Signature: evergreen._temptypes(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT array_to_string(ARRAY(
SELECT pg_catalog.format_type(a.atttypid, a.atttypmod)
FROM pg_catalog.pg_attribute a
JOIN pg_catalog.pg_class c ON a.attrelid = c.oid
WHERE c.oid = ('pg_temp.' || $1)::pg_catalog.regclass
AND attnum > 0
AND NOT attisdropped
ORDER BY attnum
), ',');
_time_trials
Signature: evergreen._time_trials(text, integer, numeric)
Returns: SETOF _time_trial_type
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
query TEXT := _query($1);
iterations ALIAS FOR $2;
return_percent ALIAS FOR $3;
start_time TEXT;
act_time NUMERIC;
times NUMERIC[];
offset_it INT;
limit_it INT;
offset_percent NUMERIC;
a_time _time_trial_type;
BEGIN
-- Execute the query over and over
FOR i IN 1..iterations LOOP
start_time := timeofday();
EXECUTE query;
-- Store the execution time for the run in an array of times
times[i] := extract(millisecond from timeofday()::timestamptz - start_time::timestamptz);
END LOOP;
offset_percent := (1.0 - return_percent) / 2.0;
-- Ensure that offset skips the bottom X% of runs, or set it to 0
SELECT GREATEST((offset_percent * iterations)::int, 0) INTO offset_it;
-- Ensure that with limit the query to returning only the middle X% of runs
SELECT GREATEST((return_percent * iterations)::int, 1) INTO limit_it;
FOR a_time IN SELECT times[i]
FROM generate_series(array_lower(times, 1), array_upper(times, 1)) i
ORDER BY 1
OFFSET offset_it
LIMIT limit_it LOOP
RETURN NEXT a_time;
END LOOP;
END;
_tlike
Signature: evergreen._tlike(boolean, text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( $1, $4 ) || CASE WHEN $1 THEN '' ELSE E'\n' || diag(
' error message: ' || COALESCE( quote_literal($2), 'NULL' ) ||
E'\n doesn''t match: ' || COALESCE( quote_literal($3), 'NULL' )
) END;
_todo
Signature: evergreen._todo()
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
todos INT[];
note text;
BEGIN
-- Get the latest id and value, because todo() might have been called
-- again before the todos ran out for the first call to todo(). This
-- allows them to nest.
todos := _get_latest('todo');
IF todos IS NULL THEN
-- No todos.
RETURN NULL;
END IF;
IF todos[2] = 0 THEN
-- Todos depleted. Clean up.
EXECUTE 'DELETE FROM __tcache__ WHERE id = ' || todos[1];
RETURN NULL;
END IF;
-- Decrement the count of counted todos and return the reason.
IF todos[2] <> -1 THEN
PERFORM _set(todos[1], todos[2] - 1);
END IF;
note := _get_note(todos[1]);
IF todos[2] = 1 THEN
-- This was the last todo, so delete the record.
EXECUTE 'DELETE FROM __tcache__ WHERE id = ' || todos[1];
END IF;
RETURN note;
END;
_trig
Signature: evergreen._trig(name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_trigger t
JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid
WHERE c.relname = $1
AND t.tgname = $2
AND pg_catalog.pg_table_is_visible(c.oid)
);
_trig
Signature: evergreen._trig(name, name, name)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT EXISTS(
SELECT true
FROM pg_catalog.pg_trigger t
JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = $1
AND c.relname = $2
AND t.tgname = $3
);
_types_are
Signature: evergreen._types_are(name, name[], text, character[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'types',
ARRAY(
SELECT t.typname
FROM pg_catalog.pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (
t.typrelid = 0
OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)
)
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)
AND n.nspname = $1
AND t.typtype = ANY( COALESCE($4, ARRAY['b', 'c', 'd', 'p', 'e']) )
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
),
ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT t.typname
FROM pg_catalog.pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (
t.typrelid = 0
OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)
)
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)
AND n.nspname = $1
AND t.typtype = ANY( COALESCE($4, ARRAY['b', 'c', 'd', 'p', 'e']) )
),
$3
);
_types_are
Signature: evergreen._types_are(name[], text, character[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'types',
ARRAY(
SELECT t.typname
FROM pg_catalog.pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (
t.typrelid = 0
OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)
)
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND pg_catalog.pg_type_is_visible(t.oid)
AND t.typtype = ANY( COALESCE($3, ARRAY['b', 'c', 'd', 'p', 'e']) )
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT t.typname
FROM pg_catalog.pg_type t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
WHERE (
t.typrelid = 0
OR (SELECT c.relkind = 'c' FROM pg_catalog.pg_class c WHERE c.oid = t.typrelid)
)
AND NOT EXISTS(SELECT 1 FROM pg_catalog.pg_type el WHERE el.oid = t.typelem AND el.typarray = t.oid)
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND pg_catalog.pg_type_is_visible(t.oid)
AND t.typtype = ANY( COALESCE($3, ARRAY['b', 'c', 'd', 'p', 'e']) )
),
$2
);
_unalike
Signature: evergreen._unalike(boolean, anyelement, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
result ALIAS FOR $1;
got ALIAS FOR $2;
rx ALIAS FOR $3;
descr ALIAS FOR $4;
output TEXT;
BEGIN
output := ok( result, descr );
RETURN output || CASE result WHEN TRUE THEN '' ELSE E'\n' || diag(
' ' || COALESCE( quote_literal(got), 'NULL' ) ||
E'\n matches: ' || COALESCE( quote_literal(rx), 'NULL' )
) END;
END;
_vol
Signature: evergreen._vol(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _expand_vol(volatility) FROM tap_funky f
WHERE f.name = $1 AND f.is_visible;
_vol
Signature: evergreen._vol(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _expand_vol(volatility) FROM tap_funky f
WHERE f.schema = $1 and f.name = $2
_vol
Signature: evergreen._vol(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _expand_vol(volatility)
FROM tap_funky f
WHERE f.schema = $1
and f.name = $2
AND f.args = array_to_string($3, ',')
_vol
Signature: evergreen._vol(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _expand_vol(volatility)
FROM tap_funky f
WHERE f.name = $1
AND f.args = array_to_string($2, ',')
AND f.is_visible;
add_result
Signature: evergreen.add_result(boolean, boolean, text, text, text)
Returns: integer
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF NOT $1 THEN PERFORM _set('failed', _get('failed') + 1); END IF;
RETURN nextval('__tresults___numb_seq');
END;
alike
Signature: evergreen.alike(anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _alike( $1 ~~ $2, $1, $2, NULL );
alike
Signature: evergreen.alike(anyelement, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _alike( $1 ~~ $2, $1, $2, $3 );
any_column_privs_are
Signature: evergreen.any_column_privs_are(name, name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT any_column_privs_are(
$1, $2, $3, $4,
'Role ' || quote_ident($3) || ' should be granted '
|| CASE WHEN $4[1] IS NULL THEN 'no privileges' ELSE array_to_string($4, ', ') END
|| ' on any column in '|| quote_ident($1) || '.' || quote_ident($2)
);
any_column_privs_are
Signature: evergreen.any_column_privs_are(name, name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_ac_privs( $3, quote_ident($1) || '.' || quote_ident($2) );
BEGIN
IF grants[1] = 'undefined_table' THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
' Table ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
' Role ' || quote_ident($3) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $4, $5);
END;
any_column_privs_are
Signature: evergreen.any_column_privs_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT any_column_privs_are(
$1, $2, $3,
'Role ' || quote_ident($2) || ' should be granted '
|| CASE WHEN $3[1] IS NULL THEN 'no privileges' ELSE array_to_string($3, ', ') END
|| ' on any column in ' || quote_ident($1)
);
any_column_privs_are
Signature: evergreen.any_column_privs_are(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_ac_privs( $2, quote_ident($1) );
BEGIN
IF grants[1] = 'undefined_table' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Table ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
array_overlap_check
Signature: evergreen.array_overlap_check()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
fld TEXT;
cnt INT;
BEGIN
fld := TG_ARGV[0];
EXECUTE 'SELECT COUNT(*) FROM '|| TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME ||' WHERE '|| fld ||' && ($1).'|| fld INTO cnt USING NEW;
IF cnt > 0 THEN
RAISE EXCEPTION 'Cannot insert duplicate array into field % of table %', fld, TG_TABLE_SCHEMA ||'.'|| TG_TABLE_NAME;
END IF;
RETURN NEW;
END;
asset_copy_alert_copy_inh_fkey
Signature: evergreen.asset_copy_alert_copy_inh_fkey()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM 1 FROM asset.copy WHERE id = NEW.copy;
IF NOT FOUND THEN
RAISE foreign_key_violation USING MESSAGE = FORMAT(
$$Referenced asset.copy id not found, copy:%s$$, NEW.copy
);
END IF;
RETURN NEW;
END;
asset_copy_inventory_copy_inh_fkey
Signature: evergreen.asset_copy_inventory_copy_inh_fkey()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM 1 FROM asset.copy WHERE id = NEW.copy;
IF NOT FOUND THEN
RAISE foreign_key_violation USING MESSAGE = FORMAT(
$$Referenced asset.copy id not found, copy:%s$$, NEW.copy
);
END IF;
RETURN NEW;
END;
asset_copy_note_owning_copy_inh_fkey
Signature: evergreen.asset_copy_note_owning_copy_inh_fkey()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM 1 FROM asset.copy WHERE id = NEW.owning_copy;
IF NOT FOUND THEN
RAISE foreign_key_violation USING MESSAGE = FORMAT(
$$Referenced asset.copy id not found, owning_copy:%s$$, NEW.owning_copy
);
END IF;
RETURN NEW;
END;
asset_copy_tag_copy_map_copy_inh_fkey
Signature: evergreen.asset_copy_tag_copy_map_copy_inh_fkey()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM 1 FROM asset.copy WHERE id = NEW.copy;
IF NOT FOUND THEN
RAISE foreign_key_violation USING MESSAGE = FORMAT(
$$Referenced asset.copy id not found, copy:%s$$, NEW.copy
);
END IF;
RETURN NEW;
END;
bag_eq
Signature: evergreen.bag_eq(text, anyarray)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, NULL::text, 'ALL ' );
bag_eq
Signature: evergreen.bag_eq(text, anyarray, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, $3, 'ALL ' );
bag_eq
Signature: evergreen.bag_eq(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, NULL::text, 'ALL ' );
bag_eq
Signature: evergreen.bag_eq(text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, $3, 'ALL ' );
bag_has
Signature: evergreen.bag_has(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, NULL::TEXT, 'EXCEPT ALL', 'Missing' );
bag_has
Signature: evergreen.bag_has(text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, $3, 'EXCEPT ALL', 'Missing' );
bag_hasnt
Signature: evergreen.bag_hasnt(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, NULL::TEXT, 'INTERSECT ALL', 'Extra' );
bag_hasnt
Signature: evergreen.bag_hasnt(text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, $3, 'INTERSECT ALL', 'Extra' );
bag_ne
Signature: evergreen.bag_ne(text, anyarray)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relne( $1, $2, NULL::text, 'ALL ' );
bag_ne
Signature: evergreen.bag_ne(text, anyarray, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relne( $1, $2, $3, 'ALL ' );
bag_ne
Signature: evergreen.bag_ne(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relne( $1, $2, NULL::text, 'ALL ' );
bag_ne
Signature: evergreen.bag_ne(text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relne( $1, $2, $3, 'ALL ' );
can
Signature: evergreen.can(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT can( $1, $2, 'Schema ' || quote_ident($1) || ' can' );
can
Signature: evergreen.can(name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
missing text[];
BEGIN
SELECT ARRAY(
SELECT quote_ident($2[i])
FROM generate_series(1, array_upper($2, 1)) s(i)
LEFT JOIN tap_funky ON name = $2[i] AND schema = $1
WHERE oid IS NULL
GROUP BY $2[i], s.i
ORDER BY MIN(s.i)
) INTO missing;
IF missing[1] IS NULL THEN
RETURN ok( true, $3 );
END IF;
RETURN ok( false, $3 ) || E'\n' || diag(
' ' || quote_ident($1) || '.' ||
array_to_string( missing, E'() missing\n ' || quote_ident($1) || '.') ||
'() missing'
);
END;
can
Signature: evergreen.can(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT can( $1, 'Schema ' || _ident_array_to_string(current_schemas(true), ' or ') || ' can' );
can
Signature: evergreen.can(name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
missing text[];
BEGIN
SELECT ARRAY(
SELECT quote_ident($1[i])
FROM generate_series(1, array_upper($1, 1)) s(i)
LEFT JOIN pg_catalog.pg_proc p
ON $1[i] = p.proname
AND pg_catalog.pg_function_is_visible(p.oid)
WHERE p.oid IS NULL
ORDER BY s.i
) INTO missing;
IF missing[1] IS NULL THEN
RETURN ok( true, $2 );
END IF;
RETURN ok( false, $2 ) || E'\n' || diag(
' ' ||
array_to_string( missing, E'() missing\n ') ||
'() missing'
);
END;
can_float
Signature: evergreen.can_float(copy_floating_group integer, from_ou integer, to_ou integer)
Returns: boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
float_member config.floating_group_member%ROWTYPE;
shared_ou_depth INT;
to_ou_depth INT;
BEGIN
-- Grab the shared OU depth. If this is less than the stop depth later we ignore the entry.
SELECT INTO shared_ou_depth max(depth) FROM actor.org_unit_common_ancestors( from_ou, to_ou ) aou JOIN actor.org_unit_type aout ON aou.ou_type = aout.id;
-- Grab the to ou depth. If this is greater than max depth we ignore the entry.
SELECT INTO to_ou_depth depth FROM actor.org_unit aou JOIN actor.org_unit_type aout ON aou.ou_type = aout.id WHERE aou.id = to_ou;
-- Grab float members that apply. We don't care what we get beyond wanting excluded ones first.
SELECT INTO float_member *
FROM
config.floating_group_member cfgm
JOIN actor.org_unit aou ON cfgm.org_unit = aou.id
JOIN actor.org_unit_type aout ON aou.ou_type = aout.id
WHERE
cfgm.floating_group = copy_floating_group
AND to_ou IN (SELECT id FROM actor.org_unit_descendants(aou.id))
AND cfgm.stop_depth <= shared_ou_depth
AND (cfgm.max_depth IS NULL OR to_ou_depth <= max_depth)
ORDER BY
exclude DESC;
-- If we found something then we want to return the opposite of the exclude flag
IF FOUND THEN
RETURN NOT float_member.exclude;
END IF;
-- Otherwise no floating.
RETURN false;
END;
cast_context_is
Signature: evergreen.cast_context_is(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT cast_context_is(
$1, $2, $3,
'Cast (' || quote_ident($1) || ' AS ' || quote_ident($2)
|| ') context should be ' || _expand_context(substring(LOWER($3) FROM 1 FOR 1))
);
cast_context_is
Signature: evergreen.cast_context_is(name, name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
want char = substring(LOWER($3) FROM 1 FOR 1);
have char := _get_context($1, $2);
BEGIN
IF have IS NOT NULL THEN
RETURN is( _expand_context(have), _expand_context(want), $4 );
END IF;
RETURN ok( false, $4 ) || E'\n' || diag(
' Cast (' || quote_ident($1) || ' AS ' || quote_ident($2)
|| ') does not exist'
);
END;
casts_are
Signature: evergreen.casts_are(text[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT casts_are( $1, 'There should be the correct casts');
casts_are
Signature: evergreen.casts_are(text[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _areni(
'casts',
ARRAY(
SELECT pg_catalog.format_type(castsource, NULL)
|| ' AS ' || pg_catalog.format_type(casttarget, NULL)
FROM pg_catalog.pg_cast c
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT pg_catalog.format_type(castsource, NULL)
|| ' AS ' || pg_catalog.format_type(casttarget, NULL)
FROM pg_catalog.pg_cast c
),
$2
);
change_db_setting
Signature: evergreen.change_db_setting(setting_name text, settings text[])
Returns: void
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
EXECUTE 'ALTER DATABASE ' || quote_ident(current_database()) || ' SET ' || quote_ident(setting_name) || ' = ' || array_to_string(settings, ',');
END;
check_test
Signature: evergreen.check_test(text, boolean)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM check_test( $1, $2, NULL, NULL, NULL, FALSE );
check_test
Signature: evergreen.check_test(text, boolean, text)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM check_test( $1, $2, $3, NULL, NULL, FALSE );
check_test
Signature: evergreen.check_test(text, boolean, text, text)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM check_test( $1, $2, $3, $4, NULL, FALSE );
check_test
Signature: evergreen.check_test(text, boolean, text, text, text)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM check_test( $1, $2, $3, $4, $5, FALSE );
check_test
Signature: evergreen.check_test(text, boolean, text, text, text, boolean)
Returns: SETOF text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
tnumb INTEGER;
aok BOOLEAN;
adescr TEXT;
res BOOLEAN;
descr TEXT;
adiag TEXT;
have ALIAS FOR $1;
eok ALIAS FOR $2;
name ALIAS FOR $3;
edescr ALIAS FOR $4;
ediag ALIAS FOR $5;
matchit ALIAS FOR $6;
BEGIN
-- What test was it that just ran?
tnumb := currval('__tresults___numb_seq');
-- Fetch the results.
aok := substring(have, 1, 2) = 'ok';
adescr := COALESCE(substring(have FROM E'(?:not )?ok [[:digit:]]+ - ([^\n]+)'), '');
-- Now delete those results.
EXECUTE 'ALTER SEQUENCE __tresults___numb_seq RESTART WITH ' || tnumb;
IF NOT aok THEN PERFORM _set('failed', _get('failed') - 1); END IF;
-- Set up the description.
descr := coalesce( name || ' ', 'Test ' ) || 'should ';
-- So, did the test pass?
RETURN NEXT is(
aok,
eok,
descr || CASE eok WHEN true then 'pass' ELSE 'fail' END
);
-- Was the description as expected?
IF edescr IS NOT NULL THEN
RETURN NEXT is(
adescr,
edescr,
descr || 'have the proper description'
);
END IF;
-- Were the diagnostics as expected?
IF ediag IS NOT NULL THEN
-- Remove ok and the test number.
adiag := substring(
have
FROM CASE WHEN aok THEN 4 ELSE 9 END + char_length(tnumb::text)
);
-- Remove the description, if there is one.
IF adescr <> '' THEN
adiag := substring(
adiag FROM 1 + char_length( ' - ' || substr(diag( adescr ), 3) )
);
END IF;
IF NOT aok THEN
-- Remove failure message from ok().
adiag := substring(adiag FROM 1 + char_length(diag(
'Failed test ' || tnumb ||
CASE adescr WHEN '' THEN '' ELSE COALESCE(': "' || adescr || '"', '') END
)));
END IF;
IF ediag <> '' THEN
-- Remove the space before the diagnostics.
adiag := substring(adiag FROM 2);
END IF;
-- Remove the #s.
adiag := replace( substring(adiag from 3), E'\n# ', E'\n' );
-- Now compare the diagnostics.
IF matchit THEN
RETURN NEXT matches(
adiag,
ediag,
descr || 'have the proper diagnostics'
);
ELSE
RETURN NEXT is(
adiag,
ediag,
descr || 'have the proper diagnostics'
);
END IF;
END IF;
-- And we're done
RETURN;
END;
cmp_ok
Signature: evergreen.cmp_ok(anyelement, text, anyelement)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT cmp_ok( $1, $2, $3, NULL );
cmp_ok
Signature: evergreen.cmp_ok(anyelement, text, anyelement, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have ALIAS FOR $1;
op ALIAS FOR $2;
want ALIAS FOR $3;
descr ALIAS FOR $4;
result BOOLEAN;
output TEXT;
BEGIN
EXECUTE 'SELECT ' ||
COALESCE(quote_literal( have ), 'NULL') || '::' || pg_typeof(have) || ' '
|| op || ' ' ||
COALESCE(quote_literal( want ), 'NULL') || '::' || pg_typeof(want)
INTO result;
output := ok( COALESCE(result, FALSE), descr );
RETURN output || CASE result WHEN TRUE THEN '' ELSE E'\n' || diag(
' ' || COALESCE( quote_literal(have), 'NULL' ) ||
E'\n ' || op ||
E'\n ' || COALESCE( quote_literal(want), 'NULL' )
) END;
END;
coded_value_map_normalizer
Signature: evergreen.coded_value_map_normalizer(input text, ctype text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT COALESCE(value,$1)
FROM config.coded_value_map
WHERE ctype = $2 AND code = $1;
col_default_is
Signature: evergreen.col_default_is(name, name, anyelement)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _cdi( $1, $2, $3 );
col_default_is
Signature: evergreen.col_default_is(name, name, anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _cdi( $1, $2, $3, $4 );
col_default_is
Signature: evergreen.col_default_is(name, name, name, anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _cdi( $1, $2, $3, $4, $5 );
col_default_is
Signature: evergreen.col_default_is(name, name, name, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _cdi( $1, $2, $3, $4, $5 );
col_default_is
Signature: evergreen.col_default_is(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _cdi( $1, $2, $3 );
col_default_is
Signature: evergreen.col_default_is(name, name, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _cdi( $1, $2, $3, $4 );
col_has_check
Signature: evergreen.col_has_check(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_has_check( $1, $2, 'Column ' || quote_ident($1) || '(' || quote_ident($2) || ') should have a check constraint' );
col_has_check
Signature: evergreen.col_has_check(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_has_check( $1, $2, ARRAY[$3], $4 );
col_has_check
Signature: evergreen.col_has_check(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _constraint( $1, $2, 'c', $3, $4, 'check' );
col_has_check
Signature: evergreen.col_has_check(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_has_check( $1, ARRAY[$2], $3 );
col_has_check
Signature: evergreen.col_has_check(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_has_check( $1, $2, 'Columns ' || quote_ident($1) || '(' || _ident_array_to_string($2, ', ') || ') should have a check constraint' );
col_has_check
Signature: evergreen.col_has_check(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _constraint( $1, 'c', $2, $3, 'check' );
col_has_default
Signature: evergreen.col_has_default(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_has_default( $1, $2, 'Column ' || quote_ident($1) || '.' || quote_ident($2) || ' should have a default' );
col_has_default
Signature: evergreen.col_has_default(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF NOT _cexists( $1, $2, $3 ) THEN
RETURN fail( $4 ) || E'\n'
|| diag (' Column ' || quote_ident($1) || '.' || quote_ident($2) || '.' || quote_ident($3) || ' does not exist' );
END IF;
RETURN ok( _has_def( $1, $2, $3 ), $4 );
END
col_has_default
Signature: evergreen.col_has_default(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF NOT _cexists( $1, $2 ) THEN
RETURN fail( $3 ) || E'\n'
|| diag (' Column ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist' );
END IF;
RETURN ok( _has_def( $1, $2 ), $3 );
END;
col_hasnt_default
Signature: evergreen.col_hasnt_default(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_hasnt_default( $1, $2, 'Column ' || quote_ident($1) || '.' || quote_ident($2) || ' should not have a default' );
col_hasnt_default
Signature: evergreen.col_hasnt_default(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF NOT _cexists( $1, $2, $3 ) THEN
RETURN fail( $4 ) || E'\n'
|| diag (' Column ' || quote_ident($1) || '.' || quote_ident($2) || '.' || quote_ident($3) || ' does not exist' );
END IF;
RETURN ok( NOT _has_def( $1, $2, $3 ), $4 );
END;
col_hasnt_default
Signature: evergreen.col_hasnt_default(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF NOT _cexists( $1, $2 ) THEN
RETURN fail( $3 ) || E'\n'
|| diag (' Column ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist' );
END IF;
RETURN ok( NOT _has_def( $1, $2 ), $3 );
END;
col_is_fk
Signature: evergreen.col_is_fk(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_fk( $1, $2, 'Column ' || quote_ident($1) || '(' || quote_ident($2) || ') should be a foreign key' );
col_is_fk
Signature: evergreen.col_is_fk(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_fk( $1, $2, ARRAY[$3], $4 );
col_is_fk
Signature: evergreen.col_is_fk(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
names text[];
BEGIN
IF _fkexists($1, $2, $3) THEN
RETURN pass( $4 );
END IF;
-- Try to show the columns.
SELECT ARRAY(
SELECT _ident_array_to_string(fk_columns, ', ')
FROM pg_all_foreign_keys
WHERE fk_schema_name = $1
AND fk_table_name = $2
ORDER BY fk_columns
) INTO names;
IF names[1] IS NOT NULL THEN
RETURN fail($4) || E'\n' || diag(
' Table ' || quote_ident($1) || '.' || quote_ident($2) || E' has foreign key constraints on these columns:\n '
|| array_to_string( names, E'\n ' )
);
END IF;
-- No FKs in this table.
RETURN fail($4) || E'\n' || diag(
' Table ' || quote_ident($1) || '.' || quote_ident($2) || ' has no foreign key columns'
);
END;
col_is_fk
Signature: evergreen.col_is_fk(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_fk( $1, ARRAY[$2], $3 );
col_is_fk
Signature: evergreen.col_is_fk(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_fk( $1, $2, 'Columns ' || quote_ident($1) || '(' || _ident_array_to_string($2, ', ') || ') should be a foreign key' );
col_is_fk
Signature: evergreen.col_is_fk(name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
names text[];
BEGIN
IF _fkexists($1, $2) THEN
RETURN pass( $3 );
END IF;
-- Try to show the columns.
SELECT ARRAY(
SELECT _ident_array_to_string(fk_columns, ', ')
FROM pg_all_foreign_keys
WHERE fk_table_name = $1
ORDER BY fk_columns
) INTO names;
IF NAMES[1] IS NOT NULL THEN
RETURN fail($3) || E'\n' || diag(
' Table ' || quote_ident($1) || E' has foreign key constraints on these columns:\n '
|| array_to_string( names, E'\n ' )
);
END IF;
-- No FKs in this table.
RETURN fail($3) || E'\n' || diag(
' Table ' || quote_ident($1) || ' has no foreign key columns'
);
END;
col_is_null
Signature: evergreen.col_is_null(schema_name name, table_name name, column_name name, description text DEFAULT NULL::text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _col_is_null( $1, $2, $3, $4, false );
col_is_null
Signature: evergreen.col_is_null(table_name name, column_name name, description text DEFAULT NULL::text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _col_is_null( $1, $2, $3, false );
col_is_pk
Signature: evergreen.col_is_pk(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_pk( $1, $2, 'Column ' || quote_ident($1) || '(' || quote_ident($2) || ') should be a primary key' );
col_is_pk
Signature: evergreen.col_is_pk(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_pk( $1, $2, ARRAY[$3], $4 );
col_is_pk
Signature: evergreen.col_is_pk(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is( _ckeys( $1, $2, 'p' ), $3, $4 );
col_is_pk
Signature: evergreen.col_is_pk(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_pk( $1, ARRAY[$2], $3 );
col_is_pk
Signature: evergreen.col_is_pk(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_pk( $1, $2, 'Columns ' || quote_ident($1) || '(' || _ident_array_to_string($2, ', ') || ') should be a primary key' );
col_is_pk
Signature: evergreen.col_is_pk(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is( _ckeys( $1, 'p' ), $2, $3 );
col_is_unique
Signature: evergreen.col_is_unique(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_unique( $1, $2, 'Column ' || quote_ident($1) || '(' || quote_ident($2) || ') should have a unique constraint' );
col_is_unique
Signature: evergreen.col_is_unique(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_unique( $1, $2, ARRAY[$3], 'Column ' || quote_ident($2) || '(' || quote_ident($3) || ') should have a unique constraint' );
col_is_unique
Signature: evergreen.col_is_unique(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_unique( $1, $2, ARRAY[$3], $4 );
col_is_unique
Signature: evergreen.col_is_unique(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_unique( $1, $2, $3, 'Columns ' || quote_ident($2) || '(' || _ident_array_to_string($3, ', ') || ') should have a unique constraint' );
col_is_unique
Signature: evergreen.col_is_unique(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _constraint( $1, $2, 'u', $3, $4, 'unique' );
col_is_unique
Signature: evergreen.col_is_unique(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_unique( $1, ARRAY[$2], $3 );
col_is_unique
Signature: evergreen.col_is_unique(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_is_unique( $1, $2, 'Columns ' || quote_ident($1) || '(' || _ident_array_to_string($2, ', ') || ') should have a unique constraint' );
col_is_unique
Signature: evergreen.col_is_unique(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _constraint( $1, 'u', $2, $3, 'unique' );
col_isnt_fk
Signature: evergreen.col_isnt_fk(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_isnt_fk( $1, $2, 'Column ' || quote_ident($1) || '(' || quote_ident($2) || ') should not be a foreign key' );
col_isnt_fk
Signature: evergreen.col_isnt_fk(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_isnt_fk( $1, $2, ARRAY[$3], $4 );
col_isnt_fk
Signature: evergreen.col_isnt_fk(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _fkexists( $1, $2, $3 ), $4 );
col_isnt_fk
Signature: evergreen.col_isnt_fk(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_isnt_fk( $1, ARRAY[$2], $3 );
col_isnt_fk
Signature: evergreen.col_isnt_fk(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_isnt_fk( $1, $2, 'Columns ' || quote_ident($1) || '(' || _ident_array_to_string($2, ', ') || ') should not be a foreign key' );
col_isnt_fk
Signature: evergreen.col_isnt_fk(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _fkexists( $1, $2 ), $3 );
col_isnt_pk
Signature: evergreen.col_isnt_pk(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_isnt_pk( $1, $2, 'Column ' || quote_ident($1) || '(' || quote_ident($2) || ') should not be a primary key' );
col_isnt_pk
Signature: evergreen.col_isnt_pk(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_isnt_pk( $1, $2, ARRAY[$3], $4 );
col_isnt_pk
Signature: evergreen.col_isnt_pk(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT isnt( _ckeys( $1, $2, 'p' ), $3, $4 );
col_isnt_pk
Signature: evergreen.col_isnt_pk(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_isnt_pk( $1, ARRAY[$2], $3 );
col_isnt_pk
Signature: evergreen.col_isnt_pk(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_isnt_pk( $1, $2, 'Columns ' || quote_ident($1) || '(' || _ident_array_to_string($2, ', ') || ') should not be a primary key' );
col_isnt_pk
Signature: evergreen.col_isnt_pk(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT isnt( _ckeys( $1, 'p' ), $2, $3 );
col_not_null
Signature: evergreen.col_not_null(schema_name name, table_name name, column_name name, description text DEFAULT NULL::text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _col_is_null( $1, $2, $3, $4, true );
col_not_null
Signature: evergreen.col_not_null(table_name name, column_name name, description text DEFAULT NULL::text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _col_is_null( $1, $2, $3, true );
col_type_is
Signature: evergreen.col_type_is(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_type_is( $1, $2, $3, $4, $5, 'Column ' || quote_ident($1) || '.' || quote_ident($2)
|| '.' || quote_ident($3) || ' should be type ' || quote_ident($4) || '.' || $5);
col_type_is
Signature: evergreen.col_type_is(name, name, name, name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have_type TEXT := _get_col_ns_type($1, $2, $3);
want_type TEXT;
BEGIN
IF have_type IS NULL THEN
RETURN fail( $6 ) || E'\n' || diag (
' Column ' || COALESCE(quote_ident($1) || '.', '')
|| quote_ident($2) || '.' || quote_ident($3) || ' does not exist'
);
END IF;
want_type := quote_ident($4) || '.' || _quote_ident_like($5, have_type);
IF have_type = want_type THEN
-- We're good to go.
RETURN ok( true, $6 );
END IF;
-- Wrong data type. tell 'em what we really got.
RETURN ok( false, $6 ) || E'\n' || diag(
' have: ' || have_type ||
E'\n want: ' || want_type
);
END;
col_type_is
Signature: evergreen.col_type_is(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_type_is( $1, $2, $3, $4, 'Column ' || quote_ident($1) || '.' || quote_ident($2) || '.' || quote_ident($3) || ' should be type ' || $4 );
col_type_is
Signature: evergreen.col_type_is(name, name, name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have_type TEXT;
want_type TEXT;
BEGIN
-- Get the data type.
IF $1 IS NULL THEN
have_type := _get_col_type($2, $3);
ELSE
have_type := _get_col_type($1, $2, $3);
END IF;
IF have_type IS NULL THEN
RETURN fail( $5 ) || E'\n' || diag (
' Column ' || COALESCE(quote_ident($1) || '.', '')
|| quote_ident($2) || '.' || quote_ident($3) || ' does not exist'
);
END IF;
want_type := _quote_ident_like($4, have_type);
IF have_type = want_type THEN
-- We're good to go.
RETURN ok( true, $5 );
END IF;
-- Wrong data type. tell 'em what we really got.
RETURN ok( false, $5 ) || E'\n' || diag(
' have: ' || have_type ||
E'\n want: ' || want_type
);
END;
col_type_is
Signature: evergreen.col_type_is(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_type_is( $1, $2, $3, 'Column ' || quote_ident($1) || '.' || quote_ident($2) || ' should be type ' || $3 );
col_type_is
Signature: evergreen.col_type_is(name, name, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT col_type_is( NULL, $1, $2, $3, $4 );
collect_tap
Signature: evergreen.collect_tap(VARIADIC text[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT array_to_string($1, E'\n');
collect_tap
Signature: evergreen.collect_tap(character varying[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT array_to_string($1, E'\n');
column_privs_are
Signature: evergreen.column_privs_are(name, name, name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT column_privs_are(
$1, $2, $3, $4, $5,
'Role ' || quote_ident($4) || ' should be granted '
|| CASE WHEN $5[1] IS NULL THEN 'no privileges' ELSE array_to_string($5, ', ') END
|| ' on column ' || quote_ident($1) || '.' || quote_ident($2) || '.' || quote_ident($3)
);
column_privs_are
Signature: evergreen.column_privs_are(name, name, name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_col_privs( $4, quote_ident($1) || '.' || quote_ident($2), $3 );
BEGIN
IF grants[1] = 'undefined_column' THEN
RETURN ok(FALSE, $6) || E'\n' || diag(
' Column ' || quote_ident($1) || '.' || quote_ident($2) || '.' || quote_ident($3)
|| ' does not exist'
);
ELSIF grants[1] = 'undefined_table' THEN
RETURN ok(FALSE, $6) || E'\n' || diag(
' Table ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $6) || E'\n' || diag(
' Role ' || quote_ident($4) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $5, $6);
END;
column_privs_are
Signature: evergreen.column_privs_are(name, name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT column_privs_are(
$1, $2, $3, $4,
'Role ' || quote_ident($3) || ' should be granted '
|| CASE WHEN $4[1] IS NULL THEN 'no privileges' ELSE array_to_string($4, ', ') END
|| ' on column ' || quote_ident($1) || '.' || quote_ident($2)
);
column_privs_are
Signature: evergreen.column_privs_are(name, name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_col_privs( $3, quote_ident($1), $2 );
BEGIN
IF grants[1] = 'undefined_column' THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
' Column ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
ELSIF grants[1] = 'undefined_table' THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
' Table ' || quote_ident($1) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
' Role ' || quote_ident($3) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $4, $5);
END;
columns_are
Signature: evergreen.columns_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT columns_are( $1, $2, $3, 'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should have the correct columns' );
columns_are
Signature: evergreen.columns_are(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'columns',
ARRAY(
SELECT a.attname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE n.nspname = $1
AND c.relname = $2
AND a.attnum > 0
AND NOT a.attisdropped
EXCEPT
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
),
ARRAY(
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
EXCEPT
SELECT a.attname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE n.nspname = $1
AND c.relname = $2
AND a.attnum > 0
AND NOT a.attisdropped
),
$4
);
columns_are
Signature: evergreen.columns_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT columns_are( $1, $2, 'Table ' || quote_ident($1) || ' should have the correct columns' );
columns_are
Signature: evergreen.columns_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'columns',
ARRAY(
SELECT a.attname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
AND pg_catalog.pg_table_is_visible(c.oid)
AND c.relname = $1
AND a.attnum > 0
AND NOT a.attisdropped
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
),
ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT a.attname
FROM pg_catalog.pg_namespace n
JOIN pg_catalog.pg_class c ON n.oid = c.relnamespace
JOIN pg_catalog.pg_attribute a ON c.oid = a.attrelid
WHERE n.nspname NOT IN ('pg_catalog', 'information_schema')
AND pg_catalog.pg_table_is_visible(c.oid)
AND c.relname = $1
AND a.attnum > 0
AND NOT a.attisdropped
),
$3
);
composite_owner_is
Signature: evergreen.composite_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT composite_owner_is(
$1, $2,
'Composite type ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
composite_owner_is
Signature: evergreen.composite_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT composite_owner_is(
$1, $2, $3,
'Composite type ' || quote_ident($1) || '.' || quote_ident($2) || ' should be owned by ' || quote_ident($3)
);
composite_owner_is
Signature: evergreen.composite_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('c'::char, $1, $2);
BEGIN
-- Make sure the composite exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Composite type ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN is(owner, $3, $4);
END;
composite_owner_is
Signature: evergreen.composite_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('c'::char, $1);
BEGIN
-- Make sure the composite exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Composite type ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
container_copy_bucket_item_target_copy_inh_fkey
Signature: evergreen.container_copy_bucket_item_target_copy_inh_fkey()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM 1 FROM asset.copy WHERE id = NEW.target_copy;
IF NOT FOUND THEN
RAISE foreign_key_violation USING MESSAGE = FORMAT(
$$Referenced asset.copy id not found, target_copy:%s$$, NEW.target_copy
);
END IF;
RETURN NEW;
END;
could_be_serial_holding_code
Signature: evergreen.could_be_serial_holding_code(text)
Returns: boolean
Language |
plperlu |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
Return true if parameter is valid JSON representing an array that at minimum doesn’t make MARC::Field balk and only has subfield labels exactly one character long. Otherwise false.
use JSON::XS;
use MARC::Field;
eval {
my $holding_code = (new JSON::XS)->decode(shift);
new MARC::Field('999', @$holding_code);
};
return 0 if $@;
# verify that subfield labels are exactly one character long
foreach (keys %{ { @$holding_code } }) {
return 0 if length($_) != 1;
}
return 1;
database_privs_are
Signature: evergreen.database_privs_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT database_privs_are(
$1, $2, $3,
'Role ' || quote_ident($2) || ' should be granted '
|| CASE WHEN $3[1] IS NULL THEN 'no privileges' ELSE array_to_string($3, ', ') END
|| ' on database ' || quote_ident($1)
);
database_privs_are
Signature: evergreen.database_privs_are(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_db_privs( $2, $1::TEXT );
BEGIN
IF grants[1] = 'invalid_catalog_name' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Database ' || quote_ident($1) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
db_owner_is
Signature: evergreen.db_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT db_owner_is(
$1, $2,
'Database ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
db_owner_is
Signature: evergreen.db_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
dbowner NAME := _get_db_owner($1);
BEGIN
-- Make sure the database exists.
IF dbowner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Database ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(dbowner, $2, $3);
END;
decode_base32
Signature: evergreen.decode_base32(text)
Returns: text
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
use MIME::Base32;
my $input = shift;
return decode_base32($input);
diag
Signature: evergreen.diag(VARIADIC anyarray)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT diag(array_to_string($1, ''));
diag
Signature: evergreen.diag(VARIADIC text[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT diag(array_to_string($1, ''));
diag
Signature: evergreen.diag(msg anyelement)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT diag($1::text);
diag
Signature: evergreen.diag(msg text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
SELECT '# ' || replace(
replace(
replace( $1, E'\r\n', E'\n# ' ),
E'\n',
E'\n# '
),
E'\r',
E'\n# '
);
diag_test_name
Signature: evergreen.diag_test_name(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT diag($1 || '()');
direct_opt_in_check
Signature: evergreen.direct_opt_in_check(patron_id integer, staff_id integer, permlist text[] DEFAULT '{}'::text[])
Returns: boolean
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
DECLARE
default_boundary INT;
org_depth INT;
patron actor.usr%ROWTYPE;
staff actor.usr%ROWTYPE;
patron_visible_at INT[];
patron_hard_wall INT[];
staff_orgs INT[];
current_staff_org INT;
passed_optin BOOL;
BEGIN
passed_optin := FALSE;
SELECT * INTO patron FROM actor.usr WHERE id = patron_id;
SELECT * INTO staff FROM actor.usr WHERE id = staff_id;
IF patron.id IS NULL OR staff.id IS NULL THEN
RETURN FALSE;
END IF;
-- get the hard wall, if any
SELECT oils_json_to_text(value)::INT INTO default_boundary
FROM actor.org_unit_ancestor_setting('org.restrict_opt_to_depth', patron.home_ou);
IF default_boundary IS NULL THEN default_boundary := 0; END IF;
IF default_boundary = 0 THEN -- common case
SELECT ARRAY_AGG(id) INTO patron_hard_wall FROM actor.org_unit;
ELSE
-- Patron opt-in scope(s), including home_ou from default_boundary depth
SELECT ARRAY_AGG(id) INTO patron_hard_wall
FROM actor.org_unit_descendants(patron.home_ou, default_boundary);
END IF;
-- gather where the patron has opted in, and their home
SELECT COALESCE(ARRAY_AGG(DISTINCT aoud.id),'{}') INTO patron_visible_at
FROM actor.usr_org_unit_opt_in auoi
JOIN LATERAL actor.org_unit_descendants(auoi.org_unit) aoud ON TRUE
WHERE auoi.usr = patron.id;
patron_visible_at := patron_visible_at || patron.home_ou;
<<staff_org_loop>>
FOR current_staff_org IN SELECT work_ou FROM permission.usr_work_ou_map WHERE usr = staff.id LOOP
SELECT oils_json_to_text(value)::INT INTO org_depth
FROM actor.org_unit_ancestor_setting('org.patron_opt_boundary', current_staff_org);
IF FOUND THEN
SELECT ARRAY_AGG(DISTINCT id) INTO staff_orgs FROM actor.org_unit_descendants(current_staff_org,org_depth);
ELSE
SELECT ARRAY_AGG(DISTINCT id) INTO staff_orgs FROM actor.org_unit_descendants(current_staff_org);
END IF;
-- If this staff org (adjusted) isn't at least partly inside the allowed range, move on.
IF NOT (staff_orgs && patron_hard_wall) THEN CONTINUE staff_org_loop; END IF;
-- If this staff org (adjusted) overlaps with the patron visibility list
IF staff_orgs && patron_visible_at THEN passed_optin := TRUE; EXIT staff_org_loop; END IF;
END LOOP staff_org_loop;
-- does the staff member have a requested permission where the patron lives or has opted in?
IF passed_optin AND cardinality(permlist) > 0 THEN
SELECT ARRAY_AGG(id) INTO staff_orgs
FROM UNNEST(permlist) perms (p)
JOIN LATERAL permission.usr_has_perm_at_all(staff.id, perms.p) perms_at (id) ON TRUE;
passed_optin := COALESCE(staff_orgs && patron_visible_at, FALSE);
END IF;
RETURN passed_optin;
END;
display_field_force_nfc
Signature: evergreen.display_field_force_nfc()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
NEW.value := force_unicode_normal_form(NEW.value,'NFC');
RETURN NEW;
END;
display_oper
Signature: evergreen.display_oper(name, oid)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT $1 || substring($2::regoperator::text, '[(][^)]+[)]$')
do_tap
Signature: evergreen.do_tap()
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM _runem( findfuncs('^test'), _is_verbose());
do_tap
Signature: evergreen.do_tap(name)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM _runem( findfuncs($1, '^test'), _is_verbose() );
do_tap
Signature: evergreen.do_tap(name, text)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM _runem( findfuncs($1, $2), _is_verbose() );
do_tap
Signature: evergreen.do_tap(text)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM _runem( findfuncs($1), _is_verbose() );
doesnt_imatch
Signature: evergreen.doesnt_imatch(anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _unalike( $1 !~* $2, $1, $2, NULL );
doesnt_imatch
Signature: evergreen.doesnt_imatch(anyelement, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _unalike( $1 !~* $2, $1, $2, $3 );
doesnt_match
Signature: evergreen.doesnt_match(anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _unalike( $1 !~ $2, $1, $2, NULL );
doesnt_match
Signature: evergreen.doesnt_match(anyelement, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _unalike( $1 !~ $2, $1, $2, $3 );
domain_type_is
Signature: evergreen.domain_type_is(name, text, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT domain_type_is(
$1, $2, $3, $4,
'Domain ' || quote_ident($1) || '.' || $2
|| ' should extend type ' || quote_ident($3) || '.' || $4
);
domain_type_is
Signature: evergreen.domain_type_is(name, text, name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
actual_type TEXT := _get_dtype($1, $2, true);
BEGIN
IF actual_type IS NULL THEN
RETURN fail( $5 ) || E'\n' || diag (
' Domain ' || quote_ident($1) || '.' || $2
|| ' does not exist'
);
END IF;
RETURN is( actual_type, quote_ident($3) || '.' || _quote_ident_like($4, actual_type), $5 );
END;
domain_type_is
Signature: evergreen.domain_type_is(name, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT domain_type_is(
$1, $2, $3,
'Domain ' || quote_ident($1) || '.' || $2
|| ' should extend type ' || $3
);
domain_type_is
Signature: evergreen.domain_type_is(name, text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
actual_type TEXT := _get_dtype($1, $2, false);
BEGIN
IF actual_type IS NULL THEN
RETURN fail( $4 ) || E'\n' || diag (
' Domain ' || quote_ident($1) || '.' || $2
|| ' does not exist'
);
END IF;
RETURN is( actual_type, _quote_ident_like($3, actual_type), $4 );
END;
domain_type_is
Signature: evergreen.domain_type_is(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT domain_type_is(
$1, $2,
'Domain ' || $1 || ' should extend type ' || $2
);
domain_type_is
Signature: evergreen.domain_type_is(text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
actual_type TEXT := _get_dtype($1);
BEGIN
IF actual_type IS NULL THEN
RETURN fail( $3 ) || E'\n' || diag (
' Domain ' || $1 || ' does not exist'
);
END IF;
RETURN is( actual_type, _quote_ident_like($2, actual_type), $3 );
END;
domain_type_isnt
Signature: evergreen.domain_type_isnt(name, text, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT domain_type_isnt(
$1, $2, $3, $4,
'Domain ' || quote_ident($1) || '.' || $2
|| ' should not extend type ' || quote_ident($3) || '.' || $4
);
domain_type_isnt
Signature: evergreen.domain_type_isnt(name, text, name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
actual_type TEXT := _get_dtype($1, $2, true);
BEGIN
IF actual_type IS NULL THEN
RETURN fail( $5 ) || E'\n' || diag (
' Domain ' || quote_ident($1) || '.' || $2
|| ' does not exist'
);
END IF;
RETURN isnt( actual_type, quote_ident($3) || '.' || _quote_ident_like($4, actual_type), $5 );
END;
domain_type_isnt
Signature: evergreen.domain_type_isnt(name, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT domain_type_isnt(
$1, $2, $3,
'Domain ' || quote_ident($1) || '.' || $2
|| ' should not extend type ' || $3
);
domain_type_isnt
Signature: evergreen.domain_type_isnt(name, text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
actual_type TEXT := _get_dtype($1, $2, false);
BEGIN
IF actual_type IS NULL THEN
RETURN fail( $4 ) || E'\n' || diag (
' Domain ' || quote_ident($1) || '.' || $2
|| ' does not exist'
);
END IF;
RETURN isnt( actual_type, _quote_ident_like($3, actual_type), $4 );
END;
domain_type_isnt
Signature: evergreen.domain_type_isnt(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT domain_type_isnt(
$1, $2,
'Domain ' || $1 || ' should not extend type ' || $2
);
domain_type_isnt
Signature: evergreen.domain_type_isnt(text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
actual_type TEXT := _get_dtype($1);
BEGIN
IF actual_type IS NULL THEN
RETURN fail( $3 ) || E'\n' || diag (
' Domain ' || $1 || ' does not exist'
);
END IF;
RETURN isnt( actual_type, _quote_ident_like($2, actual_type), $3 );
END;
domains_are
Signature: evergreen.domains_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, $2, 'Schema ' || quote_ident($1) || ' should have the correct domains', ARRAY['d'] );
domains_are
Signature: evergreen.domains_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, $2, $3, ARRAY['d'] );
domains_are
Signature: evergreen.domains_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, 'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct domains', ARRAY['d'] );
domains_are
Signature: evergreen.domains_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, $2, ARRAY['d'] );
encode_base32
Signature: evergreen.encode_base32(text)
Returns: text
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
use MIME::Base32;
my $input = shift;
return encode_base32($input);
enum_has_labels
Signature: evergreen.enum_has_labels(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT enum_has_labels(
$1, $2, $3,
'Enum ' || quote_ident($1) || '.' || quote_ident($2) || ' should have labels (' || array_to_string( $3, ', ' ) || ')'
);
enum_has_labels
Signature: evergreen.enum_has_labels(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is(
ARRAY(
SELECT e.enumlabel
FROM pg_catalog.pg_type t
JOIN pg_catalog.pg_enum e ON t.oid = e.enumtypid
JOIN pg_catalog.pg_namespace n ON t.typnamespace = n.oid
WHERE t.typisdefined
AND n.nspname = $1
AND t.typname = $2
AND t.typtype = 'e'
ORDER BY e.enumsortorder
),
$3,
$4
);
enum_has_labels
Signature: evergreen.enum_has_labels(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT enum_has_labels(
$1, $2,
'Enum ' || quote_ident($1) || ' should have labels (' || array_to_string( $2, ', ' ) || ')'
);
enum_has_labels
Signature: evergreen.enum_has_labels(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is(
ARRAY(
SELECT e.enumlabel
FROM pg_catalog.pg_type t
JOIN pg_catalog.pg_enum e ON t.oid = e.enumtypid
WHERE t.typisdefined
AND pg_catalog.pg_type_is_visible(t.oid)
AND t.typname = $1
AND t.typtype = 'e'
ORDER BY e.enumsortorder
),
$2,
$3
);
enums_are
Signature: evergreen.enums_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, $2, 'Schema ' || quote_ident($1) || ' should have the correct enums', ARRAY['e'] );
enums_are
Signature: evergreen.enums_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, $2, $3, ARRAY['e'] );
enums_are
Signature: evergreen.enums_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, 'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct enums', ARRAY['e'] );
enums_are
Signature: evergreen.enums_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, $2, ARRAY['e'] );
escape_for_html
Signature: evergreen.escape_for_html(text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
SELECT regexp_replace(
regexp_replace(
regexp_replace(
$1,
'&',
'&',
'g'
),
'<',
'<',
'g'
),
'>',
'>',
'g'
);
extensions_are
Signature: evergreen.extensions_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT extensions_are(
$1, $2,
'Schema ' || quote_ident($1) || ' should have the correct extensions'
);
extensions_are
Signature: evergreen.extensions_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'extensions',
ARRAY(SELECT _extensions($1) EXCEPT SELECT unnest($2)),
ARRAY(SELECT unnest($2) EXCEPT SELECT _extensions($1)),
$3
);
extensions_are
Signature: evergreen.extensions_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT extensions_are($1, 'Should have the correct extensions');
extensions_are
Signature: evergreen.extensions_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'extensions',
ARRAY(SELECT _extensions() EXCEPT SELECT unnest($1)),
ARRAY(SELECT unnest($1) EXCEPT SELECT _extensions()),
$2
);
extract_marc_field
Signature: evergreen.extract_marc_field(text, bigint, text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT extract_marc_field($1,$2,$3,'');
extract_marc_field
Signature: evergreen.extract_marc_field(text, bigint, text, text)
Returns: text
Language |
plpgsql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
DECLARE
query TEXT;
output TEXT;
BEGIN
query := $q$
SELECT regexp_replace(
oils_xpath_string(
$q$ || quote_literal($3) || $q$,
marc,
' '
),
$q$ || quote_literal($4) || $q$,
'',
'g')
FROM $q$ || $1 || $q$
WHERE id = $q$ || $2;
EXECUTE query INTO output;
-- RAISE NOTICE 'query: %, output; %', query, output;
RETURN output;
END;
extract_marc_field_set
Signature: evergreen.extract_marc_field_set(text, bigint, text, text)
Returns: SETOF text
Language |
plpgsql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
DECLARE
query TEXT;
output TEXT;
BEGIN
FOR output IN
SELECT x.t FROM (
SELECT id,t
FROM oils_xpath_table(
'id', 'marc', $1, $3, 'id = ' || $2)
AS t(id int, t text))x
LOOP
IF $4 IS NOT NULL THEN
SELECT INTO output (SELECT regexp_replace(output, $4, '', 'g'));
END IF;
RETURN NEXT output;
END LOOP;
RETURN;
END;
facet_force_nfc
Signature: evergreen.facet_force_nfc()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
NEW.value := force_unicode_normal_form(NEW.value,'NFC');
RETURN NEW;
END;
fail
Signature: evergreen.fail()
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( FALSE, NULL );
fail
Signature: evergreen.fail(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( FALSE, $1 );
fake_fkey_tgr
Signature: evergreen.fake_fkey_tgr()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
copy_id BIGINT;
BEGIN
EXECUTE 'SELECT ($1).' || quote_ident(TG_ARGV[0]) INTO copy_id USING NEW;
IF copy_id IS NOT NULL THEN
PERFORM * FROM asset.copy WHERE id = copy_id;
IF NOT FOUND THEN
RAISE EXCEPTION 'Key (%.%=%) does not exist in asset.copy', TG_TABLE_SCHEMA, TG_TABLE_NAME, copy_id;
END IF;
END IF;
RETURN NULL;
END;
fdw_privs_are
Signature: evergreen.fdw_privs_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT fdw_privs_are(
$1, $2, $3,
'Role ' || quote_ident($2) || ' should be granted '
|| CASE WHEN $3[1] IS NULL THEN 'no privileges' ELSE array_to_string($3, ', ') END
|| ' on FDW ' || quote_ident($1)
);
fdw_privs_are
Signature: evergreen.fdw_privs_are(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_fdw_privs( $2, $1::TEXT );
BEGIN
IF grants[1] = 'undefined_fdw' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' FDW ' || quote_ident($1) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
find_next_open_time
Signature: evergreen.find_next_open_time(circ_lib integer, initial timestamp with time zone, hourly boolean DEFAULT false, initial_time time without time zone DEFAULT NULL::time without time zone, has_hoo boolean DEFAULT true)
Returns: timestamp with time zone
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
day_number INT;
plus_days INT;
final_time TEXT;
time_adjusted BOOL;
hoo_open TIME WITHOUT TIME ZONE;
hoo_close TIME WITHOUT TIME ZONE;
adjacent actor.org_unit_closed%ROWTYPE;
breakout INT := 0;
BEGIN
IF initial_time IS NULL THEN
initial_time := initial::TIME;
END IF;
final_time := (initial + '1 second'::INTERVAL)::TEXT;
LOOP
breakout := breakout + 1;
time_adjusted := FALSE;
IF has_hoo THEN -- Don't check hours if they have no hoo. I think the behavior in that case is that we act like they're always open? Better than making things due in 2 years.
-- Don't expect anyone to call this with it set to false; it's just for our own recursive use.
day_number := EXTRACT(ISODOW FROM final_time::TIMESTAMPTZ) - 1; --Get which day of the week it is from which it started on.
plus_days := 0;
has_hoo := FALSE; -- set has_hoo to false to check if any days are open (for the first recursion where it's always true)
FOR i IN 1..7 LOOP
EXECUTE 'SELECT dow_' || day_number || '_open, dow_' || day_number || '_close FROM actor.hours_of_operation WHERE id = $1'
INTO hoo_open, hoo_close
USING circ_lib;
-- RAISE NOTICE 'initial time: %; dow: %; close: %',initial_time,day_number,hoo_close;
IF hoo_close = '00:00:00' THEN -- bah ... I guess we'll check the next day
day_number := (day_number + 1) % 7;
plus_days := plus_days + 1;
time_adjusted := TRUE;
CONTINUE;
ELSE
has_hoo := TRUE; --We do have hours open sometimes, yay!
END IF;
IF hoo_close IS NULL THEN -- no hours of operation ... assume no closing?
hoo_close := '23:59:59';
END IF;
EXIT;
END LOOP;
IF NOT has_hoo THEN -- If always closed then forget the extra days - just determine based on closures.
plus_days := 0;
END IF;
final_time := DATE(final_time::TIMESTAMPTZ + (plus_days || ' days')::INTERVAL)::TEXT;
IF hoo_close <> '00:00:00' AND hourly THEN -- Not a day-granular circ
final_time := final_time||' '|| hoo_close;
ELSE
final_time := final_time||' 23:59:59';
END IF;
END IF;
--RAISE NOTICE 'final_time: %',final_time;
-- Loop through other closings
LOOP
SELECT * INTO adjacent FROM actor.org_unit_closed WHERE org_unit = circ_lib AND final_time::TIMESTAMPTZ between close_start AND close_end;
EXIT WHEN adjacent.id IS NULL;
time_adjusted := TRUE;
-- RAISE NOTICE 'recursing for closings with final_time: %',final_time;
final_time := evergreen.find_next_open_time(circ_lib, adjacent.close_end::TIMESTAMPTZ, hourly, initial_time, has_hoo)::TEXT;
END LOOP;
EXIT WHEN breakout > 100;
EXIT WHEN NOT time_adjusted;
END LOOP;
RETURN final_time;
END;
findfuncs
Signature: evergreen.findfuncs(name, text)
Returns: text[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT findfuncs( $1, $2, NULL )
findfuncs
Signature: evergreen.findfuncs(name, text, text)
Returns: text[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT DISTINCT (quote_ident(n.nspname) || '.' || quote_ident(p.proname)) COLLATE "C" AS pname
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace n ON p.pronamespace = n.oid
WHERE n.nspname = $1
AND p.proname ~ $2
AND ($3 IS NULL OR p.proname !~ $3)
ORDER BY pname
);
findfuncs
Signature: evergreen.findfuncs(text)
Returns: text[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT findfuncs( $1, NULL )
findfuncs
Signature: evergreen.findfuncs(text, text)
Returns: text[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY(
SELECT DISTINCT (quote_ident(n.nspname) || '.' || quote_ident(p.proname)) COLLATE "C" AS pname
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace n ON p.pronamespace = n.oid
WHERE pg_catalog.pg_function_is_visible(p.oid)
AND p.proname ~ $1
AND ($2 IS NULL OR p.proname !~ $2)
ORDER BY pname
);
finish
Signature: evergreen.finish(exception_on_failure boolean DEFAULT NULL::boolean)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM _finish(
_get('curr_test'),
_get('plan'),
num_failed(),
$1
);
fk_ok
Signature: evergreen.fk_ok(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT fk_ok( $1, ARRAY[$2], $3, ARRAY[$4] );
fk_ok
Signature: evergreen.fk_ok(name, name, name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT fk_ok( $1, $2, ARRAY[$3], $4, $5, ARRAY[$6], $7 );
fk_ok
Signature: evergreen.fk_ok(name, name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT fk_ok( $1, $2, ARRAY[$3], $4, $5, ARRAY[$6] );
fk_ok
Signature: evergreen.fk_ok(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT fk_ok( $1, ARRAY[$2], $3, ARRAY[$4], $5 );
fk_ok
Signature: evergreen.fk_ok(name, name, name[], name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT fk_ok( $1, $2, $3, $4, $5, $6,
quote_ident($1) || '.' || quote_ident($2) || '(' || _ident_array_to_string( $3, ', ' )
|| ') should reference ' ||
$4 || '.' || $5 || '(' || _ident_array_to_string( $6, ', ' ) || ')'
);
fk_ok
Signature: evergreen.fk_ok(name, name, name[], name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
sch name;
tab name;
cols name[];
BEGIN
SELECT pk_schema_name, pk_table_name, pk_columns
FROM pg_all_foreign_keys
WHERE fk_schema_name = $1
AND fk_table_name = $2
AND fk_columns = $3
INTO sch, tab, cols;
RETURN is(
-- have
quote_ident($1) || '.' || quote_ident($2) || '(' || _ident_array_to_string( $3, ', ' )
|| ') REFERENCES ' || COALESCE ( sch || '.' || tab || '(' || _ident_array_to_string( cols, ', ' ) || ')', 'NOTHING' ),
-- want
quote_ident($1) || '.' || quote_ident($2) || '(' || _ident_array_to_string( $3, ', ' )
|| ') REFERENCES ' ||
$4 || '.' || $5 || '(' || _ident_array_to_string( $6, ', ' ) || ')',
$7
);
END;
fk_ok
Signature: evergreen.fk_ok(name, name[], name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT fk_ok( $1, $2, $3, $4,
$1 || '(' || _ident_array_to_string( $2, ', ' )
|| ') should reference ' ||
$3 || '(' || _ident_array_to_string( $4, ', ' ) || ')'
);
fk_ok
Signature: evergreen.fk_ok(name, name[], name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
tab name;
cols name[];
BEGIN
SELECT pk_table_name, pk_columns
FROM pg_all_foreign_keys
WHERE fk_table_name = $1
AND fk_columns = $2
AND pg_catalog.pg_table_is_visible(fk_table_oid)
INTO tab, cols;
RETURN is(
-- have
$1 || '(' || _ident_array_to_string( $2, ', ' )
|| ') REFERENCES ' || COALESCE( tab || '(' || _ident_array_to_string( cols, ', ' ) || ')', 'NOTHING'),
-- want
$1 || '(' || _ident_array_to_string( $2, ', ' )
|| ') REFERENCES ' ||
$3 || '(' || _ident_array_to_string( $4, ', ' ) || ')',
$5
);
END;
force_unicode_normal_form
Signature: evergreen.force_unicode_normal_form(string text, form text)
Returns: text
Language |
plperlu |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
use Unicode::Normalize 'normalize';
return normalize($_[1],$_[0]); # reverse the params
foreign_table_owner_is
Signature: evergreen.foreign_table_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT foreign_table_owner_is(
$1, $2,
'Foreign table ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
foreign_table_owner_is
Signature: evergreen.foreign_table_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT foreign_table_owner_is(
$1, $2, $3,
'Foreign table ' || quote_ident($1) || '.' || quote_ident($2) || ' should be owned by ' || quote_ident($3)
);
foreign_table_owner_is
Signature: evergreen.foreign_table_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('f'::char, $1, $2);
BEGIN
-- Make sure the table exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Foreign table ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN is(owner, $3, $4);
END;
foreign_table_owner_is
Signature: evergreen.foreign_table_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('f'::char, $1);
BEGIN
-- Make sure the table exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Foreign table ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
foreign_tables_are
Signature: evergreen.foreign_tables_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'foreign tables', _extras('f', $1, $2), _missing('f', $1, $2),
'Schema ' || quote_ident($1) || ' should have the correct foreign tables'
);
foreign_tables_are
Signature: evergreen.foreign_tables_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'foreign tables', _extras('f', $1, $2), _missing('f', $1, $2), $3);
foreign_tables_are
Signature: evergreen.foreign_tables_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'foreign tables', _extras('f', $1), _missing('f', $1),
'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct foreign tables'
);
foreign_tables_are
Signature: evergreen.foreign_tables_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'foreign tables', _extras('f', $1), _missing('f', $1), $2);
function_lang_is
Signature: evergreen.function_lang_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_lang_is(
$1, $2,
'Function ' || quote_ident($1)
|| '() should be written in ' || quote_ident($2)
);
function_lang_is
Signature: evergreen.function_lang_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_lang_is(
$1, $2, $3,
'Function ' || quote_ident($1) || '.' || quote_ident($2)
|| '() should be written in ' || quote_ident($3)
);
function_lang_is
Signature: evergreen.function_lang_is(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, _lang($1, $2), $3, $4 );
function_lang_is
Signature: evergreen.function_lang_is(name, name, name[], name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_lang_is(
$1, $2, $3, $4,
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should be written in ' || quote_ident($4)
);
function_lang_is
Signature: evergreen.function_lang_is(name, name, name[], name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, $3, _lang($1, $2, $3), $4, $5 );
function_lang_is
Signature: evergreen.function_lang_is(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, _lang($1), $2, $3 );
function_lang_is
Signature: evergreen.function_lang_is(name, name[], name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_lang_is(
$1, $2, $3,
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should be written in ' || quote_ident($3)
);
function_lang_is
Signature: evergreen.function_lang_is(name, name[], name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, $2, _lang($1, $2), $3, $4 );
function_owner_is
Signature: evergreen.function_owner_is(name, name, name[], name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_owner_is(
$1, $2, $3, $4,
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should be owned by ' || quote_ident($4)
);
function_owner_is
Signature: evergreen.function_owner_is(name, name, name[], name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_func_owner($1, $2, $3);
BEGIN
-- Make sure the function exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
E' Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') does not exist'
);
END IF;
RETURN is(owner, $4, $5);
END;
function_owner_is
Signature: evergreen.function_owner_is(name, name[], name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_owner_is(
$1, $2, $3,
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should be owned by ' || quote_ident($3)
);
function_owner_is
Signature: evergreen.function_owner_is(name, name[], name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_func_owner($1, $2);
BEGIN
-- Make sure the function exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') does not exist'
);
END IF;
RETURN is(owner, $3, $4);
END;
function_privs_are
Signature: evergreen.function_privs_are(name, name, name[], name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_privs_are(
$1, $2, $3, $4, $5,
'Role ' || quote_ident($4) || ' should be granted '
|| CASE WHEN $5[1] IS NULL THEN 'no privileges' ELSE array_to_string($5, ', ') END
|| ' on function ' || quote_ident($1) || '.' || quote_ident($2)
|| '(' || array_to_string($3, ', ') || ')'
);
function_privs_are
Signature: evergreen.function_privs_are(name, name, name[], name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _fprivs_are(
quote_ident($1) || '.' || quote_ident($2) || '(' || array_to_string($3, ', ') || ')',
$4, $5, $6
);
function_privs_are
Signature: evergreen.function_privs_are(name, name[], name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_privs_are(
$1, $2, $3, $4,
'Role ' || quote_ident($3) || ' should be granted '
|| CASE WHEN $4[1] IS NULL THEN 'no privileges' ELSE array_to_string($4, ', ') END
|| ' on function ' || quote_ident($1) || '(' || array_to_string($2, ', ') || ')'
);
function_privs_are
Signature: evergreen.function_privs_are(name, name[], name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _fprivs_are(
quote_ident($1) || '(' || array_to_string($2, ', ') || ')',
$3, $4, $5
);
function_returns
Signature: evergreen.function_returns(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_returns(
$1, $2, $3, $4,
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should return ' || $4
);
function_returns
Signature: evergreen.function_returns(name, name, name[], text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, $3, _returns($1, $2, $3), $4, $5 );
function_returns
Signature: evergreen.function_returns(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_returns(
$1, $2, $3,
'Function ' || quote_ident($1) || '.' || quote_ident($2)
|| '() should return ' || $3
);
function_returns
Signature: evergreen.function_returns(name, name, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, _returns($1, $2), $3, $4 );
function_returns
Signature: evergreen.function_returns(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_returns(
$1, $2, $3,
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should return ' || $3
);
function_returns
Signature: evergreen.function_returns(name, name[], text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, $2, _returns($1, $2), $3, $4 );
function_returns
Signature: evergreen.function_returns(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT function_returns(
$1, $2,
'Function ' || quote_ident($1) || '() should return ' || $2
);
function_returns
Signature: evergreen.function_returns(name, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, _returns($1), $2, $3 );
functions_are
Signature: evergreen.functions_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT functions_are( $1, $2, 'Schema ' || quote_ident($1) || ' should have the correct functions' );
functions_are
Signature: evergreen.functions_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'functions',
ARRAY(
SELECT name FROM tap_funky WHERE schema = $1
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
),
ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT name FROM tap_funky WHERE schema = $1
),
$3
);
functions_are
Signature: evergreen.functions_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT functions_are( $1, 'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct functions' );
functions_are
Signature: evergreen.functions_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'functions',
ARRAY(
SELECT name FROM tap_funky WHERE is_visible
AND schema NOT IN ('pg_catalog', 'information_schema')
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT name FROM tap_funky WHERE is_visible
AND schema NOT IN ('pg_catalog', 'information_schema')
),
$2
);
gen_random_bytes_b64
Signature: evergreen.gen_random_bytes_b64(integer)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
SELECT encode(gen_random_bytes($1),'base64');
generic_map_normalizer
Signature: evergreen.generic_map_normalizer(text, text)
Returns: text
Language |
plperlu |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
my $string = shift;
my %map;
my $default = $string;
$_ = shift;
while (/^\s*?(.*?)\s*?=>\s*?(\S+)\s*/) {
if ($1 eq '') {
$default = $2;
} else {
$map{$2} = [split(/\s*,\s*/, $1)];
}
$_ = $';
}
for my $key ( keys %map ) {
return $key if (grep { $_ eq $string } @{ $map{$key} });
}
return $default;
get_barcodes
Signature: evergreen.get_barcodes(select_ou integer, type text, in_barcode text)
Returns: SETOF barcode_set
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
Given user input, find an appropriate barcode in the proper class.
Will add prefix/suffix information to do so, and return all results.
DECLARE
cur_barcode TEXT;
barcode_len INT;
completion_len INT;
asset_barcodes TEXT[];
actor_barcodes TEXT[];
do_asset BOOL = false;
do_serial BOOL = false;
do_booking BOOL = false;
do_actor BOOL = false;
completion_set config.barcode_completion%ROWTYPE;
BEGIN
IF position('asset' in type) > 0 THEN
do_asset = true;
END IF;
IF position('serial' in type) > 0 THEN
do_serial = true;
END IF;
IF position('booking' in type) > 0 THEN
do_booking = true;
END IF;
IF do_asset OR do_serial OR do_booking THEN
asset_barcodes = asset_barcodes || in_barcode;
END IF;
IF position('actor' in type) > 0 THEN
do_actor = true;
actor_barcodes = actor_barcodes || in_barcode;
END IF;
barcode_len := length(in_barcode);
FOR completion_set IN
SELECT * FROM config.barcode_completion
WHERE active
AND org_unit IN (SELECT aou.id FROM actor.org_unit_ancestors(select_ou) aou)
LOOP
IF completion_set.prefix IS NULL THEN
completion_set.prefix := '';
END IF;
IF completion_set.suffix IS NULL THEN
completion_set.suffix := '';
END IF;
IF completion_set.length = 0 OR completion_set.padding IS NULL OR length(completion_set.padding) = 0 THEN
cur_barcode = completion_set.prefix || in_barcode || completion_set.suffix;
ELSE
completion_len = completion_set.length - length(completion_set.prefix) - length(completion_set.suffix);
IF completion_len >= barcode_len THEN
IF completion_set.padding_end THEN
cur_barcode = rpad(in_barcode, completion_len, completion_set.padding);
ELSE
cur_barcode = lpad(in_barcode, completion_len, completion_set.padding);
END IF;
cur_barcode = completion_set.prefix || cur_barcode || completion_set.suffix;
END IF;
END IF;
IF completion_set.actor THEN
actor_barcodes = actor_barcodes || cur_barcode;
END IF;
IF completion_set.asset THEN
asset_barcodes = asset_barcodes || cur_barcode;
END IF;
END LOOP;
IF do_asset AND do_serial THEN
RETURN QUERY SELECT 'asset'::TEXT, id, barcode FROM ONLY asset.copy WHERE barcode = ANY(asset_barcodes) AND deleted = false;
RETURN QUERY SELECT 'serial'::TEXT, id, barcode FROM serial.unit WHERE barcode = ANY(asset_barcodes) AND deleted = false;
ELSIF do_asset THEN
RETURN QUERY SELECT 'asset'::TEXT, id, barcode FROM asset.copy WHERE barcode = ANY(asset_barcodes) AND deleted = false;
ELSIF do_serial THEN
RETURN QUERY SELECT 'serial'::TEXT, id, barcode FROM serial.unit WHERE barcode = ANY(asset_barcodes) AND deleted = false;
END IF;
IF do_booking THEN
RETURN QUERY SELECT 'booking'::TEXT, id::BIGINT, barcode FROM booking.resource WHERE barcode = ANY(asset_barcodes);
END IF;
IF do_actor THEN
RETURN QUERY SELECT 'actor'::TEXT, c.usr::BIGINT, c.barcode FROM actor.card c JOIN actor.usr u ON c.usr = u.id WHERE
((c.barcode = ANY(actor_barcodes) AND c.active) OR c.barcode = in_barcode) AND NOT u.deleted ORDER BY usr;
END IF;
RETURN;
END;
get_locale_name
Signature: evergreen.get_locale_name(locale text, OUT name text, OUT description text)
Returns: record
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
DECLARE
eg_locale TEXT;
BEGIN
eg_locale := LOWER(SUBSTRING(locale FROM 1 FOR 2)) || '-' || UPPER(SUBSTRING(locale FROM 4 FOR 2));
SELECT i18nc.string INTO name
FROM config.i18n_locale i18nl
INNER JOIN config.i18n_core i18nc ON i18nl.code = i18nc.translation
WHERE i18nc.identity_value = eg_locale
AND code = eg_locale
AND i18nc.fq_field = 'i18n_l.name';
IF name IS NULL THEN
SELECT i18nl.name INTO name
FROM config.i18n_locale i18nl
WHERE code = eg_locale;
END IF;
SELECT i18nc.string INTO description
FROM config.i18n_locale i18nl
INNER JOIN config.i18n_core i18nc ON i18nl.code = i18nc.translation
WHERE i18nc.identity_value = eg_locale
AND code = eg_locale
AND i18nc.fq_field = 'i18n_l.description';
IF description IS NULL THEN
SELECT i18nl.description INTO description
FROM config.i18n_locale i18nl
WHERE code = eg_locale;
END IF;
END;
groups_are
Signature: evergreen.groups_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT groups_are( $1, 'There should be the correct groups' );
groups_are
Signature: evergreen.groups_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'groups',
ARRAY(
SELECT groname
FROM pg_catalog.pg_group
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT groname
FROM pg_catalog.pg_group
),
$2
);
has_cast
Signature: evergreen.has_cast(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_cast_exists( $1, $2 ),
'Cast (' || quote_ident($1) || ' AS ' || quote_ident($2)
|| ') should exist'
);
has_cast
Signature: evergreen.has_cast(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_cast_exists( $1, $2, $3 ),
'Cast (' || quote_ident($1) || ' AS ' || quote_ident($2)
|| ') WITH FUNCTION ' || quote_ident($3) || '() should exist'
);
has_cast
Signature: evergreen.has_cast(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_cast_exists( $1, $2, $3, $4 ),
'Cast (' || quote_ident($1) || ' AS ' || quote_ident($2)
|| ') WITH FUNCTION ' || quote_ident($3)
|| '.' || quote_ident($4) || '() should exist'
);
has_cast
Signature: evergreen.has_cast(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _cast_exists( $1, $2, $3, $4 ), $5 );
has_cast
Signature: evergreen.has_cast(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _cast_exists( $1, $2, $3 ), $4 );
has_cast
Signature: evergreen.has_cast(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _cast_exists( $1, $2 ), $3 );
has_check
Signature: evergreen.has_check(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_check( $1, 'Table ' || quote_ident($1) || ' should have a check constraint' );
has_check
Signature: evergreen.has_check(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _hasc( $1, $2, 'c' ), $3 );
has_check
Signature: evergreen.has_check(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _hasc( $1, 'c' ), $2 );
has_column
Signature: evergreen.has_column(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_column( $1, $2, 'Column ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist' );
has_column
Signature: evergreen.has_column(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _cexists( $1, $2, $3 ), $4 );
has_column
Signature: evergreen.has_column(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _cexists( $1, $2 ), $3 );
has_composite
Signature: evergreen.has_composite(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_composite( $1, 'Composite type ' || quote_ident($1) || ' should exist' );
has_composite
Signature: evergreen.has_composite(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'c', $1, $2 ), $3 );
has_composite
Signature: evergreen.has_composite(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'c', $1 ), $2 );
has_domain
Signature: evergreen.has_domain(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_type( $1, ARRAY['d'] ), ('Domain ' || quote_ident($1) || ' should exist')::text );
has_domain
Signature: evergreen.has_domain(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_domain( $1, $2, 'Domain ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist' );
has_domain
Signature: evergreen.has_domain(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_type( $1, $2, ARRAY['d'] ), $3 );
has_domain
Signature: evergreen.has_domain(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_type( $1, ARRAY['d'] ), $2 );
has_enum
Signature: evergreen.has_enum(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_type( $1, ARRAY['e'] ), ('Enum ' || quote_ident($1) || ' should exist')::text );
has_enum
Signature: evergreen.has_enum(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_enum( $1, $2, 'Enum ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist' );
has_enum
Signature: evergreen.has_enum(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_type( $1, $2, ARRAY['e'] ), $3 );
has_enum
Signature: evergreen.has_enum(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_type( $1, ARRAY['e'] ), $2 );
has_extension
Signature: evergreen.has_extension(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ext_exists( $1 ),
'Extension ' || quote_ident($1) || ' should exist' );
has_extension
Signature: evergreen.has_extension(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ext_exists( $1, $2 ),
'Extension ' || quote_ident($2)
|| ' should exist in schema ' || quote_ident($1) );
has_extension
Signature: evergreen.has_extension(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ext_exists( $1, $2 ), $3 );
has_extension
Signature: evergreen.has_extension(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ext_exists( $1 ), $2)
has_fk
Signature: evergreen.has_fk(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_fk( $1, 'Table ' || quote_ident($1) || ' should have a foreign key constraint' );
has_fk
Signature: evergreen.has_fk(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _hasc( $1, $2, 'f' ), $3 );
has_fk
Signature: evergreen.has_fk(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _hasc( $1, 'f' ), $2 );
has_foreign_table
Signature: evergreen.has_foreign_table(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_foreign_table( $1, 'Foreign table ' || quote_ident($1) || ' should exist' );
has_foreign_table
Signature: evergreen.has_foreign_table(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_rexists( 'f', $1, $2 ),
'Foreign table ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist'
);
has_foreign_table
Signature: evergreen.has_foreign_table(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'f', $1, $2 ), $3 );
has_foreign_table
Signature: evergreen.has_foreign_table(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'f', $1 ), $2 );
has_function
Signature: evergreen.has_function(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _got_func($1), 'Function ' || quote_ident($1) || '() should exist' );
has_function
Signature: evergreen.has_function(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_got_func($1, $2),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should exist'
);
has_function
Signature: evergreen.has_function(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_got_func($1, $2, $3),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should exist'
);
has_function
Signature: evergreen.has_function(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _got_func($1, $2, $3), $4 );
has_function
Signature: evergreen.has_function(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _got_func($1, $2), $3 );
has_function
Signature: evergreen.has_function(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_got_func($1, $2),
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should exist'
);
has_function
Signature: evergreen.has_function(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _got_func($1, $2), $3 );
has_function
Signature: evergreen.has_function(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _got_func($1), $2 );
has_group
Signature: evergreen.has_group(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_group($1), 'Group ' || quote_ident($1) || ' should exist' );
has_group
Signature: evergreen.has_group(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_group($1), $2 );
has_index
Signature: evergreen.has_index(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _have_index( $1, $2 ), 'Index ' || quote_ident($2) || ' should exist' );
has_index
Signature: evergreen.has_index(name, name, name)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF _is_schema($1) THEN
-- ( schema, table, index )
RETURN ok( _have_index( $1, $2, $3 ), 'Index ' || quote_ident($3) || ' should exist' );
ELSE
-- ( table, index, column/expression )
RETURN has_index( $1, $2, $3, 'Index ' || quote_ident($2) || ' should exist' );
END IF;
END;
has_index
Signature: evergreen.has_index(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_index( $1, $2, $3, $4, 'Index ' || quote_ident($3) || ' should exist' );
has_index
Signature: evergreen.has_index(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_index( $1, $2, $3, ARRAY[$4], $5 );
has_index
Signature: evergreen.has_index(name, name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_index( $1, $2, $3, $4, 'Index ' || quote_ident($3) || ' should exist' );
has_index
Signature: evergreen.has_index(name, name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
index_cols name[];
BEGIN
index_cols := _ikeys($1, $2, $3 );
IF index_cols IS NULL OR index_cols = '{}'::name[] THEN
RETURN ok( false, $5 ) || E'\n'
|| diag( 'Index ' || quote_ident($3) || ' ON ' || quote_ident($1) || '.' || quote_ident($2) || ' not found');
END IF;
RETURN is(
quote_ident($3) || ' ON ' || quote_ident($1) || '.' || quote_ident($2) || '(' || array_to_string( index_cols, ', ' ) || ')',
quote_ident($3) || ' ON ' || quote_ident($1) || '.' || quote_ident($2) || '(' || array_to_string( $4, ', ' ) || ')',
$5
);
END;
has_index
Signature: evergreen.has_index(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT CASE WHEN _is_schema( $1 ) THEN
-- Looking for schema.table index.
ok ( _have_index( $1, $2, $3 ), $4)
ELSE
-- Looking for particular columns.
has_index( $1, $2, ARRAY[$3], $4 )
END;
has_index
Signature: evergreen.has_index(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_index( $1, $2, $3, 'Index ' || quote_ident($2) || ' should exist' );
has_index
Signature: evergreen.has_index(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
index_cols name[];
BEGIN
index_cols := _ikeys($1, $2 );
IF index_cols IS NULL OR index_cols = '{}'::name[] THEN
RETURN ok( false, $4 ) || E'\n'
|| diag( 'Index ' || quote_ident($2) || ' ON ' || quote_ident($1) || ' not found');
END IF;
RETURN is(
quote_ident($2) || ' ON ' || quote_ident($1) || '(' || array_to_string( index_cols, ', ' ) || ')',
quote_ident($2) || ' ON ' || quote_ident($1) || '(' || array_to_string( $3, ', ' ) || ')',
$4
);
END;
has_index
Signature: evergreen.has_index(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT CASE WHEN $3 LIKE '%(%'
THEN has_index( $1, $2, $3::name )
ELSE ok( _have_index( $1, $2 ), $3 )
END;
has_inherited_tables
Signature: evergreen.has_inherited_tables(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_inherited( $1 ),
'Table ' || quote_ident( $1 ) || ' should have descendents'
);
has_inherited_tables
Signature: evergreen.has_inherited_tables(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_inherited( $1, $2 ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 ) || ' should have descendents'
);
has_inherited_tables
Signature: evergreen.has_inherited_tables(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _inherited( $1, $2 ), $3);
has_inherited_tables
Signature: evergreen.has_inherited_tables(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _inherited( $1 ), $2 );
has_language
Signature: evergreen.has_language(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_trusted($1) IS NOT NULL, 'Procedural language ' || quote_ident($1) || ' should exist' );
has_language
Signature: evergreen.has_language(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_trusted($1) IS NOT NULL, $2 );
has_leftop
Signature: evergreen.has_leftop(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_op_exists(NULL, $1, $2 ),
'Left operator ' || $1 || '(NONE,' || $2 || ') should exist'
);
has_leftop
Signature: evergreen.has_leftop(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_op_exists(NULL, $1, $2, $3 ),
'Left operator ' || $1 || '(NONE,' || $2 || ') RETURNS ' || $3 || ' should exist'
);
has_leftop
Signature: evergreen.has_leftop(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_op_exists(NULL, $1, $2, $3, $4 ),
'Left operator ' || quote_ident($1) || '.' || $2 || '(NONE,'
|| $3 || ') RETURNS ' || $4 || ' should exist'
);
has_leftop
Signature: evergreen.has_leftop(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _op_exists(NULL, $1, $2, $3, $4), $5 );
has_leftop
Signature: evergreen.has_leftop(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _op_exists(NULL, $1, $2, $3), $4 );
has_leftop
Signature: evergreen.has_leftop(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _op_exists(NULL, $1, $2), $3 );
has_materialized_view
Signature: evergreen.has_materialized_view(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_materialized_view( $1, 'Materialized view ' || quote_ident($1) || ' should exist' );
has_materialized_view
Signature: evergreen.has_materialized_view(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'm', $1, $2 ), $3 );
has_materialized_view
Signature: evergreen.has_materialized_view(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'm', $1 ), $2 );
has_opclass
Signature: evergreen.has_opclass(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _opc_exists( $1 ), 'Operator class ' || quote_ident($1) || ' should exist' );
has_opclass
Signature: evergreen.has_opclass(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _opc_exists( $1, $2 ), 'Operator class ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist' );
has_opclass
Signature: evergreen.has_opclass(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _opc_exists( $1, $2 ), $3 );
has_opclass
Signature: evergreen.has_opclass(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _opc_exists( $1 ), $2)
has_operator
Signature: evergreen.has_operator(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_op_exists($1, $2, $3 ),
'Operator ' || $2 || '(' || $1 || ',' || $3
|| ') should exist'
);
has_operator
Signature: evergreen.has_operator(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_op_exists($1, $2, $3, $4 ),
'Operator ' || $2 || '(' || $1 || ',' || $3
|| ') RETURNS ' || $4 || ' should exist'
);
has_operator
Signature: evergreen.has_operator(name, name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_op_exists($1, $2, $3, $4, $5 ),
'Operator ' || quote_ident($2) || '.' || $3 || '(' || $1 || ',' || $4
|| ') RETURNS ' || $5 || ' should exist'
);
has_operator
Signature: evergreen.has_operator(name, name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _op_exists($1, $2, $3, $4, $5 ), $6 );
has_operator
Signature: evergreen.has_operator(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _op_exists($1, $2, $3, $4 ), $5 );
has_operator
Signature: evergreen.has_operator(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _op_exists($1, $2, $3 ), $4 );
has_pk
Signature: evergreen.has_pk(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_pk( $1, 'Table ' || quote_ident($1) || ' should have a primary key' );
has_pk
Signature: evergreen.has_pk(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _hasc( $1, $2, 'p' ), $3 );
has_pk
Signature: evergreen.has_pk(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _hasc( $1, 'p' ), $2 );
has_relation
Signature: evergreen.has_relation(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_relation( $1, 'Relation ' || quote_ident($1) || ' should exist' );
has_relation
Signature: evergreen.has_relation(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _relexists( $1, $2 ), $3 );
has_relation
Signature: evergreen.has_relation(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _relexists( $1 ), $2 );
has_rightop
Signature: evergreen.has_rightop(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_op_exists($1, $2, NULL ),
'Right operator ' || $2 || '(' || $1 || ',NONE) should exist'
);
has_rightop
Signature: evergreen.has_rightop(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_op_exists($1, $2, NULL, $3 ),
'Right operator ' || $2 || '('
|| $1 || ',NONE) RETURNS ' || $3 || ' should exist'
);
has_rightop
Signature: evergreen.has_rightop(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_op_exists($1, $2, $3, NULL, $4 ),
'Right operator ' || quote_ident($2) || '.' || $3 || '('
|| $1 || ',NONE) RETURNS ' || $4 || ' should exist'
);
has_rightop
Signature: evergreen.has_rightop(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _op_exists( $1, $2, $3, NULL, $4), $5 );
has_rightop
Signature: evergreen.has_rightop(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _op_exists( $1, $2, NULL, $3), $4 );
has_rightop
Signature: evergreen.has_rightop(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _op_exists( $1, $2, NULL), $3 );
has_role
Signature: evergreen.has_role(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_role($1), 'Role ' || quote_ident($1) || ' should exist' );
has_role
Signature: evergreen.has_role(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_role($1), $2 );
has_rule
Signature: evergreen.has_rule(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_instead($1, $2) IS NOT NULL, 'Relation ' || quote_ident($1) || ' should have rule ' || quote_ident($2) );
has_rule
Signature: evergreen.has_rule(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_instead($1, $2, $3) IS NOT NULL, 'Relation ' || quote_ident($1) || '.' || quote_ident($2) || ' should have rule ' || quote_ident($3) );
has_rule
Signature: evergreen.has_rule(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_instead($1, $2, $3) IS NOT NULL, $4 );
has_rule
Signature: evergreen.has_rule(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_instead($1, $2) IS NOT NULL, $3 );
has_schema
Signature: evergreen.has_schema(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_schema( $1, 'Schema ' || quote_ident($1) || ' should exist' );
has_schema
Signature: evergreen.has_schema(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
EXISTS(
SELECT true
FROM pg_catalog.pg_namespace
WHERE nspname = $1
), $2
);
has_sequence
Signature: evergreen.has_sequence(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_sequence( $1, 'Sequence ' || quote_ident($1) || ' should exist' );
has_sequence
Signature: evergreen.has_sequence(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_rexists( 'S', $1, $2 ),
'Sequence ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist'
);
has_sequence
Signature: evergreen.has_sequence(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'S', $1, $2 ), $3 );
has_sequence
Signature: evergreen.has_sequence(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'S', $1 ), $2 );
has_table
Signature: evergreen.has_table(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_table( $1, 'Table ' || quote_ident($1) || ' should exist' );
has_table
Signature: evergreen.has_table(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_rexists( '{r,p}'::char[], $1, $2 ),
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist'
);
has_table
Signature: evergreen.has_table(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( '{r,p}'::char[], $1, $2 ), $3 );
has_table
Signature: evergreen.has_table(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( '{r,p}'::char[], $1 ), $2 );
has_tablespace
Signature: evergreen.has_tablespace(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_tablespace( $1, 'Tablespace ' || quote_ident($1) || ' should exist' );
has_tablespace
Signature: evergreen.has_tablespace(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
EXISTS(
SELECT true
FROM pg_catalog.pg_tablespace
WHERE spcname = $1
), $2
);
has_tablespace
Signature: evergreen.has_tablespace(name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF pg_version_num() >= 90200 THEN
RETURN ok(
EXISTS(
SELECT true
FROM pg_catalog.pg_tablespace
WHERE spcname = $1
AND pg_tablespace_location(oid) = $2
), $3
);
ELSE
RETURN ok(
EXISTS(
SELECT true
FROM pg_catalog.pg_tablespace
WHERE spcname = $1
AND spclocation = $2
), $3
);
END IF;
END;
has_trigger
Signature: evergreen.has_trigger(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _trig($1, $2), 'Table ' || quote_ident($1) || ' should have trigger ' || quote_ident($2));
has_trigger
Signature: evergreen.has_trigger(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_trigger(
$1, $2, $3,
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should have trigger ' || quote_ident($3)
);
has_trigger
Signature: evergreen.has_trigger(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _trig($1, $2, $3), $4);
has_trigger
Signature: evergreen.has_trigger(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _trig($1, $2), $3);
has_type
Signature: evergreen.has_type(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_type( $1, NULL ), ('Type ' || quote_ident($1) || ' should exist')::text );
has_type
Signature: evergreen.has_type(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_type( $1, $2, 'Type ' || quote_ident($1) || '.' || quote_ident($2) || ' should exist' );
has_type
Signature: evergreen.has_type(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_type( $1, $2, NULL ), $3 );
has_type
Signature: evergreen.has_type(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_type( $1, NULL ), $2 );
has_unique
Signature: evergreen.has_unique(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_unique( $1, 'Table ' || quote_ident($1) || ' should have a unique constraint' );
has_unique
Signature: evergreen.has_unique(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _hasc( $1, 'u' ), $2 );
has_unique
Signature: evergreen.has_unique(text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _hasc( $1, $2, 'u' ), $3 );
has_user
Signature: evergreen.has_user(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_user( $1 ), 'User ' || quote_ident($1) || ' should exist');
has_user
Signature: evergreen.has_user(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _has_user($1), $2 );
has_view
Signature: evergreen.has_view(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT has_view( $1, 'View ' || quote_ident($1) || ' should exist' );
has_view
Signature: evergreen.has_view(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'v', $1, $2 ), $3 );
has_view
Signature: evergreen.has_view(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists( 'v', $1 ), $2 );
hasnt_cast
Signature: evergreen.hasnt_cast(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _cast_exists( $1, $2 ),
'Cast (' || quote_ident($1) || ' AS ' || quote_ident($2)
|| ') should not exist'
);
hasnt_cast
Signature: evergreen.hasnt_cast(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _cast_exists( $1, $2, $3 ),
'Cast (' || quote_ident($1) || ' AS ' || quote_ident($2)
|| ') WITH FUNCTION ' || quote_ident($3) || '() should not exist'
);
hasnt_cast
Signature: evergreen.hasnt_cast(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _cast_exists( $1, $2, $3, $4 ),
'Cast (' || quote_ident($1) || ' AS ' || quote_ident($2)
|| ') WITH FUNCTION ' || quote_ident($3)
|| '.' || quote_ident($4) || '() should not exist'
);
hasnt_cast
Signature: evergreen.hasnt_cast(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _cast_exists( $1, $2, $3, $4 ), $5 );
hasnt_cast
Signature: evergreen.hasnt_cast(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _cast_exists( $1, $2, $3 ), $4 );
hasnt_cast
Signature: evergreen.hasnt_cast(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _cast_exists( $1, $2 ), $3 );
hasnt_column
Signature: evergreen.hasnt_column(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_column( $1, $2, 'Column ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist' );
hasnt_column
Signature: evergreen.hasnt_column(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _cexists( $1, $2, $3 ), $4 );
hasnt_column
Signature: evergreen.hasnt_column(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _cexists( $1, $2 ), $3 );
hasnt_composite
Signature: evergreen.hasnt_composite(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_composite( $1, 'Composite type ' || quote_ident($1) || ' should not exist' );
hasnt_composite
Signature: evergreen.hasnt_composite(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'c', $1, $2 ), $3 );
hasnt_composite
Signature: evergreen.hasnt_composite(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'c', $1 ), $2 );
hasnt_domain
Signature: evergreen.hasnt_domain(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_type( $1, ARRAY['d'] ), ('Domain ' || quote_ident($1) || ' should not exist')::text );
hasnt_domain
Signature: evergreen.hasnt_domain(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_domain( $1, $2, 'Domain ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist' );
hasnt_domain
Signature: evergreen.hasnt_domain(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_type( $1, $2, ARRAY['d'] ), $3 );
hasnt_domain
Signature: evergreen.hasnt_domain(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_type( $1, ARRAY['d'] ), $2 );
hasnt_enum
Signature: evergreen.hasnt_enum(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_type( $1, ARRAY['e'] ), ('Enum ' || quote_ident($1) || ' should not exist')::text );
hasnt_enum
Signature: evergreen.hasnt_enum(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_enum( $1, $2, 'Enum ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist' );
hasnt_enum
Signature: evergreen.hasnt_enum(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_type( $1, $2, ARRAY['e'] ), $3 );
hasnt_enum
Signature: evergreen.hasnt_enum(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_type( $1, ARRAY['e'] ), $2 );
hasnt_extension
Signature: evergreen.hasnt_extension(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ext_exists( $1 ),
'Extension ' || quote_ident($1) || ' should not exist' );
hasnt_extension
Signature: evergreen.hasnt_extension(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ext_exists( $1, $2 ),
'Extension ' || quote_ident($2)
|| ' should not exist in schema ' || quote_ident($1) );
hasnt_extension
Signature: evergreen.hasnt_extension(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _ext_exists( $1, $2 ), $3 );
hasnt_extension
Signature: evergreen.hasnt_extension(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _ext_exists( $1 ), $2)
hasnt_fk
Signature: evergreen.hasnt_fk(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_fk( $1, 'Table ' || quote_ident($1) || ' should not have a foreign key constraint' );
hasnt_fk
Signature: evergreen.hasnt_fk(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _hasc( $1, $2, 'f' ), $3 );
hasnt_fk
Signature: evergreen.hasnt_fk(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _hasc( $1, 'f' ), $2 );
hasnt_foreign_table
Signature: evergreen.hasnt_foreign_table(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_foreign_table( $1, 'Foreign table ' || quote_ident($1) || ' should not exist' );
hasnt_foreign_table
Signature: evergreen.hasnt_foreign_table(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _rexists( 'f', $1, $2 ),
'Foreign table ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist'
);
hasnt_foreign_table
Signature: evergreen.hasnt_foreign_table(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'f', $1, $2 ), $3 );
hasnt_foreign_table
Signature: evergreen.hasnt_foreign_table(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'f', $1 ), $2 );
hasnt_function
Signature: evergreen.hasnt_function(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _got_func($1), 'Function ' || quote_ident($1) || '() should not exist' );
hasnt_function
Signature: evergreen.hasnt_function(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _got_func($1, $2),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should not exist'
);
hasnt_function
Signature: evergreen.hasnt_function(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _got_func($1, $2, $3),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should not exist'
);
hasnt_function
Signature: evergreen.hasnt_function(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _got_func($1, $2, $3), $4 );
hasnt_function
Signature: evergreen.hasnt_function(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _got_func($1, $2), $3 );
hasnt_function
Signature: evergreen.hasnt_function(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _got_func($1, $2),
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should not exist'
);
hasnt_function
Signature: evergreen.hasnt_function(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _got_func($1, $2), $3 );
hasnt_function
Signature: evergreen.hasnt_function(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _got_func($1), $2 );
hasnt_group
Signature: evergreen.hasnt_group(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_group($1), 'Group ' || quote_ident($1) || ' should not exist' );
hasnt_group
Signature: evergreen.hasnt_group(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_group($1), $2 );
hasnt_index
Signature: evergreen.hasnt_index(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _have_index( $1, $2 ),
'Index ' || quote_ident($2) || ' should not exist'
);
hasnt_index
Signature: evergreen.hasnt_index(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _have_index( $1, $2, $3 ),
'Index ' || quote_ident($3) || ' should not exist'
);
hasnt_index
Signature: evergreen.hasnt_index(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
RETURN ok( NOT _have_index( $1, $2, $3 ), $4 );
END;
hasnt_index
Signature: evergreen.hasnt_index(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _have_index( $1, $2 ), $3 );
hasnt_inherited_tables
Signature: evergreen.hasnt_inherited_tables(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _inherited( $1 ),
'Table ' || quote_ident( $1 ) || ' should not have descendents'
);
hasnt_inherited_tables
Signature: evergreen.hasnt_inherited_tables(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _inherited( $1, $2 ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 ) || ' should not have descendents'
);
hasnt_inherited_tables
Signature: evergreen.hasnt_inherited_tables(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _inherited( $1, $2 ), $3 );
hasnt_inherited_tables
Signature: evergreen.hasnt_inherited_tables(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _inherited( $1 ), $2 );
hasnt_language
Signature: evergreen.hasnt_language(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_trusted($1) IS NULL, 'Procedural language ' || quote_ident($1) || ' should not exist' );
hasnt_language
Signature: evergreen.hasnt_language(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_trusted($1) IS NULL, $2 );
hasnt_materialized_view
Signature: evergreen.hasnt_materialized_view(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_materialized_view( $1, 'Materialized view ' || quote_ident($1) || ' should not exist' );
hasnt_materialized_view
Signature: evergreen.hasnt_materialized_view(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'm', $1, $2 ), $3 );
hasnt_materialized_view
Signature: evergreen.hasnt_materialized_view(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'm', $1 ), $2 );
hasnt_opclass
Signature: evergreen.hasnt_opclass(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _opc_exists( $1 ), 'Operator class ' || quote_ident($1) || ' should not exist' );
hasnt_opclass
Signature: evergreen.hasnt_opclass(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _opc_exists( $1, $2 ), 'Operator class ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist' );
hasnt_opclass
Signature: evergreen.hasnt_opclass(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _opc_exists( $1, $2 ), $3 );
hasnt_opclass
Signature: evergreen.hasnt_opclass(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _opc_exists( $1 ), $2)
hasnt_pk
Signature: evergreen.hasnt_pk(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_pk( $1, 'Table ' || quote_ident($1) || ' should not have a primary key' );
hasnt_pk
Signature: evergreen.hasnt_pk(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _hasc( $1, $2, 'p' ), $3 );
hasnt_pk
Signature: evergreen.hasnt_pk(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _hasc( $1, 'p' ), $2 );
hasnt_relation
Signature: evergreen.hasnt_relation(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_relation( $1, 'Relation ' || quote_ident($1) || ' should not exist' );
hasnt_relation
Signature: evergreen.hasnt_relation(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _relexists( $1, $2 ), $3 );
hasnt_relation
Signature: evergreen.hasnt_relation(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _relexists( $1 ), $2 );
hasnt_role
Signature: evergreen.hasnt_role(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_role($1), 'Role ' || quote_ident($1) || ' should not exist' );
hasnt_role
Signature: evergreen.hasnt_role(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_role($1), $2 );
hasnt_rule
Signature: evergreen.hasnt_rule(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_instead($1, $2) IS NULL, 'Relation ' || quote_ident($1) || ' should not have rule ' || quote_ident($2) );
hasnt_rule
Signature: evergreen.hasnt_rule(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_instead($1, $2, $3) IS NULL, 'Relation ' || quote_ident($1) || '.' || quote_ident($2) || ' should not have rule ' || quote_ident($3) );
hasnt_rule
Signature: evergreen.hasnt_rule(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_instead($1, $2, $3) IS NULL, $4 );
hasnt_rule
Signature: evergreen.hasnt_rule(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_instead($1, $2) IS NULL, $3 );
hasnt_schema
Signature: evergreen.hasnt_schema(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_schema( $1, 'Schema ' || quote_ident($1) || ' should not exist' );
hasnt_schema
Signature: evergreen.hasnt_schema(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT EXISTS(
SELECT true
FROM pg_catalog.pg_namespace
WHERE nspname = $1
), $2
);
hasnt_sequence
Signature: evergreen.hasnt_sequence(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_sequence( $1, 'Sequence ' || quote_ident($1) || ' should not exist' );
hasnt_sequence
Signature: evergreen.hasnt_sequence(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'S', $1, $2 ), $3 );
hasnt_sequence
Signature: evergreen.hasnt_sequence(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'S', $1 ), $2 );
hasnt_table
Signature: evergreen.hasnt_table(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_table( $1, 'Table ' || quote_ident($1) || ' should not exist' );
hasnt_table
Signature: evergreen.hasnt_table(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _rexists( '{r,p}'::char[], $1, $2 ),
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist'
);
hasnt_table
Signature: evergreen.hasnt_table(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( '{r,p}'::char[], $1, $2 ), $3 );
hasnt_table
Signature: evergreen.hasnt_table(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( '{r,p}'::char[], $1 ), $2 );
hasnt_tablespace
Signature: evergreen.hasnt_tablespace(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_tablespace( $1, 'Tablespace ' || quote_ident($1) || ' should not exist' );
hasnt_tablespace
Signature: evergreen.hasnt_tablespace(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT EXISTS(
SELECT true
FROM pg_catalog.pg_tablespace
WHERE spcname = $1
), $2
);
hasnt_trigger
Signature: evergreen.hasnt_trigger(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _trig($1, $2), 'Table ' || quote_ident($1) || ' should not have trigger ' || quote_ident($2));
hasnt_trigger
Signature: evergreen.hasnt_trigger(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _trig($1, $2, $3),
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should not have trigger ' || quote_ident($3)
);
hasnt_trigger
Signature: evergreen.hasnt_trigger(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _trig($1, $2, $3), $4);
hasnt_trigger
Signature: evergreen.hasnt_trigger(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _trig($1, $2), $3);
hasnt_type
Signature: evergreen.hasnt_type(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_type( $1, NULL ), ('Type ' || quote_ident($1) || ' should not exist')::text );
hasnt_type
Signature: evergreen.hasnt_type(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_type( $1, $2, 'Type ' || quote_ident($1) || '.' || quote_ident($2) || ' should not exist' );
hasnt_type
Signature: evergreen.hasnt_type(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_type( $1, $2, NULL ), $3 );
hasnt_type
Signature: evergreen.hasnt_type(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_type( $1, NULL ), $2 );
hasnt_user
Signature: evergreen.hasnt_user(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_user( $1 ), 'User ' || quote_ident($1) || ' should not exist');
hasnt_user
Signature: evergreen.hasnt_user(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _has_user($1), $2 );
hasnt_view
Signature: evergreen.hasnt_view(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT hasnt_view( $1, 'View ' || quote_ident($1) || ' should not exist' );
hasnt_view
Signature: evergreen.hasnt_view(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'v', $1, $2 ), $3 );
hasnt_view
Signature: evergreen.hasnt_view(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists( 'v', $1 ), $2 );
hint_opt_in_check
Signature: evergreen.hint_opt_in_check(hint_val text, pkey_val bigint, staff_id integer, permlist text[] DEFAULT '{}'::text[])
Returns: boolean
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
BEGIN
CASE hint_val
WHEN 'aua' THEN
RETURN evergreen.direct_opt_in_check((SELECT usr FROM actor.usr_address WHERE id = pkey_val LIMIT 1), staff_id, permlist);
WHEN 'auact' THEN
RETURN evergreen.direct_opt_in_check((SELECT usr FROM actor.usr_activity WHERE id = pkey_val LIMIT 1), staff_id, permlist);
WHEN 'aus' THEN
RETURN evergreen.direct_opt_in_check((SELECT usr FROM actor.usr_setting WHERE id = pkey_val LIMIT 1), staff_id, permlist);
WHEN 'actscecm' THEN
RETURN evergreen.direct_opt_in_check((SELECT target_usr FROM actor.stat_cat_entry_usr_map WHERE id = pkey_val LIMIT 1), staff_id, permlist);
WHEN 'ateo' THEN
RETURN evergreen.direct_opt_in_check(
(SELECT e.context_user FROM action_trigger.event e JOIN action_trigger.event_output eo ON (eo.event = e.id) WHERE eo.id = pkey_val LIMIT 1),
staff_id,
permlist
);
ELSE
RETURN FALSE;
END CASE;
END;
ialike
Signature: evergreen.ialike(anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _alike( $1 ~~* $2, $1, $2, NULL );
ialike
Signature: evergreen.ialike(anyelement, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _alike( $1 ~~* $2, $1, $2, $3 );
imatches
Signature: evergreen.imatches(anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _alike( $1 ~* $2, $1, $2, NULL );
imatches
Signature: evergreen.imatches(anyelement, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _alike( $1 ~* $2, $1, $2, $3 );
in_todo
Signature: evergreen.in_todo()
Returns: boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
todos integer;
BEGIN
todos := _get('todo');
RETURN CASE WHEN todos IS NULL THEN FALSE ELSE TRUE END;
END;
index_is_primary
Signature: evergreen.index_is_primary(name)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res boolean;
BEGIN
SELECT x.indisprimary
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
WHERE ci.relname = $1
AND pg_catalog.pg_table_is_visible(ct.oid)
INTO res;
RETURN ok(
COALESCE(res, false),
'Index ' || quote_ident($1) || ' should be on a primary key'
);
END;
index_is_primary
Signature: evergreen.index_is_primary(name, name)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res boolean;
BEGIN
SELECT x.indisprimary
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
WHERE ct.relname = $1
AND ci.relname = $2
AND pg_catalog.pg_table_is_visible(ct.oid)
INTO res;
RETURN ok(
COALESCE(res, false),
'Index ' || quote_ident($2) || ' should be on a primary key'
);
END;
index_is_primary
Signature: evergreen.index_is_primary(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT index_is_primary(
$1, $2, $3,
'Index ' || quote_ident($3) || ' should be on a primary key'
);
index_is_primary
Signature: evergreen.index_is_primary(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res boolean;
BEGIN
SELECT x.indisprimary
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE ct.relname = $2
AND ci.relname = $3
AND n.nspname = $1
INTO res;
RETURN ok( COALESCE(res, false), $4 );
END;
index_is_type
Signature: evergreen.index_is_type(name, name)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
aname name;
BEGIN
SELECT am.amname
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_am am ON ci.relam = am.oid
WHERE ci.relname = $1
INTO aname;
return is(
aname, $2,
'Index ' || quote_ident($1) || ' should be a ' || quote_ident($2) || ' index'
);
END;
index_is_type
Signature: evergreen.index_is_type(name, name, name)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
aname name;
BEGIN
SELECT am.amname
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_am am ON ci.relam = am.oid
WHERE ct.relname = $1
AND ci.relname = $2
INTO aname;
return is(
aname, $3,
'Index ' || quote_ident($2) || ' should be a ' || quote_ident($3) || ' index'
);
END;
index_is_type
Signature: evergreen.index_is_type(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT index_is_type(
$1, $2, $3, $4,
'Index ' || quote_ident($3) || ' should be a ' || quote_ident($4) || ' index'
);
index_is_type
Signature: evergreen.index_is_type(name, name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
aname name;
BEGIN
SELECT am.amname
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
JOIN pg_catalog.pg_am am ON ci.relam = am.oid
WHERE ct.relname = $2
AND ci.relname = $3
AND n.nspname = $1
INTO aname;
return is( aname, $4, $5 );
END;
index_is_unique
Signature: evergreen.index_is_unique(name)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res boolean;
BEGIN
SELECT x.indisunique
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
WHERE ci.relname = $1
AND pg_catalog.pg_table_is_visible(ct.oid)
INTO res;
RETURN ok(
COALESCE(res, false),
'Index ' || quote_ident($1) || ' should be unique'
);
END;
index_is_unique
Signature: evergreen.index_is_unique(name, name)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res boolean;
BEGIN
SELECT x.indisunique
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
WHERE ct.relname = $1
AND ci.relname = $2
AND pg_catalog.pg_table_is_visible(ct.oid)
INTO res;
RETURN ok(
COALESCE(res, false),
'Index ' || quote_ident($2) || ' should be unique'
);
END;
index_is_unique
Signature: evergreen.index_is_unique(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT index_is_unique(
$1, $2, $3,
'Index ' || quote_ident($3) || ' should be unique'
);
index_is_unique
Signature: evergreen.index_is_unique(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res boolean;
BEGIN
SELECT x.indisunique
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE ct.relname = $2
AND ci.relname = $3
AND n.nspname = $1
INTO res;
RETURN ok( COALESCE(res, false), $4 );
END;
index_owner_is
Signature: evergreen.index_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT index_owner_is(
$1, $2, $3,
'Index ' || quote_ident($2) || ' ON '
|| quote_ident($1) || ' should be owned by ' || quote_ident($3)
);
index_owner_is
Signature: evergreen.index_owner_is(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT index_owner_is(
$1, $2, $3, $4,
'Index ' || quote_ident($3) || ' ON '
|| quote_ident($1) || '.' || quote_ident($2)
|| ' should be owned by ' || quote_ident($4)
);
index_owner_is
Signature: evergreen.index_owner_is(name, name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_index_owner($1, $2, $3);
BEGIN
-- Make sure the index exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
E' Index ' || quote_ident($3) || ' ON '
|| quote_ident($1) || '.' || quote_ident($2) || ' not found'
);
END IF;
RETURN is(owner, $4, $5);
END;
index_owner_is
Signature: evergreen.index_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_index_owner($1, $2);
BEGIN
-- Make sure the index exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Index ' || quote_ident($2) || ' ON ' || quote_ident($1) || ' not found'
);
END IF;
RETURN is(owner, $3, $4);
END;
indexes_are
Signature: evergreen.indexes_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT indexes_are( $1, $2, $3, 'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should have the correct indexes' );
indexes_are
Signature: evergreen.indexes_are(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'indexes',
ARRAY(
SELECT ci.relname
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE ct.relname = $2
AND n.nspname = $1
EXCEPT
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
),
ARRAY(
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
EXCEPT
SELECT ci.relname
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE ct.relname = $2
AND n.nspname = $1
),
$4
);
indexes_are
Signature: evergreen.indexes_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT indexes_are( $1, $2, 'Table ' || quote_ident($1) || ' should have the correct indexes' );
indexes_are
Signature: evergreen.indexes_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'indexes',
ARRAY(
SELECT ci.relname
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE ct.relname = $1
AND pg_catalog.pg_table_is_visible(ct.oid)
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
),
ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT ci.relname
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE ct.relname = $1
AND pg_catalog.pg_table_is_visible(ct.oid)
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
),
$3
);
indexing_ingest_or_delete
Signature: evergreen.indexing_ingest_or_delete()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
old_state_data TEXT := '';
new_action TEXT;
queuing_force TEXT;
queuing_flag_name TEXT;
queuing_flag BOOL := FALSE;
queuing_success BOOL := FALSE;
ingest_success BOOL := FALSE;
ingest_queue INT;
BEGIN
-- Identify the ingest action type
IF TG_OP = 'UPDATE' THEN
-- Gather type-specific data for later use
IF TG_TABLE_SCHEMA = 'authority' THEN
old_state_data = OLD.heading;
END IF;
IF NOT OLD.deleted THEN -- maybe reingest?
IF NEW.deleted THEN
new_action = 'delete'; -- nope, delete
ELSE
new_action = 'update'; -- yes, update
END IF;
ELSIF NOT NEW.deleted THEN
new_action = 'insert'; -- revivify, AKA insert
ELSE
RETURN NEW; -- was and is still deleted, don't ingest
END IF;
ELSIF TG_OP = 'INSERT' THEN
new_action = 'insert'; -- brand new
ELSE
RETURN OLD; -- really deleting the record
END IF;
queuing_flag_name := 'ingest.queued.'||TG_TABLE_SCHEMA||'.'||new_action;
-- See if we should be queuing anything
SELECT enabled INTO queuing_flag
FROM config.internal_flag
WHERE name IN ('ingest.queued.all','ingest.queued.'||TG_TABLE_SCHEMA||'.all', queuing_flag_name)
AND enabled
LIMIT 1;
SELECT action.get_queued_ingest_force() INTO queuing_force;
IF queuing_flag IS NULL AND queuing_force = queuing_flag_name THEN
queuing_flag := TRUE;
END IF;
-- you (or part of authority propagation) can forcibly disable specific queuing actions
IF queuing_force = queuing_flag_name||'.disabled' THEN
queuing_flag := FALSE;
END IF;
-- And if we should be queuing ...
IF queuing_flag THEN
ingest_queue := action.get_ingest_queue();
-- ... but this is NOT a named or forced queue request (marc editor update, say, or vandelay overlay)...
IF queuing_force IS NULL AND ingest_queue IS NULL AND new_action = 'update' THEN -- re-ingest?
PERFORM * FROM config.internal_flag WHERE name = 'ingest.reingest.force_on_same_marc' AND enabled;
-- ... then don't do anything if ingest.reingest.force_on_same_marc is not enabled and the MARC hasn't changed
IF NOT FOUND AND OLD.marc = NEW.marc THEN
RETURN NEW;
END IF;
END IF;
-- Otherwise, attempt to enqueue
SELECT action.enqueue_ingest_entry( NEW.id, TG_TABLE_SCHEMA, NOW(), ingest_queue, new_action, old_state_data) INTO queuing_success;
END IF;
-- If queuing was not requested, or failed for some reason, do it live.
IF NOT queuing_success THEN
IF queuing_flag THEN
RAISE WARNING 'Enqueuing of %.record_entry % for ingest failed, attempting direct ingest', TG_TABLE_SCHEMA, NEW.id;
END IF;
IF new_action = 'delete' THEN
IF TG_TABLE_SCHEMA = 'biblio' THEN
SELECT metabib.indexing_delete(NEW.*, old_state_data) INTO ingest_success;
ELSIF TG_TABLE_SCHEMA = 'authority' THEN
SELECT authority.indexing_delete(NEW.*, old_state_data) INTO ingest_success;
END IF;
ELSE
IF TG_TABLE_SCHEMA = 'biblio' THEN
SELECT metabib.indexing_update(NEW.*, new_action = 'insert', old_state_data) INTO ingest_success;
ELSIF TG_TABLE_SCHEMA = 'authority' THEN
SELECT authority.indexing_update(NEW.*, new_action = 'insert', old_state_data) INTO ingest_success;
END IF;
END IF;
IF NOT ingest_success THEN
PERFORM * FROM config.internal_flag WHERE name = 'ingest.queued.abort_on_error' AND enabled;
IF FOUND THEN
RAISE EXCEPTION 'Ingest of %.record_entry % failed', TG_TABLE_SCHEMA, NEW.id;
ELSE
RAISE WARNING 'Ingest of %.record_entry % failed', TG_TABLE_SCHEMA, NEW.id;
END IF;
END IF;
END IF;
RETURN NEW;
END;
is
Signature: evergreen.is(anyelement, anyelement)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is( $1, $2, NULL);
is
Signature: evergreen.is(anyelement, anyelement, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
result BOOLEAN;
output TEXT;
BEGIN
-- Would prefer $1 IS NOT DISTINCT FROM, but that's not supported by 8.1.
result := NOT $1 IS DISTINCT FROM $2;
output := ok( result, $3 );
RETURN output || CASE result WHEN TRUE THEN '' ELSE E'\n' || diag(
' have: ' || CASE WHEN $1 IS NULL THEN 'NULL' ELSE $1::text END ||
E'\n want: ' || CASE WHEN $2 IS NULL THEN 'NULL' ELSE $2::text END
) END;
END;
is_aggregate
Signature: evergreen.is_aggregate(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _agg($1), 'Function ' || quote_ident($1) || '() should be an aggregate function' );
is_aggregate
Signature: evergreen.is_aggregate(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_agg($1, $2),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should be an aggregate function'
);
is_aggregate
Signature: evergreen.is_aggregate(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_agg($1, $2, $3),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should be an aggregate function'
);
is_aggregate
Signature: evergreen.is_aggregate(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, $3, _agg($1, $2, $3), $4 );
is_aggregate
Signature: evergreen.is_aggregate(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, _agg($1, $2), $3 );
is_aggregate
Signature: evergreen.is_aggregate(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_agg($1, $2),
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should be an aggregate function'
);
is_aggregate
Signature: evergreen.is_aggregate(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, $2, _agg($1, $2), $3 );
is_aggregate
Signature: evergreen.is_aggregate(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, _agg($1), $2 );
is_ancestor_of
Signature: evergreen.is_ancestor_of(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ancestor_of( $1, $2, NULL ),
'Table ' || quote_ident( $1 ) || ' should be an ancestor of ' || quote_ident( $2)
);
is_ancestor_of
Signature: evergreen.is_ancestor_of(name, name, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ancestor_of( $1, $2, $3 ),
'Table ' || quote_ident( $1 ) || ' should be ancestor ' || $3 || ' of ' || quote_ident( $2)
);
is_ancestor_of
Signature: evergreen.is_ancestor_of(name, name, integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ancestor_of( $1, $2, $3 ), $4 );
is_ancestor_of
Signature: evergreen.is_ancestor_of(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ancestor_of( $1, $2, $3, $4, NULL ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 )
|| ' should be an ancestor of '
|| quote_ident( $3 ) || '.' || quote_ident( $4 )
);
is_ancestor_of
Signature: evergreen.is_ancestor_of(name, name, name, name, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ancestor_of( $1, $2, $3, $4, $5 ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 )
|| ' should be ancestor ' || $5 || ' for '
|| quote_ident( $3 ) || '.' || quote_ident( $4 )
);
is_ancestor_of
Signature: evergreen.is_ancestor_of(name, name, name, name, integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ancestor_of( $1, $2, $3, $4, $5 ), $6 );
is_ancestor_of
Signature: evergreen.is_ancestor_of(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ancestor_of( $1, $2, $3, $4, NULL ), $5 );
is_ancestor_of
Signature: evergreen.is_ancestor_of(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ancestor_of( $1, $2, NULL ), $3 );
is_clustered
Signature: evergreen.is_clustered(name)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res boolean;
BEGIN
SELECT x.indisclustered
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
WHERE ci.relname = $1
INTO res;
RETURN ok(
COALESCE(res, false),
'Table should be clustered on index ' || quote_ident($1)
);
END;
is_clustered
Signature: evergreen.is_clustered(name, name)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res boolean;
BEGIN
SELECT x.indisclustered
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
WHERE ct.relname = $1
AND ci.relname = $2
INTO res;
RETURN ok(
COALESCE(res, false),
'Table ' || quote_ident($1) || ' should be clustered on index ' || quote_ident($2)
);
END;
is_clustered
Signature: evergreen.is_clustered(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_clustered(
$1, $2, $3,
'Table ' || quote_ident($1) || '.' || quote_ident($2) ||
' should be clustered on index ' || quote_ident($3)
);
is_clustered
Signature: evergreen.is_clustered(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res boolean;
BEGIN
SELECT x.indisclustered
FROM pg_catalog.pg_index x
JOIN pg_catalog.pg_class ct ON ct.oid = x.indrelid
JOIN pg_catalog.pg_class ci ON ci.oid = x.indexrelid
JOIN pg_catalog.pg_namespace n ON n.oid = ct.relnamespace
WHERE ct.relname = $2
AND ci.relname = $3
AND n.nspname = $1
INTO res;
RETURN ok( COALESCE(res, false), $4 );
END;
is_definer
Signature: evergreen.is_definer(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _definer($1), 'Function ' || quote_ident($1) || '() should be security definer' );
is_definer
Signature: evergreen.is_definer(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_definer($1, $2),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should be security definer'
);
is_definer
Signature: evergreen.is_definer(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_definer($1, $2, $3),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should be security definer'
);
is_definer
Signature: evergreen.is_definer(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, $3, _definer($1, $2, $3), $4 );
is_definer
Signature: evergreen.is_definer(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, _definer($1, $2), $3 );
is_definer
Signature: evergreen.is_definer(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_definer($1, $2),
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should be security definer'
);
is_definer
Signature: evergreen.is_definer(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, $2, _definer($1, $2), $3 );
is_definer
Signature: evergreen.is_definer(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, _definer($1), $2 );
is_descendent_of
Signature: evergreen.is_descendent_of(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ancestor_of( $2, $1, NULL ),
'Table ' || quote_ident( $1 ) || ' should be a descendent of ' || quote_ident( $2)
);
is_descendent_of
Signature: evergreen.is_descendent_of(name, name, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ancestor_of( $2, $1, $3 ),
'Table ' || quote_ident( $1 ) || ' should be descendent ' || $3 || ' from ' || quote_ident( $2)
);
is_descendent_of
Signature: evergreen.is_descendent_of(name, name, integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ancestor_of( $2, $1, $3 ), $4 );
is_descendent_of
Signature: evergreen.is_descendent_of(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ancestor_of( $3, $4, $1, $2, NULL ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 )
|| ' should be a descendent of '
|| quote_ident( $3 ) || '.' || quote_ident( $4 )
);
is_descendent_of
Signature: evergreen.is_descendent_of(name, name, name, name, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_ancestor_of( $3, $4, $1, $2, $5 ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 )
|| ' should be descendent ' || $5 || ' from '
|| quote_ident( $3 ) || '.' || quote_ident( $4 )
);
is_descendent_of
Signature: evergreen.is_descendent_of(name, name, name, name, integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ancestor_of( $3, $4, $1, $2, $5 ), $6 );
is_descendent_of
Signature: evergreen.is_descendent_of(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ancestor_of( $3, $4, $1, $2, NULL ), $5 );
is_descendent_of
Signature: evergreen.is_descendent_of(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _ancestor_of( $2, $1, NULL ), $3 );
is_empty
Signature: evergreen.is_empty(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_empty( $1, NULL );
is_empty
Signature: evergreen.is_empty(text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
extras TEXT[] := '{}';
res BOOLEAN := TRUE;
msg TEXT := '';
rec RECORD;
BEGIN
-- Find extra records.
FOR rec in EXECUTE _query($1) LOOP
extras := extras || rec::text;
END LOOP;
-- What extra records do we have?
IF extras[1] IS NOT NULL THEN
res := FALSE;
msg := E'\n' || diag(
E' Unexpected records:\n '
|| array_to_string( extras, E'\n ' )
);
END IF;
RETURN ok(res, $2) || msg;
END;
is_indexed
Signature: evergreen.is_indexed(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok ( _is_indexed( NULL, $1, ARRAY[$2]::NAME[]) );
is_indexed
Signature: evergreen.is_indexed(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT CASE WHEN _is_schema( $1 ) THEN
-- Looking for schema.table index.
is_indexed( $1, $2, ARRAY[$3]::NAME[] )
ELSE
-- Looking for particular columns.
is_indexed( $1, ARRAY[$2]::NAME[], $3 )
END;
is_indexed
Signature: evergreen.is_indexed(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok ( _is_indexed( $1, $2, ARRAY[$3]::NAME[]), $4);
is_indexed
Signature: evergreen.is_indexed(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_is_indexed($1, $2, $3),
'Should have an index on ' || quote_ident($1) || '.' || quote_ident($2) || '(' || array_to_string( $3, ', ' ) || ')'
);
is_indexed
Signature: evergreen.is_indexed(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_indexed($1, $2, $3), $4 );
is_indexed
Signature: evergreen.is_indexed(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_is_indexed(NULL, $1, $2),
'Should have an index on ' || quote_ident($1) || '(' || array_to_string( $2, ', ' ) || ')'
);
is_indexed
Signature: evergreen.is_indexed(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _is_indexed(NULL, $1, $2), $3 );
is_json
Signature: evergreen.is_json(text)
Returns: boolean
Language |
plperlu |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
use JSON::XS;
my $json = shift();
eval { JSON::XS->new->allow_nonref->decode( $json ) };
return $@ ? 0 : 1;
is_member_of
Signature: evergreen.is_member_of(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_member_of( $1, ARRAY[$2] );
is_member_of
Signature: evergreen.is_member_of(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_member_of( $1, ARRAY[$2], $3 );
is_member_of
Signature: evergreen.is_member_of(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_member_of( $1, $2, 'Should have members of role ' || quote_ident($1) );
is_member_of
Signature: evergreen.is_member_of(name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
missing text[];
BEGIN
IF NOT _has_role($1) THEN
RETURN fail( $3 ) || E'\n' || diag (
' Role ' || quote_ident($1) || ' does not exist'
);
END IF;
SELECT ARRAY(
SELECT quote_ident($2[i])
FROM generate_series(1, array_upper($2, 1)) s(i)
LEFT JOIN pg_catalog.pg_roles r ON rolname = $2[i]
WHERE r.oid IS NULL
OR NOT r.oid = ANY ( _grolist($1) )
ORDER BY s.i
) INTO missing;
IF missing[1] IS NULL THEN
RETURN ok( true, $3 );
END IF;
RETURN ok( false, $3 ) || E'\n' || diag(
' Members missing from the ' || quote_ident($1) || E' role:\n ' ||
array_to_string( missing, E'\n ')
);
END;
is_partition_of
Signature: evergreen.is_partition_of(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_partof($1, $2),
'Table ' || quote_ident($1) || ' should be a partition of ' || quote_ident($2)
);
is_partition_of
Signature: evergreen.is_partition_of(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_partof($1, $2, $3, $4),
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should be a partition of '
|| quote_ident($3) || '.' || quote_ident($4)
);
is_partition_of
Signature: evergreen.is_partition_of(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _partof($1, $2, $3, $4), $5);
is_partition_of
Signature: evergreen.is_partition_of(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _partof($1, $2), $3);
is_partitioned
Signature: evergreen.is_partitioned(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_rexists('p', $1),
'Table ' || quote_ident($1) || ' should be partitioned'
);
is_partitioned
Signature: evergreen.is_partitioned(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_rexists('p', $1, $2),
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should be partitioned'
);
is_partitioned
Signature: evergreen.is_partitioned(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists('p', $1, $2), $3);
is_partitioned
Signature: evergreen.is_partitioned(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _rexists('p', $1), $2);
is_strict
Signature: evergreen.is_strict(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( _strict($1), 'Function ' || quote_ident($1) || '() should be strict' );
is_strict
Signature: evergreen.is_strict(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_strict($1, $2),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should be strict'
);
is_strict
Signature: evergreen.is_strict(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_strict($1, $2, $3),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should be strict'
);
is_strict
Signature: evergreen.is_strict(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, $3, _strict($1, $2, $3), $4 );
is_strict
Signature: evergreen.is_strict(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, _strict($1, $2), $3 );
is_strict
Signature: evergreen.is_strict(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
_strict($1, $2),
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should be strict'
);
is_strict
Signature: evergreen.is_strict(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, $2, _strict($1, $2), $3 );
is_strict
Signature: evergreen.is_strict(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, _strict($1), $2 );
is_superuser
Signature: evergreen.is_superuser(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT is_superuser( $1, 'User ' || quote_ident($1) || ' should be a super user' );
is_superuser
Signature: evergreen.is_superuser(name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
is_super boolean := _is_super($1);
BEGIN
IF is_super IS NULL THEN
RETURN fail( $2 ) || E'\n' || diag( ' User ' || quote_ident($1) || ' does not exist') ;
END IF;
RETURN ok( is_super, $2 );
END;
isa_ok
Signature: evergreen.isa_ok(anyelement, regtype)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT isa_ok($1, $2, 'the value');
isa_ok
Signature: evergreen.isa_ok(anyelement, regtype, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
typeof regtype := pg_typeof($1);
BEGIN
IF typeof = $2 THEN RETURN ok(true, $3 || ' isa ' || $2 ); END IF;
RETURN ok(false, $3 || ' isa ' || $2 ) || E'\n' ||
diag(' ' || $3 || ' isn''t a "' || $2 || '" it''s a "' || typeof || '"');
END;
isnt
Signature: evergreen.isnt(anyelement, anyelement)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT isnt( $1, $2, NULL);
isnt
Signature: evergreen.isnt(anyelement, anyelement, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
result BOOLEAN;
output TEXT;
BEGIN
result := $1 IS DISTINCT FROM $2;
output := ok( result, $3 );
RETURN output || CASE result WHEN TRUE THEN '' ELSE E'\n' || diag(
' have: ' || COALESCE( $1::text, 'NULL' ) ||
E'\n want: anything else'
) END;
END;
isnt_aggregate
Signature: evergreen.isnt_aggregate(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _agg($1), 'Function ' || quote_ident($1) || '() should not be an aggregate function' );
isnt_aggregate
Signature: evergreen.isnt_aggregate(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _agg($1, $2),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should not be an aggregate function'
);
isnt_aggregate
Signature: evergreen.isnt_aggregate(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _agg($1, $2, $3),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should not be an aggregate function'
);
isnt_aggregate
Signature: evergreen.isnt_aggregate(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, $3, NOT _agg($1, $2, $3), $4 );
isnt_aggregate
Signature: evergreen.isnt_aggregate(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, NOT _agg($1, $2), $3 );
isnt_aggregate
Signature: evergreen.isnt_aggregate(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _agg($1, $2),
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should not be an aggregate function'
);
isnt_aggregate
Signature: evergreen.isnt_aggregate(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, $2, NOT _agg($1, $2), $3 );
isnt_aggregate
Signature: evergreen.isnt_aggregate(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, NOT _agg($1), $2 );
isnt_ancestor_of
Signature: evergreen.isnt_ancestor_of(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ancestor_of( $1, $2, NULL ),
'Table ' || quote_ident( $1 ) || ' should not be an ancestor of ' || quote_ident( $2)
);
isnt_ancestor_of
Signature: evergreen.isnt_ancestor_of(name, name, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ancestor_of( $1, $2, $3 ),
'Table ' || quote_ident( $1 ) || ' should not be ancestor ' || $3 || ' of ' || quote_ident( $2)
);
isnt_ancestor_of
Signature: evergreen.isnt_ancestor_of(name, name, integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _ancestor_of( $1, $2, $3 ), $4 );
isnt_ancestor_of
Signature: evergreen.isnt_ancestor_of(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ancestor_of( $1, $2, $3, $4, NULL ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 )
|| ' should not be an ancestor of '
|| quote_ident( $3 ) || '.' || quote_ident( $4 )
);
isnt_ancestor_of
Signature: evergreen.isnt_ancestor_of(name, name, name, name, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ancestor_of( $1, $2, $3, $4, $5 ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 )
|| ' should not be ancestor ' || $5 || ' for '
|| quote_ident( $3 ) || '.' || quote_ident( $4 )
);
isnt_ancestor_of
Signature: evergreen.isnt_ancestor_of(name, name, name, name, integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _ancestor_of( $1, $2, $3, $4, $5 ), $6 );
isnt_ancestor_of
Signature: evergreen.isnt_ancestor_of(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _ancestor_of( $1, $2, $3, $4, NULL ), $5 );
isnt_ancestor_of
Signature: evergreen.isnt_ancestor_of(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _ancestor_of( $1, $2, NULL ), $3 );
isnt_definer
Signature: evergreen.isnt_definer(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _definer($1), 'Function ' || quote_ident($1) || '() should not be security definer' );
isnt_definer
Signature: evergreen.isnt_definer(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _definer($1, $2),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should not be security definer'
);
isnt_definer
Signature: evergreen.isnt_definer(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _definer($1, $2, $3),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should not be security definer'
);
isnt_definer
Signature: evergreen.isnt_definer(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, $3, NOT _definer($1, $2, $3), $4 );
isnt_definer
Signature: evergreen.isnt_definer(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, NOT _definer($1, $2), $3 );
isnt_definer
Signature: evergreen.isnt_definer(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _definer($1, $2),
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should not be security definer'
);
isnt_definer
Signature: evergreen.isnt_definer(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, $2, NOT _definer($1, $2), $3 );
isnt_definer
Signature: evergreen.isnt_definer(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, NOT _definer($1), $2 );
isnt_descendent_of
Signature: evergreen.isnt_descendent_of(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ancestor_of( $2, $1, NULL ),
'Table ' || quote_ident( $1 ) || ' should not be a descendent of ' || quote_ident( $2)
);
isnt_descendent_of
Signature: evergreen.isnt_descendent_of(name, name, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ancestor_of( $2, $1, $3 ),
'Table ' || quote_ident( $1 ) || ' should not be descendent ' || $3 || ' from ' || quote_ident( $2)
);
isnt_descendent_of
Signature: evergreen.isnt_descendent_of(name, name, integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(NOT _ancestor_of( $2, $1, $3 ), $4 );
isnt_descendent_of
Signature: evergreen.isnt_descendent_of(name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ancestor_of( $3, $4, $1, $2, NULL ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 )
|| ' should not be a descendent of '
|| quote_ident( $3 ) || '.' || quote_ident( $4 )
);
isnt_descendent_of
Signature: evergreen.isnt_descendent_of(name, name, name, name, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _ancestor_of( $3, $4, $1, $2, $5 ),
'Table ' || quote_ident( $1 ) || '.' || quote_ident( $2 )
|| ' should not be descendent ' || $5 || ' from '
|| quote_ident( $3 ) || '.' || quote_ident( $4 )
);
isnt_descendent_of
Signature: evergreen.isnt_descendent_of(name, name, name, name, integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(NOT _ancestor_of( $3, $4, $1, $2, $5 ), $6 );
isnt_descendent_of
Signature: evergreen.isnt_descendent_of(name, name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(NOT _ancestor_of( $3, $4, $1, $2, NULL ), $5 );
isnt_descendent_of
Signature: evergreen.isnt_descendent_of(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(NOT _ancestor_of( $2, $1, NULL ), $3 );
isnt_empty
Signature: evergreen.isnt_empty(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT isnt_empty( $1, NULL );
isnt_empty
Signature: evergreen.isnt_empty(text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
res BOOLEAN := FALSE;
rec RECORD;
BEGIN
-- Find extra records.
FOR rec in EXECUTE _query($1) LOOP
res := TRUE;
EXIT;
END LOOP;
RETURN ok(res, $2);
END;
isnt_partitioned
Signature: evergreen.isnt_partitioned(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _rexists('p', $1),
'Table ' || quote_ident($1) || ' should not be partitioned'
);
isnt_partitioned
Signature: evergreen.isnt_partitioned(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _rexists('p', $1, $2),
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should not be partitioned'
);
isnt_partitioned
Signature: evergreen.isnt_partitioned(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists('p', $1, $2), $3);
isnt_partitioned
Signature: evergreen.isnt_partitioned(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _rexists('p', $1), $2);
isnt_strict
Signature: evergreen.isnt_strict(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( NOT _strict($1), 'Function ' || quote_ident($1) || '() should not be strict' );
isnt_strict
Signature: evergreen.isnt_strict(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _strict($1, $2),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '() should not be strict'
);
isnt_strict
Signature: evergreen.isnt_strict(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _strict($1, $2, $3),
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should not be strict'
);
isnt_strict
Signature: evergreen.isnt_strict(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, $3, NOT _strict($1, $2, $3), $4 );
isnt_strict
Signature: evergreen.isnt_strict(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, NOT _strict($1, $2), $3 );
isnt_strict
Signature: evergreen.isnt_strict(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok(
NOT _strict($1, $2),
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should not be strict'
);
isnt_strict
Signature: evergreen.isnt_strict(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, $2, NOT _strict($1, $2), $3 );
isnt_strict
Signature: evergreen.isnt_strict(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, NOT _strict($1), $2 );
isnt_superuser
Signature: evergreen.isnt_superuser(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT isnt_superuser( $1, 'User ' || quote_ident($1) || ' should not be a super user' );
isnt_superuser
Signature: evergreen.isnt_superuser(name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
is_super boolean := _is_super($1);
BEGIN
IF is_super IS NULL THEN
RETURN fail( $2 ) || E'\n' || diag( ' User ' || quote_ident($1) || ' does not exist') ;
END IF;
RETURN ok( NOT is_super, $2 );
END;
json_delta
Signature: evergreen.json_delta(old_obj json, new_obj json, only_keys text[] DEFAULT '{}'::text[])
Returns: jsonb
Language |
plperlu |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
use JSON;
use List::Util qw/uniq/;
my $old = shift;
my $new = shift;
my $keylist = shift;
$old = from_json($old) if (!ref($old));
$new = from_json($new) if (!ref($new));
my $delta = {};
my @keys = @$keylist;
@keys = (keys(%$old), keys(%$new)) if (!@keys);
for my $key (uniq @keys) {
$$delta{$key} = [$$old{$key},$$new{$key}] if ((
((!exists($$old{$key}) or !exists($$new{$key})) and not (!exists($$old{$key}) and !exists($$new{$key}))) # one exists
or ((!defined($$old{$key}) or !defined($$new{$key})) and not (!defined($$old{$key}) and !defined($$new{$key}))) # or one is defined
or ((defined($$old{$key}) and defined($$new{$key})) and $$old{$key} ne $$new{$key}) # or they do not match
) and grep {defined} $$old{$key},$$new{$key}); # there is data
}
return to_json($delta);
language_is_trusted
Signature: evergreen.language_is_trusted(name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT language_is_trusted($1, 'Procedural language ' || quote_ident($1) || ' should be trusted' );
language_is_trusted
Signature: evergreen.language_is_trusted(name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
is_trusted boolean := _is_trusted($1);
BEGIN
IF is_trusted IS NULL THEN
RETURN fail( $2 ) || E'\n' || diag( ' Procedural language ' || quote_ident($1) || ' does not exist') ;
END IF;
RETURN ok( is_trusted, $2 );
END;
language_owner_is
Signature: evergreen.language_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT language_owner_is(
$1, $2,
'Language ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
language_owner_is
Signature: evergreen.language_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_language_owner($1);
BEGIN
-- Make sure the language exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Language ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
language_privs_are
Signature: evergreen.language_privs_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT language_privs_are(
$1, $2, $3,
'Role ' || quote_ident($2) || ' should be granted '
|| CASE WHEN $3[1] IS NULL THEN 'no privileges' ELSE array_to_string($3, ', ') END
|| ' on language ' || quote_ident($1)
);
language_privs_are
Signature: evergreen.language_privs_are(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_lang_privs( $2, quote_ident($1) );
BEGIN
IF grants[1] = 'undefined_language' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Language ' || quote_ident($1) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
languages_are
Signature: evergreen.languages_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT languages_are( $1, 'There should be the correct procedural languages' );
languages_are
Signature: evergreen.languages_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'languages',
ARRAY(
SELECT lanname
FROM pg_catalog.pg_language
WHERE lanispl
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT lanname
FROM pg_catalog.pg_language
WHERE lanispl
),
$2
);
levenshtein_damerau_edistance
Signature: evergreen.levenshtein_damerau_edistance(a text, b text, integer)
Returns: numeric
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
use Text::Levenshtein::Damerau::XS qw/xs_edistance/;
return xs_edistance(@_);
limit_oustl
Signature: evergreen.limit_oustl()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
-- Only keeps the most recent five settings changes.
DELETE FROM config.org_unit_setting_type_log WHERE field_name = NEW.field_name AND org = NEW.org AND date_applied NOT IN
(SELECT date_applied FROM config.org_unit_setting_type_log WHERE field_name = NEW.field_name AND org = NEW.org ORDER BY date_applied DESC LIMIT 4);
IF (TG_OP = 'UPDATE') THEN
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
RETURN NEW;
END IF;
RETURN NULL;
END;
lives_ok
Signature: evergreen.lives_ok(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT lives_ok( $1, NULL );
lives_ok
Signature: evergreen.lives_ok(text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
code TEXT := _query($1);
descr ALIAS FOR $2;
detail text;
hint text;
context text;
schname text;
tabname text;
colname text;
chkname text;
typname text;
BEGIN
EXECUTE code;
RETURN ok( TRUE, descr );
EXCEPTION WHEN OTHERS OR ASSERT_FAILURE THEN
-- There should have been no exception.
GET STACKED DIAGNOSTICS
detail = PG_EXCEPTION_DETAIL,
hint = PG_EXCEPTION_HINT,
context = PG_EXCEPTION_CONTEXT,
schname = SCHEMA_NAME,
tabname = TABLE_NAME,
colname = COLUMN_NAME,
chkname = CONSTRAINT_NAME,
typname = PG_DATATYPE_NAME;
RETURN ok( FALSE, descr ) || E'\n' || diag(
' died: ' || _error_diag(SQLSTATE, SQLERRM, detail, hint, context, schname, tabname, colname, chkname, typname)
);
END;
located_uris
Signature: evergreen.located_uris(bibid bigint, ouid integer, pref_lib integer DEFAULT NULL::integer)
Returns: TABLE(id bigint, name text, label_sortkey text, rank integer)
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
SELECT * FROM evergreen.located_uris(ARRAY[$1],$2,$3)
located_uris
Signature: evergreen.located_uris(bibid bigint[], ouid integer, pref_lib integer DEFAULT NULL::integer)
Returns: TABLE(id bigint, name text, label_sortkey text, rank integer)
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
WITH all_orgs AS (SELECT COALESCE( enabled, FALSE ) AS flag FROM config.global_flag WHERE name = 'opac.located_uri.act_as_copy')
SELECT DISTINCT ON (id) * FROM (
SELECT acn.id, COALESCE(aou.name,aoud.name), acn.label_sortkey, evergreen.rank_ou(aou.id, $2, $3) AS pref_ou
FROM asset.call_number acn
INNER JOIN asset.uri_call_number_map auricnm ON acn.id = auricnm.call_number
INNER JOIN asset.uri auri ON auri.id = auricnm.uri
LEFT JOIN actor.org_unit_ancestors( COALESCE($3, $2) ) aou ON (acn.owning_lib = aou.id)
LEFT JOIN actor.org_unit_descendants( COALESCE($3, $2) ) aoud ON (acn.owning_lib = aoud.id),
all_orgs
WHERE acn.record = ANY ($1)
AND acn.deleted IS FALSE
AND auri.active IS TRUE
AND ((NOT all_orgs.flag AND aou.id IS NOT NULL) OR (all_orgs.flag AND COALESCE(aou.id,aoud.id) IS NOT NULL))
UNION
SELECT acn.id, COALESCE(aou.name,aoud.name) AS name, acn.label_sortkey, evergreen.rank_ou(aou.id, $2, $3) AS pref_ou
FROM asset.call_number acn
INNER JOIN asset.uri_call_number_map auricnm ON acn.id = auricnm.call_number
INNER JOIN asset.uri auri ON auri.id = auricnm.uri
LEFT JOIN actor.org_unit_ancestors( $2 ) aou ON (acn.owning_lib = aou.id)
LEFT JOIN actor.org_unit_descendants( $2 ) aoud ON (acn.owning_lib = aoud.id),
all_orgs
WHERE acn.record = ANY ($1)
AND acn.deleted IS FALSE
AND auri.active IS TRUE
AND ((NOT all_orgs.flag AND aou.id IS NOT NULL) OR (all_orgs.flag AND COALESCE(aou.id,aoud.id) IS NOT NULL)))x
ORDER BY id, pref_ou DESC;
located_uris_as_uris
Signature: evergreen.located_uris_as_uris(bibid bigint, ouid integer, pref_lib integer DEFAULT NULL::integer)
Returns: SETOF asset.uri
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
/* Maps a bib directly to its scoped asset.uri's */
SELECT uri.*
FROM evergreen.located_uris($1, $2, $3) located_uri
JOIN asset.uri_call_number_map map ON (map.call_number = located_uri.id)
JOIN asset.uri uri ON (uri.id = map.uri)
lowercase
Signature: evergreen.lowercase(text)
Returns: text
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
return lc(shift);
lpad_number_substrings
Signature: evergreen.lpad_number_substrings(text, text, integer)
Returns: text
Language |
plperlu |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
my $string = shift; # Source string
my $pad = shift; # string to fill. Typically '0'. This should be a single character.
my $len = shift; # length of resultant padded field
$string =~ s/([0-9]+)/$pad x ($len - length($1)) . $1/eg;
return $string;
maintain_901
Signature: evergreen.maintain_901()
Returns: trigger
Language |
plperlu |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
use strict;
use MARC::Record;
use MARC::File::XML (BinaryEncoding => 'UTF-8');
use MARC::Charset;
use Encode;
use Unicode::Normalize;
MARC::Charset->assume_unicode(1);
my $schema = $_TD->{table_schema};
my $marc = MARC::Record->new_from_xml($_TD->{new}{marc});
my @old901s = $marc->field('901');
$marc->delete_fields(@old901s);
if ($schema eq 'biblio') {
my $tcn_value = $_TD->{new}{tcn_value};
# Set TCN value to record ID?
my $id_as_tcn = spi_exec_query("
SELECT enabled
FROM config.global_flag
WHERE name = 'cat.bib.use_id_for_tcn'
");
if (($id_as_tcn->{processed}) && $id_as_tcn->{rows}[0]->{enabled} eq 't') {
$tcn_value = $_TD->{new}{id};
$_TD->{new}{tcn_value} = $tcn_value;
}
my $new_901 = MARC::Field->new("901", " ", " ",
"a" => $tcn_value,
"b" => $_TD->{new}{tcn_source},
"c" => $_TD->{new}{id},
"t" => $schema
);
if ($_TD->{new}{owner}) {
$new_901->add_subfields("o" => $_TD->{new}{owner});
}
if ($_TD->{new}{share_depth}) {
$new_901->add_subfields("d" => $_TD->{new}{share_depth});
}
if ($_TD->{new}{source}) {
my $plan = spi_prepare('
SELECT source
FROM config.bib_source
WHERE id = $1
', 'INTEGER');
my $source_name =
spi_exec_prepared($plan, {limit => 1}, $_TD->{new}{source})->{rows}[0]{source};
spi_freeplan($plan);
$new_901->add_subfields("s" => $source_name) if $source_name;
}
$marc->append_fields($new_901);
} elsif ($schema eq 'authority') {
my $new_901 = MARC::Field->new("901", " ", " ",
"c" => $_TD->{new}{id},
"t" => $schema,
);
$marc->append_fields($new_901);
} elsif ($schema eq 'serial') {
my $new_901 = MARC::Field->new("901", " ", " ",
"c" => $_TD->{new}{id},
"t" => $schema,
"o" => $_TD->{new}{owning_lib},
);
if ($_TD->{new}{record}) {
$new_901->add_subfields("r" => $_TD->{new}{record});
}
$marc->append_fields($new_901);
} else {
my $new_901 = MARC::Field->new("901", " ", " ",
"c" => $_TD->{new}{id},
"t" => $schema,
);
$marc->append_fields($new_901);
}
my $xml = $marc->as_xml_record();
$xml =~ s/\n//sgo;
$xml =~ s/^<\?xml.+\?\s*>//go;
$xml =~ s/>\s+</></go;
$xml =~ s/\p{Cc}//go;
# Embed a version of OpenILS::Application::AppUtils->entityize()
# to avoid having to set PERL5LIB for PostgreSQL as well
$xml = NFC($xml);
# Convert raw ampersands to entities
$xml =~ s/&(?!\S+;)/&/gso;
# Convert Unicode characters to entities
$xml =~ s/([\x{0080}-\x{fffd}])/sprintf('&#x%X;',ord($1))/sgoe;
$xml =~ s/[\x00-\x1f]//go;
$_TD->{new}{marc} = $xml;
return "MODIFY";
maintain_control_numbers
Signature: evergreen.maintain_control_numbers()
Returns: trigger
Language |
plperlu |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
use strict;
use MARC::Record;
use MARC::File::XML (BinaryEncoding => 'UTF-8');
use MARC::Charset;
use Encode;
use Unicode::Normalize;
MARC::Charset->assume_unicode(1);
my $record = MARC::Record->new_from_xml($_TD->{new}{marc});
my $schema = $_TD->{table_schema};
my $rec_id = $_TD->{new}{id};
# Short-circuit if maintaining control numbers per MARC21 spec is not enabled
my $enable = spi_exec_query("SELECT enabled FROM config.global_flag WHERE name = 'cat.maintain_control_numbers'");
if (!($enable->{processed}) or $enable->{rows}[0]->{enabled} eq 'f') {
return;
}
# Get the control number identifier from an OU setting based on $_TD->{new}{owner}
my $ou_cni = 'EVRGRN';
my $owner;
if ($schema eq 'serial') {
$owner = $_TD->{new}{owning_lib};
} else {
# are.owner and bre.owner can be null, so fall back to the consortial setting
$owner = $_TD->{new}{owner} || 1;
}
my $ous_rv = spi_exec_query("SELECT value FROM actor.org_unit_ancestor_setting('cat.marc_control_number_identifier', $owner)");
if ($ous_rv->{processed}) {
$ou_cni = $ous_rv->{rows}[0]->{value};
$ou_cni =~ s/"//g; # Stupid VIM syntax highlighting"
} else {
# Fall back to the shortname of the OU if there was no OU setting
$ous_rv = spi_exec_query("SELECT shortname FROM actor.org_unit WHERE id = $owner");
if ($ous_rv->{processed}) {
$ou_cni = $ous_rv->{rows}[0]->{shortname};
}
}
my ($create, $munge) = (0, 0);
my @scns = $record->field('035');
foreach my $id_field ('001', '003') {
my $spec_value;
my @controls = $record->field($id_field);
if ($id_field eq '001') {
$spec_value = $rec_id;
} else {
$spec_value = $ou_cni;
}
# Create the 001/003 if none exist
if (scalar(@controls) == 1) {
# Only one field; check to see if we need to munge it
unless (grep $_->data() eq $spec_value, @controls) {
$munge = 1;
}
} else {
# Delete the other fields, as with more than 1 001/003 we do not know which 003/001 to match
foreach my $control (@controls) {
$record->delete_field($control);
}
$record->insert_fields_ordered(MARC::Field->new($id_field, $spec_value));
$create = 1;
}
}
my $cn = $record->field('001')->data();
# Special handling of OCLC numbers, often found in records that lack 003
if ($cn =~ /^o(c[nm]|n)\d/) {
$cn =~ s/^o(c[nm]|n)0*(\d+)/$2/;
$record->field('003')->data('OCoLC');
$create = 0;
}
# Now, if we need to munge the 001, we will first push the existing 001/003
# into the 035; but if the record did not have one (and one only) 001 and 003
# to begin with, skip this process
if ($munge and not $create) {
my $scn = "(" . $record->field('003')->data() . ")" . $cn;
# Do not create duplicate 035 fields
unless (grep $_->subfield('a') eq $scn, @scns) {
$record->insert_fields_ordered(MARC::Field->new('035', '', '', 'a' => $scn));
}
}
# Set the 001/003 and update the MARC
if ($create or $munge) {
$record->field('001')->data($rec_id);
$record->field('003')->data($ou_cni);
my $xml = $record->as_xml_record();
$xml =~ s/\n//sgo;
$xml =~ s/^<\?xml.+\?\s*>//go;
$xml =~ s/>\s+</></go;
$xml =~ s/\p{Cc}//go;
# Embed a version of OpenILS::Application::AppUtils->entityize()
# to avoid having to set PERL5LIB for PostgreSQL as well
$xml = NFC($xml);
# Convert raw ampersands to entities
$xml =~ s/&(?!\S+;)/&/gso;
# Convert Unicode characters to entities
$xml =~ s/([\x{0080}-\x{fffd}])/sprintf('&#x%X;',ord($1))/sgoe;
$xml =~ s/[\x00-\x1f]//go;
$_TD->{new}{marc} = $xml;
return "MODIFY";
}
return;
marc_to
Signature: evergreen.marc_to(marc text, xfrm text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT evergreen.xml_pretty_print(xslt_process($1,xslt)::XML)::TEXT FROM config.xml_transform WHERE name = $2;
matches
Signature: evergreen.matches(anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _alike( $1 ~ $2, $1, $2, NULL );
matches
Signature: evergreen.matches(anyelement, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _alike( $1 ~ $2, $1, $2, $3 );
materialized_view_owner_is
Signature: evergreen.materialized_view_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT materialized_view_owner_is(
$1, $2,
'Materialized view ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
materialized_view_owner_is
Signature: evergreen.materialized_view_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT materialized_view_owner_is(
$1, $2, $3,
'Materialized view ' || quote_ident($1) || '.' || quote_ident($2) || ' should be owned by ' || quote_ident($3)
);
materialized_view_owner_is
Signature: evergreen.materialized_view_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('m'::char, $1, $2);
BEGIN
-- Make sure the materialized view exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Materialized view ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN is(owner, $3, $4);
END;
materialized_view_owner_is
Signature: evergreen.materialized_view_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('m'::char, $1);
BEGIN
-- Make sure the materialized view exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Materialized view ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
materialized_views_are
Signature: evergreen.materialized_views_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'Materialized views', _extras('m', $1, $2), _missing('m', $1, $2),
'Schema ' || quote_ident($1) || ' should have the correct materialized views'
);
materialized_views_are
Signature: evergreen.materialized_views_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'Materialized views', _extras('m', $1, $2), _missing('m', $1, $2), $3);
materialized_views_are
Signature: evergreen.materialized_views_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'Materialized views', _extras('m', $1), _missing('m', $1),
'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct materialized views'
);
materialized_views_are
Signature: evergreen.materialized_views_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'Materialized views', _extras('m', $1), _missing('m', $1), $2);
no_plan
Signature: evergreen.no_plan()
Returns: SETOF boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
BEGIN
PERFORM plan(0);
RETURN;
END;
num_failed
Signature: evergreen.num_failed()
Returns: integer
Language |
sql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
SELECT _get('failed');
oils_i18n_code_tracking
Signature: evergreen.oils_i18n_code_tracking()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM oils_i18n_update_apply( OLD.code::TEXT, NEW.code::TEXT, TG_ARGV[0]::TEXT );
RETURN NEW;
END;
oils_i18n_gettext
Signature: evergreen.oils_i18n_gettext(integer, text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT $2;
oils_i18n_gettext
Signature: evergreen.oils_i18n_gettext(text, text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT $2;
oils_i18n_id_tracking
Signature: evergreen.oils_i18n_id_tracking()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM oils_i18n_update_apply( OLD.id::TEXT, NEW.id::TEXT, TG_ARGV[0]::TEXT );
RETURN NEW;
END;
oils_i18n_update_apply
Signature: evergreen.oils_i18n_update_apply(old_ident text, new_ident text, hint text)
Returns: void
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
EXECUTE $$
UPDATE config.i18n_core
SET identity_value = $$ || quote_literal(new_ident) || $$
WHERE fq_field LIKE '$$ || hint || $$.%'
AND identity_value = $$ || quote_literal(old_ident) || $$::TEXT;$$;
RETURN;
END;
oils_i18n_xlate
Signature: evergreen.oils_i18n_xlate(keytable text, keyclass text, keycol text, identcol text, keyvalue text, raw_locale text)
Returns: text
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
DECLARE
locale TEXT := REGEXP_REPLACE( REGEXP_REPLACE( raw_locale, E'[;, ].+$', '' ), E'_', '-', 'g' );
language TEXT := REGEXP_REPLACE( locale, E'-.+$', '' );
result config.i18n_core%ROWTYPE;
fallback TEXT;
keyfield TEXT := keyclass || '.' || keycol;
BEGIN
-- Try the full locale
SELECT * INTO result
FROM config.i18n_core
WHERE fq_field = keyfield
AND identity_value = keyvalue
AND translation = locale;
-- Try just the language
IF NOT FOUND THEN
SELECT * INTO result
FROM config.i18n_core
WHERE fq_field = keyfield
AND identity_value = keyvalue
AND translation = language;
END IF;
-- Fall back to the string we passed in in the first place
IF NOT FOUND THEN
EXECUTE
'SELECT ' ||
keycol ||
' FROM ' || keytable ||
' WHERE ' || identcol || ' = ' || quote_literal(keyvalue)
INTO fallback;
RETURN fallback;
END IF;
RETURN result.string;
END;
oils_json_to_text
Signature: evergreen.oils_json_to_text(text)
Returns: text
Language |
plperlu |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
use JSON::XS;
my $json = shift();
my $txt;
eval { $txt = JSON::XS->new->allow_nonref->decode( $json ) };
return undef if ($@);
return $txt
oils_text_as_bytea
Signature: evergreen.oils_text_as_bytea(text)
Returns: bytea
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT CAST(REGEXP_REPLACE(UPPER($1), $$\\$$, $$\\\\$$, 'g') AS BYTEA);
oils_xpath
Signature: evergreen.oils_xpath(text, text)
Returns: text[]
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY_AGG(
CASE WHEN strpos(x,'<') = 1 THEN -- It's an element node
x
ELSE -- it's text-ish
evergreen.xml_famous5_to_text(x)
END
)
FROM UNNEST(XPATH( $1, $2::XML)::TEXT[]) x;
oils_xpath
Signature: evergreen.oils_xpath(text, text, text[])
Returns: text[]
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY_AGG(
CASE WHEN strpos(x,'<') = 1 THEN -- It's an element node
x
ELSE -- it's text-ish
evergreen.xml_famous5_to_text(x)
END
)
FROM UNNEST(XPATH( $1, $2::XML, $3 )::TEXT[]) x;
oils_xpath_string
Signature: evergreen.oils_xpath_string(text, text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT oils_xpath_string( $1, $2, '{}'::TEXT[] );
oils_xpath_string
Signature: evergreen.oils_xpath_string(text, text, anyarray)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT oils_xpath_string( $1, $2, '', $3 );
oils_xpath_string
Signature: evergreen.oils_xpath_string(text, text, text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT oils_xpath_string( $1, $2, $3, '{}'::TEXT[] );
oils_xpath_string
Signature: evergreen.oils_xpath_string(text, text, text, anyarray)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT ARRAY_TO_STRING(
oils_xpath(
$1 ||
CASE WHEN $1 ~ $re$/[^/[]*@[^]]+$$re$ OR $1 ~ $re$\)$$re$ THEN '' ELSE '//text()' END,
$2,
$4
),
$3
);
oils_xpath_table
Signature: evergreen.oils_xpath_table(key text, document_field text, relation_name text, xpaths text, criteria text)
Returns: SETOF record
Language |
plpgsql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
DECLARE
xpath_list TEXT[];
select_list TEXT[];
where_list TEXT[];
q TEXT;
out_record RECORD;
empty_test RECORD;
BEGIN
xpath_list := STRING_TO_ARRAY( xpaths, '|' );
select_list := ARRAY_APPEND( select_list, key || '::INT AS key' );
FOR i IN 1 .. ARRAY_UPPER(xpath_list,1) LOOP
IF xpath_list[i] = 'null()' THEN
select_list := ARRAY_APPEND( select_list, 'NULL::TEXT AS c_' || i );
ELSE
select_list := ARRAY_APPEND(
select_list,
$sel$
unnest(
COALESCE(
NULLIF(
oils_xpath(
$sel$ ||
quote_literal(
CASE
WHEN xpath_list[i] ~ $re$/[^/[]*@[^/]+$$re$ OR xpath_list[i] ~ $re$text\(\)$$re$ THEN xpath_list[i]
ELSE xpath_list[i] || '//text()'
END
) ||
$sel$,
$sel$ || document_field || $sel$
),
'{}'::TEXT[]
),
'{NULL}'::TEXT[]
)
) AS c_$sel$ || i
);
where_list := ARRAY_APPEND(
where_list,
'c_' || i || ' IS NOT NULL'
);
END IF;
END LOOP;
q := $q$
SELECT * FROM (
SELECT $q$ || ARRAY_TO_STRING( select_list, ', ' ) || $q$ FROM $q$ || relation_name || $q$ WHERE ($q$ || criteria || $q$)
)x WHERE $q$ || ARRAY_TO_STRING( where_list, ' OR ' );
-- RAISE NOTICE 'query: %', q;
FOR out_record IN EXECUTE q LOOP
RETURN NEXT out_record;
END LOOP;
RETURN;
END;
oils_xpath_tag_to_table
Signature: evergreen.oils_xpath_tag_to_table(marc text, tag text, xpaths text[])
Returns: SETOF record
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
-- This function currently populates columns with the FIRST matching value
-- of each XPATH. It would be reasonable to add a 'return_arrays' option
-- where each column is an array of all matching values for each path, but
-- that remains as a TODO
DECLARE
field RECORD;
output RECORD;
select_list TEXT[];
from_list TEXT[];
q TEXT;
BEGIN
-- setup query select
FOR i IN 1 .. ARRAY_UPPER(xpaths,1) LOOP
IF xpaths[i] = 'null()' THEN
select_list := ARRAY_APPEND(select_list, 'NULL::TEXT AS c_' || i );
ELSE
select_list := ARRAY_APPEND(select_list, '(oils_xpath(' ||
quote_literal(
CASE
WHEN xpaths[i] ~ $re$/[^/[]*@[^/]+$$re$ -- attribute
OR xpaths[i] ~ $re$text\(\)$$re$
THEN xpaths[i]
ELSE xpaths[i] || '//text()'
END
) || ', field_marc))[1] AS cl_' || i);
-- hardcoded to first value for each path
END IF;
END LOOP;
-- run query over tag set
q := 'SELECT ' || ARRAY_TO_STRING(select_list, ',')
|| ' FROM UNNEST(oils_xpath(' || quote_literal('//*[@tag="' || tag
|| '"]') || ', ' || quote_literal(marc) || ')) AS field_marc;';
--RAISE NOTICE '%', q;
RETURN QUERY EXECUTE q;
END;
oils_xslt_process
Signature: evergreen.oils_xslt_process(text, text)
Returns: text
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
use strict;
use XML::LibXSLT;
use XML::LibXML;
my $doc = shift;
my $xslt = shift;
# The following approach uses the older XML::LibXML 1.69 / XML::LibXSLT 1.68
# methods of parsing XML documents and stylesheets, in the hopes of broader
# compatibility with distributions
my $parser = $_SHARED{'_xslt_process'}{parsers}{xml} || XML::LibXML->new();
# Cache the XML parser, if we do not already have one
$_SHARED{'_xslt_process'}{parsers}{xml} = $parser
unless ($_SHARED{'_xslt_process'}{parsers}{xml});
my $xslt_parser = $_SHARED{'_xslt_process'}{parsers}{xslt} || XML::LibXSLT->new();
# Cache the XSLT processor, if we do not already have one
$_SHARED{'_xslt_process'}{parsers}{xslt} = $xslt_parser
unless ($_SHARED{'_xslt_process'}{parsers}{xslt});
my $stylesheet = $_SHARED{'_xslt_process'}{stylesheets}{$xslt} ||
$xslt_parser->parse_stylesheet( $parser->parse_string($xslt) );
$_SHARED{'_xslt_process'}{stylesheets}{$xslt} = $stylesheet
unless ($_SHARED{'_xslt_process'}{stylesheets}{$xslt});
return $stylesheet->output_as_chars(
$stylesheet->transform(
$parser->parse_string($doc)
)
);
ok
Signature: evergreen.ok(boolean)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( $1, NULL );
ok
Signature: evergreen.ok(boolean, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
aok ALIAS FOR $1;
descr text := $2;
test_num INTEGER;
todo_why TEXT;
ok BOOL;
BEGIN
todo_why := _todo();
ok := CASE
WHEN aok = TRUE THEN aok
WHEN todo_why IS NULL THEN COALESCE(aok, false)
ELSE TRUE
END;
IF _get('plan') IS NULL THEN
RAISE EXCEPTION 'You tried to run a test without a plan! Gotta have a plan';
END IF;
test_num := add_result(
ok,
COALESCE(aok, false),
descr,
CASE WHEN todo_why IS NULL THEN '' ELSE 'todo' END,
COALESCE(todo_why, '')
);
RETURN (CASE aok WHEN TRUE THEN '' ELSE 'not ' END)
|| 'ok ' || _set( 'curr_test', test_num )
|| CASE descr WHEN '' THEN '' ELSE COALESCE( ' - ' || substr(diag( descr ), 3), '' ) END
|| COALESCE( ' ' || diag( 'TODO ' || todo_why ), '')
|| CASE aok WHEN TRUE THEN '' ELSE E'\n' ||
diag('Failed ' ||
CASE WHEN todo_why IS NULL THEN '' ELSE '(TODO) ' END ||
'test ' || test_num ||
CASE descr WHEN '' THEN '' ELSE COALESCE(': "' || descr || '"', '') END ) ||
CASE WHEN aok IS NULL THEN E'\n' || diag(' (test result was NULL)') ELSE '' END
END;
END;
opclass_owner_is
Signature: evergreen.opclass_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT opclass_owner_is(
$1, $2,
'Operator class ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
opclass_owner_is
Signature: evergreen.opclass_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT opclass_owner_is(
$1, $2, $3,
'Operator class ' || quote_ident($1) || '.' || quote_ident($2) ||
' should be owned by ' || quote_ident($3)
);
opclass_owner_is
Signature: evergreen.opclass_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_opclass_owner($1, $2);
BEGIN
-- Make sure the opclass exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Operator class ' || quote_ident($1) || '.' || quote_ident($2)
|| ' not found'
);
END IF;
RETURN is(owner, $3, $4);
END;
opclass_owner_is
Signature: evergreen.opclass_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_opclass_owner($1);
BEGIN
-- Make sure the opclass exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Operator class ' || quote_ident($1) || ' not found'
);
END IF;
RETURN is(owner, $2, $3);
END;
opclasses_are
Signature: evergreen.opclasses_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT opclasses_are( $1, $2, 'Schema ' || quote_ident($1) || ' should have the correct operator classes' );
opclasses_are
Signature: evergreen.opclasses_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'operator classes',
ARRAY(
SELECT oc.opcname
FROM pg_catalog.pg_opclass oc
JOIN pg_catalog.pg_namespace n ON oc.opcnamespace = n.oid
WHERE n.nspname = $1
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
),
ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT oc.opcname
FROM pg_catalog.pg_opclass oc
JOIN pg_catalog.pg_namespace n ON oc.opcnamespace = n.oid
WHERE n.nspname = $1
),
$3
);
opclasses_are
Signature: evergreen.opclasses_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT opclasses_are( $1, 'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct operator classes' );
opclasses_are
Signature: evergreen.opclasses_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'operator classes',
ARRAY(
SELECT oc.opcname
FROM pg_catalog.pg_opclass oc
JOIN pg_catalog.pg_namespace n ON oc.opcnamespace = n.oid
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND pg_catalog.pg_opclass_is_visible(oc.oid)
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT oc.opcname
FROM pg_catalog.pg_opclass oc
JOIN pg_catalog.pg_namespace n ON oc.opcnamespace = n.oid
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND pg_catalog.pg_opclass_is_visible(oc.oid)
),
$2
);
operators_are
Signature: evergreen.operators_are(name, text[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT operators_are($1, $2, 'Schema ' || quote_ident($1) || ' should have the correct operators' );
operators_are
Signature: evergreen.operators_are(name, text[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _areni(
'operators',
ARRAY(
SELECT display_oper(o.oprname, o.oid) || ' RETURNS ' || o.oprresult::regtype
FROM pg_catalog.pg_operator o
JOIN pg_catalog.pg_namespace n ON o.oprnamespace = n.oid
WHERE n.nspname = $1
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
),
ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT display_oper(o.oprname, o.oid) || ' RETURNS ' || o.oprresult::regtype
FROM pg_catalog.pg_operator o
JOIN pg_catalog.pg_namespace n ON o.oprnamespace = n.oid
WHERE n.nspname = $1
),
$3
);
operators_are
Signature: evergreen.operators_are(text[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT operators_are($1, 'There should be the correct operators')
operators_are
Signature: evergreen.operators_are(text[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _areni(
'operators',
ARRAY(
SELECT display_oper(o.oprname, o.oid) || ' RETURNS ' || o.oprresult::regtype
FROM pg_catalog.pg_operator o
JOIN pg_catalog.pg_namespace n ON o.oprnamespace = n.oid
WHERE pg_catalog.pg_operator_is_visible(o.oid)
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT display_oper(o.oprname, o.oid) || ' RETURNS ' || o.oprresult::regtype
FROM pg_catalog.pg_operator o
JOIN pg_catalog.pg_namespace n ON o.oprnamespace = n.oid
WHERE pg_catalog.pg_operator_is_visible(o.oid)
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
),
$2
);
org_top
Signature: evergreen.org_top()
Returns: actor.org_unit
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
SELECT * FROM actor.org_unit WHERE parent_ou IS NULL LIMIT 1;
os_name
Signature: evergreen.os_name()
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT 'linux'::text;
ous_change_log
Signature: evergreen.ous_change_log()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
original TEXT;
BEGIN
-- Check for which setting is being updated, and log it.
SELECT INTO original value FROM actor.org_unit_setting WHERE name = NEW.name AND org_unit = NEW.org_unit;
INSERT INTO config.org_unit_setting_type_log (org,original_value,new_value,field_name) VALUES (NEW.org_unit, original, NEW.value, NEW.name);
RETURN NEW;
END;
ous_delete_log
Signature: evergreen.ous_delete_log()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
original TEXT;
BEGIN
-- Check for which setting is being updated, and log it.
SELECT INTO original value FROM actor.org_unit_setting WHERE name = OLD.name AND org_unit = OLD.org_unit;
INSERT INTO config.org_unit_setting_type_log (org,original_value,new_value,field_name) VALUES (OLD.org_unit, original, 'null', OLD.name);
RETURN OLD;
END;
partitions_are
Signature: evergreen.partitions_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT partitions_are(
$1, $2, $3,
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should have the correct partitions'
);
partitions_are
Signature: evergreen.partitions_are(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'partitions',
ARRAY(SELECT _parts($1, $2) EXCEPT SELECT unnest($3)),
ARRAY(SELECT unnest($3) EXCEPT SELECT _parts($1, $2)),
$4
);
partitions_are
Signature: evergreen.partitions_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT partitions_are(
$1, $2,
'Table ' || quote_ident($1) || ' should have the correct partitions'
);
partitions_are
Signature: evergreen.partitions_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'partitions',
ARRAY(SELECT _parts($1) EXCEPT SELECT unnest($2)),
ARRAY(SELECT unnest($2) EXCEPT SELECT _parts($1)),
$3
);
pass
Signature: evergreen.pass()
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( TRUE, NULL );
pass
Signature: evergreen.pass(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( TRUE, $1 );
performs_ok
Signature: evergreen.performs_ok(text, numeric)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT performs_ok(
$1, $2, 'Should run in less than ' || $2 || ' ms'
);
performs_ok
Signature: evergreen.performs_ok(text, numeric, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
query TEXT := _query($1);
max_time ALIAS FOR $2;
descr ALIAS FOR $3;
starts_at TEXT;
act_time NUMERIC;
BEGIN
starts_at := timeofday();
EXECUTE query;
act_time := extract( millisecond from timeofday()::timestamptz - starts_at::timestamptz);
IF act_time < max_time THEN RETURN ok(TRUE, descr); END IF;
RETURN ok( FALSE, descr ) || E'\n' || diag(
' runtime: ' || act_time || ' ms' ||
E'\n exceeds: ' || max_time || ' ms'
);
END;
performs_within
Signature: evergreen.performs_within(text, numeric, numeric)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT performs_within(
$1, $2, $3, 10,
'Should run within ' || $2 || ' +/- ' || $3 || ' ms');
performs_within
Signature: evergreen.performs_within(text, numeric, numeric, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT performs_within(
$1, $2, $3, $4,
'Should run within ' || $2 || ' +/- ' || $3 || ' ms');
performs_within
Signature: evergreen.performs_within(text, numeric, numeric, integer, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
query TEXT := _query($1);
expected_avg ALIAS FOR $2;
within ALIAS FOR $3;
iterations ALIAS FOR $4;
descr ALIAS FOR $5;
avg_time NUMERIC;
BEGIN
SELECT avg(a_time) FROM _time_trials(query, iterations, 0.8) t1 INTO avg_time;
IF abs(avg_time - expected_avg) < within THEN RETURN ok(TRUE, descr); END IF;
RETURN ok(FALSE, descr) || E'\n' || diag(' average runtime: ' || avg_time || ' ms'
|| E'\n desired average: ' || expected_avg || ' +/- ' || within || ' ms'
);
END;
performs_within
Signature: evergreen.performs_within(text, numeric, numeric, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT performs_within(
$1, $2, $3, 10, $4
);
pg_statistics
Signature: evergreen.pg_statistics(tab text, col text)
Returns: TABLE(element text, frequency integer)
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
-- This query will die on PG < 9.2, but the function can be created. We just won't use it where we can't.
RETURN QUERY
SELECT e,
f
FROM (SELECT ROW_NUMBER() OVER (),
(f * 100)::INT AS f
FROM (SELECT UNNEST(most_common_elem_freqs) AS f
FROM pg_stats
WHERE tablename = tab
AND attname = col
)x
) AS f
JOIN (SELECT ROW_NUMBER() OVER (),
e
FROM (SELECT UNNEST(most_common_elems::text::text[]) AS e
FROM pg_stats
WHERE tablename = tab
AND attname = col
)y
) AS elems USING (row_number);
END;
pg_version
Signature: evergreen.pg_version()
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT current_setting('server_version')
pg_version_num
Signature: evergreen.pg_version_num()
Returns: integer
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT current_setting('server_version_num')::integer;
pgtap_version
Signature: evergreen.pgtap_version()
Returns: numeric
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT 1.1;
plan
Signature: evergreen.plan(integer)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
DECLARE
rcount INTEGER;
BEGIN
BEGIN
EXECUTE '
CREATE TEMP SEQUENCE __tcache___id_seq;
CREATE TEMP TABLE __tcache__ (
id INTEGER NOT NULL DEFAULT nextval(''__tcache___id_seq''),
label TEXT NOT NULL,
value INTEGER NOT NULL,
note TEXT NOT NULL DEFAULT ''''
);
CREATE UNIQUE INDEX __tcache___key ON __tcache__(id);
GRANT ALL ON TABLE __tcache__ TO PUBLIC;
GRANT ALL ON TABLE __tcache___id_seq TO PUBLIC;
CREATE TEMP SEQUENCE __tresults___numb_seq;
GRANT ALL ON TABLE __tresults___numb_seq TO PUBLIC;
';
EXCEPTION WHEN duplicate_table THEN
-- Raise an exception if there's already a plan.
EXECUTE 'SELECT TRUE FROM __tcache__ WHERE label = ''plan''';
GET DIAGNOSTICS rcount = ROW_COUNT;
IF rcount > 0 THEN
RAISE EXCEPTION 'You tried to plan twice!';
END IF;
END;
-- Save the plan and return.
PERFORM _set('plan', $1 );
PERFORM _set('failed', 0 );
RETURN '1..' || $1;
END;
policies_are
Signature: evergreen.policies_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT policies_are( $1, $2, $3, 'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should have the correct policies' );
policies_are
Signature: evergreen.policies_are(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'policies',
ARRAY(
SELECT p.polname
FROM pg_catalog.pg_policy p
JOIN pg_catalog.pg_class c ON c.oid = p.polrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = $1
AND c.relname = $2
EXCEPT
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
),
ARRAY(
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
EXCEPT
SELECT p.polname
FROM pg_catalog.pg_policy p
JOIN pg_catalog.pg_class c ON c.oid = p.polrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = $1
AND c.relname = $2
),
$4
);
policies_are
Signature: evergreen.policies_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT policies_are( $1, $2, 'Table ' || quote_ident($1) || ' should have the correct policies' );
policies_are
Signature: evergreen.policies_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'policies',
ARRAY(
SELECT p.polname
FROM pg_catalog.pg_policy p
JOIN pg_catalog.pg_class c ON c.oid = p.polrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = $1
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
),
ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT p.polname
FROM pg_catalog.pg_policy p
JOIN pg_catalog.pg_class c ON c.oid = p.polrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
),
$3
);
policy_cmd_is
Signature: evergreen.policy_cmd_is(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT policy_cmd_is(
$1, $2, $3, $4,
'Policy ' || quote_ident($3)
|| ' for table ' || quote_ident($1) || '.' || quote_ident($2)
|| ' should apply to ' || upper($4) || ' command'
);
policy_cmd_is
Signature: evergreen.policy_cmd_is(name, name, name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
cmd text;
BEGIN
SELECT
CASE pp.polcmd WHEN 'r' THEN 'SELECT'
WHEN 'a' THEN 'INSERT'
WHEN 'w' THEN 'UPDATE'
WHEN 'd' THEN 'DELETE'
ELSE 'ALL'
END
FROM pg_catalog.pg_policy AS pp
JOIN pg_catalog.pg_class AS pc ON pc.oid = pp.polrelid
JOIN pg_catalog.pg_namespace AS pn ON pn.oid = pc.relnamespace
WHERE pn.nspname = $1
AND pc.relname = $2
AND pp.polname = $3
INTO cmd;
RETURN is( cmd, upper($4), $5 );
END;
policy_cmd_is
Signature: evergreen.policy_cmd_is(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT policy_cmd_is(
$1, $2, $3,
'Policy ' || quote_ident($2)
|| ' for table ' || quote_ident($1)
|| ' should apply to ' || upper($3) || ' command'
);
policy_cmd_is
Signature: evergreen.policy_cmd_is(name, name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
cmd text;
BEGIN
SELECT
CASE pp.polcmd WHEN 'r' THEN 'SELECT'
WHEN 'a' THEN 'INSERT'
WHEN 'w' THEN 'UPDATE'
WHEN 'd' THEN 'DELETE'
ELSE 'ALL'
END
FROM pg_catalog.pg_policy AS pp
JOIN pg_catalog.pg_class AS pc ON pc.oid = pp.polrelid
JOIN pg_catalog.pg_namespace AS pn ON pn.oid = pc.relnamespace
WHERE pc.relname = $1
AND pp.polname = $2
AND pn.nspname NOT IN ('pg_catalog', 'information_schema')
INTO cmd;
RETURN is( cmd, upper($3), $4 );
END;
policy_roles_are
Signature: evergreen.policy_roles_are(name, name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT policy_roles_are( $1, $2, $3, $4, 'Policy ' || quote_ident($3) || ' for table ' || quote_ident($1) || '.' || quote_ident($2) || ' should have the correct roles' );
policy_roles_are
Signature: evergreen.policy_roles_are(name, name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'policy roles',
ARRAY(
SELECT pr.rolname
FROM pg_catalog.pg_policy AS pp
JOIN pg_catalog.pg_roles AS pr ON pr.oid = ANY (pp.polroles)
JOIN pg_catalog.pg_class AS pc ON pc.oid = pp.polrelid
JOIN pg_catalog.pg_namespace AS pn ON pn.oid = pc.relnamespace
WHERE pn.nspname = $1
AND pc.relname = $2
AND pp.polname = $3
EXCEPT
SELECT $4[i]
FROM generate_series(1, array_upper($4, 1)) s(i)
),
ARRAY(
SELECT $4[i]
FROM generate_series(1, array_upper($4, 1)) s(i)
EXCEPT
SELECT pr.rolname
FROM pg_catalog.pg_policy AS pp
JOIN pg_catalog.pg_roles AS pr ON pr.oid = ANY (pp.polroles)
JOIN pg_catalog.pg_class AS pc ON pc.oid = pp.polrelid
JOIN pg_catalog.pg_namespace AS pn ON pn.oid = pc.relnamespace
WHERE pn.nspname = $1
AND pc.relname = $2
AND pp.polname = $3
),
$5
);
policy_roles_are
Signature: evergreen.policy_roles_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT policy_roles_are( $1, $2, $3, 'Policy ' || quote_ident($2) || ' for table ' || quote_ident($1) || ' should have the correct roles' );
policy_roles_are
Signature: evergreen.policy_roles_are(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'policy roles',
ARRAY(
SELECT pr.rolname
FROM pg_catalog.pg_policy AS pp
JOIN pg_catalog.pg_roles AS pr ON pr.oid = ANY (pp.polroles)
JOIN pg_catalog.pg_class AS pc ON pc.oid = pp.polrelid
JOIN pg_catalog.pg_namespace AS pn ON pn.oid = pc.relnamespace
WHERE pc.relname = $1
AND pp.polname = $2
AND pn.nspname NOT IN ('pg_catalog', 'information_schema')
EXCEPT
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
),
ARRAY(
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
EXCEPT
SELECT pr.rolname
FROM pg_catalog.pg_policy AS pp
JOIN pg_catalog.pg_roles AS pr ON pr.oid = ANY (pp.polroles)
JOIN pg_catalog.pg_class AS pc ON pc.oid = pp.polrelid
JOIN pg_catalog.pg_namespace AS pn ON pn.oid = pc.relnamespace
WHERE pc.relname = $1
AND pp.polname = $2
AND pn.nspname NOT IN ('pg_catalog', 'information_schema')
),
$4
);
protect_reserved_rows_from_delete
Signature: evergreen.protect_reserved_rows_from_delete()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF OLD.id < TG_ARGV[0]::INT THEN
RAISE EXCEPTION 'Cannot delete row with reserved ID %', OLD.id;
END IF;
RETURN OLD;
END
query_int_wrapper
Signature: evergreen.query_int_wrapper(integer[], text)
Returns: boolean
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
BEGIN
RETURN $1 @@ $2::query_int;
END;
qwerty_keyboard_distance
Signature: evergreen.qwerty_keyboard_distance(a text, b text)
Returns: numeric
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
use String::KeyboardDistance qw(:all);
return qwerty_keyboard_distance(@_);
qwerty_keyboard_distance_match
Signature: evergreen.qwerty_keyboard_distance_match(a text, b text)
Returns: numeric
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
use String::KeyboardDistance qw(:all);
return qwerty_keyboard_distance_match(@_);
raise_protected_row_exception
Signature: evergreen.raise_protected_row_exception()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
RAISE EXCEPTION 'Cannot % %.% with % of %', TG_OP, TG_TABLE_SCHEMA, TG_TABLE_NAME, COALESCE(TG_ARGV[0]::TEXT,'id'), COALESCE(TG_ARGV[1]::TEXT,'-1');
END;
rank_cp
Signature: evergreen.rank_cp(copy asset.copy)
Returns: integer
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
DECLARE
rank INT;
BEGIN
WITH totally_available AS (
SELECT id, 0 AS avail_rank
FROM config.copy_status
WHERE opac_visible IS TRUE
AND copy_active IS TRUE
AND id != 1 -- "Checked out"
), almost_available AS (
SELECT id, 10 AS avail_rank
FROM config.copy_status
WHERE holdable IS TRUE
AND opac_visible IS TRUE
AND copy_active IS FALSE
OR id = 1 -- "Checked out"
)
SELECT COALESCE(
CASE WHEN NOT copy.opac_visible THEN 100 END,
(SELECT avail_rank FROM totally_available WHERE copy.status IN (id)),
CASE WHEN copy.holdable THEN
(SELECT avail_rank FROM almost_available WHERE copy.status IN (id))
END,
100
) INTO rank;
RETURN rank;
END;
rank_cp
Signature: evergreen.rank_cp(copy_id bigint)
Returns: integer
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
DECLARE
copy asset.copy%ROWTYPE;
BEGIN
SELECT * INTO copy FROM asset.copy WHERE id = copy_id;
RETURN evergreen.rank_cp(copy);
END;
rank_ou
Signature: evergreen.rank_ou(lib integer, search_lib integer, pref_lib integer DEFAULT NULL::integer)
Returns: integer
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
SELECT COALESCE(
-- lib matches search_lib
(SELECT CASE WHEN $1 = $2 THEN -20000 END),
-- lib matches pref_lib
(SELECT CASE WHEN $1 = $3 THEN -10000 END),
-- pref_lib is a child of search_lib and lib is a child of pref lib.
-- For example, searching CONS, pref lib is SYS1,
-- copies at BR1 and BR2 sort to the front.
(SELECT distance - 5000
FROM actor.org_unit_descendants_distance($3)
WHERE id = $1 AND $3 IN (
SELECT id FROM actor.org_unit_descendants($2))),
-- lib is a child of search_lib
(SELECT distance FROM actor.org_unit_descendants_distance($2) WHERE id = $1),
-- all others pay cash
1000
);
rank_ou
Signature: evergreen.rank_ou(lib integer, search_lib integer, pref_lib integer, plat double precision, plon double precision)
Returns: integer
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
SELECT COALESCE(
-- lib matches search_lib
(SELECT CASE WHEN $1 = $2 THEN -20000 END),
-- lib matches pref_lib
(SELECT CASE WHEN $1 = $3 THEN -10000 END),
-- pref_lib is a child of search_lib and lib is a child of pref lib.
-- For example, searching CONS, pref lib is SYS1,
-- copies at BR1 and BR2 sort to the front.
(SELECT distance - 5000
FROM actor.org_unit_descendants_distance($3)
WHERE id = $1 AND $3 IN (
SELECT id FROM actor.org_unit_descendants($2))),
-- lib is a child of search_lib
(SELECT distance FROM actor.org_unit_descendants_distance($2) WHERE id = $1),
-- all others pay cash
1000
) + ((SELECT CASE WHEN addr.latitude IS NULL THEN 0 ELSE -20038 END) + (earth_distance( -- shortest GC distance is returned, only half the circumfrence is needed
ll_to_earth(
COALESCE(addr.latitude,plat), -- if the org has no coords, we just
COALESCE(addr.longitude,plon) -- force 0 distance and let the above tie-break
),ll_to_earth(plat,plon)
) / 1000)::INT ) -- earth_distance is in meters, convert to kilometers and subtract from largest distance
FROM actor.org_unit org
LEFT JOIN actor.org_address addr ON (org.billing_address = addr.id)
WHERE org.id = $1;
ranked_volumes
Signature: evergreen.ranked_volumes(bibid bigint, ouid integer, depth integer DEFAULT NULL::integer, slimit hstore DEFAULT NULL::hstore, soffset hstore DEFAULT NULL::hstore, pref_lib integer DEFAULT NULL::integer, includes text[] DEFAULT NULL::text[])
Returns: TABLE(id bigint, name text, label_sortkey text, rank bigint)
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
SELECT * FROM evergreen.ranked_volumes(ARRAY[$1],$2,$3,$4,$5,$6,$7)
ranked_volumes
Signature: evergreen.ranked_volumes(bibid bigint[], ouid integer, depth integer DEFAULT NULL::integer, slimit hstore DEFAULT NULL::hstore, soffset hstore DEFAULT NULL::hstore, pref_lib integer DEFAULT NULL::integer, includes text[] DEFAULT NULL::text[])
Returns: TABLE(id bigint, name text, label_sortkey text, rank bigint)
Language |
sql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
WITH RECURSIVE ou_depth AS (
SELECT COALESCE(
$3,
(
SELECT depth
FROM actor.org_unit_type aout
INNER JOIN actor.org_unit ou ON ou_type = aout.id
WHERE ou.id = $2
)
) AS depth
), descendant_depth AS (
SELECT ou.id,
ou.parent_ou,
out.depth
FROM actor.org_unit ou
JOIN actor.org_unit_type out ON (out.id = ou.ou_type)
JOIN anscestor_depth ad ON (ad.id = ou.id),
ou_depth
WHERE ad.depth = ou_depth.depth
UNION ALL
SELECT ou.id,
ou.parent_ou,
out.depth
FROM actor.org_unit ou
JOIN actor.org_unit_type out ON (out.id = ou.ou_type)
JOIN descendant_depth ot ON (ot.id = ou.parent_ou)
), anscestor_depth AS (
SELECT ou.id,
ou.parent_ou,
out.depth
FROM actor.org_unit ou
JOIN actor.org_unit_type out ON (out.id = ou.ou_type)
WHERE ou.id = $2
UNION ALL
SELECT ou.id,
ou.parent_ou,
out.depth
FROM actor.org_unit ou
JOIN actor.org_unit_type out ON (out.id = ou.ou_type)
JOIN anscestor_depth ot ON (ot.parent_ou = ou.id)
), descendants as (
SELECT ou.* FROM actor.org_unit ou JOIN descendant_depth USING (id)
)
SELECT ua.id, ua.name, ua.label_sortkey, MIN(ua.rank) AS rank FROM (
SELECT acn.id, owning_lib.name, acn.label_sortkey,
evergreen.rank_cp(acp),
RANK() OVER w
FROM asset.call_number acn
JOIN asset.copy acp ON (acn.id = acp.call_number)
JOIN descendants AS aou ON (acp.circ_lib = aou.id)
JOIN actor.org_unit AS owning_lib ON (acn.owning_lib = owning_lib.id)
WHERE acn.record = ANY ($1)
AND acn.deleted IS FALSE
AND acp.deleted IS FALSE
AND CASE WHEN ('exclude_invisible_acn' = ANY($7)) THEN
EXISTS (
WITH basevm AS (SELECT c_attrs FROM asset.patron_default_visibility_mask()),
circvm AS (SELECT search.calculate_visibility_attribute_test('circ_lib', ARRAY[acp.circ_lib]) AS mask)
SELECT 1
FROM basevm, circvm, asset.copy_vis_attr_cache acvac
WHERE acvac.vis_attr_vector @@ (basevm.c_attrs || '&' || circvm.mask)::query_int
AND acvac.target_copy = acp.id
AND acvac.record = acn.record
) ELSE TRUE END
GROUP BY acn.id, evergreen.rank_cp(acp), owning_lib.name, acn.label_sortkey, aou.id
WINDOW w AS (
ORDER BY
COALESCE(
CASE WHEN aou.id = $2 THEN -20000 END,
CASE WHEN aou.id = $6 THEN -10000 END,
(SELECT distance - 5000
FROM actor.org_unit_descendants_distance($6) as x
WHERE x.id = aou.id AND $6 IN (
SELECT q.id FROM actor.org_unit_descendants($2) as q)),
(SELECT e.distance FROM actor.org_unit_descendants_distance($2) as e WHERE e.id = aou.id),
1000
),
evergreen.rank_cp(acp)
)
) AS ua
GROUP BY ua.id, ua.name, ua.label_sortkey
ORDER BY rank, ua.name, ua.label_sortkey
LIMIT ($4 -> 'acn')::INT
OFFSET ($5 -> 'acn')::INT;
redact_value
Signature: evergreen.redact_value(input_data anyelement, skip_redaction boolean DEFAULT false, redact_with anyelement DEFAULT NULL::unknown)
Returns: anyelement
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
DECLARE
result ALIAS FOR $0;
BEGIN
IF skip_redaction THEN
result := input_data;
ELSE
result := redact_with;
END IF;
RETURN result;
END;
regexp_split_to_array
Signature: evergreen.regexp_split_to_array(text, text)
Returns: text[]
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
return encode_array_literal([split $_[1], $_[0]]);
rel_bump
Signature: evergreen.rel_bump(terms text[], value text, bumps text[], mults numeric[])
Returns: numeric
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
use strict;
my ($terms,$value,$bumps,$mults) = @_;
my $retval = 1;
for (my $id = 0; $id < @$bumps; $id++) {
if ($bumps->[$id] eq 'first_word') {
$retval *= $mults->[$id] if ($value =~ /^$terms->[0]/);
} elsif ($bumps->[$id] eq 'full_match') {
my $fullmatch = join(' ', @$terms);
$retval *= $mults->[$id] if ($value =~ /^$fullmatch$/);
} elsif ($bumps->[$id] eq 'word_order') {
my $wordorder = join('.*', @$terms);
$retval *= $mults->[$id] if ($value =~ /$wordorder/);
}
}
return $retval;
relation_owner_is
Signature: evergreen.relation_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT relation_owner_is(
$1, $2,
'Relation ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
relation_owner_is
Signature: evergreen.relation_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT relation_owner_is(
$1, $2, $3,
'Relation ' || quote_ident($1) || '.' || quote_ident($2) || ' should be owned by ' || quote_ident($3)
);
relation_owner_is
Signature: evergreen.relation_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner($1, $2);
BEGIN
-- Make sure the relation exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Relation ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN is(owner, $3, $4);
END;
relation_owner_is
Signature: evergreen.relation_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner($1);
BEGIN
-- Make sure the relation exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Relation ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
results_eq
Signature: evergreen.results_eq(refcursor, anyarray)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_eq( $1, $2, NULL::text );
results_eq
Signature: evergreen.results_eq(refcursor, anyarray, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
want REFCURSOR;
res TEXT;
BEGIN
OPEN want FOR SELECT $2[i]
FROM generate_series(array_lower($2, 1), array_upper($2, 1)) s(i);
res := results_eq($1, want, $3);
CLOSE want;
RETURN res;
END;
results_eq
Signature: evergreen.results_eq(refcursor, refcursor)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_eq( $1, $2, NULL::text );
results_eq
Signature: evergreen.results_eq(refcursor, refcursor, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have ALIAS FOR $1;
want ALIAS FOR $2;
have_rec RECORD;
want_rec RECORD;
have_found BOOLEAN;
want_found BOOLEAN;
rownum INTEGER := 1;
BEGIN
FETCH have INTO have_rec;
have_found := FOUND;
FETCH want INTO want_rec;
want_found := FOUND;
WHILE have_found OR want_found LOOP
IF have_rec IS DISTINCT FROM want_rec OR have_found <> want_found THEN
RETURN ok( false, $3 ) || E'\n' || diag(
' Results differ beginning at row ' || rownum || E':\n' ||
' have: ' || CASE WHEN have_found THEN have_rec::text ELSE 'NULL' END || E'\n' ||
' want: ' || CASE WHEN want_found THEN want_rec::text ELSE 'NULL' END
);
END IF;
rownum = rownum + 1;
FETCH have INTO have_rec;
have_found := FOUND;
FETCH want INTO want_rec;
want_found := FOUND;
END LOOP;
RETURN ok( true, $3 );
EXCEPTION
WHEN datatype_mismatch THEN
RETURN ok( false, $3 ) || E'\n' || diag(
E' Number of columns or their types differ between the queries' ||
CASE WHEN have_rec::TEXT = want_rec::text THEN '' ELSE E':\n' ||
' have: ' || CASE WHEN have_found THEN have_rec::text ELSE 'NULL' END || E'\n' ||
' want: ' || CASE WHEN want_found THEN want_rec::text ELSE 'NULL' END
END
);
END;
results_eq
Signature: evergreen.results_eq(refcursor, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_eq( $1, $2, NULL::text );
results_eq
Signature: evergreen.results_eq(refcursor, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
want REFCURSOR;
res TEXT;
BEGIN
OPEN want FOR EXECUTE _query($2);
res := results_eq($1, want, $3);
CLOSE want;
RETURN res;
END;
results_eq
Signature: evergreen.results_eq(text, anyarray)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_eq( $1, $2, NULL::text );
results_eq
Signature: evergreen.results_eq(text, anyarray, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have REFCURSOR;
want REFCURSOR;
res TEXT;
BEGIN
OPEN have FOR EXECUTE _query($1);
OPEN want FOR SELECT $2[i]
FROM generate_series(array_lower($2, 1), array_upper($2, 1)) s(i);
res := results_eq(have, want, $3);
CLOSE have;
CLOSE want;
RETURN res;
END;
results_eq
Signature: evergreen.results_eq(text, refcursor)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_eq( $1, $2, NULL::text );
results_eq
Signature: evergreen.results_eq(text, refcursor, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have REFCURSOR;
res TEXT;
BEGIN
OPEN have FOR EXECUTE _query($1);
res := results_eq(have, $2, $3);
CLOSE have;
RETURN res;
END;
results_eq
Signature: evergreen.results_eq(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_eq( $1, $2, NULL::text );
results_eq
Signature: evergreen.results_eq(text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have REFCURSOR;
want REFCURSOR;
res TEXT;
BEGIN
OPEN have FOR EXECUTE _query($1);
OPEN want FOR EXECUTE _query($2);
res := results_eq(have, want, $3);
CLOSE have;
CLOSE want;
RETURN res;
END;
results_ne
Signature: evergreen.results_ne(refcursor, anyarray)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_ne( $1, $2, NULL::text );
results_ne
Signature: evergreen.results_ne(refcursor, anyarray, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
want REFCURSOR;
res TEXT;
BEGIN
OPEN want FOR SELECT $2[i]
FROM generate_series(array_lower($2, 1), array_upper($2, 1)) s(i);
res := results_ne($1, want, $3);
CLOSE want;
RETURN res;
END;
results_ne
Signature: evergreen.results_ne(refcursor, refcursor)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_ne( $1, $2, NULL::text );
results_ne
Signature: evergreen.results_ne(refcursor, refcursor, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have ALIAS FOR $1;
want ALIAS FOR $2;
have_rec RECORD;
want_rec RECORD;
have_found BOOLEAN;
want_found BOOLEAN;
BEGIN
FETCH have INTO have_rec;
have_found := FOUND;
FETCH want INTO want_rec;
want_found := FOUND;
WHILE have_found OR want_found LOOP
IF have_rec IS DISTINCT FROM want_rec OR have_found <> want_found THEN
RETURN ok( true, $3 );
ELSE
FETCH have INTO have_rec;
have_found := FOUND;
FETCH want INTO want_rec;
want_found := FOUND;
END IF;
END LOOP;
RETURN ok( false, $3 );
EXCEPTION
WHEN datatype_mismatch THEN
RETURN ok( false, $3 ) || E'\n' || diag(
E' Columns differ between queries:\n' ||
' have: ' || CASE WHEN have_found THEN have_rec::text ELSE 'NULL' END || E'\n' ||
' want: ' || CASE WHEN want_found THEN want_rec::text ELSE 'NULL' END
);
END;
results_ne
Signature: evergreen.results_ne(refcursor, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_ne( $1, $2, NULL::text );
results_ne
Signature: evergreen.results_ne(refcursor, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
want REFCURSOR;
res TEXT;
BEGIN
OPEN want FOR EXECUTE _query($2);
res := results_ne($1, want, $3);
CLOSE want;
RETURN res;
END;
results_ne
Signature: evergreen.results_ne(text, anyarray)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_ne( $1, $2, NULL::text );
results_ne
Signature: evergreen.results_ne(text, anyarray, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have REFCURSOR;
want REFCURSOR;
res TEXT;
BEGIN
OPEN have FOR EXECUTE _query($1);
OPEN want FOR SELECT $2[i]
FROM generate_series(array_lower($2, 1), array_upper($2, 1)) s(i);
res := results_ne(have, want, $3);
CLOSE have;
CLOSE want;
RETURN res;
END;
results_ne
Signature: evergreen.results_ne(text, refcursor)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_ne( $1, $2, NULL::text );
results_ne
Signature: evergreen.results_ne(text, refcursor, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have REFCURSOR;
res TEXT;
BEGIN
OPEN have FOR EXECUTE _query($1);
res := results_ne(have, $2, $3);
CLOSE have;
RETURN res;
END;
results_ne
Signature: evergreen.results_ne(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT results_ne( $1, $2, NULL::text );
results_ne
Signature: evergreen.results_ne(text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
have REFCURSOR;
want REFCURSOR;
res TEXT;
BEGIN
OPEN have FOR EXECUTE _query($1);
OPEN want FOR EXECUTE _query($2);
res := results_ne(have, want, $3);
CLOSE have;
CLOSE want;
RETURN res;
END;
roles_are
Signature: evergreen.roles_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT roles_are( $1, 'There should be the correct roles' );
roles_are
Signature: evergreen.roles_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'roles',
ARRAY(
SELECT rolname
FROM pg_catalog.pg_roles
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT rolname
FROM pg_catalog.pg_roles
),
$2
);
row_eq
Signature: evergreen.row_eq(text, anyelement)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT row_eq($1, $2, NULL );
row_eq
Signature: evergreen.row_eq(text, anyelement, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
rec RECORD;
BEGIN
EXECUTE _query($1) INTO rec;
IF NOT rec IS DISTINCT FROM $2 THEN RETURN ok(true, $3); END IF;
RETURN ok(false, $3 ) || E'\n' || diag(
' have: ' || CASE WHEN rec IS NULL THEN 'NULL' ELSE rec::text END ||
E'\n want: ' || CASE WHEN $2 IS NULL THEN 'NULL' ELSE $2::text END
);
END;
rule_is_instead
Signature: evergreen.rule_is_instead(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT rule_is_instead($1, $2, 'Rule ' || quote_ident($2) || ' on relation ' || quote_ident($1) || ' should be an INSTEAD rule' );
rule_is_instead
Signature: evergreen.rule_is_instead(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT rule_is_instead( $1, $2, $3, 'Rule ' || quote_ident($3) || ' on relation ' || quote_ident($1) || '.' || quote_ident($2) || ' should be an INSTEAD rule' );
rule_is_instead
Signature: evergreen.rule_is_instead(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
is_it boolean := _is_instead($1, $2, $3);
BEGIN
IF is_it IS NOT NULL THEN RETURN ok( is_it, $4 ); END IF;
RETURN ok( FALSE, $4 ) || E'\n' || diag(
' Rule ' || quote_ident($3) || ' does not exist'
);
END;
rule_is_instead
Signature: evergreen.rule_is_instead(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
is_it boolean := _is_instead($1, $2);
BEGIN
IF is_it IS NOT NULL THEN RETURN ok( is_it, $3 ); END IF;
RETURN ok( FALSE, $3 ) || E'\n' || diag(
' Rule ' || quote_ident($2) || ' does not exist'
);
END;
rule_is_on
Signature: evergreen.rule_is_on(name, name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT rule_is_on(
$1, $2, $3, $4,
'Rule ' || quote_ident($3) || ' should be on ' || _expand_on(_contract_on($4)::char)
|| ' to ' || quote_ident($1) || '.' || quote_ident($2)
);
rule_is_on
Signature: evergreen.rule_is_on(name, name, name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
want char := _contract_on($4);
have char := _rule_on($1, $2, $3);
BEGIN
IF have IS NOT NULL THEN
RETURN is( _expand_on(have), _expand_on(want), $5 );
END IF;
RETURN ok( false, $5 ) || E'\n' || diag(
' Rule ' || quote_ident($3) || ' does not exist on '
|| quote_ident($1) || '.' || quote_ident($2)
);
END;
rule_is_on
Signature: evergreen.rule_is_on(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT rule_is_on(
$1, $2, $3,
'Rule ' || quote_ident($2) || ' should be on '
|| _expand_on(_contract_on($3)::char) || ' to ' || quote_ident($1)
);
rule_is_on
Signature: evergreen.rule_is_on(name, name, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
want char := _contract_on($3);
have char := _rule_on($1, $2);
BEGIN
IF have IS NOT NULL THEN
RETURN is( _expand_on(have), _expand_on(want), $4 );
END IF;
RETURN ok( false, $4 ) || E'\n' || diag(
' Rule ' || quote_ident($2) || ' does not exist on '
|| quote_ident($1)
);
END;
rules_are
Signature: evergreen.rules_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT rules_are( $1, $2, $3, 'Relation ' || quote_ident($1) || '.' || quote_ident($2) || ' should have the correct rules' );
rules_are
Signature: evergreen.rules_are(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'rules',
ARRAY(
SELECT r.rulename
FROM pg_catalog.pg_rewrite r
JOIN pg_catalog.pg_class c ON c.oid = r.ev_class
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE c.relname = $2
AND n.nspname = $1
EXCEPT
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
),
ARRAY(
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
EXCEPT
SELECT r.rulename
FROM pg_catalog.pg_rewrite r
JOIN pg_catalog.pg_class c ON c.oid = r.ev_class
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE c.relname = $2
AND n.nspname = $1
),
$4
);
rules_are
Signature: evergreen.rules_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT rules_are( $1, $2, 'Relation ' || quote_ident($1) || ' should have the correct rules' );
rules_are
Signature: evergreen.rules_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'rules',
ARRAY(
SELECT r.rulename
FROM pg_catalog.pg_rewrite r
JOIN pg_catalog.pg_class c ON c.oid = r.ev_class
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE c.relname = $1
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND pg_catalog.pg_table_is_visible(c.oid)
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
),
ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT r.rulename
FROM pg_catalog.pg_rewrite r
JOIN pg_catalog.pg_class c ON c.oid = r.ev_class
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
AND c.relname = $1
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND pg_catalog.pg_table_is_visible(c.oid)
),
$3
);
runtests
Signature: evergreen.runtests()
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM runtests( '^test' );
runtests
Signature: evergreen.runtests(name)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM runtests( $1, '^test' );
runtests
Signature: evergreen.runtests(name, text)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM _runner(
findfuncs( $1, '^startup' ),
findfuncs( $1, '^shutdown' ),
findfuncs( $1, '^setup' ),
findfuncs( $1, '^teardown' ),
findfuncs( $1, $2, '^(startup|shutdown|setup|teardown)' )
);
runtests
Signature: evergreen.runtests(text)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT * FROM _runner(
findfuncs( '^startup' ),
findfuncs( '^shutdown' ),
findfuncs( '^setup' ),
findfuncs( '^teardown' ),
findfuncs( $1, '^(startup|shutdown|setup|teardown)' )
);
schema_owner_is
Signature: evergreen.schema_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT schema_owner_is(
$1, $2,
'Schema ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
schema_owner_is
Signature: evergreen.schema_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_schema_owner($1);
BEGIN
-- Make sure the schema exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Schema ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
schema_privs_are
Signature: evergreen.schema_privs_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT schema_privs_are(
$1, $2, $3,
'Role ' || quote_ident($2) || ' should be granted '
|| CASE WHEN $3[1] IS NULL THEN 'no privileges' ELSE array_to_string($3, ', ') END
|| ' on schema ' || quote_ident($1)
);
schema_privs_are
Signature: evergreen.schema_privs_are(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_schema_privs( $2, $1::TEXT );
BEGIN
IF grants[1] = 'invalid_schema_name' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Schema ' || quote_ident($1) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
schemas_are
Signature: evergreen.schemas_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT schemas_are( $1, 'There should be the correct schemas' );
schemas_are
Signature: evergreen.schemas_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'schemas',
ARRAY(
SELECT nspname
FROM pg_catalog.pg_namespace
WHERE nspname NOT LIKE 'pg_%'
AND nspname <> 'information_schema'
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT nspname
FROM pg_catalog.pg_namespace
WHERE nspname NOT LIKE 'pg_%'
AND nspname <> 'information_schema'
),
$2
);
sequence_owner_is
Signature: evergreen.sequence_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT sequence_owner_is(
$1, $2,
'Sequence ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
sequence_owner_is
Signature: evergreen.sequence_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT sequence_owner_is(
$1, $2, $3,
'Sequence ' || quote_ident($1) || '.' || quote_ident($2) || ' should be owned by ' || quote_ident($3)
);
sequence_owner_is
Signature: evergreen.sequence_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('S'::char, $1, $2);
BEGIN
-- Make sure the sequence exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Sequence ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN is(owner, $3, $4);
END;
sequence_owner_is
Signature: evergreen.sequence_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('S'::char, $1);
BEGIN
-- Make sure the sequence exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Sequence ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
sequence_privs_are
Signature: evergreen.sequence_privs_are(name, name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT sequence_privs_are(
$1, $2, $3, $4,
'Role ' || quote_ident($3) || ' should be granted '
|| CASE WHEN $4[1] IS NULL THEN 'no privileges' ELSE array_to_string($4, ', ') END
|| ' on sequence '|| quote_ident($1) || '.' || quote_ident($2)
);
sequence_privs_are
Signature: evergreen.sequence_privs_are(name, name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_sequence_privs( $3, quote_ident($1) || '.' || quote_ident($2) );
BEGIN
IF grants[1] = 'undefined_table' THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
' Sequence ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
' Role ' || quote_ident($3) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $4, $5);
END;
sequence_privs_are
Signature: evergreen.sequence_privs_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT sequence_privs_are(
$1, $2, $3,
'Role ' || quote_ident($2) || ' should be granted '
|| CASE WHEN $3[1] IS NULL THEN 'no privileges' ELSE array_to_string($3, ', ') END
|| ' on sequence ' || quote_ident($1)
);
sequence_privs_are
Signature: evergreen.sequence_privs_are(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_sequence_privs( $2, quote_ident($1) );
BEGIN
IF grants[1] = 'undefined_table' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Sequence ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
sequences_are
Signature: evergreen.sequences_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'sequences', _extras('S', $1, $2), _missing('S', $1, $2),
'Schema ' || quote_ident($1) || ' should have the correct sequences'
);
sequences_are
Signature: evergreen.sequences_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'sequences', _extras('S', $1, $2), _missing('S', $1, $2), $3);
sequences_are
Signature: evergreen.sequences_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'sequences', _extras('S', $1), _missing('S', $1),
'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct sequences'
);
sequences_are
Signature: evergreen.sequences_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'sequences', _extras('S', $1), _missing('S', $1), $2);
server_privs_are
Signature: evergreen.server_privs_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT server_privs_are(
$1, $2, $3,
'Role ' || quote_ident($2) || ' should be granted '
|| CASE WHEN $3[1] IS NULL THEN 'no privileges' ELSE array_to_string($3, ', ') END
|| ' on server ' || quote_ident($1)
);
server_privs_are
Signature: evergreen.server_privs_are(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_server_privs( $2, $1::TEXT );
BEGIN
IF grants[1] = 'undefined_server' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Server ' || quote_ident($1) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
set_eq
Signature: evergreen.set_eq(text, anyarray)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, NULL::text, '' );
set_eq
Signature: evergreen.set_eq(text, anyarray, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, $3, '' );
set_eq
Signature: evergreen.set_eq(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, NULL::text, '' );
set_eq
Signature: evergreen.set_eq(text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, $3, '' );
set_has
Signature: evergreen.set_has(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, NULL::TEXT, 'EXCEPT', 'Missing' );
set_has
Signature: evergreen.set_has(text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, $3, 'EXCEPT', 'Missing' );
set_hasnt
Signature: evergreen.set_hasnt(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, NULL::TEXT, 'INTERSECT', 'Extra' );
set_hasnt
Signature: evergreen.set_hasnt(text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relcomp( $1, $2, $3, 'INTERSECT', 'Extra' );
set_ne
Signature: evergreen.set_ne(text, anyarray)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relne( $1, $2, NULL::text, '' );
set_ne
Signature: evergreen.set_ne(text, anyarray, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relne( $1, $2, $3, '' );
set_ne
Signature: evergreen.set_ne(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relne( $1, $2, NULL::text, '' );
set_ne
Signature: evergreen.set_ne(text, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _relne( $1, $2, $3, '' );
setup_delete_protect_rule
Signature: evergreen.setup_delete_protect_rule(t_schema text, t_table text, t_additional text DEFAULT ''::text, t_pkey text DEFAULT 'id'::text, t_deleted text DEFAULT 'deleted'::text)
Returns: void
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
DECLARE
rule_name TEXT;
table_name TEXT;
fq_pkey TEXT;
BEGIN
rule_name := 'protect_' || t_schema || '_' || t_table || '_delete';
table_name := t_schema || '.' || t_table;
fq_pkey := table_name || '.' || t_pkey;
EXECUTE 'DROP RULE IF EXISTS ' || rule_name || ' ON ' || table_name;
EXECUTE 'CREATE RULE ' || rule_name
|| ' AS ON DELETE TO ' || table_name
|| ' DO INSTEAD (UPDATE ' || table_name
|| ' SET ' || t_deleted || ' = TRUE '
|| ' WHERE OLD.' || t_pkey || ' = ' || fq_pkey
|| ' ; ' || t_additional || ')';
END;
skip
Signature: evergreen.skip(integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT skip(NULL, $1)
skip
Signature: evergreen.skip(integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT skip($2, $1)
skip
Signature: evergreen.skip(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT ok( TRUE ) || ' ' || diag( 'SKIP' || COALESCE(' ' || $1, '') );
skip
Signature: evergreen.skip(why text, how_many integer)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
output TEXT[];
BEGIN
output := '{}';
FOR i IN 1..how_many LOOP
output = array_append(
output,
ok( TRUE ) || ' ' || diag( 'SKIP' || COALESCE( ' ' || why, '') )
);
END LOOP;
RETURN array_to_string(output, E'\n');
END;
table_owner_is
Signature: evergreen.table_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT table_owner_is(
$1, $2,
'Table ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
table_owner_is
Signature: evergreen.table_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT table_owner_is(
$1, $2, $3,
'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should be owned by ' || quote_ident($3)
);
table_owner_is
Signature: evergreen.table_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('{r,p}'::char[], $1, $2);
BEGIN
-- Make sure the table exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Table ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN is(owner, $3, $4);
END;
table_owner_is
Signature: evergreen.table_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('{r,p}'::char[], $1);
BEGIN
-- Make sure the table exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Table ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
table_privs_are
Signature: evergreen.table_privs_are(name, name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT table_privs_are(
$1, $2, $3, $4,
'Role ' || quote_ident($3) || ' should be granted '
|| CASE WHEN $4[1] IS NULL THEN 'no privileges' ELSE array_to_string($4, ', ') END
|| ' on table ' || quote_ident($1) || '.' || quote_ident($2)
);
table_privs_are
Signature: evergreen.table_privs_are(name, name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_table_privs( $3, quote_ident($1) || '.' || quote_ident($2) );
BEGIN
IF grants[1] = 'undefined_table' THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
' Table ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $5) || E'\n' || diag(
' Role ' || quote_ident($3) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $4, $5);
END;
table_privs_are
Signature: evergreen.table_privs_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT table_privs_are(
$1, $2, $3,
'Role ' || quote_ident($2) || ' should be granted '
|| CASE WHEN $3[1] IS NULL THEN 'no privileges' ELSE array_to_string($3, ', ') END
|| ' on table ' || quote_ident($1)
);
table_privs_are
Signature: evergreen.table_privs_are(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_table_privs( $2, quote_ident($1) );
BEGIN
IF grants[1] = 'undefined_table' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Table ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
tableoid2name
Signature: evergreen.tableoid2name(oid)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
RETURN $1::regclass;
END;
tables_are
Signature: evergreen.tables_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'tables', _extras('{r,p}'::char[], $1, $2), _missing('{r,p}'::char[], $1, $2),
'Schema ' || quote_ident($1) || ' should have the correct tables'
);
tables_are
Signature: evergreen.tables_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'tables', _extras('{r,p}'::char[], $1, $2), _missing('{r,p}'::char[], $1, $2), $3);
tables_are
Signature: evergreen.tables_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'tables', _extras('{r,p}'::char[], $1), _missing('{r,p}'::char[], $1),
'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct tables'
);
tables_are
Signature: evergreen.tables_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'tables', _extras('{r,p}'::char[], $1), _missing('{r,p}'::char[], $1), $2);
tablespace_owner_is
Signature: evergreen.tablespace_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT tablespace_owner_is(
$1, $2,
'Tablespace ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
tablespace_owner_is
Signature: evergreen.tablespace_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_tablespace_owner($1);
BEGIN
-- Make sure the tablespace exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Tablespace ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
tablespace_privs_are
Signature: evergreen.tablespace_privs_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT tablespace_privs_are(
$1, $2, $3,
'Role ' || quote_ident($2) || ' should be granted '
|| CASE WHEN $3[1] IS NULL THEN 'no privileges' ELSE array_to_string($3, ', ') END
|| ' on tablespace ' || quote_ident($1)
);
tablespace_privs_are
Signature: evergreen.tablespace_privs_are(name, name, name[], text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
grants TEXT[] := _get_tablespaceprivs( $2, $1::TEXT );
BEGIN
IF grants[1] = 'undefined_tablespace' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Tablespace ' || quote_ident($1) || ' does not exist'
);
ELSIF grants[1] = 'undefined_role' THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
' Role ' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN _assets_are('privileges', grants, $3, $4);
END;
tablespaces_are
Signature: evergreen.tablespaces_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT tablespaces_are( $1, 'There should be the correct tablespaces' );
tablespaces_are
Signature: evergreen.tablespaces_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'tablespaces',
ARRAY(
SELECT spcname
FROM pg_catalog.pg_tablespace
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT spcname
FROM pg_catalog.pg_tablespace
),
$2
);
text_array_merge_unique
Signature: evergreen.text_array_merge_unique(text[], text[])
Returns: text[]
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT NULLIF(ARRAY(
SELECT * FROM UNNEST($1) x
UNION
SELECT * FROM UNNEST($2) y
),'{}');
throws_ilike
Signature: evergreen.throws_ilike(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT throws_ilike($1, $2, 'Should throw exception like ' || quote_literal($2) );
throws_ilike
Signature: evergreen.throws_ilike(text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
EXECUTE _query($1);
RETURN ok( FALSE, $3 ) || E'\n' || diag( ' no exception thrown' );
EXCEPTION WHEN OTHERS THEN
return _tlike( SQLERRM ~~* $2, SQLERRM, $2, $3 );
END;
throws_imatching
Signature: evergreen.throws_imatching(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT throws_imatching($1, $2, 'Should throw exception matching ' || quote_literal($2) );
throws_imatching
Signature: evergreen.throws_imatching(text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
EXECUTE _query($1);
RETURN ok( FALSE, $3 ) || E'\n' || diag( ' no exception thrown' );
EXCEPTION WHEN OTHERS THEN
return _tlike( SQLERRM ~* $2, SQLERRM, $2, $3 );
END;
throws_like
Signature: evergreen.throws_like(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT throws_like($1, $2, 'Should throw exception like ' || quote_literal($2) );
throws_like
Signature: evergreen.throws_like(text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
EXECUTE _query($1);
RETURN ok( FALSE, $3 ) || E'\n' || diag( ' no exception thrown' );
EXCEPTION WHEN OTHERS THEN
return _tlike( SQLERRM ~~ $2, SQLERRM, $2, $3 );
END;
throws_matching
Signature: evergreen.throws_matching(text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT throws_matching($1, $2, 'Should throw exception matching ' || quote_literal($2) );
throws_matching
Signature: evergreen.throws_matching(text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
EXECUTE _query($1);
RETURN ok( FALSE, $3 ) || E'\n' || diag( ' no exception thrown' );
EXCEPTION WHEN OTHERS THEN
return _tlike( SQLERRM ~ $2, SQLERRM, $2, $3 );
END;
throws_ok
Signature: evergreen.throws_ok(text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT throws_ok( $1, NULL, NULL, NULL );
throws_ok
Signature: evergreen.throws_ok(text, character, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
query TEXT := _query($1);
errcode ALIAS FOR $2;
errmsg ALIAS FOR $3;
desctext ALIAS FOR $4;
descr TEXT;
BEGIN
descr := COALESCE(
desctext,
'threw ' || errcode || ': ' || errmsg,
'threw ' || errcode,
'threw ' || errmsg,
'threw an exception'
);
EXECUTE query;
RETURN ok( FALSE, descr ) || E'\n' || diag(
' caught: no exception' ||
E'\n wanted: ' || COALESCE( errcode, 'an exception' )
);
EXCEPTION WHEN OTHERS OR ASSERT_FAILURE THEN
IF (errcode IS NULL OR SQLSTATE = errcode)
AND ( errmsg IS NULL OR SQLERRM = errmsg)
THEN
-- The expected errcode and/or message was thrown.
RETURN ok( TRUE, descr );
ELSE
-- This was not the expected errcode or errmsg.
RETURN ok( FALSE, descr ) || E'\n' || diag(
' caught: ' || SQLSTATE || ': ' || SQLERRM ||
E'\n wanted: ' || COALESCE( errcode, 'an exception' ) ||
COALESCE( ': ' || errmsg, '')
);
END IF;
END;
throws_ok
Signature: evergreen.throws_ok(text, integer)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT throws_ok( $1, $2::char(5), NULL, NULL );
throws_ok
Signature: evergreen.throws_ok(text, integer, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT throws_ok( $1, $2::char(5), $3, NULL );
throws_ok
Signature: evergreen.throws_ok(text, integer, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT throws_ok( $1, $2::char(5), $3, $4 );
throws_ok
Signature: evergreen.throws_ok(text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF octet_length($2) = 5 THEN
RETURN throws_ok( $1, $2::char(5), NULL, NULL );
ELSE
RETURN throws_ok( $1, NULL, $2, NULL );
END IF;
END;
throws_ok
Signature: evergreen.throws_ok(text, text, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF octet_length($2) = 5 THEN
RETURN throws_ok( $1, $2::char(5), $3, NULL );
ELSE
RETURN throws_ok( $1, NULL, $2, $3 );
END IF;
END;
todo
Signature: evergreen.todo(how_many integer)
Returns: SETOF boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM _add('todo', COALESCE(how_many, 1), '');
RETURN;
END;
todo
Signature: evergreen.todo(how_many integer, why text)
Returns: SETOF boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM _add('todo', COALESCE(how_many, 1), COALESCE(why, ''));
RETURN;
END;
todo
Signature: evergreen.todo(why text)
Returns: SETOF boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM _add('todo', 1, COALESCE(why, ''));
RETURN;
END;
todo
Signature: evergreen.todo(why text, how_many integer)
Returns: SETOF boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM _add('todo', COALESCE(how_many, 1), COALESCE(why, ''));
RETURN;
END;
todo_end
Signature: evergreen.todo_end()
Returns: SETOF boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
id integer;
BEGIN
id := _get_latest( 'todo', -1 );
IF id IS NULL THEN
RAISE EXCEPTION 'todo_end() called without todo_start()';
END IF;
EXECUTE 'DELETE FROM __tcache__ WHERE id = ' || id;
RETURN;
END;
todo_start
Signature: evergreen.todo_start()
Returns: SETOF boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM _add('todo', -1, '');
RETURN;
END;
todo_start
Signature: evergreen.todo_start(text)
Returns: SETOF boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
PERFORM _add('todo', -1, COALESCE($1, ''));
RETURN;
END;
trigger_is
Signature: evergreen.trigger_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT trigger_is(
$1, $2, $3,
'Trigger ' || quote_ident($2) || ' should call ' || quote_ident($3) || '()'
);
trigger_is
Signature: evergreen.trigger_is(name, name, name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT trigger_is(
$1, $2, $3, $4, $5,
'Trigger ' || quote_ident($3) || ' should call ' || quote_ident($4) || '.' || quote_ident($5) || '()'
);
trigger_is
Signature: evergreen.trigger_is(name, name, name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
pname text;
BEGIN
SELECT quote_ident(ni.nspname) || '.' || quote_ident(p.proname)
FROM pg_catalog.pg_trigger t
JOIN pg_catalog.pg_class ct ON ct.oid = t.tgrelid
JOIN pg_catalog.pg_namespace nt ON nt.oid = ct.relnamespace
JOIN pg_catalog.pg_proc p ON p.oid = t.tgfoid
JOIN pg_catalog.pg_namespace ni ON ni.oid = p.pronamespace
WHERE nt.nspname = $1
AND ct.relname = $2
AND t.tgname = $3
INTO pname;
RETURN is( pname, quote_ident($4) || '.' || quote_ident($5), $6 );
END;
trigger_is
Signature: evergreen.trigger_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
pname text;
BEGIN
SELECT p.proname
FROM pg_catalog.pg_trigger t
JOIN pg_catalog.pg_class ct ON ct.oid = t.tgrelid
JOIN pg_catalog.pg_proc p ON p.oid = t.tgfoid
WHERE ct.relname = $1
AND t.tgname = $2
AND pg_catalog.pg_table_is_visible(ct.oid)
INTO pname;
RETURN is( pname, $3::text, $4 );
END;
triggers_are
Signature: evergreen.triggers_are(name, name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT triggers_are( $1, $2, $3, 'Table ' || quote_ident($1) || '.' || quote_ident($2) || ' should have the correct triggers' );
triggers_are
Signature: evergreen.triggers_are(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'triggers',
ARRAY(
SELECT t.tgname
FROM pg_catalog.pg_trigger t
JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = $1
AND c.relname = $2
AND NOT t.tgisinternal
EXCEPT
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
),
ARRAY(
SELECT $3[i]
FROM generate_series(1, array_upper($3, 1)) s(i)
EXCEPT
SELECT t.tgname
FROM pg_catalog.pg_trigger t
JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = $1
AND c.relname = $2
AND NOT t.tgisinternal
),
$4
);
triggers_are
Signature: evergreen.triggers_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT triggers_are( $1, $2, 'Table ' || quote_ident($1) || ' should have the correct triggers' );
triggers_are
Signature: evergreen.triggers_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'triggers',
ARRAY(
SELECT t.tgname
FROM pg_catalog.pg_trigger t
JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname = $1
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND NOT t.tgisinternal
EXCEPT
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
),
ARRAY(
SELECT $2[i]
FROM generate_series(1, array_upper($2, 1)) s(i)
EXCEPT
SELECT t.tgname
FROM pg_catalog.pg_trigger t
JOIN pg_catalog.pg_class c ON c.oid = t.tgrelid
JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
AND n.nspname NOT IN ('pg_catalog', 'information_schema')
AND NOT t.tgisinternal
),
$3
);
type_owner_is
Signature: evergreen.type_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT type_owner_is(
$1, $2,
'Type ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
type_owner_is
Signature: evergreen.type_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT type_owner_is(
$1, $2, $3,
'Type ' || quote_ident($1) || '.' || quote_ident($2) || ' should be owned by ' || quote_ident($3)
);
type_owner_is
Signature: evergreen.type_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_type_owner($1, $2);
BEGIN
-- Make sure the type exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' Type ' || quote_ident($1) || '.' || quote_ident($2) || ' not found'
);
END IF;
RETURN is(owner, $3, $4);
END;
type_owner_is
Signature: evergreen.type_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_type_owner($1);
BEGIN
-- Make sure the type exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' Type ' || quote_ident($1) || ' not found'
);
END IF;
RETURN is(owner, $2, $3);
END;
types_are
Signature: evergreen.types_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, $2, 'Schema ' || quote_ident($1) || ' should have the correct types', NULL );
types_are
Signature: evergreen.types_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, $2, $3, NULL );
types_are
Signature: evergreen.types_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, 'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct types', NULL );
types_are
Signature: evergreen.types_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _types_are( $1, $2, NULL );
unaccent_and_squash
Signature: evergreen.unaccent_and_squash(arg text)
Returns: text
Language |
plpgsql |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
BEGIN
RETURN evergreen.lowercase(public.unaccent('public.unaccent', regexp_replace(arg, '[\s[:punct:]]','','g')));
END;
unalike
Signature: evergreen.unalike(anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _unalike( $1 !~~ $2, $1, $2, NULL );
unalike
Signature: evergreen.unalike(anyelement, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _unalike( $1 !~~ $2, $1, $2, $3 );
unialike
Signature: evergreen.unialike(anyelement, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _unalike( $1 !~~* $2, $1, $2, NULL );
unialike
Signature: evergreen.unialike(anyelement, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _unalike( $1 !~~* $2, $1, $2, $3 );
upgrade_deps_block_check
Signature: evergreen.upgrade_deps_block_check(my_db_patch text, my_applied_to text)
Returns: boolean
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
deprecates TEXT;
supersedes TEXT;
BEGIN
IF NOT evergreen.upgrade_verify_no_dep_conflicts( my_db_patch ) THEN
SELECT STRING_AGG(patch, ', ') INTO deprecates FROM evergreen.upgrade_list_applied_deprecates(my_db_patch);
SELECT STRING_AGG(patch, ', ') INTO supersedes FROM evergreen.upgrade_list_applied_supersedes(my_db_patch);
RAISE EXCEPTION '
Upgrade script % can not be applied:
applied deprecated scripts %
applied superseded scripts %
deprecated by %
superseded by %',
my_db_patch,
(SELECT ARRAY_AGG(patch) FROM evergreen.upgrade_list_applied_deprecates(my_db_patch)),
(SELECT ARRAY_AGG(patch) FROM evergreen.upgrade_list_applied_supersedes(my_db_patch)),
evergreen.upgrade_list_applied_deprecated(my_db_patch),
evergreen.upgrade_list_applied_superseded(my_db_patch);
END IF;
INSERT INTO config.upgrade_log (version, applied_to) VALUES (my_db_patch, my_applied_to);
RETURN TRUE;
END;
upgrade_list_applied_deprecated
Signature: evergreen.upgrade_list_applied_deprecated(my_db_patch text)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT db_patch
FROM config.db_patch_dependencies
WHERE ARRAY[$1]::TEXT[] && deprecates
upgrade_list_applied_deprecates
Signature: evergreen.upgrade_list_applied_deprecates(my_db_patch text)
Returns: SETOF patch
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT DISTINCT l.version
FROM config.upgrade_log l
JOIN config.db_patch_dependencies d ON (l.version = ANY(d.deprecates))
WHERE d.db_patch = $1
upgrade_list_applied_superseded
Signature: evergreen.upgrade_list_applied_superseded(my_db_patch text)
Returns: SETOF text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT db_patch
FROM config.db_patch_dependencies
WHERE ARRAY[$1]::TEXT[] && supersedes
upgrade_list_applied_supersedes
Signature: evergreen.upgrade_list_applied_supersedes(my_db_patch text)
Returns: SETOF patch
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT DISTINCT l.version
FROM config.upgrade_log l
JOIN config.db_patch_dependencies d ON (l.version = ANY(d.supersedes))
WHERE d.db_patch = $1
upgrade_verify_no_dep_conflicts
Signature: evergreen.upgrade_verify_no_dep_conflicts(my_db_patch text)
Returns: boolean
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT COUNT(*) = 0
FROM (SELECT * FROM evergreen.upgrade_list_applied_deprecates( $1 )
UNION
SELECT * FROM evergreen.upgrade_list_applied_supersedes( $1 )
UNION
SELECT * FROM evergreen.upgrade_list_applied_deprecated( $1 )
UNION
SELECT * FROM evergreen.upgrade_list_applied_superseded( $1 ))x
uppercase
Signature: evergreen.uppercase(text)
Returns: text
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
return uc(shift);
uri_escape
Signature: evergreen.uri_escape(text)
Returns: text
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
use URI::Escape;
my $input = shift;
return uri_escape_utf8($input);
uri_unescape
Signature: evergreen.uri_unescape(text)
Returns: text
Language |
plperlu |
Volatility |
IMMUTABLE |
Strict |
Yes (returns NULL on NULL input) |
Security Definer |
No |
my $input = shift;
$input =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg; # inline the RE, it is 700% faster than URI::Escape::uri_unescape
return $input;
users_are
Signature: evergreen.users_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT users_are( $1, 'There should be the correct users' );
users_are
Signature: evergreen.users_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'users',
ARRAY(
SELECT usename
FROM pg_catalog.pg_user
EXCEPT
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
),
ARRAY(
SELECT $1[i]
FROM generate_series(1, array_upper($1, 1)) s(i)
EXCEPT
SELECT usename
FROM pg_catalog.pg_user
),
$2
);
vandelay_import_item_imported_as_inh_fkey
Signature: evergreen.vandelay_import_item_imported_as_inh_fkey()
Returns: trigger
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
BEGIN
IF NEW.imported_as IS NULL THEN
RETURN NEW;
END IF;
PERFORM 1 FROM asset.copy WHERE id = NEW.imported_as;
IF NOT FOUND THEN
RAISE foreign_key_violation USING MESSAGE = FORMAT(
$$Referenced asset.copy id not found, imported_as:%s$$, NEW.imported_as
);
END IF;
RETURN NEW;
END;
view_owner_is
Signature: evergreen.view_owner_is(name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT view_owner_is(
$1, $2,
'View ' || quote_ident($1) || ' should be owned by ' || quote_ident($2)
);
view_owner_is
Signature: evergreen.view_owner_is(name, name, name)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT view_owner_is(
$1, $2, $3,
'View ' || quote_ident($1) || '.' || quote_ident($2) || ' should be owned by ' || quote_ident($3)
);
view_owner_is
Signature: evergreen.view_owner_is(name, name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('v'::char, $1, $2);
BEGIN
-- Make sure the view exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $4) || E'\n' || diag(
E' View ' || quote_ident($1) || '.' || quote_ident($2) || ' does not exist'
);
END IF;
RETURN is(owner, $3, $4);
END;
view_owner_is
Signature: evergreen.view_owner_is(name, name, text)
Returns: text
Language |
plpgsql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
DECLARE
owner NAME := _get_rel_owner('v'::char, $1);
BEGIN
-- Make sure the view exists.
IF owner IS NULL THEN
RETURN ok(FALSE, $3) || E'\n' || diag(
E' View ' || quote_ident($1) || ' does not exist'
);
END IF;
RETURN is(owner, $2, $3);
END;
views_are
Signature: evergreen.views_are(name, name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'views', _extras('v', $1, $2), _missing('v', $1, $2),
'Schema ' || quote_ident($1) || ' should have the correct views'
);
views_are
Signature: evergreen.views_are(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'views', _extras('v', $1, $2), _missing('v', $1, $2), $3);
views_are
Signature: evergreen.views_are(name[])
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are(
'views', _extras('v', $1), _missing('v', $1),
'Search path ' || pg_catalog.current_setting('search_path') || ' should have the correct views'
);
views_are
Signature: evergreen.views_are(name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _are( 'views', _extras('v', $1), _missing('v', $1), $2);
volatility_is
Signature: evergreen.volatility_is(name, name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT volatility_is(
$1, $2, $3, $4,
'Function ' || quote_ident($1) || '.' || quote_ident($2) || '(' ||
array_to_string($3, ', ') || ') should be ' || _refine_vol($4)
);
volatility_is
Signature: evergreen.volatility_is(name, name, name[], text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, $3, _vol($1, $2, $3), _refine_vol($4), $5 );
volatility_is
Signature: evergreen.volatility_is(name, name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT volatility_is(
$1, $2, $3,
'Function ' || quote_ident($1) || '.' || quote_ident($2)
|| '() should be ' || _refine_vol($3)
);
volatility_is
Signature: evergreen.volatility_is(name, name, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare($1, $2, _vol($1, $2), _refine_vol($3), $4 );
volatility_is
Signature: evergreen.volatility_is(name, name[], text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT volatility_is(
$1, $2, $3,
'Function ' || quote_ident($1) || '(' ||
array_to_string($2, ', ') || ') should be ' || _refine_vol($3)
);
volatility_is
Signature: evergreen.volatility_is(name, name[], text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, $2, _vol($1, $2), _refine_vol($3), $4 );
volatility_is
Signature: evergreen.volatility_is(name, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT volatility_is(
$1, $2,
'Function ' || quote_ident($1) || '() should be ' || _refine_vol($2)
);
volatility_is
Signature: evergreen.volatility_is(name, text, text)
Returns: text
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
SELECT _func_compare(NULL, $1, _vol($1), _refine_vol($2), $3 );
xml_escape
Signature: evergreen.xml_escape(str text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT REPLACE(REPLACE(REPLACE($1,
'&', '&'),
'<', '<'),
'>', '>');
xml_famous5_to_text
Signature: evergreen.xml_famous5_to_text(text)
Returns: text
Language |
sql |
Volatility |
IMMUTABLE |
Strict |
No |
Security Definer |
No |
SELECT REPLACE(
REPLACE(
REPLACE(
REPLACE(
REPLACE( $1, '<', '<'),
'>',
'>'
),
''',
$$'$$
), -- ' ... vim
'"',
'"'
),
'&',
'&'
);
xml_pretty_print
Signature: evergreen.xml_pretty_print(input xml)
Returns: xml
Language |
sql |
Volatility |
VOLATILE |
Strict |
No |
Security Definer |
No |
Simple pretty printer for XML, as written by Andrew Dunstan at http://goo.gl/zBHIk
SELECT xslt_process($1::text,
$$<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
$$::text)::XML
z3950_attr_name_is_valid
Signature: evergreen.z3950_attr_name_is_valid()
Returns: trigger
Language |
plpgsql |
Volatility |
STABLE |
Strict |
No |
Security Definer |
No |
Used by a config.z3950_index_field_map constraint trigger to verify z3950_attr_type maps.
BEGIN
PERFORM * FROM config.z3950_attr WHERE name = NEW.z3950_attr_type;
IF FOUND THEN
RETURN NULL;
END IF;
RAISE EXCEPTION '% is not a valid Z39.50 attribute type', NEW.z3950_attr_type;
END;