# ProvSQL Feature Coverage This file cross-references every user-facing feature documented under `doc/source/user/` against the introductory tutorial and the six case studies. It is meant as a maintenance aid: when adding a new feature, extend the tables below; when extending the tutorial or a case study, mark the additional cells. Legend: - **T**: Tutorial (`doc/source/user/tutorial.rst`, *Who Killed Daphine?*) - **1**: Case study 1 (`casestudy1.rst`, *The Intelligence Agency*) - **2**: Case study 2 (`casestudy2.rst`, *The Open Science Database*) - **3**: Case study 3 (`casestudy3.rst`, *Île-de-France Public Transit*) - **4**: Case study 4 (`casestudy4.rst`, *Government Ministers Over Time*) - **5**: Case study 5 (`casestudy5.rst`, *The Wildlife Photo Archive*) - **6**: Case study 6 (`casestudy6.rst`, *The City Air-Quality Sensor Network*) - `✓`: feature is exercised - `(✓)`: feature is mentioned in passing but not actually executed - empty cell: feature is not covered ## Setup and basics | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | `add_provenance` | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | `remove_provenance` | | | | | | ✓ | | | `provenance()` SELECT-list function | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | `create_provenance_mapping` (table) | ✓ | ✓ | ✓ | ✓ | | | | | `create_provenance_mapping_view` | | | | | ✓ | | | | Hand-built mapping table | | | | | | ✓ | | | `provsql.active` GUC | | | | | | | | ## Supported SQL constructs | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | SELECT-FROM-WHERE / inner JOIN | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | | Self-join | ✓ | ✓ | | ✓ | | ✓ | | | Subqueries in FROM / nested | | ✓ | ✓ | | | ✓ | | | GROUP BY | | ✓ | ✓ | | ✓ | ✓ | ✓ | | SELECT DISTINCT | ✓ | ✓ | | ✓ | | | | | EXCEPT (monus) | ✓ | ✓ | | | | ✓ | | | UNION / UNION ALL | | | | | | | ✓ | | HAVING | | | ✓ | | | | ✓ | | VALUES | | ✓ | | | | ✓ | | | CTE (WITH) | | | | | | ✓ | | | LATERAL | | | | | | | ✓ | | Window functions | | | | | | | | | FILTER clause on aggregates | | | | | | | | | CREATE TABLE AS SELECT | ✓ | | | ✓ | | ✓ | | | Provenance-bearing VIEW | | | ✓ | | ✓ | | | | INSERT … SELECT (provenance propagation) | | | | | | | | ## Aggregation | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | COUNT / SUM / MIN / MAX / AVG | | ✓ | ✓ | ✓ | ✓ | ✓ | | | `sum` / `avg` / `product` over random_variable | | | | | | | ✓ | | `string_agg` / `array_agg` | | | | | | | | | `COUNT(DISTINCT …)` | | | | | | | | | Arithmetic / cast on aggregate result | | | ✓ | | | | | | `choose` aggregate | | | | | | | | ## Circuit inspection | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | `get_gate_type` | | ✓ | | | | | ✓ | | `get_children` | | ✓ | | | | | | | `identify_token` | | ✓ | | | | | | | `get_nb_gates` | | ✓ | | | | | | | `get_infos` | | | | | | | ✓ | | `get_extra` | | | | | | | ✓ | ## Semiring evaluation | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | `sr_boolean` | | | | ✓ | | | | | `sr_boolexpr` | | ✓ | | | | ✓ | | | `sr_formula` | ✓ | ✓ | ✓ | ✓ | | ✓ | | | `sr_counting` | ✓ | | ✓ | | | | | | `sr_why` | | | ✓ | | | | | | `sr_how` | | | | | | | | | `sr_which` | | | | | | | | | `sr_tropical` | | | | | | | | | `sr_viterbi` | | | | | | | | | `sr_lukasiewicz` | | | | | | | | | `sr_minmax` | | ✓ | | | | | | | `sr_maxmin` | | | | | | | | | `sr_temporal` | | | | | ✓ | | | | `sr_interval_num` | | | | | | | | | `sr_interval_int` | | | | | | | | | Custom semiring via `provenance_evaluate`| | ✓ | ✓ | | | | | | `aggregation_evaluate` | | | | | | | | ## Probabilities | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|-----|---|---|---|---|---|---| | `set_prob` | ✓ | ✓ | ✓ | | | ✓ | ✓ | | `get_prob` | | | | | | | ✓ | | `probability_evaluate` (default fallback)| | ✓ | ✓ | | | ✓ | | | `'independent'` method | | | | | | | ✓ | | `'possible-worlds'` method | ✓ | ✓ | | | | | | | `'monte-carlo'` method | (✓) | ✓ | | | | | ✓ | | `'tree-decomposition'` method | (✓) | ✓ | | | | ✓ | ✓ | | `'compilation'` (d4 / c2d / dsharp / minic2d) | (✓) | ✓ | | | | | | | `'weightmc'` method | | | | | | | | | `expected(COUNT/SUM/MIN/MAX)` | | | | | | ✓ | ✓ | | `repair_key` (block-independent, `mulinput`) | | | | | | ✓ | | | `provsql.monte_carlo_seed` GUC | | | | | | | ✓ | | `provsql.rv_mc_samples` GUC | | | | | | | ✓ | | `provsql.simplify_on_load` GUC | | | | | | | ✓ | ## Continuous random variables | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------------------|---|---|---|---|---|---|---| | `random_variable` type / `provsql.normal` | | | | | | | ✓ | | `provsql.uniform` / `provsql.exponential` | | | | | | | ✓ | | `provsql.erlang` / `provsql.categorical` | | | | | | | ✓ | | `provsql.mixture` (Bernoulli and ad-hoc overloads) | | | | | | | ✓ | | `provsql.as_random` and implicit numeric→rv casts | | | | | | | ✓ | | Arithmetic on `random_variable` (`+ - * /`, unary -) | | | | | | | ✓ | | Comparison `< <= = <> >= >` (planner-hook rewrite) | | | | | | | ✓ | | `expected(random_variable)` (unconditional) | | | | | | | ✓ | | `variance(random_variable)` | | | | | | | ✓ | | `moment` / `central_moment` / `support` over rv | | | | | | | ✓ | | Conditional inference via `provenance()` argument | | | | | | | ✓ | | `rv_sample` / `rv_histogram` | | | | | | | ✓ | ## Shapley and Banzhaf values | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | `shapley` | | | ✓ | | | | | | `shapley_all_vars` | | | ✓ | | | | | | `banzhaf` | | | ✓ | | | | | | `banzhaf_all_vars` | | | ✓ | | | | | ## Where-provenance | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | `provsql.where_provenance` GUC | | ✓ | ✓ | | | | | | `where_provenance(col)` | | ✓ | ✓ | | | | | ## Data-modification tracking | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | `provsql.update_provenance` GUC | | | | | ✓ | | | | INSERT / UPDATE / DELETE tracked | | | | | ✓ | | | | `update_provenance` log table | | | | | ✓ | | | | `undo` | | | | | ✓ | | | ## Temporal features | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | `union_tstzintervals` | | | | | ✓ | | | | `timeslice` | | | | | ✓ | | | | `timetravel` | | | | | ✓ | | | | `history` | | | | | ✓ | | | | `time_validity_view` extension | | | | | ✓ | | | | `get_valid_time` | | | | | | | | ## Export and visualisation | Feature | T | 1 | 2 | 3 | 4 | 5 | 6 | |------------------------------------------|---|---|---|---|---|---|---| | `to_provxml` | | ✓ | | | | | | | `view_circuit` (graph-easy) | | ✓ | | | | | | | `provsql.verbose_level` | | | | | | | | | ProvSQL Studio (Circuit mode + Where mode) | | | | | | | ✓ |