From 81a21e6ce040e7740de86340c8ea4dba30e69bc3 Mon Sep 17 00:00:00 2001 From: Unit 193 Date: Thu, 16 Jan 2025 01:57:37 -0500 Subject: New upstream version 3.4.13+dfsg. --- .../coreSQLiteStudio/dbobjectorganizer.cpp | 35 +++++++--------------- 1 file changed, 10 insertions(+), 25 deletions(-) (limited to 'SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp') diff --git a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp index 1c206f9..eb01b86 100644 --- a/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp +++ b/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp @@ -137,7 +137,6 @@ void DbObjectOrganizer::copyOrMoveObjectsToDb(Db* srcDb, const QSet& ob void DbObjectOrganizer::processPreparation() { - StrHash allParsedObjects = srcResolver->getAllParsedObjects(); StrHash details = srcResolver->getAllObjectDetails(); for (const QString& srcName : srcNames) { @@ -151,7 +150,7 @@ void DbObjectOrganizer::processPreparation() { case SchemaResolver::TABLE: srcTables << srcName; - collectReferencedTables(srcName, allParsedObjects); + collectReferencedTables(srcName); collectReferencedIndexes(srcName); collectReferencedTriggersForTable(srcName); break; @@ -488,7 +487,7 @@ bool DbObjectOrganizer::copyDataUsingAttach(const QString& table) QString wrappedSrcTable = wrapObjIfNeeded(srcTable); QString wrappedDstTable = wrapObjIfNeeded(table); QStringList srcColumns = srcResolver->getTableColumns(srcTable, true); - QString srcColumnsStr = srcColumns.join(", "); + QString srcColumnsStr = wrapObjNamesIfNeeded(srcColumns).join(", "); SqlQueryPtr results = srcDb->exec(insertTpl.arg(attachName, wrappedDstTable, srcColumnsStr, wrappedSrcTable)); if (results->isError()) { @@ -544,7 +543,12 @@ bool DbObjectOrganizer::copySimpleObjectToDb(const QString& name, const QString& if (ddl.isNull()) return false; - SqlQueryPtr result = srcDb->exec(ddl); + SqlQueryPtr result; + if (attachName.isNull()) + result = dstDb->exec(ddl); + else + result = srcDb->exec(ddl); // uses attachName to create object in attached db + if (result->isError()) { notifyError(errorMessage.arg(result->getErrorText())); @@ -555,28 +559,9 @@ bool DbObjectOrganizer::copySimpleObjectToDb(const QString& name, const QString& return true; } -QSet DbObjectOrganizer::resolveReferencedTables(const QString& table, const QList& parsedTables) +void DbObjectOrganizer::collectReferencedTables(const QString& table) { - QSet tables = toSet(SchemaResolver::getFkReferencingTables(table, parsedTables)); - for (const QString& fkTable : tables) - tables += toSet(SchemaResolver::getFkReferencingTables(fkTable, parsedTables)); - - tables.remove(table); // if it appeared somewhere in the references - we still don't need it here, it's the table we asked by in the first place - return tables; -} - -void DbObjectOrganizer::collectReferencedTables(const QString& table, const StrHash& allParsedObjects) -{ - QList parsedTables; - SqliteCreateTablePtr parsedTable; - for (SqliteQueryPtr& query : allParsedObjects.values()) - { - parsedTable = query.dynamicCast(); - if (parsedTable) - parsedTables << parsedTable; - } - - QSet tables = resolveReferencedTables(table, parsedTables); + QStringList tables = srcResolver->getFkReferencedTables(table); for (const QString& refTable : tables) { if (!referencedTables.contains(refTable) && !srcTables.contains(refTable)) -- cgit v1.2.3