aboutsummaryrefslogtreecommitdiffstats
path: root/SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2025-01-16 01:57:37 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2025-01-16 01:57:37 -0500
commit81a21e6ce040e7740de86340c8ea4dba30e69bc3 (patch)
tree95fc1741b907d5ba6d029a42d80092cb7c056c5e /SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp
parent3565aad630864ecdbe53fdaa501ea708555b3c7c (diff)
New upstream version 3.4.13+dfsg.upstream/3.4.13+dfsgupstream
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp')
-rw-r--r--SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp35
1 files changed, 10 insertions, 25 deletions
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<QString>& ob
void DbObjectOrganizer::processPreparation()
{
- StrHash<SqliteQueryPtr> allParsedObjects = srcResolver->getAllParsedObjects();
StrHash<SchemaResolver::ObjectDetails> 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<QString> DbObjectOrganizer::resolveReferencedTables(const QString& table, const QList<SqliteCreateTablePtr>& parsedTables)
+void DbObjectOrganizer::collectReferencedTables(const QString& table)
{
- QSet<QString> 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<SqliteQueryPtr>& allParsedObjects)
-{
- QList<SqliteCreateTablePtr> parsedTables;
- SqliteCreateTablePtr parsedTable;
- for (SqliteQueryPtr& query : allParsedObjects.values())
- {
- parsedTable = query.dynamicCast<SqliteCreateTable>();
- if (parsedTable)
- parsedTables << parsedTable;
- }
-
- QSet<QString> tables = resolveReferencedTables(table, parsedTables);
+ QStringList tables = srcResolver->getFkReferencedTables(table);
for (const QString& refTable : tables)
{
if (!referencedTables.contains(refTable) && !srcTables.contains(refTable))