mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-19 12:34:15 +02:00
Write a symbol's link rows in the order it saves them, with its waiting partners
The project database's link table should say what each symbol saves: QETZ-DB-FIRST stage 2a moves link reading and writing to it. Measured over the corpus and 25 kinds of edit, its rows disagreed with the file for three reasons; this fixes the one in the database: - rows followed the order partners were built in, not the order the symbol saves them (11 symbols, mostly .qetz files where an edit built a partner's folio, with lazy folios); - the rows were written by three pieces of code with three rules: the rebuild and the flush from the built partners then the waiting ones, the save from its own list. Element::linksToSave() is now that one list: the order the symbol was saved with, then partners linked since, a partner on a folio not built included. toXml() writes it and the database's rows are written from it (projectDataBase::insertLinkRows()), with their place in a new ord column of the in-memory table (the .qetz file's own link table is not touched). A built partner the project no longer has, on a removed folio, still gets no row, as before. The other two reasons are not here: symbols sharing a uuid (PR #1522) and links saved to symbols on a removed folio (F113), which the save will stop writing once it writes from the database (stage 2a-2). QET_CHECK_LINK_ROWS=1 says at each save whether the rows are what the symbols save, without building any folio. tst_resaveunchanged linkRowsAfterLazyEdit moves a symbol of m_000 as a .qetz with lazy folios: with the previous order, 2 symbols differ. No saved byte changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XCdg2Er2vYhB8Vwa5G7fSR
This commit is contained in:
@@ -2630,6 +2630,16 @@ QDomDocument QETProject::toXml(QHash<int, QByteArray> *kept_folios, QStringList
|
||||
// Write the elements collection.
|
||||
project_root.appendChild(m_elements_collection->root().cloneNode(true));
|
||||
|
||||
//QET_CHECK_LINK_ROWS=1: say whether the project database's link rows
|
||||
//are the links each placed symbol saves, in its order, once the
|
||||
//folios are written. Builds nothing (lazy folios stay as they are):
|
||||
//a test and debugging aid; it changes nothing.
|
||||
if (qEnvironmentVariableIntValue("QET_CHECK_LINK_ROWS") == 1) {
|
||||
const QStringList links = m_data_base.linkRowMismatches();
|
||||
qWarning().noquote() << "link rows:" << links.size() << "differ"
|
||||
<< links.mid(0, 5).join(QStringLiteral(", "));
|
||||
}
|
||||
|
||||
m_waiting_link_targets.clear();
|
||||
return(xml_doc);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user