跳轉至

Polyfills on Athena

A polyfill is how Provisa gives a PostgreSQL client PostgreSQL's behaviour on Athena (dialect athena), as a serving engine or as a source a statement is sent to directly. Each feature has a read polyfill, how its values and operations are computed there, and a write polyfill, how its values reach it; each states its limitations. Its forms are written in Trino's SQL, which it runs.

This page lists every feature that has a polyfill or a limitation on Athena. A feature Athena does natively with no difference from PostgreSQL is left out and counted. The conformance runs check the omission: a feature left out that answers otherwise than PostgreSQL fails the run.

When Athena is a serving engine reading a source it attaches directly, it may push work into that source, with the source's semantics, so a result can depend on the pair; the cases known are fixed by hints, listed under each source.

Rules on this page: 179, of which 85 are only the name of a rewrite function. A rule is printed as the translator runs it: the PostgreSQL pattern, its holes written $name (typed with ::type), then the dialect's replacement.

8 of the grid's 154 features are native on Athena and left out.

FeatureRead polyfillRead limitationsWrite polyfillWrite limitations
array_ndims
The number of an array's dimensions.
array_ndims($a::anyarray)
=>
CAST(CASE WHEN cardinality($a) > 0 THEN length(regexp_extract(typeof($a), '^(array\()+')) / 6 END AS INTEGER)
array_dims
The text of an array's dimensions, such as [1:2][1:3].
array_dims($a::anyarray)
=>
array_join(transform(sequence(1, CAST(CASE WHEN cardinality($a) > 0 THEN length(regexp_extract(typeof($a), '^(array\()+')) / 6 END AS INTEGER)), d -> '[1:' || CAST(CASE d WHEN 1 THEN json_array_length(CAST($a AS JSON)) WHEN 2 THEN json_array_length(json_extract(CAST($a AS JSON), '$[0]')) WHEN 3 THEN json_array_length(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]')) WHEN 4 THEN json_array_length(json_extract(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]'), '$[0]')) WHEN 5 THEN json_array_length(json_extract(json_extract(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]'), '$[0]'), '$[0]')) WHEN 6 THEN json_array_length(json_extract(json_extract(json_extract(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]'), '$[0]'), '$[0]'), '$[0]')) END AS VARCHAR) || ']'), '')
array_lower
The lower bound of a dimension: 1, as a list's index starts there.
array_lower($a::anyarray, $d::integer)
=>
CAST(CASE WHEN $d BETWEEN 1 AND CAST(CASE WHEN cardinality($a) > 0 THEN length(regexp_extract(typeof($a), '^(array\()+')) / 6 END AS INTEGER) THEN 1 END AS INTEGER)
array_upper
The upper bound of a dimension: its length.
array_upper($a::anyarray, $d::integer)
=>
CAST(CASE WHEN $d BETWEEN 1 AND CAST(CASE WHEN cardinality($a) > 0 THEN length(regexp_extract(typeof($a), '^(array\()+')) / 6 END AS INTEGER) THEN CASE $d WHEN 1 THEN json_array_length(CAST($a AS JSON)) WHEN 2 THEN json_array_length(json_extract(CAST($a AS JSON), '$[0]')) WHEN 3 THEN json_array_length(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]')) WHEN 4 THEN json_array_length(json_extract(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]'), '$[0]')) WHEN 5 THEN json_array_length(json_extract(json_extract(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]'), '$[0]'), '$[0]')) WHEN 6 THEN json_array_length(json_extract(json_extract(json_extract(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]'), '$[0]'), '$[0]'), '$[0]')) END END AS INTEGER)
array_length
The length of a dimension; NULL for a dimension the array does not have.
array_length($a::anyarray, 1)
=>
CAST(CASE WHEN cardinality($a) > 0 THEN cardinality($a) END AS INTEGER)
array_length($a::anyarray, $d::integer)
=>
CAST(CASE WHEN $d BETWEEN 1 AND CAST(CASE WHEN cardinality($a) > 0 THEN length(regexp_extract(typeof($a), '^(array\()+')) / 6 END AS INTEGER) THEN CASE $d WHEN 1 THEN json_array_length(CAST($a AS JSON)) WHEN 2 THEN json_array_length(json_extract(CAST($a AS JSON), '$[0]')) WHEN 3 THEN json_array_length(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]')) WHEN 4 THEN json_array_length(json_extract(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]'), '$[0]')) WHEN 5 THEN json_array_length(json_extract(json_extract(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]'), '$[0]'), '$[0]')) WHEN 6 THEN json_array_length(json_extract(json_extract(json_extract(json_extract(json_extract(CAST($a AS JSON), '$[0]'), '$[0]'), '$[0]'), '$[0]'), '$[0]')) END END AS INTEGER)
array_fill
An array of a value repeated to the dimensions given.
array_fill($v::anyelement, $dims::integer[])
=>
CASE WHEN $dims IS NULL THEN fail('postgresql-error 22004: ' || 'dimension array or low bound array cannot be null' || ' <end of postgresql-error>') WHEN cardinality($dims) = 1 THEN repeat($v, $dims[1]) ELSE fail('postgresql-error 0A000: ' || 'array_fill does not read this value' || ' <end of postgresql-error>') END
array_fill($v::anyelement, $dims::integer[], $lower_bounds::integer[])
=>
CASE WHEN $dims IS NULL OR $lower_bounds IS NULL THEN fail('postgresql-error 22004: ' || 'dimension array or low bound array cannot be null' || ' <end of postgresql-error>') WHEN cardinality($dims) = 1 AND all_match($lower_bounds, _b -> _b = 1) THEN repeat($v, $dims[1]) ELSE fail('postgresql-error 0A000: ' || 'array_fill does not read this value' || ' <end of postgresql-error>') END
  • Only one dimension with a lower bound of 1: any other shape is refused. 0A000 array_fill does not read this value
array_eq
Two arrays equal, a NULL element equal to a NULL element.
array_eq($a::anyarray, $b::anyarray)
=>
CASE WHEN $a IS NULL OR $b IS NULL THEN CAST(NULL AS BOOLEAN) ELSE $a IS NOT DISTINCT FROM $b END
array_ne
Two arrays not equal, a NULL element equal to a NULL element.
array_ne($a::anyarray, $b::anyarray)
=>
CASE WHEN $a IS NULL OR $b IS NULL THEN CAST(NULL AS BOOLEAN) ELSE $a IS DISTINCT FROM $b END
array_position
The position of the first element equal to a value, a NULL equal to a NULL; NULL for none.
array_position($a::anycompatiblearray, $v::anycompatible)
=>
CAST(CASE WHEN cardinality($a) > 0 THEN element_at(filter(sequence(1, cardinality($a)), _i -> $a[_i] IS NOT DISTINCT FROM $v), 1) END AS INTEGER)
array_position($a::anycompatiblearray, $v::anycompatible, $s::integer)
=>
refused (its error is under the limitations)
  • Refused: array_position($a::anycompatiblearray, $v::anycompatible, $s::integer). 0A000 array_position() has no form on athena
array_positions
The positions of every element equal to a value, a NULL equal to a NULL.
array_positions($a::anycompatiblearray, $v::anycompatible)
=>
CASE WHEN cardinality($a) = 0 THEN CAST(ARRAY[] AS ARRAY(INTEGER)) ELSE CAST(filter(sequence(1, cardinality($a)), _i -> $a[_i] IS NOT DISTINCT FROM $v) AS ARRAY(INTEGER)) END
array_replace
Each element equal to a value replaced by another, a NULL equal to a NULL.
array_replace($a::anycompatiblearray, $v::anycompatible, $w::anycompatible)
=>
transform($a, _x -> CASE WHEN _x IS NOT DISTINCT FROM $v THEN $w ELSE _x END)
array_sample
A number of an array's elements, chosen at random.
array_sample($a::anyarray, $n::integer)
=>
CASE WHEN $a IS NULL OR $n IS NULL THEN NULL WHEN $n < 0 OR $n > cardinality($a) THEN fail('postgresql-error 22023: ' || 'sample size must be between 0 and ' || CAST(cardinality($a) AS VARCHAR) || ' <end of postgresql-error>') ELSE slice(shuffle($a), 1, $n) END
array_shuffle
An array's elements in a random order.
array_shuffle($a::anyarray)
=>
shuffle($a)
trim_array
An array without its last elements.
trim_array($a::anyarray, $n::integer)
=>
CASE WHEN $a IS NULL OR $n IS NULL THEN NULL WHEN $n < 0 OR $n > cardinality($a) THEN fail('postgresql-error 2202E: ' || 'number of elements to trim must be between 0 and ' || CAST(cardinality($a) AS VARCHAR) || ' <end of postgresql-error>') ELSE slice($a, 1, cardinality($a) - $n) END
generate_subscripts
The subscripts of a dimension, as rows, in either order.
generate_subscripts($a::anyarray, $d::integer, $reverse::boolean)
=>
refused (its error is under the limitations)
generate_subscripts($a::anyarray, $d::integer)
=>
refused (its error is under the limitations)
  • Refused: generate_subscripts($a::anyarray, $d::integer, $reverse::boolean). 0A000 generate_subscripts() has no form on athena
  • Refused: generate_subscripts($a::anyarray, $d::integer). 0A000 generate_subscripts() has no form on athena
array_append
An array with an element added at its end; a NULL array is read as an empty one.
array_append(NULL::anycompatiblearray, $v::anycompatible)
=>
ARRAY[$v]
array_append($a::anycompatiblearray, $v::anycompatible)
=>
CASE WHEN $a IS NULL THEN ARRAY[$v] ELSE $a || ARRAY[$v] END
array_prepend
An array with an element added at its start; a NULL array is read as an empty one.
array_prepend($v::anycompatible, NULL::anycompatiblearray)
=>
ARRAY[$v]
array_prepend($v::anycompatible, $a::anycompatiblearray)
=>
CASE WHEN $a IS NULL THEN ARRAY[$v] ELSE ARRAY[$v] || $a END
array_cat
Two arrays concatenated; a NULL array is the other one, and two NULL arrays are NULL.
array_cat(NULL::anycompatiblearray, $b::anycompatiblearray)
=>
$b
array_cat($a::anycompatiblearray, NULL::anycompatiblearray)
=>
$a
array_cat($a::anycompatiblearray, $b::anycompatiblearray)
=>
CASE WHEN $a IS NULL THEN $b WHEN $b IS NULL THEN $a ELSE concat($a, $b) END
array_lt
One array before another, a NULL element after any value.
array_lt($a::anyarray, $b::anyarray)
=>
function provisa.transpiler.polyfill.arrays.ordered_arrays: Two arrays ordered as btree's array_cmp orders them, on Trino, where both are said to hold
  • Only arrays of one dimension said to be of smallint, integer, bigint, boolean or date: any other (text, which orders by the database's collation, or a column of no said type) is refused by name, as Trino's own comparison refuses a NULL element.
array_le
One array before or equal to another, a NULL element after any value.
array_le($a::anyarray, $b::anyarray)
=>
function provisa.transpiler.polyfill.arrays.ordered_arrays: Two arrays ordered as btree's array_cmp orders them, on Trino, where both are said to hold
  • Only arrays of one dimension said to be of smallint, integer, bigint, boolean or date: any other (text, which orders by the database's collation, or a column of no said type) is refused by name, as Trino's own comparison refuses a NULL element.
array_gt
One array after another, a NULL element after any value.
array_gt($a::anyarray, $b::anyarray)
=>
function provisa.transpiler.polyfill.arrays.ordered_arrays: Two arrays ordered as btree's array_cmp orders them, on Trino, where both are said to hold
  • Only arrays of one dimension said to be of smallint, integer, bigint, boolean or date: any other (text, which orders by the database's collation, or a column of no said type) is refused by name, as Trino's own comparison refuses a NULL element.
array_ge
One array after or equal to another, a NULL element after any value.
array_ge($a::anyarray, $b::anyarray)
=>
function provisa.transpiler.polyfill.arrays.ordered_arrays: Two arrays ordered as btree's array_cmp orders them, on Trino, where both are said to hold
  • Only arrays of one dimension said to be of smallint, integer, bigint, boolean or date: any other (text, which orders by the database's collation, or a column of no said type) is refused by name, as Trino's own comparison refuses a NULL element.
array_larger
The larger of two arrays, a NULL element after any value.
array_larger($a::anyarray, $b::anyarray)
=>
function provisa.transpiler.polyfill.arrays.ordered_arrays: Two arrays ordered as btree's array_cmp orders them, on Trino, where both are said to hold
  • Only arrays of one dimension said to be of smallint, integer, bigint, boolean or date: any other (text, which orders by the database's collation, or a column of no said type) is refused by name, as Trino's own comparison refuses a NULL element.
array_smaller
The smaller of two arrays, a NULL element after any value.
array_smaller($a::anyarray, $b::anyarray)
=>
function provisa.transpiler.polyfill.arrays.ordered_arrays: Two arrays ordered as btree's array_cmp orders them, on Trino, where both are said to hold
  • Only arrays of one dimension said to be of smallint, integer, bigint, boolean or date: any other (text, which orders by the database's collation, or a column of no said type) is refused by name, as Trino's own comparison refuses a NULL element.
btarraycmp
btree's comparison of two arrays: -1, 0 or 1, a NULL element after any value.
btarraycmp($a::anyarray, $b::anyarray)
=>
function provisa.transpiler.polyfill.arrays.ordered_arrays: Two arrays ordered as btree's array_cmp orders them, on Trino, where both are said to hold
  • Only arrays of one dimension said to be of smallint, integer, bigint, boolean or date: any other (text, which orders by the database's collation, or a column of no said type) is refused by name, as Trino's own comparison refuses a NULL element.
pg_timezone_names
The zones of the tz database, each with its abbreviation, offset and daylight flag now.
pg_timezone_names()
=>
refused (its error is under the limitations)
  • Refused: pg_timezone_names(). 0A000 pg_timezone_names() has no form on athena
record_eq
Two records equal, a NULL field equal to a NULL field.
record_eq($a, $b)
=>
CASE WHEN $a IS NULL OR $b IS NULL THEN CAST(NULL AS BOOLEAN) ELSE $a IS NOT DISTINCT FROM $b END
record_ne
Two records not equal, a NULL field equal to a NULL field.
record_ne($a, $b)
=>
CASE WHEN $a IS NULL OR $b IS NULL THEN CAST(NULL AS BOOLEAN) ELSE $a IS DISTINCT FROM $b END
record_image_eq
Two records of equal images, a NULL field equal to a NULL field.
record_image_eq($a, $b)
=>
CASE WHEN $a IS NULL OR $b IS NULL THEN CAST(NULL AS BOOLEAN) ELSE $a IS NOT DISTINCT FROM $b END
record_image_ne
Two records of images not equal, a NULL field equal to a NULL field.
record_image_ne($a, $b)
=>
CASE WHEN $a IS NULL OR $b IS NULL THEN CAST(NULL AS BOOLEAN) ELSE $a IS DISTINCT FROM $b END
record_lt
One record before another.
record_lt($a, $b)
=>
refused (its error is under the limitations)
  • Refused: record_lt($a, $b). 0A000 record_lt() has no form on athena
  • Refused by name: Trino's comparison of two rows refuses a NULL field, which PostgreSQL orders after any value, and orders a text field by its code points.
record_le
One record before or equal to another.
record_le($a, $b)
=>
refused (its error is under the limitations)
  • Refused: record_le($a, $b). 0A000 record_le() has no form on athena
  • Refused by name: Trino's comparison of two rows refuses a NULL field, which PostgreSQL orders after any value, and orders a text field by its code points.
record_gt
One record after another.
record_gt($a, $b)
=>
refused (its error is under the limitations)
  • Refused: record_gt($a, $b). 0A000 record_gt() has no form on athena
  • Refused by name: Trino's comparison of two rows refuses a NULL field, which PostgreSQL orders after any value, and orders a text field by its code points.
record_ge
One record after or equal to another.
record_ge($a, $b)
=>
refused (its error is under the limitations)
  • Refused: record_ge($a, $b). 0A000 record_ge() has no form on athena
  • Refused by name: Trino's comparison of two rows refuses a NULL field, which PostgreSQL orders after any value, and orders a text field by its code points.
record_image_lt
One record image before another.
record_image_lt($a, $b)
=>
refused (its error is under the limitations)
  • Refused: record_image_lt($a, $b). 0A000 record_image_lt() has no form on athena
  • Refused by name: Trino's comparison of two rows refuses a NULL field, which PostgreSQL orders after any value, and orders a text field by its code points.
record_image_le
One record image before or equal to another.
record_image_le($a, $b)
=>
refused (its error is under the limitations)
  • Refused: record_image_le($a, $b). 0A000 record_image_le() has no form on athena
  • Refused by name: Trino's comparison of two rows refuses a NULL field, which PostgreSQL orders after any value, and orders a text field by its code points.
record_image_gt
One record image after another.
record_image_gt($a, $b)
=>
refused (its error is under the limitations)
  • Refused: record_image_gt($a, $b). 0A000 record_image_gt() has no form on athena
  • Refused by name: Trino's comparison of two rows refuses a NULL field, which PostgreSQL orders after any value, and orders a text field by its code points.
record_image_ge
One record image after or equal to another.
record_image_ge($a, $b)
=>
refused (its error is under the limitations)
  • Refused: record_image_ge($a, $b). 0A000 record_image_ge() has no form on athena
  • Refused by name: Trino's comparison of two rows refuses a NULL field, which PostgreSQL orders after any value, and orders a text field by its code points.
money_text
money's text, as cash_out writes it: $1,234.50, NULL for a NULL.
money_text($v)
=>
CASE WHEN $v IS NULL THEN CAST(NULL AS VARCHAR) ELSE CASE WHEN $v < 0 THEN '-' ELSE '' END || format('$%,.2f', abs(CAST($v AS DECIMAL(19,2)))) END
interval_in
interval_in of a NULL: PostgreSQL's NULL of interval; of a constant, its interval.
interval_in(NULL, $o, $t)
=>
refused (its error is under the limitations)
interval_in($v, NULL, $t)
=>
refused (its error is under the limitations)
interval_in($v, $o, NULL)
=>
refused (its error is under the limitations)
interval_in('infinity', $o, $t)
=>
refused (its error is under the limitations)
interval_in('-infinity', $o, $t)
=>
refused (its error is under the limitations)
  • Refused: interval_in(NULL, $o, $t). 0A000 interval_in does not read this value
  • Refused: interval_in($v, NULL, $t). 0A000 interval_in does not read this value
  • Refused: interval_in($v, $o, NULL). 0A000 interval_in does not read this value
  • Refused: interval_in('infinity', $o, $t). 0A000 interval_in does not read this value
  • Refused: interval_in('-infinity', $o, $t). 0A000 interval_in does not read this value
  • A NULL of interval would be described as text: the call is refused. 0A000 interval_in does not read this value
  • A constant is folded to its text, which pgwire describes as interval; infinity, which pgwire has no interval value of, is refused. 0A000 interval_in does not read this value
jsonb_in
jsonb_in of a NULL: PostgreSQL's NULL of jsonb.
jsonb_in(NULL)
=>
refused (its error is under the limitations)
  • Refused: jsonb_in(NULL). 0A000 jsonb_in does not read this value
  • A NULL of jsonb would be described as text: the call is refused. 0A000 jsonb_in does not read this value
xid8in
xid8in of a NULL: PostgreSQL's NULL of xid8.
xid8in(NULL)
=>
refused (its error is under the limitations)
  • Refused: xid8in(NULL). 0A000 xid8in does not read this value
  • A NULL of xid8 would be described as text: the call is refused. 0A000 xid8in does not read this value
regexp_replace
The first match replaced, or every one with the g flag; i and c set the case.
regexp_replace($s, $p, $r, $f::text)
=>
function provisa.transpiler.polyfill.regex.flagged: regexp_replace with PostgreSQL's flags read: the first match or every one, its case.
  • A flag other than g, i, c and t, a flag that is no constant, and a first match whose pattern or replacement is no constant, whose replacement names the whole match (\0) or whose pattern names a group by number are refused. 0A000 regexp_replace() has no form on athena
pg_collation_for
The collation a COLLATE clause gives a value, as quote_ident writes its name.
pg_collation_for($v::text COLLATE "default")
=>
'"default"'
pg_collation_for($v::character COLLATE "default")
=>
'"default"'
pg_collation_for($v::name COLLATE "default")
=>
'"default"'
pg_collation_for($v::text COLLATE "C")
=>
'"C"'
pg_collation_for($v::character COLLATE "C")
=>
'"C"'
pg_collation_for($v::name COLLATE "C")
=>
'"C"'
pg_collation_for($v::text COLLATE "POSIX")
=>
'"POSIX"'
pg_collation_for($v::character COLLATE "POSIX")
=>
'"POSIX"'
pg_collation_for($v::name COLLATE "POSIX")
=>
'"POSIX"'
pg_collation_for($v::text COLLATE "ucs_basic")
=>
'ucs_basic'
pg_collation_for($v::character COLLATE "ucs_basic")
=>
'ucs_basic'
pg_collation_for($v::name COLLATE "ucs_basic")
=>
'ucs_basic'
pg_collation_for($v::text COLLATE ucs_basic)
=>
'ucs_basic'
pg_collation_for($v::character COLLATE ucs_basic)
=>
'ucs_basic'
pg_collation_for($v::name COLLATE ucs_basic)
=>
'ucs_basic'
pg_collation_for($v::text COLLATE "unicode")
=>
'unicode'
pg_collation_for($v::character COLLATE "unicode")
=>
'unicode'
pg_collation_for($v::name COLLATE "unicode")
=>
'unicode'
pg_collation_for($v::text COLLATE unicode)
=>
'unicode'
pg_collation_for($v::character COLLATE unicode)
=>
'unicode'
pg_collation_for($v::name COLLATE unicode)
=>
'unicode'
pg_collation_for($v::text COLLATE "pg_c_utf8")
=>
'pg_c_utf8'
pg_collation_for($v::character COLLATE "pg_c_utf8")
=>
'pg_c_utf8'
pg_collation_for($v::name COLLATE "pg_c_utf8")
=>
'pg_c_utf8'
pg_collation_for($v::text COLLATE pg_c_utf8)
=>
'pg_c_utf8'
pg_collation_for($v::character COLLATE pg_c_utf8)
=>
'pg_c_utf8'
pg_collation_for($v::name COLLATE pg_c_utf8)
=>
'pg_c_utf8'
pg_collation_for($v COLLATE $c)
=>
refused (its error is under the limitations)
  • Refused: pg_collation_for($v COLLATE $c). 0A000 pg_collation_for does not read this value
  • Only the built-in collations (default, C, POSIX, ucs_basic, unicode, pg_c_utf8) of a text, character or name value: any other COLLATE is refused. 0A000 pg_collation_for does not read this value
text_lt
One text before another in the database's collation.
function provisa.transpiler.polyfill.trino.refused_text_lt: text_lt: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
text_le
One text before or equal to another in the database's collation.
function provisa.transpiler.polyfill.trino.refused_text_le: text_le: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
text_gt
One text after another in the database's collation.
function provisa.transpiler.polyfill.trino.refused_text_gt: text_gt: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
text_ge
One text after or equal to another in the database's collation.
function provisa.transpiler.polyfill.trino.refused_text_ge: text_ge: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
text_larger
The later of two texts in the database's collation.
function provisa.transpiler.polyfill.trino.refused_text_larger: text_larger: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
text_smaller
The earlier of two texts in the database's collation.
function provisa.transpiler.polyfill.trino.refused_text_smaller: text_smaller: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
bpcharlt
One character string before another in the database's collation.
function provisa.transpiler.polyfill.trino.refused_bpcharlt: bpcharlt: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
bpcharle
One character string before or equal to another in the database's collation.
function provisa.transpiler.polyfill.trino.refused_bpcharle: bpcharle: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
bpchargt
One character string after another in the database's collation.
function provisa.transpiler.polyfill.trino.refused_bpchargt: bpchargt: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
bpcharge
One character string after or equal to another in the database's collation.
function provisa.transpiler.polyfill.trino.refused_bpcharge: bpcharge: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
bpcharcmp
btree's comparison of two character strings in the database's collation.
function provisa.transpiler.polyfill.trino.refused_bpcharcmp: bpcharcmp: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
bpchar_larger
The later of two character strings in the database's collation.
function provisa.transpiler.polyfill.trino.refused_bpchar_larger: bpchar_larger: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
bpchar_smaller
The earlier of two character strings in the database's collation.
function provisa.transpiler.polyfill.trino.refused_bpchar_smaller: bpchar_smaller: refused by name: Trino has no collation, and orders text by its code points.
  • Refused by name: Trino has no collation, and orders text by its code points.
ts_delete
A vector without the lexemes a list holds; a NULL item of the list is skipped.
ts_delete_array($v, $x)
=>
CASE WHEN $v IS NULL THEN NULL ELSE CASE WHEN CASE WHEN coalesce(NOT regexp_like($v, '\A(?:''(?:[^'']|'''')*''(?::[0-9]+[A-C]?(?:,[0-9]+[A-C]?)*)?(?: ''(?:[^'']|'''')*''(?::[0-9]+[A-C]?(?:,[0-9]+[A-C]?)*)?)*)?\z'), false) THEN CAST(CAST('postgresql-error 0A000: ts_delete does not read this value <end of postgresql-error>' AS INTEGER) AS INTEGER) ELSE 0 END = 0 THEN array_join(filter(regexp_extract_all($v, '''(?:[^'']|'''')*''(?::[0-9]+[A-C]?(?:,[0-9]+[A-C]?)*)?'), _t -> NOT coalesce(contains($x, replace(replace(coalesce(regexp_extract(_t, '\A''((?:[^'']|'''')*)''', 1), ''), '''''', ''''), '\\', '\')), false)), ' ') END END
inetand
The bitwise AND of two addresses.
function provisa.transpiler.polyfill.trino.refused_inetand: inetand: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
inetor
The bitwise OR of two addresses.
function provisa.transpiler.polyfill.trino.refused_inetor: inetor: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_cmp
btree's comparison of two networks.
function provisa.transpiler.polyfill.trino.refused_network_cmp: network_cmp: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_eq
Two networks equal.
function provisa.transpiler.polyfill.trino.refused_network_eq: network_eq: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_ne
Two networks not equal.
function provisa.transpiler.polyfill.trino.refused_network_ne: network_ne: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_lt
One network before another.
function provisa.transpiler.polyfill.trino.refused_network_lt: network_lt: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_le
One network before or equal to another.
function provisa.transpiler.polyfill.trino.refused_network_le: network_le: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_gt
One network after another.
function provisa.transpiler.polyfill.trino.refused_network_gt: network_gt: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_ge
One network after or equal to another.
function provisa.transpiler.polyfill.trino.refused_network_ge: network_ge: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_larger
The later of two networks.
function provisa.transpiler.polyfill.trino.refused_network_larger: network_larger: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_smaller
The earlier of two networks.
function provisa.transpiler.polyfill.trino.refused_network_smaller: network_smaller: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_overlap
Two networks that hold an address in common.
function provisa.transpiler.polyfill.trino.refused_network_overlap: network_overlap: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_sub
A network strictly within another.
function provisa.transpiler.polyfill.trino.refused_network_sub: network_sub: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_subeq
A network within or equal to another.
function provisa.transpiler.polyfill.trino.refused_network_subeq: network_subeq: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_sup
A network strictly holding another.
function provisa.transpiler.polyfill.trino.refused_network_sup: network_sup: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
network_supeq
A network holding or equal to another.
function provisa.transpiler.polyfill.trino.refused_network_supeq: network_supeq: Refused by name: the old table's form is a subquery Trino reads as correlated.
  • Refused by name: the old table's form is a subquery Trino reads as correlated.
broadcast
The broadcast address of a network.
function provisa.transpiler.polyfill.trino.refused_broadcast: broadcast of an inet or cidr: refused by name, as the dialect has no such type.
  • Refused by name: the dialect has no inet type, and no form of it.
family
An address's family: 4 or 6.
function provisa.transpiler.polyfill.trino.refused_family: family of an inet or cidr: refused by name, as the dialect has no such type.
  • Refused by name: the dialect has no inet type, and no form of it.
host
An address's text, without its mask length.
function provisa.transpiler.polyfill.trino.refused_host: host of an inet or cidr: refused by name, as the dialect has no such type.
  • Refused by name: the dialect has no inet type, and no form of it.
network
A network's address, its host bits cleared.
function provisa.transpiler.polyfill.trino.refused_network: network of an inet or cidr: refused by name, as the dialect has no such type.
  • Refused by name: the dialect has no inet type, and no form of it.
macaddr_and
The bitwise AND of two MAC addresses.
macaddr_and($a, $b)
=>
regexp_replace(lpad(to_base(bitwise_and(from_base(lower(regexp_replace(CAST($a AS VARCHAR), '[^0-9A-Fa-f]', '')), 16), from_base(lower(regexp_replace(CAST($b AS VARCHAR), '[^0-9A-Fa-f]', '')), 16)), 16), 12, '0'), '(..)(..)(..)(..)(..)(..)', '$1:$2:$3:$4:$5:$6')
macaddr_or
The bitwise OR of two MAC addresses.
macaddr_or($a, $b)
=>
regexp_replace(lpad(to_base(bitwise_or(from_base(lower(regexp_replace(CAST($a AS VARCHAR), '[^0-9A-Fa-f]', '')), 16), from_base(lower(regexp_replace(CAST($b AS VARCHAR), '[^0-9A-Fa-f]', '')), 16)), 16), 12, '0'), '(..)(..)(..)(..)(..)(..)', '$1:$2:$3:$4:$5:$6')
macaddr_not
The bitwise NOT of a MAC address.
macaddr_not($a)
=>
regexp_replace(lpad(to_base(bitwise_and(bitwise_not(from_base(lower(regexp_replace(CAST($a AS VARCHAR), '[^0-9A-Fa-f]', '')), 16)), 281474976710655), 16), 12, '0'), '(..)(..)(..)(..)(..)(..)', '$1:$2:$3:$4:$5:$6')
macaddr8_and
The bitwise AND of two EUI-64 MAC addresses.
function provisa.transpiler.polyfill.trino.refused_macaddr8_and: macaddr8_and: Refused by name: a macaddr8's 64 bits are past what a Trino bigint holds unsigned.
  • Refused by name: a macaddr8's 64 bits are past what a Trino bigint holds unsigned.
macaddr8_or
The bitwise OR of two EUI-64 MAC addresses.
function provisa.transpiler.polyfill.trino.refused_macaddr8_or: macaddr8_or: Refused by name: a macaddr8's 64 bits are past what a Trino bigint holds unsigned.
  • Refused by name: a macaddr8's 64 bits are past what a Trino bigint holds unsigned.
macaddr8_not
The bitwise NOT of an EUI-64 MAC address.
function provisa.transpiler.polyfill.trino.refused_macaddr8_not: macaddr8_not: Refused by name: a macaddr8's 64 bits are past what a Trino bigint holds unsigned.
  • Refused by name: a macaddr8's 64 bits are past what a Trino bigint holds unsigned.
macaddr8_set7bit
An EUI-64 MAC address with its 7th bit set.
function provisa.transpiler.polyfill.trino.refused_macaddr8_set7bit: macaddr8_set7bit: Refused by name: a macaddr8's 64 bits are past what a Trino bigint holds unsigned.
  • Refused by name: a macaddr8's 64 bits are past what a Trino bigint holds unsigned.
trunc
A MAC address with its last three (macaddr) or five (macaddr8) bytes set to zero.
trunc($m)
=>
function provisa.transpiler.polyfill.network.truncated_address: trunc of a MAC address: its first three bytes, the rest zero; any other trunc is kept.
  • A MAC address whose type no statement says is read as a number, and is Trino's own truncate.
xid8
A value of type xid8.
function provisa.transpiler.polyfill.unheld.xid8_value: A value cast to xid8: refused by name, as Trino has no unsigned 64-bit type (sqlglot writes
  • Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
xid
The 32-bit transaction ID of an xid8.
function provisa.transpiler.polyfill.trino.refused_xid: xid: Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
  • Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
xid8cmp
btree's comparison of two xid8 values.
function provisa.transpiler.polyfill.trino.refused_xid8cmp: xid8cmp: Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
  • Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
xid8_larger
The larger of two xid8 values.
function provisa.transpiler.polyfill.trino.refused_xid8_larger: xid8_larger: Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
  • Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
xid8_smaller
The smaller of two xid8 values.
function provisa.transpiler.polyfill.trino.refused_xid8_smaller: xid8_smaller: Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
  • Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
pg_xact_status
A transaction's commit status.
function provisa.transpiler.polyfill.trino.refused_pg_xact_status: pg_xact_status: Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
  • Refused by name: an xid8 is a 64-bit unsigned number, of a type Trino does not have.
pg_lsn_pli
A WAL position moved forward by a number of bytes.
function provisa.transpiler.polyfill.trino.refused_pg_lsn_pli: pg_lsn_pli: Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
  • Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
pg_lsn_mii
A WAL position moved back by a number of bytes.
function provisa.transpiler.polyfill.trino.refused_pg_lsn_mii: pg_lsn_mii: Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
  • Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
numeric_pl_pg_lsn
A number of bytes added to a WAL position.
function provisa.transpiler.polyfill.trino.refused_numeric_pl_pg_lsn: numeric_pl_pg_lsn: Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
  • Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
pg_lsn_larger
The later of two WAL positions.
function provisa.transpiler.polyfill.trino.refused_pg_lsn_larger: pg_lsn_larger: Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
  • Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
pg_lsn_smaller
The earlier of two WAL positions.
function provisa.transpiler.polyfill.trino.refused_pg_lsn_smaller: pg_lsn_smaller: Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
  • Refused by name: a pg_lsn's position is a 64-bit unsigned number, past the literals and the integers Trino has.
lower
The lower bound of a range or multirange.
function provisa.transpiler.polyfill.trino.refused_lower: lower of a range or multirange: refused by name, as Trino has no such type.
  • Of a range or multirange the statement says: refused by name, as Trino has no such type. Of anything else, Trino's own.
upper
The upper bound of a range or multirange.
function provisa.transpiler.polyfill.trino.refused_upper: upper of a range or multirange: refused by name, as Trino has no such type.
  • Of a range or multirange the statement says: refused by name, as Trino has no such type. Of anything else, Trino's own.
unnest
The ranges of a multirange, or the lexemes of a tsvector, as rows.
function provisa.transpiler.polyfill.trino.refused_unnest: unnest of a range, multirange or tsvector: refused by name.
  • Of a range or multirange the statement says: refused by name, as Trino has no such type. Of a tsvector: refused by name, as its rows are three columns (lexeme, positions, weights) of a text the engine holds it as. Of anything else, Trino's own.
max
The largest value of an aggregate.
function provisa.transpiler.polyfill.trino.refused_max: max of an inet, a cidr or an xid8: refused by name, as Trino has no such type.
  • Of an inet, a cidr or an xid8 the statement says: refused by name, as Trino has no such type. Of anything else, Trino's own.
min
The smallest value of an aggregate.
function provisa.transpiler.polyfill.trino.refused_min: min of an inet, a cidr or an xid8: refused by name, as Trino has no such type.
  • Of an inet, a cidr or an xid8 the statement says: refused by name, as Trino has no such type. Of anything else, Trino's own.
int2_sum
A step of an integer sum, in a bigint that wraps past its range.
int2_sum($a, $b)
=>
CASE WHEN $a IS NULL THEN CAST($b AS BIGINT) WHEN $b IS NULL THEN CAST($a AS BIGINT) ELSE CAST((((CAST($a AS DECIMAL(38, 0)) + CAST($b AS DECIMAL(38, 0))) + CAST('9223372036854775808' AS DECIMAL(38, 0))) % CAST('18446744073709551616' AS DECIMAL(38, 0)) + CAST('18446744073709551616' AS DECIMAL(38, 0))) % CAST('18446744073709551616' AS DECIMAL(38, 0)) - CAST('9223372036854775808' AS DECIMAL(38, 0)) AS BIGINT) END
int4_sum
A step of an integer sum, in a bigint that wraps past its range.
int4_sum($a, $b)
=>
CASE WHEN $a IS NULL THEN CAST($b AS BIGINT) WHEN $b IS NULL THEN CAST($a AS BIGINT) ELSE CAST((((CAST($a AS DECIMAL(38, 0)) + CAST($b AS DECIMAL(38, 0))) + CAST('9223372036854775808' AS DECIMAL(38, 0))) % CAST('18446744073709551616' AS DECIMAL(38, 0)) + CAST('18446744073709551616' AS DECIMAL(38, 0))) % CAST('18446744073709551616' AS DECIMAL(38, 0)) - CAST('9223372036854775808' AS DECIMAL(38, 0)) AS BIGINT) END
int8shl
A bigint shifted left, its count taken modulo 64, the result wrapping.
int8shl($a, $b)
=>
bitwise_left_shift(CAST($a AS BIGINT), CAST(bitwise_and($b, 63) AS INTEGER))
int2shr
A smallint shifted right, its sign kept, its count taken modulo 32.
int2shr($a, $b)
=>
CAST(bitwise_right_shift_arithmetic(CAST($a AS INTEGER), CAST(bitwise_and($b, 31) AS INTEGER)) AS SMALLINT)
int4shr
A integer shifted right, its sign kept, its count taken modulo 32.
int4shr($a, $b)
=>
CAST(bitwise_right_shift_arithmetic(CAST($a AS INTEGER), CAST(bitwise_and($b, 31) AS INTEGER)) AS INTEGER)
int8shr
A bigint shifted right, its sign kept, its count taken modulo 64.
int8shr($a, $b)
=>
CAST(bitwise_right_shift_arithmetic(CAST($a AS BIGINT), CAST(bitwise_and($b, 63) AS INTEGER)) AS BIGINT)
factorial
The product of the integers from 1 to n.
factorial($n)
=>
CASE WHEN $n IS NULL THEN CAST(NULL AS DECIMAL(38, 0)) WHEN $n < 0 THEN fail('postgresql-error 22003: factorial of a negative number is undefined<end of postgresql-error>') WHEN $n > 33 THEN fail('postgresql-error 0A000: factorial does not read this value<end of postgresql-error>') ELSE reduce(sequence(1, greatest($n, 1)), CAST(1 AS DECIMAL(38, 0)), (_s, _x) -> _s * _x, _s -> _s) END
  • Past 33, whose factorial a decimal of 38 digits does not hold, refused with 0A000, where PostgreSQL answers its exact digits.
numeric
An integer as a numeric.
numeric($v)
=>
function provisa.transpiler.polyfill.numbers.numeric_of_an_integer: numeric of an integer: its cast to DECIMAL(38, 0); of a json value, refused.
  • Of a json or jsonb value, refused by name.
bool
An integer as a truth value: false for 0.
bool($v)
=>
function provisa.transpiler.polyfill.numbers.bool_of_an_integer: bool of an integer: its cast to BOOLEAN; of a json value, refused.
  • Of a json or jsonb value, refused by name.
oid
A bigint as an oid.
oid($v)
=>
CASE WHEN $v < 0 OR $v > 4294967295 THEN fail('postgresql-error 22003: OID out of range<end of postgresql-error>') ELSE CAST($v AS BIGINT) END
random
A uniform random integer between two bounds, both included.
random($lo, $hi)
=>
function provisa.transpiler.polyfill.numbers.random_between: random of two integers: a uniform integer from the one to the other, both included.
  • Bounds 2^53 or more apart, and bounds of no said integer type, refused by name: a double draws no wider range exactly.
date_mi
The days from one date to another.
date_mi($a, $b)
=>
CAST(date_diff('day', CAST($b AS DATE), CAST($a AS DATE)) AS INTEGER)
date_pli
A date moved forward by a number of days.
date_pli($a, $b)
=>
CASE WHEN (date_diff('day', DATE '2000-01-01', CAST($a AS DATE)) + CAST($b AS BIGINT)) < -2451545 OR (date_diff('day', DATE '2000-01-01', CAST($a AS DATE)) + CAST($b AS BIGINT)) >= 2145031948 THEN fail('postgresql-error 22008: date out of range<end of postgresql-error>') ELSE date_add('day', CAST($b AS BIGINT), CAST($a AS DATE)) END
date_mii
A date moved back by a number of days.
date_mii($a, $b)
=>
CASE WHEN (date_diff('day', DATE '2000-01-01', CAST($a AS DATE)) - CAST($b AS BIGINT)) < -2451545 OR (date_diff('day', DATE '2000-01-01', CAST($a AS DATE)) - CAST($b AS BIGINT)) >= 2145031948 THEN fail('postgresql-error 22008: date out of range<end of postgresql-error>') ELSE date_add('day', -CAST($b AS BIGINT), CAST($a AS DATE)) END
time_mi_time
The interval from one time of day to another.
function provisa.transpiler.polyfill.trino.refused_time_mi_time: time_mi_time: Refused by name: the old table's form adds a time to a date, which Trino does not.
  • Refused by name: the old table's form adds a time to a date, which Trino does not.
make_date
A date of a year, a month and a day.
make_date($y, $m, $d)
=>
CASE WHEN $y IS NULL OR $m IS NULL OR $d IS NULL THEN CAST(NULL AS DATE) WHEN $y BETWEEN 1 AND 9999 AND $m BETWEEN 1 AND 12 THEN CASE WHEN $d BETWEEN 1 AND day_of_month(last_day_of_month(date_add('month', $m - 1, date_add('year', $y - 1, DATE '0001-01-01')))) THEN date_add('day', $d - 1, date_add('month', $m - 1, date_add('year', $y - 1, DATE '0001-01-01'))) ELSE fail('postgresql-error 0A000: make_date does not read this value<end of postgresql-error>') END ELSE fail('postgresql-error 0A000: make_date does not read this value<end of postgresql-error>') END
  • Only a year from 1 to 9999 and a day the month has: any other is refused with 0A000, where PostgreSQL answers a year BC or past 9999, and refuses a day the month lacks with 22008.
transaction_timestamp
The time the transaction began: now(), as Provisa answers it.
transaction_timestamp()
=>
current_timestamp
generate_series
A series of integers, as rows.
function provisa.transpiler.polyfill.trino.refused_generate_series: generate_series in a select list: refused by name, as Trino unnests only in FROM.
  • In a select list, refused by name: Trino reads a set of rows only in a FROM clause.
lag
The value of the previous row of a window.
function provisa.transpiler.polyfill.trino.refused_lag: lag over a window of no order: refused by name, as Trino requires one.
  • Over a window of no order, refused by name: Trino requires one.
lead
The value of the next row of a window.
function provisa.transpiler.polyfill.trino.refused_lead: lead over a window of no order: refused by name, as Trino requires one.
  • Over a window of no order, refused by name: Trino requires one.
string_agg
The values of an aggregate joined by a delimiter.
function provisa.transpiler.polyfill.trino.refused_string_agg: string_agg of bytea or of a delimiter that is no constant: refused by name.
  • Of bytea, or of a delimiter that is no constant text, refused by name: Trino's listagg takes a constant separator and no bytes.
json_object
A JSON object of arrays of keys and values.
function provisa.transpiler.polyfill.trino.refused_json_object: json_object of arrays: refused by name.
  • Of arrays, refused by name: Trino builds an object of text keys only.
pg_conf_load_time
The time the server's configuration was last read.
function provisa.transpiler.polyfill.trino.refused_pg_conf_load_time: pg_conf_load_time: Refused by name: the dialect has no form of it.
  • Refused by name: the dialect has no form of it.
pg_my_temp_schema
The oid of the session's temporary schema.
function provisa.transpiler.polyfill.trino.refused_pg_my_temp_schema: pg_my_temp_schema: Refused by name: the dialect has no form of it.
  • Refused by name: the dialect has no form of it.
pg_postmaster_start_time
The time the server started.
function provisa.transpiler.polyfill.trino.refused_pg_postmaster_start_time: pg_postmaster_start_time: Refused by name: the dialect has no form of it.
  • Refused by name: the dialect has no form of it.
pg_isolation_test_session_is_blocked
Whether a session waits on another's lock.
function provisa.transpiler.polyfill.trino.refused_pg_isolation_test_session_is_blocked: pg_isolation_test_session_is_blocked: Refused by name: the dialect has no form of it.
  • Refused by name: the dialect has no form of it.
postgresql_fdw_validator
Whether the options of a foreign-data wrapper are valid.
function provisa.transpiler.polyfill.trino.refused_postgresql_fdw_validator: postgresql_fdw_validator: Refused by name: the dialect has no form of it.
  • Refused by name: the dialect has no form of it.
array_out
An array's text, as a cast of it to text writes it: {1,NULL,3}.
function provisa.transpiler.polyfill.casts.array_text: An array cast to text, as array_out writes it: an array of integers or of text said so of a
  • Only an array said to be of smallint, integer, bigint, text or character varying, of one dimension and holding no call: any other is refused by name, as Trino casts no array to text.
age
The age of a transaction id: INT_MAX for one that is no normal id (0, 1, 2).
function provisa.transpiler.polyfill.server.age_of_xid: age(xid): the special xids answered, a normal one refused where it runs; age of anything
  • Of a normal xid, refused by name where it runs: its age is the current transaction id less it, and the engine holds no transaction id. 0A000 age does not read this value
  • Of a timestamp, or of an xid within a call: refused by name, as no form of an interval is held here.
mxid_age
The age of a multixact id: INT_MAX for 0, and 1 less it, as Provisa makes no multixact.
mxid_age($x)
=>
CASE WHEN $x IS NULL THEN CAST(NULL AS INTEGER) WHEN $x < -2147483648 OR $x > 4294967295 THEN fail('postgresql-error 0A000: mxid_age does not read this value<end of postgresql-error>') WHEN $x = 0 THEN 2147483647 ELSE CAST(CASE WHEN 1 - (CASE WHEN $x < 0 THEN $x + 4294967296 ELSE $x END) < -2147483648 THEN 1 - (CASE WHEN $x < 0 THEN $x + 4294967296 ELSE $x END) + 4294967296 ELSE 1 - (CASE WHEN $x < 0 THEN $x + 4294967296 ELSE $x END) END AS INTEGER) END
  • An xid past what xid's input reads (-2^31 to 2^32 - 1) is refused by name where it runs. 0A000 mxid_age does not read this value
pg_char_to_encoding
An encoding's number by any of PostgreSQL's names of it; -1 for a name of none.
pg_char_to_encoding($n)
=>
CASE WHEN $n IS NULL THEN CAST(NULL AS INTEGER) WHEN length(to_utf8($n)) > 63 THEN fail('postgresql-error 0A000: pg_char_to_encoding does not read this value<end of postgresql-error>') ELSE CAST(CASE lower(regexp_replace($n, '[^A-Za-z0-9]', '')) WHEN 'abc' THEN 19 WHEN 'alt' THEN 20 WHEN 'big5' THEN 36 WHEN 'euccn' THEN 2 WHEN 'eucjis2004' THEN 5 WHEN 'eucjp' THEN 1 WHEN 'euckr' THEN 3 WHEN 'euctw' THEN 4 WHEN 'gb18030' THEN 39 WHEN 'gbk' THEN 37 WHEN 'iso88591' THEN 8 WHEN 'iso885910' THEN 13 WHEN 'iso885913' THEN 14 WHEN 'iso885914' THEN 15 WHEN 'iso885915' THEN 16 WHEN 'iso885916' THEN 17 WHEN 'iso88592' THEN 9 WHEN 'iso88593' THEN 10 WHEN 'iso88594' THEN 11 WHEN 'iso88595' THEN 25 WHEN 'iso88596' THEN 26 WHEN 'iso88597' THEN 27 WHEN 'iso88598' THEN 28 WHEN 'iso88599' THEN 12 WHEN 'johab' THEN 40 WHEN 'koi8' THEN 22 WHEN 'koi8r' THEN 22 WHEN 'koi8u' THEN 34 WHEN 'latin1' THEN 8 WHEN 'latin10' THEN 17 WHEN 'latin2' THEN 9 WHEN 'latin3' THEN 10 WHEN 'latin4' THEN 11 WHEN 'latin5' THEN 12 WHEN 'latin6' THEN 13 WHEN 'latin7' THEN 14 WHEN 'latin8' THEN 15 WHEN 'latin9' THEN 16 WHEN 'mskanji' THEN 35 WHEN 'muleinternal' THEN 7 WHEN 'shiftjis' THEN 35 WHEN 'shiftjis2004' THEN 41 WHEN 'sjis' THEN 35 WHEN 'sqlascii' THEN 0 WHEN 'tcvn' THEN 19 WHEN 'tcvn5712' THEN 19 WHEN 'uhc' THEN 38 WHEN 'unicode' THEN 6 WHEN 'utf8' THEN 6 WHEN 'vscii' THEN 19 WHEN 'win' THEN 23 WHEN 'win1250' THEN 29 WHEN 'win1251' THEN 23 WHEN 'win1252' THEN 24 WHEN 'win1253' THEN 30 WHEN 'win1254' THEN 31 WHEN 'win1255' THEN 32 WHEN 'win1256' THEN 18 WHEN 'win1257' THEN 33 WHEN 'win1258' THEN 19 WHEN 'win866' THEN 20 WHEN 'win874' THEN 21 WHEN 'win932' THEN 35 WHEN 'win936' THEN 37 WHEN 'win949' THEN 38 WHEN 'win950' THEN 36 WHEN 'windows1250' THEN 29 WHEN 'windows1251' THEN 23 WHEN 'windows1252' THEN 24 WHEN 'windows1253' THEN 30 WHEN 'windows1254' THEN 31 WHEN 'windows1255' THEN 32 WHEN 'windows1256' THEN 18 WHEN 'windows1257' THEN 33 WHEN 'windows1258' THEN 19 WHEN 'windows866' THEN 20 WHEN 'windows874' THEN 21 WHEN 'windows932' THEN 35 WHEN 'windows936' THEN 37 WHEN 'windows949' THEN 38 WHEN 'windows950' THEN 36 ELSE -1 END AS INTEGER) END
  • A name of more than 63 bytes is refused by name where it runs: PostgreSQL cuts it to them as it reads it. 0A000 pg_char_to_encoding does not read this value
int4multirange
A multirange of integers, of ranges or of a VARIADIC array of them.
  • Of a VARIADIC cast to an array of ranges, of anything but the text of an array of one dimension: refused by name, as no array of a range type is held. 0A000 int4multirange() has no form on athena
int8multirange
A multirange of bigints, of ranges or of a VARIADIC array of them.
  • Of a VARIADIC cast to an array of ranges, of anything but the text of an array of one dimension: refused by name, as no array of a range type is held. 0A000 int8multirange() has no form on athena
nummultirange
A multirange of numerics, of ranges or of a VARIADIC array of them.
  • Of a VARIADIC cast to an array of ranges, of anything but the text of an array of one dimension: refused by name, as no array of a range type is held. 0A000 nummultirange() has no form on athena
datemultirange
A multirange of dates, of ranges or of a VARIADIC array of them.
  • Of a VARIADIC cast to an array of ranges, of anything but the text of an array of one dimension: refused by name, as no array of a range type is held. 0A000 datemultirange() has no form on athena
tsmultirange
A multirange of timestamps, of ranges or of a VARIADIC array of them.
  • Of a VARIADIC cast to an array of ranges, of anything but the text of an array of one dimension: refused by name, as no array of a range type is held. 0A000 tsmultirange() has no form on athena
tstzmultirange
A multirange of timestamps with time zone, of ranges or of a VARIADIC array of them.
  • Of a VARIADIC cast to an array of ranges, of anything but the text of an array of one dimension: refused by name, as no array of a range type is held. 0A000 tstzmultirange() has no form on athena
json_agg
A JSON array of an aggregate's values.
function provisa.transpiler.polyfill.json_values.json_agg_of_integers: json_agg of integers the statement says: Trino's array of them cast to JSON.
  • Where a rule writes the call, of a literal, a column or a cast of one only: any other value is refused by name.
  • Of integers under a FILTER: refused by name.
  • Of a value the statement says is text: refused by name, as Trino's form parses each value as JSON text.
json_build_object
A JSON object of keys and values; each key is cast to its text.
function provisa.transpiler.polyfill.json_values.object_keys_as_text: json_build_object's keys as PostgreSQL's text of them, where one is no text.
  • Where a rule writes the call, of a literal, a column or a cast of one only: any other value is refused by name.
  • A key of a type the statement says other than text, an integer or a boolean, or a NULL key: refused by name, as Trino's text of it may differ.
  • An odd count of arguments is refused as the statement is read, not where it runs. 22023 argument list must have even number of elements
jsonb_build_object
A JSON object of keys and values; each key is cast to its text.
function provisa.transpiler.polyfill.json_values.object_keys_as_text: json_build_object's keys as PostgreSQL's text of them, where one is no text.
  • Where a rule writes the call, of a literal, a column or a cast of one only: any other value is refused by name.
  • A key of a type the statement says other than text, an integer or a boolean, or a NULL key: refused by name, as Trino's text of it may differ.
  • An odd count of arguments is refused as the statement is read, not where it runs. 22023 argument list must have even number of elements
ntile
The bucket of a row in a window, as an integer.
function provisa.transpiler.polyfill.clickhouse.bucketed: ntile over a window, as PostgreSQL's integer: every engine's is a bigint. On ClickHouse a
numeric_mod
The remainder of one numeric divided by another, at the larger scale of the two.
numeric_mod($a, $b)
=>
function provisa.transpiler.polyfill.trino.kept: The old table's form (provisa.transpiler.function_macros): this row writes Trino's only.
current_schemas
The schemas of the search path.
function provisa.transpiler.polyfill.trino.refused_current_schemas: current_schemas: refused by name, as no form names the search path.
  • Refused by name: Trino has no form of it.
spg_poly_quad_compress
A polygon's bounding box, as the SP-GiST quad tree's compress function answers it.
spg_poly_quad_compress($v)
=>
function provisa.transpiler.polyfill.trino.kept: The old table's form (provisa.transpiler.function_macros): this row writes Trino's only.