diff options
Diffstat (limited to 'SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp')
| -rw-r--r-- | SQLiteStudio3/coreSQLiteStudio/dbobjectorganizer.cpp | 35 |
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)) |
