diff --git a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h index 792d4146193..210e22004b4 100644 --- a/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h +++ b/src/plugins/qmldesigner/designercore/projectstorage/projectstorage.h @@ -2692,7 +2692,9 @@ public: "SELECT kind FROM importedTypeNames WHERE importedTypeNameId=?1", database}; mutable ReadStatement<1, 1> selectTypeIdForQualifiedImportedTypeNameNamesStatement{ "SELECT typeId FROM importedTypeNames AS itn JOIN documentImports AS di ON " - "importOrSourceId=importId JOIN exportedTypeNames AS etn USING(moduleId) WHERE " + "importOrSourceId=di.importId JOIN documentImports AS di2 ON di.sourceId=di2.sourceId AND " + "di.moduleId=di2.sourceModuleId " + "JOIN exportedTypeNames AS etn ON di2.moduleId=etn.moduleId WHERE " "itn.kind=2 AND importedTypeNameId=?1 AND itn.name=etn.name AND " "(di.majorVersion IS NULL OR (di.majorVersion=etn.majorVersion AND (di.minorVersion IS " "NULL OR di.minorVersion>=etn.minorVersion))) ORDER BY etn.majorVersion DESC NULLS FIRST, " @@ -2779,7 +2781,7 @@ public: " iif(mei.isAutoVersion=1, i.minorVersion, mei.minorVersion), " " mei.moduleExportedImportId " " FROM moduleExportedImports AS mei JOIN imports AS i USING(moduleId)) " - "SELECT moduleId, ifnull(majorVersion, -1), ifnull(minorVersion, -1), " + "SELECT DISTINCT moduleId, ifnull(majorVersion, -1), ifnull(minorVersion, -1), " " moduleExportedImportId " "FROM imports", database}; diff --git a/tests/unit/unittest/projectstorage-test.cpp b/tests/unit/unittest/projectstorage-test.cpp index 525fc85d1bf..ebc60ff22ea 100644 --- a/tests/unit/unittest/projectstorage-test.cpp +++ b/tests/unit/unittest/projectstorage-test.cpp @@ -4276,4 +4276,37 @@ TEST_F(ProjectStorage, ModuleExportedImportDistinguishBetweenDependencyAndImport UnorderedElementsAre(IsExportedType(myModuleModuleId, "MyItem")))))); } +TEST_F(ProjectStorage, ModuleExportedImportWithQualifiedImportedType) +{ + auto package{createModuleExportedImportSynchronizationPackage()}; + package.types.back().prototype = Storage::QualifiedImportedType{ + "Object", Storage::Import{qtQuick3DModuleId, Storage::Version{1}, sourceId4}}; + + storage.synchronize(std::move(package)); + + ASSERT_THAT(storage.fetchTypes(), + UnorderedElementsAre( + AllOf(IsStorageType(sourceId1, + "QQuickItem", + fetchTypeId(sourceId2, "QObject"), + TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(qtQuickModuleId, "Item")))), + AllOf(IsStorageType(sourceId2, "QObject", TypeId{}, TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(qmlModuleId, "Object")))), + AllOf(IsStorageType(sourceId3, + "QQuickItem3d", + fetchTypeId(sourceId1, "QQuickItem"), + TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(qtQuick3DModuleId, "Item3D")))), + AllOf(IsStorageType(sourceId4, + "MyItem", + fetchTypeId(sourceId2, "QObject"), + TypeAccessSemantics::Reference), + Field(&Storage::Type::exportedTypes, + UnorderedElementsAre(IsExportedType(myModuleModuleId, "MyItem")))))); +} + } // namespace