QmlDesigner: Remove foreign key for model id

Removed unnecessary foreign key to reduce overhead. Planning to decouple
module ID from project storage to enable globally unique module
identifiers.

Change-Id: I1068a8b7dac47c7b966c9c283d790bf5439100ef
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
Marco Bubke
2025-06-20 01:45:25 +02:00
parent 00df54b0be
commit 3d65ad1ad7
2 changed files with 17 additions and 54 deletions

View File

@@ -961,18 +961,17 @@ public:
Initializer(Database &database, bool isInitialized)
{
if (!isInitialized) {
auto moduleIdColumn = createModulesTable(database);
createTypesAndePropertyDeclarationsTables(database, moduleIdColumn);
createModulesTable(database);
createTypesAndePropertyDeclarationsTables(database);
createBasesTable(database);
createPrototypeTable(database);
createExportedTypeNamesTable(database, moduleIdColumn);
createExportedTypeNamesTable(database);
createImportedTypeNamesTable(database);
createEnumerationsTable(database);
createFunctionsTable(database);
createSignalsTable(database);
createModuleExportedImportsTable(database, moduleIdColumn);
createDocumentImportsTable(database, moduleIdColumn);
createModuleExportedImportsTable(database);
createDocumentImportsTable(database);
createFileStatusesTable(database);
createDirectoryInfosTable(database);
createPropertyEditorPathsTable(database);
@@ -981,8 +980,7 @@ public:
database.setIsInitialized(true);
}
void createTypesAndePropertyDeclarationsTables(
Database &database, [[maybe_unused]] const Sqlite::StrictColumn &foreignModuleIdColumn)
void createTypesAndePropertyDeclarationsTables(Database &database)
{
Sqlite::StrictTable typesTable;
typesTable.setUseIfNotExists(true);
@@ -1083,18 +1081,14 @@ public:
table.initialize(database);
}
void createExportedTypeNamesTable(Database &database,
const Sqlite::StrictColumn &foreignModuleIdColumn)
void createExportedTypeNamesTable(Database &database)
{
Sqlite::StrictTable table;
table.setUseIfNotExists(true);
table.setUseWithoutRowId(true);
table.setName("exportedTypeNames");
auto &nameColumn = table.addColumn("name", Sqlite::StrictColumnType::Text);
auto &moduleIdColumn = table.addForeignKeyColumn("moduleId",
foreignModuleIdColumn,
Sqlite::ForeignKeyAction::NoAction,
Sqlite::ForeignKeyAction::NoAction);
auto &moduleIdColumn = table.addColumn("moduleId", Sqlite::StrictColumnType::Integer);
auto &typeIdColumn = table.addColumn("typeId", Sqlite::StrictColumnType::Integer);
auto &majorVersionColumn = table.addColumn("majorVersion", Sqlite::StrictColumnType::Integer);
auto &minorVersionColumn = table.addColumn("minorVersion", Sqlite::StrictColumnType::Integer);
@@ -1178,14 +1172,13 @@ public:
table.initialize(database);
}
Sqlite::StrictColumn createModulesTable(Database &database)
void createModulesTable(Database &database)
{
Sqlite::StrictTable table;
table.setUseIfNotExists(true);
table.setName("modules");
auto &modelIdColumn = table.addColumn("moduleId",
Sqlite::StrictColumnType::Integer,
{Sqlite::PrimaryKey{}});
table.addColumn("moduleId", Sqlite::StrictColumnType::Integer, {Sqlite::PrimaryKey{}});
auto &nameColumn = table.addColumn("name", Sqlite::StrictColumnType::Text);
auto &kindColumn = table.addColumn("kind", Sqlite::StrictColumnType::Integer);
@@ -1193,12 +1186,9 @@ public:
table.addIndex({kindColumn});
table.initialize(database);
return std::move(modelIdColumn);
}
void createModuleExportedImportsTable(Database &database,
const Sqlite::StrictColumn &foreignModuleIdColumn)
void createModuleExportedImportsTable(Database &database)
{
Sqlite::StrictTable table;
table.setUseIfNotExists(true);
@@ -1206,11 +1196,7 @@ public:
table.addColumn("moduleExportedImportId",
Sqlite::StrictColumnType::Integer,
{Sqlite::PrimaryKey{}});
auto &moduleIdColumn = table.addForeignKeyColumn("moduleId",
foreignModuleIdColumn,
Sqlite::ForeignKeyAction::NoAction,
Sqlite::ForeignKeyAction::Cascade,
Sqlite::Enforment::Immediate);
auto &moduleIdColumn = table.addColumn("moduleId", Sqlite::StrictColumnType::Integer);
auto &sourceIdColumn = table.addColumn("exportedModuleId", Sqlite::StrictColumnType::Integer);
table.addColumn("isAutoVersion", Sqlite::StrictColumnType::Integer);
table.addColumn("majorVersion", Sqlite::StrictColumnType::Integer);
@@ -1221,24 +1207,16 @@ public:
table.initialize(database);
}
void createDocumentImportsTable(Database &database,
const Sqlite::StrictColumn &foreignModuleIdColumn)
void createDocumentImportsTable(Database &database)
{
Sqlite::StrictTable table;
table.setUseIfNotExists(true);
table.setName("documentImports");
table.addColumn("importId", Sqlite::StrictColumnType::Integer, {Sqlite::PrimaryKey{}});
auto &sourceIdColumn = table.addColumn("sourceId", Sqlite::StrictColumnType::Integer);
auto &moduleIdColumn = table.addForeignKeyColumn("moduleId",
foreignModuleIdColumn,
Sqlite::ForeignKeyAction::NoAction,
Sqlite::ForeignKeyAction::Cascade,
Sqlite::Enforment::Immediate);
auto &sourceModuleIdColumn = table.addForeignKeyColumn("sourceModuleId",
foreignModuleIdColumn,
Sqlite::ForeignKeyAction::NoAction,
Sqlite::ForeignKeyAction::Cascade,
Sqlite::Enforment::Immediate);
auto &moduleIdColumn = table.addColumn("moduleId", Sqlite::StrictColumnType::Integer);
auto &sourceModuleIdColumn = table.addColumn("sourceModuleId",
Sqlite::StrictColumnType::Integer);
auto &kindColumn = table.addColumn("kind", Sqlite::StrictColumnType::Integer);
auto &majorVersionColumn = table.addColumn("majorVersion", Sqlite::StrictColumnType::Integer);
auto &minorVersionColumn = table.addColumn("minorVersion", Sqlite::StrictColumnType::Integer);

View File

@@ -1589,21 +1589,6 @@ TEST_F(ProjectStorage,
ASSERT_THAT(fetchType(sourceId1, "QQuickItem"), HasPrototypeId(fetchTypeId(sourceId2, "QObject")));
}
TEST_F(ProjectStorage, synchronize_types_adds_new_types_with_missing_module)
{
auto package{createSimpleSynchronizationPackage()};
package.types.push_back(Storage::Synchronization::Type{
"QObject2",
Storage::Synchronization::ImportedType{},
Storage::Synchronization::ImportedType{},
TypeTraitsKind::Reference,
sourceId3,
{Storage::Synchronization::ExportedType{ModuleId::create(22), "Object2"},
Storage::Synchronization::ExportedType{pathToModuleId, "Obj2"}}});
ASSERT_THROW(storage.synchronize(std::move(package)), QmlDesigner::ExportedTypeCannotBeInserted);
}
TEST_F(ProjectStorage, synchronize_types_adds_new_types_reverse_order)
{
auto package{createSimpleSynchronizationPackage()};