\set ECHO none add_provenance (1 row) create_provenance_mapping (1 row) remove_provenance (1 row) node|boolean_expression|probability 1|𝟙|1.000000 2|e12|0.900000 3|e13 ⊕ (e23 ⊗ e12)|0.860000 4|(e34 ⊗ (e13 ⊕ (e23 ⊗ e12))) ⊕ (e24 ⊗ e12)|0.801800 (4 rows) remove_provenance (1 row) node|boolean_expression 4|(e34 ⊗ (e13 ⊕ (e23 ⊗ e12))) ⊕ (e24 ⊗ e12) (1 row) add_provenance (1 row) create_provenance_mapping (1 row) create_provenance_mapping (1 row) remove_provenance (1 row) node|reachable|equations 1|t|x₂ where x₁ = e12 ⊗ x₂, x₂ = 𝟙 ⊕ (e21 ⊗ x₁) 2|t|x₁ where x₁ = e12 ⊗ x₂, x₂ = 𝟙 ⊕ (e21 ⊗ x₁) (2 rows) NOTICE: node 1: count refused NOTICE: node 2: count refused NOTICE: 0A000 / provsql-reason: recursion-does-not-end; scope: deliberate add_provenance (1 row) remove_provenance (1 row) node|reliability|exact 1|1.000000|1.000000 2|0.900000|0.900000 3|0.720000|0.720000 4|0.741600|0.741600 (4 rows) add_provenance (1 row) ERROR: ProvSQL: Recursive CTEs not supported (unsupported recursion shape) add_provenance (1 row) count 3 (1 row) add_provenance (1 row) create_provenance_mapping (1 row) remove_provenance (1 row) node|f 2|a 4|c ⊗ b ⊗ a (2 rows) add_provenance (1 row) remove_provenance (1 row) node|present 2|t 3|t (2 rows) ERROR: ProvSQL: Recursive CTEs not supported (unsupported recursion shape) DETAIL: provsql-reason: recursion-shape; scope: deliberate add_provenance (1 row) n|p 2|0.500000 3|0.500000 4|0.250000 4|0.250000 (4 rows) n|p 2|0.500000 3|0.500000 4|0.437500 (3 rows) add_provenance (1 row) WARNING: ProvSQL: aggregate result read as a plain value: provenance not tracked, although the statement tracks leak_t DETAIL: provsql-reason: aggregate-read-as-plain-value; scope: gap; reader: cast HINT: Mark it plain() to say so. remove_provenance (1 row) n 3 (1 row) temporary_relations_left 0 (1 row) ERROR: relation "leak_t" does not exist LINE 1: SELECT count(*) FROM leak_t; ^ add_provenance (1 row) WARNING: ProvSQL: aggregate result read as a plain value: provenance not tracked, although the statement tracks t DETAIL: provsql-reason: aggregate-read-as-plain-value; scope: gap; reader: cast HINT: Mark it plain() to say so. remove_provenance (1 row) n|e 3|0.875000 (1 row) WARNING: ProvSQL: aggregate result read as a plain value: provenance not tracked, although the statement tracks t DETAIL: provsql-reason: aggregate-read-as-plain-value; scope: gap; reader: cast HINT: Mark it plain() to say so. remove_provenance (1 row) n|e 3|0.875000 (1 row) remove_provenance (1 row) id|parent_id|depth|p 1||0|0.500000 2|1|1|0.250000 3|2|2|0.125000 (3 rows) same_tokens|provsql 3 (*)|d265daa9-f206-561d-845c-2a85fa0fa72c (1 row) ERROR: ProvSQL: a recursive term of "t" reads its provenance column, or the CTE has several: "SELECT *" over a provenance-tracked relation puts one there, which reads the provenance of the rows derived; the rounds carry that as their own, not as data a term can read DETAIL: provsql-reason: recursive-term-star-provenance; scope: gap remove_provenance (1 row) id|p 1|0.125000 2|0.125000 3|0.125000 (3 rows) add_provenance (1 row) n|arr|p 1|{1}|0.500000 2|{1,2}|0.500000 3|{1,2,3}|0.500000 4|{1,2,3,4}|0.500000 5|{1,2,3,4,5}|0.500000 6|{1,2,3,4,5,6}|0.500000 (6 rows) n|t|p 1|x|0.500000 2|xx|0.500000 3|xxx|0.500000 (3 rows) add_provenance (1 row) v|p 1|0.250000 (1 row) WARNING: ProvSQL: bound of a recursive term over a tracked relation: provenance not tracked DETAIL: provsql-reason: recursion-bound-read-as-plain-value; scope: gap HINT: Mark it plain() to say so. n|p 1|0.500000 2|0.500000 3|0.500000 (3 rows) WARNING: ProvSQL: bound of a recursive term over a tracked relation: provenance not tracked DETAIL: provsql-reason: recursion-bound-read-as-plain-value; scope: gap HINT: Mark it plain() to say so. remove_provenance (1 row) rows_under_error 3 (1 row) add_provenance (1 row) WARNING: ProvSQL: bound of a recursive term over a tracked relation: provenance not tracked, although the statement tracks rsib DETAIL: provsql-reason: recursion-bound-read-as-plain-value; scope: gap HINT: Mark it plain() to say so. remove_provenance (1 row) id|p 1|0.500000 2|0.250000 3|0.125000 (3 rows) id 1 2 3 (3 rows) remove_provenance (1 row) id|p 1|0.500000 2|0.250000 3|0.125000 (3 rows) remove_provenance (1 row) add_provenance (1 row) ERROR: ProvSQL: recursive query over provenance-tracked relations in a materialized view (or another security-restricted operation) not supported: its evaluation needs a temporary table, which PostgreSQL forbids there DETAIL: provsql-reason: recursion-in-restricted-operation; scope: gap HINT: Use CREATE TABLE AS instead: the table it creates carries the same provenance. rmv_t_rows 3 (1 row) remove_provenance (1 row) add_provenance (1 row) ERROR: ProvSQL: recursive query over provenance-tracked relations with a column of type record[] (as SEARCH and CYCLE clauses add) not supported DETAIL: provsql-reason: recursion-pseudo-type-column; scope: gap HINT: Build the path as an array of the column's own type instead of a SEARCH or CYCLE clause, e.g. ARRAY[node] in the base term and path || node in the recursive one. ERROR: ProvSQL: recursive query over provenance-tracked relations with a column of type record[] (as SEARCH and CYCLE clauses add) not supported DETAIL: provsql-reason: recursion-pseudo-type-column; scope: gap HINT: Build the path as an array of the column's own type instead of a SEARCH or CYCLE clause, e.g. ARRAY[node] in the base term and path || node in the recursive one. remove_provenance (1 row) node|path 1|{1} 2|{1,2} 3|{1,3} (3 rows) remove_provenance (1 row) add_provenance (1 row) remove_provenance (1 row) q|y constant sibling, base term|1 constant sibling, base term|2 constant sibling, base term|3 constant sibling, recursive term|1 constant sibling, recursive term|3 sibling renaming its column|1 sibling renaming its column|2 sibling renaming its column|3 (8 rows) remove_provenance (1 row) add_provenance (1 row) WARNING: ProvSQL: bound of a recursive term over a tracked relation: provenance not tracked, although the statement tracks rtx DETAIL: provsql-reason: recursion-bound-read-as-plain-value; scope: gap HINT: Mark it plain() to say so. remove_provenance (1 row) id|s 1|25 2|50 3|100 (3 rows) WARNING: ProvSQL: aggregate result read as a plain value: provenance not tracked DETAIL: provsql-reason: aggregate-read-as-plain-value; scope: gap; reader: cast HINT: Mark it plain() to say so. remove_provenance (1 row) id|rn 1|1 2|2 3|3 (3 rows) remove_provenance (1 row) add_provenance (1 row) remove_provenance (1 row) id|p 1|1.0000 2|0.5000 3|0.2500 (3 rows) remove_provenance (1 row)