This is an automated email from the ASF dual-hosted git repository. jimjag pushed a commit to branch openformula in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 6c920c1e05a0f6330fa98b931f7080be6ce5d877 Author: Jim Jagielski <[email protected]> AuthorDate: Fri Nov 13 10:06:09 2026 -0500 odf_docs: mark the DCOUNT without a field gap as fixed --- odf_docs/openformula-milestone-g-sequence.md | 2 +- odf_docs/openformula-small-group-semantic-audit.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/odf_docs/openformula-milestone-g-sequence.md b/odf_docs/openformula-milestone-g-sequence.md index e792c00458..8a5afa2fec 100644 --- a/odf_docs/openformula-milestone-g-sequence.md +++ b/odf_docs/openformula-milestone-g-sequence.md @@ -41,7 +41,7 @@ These items require no production source modification and can be completed immed ## Phase G.2 — Investigation Complete: Criteria Syntax Empty-Cell Fix (ScDBCount) -**STATUS: INVESTIGATED — implementation requires build/test environment** +**STATUS: DONE — DCOUNT and DCOUNTA without a field count every matching record; calcval `DB.*` cases** This is a targeted fix with a clear TODO in source and contained blast radius. The root cause is confirmed: `ScQueryCellIterator` ("run through all not empty cells") skips empty cells, and `ScDBQueryDataIterator` skips `CELLTYPE_NONE` via `default` case at `dociter.cxx:655-657`. Per ODF 1.4 §6.9.3, DCOUNT without a field should count ALL matching rows including those with empty result cells. diff --git a/odf_docs/openformula-small-group-semantic-audit.md b/odf_docs/openformula-small-group-semantic-audit.md index 017ee5fc7b..d76b4534ef 100644 --- a/odf_docs/openformula-small-group-semantic-audit.md +++ b/odf_docs/openformula-small-group-semantic-audit.md @@ -214,7 +214,7 @@ Name mapping: `main/formula/source/core/resource/core_resource.src:227-228` (`DC | Wildcards / RegExp | Required | `bRegExp` via `MayBeRegExp` | Yes | | Empty criteria field | Field may be omitted (count all matching) | `bMissingField` path in ScDBCount | Yes | | Criteria range with multiple rows | AND across rows | ScQueryParamBase entries | Yes | -| DCOUNT without field counts all matching records | Required | ScDBCount: bMissingField + INTERNAL type → counts all matching | Yes, with TODO limitation | +| DCOUNT without field counts all matching records | Required | ScDBCount: bMissingField + INTERNAL type → counts all matching | Yes; the empty-cell undercount is fixed, see calcval `DB.DCOUNT.*` | | DCOUNT with field counts values in field | Required | ScDBQueryDataIterator over field column | Yes | ### Known Limitations @@ -227,6 +227,8 @@ Name mapping: `main/formula/source/core/resource/core_resource.src:227-228` (`DC ``` This means DCOUNT without a field may undercount when matching records have empty cells in the result column. +**Update:** fixed. DCOUNT and DCOUNTA without a field now test every record of the range against the criteria (`ScDBQueryDataIterator::CountRecords`). Records with an empty cell in a criteria column are counted. With an empty criteria cell the count is now all records (`DB.DCOUNT.nf.nocrit` gives 3, was 0). Covered by the `DB.*` cases in `calcval-cases14.tsv`. + ### Conformance Classification **Required by ODF 1.4** — Criteria syntax parsing and database function evaluation are implemented. The empty-cell matching limitation in ScDBCount is a known gap.
