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

--- Comment #1 from Javen O'Neal <[email protected]> ---
Adding a name requires checking the name manager for existing names to avoid
defining the same name at the same scope (my guess is this would result in a
corrupt workbook). POI uses a naïve implementation, shown in comment 0, which
requires O(n) time for a naïve implementation. We could perform this check in
O(1) using a hash table with a hashable tuple (scope, name) as the key. A less
elegant, inferior solution that runs in O(1) uses nested hash tables: the first
layer having scope (sheet name or global) keys and the second layer having name
keys (inner and outer key could swapped). This comes at the cost of higher
memory consumption and increasing the complexity of the code (and therefore
higher chance for bugs).

Given the code from comment 0, I'm not surprised that adding N names is slow,
as it is performing O(N²) operations.

Here's what you could do:
1) Provide a patch with a speed-optimized implementation with 100% test
coverage.
2) Provide a patch with a non-validating version of setNameName (probably
called setNameNameUnsafe) [1]
3) access the CT* classes yourself, either with introspection, subclassing, or
forking POI, which gives you direct access to the CTName data structure. This
would complicate upgrading POI in the future.

[1] Relevant discussion on dev@poi mailing list
http://apache-poi.1045710.n5.nabble.com/Preventing-corrupt-workbooks-td5722973.html

-- 
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to