The GitHub Actions job "Java CI with Gradle" on poi.git/shift-rows-perf-70139 
has succeeded.
Run started by GitHub user pjfanning (triggered by pjfanning).

Head commit for run:
2cc4c2bb2a0a3a02b8d638aa0a5266bace13116a / PJ Fanning 
<[email protected]>
XSSFSheet.shiftRows: stop rebuilding every row from the XML on each shift

https://bz.apache.org/bugzilla/show_bug.cgi?id=70139

Since the fix for bug 64516, rebuildRows() reordered the CTRow array of the
sheet (an XmlBeans deep copy of every row) and recreated every XSSFRow and
XSSFCell, twice per shiftRows call. Inserting single rows into a sheet with a
few thousand rows became orders of magnitude slower than POI 4, and the
XSSFRow/XSSFCell instances held by the caller were silently invalidated.

Shifting only renumbers rows, so the CTRow elements normally stay in order
and rebuildRows() now just refreshes the keys of the _rows map, keeping the
existing row and cell instances. It is a no-op when nothing was renumbered
(shiftColumns). The XML reorder plus recreation is kept for the rare case
where rows jump over other rows (bug 64516).

Recreating the rows also re-registered shared and array formulas via
onReadCell; that is now done explicitly by rebuildFormulaBookkeeping() at
the end of shiftRows/shiftColumns. It also uncovered that updateRowFormulas
shifted a shared formula ref twice when the sheet's registry holds the live
formula of a re-homed master (after the old master cell was deleted) rather
than a detached copy - the recreation used to paper over that.

Co-Authored-By: Claude Opus 5 <[email protected]>

Report URL: https://github.com/apache/poi/actions/runs/35367778251

With regards,
GitHub Actions via GitBox


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to