aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2023-09-14 17:34:29 +0200
committerMarco Bubke <marco.bubke@qt.io>2023-10-04 10:28:56 +0000
commit975a282130a846f55ef204436b96c01ddf17eab0 (patch)
treef196fd792a5b6fb205021a0db5271bd040a037a3 /src
parentebe1c889b79c7e6abd93adc8fe2f9c155d82c9fa (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.txt16
-rw-r--r--src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h96
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{