mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-09-28 04:54:13 +02:00
956836458a
ProjectDBModel::setQuery() calls projectDataBase::updateDB(), which drops and repopulates every table in the database. The rebuild does not depend on the query, so each table model that queries the database while a project is being read triggers another complete repopulate of the same content. Opening a 100 folio project ran updateDB() 26 times, 9.9 s of a 15.7 s load. Two changes, because the first alone is not enough: setUpdateBlocked() lets a bulk operation suppress the rebuild and do it once when it is done. readProjectXml() already wrapped the load in blockSignals(true) "to avoid hundreds of unnecessary emitted signal", but that suppresses only the signal, not the work it announces; this extends the same intent to the work. Both early returns in readProjectXml() sit before the block, so no path leaves the database permanently blocked. Further rebuilds are triggered after readProjectXml() returns, where the load phase timers cannot see them -- with only the block in place updateDB() still ran 5 times on examples/industrial.qet. So the database now also tracks whether anything has changed since the last rebuild, and skips repopulating when nothing has. dataBaseUpdated() is still emitted in that case: callers and models rely on it to refresh, and what they read back is the same either way. Every method of the class that writes rows marks the flag; from outside, the database is reachable only through newQuery(), and all five call sites read. Repeating the rebuild was wasteful rather than wrong -- each populate*Table() begins with a DELETE -- so this changes no output. Verified byte identical --info on all 23 example projects, and identical --export-bom, --export-wires, --export-cables, --export-nets and --export-wiring on industrial.qet. Its load drops from 5.51 s to 5.31 s (median of 6). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01L6MRq2Ach1ogvnGcbuqNLr