forked from qt-creator/qt-creator
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:
@@ -961,18 +961,17 @@ public:
|
|||||||
Initializer(Database &database, bool isInitialized)
|
Initializer(Database &database, bool isInitialized)
|
||||||
{
|
{
|
||||||
if (!isInitialized) {
|
if (!isInitialized) {
|
||||||
auto moduleIdColumn = createModulesTable(database);
|
createModulesTable(database);
|
||||||
|
createTypesAndePropertyDeclarationsTables(database);
|
||||||
createTypesAndePropertyDeclarationsTables(database, moduleIdColumn);
|
|
||||||
createBasesTable(database);
|
createBasesTable(database);
|
||||||
createPrototypeTable(database);
|
createPrototypeTable(database);
|
||||||
createExportedTypeNamesTable(database, moduleIdColumn);
|
createExportedTypeNamesTable(database);
|
||||||
createImportedTypeNamesTable(database);
|
createImportedTypeNamesTable(database);
|
||||||
createEnumerationsTable(database);
|
createEnumerationsTable(database);
|
||||||
createFunctionsTable(database);
|
createFunctionsTable(database);
|
||||||
createSignalsTable(database);
|
createSignalsTable(database);
|
||||||
createModuleExportedImportsTable(database, moduleIdColumn);
|
createModuleExportedImportsTable(database);
|
||||||
createDocumentImportsTable(database, moduleIdColumn);
|
createDocumentImportsTable(database);
|
||||||
createFileStatusesTable(database);
|
createFileStatusesTable(database);
|
||||||
createDirectoryInfosTable(database);
|
createDirectoryInfosTable(database);
|
||||||
createPropertyEditorPathsTable(database);
|
createPropertyEditorPathsTable(database);
|
||||||
@@ -981,8 +980,7 @@ public:
|
|||||||
database.setIsInitialized(true);
|
database.setIsInitialized(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void createTypesAndePropertyDeclarationsTables(
|
void createTypesAndePropertyDeclarationsTables(Database &database)
|
||||||
Database &database, [[maybe_unused]] const Sqlite::StrictColumn &foreignModuleIdColumn)
|
|
||||||
{
|
{
|
||||||
Sqlite::StrictTable typesTable;
|
Sqlite::StrictTable typesTable;
|
||||||
typesTable.setUseIfNotExists(true);
|
typesTable.setUseIfNotExists(true);
|
||||||
@@ -1083,18 +1081,14 @@ public:
|
|||||||
table.initialize(database);
|
table.initialize(database);
|
||||||
}
|
}
|
||||||
|
|
||||||
void createExportedTypeNamesTable(Database &database,
|
void createExportedTypeNamesTable(Database &database)
|
||||||
const Sqlite::StrictColumn &foreignModuleIdColumn)
|
|
||||||
{
|
{
|
||||||
Sqlite::StrictTable table;
|
Sqlite::StrictTable table;
|
||||||
table.setUseIfNotExists(true);
|
table.setUseIfNotExists(true);
|
||||||
table.setUseWithoutRowId(true);
|
table.setUseWithoutRowId(true);
|
||||||
table.setName("exportedTypeNames");
|
table.setName("exportedTypeNames");
|
||||||
auto &nameColumn = table.addColumn("name", Sqlite::StrictColumnType::Text);
|
auto &nameColumn = table.addColumn("name", Sqlite::StrictColumnType::Text);
|
||||||
auto &moduleIdColumn = table.addForeignKeyColumn("moduleId",
|
auto &moduleIdColumn = table.addColumn("moduleId", Sqlite::StrictColumnType::Integer);
|
||||||
foreignModuleIdColumn,
|
|
||||||
Sqlite::ForeignKeyAction::NoAction,
|
|
||||||
Sqlite::ForeignKeyAction::NoAction);
|
|
||||||
auto &typeIdColumn = table.addColumn("typeId", Sqlite::StrictColumnType::Integer);
|
auto &typeIdColumn = table.addColumn("typeId", Sqlite::StrictColumnType::Integer);
|
||||||
auto &majorVersionColumn = table.addColumn("majorVersion", Sqlite::StrictColumnType::Integer);
|
auto &majorVersionColumn = table.addColumn("majorVersion", Sqlite::StrictColumnType::Integer);
|
||||||
auto &minorVersionColumn = table.addColumn("minorVersion", Sqlite::StrictColumnType::Integer);
|
auto &minorVersionColumn = table.addColumn("minorVersion", Sqlite::StrictColumnType::Integer);
|
||||||
@@ -1178,14 +1172,13 @@ public:
|
|||||||
table.initialize(database);
|
table.initialize(database);
|
||||||
}
|
}
|
||||||
|
|
||||||
Sqlite::StrictColumn createModulesTable(Database &database)
|
void createModulesTable(Database &database)
|
||||||
{
|
{
|
||||||
Sqlite::StrictTable table;
|
Sqlite::StrictTable table;
|
||||||
table.setUseIfNotExists(true);
|
table.setUseIfNotExists(true);
|
||||||
table.setName("modules");
|
table.setName("modules");
|
||||||
auto &modelIdColumn = table.addColumn("moduleId",
|
|
||||||
Sqlite::StrictColumnType::Integer,
|
table.addColumn("moduleId", Sqlite::StrictColumnType::Integer, {Sqlite::PrimaryKey{}});
|
||||||
{Sqlite::PrimaryKey{}});
|
|
||||||
auto &nameColumn = table.addColumn("name", Sqlite::StrictColumnType::Text);
|
auto &nameColumn = table.addColumn("name", Sqlite::StrictColumnType::Text);
|
||||||
auto &kindColumn = table.addColumn("kind", Sqlite::StrictColumnType::Integer);
|
auto &kindColumn = table.addColumn("kind", Sqlite::StrictColumnType::Integer);
|
||||||
|
|
||||||
@@ -1193,12 +1186,9 @@ public:
|
|||||||
table.addIndex({kindColumn});
|
table.addIndex({kindColumn});
|
||||||
|
|
||||||
table.initialize(database);
|
table.initialize(database);
|
||||||
|
|
||||||
return std::move(modelIdColumn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void createModuleExportedImportsTable(Database &database,
|
void createModuleExportedImportsTable(Database &database)
|
||||||
const Sqlite::StrictColumn &foreignModuleIdColumn)
|
|
||||||
{
|
{
|
||||||
Sqlite::StrictTable table;
|
Sqlite::StrictTable table;
|
||||||
table.setUseIfNotExists(true);
|
table.setUseIfNotExists(true);
|
||||||
@@ -1206,11 +1196,7 @@ public:
|
|||||||
table.addColumn("moduleExportedImportId",
|
table.addColumn("moduleExportedImportId",
|
||||||
Sqlite::StrictColumnType::Integer,
|
Sqlite::StrictColumnType::Integer,
|
||||||
{Sqlite::PrimaryKey{}});
|
{Sqlite::PrimaryKey{}});
|
||||||
auto &moduleIdColumn = table.addForeignKeyColumn("moduleId",
|
auto &moduleIdColumn = table.addColumn("moduleId", Sqlite::StrictColumnType::Integer);
|
||||||
foreignModuleIdColumn,
|
|
||||||
Sqlite::ForeignKeyAction::NoAction,
|
|
||||||
Sqlite::ForeignKeyAction::Cascade,
|
|
||||||
Sqlite::Enforment::Immediate);
|
|
||||||
auto &sourceIdColumn = table.addColumn("exportedModuleId", Sqlite::StrictColumnType::Integer);
|
auto &sourceIdColumn = table.addColumn("exportedModuleId", Sqlite::StrictColumnType::Integer);
|
||||||
table.addColumn("isAutoVersion", Sqlite::StrictColumnType::Integer);
|
table.addColumn("isAutoVersion", Sqlite::StrictColumnType::Integer);
|
||||||
table.addColumn("majorVersion", Sqlite::StrictColumnType::Integer);
|
table.addColumn("majorVersion", Sqlite::StrictColumnType::Integer);
|
||||||
@@ -1221,24 +1207,16 @@ public:
|
|||||||
table.initialize(database);
|
table.initialize(database);
|
||||||
}
|
}
|
||||||
|
|
||||||
void createDocumentImportsTable(Database &database,
|
void createDocumentImportsTable(Database &database)
|
||||||
const Sqlite::StrictColumn &foreignModuleIdColumn)
|
|
||||||
{
|
{
|
||||||
Sqlite::StrictTable table;
|
Sqlite::StrictTable table;
|
||||||
table.setUseIfNotExists(true);
|
table.setUseIfNotExists(true);
|
||||||
table.setName("documentImports");
|
table.setName("documentImports");
|
||||||
table.addColumn("importId", Sqlite::StrictColumnType::Integer, {Sqlite::PrimaryKey{}});
|
table.addColumn("importId", Sqlite::StrictColumnType::Integer, {Sqlite::PrimaryKey{}});
|
||||||
auto &sourceIdColumn = table.addColumn("sourceId", Sqlite::StrictColumnType::Integer);
|
auto &sourceIdColumn = table.addColumn("sourceId", Sqlite::StrictColumnType::Integer);
|
||||||
auto &moduleIdColumn = table.addForeignKeyColumn("moduleId",
|
auto &moduleIdColumn = table.addColumn("moduleId", Sqlite::StrictColumnType::Integer);
|
||||||
foreignModuleIdColumn,
|
auto &sourceModuleIdColumn = table.addColumn("sourceModuleId",
|
||||||
Sqlite::ForeignKeyAction::NoAction,
|
Sqlite::StrictColumnType::Integer);
|
||||||
Sqlite::ForeignKeyAction::Cascade,
|
|
||||||
Sqlite::Enforment::Immediate);
|
|
||||||
auto &sourceModuleIdColumn = table.addForeignKeyColumn("sourceModuleId",
|
|
||||||
foreignModuleIdColumn,
|
|
||||||
Sqlite::ForeignKeyAction::NoAction,
|
|
||||||
Sqlite::ForeignKeyAction::Cascade,
|
|
||||||
Sqlite::Enforment::Immediate);
|
|
||||||
auto &kindColumn = table.addColumn("kind", Sqlite::StrictColumnType::Integer);
|
auto &kindColumn = table.addColumn("kind", Sqlite::StrictColumnType::Integer);
|
||||||
auto &majorVersionColumn = table.addColumn("majorVersion", Sqlite::StrictColumnType::Integer);
|
auto &majorVersionColumn = table.addColumn("majorVersion", Sqlite::StrictColumnType::Integer);
|
||||||
auto &minorVersionColumn = table.addColumn("minorVersion", Sqlite::StrictColumnType::Integer);
|
auto &minorVersionColumn = table.addColumn("minorVersion", Sqlite::StrictColumnType::Integer);
|
||||||
|
@@ -1589,21 +1589,6 @@ TEST_F(ProjectStorage,
|
|||||||
ASSERT_THAT(fetchType(sourceId1, "QQuickItem"), HasPrototypeId(fetchTypeId(sourceId2, "QObject")));
|
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)
|
TEST_F(ProjectStorage, synchronize_types_adds_new_types_reverse_order)
|
||||||
{
|
{
|
||||||
auto package{createSimpleSynchronizationPackage()};
|
auto package{createSimpleSynchronizationPackage()};
|
||||||
|
Reference in New Issue
Block a user