mirror of
https://github.com/gristlabs/grist-core.git
synced 2024-10-27 20:44:07 +00:00
2b2e19c5b5
Summary: The problem is that the implementation for a summary update was relying on type consistency to get columns (ie: matches agains colId and type). Type consistency is an attempt at maintaining consistent type across same-named column for summaries of same table. But the problem is that the consistency of types is NOT a strict guarantee or an invariant, more of a best-effort attempt (there are too many possible sequences of operations possible with renaming/adding/removing in summary tables and the underlying table). With current implementation and with a document violating the type consistency, a summary table could end up with fields referencing columns to the former summary table (more detail below(1)). Which is a bad state (yields js errors on the client). This diff fixes this issue by relaxing the type comparison when search for same-named column. (1) __Below is a description of how a violation of type consistency could end-up in bad state document (example taken from the reported bug):__ > In this document, let's assume two summary tables `Table1 [by A]` and `Table1 [Totals]`. Let's also assume Table1 and `Table1 [Totals]` both have an `Amount(Numeric)` column, and that `Table1 [by A]` has one `Amount(Any)` column (violating the type consistency principle). Now when users wanted to change the `Table1 [Totals]` section to group by 'A', grist found that there is already a summary table with same grouping. But it couldn't find a matching column for `Amount(Numeric)` so it created a new one. Except that because there was still an `Amount(Any)` the new column was named `Amount2` which caused following code to ignore it and in particular forgetting to update it's corresponding section's field which was then pointing toward the column of a different table (which is bad). Test Plan: Added python test. Reviewers: georgegevoian Reviewed By: georgegevoian Differential Revision: https://phab.getgrist.com/D3809 |
||
---|---|---|
.. | ||
docker | ||
grist | ||
gvisor | ||
pyodide | ||
gen_js_schema.py | ||
install_tz.js | ||
requirements3.txt | ||
requirements.txt | ||
run.sh | ||
watch.sh |