Can twiddling the caveatted value change the output?
-
-
C←(5×X)+Y
-
Caveats on X and Y propagate to C*
-
-
Some conditions may apply
-
-
-
-
-
-
Sloooow!
-
-
-
-
-
+
-
-
-
-
-
Is a value caveatted?
-
≡ Certain answers in incomplete databases
-
(coNP-complete)
-
-
-
-
Conservative Approximation
-
-
-
- Correctness of SQL Queries on Databases with Nulls.
- Paolo Guagliardo, Leonid Libkin
-
-
- Uncertainty Annotated Databases - A Lightweight Approach for Approximating Certain Answers
- Su Feng, Aaron Huber, Boris Glavic, Oliver Kennedy
-
-
-
-
Unmarked rows are guaranteed to be caveat-free.
-
Marked rows might not be caveatted.
-
-
-
-
-
- Uncertainty Annotated Databases - A Lightweight Approach for Approximating Certain Answers
- Su Feng, Aaron Huber, Boris Glavic, Oliver Kennedy
-
-
-
Add and maintain a binary "has caveat" column for each row/column.
-
-
-
-
Enumerating Caveats
-
-
-
Static Analysis
-
Which caveats could possibly affect the element?
-
-
Dynamic Analysis
-
Which specific caveats affect the element?
-
-
-
-
-
-
-
-
-
-
-
Oliver
-
I have this great tool for tracking assumptions!
-
-
-
Data Scientist
-
Super! How does it work?
-
-
-
Oliver
-
Well you just write a SQL query...
-
-
-
Data Scientist
-
...
-
-
-
-
-
-
-
-
-
-
Vizual
-
Spreadsheet Operations → SQL DDL / SQL DML
-
-
-
Edit Cell A3 to 'foo'
-
UPDATE R SET A = 'foo' WHERE ROWID = 3;
-
-
-
Insert Row
-
INSERT INTO R() VALUES ();
-
-
-
Insert Column `bar`
-
ALTER TABLE R ADD COLUMN `bar`;
-
-
-
-
-
-
This gives us an edit history in DDL/DML.
-
-
-
-
Caveats on DDL/DML
-
-
DML → SQL
-
- Using Reenactment to Retroactively Capture Provenance for Transactions
- Bahareh Sadat Arab, Dieter Gawlick, Vasudha Krishnaswamy, Venkatesh Radhakrishnan, Boris Glavic
-
-
-
-
-
DDL → SQL
-
- Graceful database schema evolution: the PRISM workbench
- Carlo Curino, Hyun Jin Moon, Carlo Zaniolo
-
-
-
-
-
-
- UPDATE R SET A = 'foo'WHEREROWID = 3;
-
- becomes
-
- SELECTCASEROWID
- WHEN3THEN'foo'
- ELSE A ENDAS A,
- B, C, /* ... */
- FROM R
-
-
-
-
-
- INSERTINTO R() VALUES ();
-
- becomes
-
- SELECT * FROM R
- UNIONALL
- SELECTNULLAS A, NULLAS B,
- NULLAS C, /* ... */
-
- SELECT salary,
- _caveat_field_salary AS _caveat_field_salary,
- _caveat_row AND _caveat_field_language AS _caveat_row
- FROM survey_responses
- WHERElanguage = 'Scala'
-
-
-
-
-
-
- SELECTAVG(salary) AS salary
- FROM survey_responses
-
-
- becomes
-
- SELECTAVG(salary),
- GROUP_OR(_caveat_field_salary
- OR _caveat_row) AS _caveat_field_salary,
- FALSEAS _caveat_row
- FROM survey_responses
-
-
-
-
-
-
- SELECTlanguage, AVG(salary) AS salary
- FROM survey_responses
- GROUPBYlanguage
-
-
- ... first we evaluate
-
- SELECT GROUP_OR(_caveat_field_language)
- FROM survey_responses
-
-
-
Can often be evaluated statically.
-
-
-
-
If GROUP BY has caveats
-
-
- SELECTlanguage, AVG(salary) AS salary
- FALSEAS _caveat_field_language
- TRUEAS _caveat_field_salary
- GROUP_AND(_caveat_field_language OR
- _caveat_row) AS _caveat_row
- FROM by_language
- GROUPBYlanguage
-
-
-
-
-
If no GROUP BY caveats
-
-
- SELECTlanguage, AVG(salary) AS salary
- FALSEAS _caveat_field_language
- GROUP_OR(_caveat_field_salary,
- _caveat_row) AS _caveat_field_salary
- GROUP_AND(_caveat_row) AS _caveat_row
- FROM by_language
- GROUPBYlanguage
-
-
-
-
-
-
-
1.1
-
-
- VizierDB
-
-
- Your notebook is not crumby enough, REPLace it
-
- Michael Brachmann,
- William Spoth,
- Oliver Kennedy,
- Boris Glavic,
- Heiko Mueller,
- Sonia Castelo,
- Carlos Bautista,
- Juliana Freire
-
-