diff options
author | Marco Bubke <marco.bubke@qt.io> | 2023-09-14 17:34:29 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2023-10-04 10:28:56 +0000 |
commit | 975a282130a846f55ef204436b96c01ddf17eab0 (patch) | |
tree | f196fd792a5b6fb205021a0db5271bd040a037a3 /src | |
parent | ebe1c889b79c7e6abd93adc8fe2f9c155d82c9fa (diff) |
QmlDesigner: Ensure that indirect imports are deleted too
If we import an indirect import can be added too. So if we remove that
import we have to remove the related indirect imports too.
Change-Id: I4cb09fdc8986c473db2a8194766778956bc7069a
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/qmldesigner/CMakeLists.txt | 16 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h | 96 |
2 files changed, 59 insertions, 53 deletions
diff --git a/src/plugins/qmldesigner/CMakeLists.txt b/src/plugins/qmldesigner/CMakeLists.txt index 80273e863b8..0d7c39784c9 100644 --- a/src/plugins/qmldesigner/CMakeLists.txt +++ b/src/plugins/qmldesigner/CMakeLists.txt @@ -11,6 +11,10 @@ endif() add_compile_options("$<$<COMPILE_LANG_AND_ID:CXX,Clang>:-Wno-error=maybe-uninitialized>") add_compile_options("$<$<COMPILE_LANG_AND_ID:CXX,GNU>:-Wno-error=maybe-uninitialized>") +env_with_default("QDS_USE_PROJECTSTORAGE" ENV_QDS_USE_PROJECTSTORAGE OFF) +option(USE_PROJECTSTORAGE "Use ProjectStorage" ${ENV_QDS_USE_PROJECTSTORAGE}) +add_feature_info("ProjectStorage" ${USE_PROJECTSTORAGE} "") + add_qtc_library(QmlDesignerUtils STATIC DEPENDS Qt::Gui Utils Qt::QmlPrivate Core @@ -64,7 +68,10 @@ add_qtc_library(QmlDesignerCore STATIC QmlDesignerUtils TextEditor Sqlite - DEFINES QMLDESIGNERCORE_LIBRARY QMLDESIGNERUTILS_LIBRARY + DEFINES + QMLDESIGNERCORE_LIBRARY + QMLDESIGNERUTILS_LIBRARY + $<$<BOOL:${USE_PROJECTSTORAGE}>:QDS_USE_PROJECTSTORAGE> INCLUDES ${CMAKE_CURRENT_LIST_DIR} PUBLIC_INCLUDES @@ -76,13 +83,6 @@ add_qtc_library(QmlDesignerCore STATIC rewritertransaction.h ) - -if(TARGET QmlDesignerCore) - env_with_default("QDS_USE_PROJECTSTORAGE" ENV_QDS_USE_PROJECTSTORAGE OFF) - option(USE_PROJECTSTORAGE "Use ProjectStorage" ${ENV_QDS_USE_PROJECTSTORAGE}) - add_feature_info("ProjectStorage" ${USE_PROJECTSTORAGE} "") -endif() - extend_qtc_library(QmlDesignerCore CONDITION ENABLE_COMPILE_WARNING_AS_ERROR PROPERTIES COMPILE_WARNING_AS_ERROR ON diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h index 3f47eb3f018..cc4de52663e 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h @@ -559,6 +559,12 @@ public: return selectPropertyEditorPathIdStatement.template valueWithTransaction<SourceId>(typeId); } + Storage::Imports fetchDocumentImports() const + { + return selectAllDocumentImportForSourceIdStatement + .template valuesWithTransaction<Storage::Imports>(); + } + private: class ModuleStorageAdapter { @@ -1577,32 +1583,31 @@ private: PropertyCompare<AliasPropertyDeclaration>{}); } - void insertDocumentImport(const Storage::Import &import, - Storage::Synchronization::ImportKind importKind, - ModuleId sourceModuleId, - ModuleExportedImportId moduleExportedImportId) + ImportId insertDocumentImport(const Storage::Import &import, + Storage::Synchronization::ImportKind importKind, + ModuleId sourceModuleId, + ImportId parentImportId) { if (import.version.minor) { - insertDocumentImportWithVersionStatement.write(import.sourceId, - import.moduleId, - sourceModuleId, - importKind, - import.version.major.value, - import.version.minor.value, - moduleExportedImportId); + return insertDocumentImportWithVersionStatement + .template value<ImportId>(import.sourceId, + import.moduleId, + sourceModuleId, + importKind, + import.version.major.value, + import.version.minor.value, + parentImportId); } else if (import.version.major) { - insertDocumentImportWithMajorVersionStatement.write(import.sourceId, - import.moduleId, - sourceModuleId, - importKind, - import.version.major.value, - moduleExportedImportId); + return insertDocumentImportWithMajorVersionStatement + .template value<ImportId>(import.sourceId, + import.moduleId, + sourceModuleId, + importKind, + import.version.major.value, + parentImportId); } else { - insertDocumentImportWithoutVersionStatement.write(import.sourceId, - import.moduleId, - sourceModuleId, - importKind, - moduleExportedImportId); + return insertDocumentImportWithoutVersionStatement.template value<ImportId>( + import.sourceId, import.moduleId, sourceModuleId, importKind, parentImportId); } } @@ -1638,11 +1643,8 @@ private: }; auto insert = [&](const Storage::Import &import) { - insertDocumentImport(import, importKind, import.moduleId, ModuleExportedImportId{}); - auto callback = [&](ModuleId exportedModuleId, - int majorVersion, - int minorVersion, - ModuleExportedImportId moduleExportedImportId) { + auto importId = insertDocumentImport(import, importKind, import.moduleId, ImportId{}); + auto callback = [&](ModuleId exportedModuleId, int majorVersion, int minorVersion) { Storage::Import additionImport{exportedModuleId, Storage::Version{majorVersion, minorVersion}, import.sourceId}; @@ -1651,10 +1653,7 @@ private: ? Storage::Synchronization::ImportKind::ModuleExportedImport : Storage::Synchronization::ImportKind::ModuleExportedModuleDependency; - insertDocumentImport(additionImport, - exportedImportKind, - import.moduleId, - moduleExportedImportId); + insertDocumentImport(additionImport, exportedImportKind, import.moduleId, importId); }; selectModuleExportedImportsForModuleIdStatement.readCallback(callback, @@ -1669,6 +1668,7 @@ private: auto remove = [&](const Storage::Synchronization::ImportView &view) { deleteDocumentImportStatement.write(view.importId); + deleteDocumentImportsWithParentImportIdStatement.write(view.sourceId, view.importId); }; Sqlite::insertUpdateDelete(range, imports, compareKey, insert, update, remove); @@ -2700,21 +2700,21 @@ private: Sqlite::StrictColumnType::Integer); auto &minorVersionColumn = table.addColumn("minorVersion", Sqlite::StrictColumnType::Integer); - auto &moduleExportedModuleIdColumn = table.addColumn("moduleExportedModuleId", - Sqlite::StrictColumnType::Integer); + auto &parentImportIdColumn = table.addColumn("parentImportId", + Sqlite::StrictColumnType::Integer); table.addUniqueIndex({sourceIdColumn, moduleIdColumn, kindColumn, sourceModuleIdColumn, - moduleExportedModuleIdColumn}, + parentImportIdColumn}, "majorVersion IS NULL AND minorVersion IS NULL"); table.addUniqueIndex({sourceIdColumn, moduleIdColumn, kindColumn, sourceModuleIdColumn, majorVersionColumn, - moduleExportedModuleIdColumn}, + parentImportIdColumn}, "majorVersion IS NOT NULL AND minorVersion IS NULL"); table.addUniqueIndex({sourceIdColumn, moduleIdColumn, @@ -2722,7 +2722,7 @@ private: sourceModuleIdColumn, majorVersionColumn, minorVersionColumn, - moduleExportedModuleIdColumn}, + parentImportIdColumn}, "majorVersion IS NOT NULL AND minorVersion IS NOT NULL"); table.initialize(database); @@ -3064,25 +3064,32 @@ public: "SELECT typeId FROM exportedTypeNames WHERE moduleId IN carray(?1, ?2, 'int32') AND " "name=?3", database}; + mutable ReadStatement<4> selectAllDocumentImportForSourceIdStatement{ + "SELECT moduleId, majorVersion, minorVersion, sourceId " + "FROM documentImports ", + database}; mutable ReadStatement<5, 2> selectDocumentImportForSourceIdStatement{ "SELECT importId, sourceId, moduleId, majorVersion, minorVersion " "FROM documentImports WHERE sourceId IN carray(?1) AND kind=?2 ORDER BY sourceId, " "moduleId, majorVersion, minorVersion", database}; - WriteStatement<5> insertDocumentImportWithoutVersionStatement{ + ReadWriteStatement<1, 5> insertDocumentImportWithoutVersionStatement{ "INSERT INTO documentImports(sourceId, moduleId, sourceModuleId, kind, " - "moduleExportedModuleId) VALUES (?1, ?2, ?3, ?4, ?5)", + "parentImportId) VALUES (?1, ?2, ?3, ?4, ?5) RETURNING importId", database}; - WriteStatement<6> insertDocumentImportWithMajorVersionStatement{ + ReadWriteStatement<1, 6> insertDocumentImportWithMajorVersionStatement{ "INSERT INTO documentImports(sourceId, moduleId, sourceModuleId, kind, majorVersion, " - "moduleExportedModuleId) VALUES (?1, ?2, ?3, ?4, ?5, ?6)", + "parentImportId) VALUES (?1, ?2, ?3, ?4, ?5, ?6) RETURNING importId", database}; - WriteStatement<7> insertDocumentImportWithVersionStatement{ + ReadWriteStatement<1, 7> insertDocumentImportWithVersionStatement{ "INSERT INTO documentImports(sourceId, moduleId, sourceModuleId, kind, majorVersion, " - "minorVersion, moduleExportedModuleId) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7)", + "minorVersion, parentImportId) VALUES (?1, ?2, ?3, ?4, ?5, ?6, ?7) RETURNING " + "importId", database}; WriteStatement<1> deleteDocumentImportStatement{"DELETE FROM documentImports WHERE importId=?1", database}; + WriteStatement<2> deleteDocumentImportsWithParentImportIdStatement{ + "DELETE FROM documentImports WHERE sourceId=?1 AND parentImportId=?2", database}; WriteStatement<1> deleteDocumentImportsWithSourceIdsStatement{ "DELETE FROM documentImports WHERE sourceId IN carray(?1)", database}; ReadStatement<1, 2> selectPropertyDeclarationIdPrototypeChainDownStatement{ @@ -3328,7 +3335,7 @@ public: database}; WriteStatement<1> deleteModuleExportedImportStatement{ "DELETE FROM moduleExportedImports WHERE moduleExportedImportId=?1", database}; - mutable ReadStatement<4, 3> selectModuleExportedImportsForModuleIdStatement{ + mutable ReadStatement<3, 3> selectModuleExportedImportsForModuleIdStatement{ "WITH RECURSIVE " " imports(moduleId, majorVersion, minorVersion, moduleExportedImportId) AS ( " " SELECT exportedModuleId, " @@ -3342,8 +3349,7 @@ public: " iif(mei.isAutoVersion=1, i.minorVersion, mei.minorVersion), " " mei.moduleExportedImportId " " FROM moduleExportedImports AS mei JOIN imports AS i USING(moduleId)) " - "SELECT DISTINCT moduleId, ifnull(majorVersion, -1), ifnull(minorVersion, -1), " - " moduleExportedImportId " + "SELECT DISTINCT moduleId, ifnull(majorVersion, -1), ifnull(minorVersion, -1) " "FROM imports", database}; mutable ReadStatement<1, 1> selectPropertyDeclarationIdsForTypeStatement{ |