forked from qt-creator/qt-creator
QmlDesigner: Use error notifier for property type name resolving
We can polish it later. But so far the architecture works and the problematics cases of missing types is handled. Task-number: QDS-12761 Change-Id: Ifb55a5772fddfa7719a4d690b24b0539679f79ec Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
This commit is contained in:
@@ -64,8 +64,11 @@ struct ProjectStorage::Statements
|
|||||||
"ORDER BY minorVersion DESC "
|
"ORDER BY minorVersion DESC "
|
||||||
"LIMIT 1",
|
"LIMIT 1",
|
||||||
database};
|
database};
|
||||||
mutable Sqlite::ReadStatement<3, 1> selectPropertyDeclarationResultByPropertyDeclarationIdStatement{
|
mutable Sqlite::ReadStatement<4, 1> selectPropertyDeclarationResultByPropertyDeclarationIdStatement{
|
||||||
"SELECT propertyTypeId, propertyDeclarationId, propertyTraits "
|
"SELECT propertyImportedTypeNameId, "
|
||||||
|
" propertyTypeId, "
|
||||||
|
" propertyDeclarationId, "
|
||||||
|
" propertyTraits "
|
||||||
"FROM propertyDeclarations "
|
"FROM propertyDeclarations "
|
||||||
"WHERE propertyDeclarationId=?1 "
|
"WHERE propertyDeclarationId=?1 "
|
||||||
"LIMIT 1",
|
"LIMIT 1",
|
||||||
@@ -141,25 +144,63 @@ struct ProjectStorage::Statements
|
|||||||
Sqlite::WriteStatement<1> deleteSignalDeclarationByTypeIdStatement{
|
Sqlite::WriteStatement<1> deleteSignalDeclarationByTypeIdStatement{
|
||||||
"DELETE FROM signalDeclarations WHERE typeId=?", database};
|
"DELETE FROM signalDeclarations WHERE typeId=?", database};
|
||||||
Sqlite::WriteStatement<1> deleteTypeStatement{"DELETE FROM types WHERE typeId=?", database};
|
Sqlite::WriteStatement<1> deleteTypeStatement{"DELETE FROM types WHERE typeId=?", database};
|
||||||
mutable Sqlite::ReadStatement<4, 1> selectPropertyDeclarationsByTypeIdStatement{
|
mutable Sqlite::ReadStatement<6, 1> selectPropertyDeclarationsByTypeIdStatement{
|
||||||
"SELECT name, propertyTypeId, propertyTraits, (SELECT name FROM "
|
"SELECT "
|
||||||
"propertyDeclarations WHERE propertyDeclarationId=pd.aliasPropertyDeclarationId) FROM "
|
" propertyDeclarationId, "
|
||||||
"propertyDeclarations AS pd WHERE typeId=?",
|
" name, "
|
||||||
|
" propertyTypeId, "
|
||||||
|
" propertyTraits, "
|
||||||
|
" (SELECT name "
|
||||||
|
" FROM propertyDeclarations "
|
||||||
|
" WHERE propertyDeclarationId=pd.aliasPropertyDeclarationId), "
|
||||||
|
" typeId "
|
||||||
|
"FROM propertyDeclarations AS pd "
|
||||||
|
"WHERE typeId=?",
|
||||||
database};
|
database};
|
||||||
Sqlite::ReadStatement<6, 1> selectPropertyDeclarationsForTypeIdStatement{
|
Sqlite::ReadStatement<6, 1> selectPropertyDeclarationsForTypeIdStatement{
|
||||||
"SELECT name, propertyTraits, propertyTypeId, propertyImportedTypeNameId, "
|
"SELECT "
|
||||||
"propertyDeclarationId, aliasPropertyDeclarationId FROM propertyDeclarations "
|
" name, "
|
||||||
"WHERE typeId=? ORDER BY name",
|
" propertyTraits, "
|
||||||
|
" propertyTypeId, "
|
||||||
|
" propertyImportedTypeNameId, "
|
||||||
|
" propertyDeclarationId, "
|
||||||
|
" aliasPropertyDeclarationId "
|
||||||
|
"FROM propertyDeclarations "
|
||||||
|
"WHERE typeId=? "
|
||||||
|
"ORDER BY name",
|
||||||
database};
|
database};
|
||||||
Sqlite::ReadWriteStatement<1, 5> insertPropertyDeclarationStatement{
|
Sqlite::ReadWriteStatement<1, 5> insertPropertyDeclarationStatement{
|
||||||
"INSERT INTO propertyDeclarations(typeId, name, propertyTypeId, propertyTraits, "
|
"INSERT INTO propertyDeclarations("
|
||||||
"propertyImportedTypeNameId, aliasPropertyDeclarationId) VALUES(?1, ?2, ?3, ?4, ?5, NULL) "
|
" typeId, "
|
||||||
|
" name, "
|
||||||
|
" propertyTypeId, "
|
||||||
|
" propertyTraits, "
|
||||||
|
" propertyImportedTypeNameId, "
|
||||||
|
" aliasPropertyDeclarationId) "
|
||||||
|
"VALUES(?1, ?2, ?3, ?4, ?5, NULL) "
|
||||||
"RETURNING propertyDeclarationId",
|
"RETURNING propertyDeclarationId",
|
||||||
database};
|
database};
|
||||||
Sqlite::WriteStatement<4> updatePropertyDeclarationStatement{
|
Sqlite::WriteStatement<4> updatePropertyDeclarationStatement{
|
||||||
"UPDATE propertyDeclarations SET propertyTypeId=?2, propertyTraits=?3, "
|
"UPDATE propertyDeclarations "
|
||||||
"propertyImportedTypeNameId=?4, aliasPropertyDeclarationId=NULL WHERE "
|
"SET "
|
||||||
"propertyDeclarationId=?1",
|
" propertyTypeId=?2, "
|
||||||
|
" propertyTraits=?3, "
|
||||||
|
" propertyImportedTypeNameId=?4, "
|
||||||
|
" aliasPropertyImportedTypeNameId=NULL, "
|
||||||
|
" aliasPropertyDeclarationName=NULL, "
|
||||||
|
" aliasPropertyDeclarationTailName=NULL, "
|
||||||
|
" aliasPropertyDeclarationId=NULL, "
|
||||||
|
" aliasPropertyDeclarationTailId=NULL "
|
||||||
|
"WHERE propertyDeclarationId=?1",
|
||||||
|
database};
|
||||||
|
Sqlite::WriteStatement<2> resetAliasPropertyDeclarationStatement{
|
||||||
|
"UPDATE propertyDeclarations "
|
||||||
|
"SET propertyTypeId=NULL, "
|
||||||
|
" propertyTraits=?2, "
|
||||||
|
" propertyImportedTypeNameId=NULL, "
|
||||||
|
" aliasPropertyDeclarationId=NULL, "
|
||||||
|
" aliasPropertyDeclarationTailId=NULL "
|
||||||
|
"WHERE propertyDeclarationId=?1",
|
||||||
database};
|
database};
|
||||||
Sqlite::WriteStatement<3> updatePropertyAliasDeclarationRecursivelyWithTypeAndTraitsStatement{
|
Sqlite::WriteStatement<3> updatePropertyAliasDeclarationRecursivelyWithTypeAndTraitsStatement{
|
||||||
"WITH RECURSIVE "
|
"WITH RECURSIVE "
|
||||||
@@ -193,17 +234,30 @@ struct ProjectStorage::Statements
|
|||||||
Sqlite::WriteStatement<1> deletePropertyDeclarationStatement{
|
Sqlite::WriteStatement<1> deletePropertyDeclarationStatement{
|
||||||
"DELETE FROM propertyDeclarations WHERE propertyDeclarationId=?", database};
|
"DELETE FROM propertyDeclarations WHERE propertyDeclarationId=?", database};
|
||||||
Sqlite::ReadStatement<3, 1> selectPropertyDeclarationsWithAliasForTypeIdStatement{
|
Sqlite::ReadStatement<3, 1> selectPropertyDeclarationsWithAliasForTypeIdStatement{
|
||||||
"SELECT name, propertyDeclarationId, aliasPropertyDeclarationId FROM propertyDeclarations "
|
"SELECT name, "
|
||||||
"WHERE typeId=? AND aliasPropertyDeclarationId IS NOT NULL ORDER BY name",
|
" propertyDeclarationId, "
|
||||||
|
" aliasPropertyDeclarationId "
|
||||||
|
"FROM propertyDeclarations "
|
||||||
|
"WHERE typeId=? AND aliasPropertyDeclarationId IS NOT NULL "
|
||||||
|
"ORDER BY name",
|
||||||
database};
|
database};
|
||||||
Sqlite::WriteStatement<5> updatePropertyDeclarationWithAliasAndTypeStatement{
|
Sqlite::WriteStatement<5> updatePropertyDeclarationWithAliasAndTypeStatement{
|
||||||
"UPDATE propertyDeclarations SET propertyTypeId=?2, propertyTraits=?3, "
|
"UPDATE propertyDeclarations "
|
||||||
"propertyImportedTypeNameId=?4, aliasPropertyDeclarationId=?5 WHERE "
|
"SET propertyTypeId=?2, "
|
||||||
"propertyDeclarationId=?1",
|
" propertyTraits=?3, "
|
||||||
|
" propertyImportedTypeNameId=?4, "
|
||||||
|
" aliasPropertyDeclarationId=?5 "
|
||||||
|
"WHERE propertyDeclarationId=?1",
|
||||||
database};
|
database};
|
||||||
Sqlite::ReadWriteStatement<1, 2> insertAliasPropertyDeclarationStatement{
|
Sqlite::ReadWriteStatement<1, 5> insertAliasPropertyDeclarationStatement{
|
||||||
"INSERT INTO propertyDeclarations(typeId, name) VALUES(?1, ?2) RETURNING "
|
"INSERT INTO propertyDeclarations("
|
||||||
"propertyDeclarationId",
|
" typeId, "
|
||||||
|
" name, "
|
||||||
|
" aliasPropertyImportedTypeNameId, "
|
||||||
|
" aliasPropertyDeclarationName, "
|
||||||
|
" aliasPropertyDeclarationTailName) "
|
||||||
|
"VALUES(?1, ?2, ?3, ?4, ?5) "
|
||||||
|
"RETURNING propertyDeclarationId",
|
||||||
database};
|
database};
|
||||||
mutable Sqlite::ReadStatement<4, 1> selectFunctionDeclarationsForTypeIdStatement{
|
mutable Sqlite::ReadStatement<4, 1> selectFunctionDeclarationsForTypeIdStatement{
|
||||||
"SELECT name, returnTypeName, signature, functionDeclarationId FROM "
|
"SELECT name, returnTypeName, signature, functionDeclarationId FROM "
|
||||||
@@ -334,26 +388,26 @@ struct ProjectStorage::Statements
|
|||||||
"NULL OR propertyTypeId IS NOT NULL OR propertyTraits IS NOT NULL)",
|
"NULL OR propertyTypeId IS NOT NULL OR propertyTraits IS NOT NULL)",
|
||||||
database};
|
database};
|
||||||
Sqlite::ReadStatement<5, 1> selectAliasPropertiesDeclarationForPropertiesWithTypeIdStatement{
|
Sqlite::ReadStatement<5, 1> selectAliasPropertiesDeclarationForPropertiesWithTypeIdStatement{
|
||||||
"SELECT alias.typeId, alias.propertyDeclarationId, alias.propertyImportedTypeNameId, "
|
"SELECT alias.typeId, alias.propertyDeclarationId, alias.aliasPropertyImportedTypeNameId, "
|
||||||
" alias.aliasPropertyDeclarationId, alias.aliasPropertyDeclarationTailId "
|
" alias.aliasPropertyDeclarationId, alias.aliasPropertyDeclarationTailId "
|
||||||
"FROM propertyDeclarations AS alias JOIN propertyDeclarations AS target "
|
"FROM propertyDeclarations AS alias JOIN propertyDeclarations AS target "
|
||||||
" ON alias.aliasPropertyDeclarationId=target.propertyDeclarationId OR "
|
" ON alias.aliasPropertyDeclarationId=target.propertyDeclarationId OR "
|
||||||
" alias.aliasPropertyDeclarationTailId=target.propertyDeclarationId "
|
" alias.aliasPropertyDeclarationTailId=target.propertyDeclarationId "
|
||||||
"WHERE alias.propertyTypeId=?1 "
|
"WHERE alias.propertyTypeId=?1 "
|
||||||
"UNION ALL "
|
"UNION ALL "
|
||||||
"SELECT alias.typeId, alias.propertyDeclarationId, alias.propertyImportedTypeNameId, "
|
"SELECT alias.typeId, alias.propertyDeclarationId, alias.aliasPropertyImportedTypeNameId, "
|
||||||
" alias.aliasPropertyDeclarationId, alias.aliasPropertyDeclarationTailId "
|
" alias.aliasPropertyDeclarationId, alias.aliasPropertyDeclarationTailId "
|
||||||
"FROM propertyDeclarations AS alias JOIN propertyDeclarations AS target "
|
"FROM propertyDeclarations AS alias JOIN propertyDeclarations AS target "
|
||||||
" ON alias.aliasPropertyDeclarationId=target.propertyDeclarationId OR "
|
" ON alias.aliasPropertyDeclarationId=target.propertyDeclarationId OR "
|
||||||
" alias.aliasPropertyDeclarationTailId=target.propertyDeclarationId "
|
" alias.aliasPropertyDeclarationTailId=target.propertyDeclarationId "
|
||||||
"WHERE target.typeId=?1 "
|
"WHERE target.typeId=?1 "
|
||||||
"UNION ALL "
|
"UNION ALL "
|
||||||
"SELECT alias.typeId, alias.propertyDeclarationId, alias.propertyImportedTypeNameId, "
|
"SELECT alias.typeId, alias.propertyDeclarationId, alias.aliasPropertyImportedTypeNameId, "
|
||||||
" alias.aliasPropertyDeclarationId, alias.aliasPropertyDeclarationTailId "
|
" alias.aliasPropertyDeclarationId, alias.aliasPropertyDeclarationTailId "
|
||||||
"FROM propertyDeclarations AS alias JOIN propertyDeclarations AS target "
|
"FROM propertyDeclarations AS alias JOIN propertyDeclarations AS target "
|
||||||
" ON alias.aliasPropertyDeclarationId=target.propertyDeclarationId OR "
|
" ON alias.aliasPropertyDeclarationId=target.propertyDeclarationId OR "
|
||||||
" alias.aliasPropertyDeclarationTailId=target.propertyDeclarationId "
|
" alias.aliasPropertyDeclarationTailId=target.propertyDeclarationId "
|
||||||
"WHERE alias.propertyImportedTypeNameId IN "
|
"WHERE alias.aliasPropertyImportedTypeNameId IN "
|
||||||
" (SELECT importedTypeNameId FROM exportedTypeNames JOIN importedTypeNames USING(name) "
|
" (SELECT importedTypeNameId FROM exportedTypeNames JOIN importedTypeNames USING(name) "
|
||||||
" WHERE typeId=?1)",
|
" WHERE typeId=?1)",
|
||||||
database};
|
database};
|
||||||
@@ -376,6 +430,30 @@ struct ProjectStorage::Statements
|
|||||||
"aliasPropertyDeclarationId IS NULL RETURNING typeId, propertyDeclarationId, "
|
"aliasPropertyDeclarationId IS NULL RETURNING typeId, propertyDeclarationId, "
|
||||||
"propertyImportedTypeNameId",
|
"propertyImportedTypeNameId",
|
||||||
database};
|
database};
|
||||||
|
Sqlite::ReadWriteStatement<3, 2> selectPropertyDeclarationForPrototypeIdAndTypeNameStatement{
|
||||||
|
"SELECT typeId, propertyDeclarationId, propertyImportedTypeNameId "
|
||||||
|
"FROM propertyDeclarations "
|
||||||
|
"WHERE propertyTypeId IS ?2 "
|
||||||
|
" AND propertyImportedTypeNameId IN (SELECT importedTypeNameId "
|
||||||
|
" FROM "
|
||||||
|
" importedTypeNames WHERE name=?1)",
|
||||||
|
database};
|
||||||
|
Sqlite::ReadWriteStatement<5, 2> selectAliasPropertyDeclarationForPrototypeIdAndTypeNameStatement{
|
||||||
|
"SELECT alias.typeId, "
|
||||||
|
" alias.propertyDeclarationId, "
|
||||||
|
" alias.aliasPropertyImportedTypeNameId, "
|
||||||
|
" alias.aliasPropertyDeclarationId, "
|
||||||
|
" alias.aliasPropertyDeclarationTailId "
|
||||||
|
"FROM propertyDeclarations AS alias "
|
||||||
|
" JOIN propertyDeclarations AS target "
|
||||||
|
" ON alias.aliasPropertyDeclarationId=target.propertyDeclarationId "
|
||||||
|
" OR alias.aliasPropertyDeclarationTailId=target.propertyDeclarationId "
|
||||||
|
"WHERE alias.propertyTypeId IS ?2 "
|
||||||
|
" AND target.propertyImportedTypeNameId IN "
|
||||||
|
" (SELECT importedTypeNameId "
|
||||||
|
" FROM importedTypeNames "
|
||||||
|
" WHERE name=?1)",
|
||||||
|
database};
|
||||||
mutable Sqlite::ReadStatement<1, 1> selectPropertyNameStatement{
|
mutable Sqlite::ReadStatement<1, 1> selectPropertyNameStatement{
|
||||||
"SELECT name FROM propertyDeclarations WHERE propertyDeclarationId=?", database};
|
"SELECT name FROM propertyDeclarations WHERE propertyDeclarationId=?", database};
|
||||||
Sqlite::WriteStatement<2> updatePropertyDeclarationTypeStatement{
|
Sqlite::WriteStatement<2> updatePropertyDeclarationTypeStatement{
|
||||||
@@ -418,7 +496,7 @@ struct ProjectStorage::Statements
|
|||||||
"RETURNING typeId, prototypeNameId, extensionNameId",
|
"RETURNING typeId, prototypeNameId, extensionNameId",
|
||||||
database};
|
database};
|
||||||
Sqlite::ReadStatement<2, 2> selectTypeIdForExtensionIdAndTypeNameStatement{
|
Sqlite::ReadStatement<2, 2> selectTypeIdForExtensionIdAndTypeNameStatement{
|
||||||
"SELECT typeId , prototypeNameId "
|
"SELECT typeId , extensionNameId "
|
||||||
"FROM types "
|
"FROM types "
|
||||||
"WHERE extensionNameId IN ( "
|
"WHERE extensionNameId IN ( "
|
||||||
" SELECT importedTypeNameId "
|
" SELECT importedTypeNameId "
|
||||||
@@ -443,11 +521,12 @@ struct ProjectStorage::Statements
|
|||||||
"SELECT typeId FROM prototypes WHERE typeId IS NOT NULL",
|
"SELECT typeId FROM prototypes WHERE typeId IS NOT NULL",
|
||||||
database};
|
database};
|
||||||
Sqlite::WriteStatement<3> updatePropertyDeclarationAliasIdAndTypeNameIdStatement{
|
Sqlite::WriteStatement<3> updatePropertyDeclarationAliasIdAndTypeNameIdStatement{
|
||||||
"UPDATE propertyDeclarations SET aliasPropertyDeclarationId=?2, "
|
"UPDATE propertyDeclarations "
|
||||||
"propertyImportedTypeNameId=?3 WHERE propertyDeclarationId=?1 AND "
|
"SET aliasPropertyDeclarationId=?2, "
|
||||||
"(aliasPropertyDeclarationId IS NOT ?2 OR propertyImportedTypeNameId IS NOT ?3)",
|
" propertyImportedTypeNameId=?3 "
|
||||||
|
"WHERE propertyDeclarationId=?1",
|
||||||
database};
|
database};
|
||||||
Sqlite::WriteStatement<1> updatetPropertiesDeclarationValuesOfAliasStatement{
|
Sqlite::WriteStatement<1> updatePropertiesDeclarationValuesOfAliasStatement{
|
||||||
"WITH RECURSIVE "
|
"WITH RECURSIVE "
|
||||||
" properties(propertyDeclarationId, propertyTypeId, propertyTraits) AS ( "
|
" properties(propertyDeclarationId, propertyTypeId, propertyTraits) AS ( "
|
||||||
" SELECT aliasPropertyDeclarationId, propertyTypeId, propertyTraits FROM "
|
" SELECT aliasPropertyDeclarationId, propertyTypeId, propertyTraits FROM "
|
||||||
@@ -794,6 +873,20 @@ struct ProjectStorage::Statements
|
|||||||
" WHERE prototypeId=ts.typeId OR extensionId=ts.typeId)"
|
" WHERE prototypeId=ts.typeId OR extensionId=ts.typeId)"
|
||||||
"SELECT typeId FROM typeSelection",
|
"SELECT typeId FROM typeSelection",
|
||||||
database};
|
database};
|
||||||
|
mutable Sqlite::ReadStatement<6, 0> selectBrokenAliasPropertyDeclarationsStatement{
|
||||||
|
"SELECT typeId, "
|
||||||
|
" propertyDeclarationId, "
|
||||||
|
" aliasPropertyImportedTypeNameId, "
|
||||||
|
" aliasPropertyDeclarationName, "
|
||||||
|
" aliasPropertyDeclarationTailName, "
|
||||||
|
" sourceId "
|
||||||
|
"FROM propertyDeclarations JOIN types USING(typeId) "
|
||||||
|
"WHERE "
|
||||||
|
" aliasPropertyImportedTypeNameId IS NOT NULL "
|
||||||
|
" AND "
|
||||||
|
" propertyImportedTypeNameId IS NULL "
|
||||||
|
"LIMIT 1",
|
||||||
|
database};
|
||||||
};
|
};
|
||||||
|
|
||||||
class ProjectStorage::Initializer
|
class ProjectStorage::Initializer
|
||||||
@@ -893,14 +986,17 @@ public:
|
|||||||
{Sqlite::PrimaryKey{}});
|
{Sqlite::PrimaryKey{}});
|
||||||
auto &typeIdColumn = propertyDeclarationTable.addColumn("typeId");
|
auto &typeIdColumn = propertyDeclarationTable.addColumn("typeId");
|
||||||
auto &nameColumn = propertyDeclarationTable.addColumn("name");
|
auto &nameColumn = propertyDeclarationTable.addColumn("name");
|
||||||
auto &propertyTypeIdColumn = propertyDeclarationTable.addForeignKeyColumn(
|
auto &propertyTypeIdColumn = propertyDeclarationTable.addColumn(
|
||||||
"propertyTypeId",
|
"propertyTypeId", Sqlite::StrictColumnType::Integer);
|
||||||
typesTable,
|
|
||||||
Sqlite::ForeignKeyAction::NoAction,
|
|
||||||
Sqlite::ForeignKeyAction::Restrict);
|
|
||||||
propertyDeclarationTable.addColumn("propertyTraits", Sqlite::StrictColumnType::Integer);
|
propertyDeclarationTable.addColumn("propertyTraits", Sqlite::StrictColumnType::Integer);
|
||||||
propertyDeclarationTable.addColumn("propertyImportedTypeNameId",
|
auto &propertyImportedTypeNameIdColumn = propertyDeclarationTable.addColumn(
|
||||||
Sqlite::StrictColumnType::Integer);
|
"propertyImportedTypeNameId", Sqlite::StrictColumnType::Integer);
|
||||||
|
auto &aliasPropertyImportedTypeNameIdColumn = propertyDeclarationTable.addColumn(
|
||||||
|
"aliasPropertyImportedTypeNameId", Sqlite::StrictColumnType::Integer);
|
||||||
|
propertyDeclarationTable.addColumn("aliasPropertyDeclarationName",
|
||||||
|
Sqlite::StrictColumnType::Text);
|
||||||
|
propertyDeclarationTable.addColumn("aliasPropertyDeclarationTailName",
|
||||||
|
Sqlite::StrictColumnType::Text);
|
||||||
auto &aliasPropertyDeclarationIdColumn = propertyDeclarationTable.addForeignKeyColumn(
|
auto &aliasPropertyDeclarationIdColumn = propertyDeclarationTable.addForeignKeyColumn(
|
||||||
"aliasPropertyDeclarationId",
|
"aliasPropertyDeclarationId",
|
||||||
propertyDeclarationTable,
|
propertyDeclarationTable,
|
||||||
@@ -913,7 +1009,9 @@ public:
|
|||||||
Sqlite::ForeignKeyAction::Restrict);
|
Sqlite::ForeignKeyAction::Restrict);
|
||||||
|
|
||||||
propertyDeclarationTable.addUniqueIndex({typeIdColumn, nameColumn});
|
propertyDeclarationTable.addUniqueIndex({typeIdColumn, nameColumn});
|
||||||
propertyDeclarationTable.addIndex({propertyTypeIdColumn});
|
propertyDeclarationTable.addIndex({propertyTypeIdColumn, propertyImportedTypeNameIdColumn});
|
||||||
|
propertyDeclarationTable.addIndex(
|
||||||
|
{aliasPropertyImportedTypeNameIdColumn, propertyImportedTypeNameIdColumn});
|
||||||
propertyDeclarationTable.addIndex({aliasPropertyDeclarationIdColumn},
|
propertyDeclarationTable.addIndex({aliasPropertyDeclarationIdColumn},
|
||||||
"aliasPropertyDeclarationId IS NOT NULL");
|
"aliasPropertyDeclarationId IS NOT NULL");
|
||||||
propertyDeclarationTable.addIndex({aliasPropertyDeclarationTailIdColumn},
|
propertyDeclarationTable.addIndex({aliasPropertyDeclarationTailIdColumn},
|
||||||
@@ -1217,8 +1315,7 @@ void ProjectStorage::synchronize(Storage::Synchronization::SynchronizationPackag
|
|||||||
|
|
||||||
TypeIds deletedTypeIds;
|
TypeIds deletedTypeIds;
|
||||||
Sqlite::withImmediateTransaction(database, [&] {
|
Sqlite::withImmediateTransaction(database, [&] {
|
||||||
AliasPropertyDeclarations insertedAliasPropertyDeclarations;
|
AliasPropertyDeclarations aliasPropertyDeclarationsToLink;
|
||||||
AliasPropertyDeclarations updatedAliasPropertyDeclarations;
|
|
||||||
|
|
||||||
AliasPropertyDeclarations relinkableAliasPropertyDeclarations;
|
AliasPropertyDeclarations relinkableAliasPropertyDeclarations;
|
||||||
PropertyDeclarations relinkablePropertyDeclarations;
|
PropertyDeclarations relinkablePropertyDeclarations;
|
||||||
@@ -1243,8 +1340,7 @@ void ProjectStorage::synchronize(Storage::Synchronization::SynchronizationPackag
|
|||||||
relinkableExtensions);
|
relinkableExtensions);
|
||||||
synchronizeTypes(package.types,
|
synchronizeTypes(package.types,
|
||||||
updatedTypeIds,
|
updatedTypeIds,
|
||||||
insertedAliasPropertyDeclarations,
|
aliasPropertyDeclarationsToLink,
|
||||||
updatedAliasPropertyDeclarations,
|
|
||||||
relinkableAliasPropertyDeclarations,
|
relinkableAliasPropertyDeclarations,
|
||||||
relinkablePropertyDeclarations,
|
relinkablePropertyDeclarations,
|
||||||
relinkablePrototypes,
|
relinkablePrototypes,
|
||||||
@@ -1269,7 +1365,9 @@ void ProjectStorage::synchronize(Storage::Synchronization::SynchronizationPackag
|
|||||||
relinkableExtensions,
|
relinkableExtensions,
|
||||||
deletedTypeIds);
|
deletedTypeIds);
|
||||||
|
|
||||||
linkAliases(insertedAliasPropertyDeclarations, updatedAliasPropertyDeclarations);
|
repairBrokenAliasPropertyDeclarations();
|
||||||
|
|
||||||
|
linkAliases(aliasPropertyDeclarationsToLink, RaiseError::Yes);
|
||||||
|
|
||||||
synchronizeDirectoryInfos(package.directoryInfos, package.updatedDirectoryInfoSourceIds);
|
synchronizeDirectoryInfos(package.directoryInfos, package.updatedDirectoryInfoSourceIds);
|
||||||
|
|
||||||
@@ -2001,6 +2099,7 @@ Storage::Synchronization::Type ProjectStorage::fetchTypeByTypeId(TypeId typeId)
|
|||||||
type.functionDeclarations = fetchFunctionDeclarations(type.typeId);
|
type.functionDeclarations = fetchFunctionDeclarations(type.typeId);
|
||||||
type.signalDeclarations = fetchSignalDeclarations(type.typeId);
|
type.signalDeclarations = fetchSignalDeclarations(type.typeId);
|
||||||
type.enumerationDeclarations = fetchEnumerationDeclarations(type.typeId);
|
type.enumerationDeclarations = fetchEnumerationDeclarations(type.typeId);
|
||||||
|
type.typeId = typeId;
|
||||||
|
|
||||||
return type;
|
return type;
|
||||||
});
|
});
|
||||||
@@ -2530,8 +2629,7 @@ void ProjectStorage::synchronizeTypeTrait(const Storage::Synchronization::Type &
|
|||||||
|
|
||||||
void ProjectStorage::synchronizeTypes(Storage::Synchronization::Types &types,
|
void ProjectStorage::synchronizeTypes(Storage::Synchronization::Types &types,
|
||||||
TypeIds &updatedTypeIds,
|
TypeIds &updatedTypeIds,
|
||||||
AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
|
||||||
AliasPropertyDeclarations &relinkableAliasPropertyDeclarations,
|
AliasPropertyDeclarations &relinkableAliasPropertyDeclarations,
|
||||||
PropertyDeclarations &relinkablePropertyDeclarations,
|
PropertyDeclarations &relinkablePropertyDeclarations,
|
||||||
Prototypes &relinkablePrototypes,
|
Prototypes &relinkablePrototypes,
|
||||||
@@ -2584,10 +2682,7 @@ void ProjectStorage::synchronizeTypes(Storage::Synchronization::Types &types,
|
|||||||
syncPrototypesAndExtensions(types, relinkablePrototypes, relinkableExtensions);
|
syncPrototypesAndExtensions(types, relinkablePrototypes, relinkableExtensions);
|
||||||
resetDefaultPropertiesIfChanged(types);
|
resetDefaultPropertiesIfChanged(types);
|
||||||
resetRemovedAliasPropertyDeclarationsToNull(types, relinkableAliasPropertyDeclarations);
|
resetRemovedAliasPropertyDeclarationsToNull(types, relinkableAliasPropertyDeclarations);
|
||||||
syncDeclarations(types,
|
syncDeclarations(types, aliasPropertyDeclarationsToLink, relinkablePropertyDeclarations);
|
||||||
insertedAliasPropertyDeclarations,
|
|
||||||
updatedAliasPropertyDeclarations,
|
|
||||||
relinkablePropertyDeclarations);
|
|
||||||
syncDefaultProperties(types);
|
syncDefaultProperties(types);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2869,7 +2964,7 @@ void ProjectStorage::handleAliasPropertyDeclarationsWithPropertyType(
|
|||||||
|
|
||||||
auto callback = [&](TypeId typeId_,
|
auto callback = [&](TypeId typeId_,
|
||||||
PropertyDeclarationId propertyDeclarationId,
|
PropertyDeclarationId propertyDeclarationId,
|
||||||
ImportedTypeNameId propertyImportedTypeNameId,
|
ImportedTypeNameId aliasPropertyImportedTypeNameId,
|
||||||
PropertyDeclarationId aliasPropertyDeclarationId,
|
PropertyDeclarationId aliasPropertyDeclarationId,
|
||||||
PropertyDeclarationId aliasPropertyDeclarationTailId) {
|
PropertyDeclarationId aliasPropertyDeclarationTailId) {
|
||||||
auto aliasPropertyName = s->selectPropertyNameStatement.value<Utils::SmallString>(
|
auto aliasPropertyName = s->selectPropertyNameStatement.value<Utils::SmallString>(
|
||||||
@@ -2880,10 +2975,11 @@ void ProjectStorage::handleAliasPropertyDeclarationsWithPropertyType(
|
|||||||
aliasPropertyDeclarationTailId);
|
aliasPropertyDeclarationTailId);
|
||||||
|
|
||||||
relinkableAliasPropertyDeclarations.emplace_back(TypeId{typeId_},
|
relinkableAliasPropertyDeclarations.emplace_back(TypeId{typeId_},
|
||||||
PropertyDeclarationId{propertyDeclarationId},
|
propertyDeclarationId,
|
||||||
ImportedTypeNameId{propertyImportedTypeNameId},
|
aliasPropertyImportedTypeNameId,
|
||||||
std::move(aliasPropertyName),
|
std::move(aliasPropertyName),
|
||||||
std::move(aliasPropertyNameTail));
|
std::move(aliasPropertyNameTail),
|
||||||
|
fetchTypeSourceId(typeId_));
|
||||||
|
|
||||||
s->updateAliasPropertyDeclarationToNullStatement.write(propertyDeclarationId);
|
s->updateAliasPropertyDeclarationToNullStatement.write(propertyDeclarationId);
|
||||||
};
|
};
|
||||||
@@ -2905,6 +3001,62 @@ void ProjectStorage::handlePropertyDeclarationWithPropertyType(
|
|||||||
typeId);
|
typeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProjectStorage::handlePropertyDeclarationsWithExportedTypeNameAndTypeId(
|
||||||
|
Utils::SmallStringView exportedTypeName,
|
||||||
|
TypeId typeId,
|
||||||
|
PropertyDeclarations &relinkablePropertyDeclarations)
|
||||||
|
{
|
||||||
|
using NanotraceHR::keyValue;
|
||||||
|
NanotraceHR::Tracer tracer{"handle property declarations with exported type name and type id"_t,
|
||||||
|
projectStorageCategory(),
|
||||||
|
keyValue("type name", exportedTypeName),
|
||||||
|
keyValue("type id", typeId),
|
||||||
|
keyValue("relinkable property declarations",
|
||||||
|
relinkablePropertyDeclarations)};
|
||||||
|
|
||||||
|
s->selectPropertyDeclarationForPrototypeIdAndTypeNameStatement.readTo(relinkablePropertyDeclarations,
|
||||||
|
exportedTypeName,
|
||||||
|
typeId);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ProjectStorage::handleAliasPropertyDeclarationsWithExportedTypeNameAndTypeId(
|
||||||
|
Utils::SmallStringView exportedTypeName,
|
||||||
|
TypeId typeId,
|
||||||
|
AliasPropertyDeclarations &relinkableAliasPropertyDeclarations)
|
||||||
|
{
|
||||||
|
using NanotraceHR::keyValue;
|
||||||
|
NanotraceHR::Tracer tracer{"handle alias property declarations with exported type name and type id"_t,
|
||||||
|
projectStorageCategory(),
|
||||||
|
keyValue("type name", exportedTypeName),
|
||||||
|
keyValue("type id", typeId),
|
||||||
|
keyValue("relinkable alias property declarations",
|
||||||
|
relinkableAliasPropertyDeclarations)};
|
||||||
|
|
||||||
|
auto callback = [&](TypeId typeId_,
|
||||||
|
PropertyDeclarationId propertyDeclarationId,
|
||||||
|
ImportedTypeNameId aliasPropertyImportedTypeNameId,
|
||||||
|
PropertyDeclarationId aliasPropertyDeclarationId,
|
||||||
|
PropertyDeclarationId aliasPropertyDeclarationTailId) {
|
||||||
|
auto aliasPropertyName = s->selectPropertyNameStatement.value<Utils::SmallString>(
|
||||||
|
aliasPropertyDeclarationId);
|
||||||
|
Utils::SmallString aliasPropertyNameTail;
|
||||||
|
if (aliasPropertyDeclarationTailId)
|
||||||
|
aliasPropertyNameTail = s->selectPropertyNameStatement.value<Utils::SmallString>(
|
||||||
|
aliasPropertyDeclarationTailId);
|
||||||
|
|
||||||
|
relinkableAliasPropertyDeclarations.emplace_back(TypeId{typeId_},
|
||||||
|
propertyDeclarationId,
|
||||||
|
aliasPropertyImportedTypeNameId,
|
||||||
|
std::move(aliasPropertyName),
|
||||||
|
std::move(aliasPropertyNameTail),
|
||||||
|
fetchTypeSourceId(typeId_));
|
||||||
|
};
|
||||||
|
|
||||||
|
s->selectAliasPropertyDeclarationForPrototypeIdAndTypeNameStatement.readCallback(callback,
|
||||||
|
exportedTypeName,
|
||||||
|
typeId);
|
||||||
|
}
|
||||||
|
|
||||||
void ProjectStorage::handlePrototypes(TypeId prototypeId, Prototypes &relinkablePrototypes)
|
void ProjectStorage::handlePrototypes(TypeId prototypeId, Prototypes &relinkablePrototypes)
|
||||||
{
|
{
|
||||||
using NanotraceHR::keyValue;
|
using NanotraceHR::keyValue;
|
||||||
@@ -3002,6 +3154,7 @@ void ProjectStorage::relinkAliasPropertyDeclarations(AliasPropertyDeclarations &
|
|||||||
keyValue("deleted type ids", deletedTypeIds)};
|
keyValue("deleted type ids", deletedTypeIds)};
|
||||||
|
|
||||||
std::sort(aliasPropertyDeclarations.begin(), aliasPropertyDeclarations.end());
|
std::sort(aliasPropertyDeclarations.begin(), aliasPropertyDeclarations.end());
|
||||||
|
// todo remove duplicates
|
||||||
|
|
||||||
Utils::set_greedy_difference(
|
Utils::set_greedy_difference(
|
||||||
aliasPropertyDeclarations.cbegin(),
|
aliasPropertyDeclarations.cbegin(),
|
||||||
@@ -3011,17 +3164,22 @@ void ProjectStorage::relinkAliasPropertyDeclarations(AliasPropertyDeclarations &
|
|||||||
[&](const AliasPropertyDeclaration &alias) {
|
[&](const AliasPropertyDeclaration &alias) {
|
||||||
auto typeId = fetchTypeId(alias.aliasImportedTypeNameId);
|
auto typeId = fetchTypeId(alias.aliasImportedTypeNameId);
|
||||||
|
|
||||||
if (!typeId)
|
if (typeId) {
|
||||||
throw TypeNameDoesNotExists{fetchImportedTypeName(alias.aliasImportedTypeNameId)};
|
auto [propertyImportedTypeNameId, propertyTypeId, aliasId, propertyTraits]
|
||||||
|
= fetchPropertyDeclarationByTypeIdAndNameUngarded(typeId, alias.aliasPropertyName);
|
||||||
|
|
||||||
auto [propertyTypeId, aliasId, propertyTraits] = fetchPropertyDeclarationByTypeIdAndNameUngarded(
|
s->updatePropertyDeclarationWithAliasAndTypeStatement.write(alias.propertyDeclarationId,
|
||||||
typeId, alias.aliasPropertyName);
|
propertyTypeId,
|
||||||
|
propertyTraits,
|
||||||
s->updatePropertyDeclarationWithAliasAndTypeStatement.write(alias.propertyDeclarationId,
|
propertyImportedTypeNameId,
|
||||||
propertyTypeId,
|
aliasId);
|
||||||
propertyTraits,
|
} else {
|
||||||
alias.aliasImportedTypeNameId,
|
errorNotifier->typeNameCannotBeResolved(fetchImportedTypeName(
|
||||||
aliasId);
|
alias.aliasImportedTypeNameId),
|
||||||
|
fetchTypeSourceId(alias.typeId));
|
||||||
|
s->resetAliasPropertyDeclarationStatement.write(alias.propertyDeclarationId,
|
||||||
|
Storage::PropertyDeclarationTraits{});
|
||||||
|
}
|
||||||
},
|
},
|
||||||
TypeCompare<AliasPropertyDeclaration>{});
|
TypeCompare<AliasPropertyDeclaration>{});
|
||||||
}
|
}
|
||||||
@@ -3037,6 +3195,9 @@ void ProjectStorage::relinkPropertyDeclarations(PropertyDeclarations &relinkable
|
|||||||
keyValue("deleted type ids", deletedTypeIds)};
|
keyValue("deleted type ids", deletedTypeIds)};
|
||||||
|
|
||||||
std::sort(relinkablePropertyDeclaration.begin(), relinkablePropertyDeclaration.end());
|
std::sort(relinkablePropertyDeclaration.begin(), relinkablePropertyDeclaration.end());
|
||||||
|
relinkablePropertyDeclaration.erase(std::unique(relinkablePropertyDeclaration.begin(),
|
||||||
|
relinkablePropertyDeclaration.end()),
|
||||||
|
relinkablePropertyDeclaration.end());
|
||||||
|
|
||||||
Utils::set_greedy_difference(
|
Utils::set_greedy_difference(
|
||||||
relinkablePropertyDeclaration.cbegin(),
|
relinkablePropertyDeclaration.cbegin(),
|
||||||
@@ -3046,8 +3207,12 @@ void ProjectStorage::relinkPropertyDeclarations(PropertyDeclarations &relinkable
|
|||||||
[&](const PropertyDeclaration &property) {
|
[&](const PropertyDeclaration &property) {
|
||||||
TypeId propertyTypeId = fetchTypeId(property.importedTypeNameId);
|
TypeId propertyTypeId = fetchTypeId(property.importedTypeNameId);
|
||||||
|
|
||||||
if (!propertyTypeId)
|
if (!propertyTypeId) {
|
||||||
throw TypeNameDoesNotExists{fetchImportedTypeName(property.importedTypeNameId)};
|
errorNotifier->typeNameCannotBeResolved(fetchImportedTypeName(
|
||||||
|
property.importedTypeNameId),
|
||||||
|
fetchTypeSourceId(property.typeId));
|
||||||
|
propertyTypeId = TypeId{};
|
||||||
|
}
|
||||||
|
|
||||||
s->updatePropertyDeclarationTypeStatement.write(property.propertyDeclarationId,
|
s->updatePropertyDeclarationTypeStatement.write(property.propertyDeclarationId,
|
||||||
propertyTypeId);
|
propertyTypeId);
|
||||||
@@ -3160,7 +3325,8 @@ PropertyDeclarationId ProjectStorage::fetchAliasId(TypeId aliasTypeId,
|
|||||||
aliasPropertyNameTail);
|
aliasPropertyNameTail);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectStorage::linkAliasPropertyDeclarationAliasIds(const AliasPropertyDeclarations &aliasDeclarations)
|
void ProjectStorage::linkAliasPropertyDeclarationAliasIds(
|
||||||
|
const AliasPropertyDeclarations &aliasDeclarations, RaiseError raiseError)
|
||||||
{
|
{
|
||||||
using NanotraceHR::keyValue;
|
using NanotraceHR::keyValue;
|
||||||
NanotraceHR::Tracer tracer{"link alias property declarations alias ids"_t,
|
NanotraceHR::Tracer tracer{"link alias property declarations alias ids"_t,
|
||||||
@@ -3170,17 +3336,22 @@ void ProjectStorage::linkAliasPropertyDeclarationAliasIds(const AliasPropertyDec
|
|||||||
for (const auto &aliasDeclaration : aliasDeclarations) {
|
for (const auto &aliasDeclaration : aliasDeclarations) {
|
||||||
auto aliasTypeId = fetchTypeId(aliasDeclaration.aliasImportedTypeNameId);
|
auto aliasTypeId = fetchTypeId(aliasDeclaration.aliasImportedTypeNameId);
|
||||||
|
|
||||||
if (!aliasTypeId) {
|
if (aliasTypeId) {
|
||||||
throw TypeNameDoesNotExists{
|
auto aliasId = fetchAliasId(aliasTypeId,
|
||||||
fetchImportedTypeName(aliasDeclaration.aliasImportedTypeNameId)};
|
aliasDeclaration.aliasPropertyName,
|
||||||
|
aliasDeclaration.aliasPropertyNameTail);
|
||||||
|
|
||||||
|
s->updatePropertyDeclarationAliasIdAndTypeNameIdStatement
|
||||||
|
.write(aliasDeclaration.propertyDeclarationId,
|
||||||
|
aliasId,
|
||||||
|
aliasDeclaration.aliasImportedTypeNameId);
|
||||||
|
} else if (raiseError == RaiseError::Yes) {
|
||||||
|
errorNotifier->typeNameCannotBeResolved(fetchImportedTypeName(
|
||||||
|
aliasDeclaration.aliasImportedTypeNameId),
|
||||||
|
aliasDeclaration.sourceId);
|
||||||
|
s->resetAliasPropertyDeclarationStatement.write(aliasDeclaration.propertyDeclarationId,
|
||||||
|
Storage::PropertyDeclarationTraits{});
|
||||||
}
|
}
|
||||||
|
|
||||||
auto aliasId = fetchAliasId(aliasTypeId,
|
|
||||||
aliasDeclaration.aliasPropertyName,
|
|
||||||
aliasDeclaration.aliasPropertyNameTail);
|
|
||||||
|
|
||||||
s->updatePropertyDeclarationAliasIdAndTypeNameIdStatement.write(
|
|
||||||
aliasDeclaration.propertyDeclarationId, aliasId, aliasDeclaration.aliasImportedTypeNameId);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3192,7 +3363,7 @@ void ProjectStorage::updateAliasPropertyDeclarationValues(const AliasPropertyDec
|
|||||||
keyValue("alias property declarations", aliasDeclarations)};
|
keyValue("alias property declarations", aliasDeclarations)};
|
||||||
|
|
||||||
for (const auto &aliasDeclaration : aliasDeclarations) {
|
for (const auto &aliasDeclaration : aliasDeclarations) {
|
||||||
s->updatetPropertiesDeclarationValuesOfAliasStatement.write(
|
s->updatePropertiesDeclarationValuesOfAliasStatement.write(
|
||||||
aliasDeclaration.propertyDeclarationId);
|
aliasDeclaration.propertyDeclarationId);
|
||||||
s->updatePropertyAliasDeclarationRecursivelyStatement.write(
|
s->updatePropertyAliasDeclarationRecursivelyStatement.write(
|
||||||
aliasDeclaration.propertyDeclarationId);
|
aliasDeclaration.propertyDeclarationId);
|
||||||
@@ -3209,20 +3380,29 @@ void ProjectStorage::checkAliasPropertyDeclarationCycles(const AliasPropertyDecl
|
|||||||
checkForAliasChainCycle(aliasDeclaration.propertyDeclarationId);
|
checkForAliasChainCycle(aliasDeclaration.propertyDeclarationId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectStorage::linkAliases(const AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
void ProjectStorage::linkAliases(const AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
const AliasPropertyDeclarations &updatedAliasPropertyDeclarations)
|
RaiseError raiseError)
|
||||||
{
|
{
|
||||||
using NanotraceHR::keyValue;
|
using NanotraceHR::keyValue;
|
||||||
NanotraceHR::Tracer tracer{"link aliases"_t, projectStorageCategory()};
|
NanotraceHR::Tracer tracer{"link aliases"_t, projectStorageCategory()};
|
||||||
|
|
||||||
linkAliasPropertyDeclarationAliasIds(insertedAliasPropertyDeclarations);
|
linkAliasPropertyDeclarationAliasIds(aliasPropertyDeclarationsToLink, raiseError);
|
||||||
linkAliasPropertyDeclarationAliasIds(updatedAliasPropertyDeclarations);
|
|
||||||
|
|
||||||
checkAliasPropertyDeclarationCycles(insertedAliasPropertyDeclarations);
|
checkAliasPropertyDeclarationCycles(aliasPropertyDeclarationsToLink);
|
||||||
checkAliasPropertyDeclarationCycles(updatedAliasPropertyDeclarations);
|
|
||||||
|
|
||||||
updateAliasPropertyDeclarationValues(insertedAliasPropertyDeclarations);
|
updateAliasPropertyDeclarationValues(aliasPropertyDeclarationsToLink);
|
||||||
updateAliasPropertyDeclarationValues(updatedAliasPropertyDeclarations);
|
}
|
||||||
|
|
||||||
|
void ProjectStorage::repairBrokenAliasPropertyDeclarations()
|
||||||
|
{
|
||||||
|
using NanotraceHR::keyValue;
|
||||||
|
NanotraceHR::Tracer tracer{"repair broken alias property declarations"_t,
|
||||||
|
projectStorageCategory()};
|
||||||
|
|
||||||
|
auto brokenAliasPropertyDeclarations = s->selectBrokenAliasPropertyDeclarationsStatement
|
||||||
|
.values<AliasPropertyDeclaration>();
|
||||||
|
|
||||||
|
linkAliases(brokenAliasPropertyDeclarations, RaiseError::No);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProjectStorage::synchronizeExportedTypes(const TypeIds &updatedTypeIds,
|
void ProjectStorage::synchronizeExportedTypes(const TypeIds &updatedTypeIds,
|
||||||
@@ -3303,6 +3483,12 @@ void ProjectStorage::synchronizeExportedTypes(const TypeIds &updatedTypeIds,
|
|||||||
throw QmlDesigner::ExportedTypeCannotBeInserted{type.name};
|
throw QmlDesigner::ExportedTypeCannotBeInserted{type.name};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handlePropertyDeclarationsWithExportedTypeNameAndTypeId(type.name,
|
||||||
|
TypeId{},
|
||||||
|
relinkablePropertyDeclarations);
|
||||||
|
handleAliasPropertyDeclarationsWithExportedTypeNameAndTypeId(type.name,
|
||||||
|
TypeId{},
|
||||||
|
relinkableAliasPropertyDeclarations);
|
||||||
handlePrototypesWithExportedTypeNameAndTypeId(type.name, unresolvedTypeId, relinkablePrototypes);
|
handlePrototypesWithExportedTypeNameAndTypeId(type.name, unresolvedTypeId, relinkablePrototypes);
|
||||||
handleExtensionsWithExportedTypeNameAndTypeId(type.name, unresolvedTypeId, relinkableExtensions);
|
handleExtensionsWithExportedTypeNameAndTypeId(type.name, unresolvedTypeId, relinkableExtensions);
|
||||||
};
|
};
|
||||||
@@ -3348,7 +3534,7 @@ void ProjectStorage::synchronizeExportedTypes(const TypeIds &updatedTypeIds,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ProjectStorage::synchronizePropertyDeclarationsInsertAlias(
|
void ProjectStorage::synchronizePropertyDeclarationsInsertAlias(
|
||||||
AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
const Storage::Synchronization::PropertyDeclaration &value,
|
const Storage::Synchronization::PropertyDeclaration &value,
|
||||||
SourceId sourceId,
|
SourceId sourceId,
|
||||||
TypeId typeId)
|
TypeId typeId)
|
||||||
@@ -3358,17 +3544,24 @@ void ProjectStorage::synchronizePropertyDeclarationsInsertAlias(
|
|||||||
projectStorageCategory(),
|
projectStorageCategory(),
|
||||||
keyValue("property declaration", value)};
|
keyValue("property declaration", value)};
|
||||||
|
|
||||||
|
auto propertyImportedTypeNameId = fetchImportedTypeNameId(value.typeName, sourceId);
|
||||||
|
|
||||||
auto callback = [&](PropertyDeclarationId propertyDeclarationId) {
|
auto callback = [&](PropertyDeclarationId propertyDeclarationId) {
|
||||||
insertedAliasPropertyDeclarations.emplace_back(typeId,
|
aliasPropertyDeclarationsToLink.emplace_back(typeId,
|
||||||
propertyDeclarationId,
|
propertyDeclarationId,
|
||||||
fetchImportedTypeNameId(value.typeName,
|
propertyImportedTypeNameId,
|
||||||
sourceId),
|
value.aliasPropertyName,
|
||||||
value.aliasPropertyName,
|
value.aliasPropertyNameTail,
|
||||||
value.aliasPropertyNameTail);
|
sourceId);
|
||||||
return Sqlite::CallbackControl::Abort;
|
return Sqlite::CallbackControl::Abort;
|
||||||
};
|
};
|
||||||
|
|
||||||
s->insertAliasPropertyDeclarationStatement.readCallback(callback, typeId, value.name);
|
s->insertAliasPropertyDeclarationStatement.readCallback(callback,
|
||||||
|
typeId,
|
||||||
|
value.name,
|
||||||
|
propertyImportedTypeNameId,
|
||||||
|
value.aliasPropertyName,
|
||||||
|
value.aliasPropertyNameTail);
|
||||||
}
|
}
|
||||||
|
|
||||||
QVarLengthArray<PropertyDeclarationId, 128> ProjectStorage::fetchPropertyDeclarationIds(
|
QVarLengthArray<PropertyDeclarationId, 128> ProjectStorage::fetchPropertyDeclarationIds(
|
||||||
@@ -3452,8 +3645,12 @@ void ProjectStorage::synchronizePropertyDeclarationsInsertProperty(
|
|||||||
auto propertyImportedTypeNameId = fetchImportedTypeNameId(value.typeName, sourceId);
|
auto propertyImportedTypeNameId = fetchImportedTypeNameId(value.typeName, sourceId);
|
||||||
auto propertyTypeId = fetchTypeId(propertyImportedTypeNameId);
|
auto propertyTypeId = fetchTypeId(propertyImportedTypeNameId);
|
||||||
|
|
||||||
if (!propertyTypeId)
|
if (!propertyTypeId) {
|
||||||
throw TypeNameDoesNotExists{fetchImportedTypeName(propertyImportedTypeNameId), sourceId};
|
auto typeName = std::visit([](auto &&importedTypeName) { return importedTypeName.name; },
|
||||||
|
value.typeName);
|
||||||
|
errorNotifier->typeNameCannotBeResolved(typeName, sourceId);
|
||||||
|
propertyTypeId = TypeId{};
|
||||||
|
}
|
||||||
|
|
||||||
auto propertyDeclarationId = s->insertPropertyDeclarationStatement.value<PropertyDeclarationId>(
|
auto propertyDeclarationId = s->insertPropertyDeclarationStatement.value<PropertyDeclarationId>(
|
||||||
typeId, value.name, propertyTypeId, value.traits, propertyImportedTypeNameId);
|
typeId, value.name, propertyTypeId, value.traits, propertyImportedTypeNameId);
|
||||||
@@ -3468,7 +3665,7 @@ void ProjectStorage::synchronizePropertyDeclarationsInsertProperty(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ProjectStorage::synchronizePropertyDeclarationsUpdateAlias(
|
void ProjectStorage::synchronizePropertyDeclarationsUpdateAlias(
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
const Storage::Synchronization::PropertyDeclarationView &view,
|
const Storage::Synchronization::PropertyDeclarationView &view,
|
||||||
const Storage::Synchronization::PropertyDeclaration &value,
|
const Storage::Synchronization::PropertyDeclaration &value,
|
||||||
SourceId sourceId)
|
SourceId sourceId)
|
||||||
@@ -3479,12 +3676,13 @@ void ProjectStorage::synchronizePropertyDeclarationsUpdateAlias(
|
|||||||
keyValue("property declaration", value),
|
keyValue("property declaration", value),
|
||||||
keyValue("property declaration view", view)};
|
keyValue("property declaration view", view)};
|
||||||
|
|
||||||
updatedAliasPropertyDeclarations.emplace_back(view.typeId,
|
aliasPropertyDeclarationsToLink.emplace_back(view.propertyTypeId,
|
||||||
view.id,
|
view.id,
|
||||||
fetchImportedTypeNameId(value.typeName, sourceId),
|
fetchImportedTypeNameId(value.typeName, sourceId),
|
||||||
value.aliasPropertyName,
|
value.aliasPropertyName,
|
||||||
value.aliasPropertyNameTail,
|
value.aliasPropertyNameTail,
|
||||||
view.aliasId);
|
sourceId,
|
||||||
|
view.aliasId);
|
||||||
}
|
}
|
||||||
|
|
||||||
Sqlite::UpdateChange ProjectStorage::synchronizePropertyDeclarationsUpdateProperty(
|
Sqlite::UpdateChange ProjectStorage::synchronizePropertyDeclarationsUpdateProperty(
|
||||||
@@ -3503,10 +3701,15 @@ Sqlite::UpdateChange ProjectStorage::synchronizePropertyDeclarationsUpdateProper
|
|||||||
|
|
||||||
auto propertyTypeId = fetchTypeId(propertyImportedTypeNameId);
|
auto propertyTypeId = fetchTypeId(propertyImportedTypeNameId);
|
||||||
|
|
||||||
if (!propertyTypeId)
|
if (!propertyTypeId) {
|
||||||
throw TypeNameDoesNotExists{fetchImportedTypeName(propertyImportedTypeNameId), sourceId};
|
auto typeName = std::visit([](auto &&importedTypeName) { return importedTypeName.name; },
|
||||||
|
value.typeName);
|
||||||
|
errorNotifier->typeNameCannotBeResolved(typeName, sourceId);
|
||||||
|
propertyTypeId = TypeId{};
|
||||||
|
propertyDeclarationIds.push_back(view.id);
|
||||||
|
}
|
||||||
|
|
||||||
if (view.traits == value.traits && propertyTypeId == view.typeId
|
if (view.traits == value.traits && compareId(propertyTypeId, view.propertyTypeId)
|
||||||
&& propertyImportedTypeNameId == view.typeNameId)
|
&& propertyImportedTypeNameId == view.typeNameId)
|
||||||
return Sqlite::UpdateChange::No;
|
return Sqlite::UpdateChange::No;
|
||||||
|
|
||||||
@@ -3528,8 +3731,7 @@ void ProjectStorage::synchronizePropertyDeclarations(
|
|||||||
TypeId typeId,
|
TypeId typeId,
|
||||||
Storage::Synchronization::PropertyDeclarations &propertyDeclarations,
|
Storage::Synchronization::PropertyDeclarations &propertyDeclarations,
|
||||||
SourceId sourceId,
|
SourceId sourceId,
|
||||||
AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
|
||||||
PropertyDeclarationIds &propertyDeclarationIds)
|
PropertyDeclarationIds &propertyDeclarationIds)
|
||||||
{
|
{
|
||||||
NanotraceHR::Tracer tracer{"synchronize property declaration"_t, projectStorageCategory()};
|
NanotraceHR::Tracer tracer{"synchronize property declaration"_t, projectStorageCategory()};
|
||||||
@@ -3548,7 +3750,7 @@ void ProjectStorage::synchronizePropertyDeclarations(
|
|||||||
|
|
||||||
auto insert = [&](const Storage::Synchronization::PropertyDeclaration &value) {
|
auto insert = [&](const Storage::Synchronization::PropertyDeclaration &value) {
|
||||||
if (value.kind == Storage::Synchronization::PropertyKind::Alias) {
|
if (value.kind == Storage::Synchronization::PropertyKind::Alias) {
|
||||||
synchronizePropertyDeclarationsInsertAlias(insertedAliasPropertyDeclarations,
|
synchronizePropertyDeclarationsInsertAlias(aliasPropertyDeclarationsToLink,
|
||||||
value,
|
value,
|
||||||
sourceId,
|
sourceId,
|
||||||
typeId);
|
typeId);
|
||||||
@@ -3560,7 +3762,7 @@ void ProjectStorage::synchronizePropertyDeclarations(
|
|||||||
auto update = [&](const Storage::Synchronization::PropertyDeclarationView &view,
|
auto update = [&](const Storage::Synchronization::PropertyDeclarationView &view,
|
||||||
const Storage::Synchronization::PropertyDeclaration &value) {
|
const Storage::Synchronization::PropertyDeclaration &value) {
|
||||||
if (value.kind == Storage::Synchronization::PropertyKind::Alias) {
|
if (value.kind == Storage::Synchronization::PropertyKind::Alias) {
|
||||||
synchronizePropertyDeclarationsUpdateAlias(updatedAliasPropertyDeclarations,
|
synchronizePropertyDeclarationsUpdateAlias(aliasPropertyDeclarationsToLink,
|
||||||
view,
|
view,
|
||||||
value,
|
value,
|
||||||
sourceId);
|
sourceId);
|
||||||
@@ -4254,8 +4456,7 @@ TypeId ProjectStorage::declareType(Storage::Synchronization::Type &type)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ProjectStorage::syncDeclarations(Storage::Synchronization::Type &type,
|
void ProjectStorage::syncDeclarations(Storage::Synchronization::Type &type,
|
||||||
AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
|
||||||
PropertyDeclarationIds &propertyDeclarationIds)
|
PropertyDeclarationIds &propertyDeclarationIds)
|
||||||
{
|
{
|
||||||
NanotraceHR::Tracer tracer{"synchronize declaration per type"_t, projectStorageCategory()};
|
NanotraceHR::Tracer tracer{"synchronize declaration per type"_t, projectStorageCategory()};
|
||||||
@@ -4266,8 +4467,7 @@ void ProjectStorage::syncDeclarations(Storage::Synchronization::Type &type,
|
|||||||
synchronizePropertyDeclarations(type.typeId,
|
synchronizePropertyDeclarations(type.typeId,
|
||||||
type.propertyDeclarations,
|
type.propertyDeclarations,
|
||||||
type.sourceId,
|
type.sourceId,
|
||||||
insertedAliasPropertyDeclarations,
|
aliasPropertyDeclarationsToLink,
|
||||||
updatedAliasPropertyDeclarations,
|
|
||||||
propertyDeclarationIds);
|
propertyDeclarationIds);
|
||||||
synchronizeFunctionDeclarations(type.typeId, type.functionDeclarations);
|
synchronizeFunctionDeclarations(type.typeId, type.functionDeclarations);
|
||||||
synchronizeSignalDeclarations(type.typeId, type.signalDeclarations);
|
synchronizeSignalDeclarations(type.typeId, type.signalDeclarations);
|
||||||
@@ -4275,8 +4475,7 @@ void ProjectStorage::syncDeclarations(Storage::Synchronization::Type &type,
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ProjectStorage::syncDeclarations(Storage::Synchronization::Types &types,
|
void ProjectStorage::syncDeclarations(Storage::Synchronization::Types &types,
|
||||||
AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
|
||||||
PropertyDeclarations &relinkablePropertyDeclarations)
|
PropertyDeclarations &relinkablePropertyDeclarations)
|
||||||
{
|
{
|
||||||
NanotraceHR::Tracer tracer{"synchronize declaration"_t, projectStorageCategory()};
|
NanotraceHR::Tracer tracer{"synchronize declaration"_t, projectStorageCategory()};
|
||||||
@@ -4285,10 +4484,7 @@ void ProjectStorage::syncDeclarations(Storage::Synchronization::Types &types,
|
|||||||
propertyDeclarationIds.reserve(types.size() * 10);
|
propertyDeclarationIds.reserve(types.size() * 10);
|
||||||
|
|
||||||
for (auto &&type : types)
|
for (auto &&type : types)
|
||||||
syncDeclarations(type,
|
syncDeclarations(type, aliasPropertyDeclarationsToLink, propertyDeclarationIds);
|
||||||
insertedAliasPropertyDeclarations,
|
|
||||||
updatedAliasPropertyDeclarations,
|
|
||||||
propertyDeclarationIds);
|
|
||||||
|
|
||||||
removeRelinkableEntries(relinkablePropertyDeclarations,
|
removeRelinkableEntries(relinkablePropertyDeclarations,
|
||||||
propertyDeclarationIds,
|
propertyDeclarationIds,
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ class ProjectStorage final : public ProjectStorageInterface
|
|||||||
friend Storage::Info::CommonTypeCache<ProjectStorageType>;
|
friend Storage::Info::CommonTypeCache<ProjectStorageType>;
|
||||||
|
|
||||||
enum class Relink { No, Yes };
|
enum class Relink { No, Yes };
|
||||||
|
enum class RaiseError { No, Yes };
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ProjectStorage(Database &database,
|
ProjectStorage(Database &database,
|
||||||
@@ -352,6 +353,7 @@ private:
|
|||||||
ImportedTypeNameId aliasImportedTypeNameId,
|
ImportedTypeNameId aliasImportedTypeNameId,
|
||||||
Utils::SmallString aliasPropertyName,
|
Utils::SmallString aliasPropertyName,
|
||||||
Utils::SmallString aliasPropertyNameTail,
|
Utils::SmallString aliasPropertyNameTail,
|
||||||
|
SourceId sourceId,
|
||||||
PropertyDeclarationId aliasPropertyDeclarationId = PropertyDeclarationId{})
|
PropertyDeclarationId aliasPropertyDeclarationId = PropertyDeclarationId{})
|
||||||
: typeId{typeId}
|
: typeId{typeId}
|
||||||
, propertyDeclarationId{propertyDeclarationId}
|
, propertyDeclarationId{propertyDeclarationId}
|
||||||
@@ -359,6 +361,21 @@ private:
|
|||||||
, aliasPropertyName{std::move(aliasPropertyName)}
|
, aliasPropertyName{std::move(aliasPropertyName)}
|
||||||
, aliasPropertyNameTail{std::move(aliasPropertyNameTail)}
|
, aliasPropertyNameTail{std::move(aliasPropertyNameTail)}
|
||||||
, aliasPropertyDeclarationId{aliasPropertyDeclarationId}
|
, aliasPropertyDeclarationId{aliasPropertyDeclarationId}
|
||||||
|
, sourceId{sourceId}
|
||||||
|
{}
|
||||||
|
|
||||||
|
AliasPropertyDeclaration(TypeId typeId,
|
||||||
|
PropertyDeclarationId propertyDeclarationId,
|
||||||
|
ImportedTypeNameId aliasImportedTypeNameId,
|
||||||
|
Utils::SmallStringView aliasPropertyName,
|
||||||
|
Utils::SmallStringView aliasPropertyNameTail,
|
||||||
|
SourceId sourceId)
|
||||||
|
: typeId{typeId}
|
||||||
|
, propertyDeclarationId{propertyDeclarationId}
|
||||||
|
, aliasImportedTypeNameId{aliasImportedTypeNameId}
|
||||||
|
, aliasPropertyName{aliasPropertyName}
|
||||||
|
, aliasPropertyNameTail{aliasPropertyNameTail}
|
||||||
|
, sourceId{sourceId}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
friend bool operator<(const AliasPropertyDeclaration &first,
|
friend bool operator<(const AliasPropertyDeclaration &first,
|
||||||
@@ -368,6 +385,13 @@ private:
|
|||||||
< std::tie(second.typeId, second.propertyDeclarationId);
|
< std::tie(second.typeId, second.propertyDeclarationId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
friend bool operator==(const AliasPropertyDeclaration &first,
|
||||||
|
const AliasPropertyDeclaration &second)
|
||||||
|
{
|
||||||
|
return std::tie(first.typeId, first.propertyDeclarationId)
|
||||||
|
== std::tie(second.typeId, second.propertyDeclarationId);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename String>
|
template<typename String>
|
||||||
friend void convertToString(String &string,
|
friend void convertToString(String &string,
|
||||||
const AliasPropertyDeclaration &aliasPropertyDeclaration)
|
const AliasPropertyDeclaration &aliasPropertyDeclaration)
|
||||||
@@ -394,6 +418,7 @@ private:
|
|||||||
Utils::SmallString aliasPropertyName;
|
Utils::SmallString aliasPropertyName;
|
||||||
Utils::SmallString aliasPropertyNameTail;
|
Utils::SmallString aliasPropertyNameTail;
|
||||||
PropertyDeclarationId aliasPropertyDeclarationId;
|
PropertyDeclarationId aliasPropertyDeclarationId;
|
||||||
|
SourceId sourceId;
|
||||||
};
|
};
|
||||||
|
|
||||||
using AliasPropertyDeclarations = std::vector<AliasPropertyDeclaration>;
|
using AliasPropertyDeclarations = std::vector<AliasPropertyDeclaration>;
|
||||||
@@ -409,6 +434,12 @@ private:
|
|||||||
, importedTypeNameId{std::move(importedTypeNameId)}
|
, importedTypeNameId{std::move(importedTypeNameId)}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
friend bool operator==(const PropertyDeclaration &first, const PropertyDeclaration &second)
|
||||||
|
{
|
||||||
|
return std::tie(first.typeId, first.propertyDeclarationId)
|
||||||
|
== std::tie(second.typeId, second.propertyDeclarationId);
|
||||||
|
}
|
||||||
|
|
||||||
friend bool operator<(const PropertyDeclaration &first, const PropertyDeclaration &second)
|
friend bool operator<(const PropertyDeclaration &first, const PropertyDeclaration &second)
|
||||||
{
|
{
|
||||||
return std::tie(first.typeId, first.propertyDeclarationId)
|
return std::tie(first.typeId, first.propertyDeclarationId)
|
||||||
@@ -569,8 +600,7 @@ private:
|
|||||||
|
|
||||||
void synchronizeTypes(Storage::Synchronization::Types &types,
|
void synchronizeTypes(Storage::Synchronization::Types &types,
|
||||||
TypeIds &updatedTypeIds,
|
TypeIds &updatedTypeIds,
|
||||||
AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
|
||||||
AliasPropertyDeclarations &relinkableAliasPropertyDeclarations,
|
AliasPropertyDeclarations &relinkableAliasPropertyDeclarations,
|
||||||
PropertyDeclarations &relinkablePropertyDeclarations,
|
PropertyDeclarations &relinkablePropertyDeclarations,
|
||||||
Prototypes &relinkablePrototypes,
|
Prototypes &relinkablePrototypes,
|
||||||
@@ -605,7 +635,14 @@ private:
|
|||||||
|
|
||||||
void handlePropertyDeclarationWithPropertyType(TypeId typeId,
|
void handlePropertyDeclarationWithPropertyType(TypeId typeId,
|
||||||
PropertyDeclarations &relinkablePropertyDeclarations);
|
PropertyDeclarations &relinkablePropertyDeclarations);
|
||||||
|
void handlePropertyDeclarationsWithExportedTypeNameAndTypeId(
|
||||||
|
Utils::SmallStringView exportedTypeName,
|
||||||
|
TypeId typeId,
|
||||||
|
PropertyDeclarations &relinkablePropertyDeclarations);
|
||||||
|
void handleAliasPropertyDeclarationsWithExportedTypeNameAndTypeId(
|
||||||
|
Utils::SmallStringView exportedTypeName,
|
||||||
|
TypeId typeId,
|
||||||
|
AliasPropertyDeclarations &relinkableAliasPropertyDeclarations);
|
||||||
void handlePrototypes(TypeId prototypeId, Prototypes &relinkablePrototypes);
|
void handlePrototypes(TypeId prototypeId, Prototypes &relinkablePrototypes);
|
||||||
void handlePrototypesWithExportedTypeNameAndTypeId(Utils::SmallStringView exportedTypeName,
|
void handlePrototypesWithExportedTypeNameAndTypeId(Utils::SmallStringView exportedTypeName,
|
||||||
TypeId typeId,
|
TypeId typeId,
|
||||||
@@ -651,14 +688,17 @@ private:
|
|||||||
Utils::SmallStringView aliasPropertyName,
|
Utils::SmallStringView aliasPropertyName,
|
||||||
Utils::SmallStringView aliasPropertyNameTail);
|
Utils::SmallStringView aliasPropertyNameTail);
|
||||||
|
|
||||||
void linkAliasPropertyDeclarationAliasIds(const AliasPropertyDeclarations &aliasDeclarations);
|
void linkAliasPropertyDeclarationAliasIds(const AliasPropertyDeclarations &aliasDeclarations,
|
||||||
|
RaiseError raiseError);
|
||||||
|
|
||||||
void updateAliasPropertyDeclarationValues(const AliasPropertyDeclarations &aliasDeclarations);
|
void updateAliasPropertyDeclarationValues(const AliasPropertyDeclarations &aliasDeclarations);
|
||||||
|
|
||||||
void checkAliasPropertyDeclarationCycles(const AliasPropertyDeclarations &aliasDeclarations);
|
void checkAliasPropertyDeclarationCycles(const AliasPropertyDeclarations &aliasDeclarations);
|
||||||
|
|
||||||
void linkAliases(const AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
void linkAliases(const AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
const AliasPropertyDeclarations &updatedAliasPropertyDeclarations);
|
RaiseError raiseError);
|
||||||
|
|
||||||
|
void repairBrokenAliasPropertyDeclarations();
|
||||||
|
|
||||||
void synchronizeExportedTypes(const TypeIds &updatedTypeIds,
|
void synchronizeExportedTypes(const TypeIds &updatedTypeIds,
|
||||||
Storage::Synchronization::ExportedTypes &exportedTypes,
|
Storage::Synchronization::ExportedTypes &exportedTypes,
|
||||||
@@ -689,7 +729,7 @@ private:
|
|||||||
const Storage::Synchronization::PropertyDeclaration &value, SourceId sourceId, TypeId typeId);
|
const Storage::Synchronization::PropertyDeclaration &value, SourceId sourceId, TypeId typeId);
|
||||||
|
|
||||||
void synchronizePropertyDeclarationsUpdateAlias(
|
void synchronizePropertyDeclarationsUpdateAlias(
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
const Storage::Synchronization::PropertyDeclarationView &view,
|
const Storage::Synchronization::PropertyDeclarationView &view,
|
||||||
const Storage::Synchronization::PropertyDeclaration &value,
|
const Storage::Synchronization::PropertyDeclaration &value,
|
||||||
SourceId sourceId);
|
SourceId sourceId);
|
||||||
@@ -700,13 +740,11 @@ private:
|
|||||||
SourceId sourceId,
|
SourceId sourceId,
|
||||||
PropertyDeclarationIds &propertyDeclarationIds);
|
PropertyDeclarationIds &propertyDeclarationIds);
|
||||||
|
|
||||||
void synchronizePropertyDeclarations(
|
void synchronizePropertyDeclarations(TypeId typeId,
|
||||||
TypeId typeId,
|
Storage::Synchronization::PropertyDeclarations &propertyDeclarations,
|
||||||
Storage::Synchronization::PropertyDeclarations &propertyDeclarations,
|
SourceId sourceId,
|
||||||
SourceId sourceId,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
PropertyDeclarationIds &propertyDeclarationIds);
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
|
||||||
PropertyDeclarationIds &propertyDeclarationIds);
|
|
||||||
|
|
||||||
class AliasPropertyDeclarationView
|
class AliasPropertyDeclarationView
|
||||||
{
|
{
|
||||||
@@ -832,8 +870,7 @@ private:
|
|||||||
TypeId declareType(Storage::Synchronization::Type &type);
|
TypeId declareType(Storage::Synchronization::Type &type);
|
||||||
|
|
||||||
void syncDeclarations(Storage::Synchronization::Type &type,
|
void syncDeclarations(Storage::Synchronization::Type &type,
|
||||||
AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
|
||||||
PropertyDeclarationIds &propertyDeclarationIds);
|
PropertyDeclarationIds &propertyDeclarationIds);
|
||||||
|
|
||||||
template<typename Relinkable, typename Ids, typename Compare>
|
template<typename Relinkable, typename Ids, typename Compare>
|
||||||
@@ -859,8 +896,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
void syncDeclarations(Storage::Synchronization::Types &types,
|
void syncDeclarations(Storage::Synchronization::Types &types,
|
||||||
AliasPropertyDeclarations &insertedAliasPropertyDeclarations,
|
AliasPropertyDeclarations &aliasPropertyDeclarationsToLink,
|
||||||
AliasPropertyDeclarations &updatedAliasPropertyDeclarations,
|
|
||||||
PropertyDeclarations &relinkablePropertyDeclarations);
|
PropertyDeclarations &relinkablePropertyDeclarations);
|
||||||
|
|
||||||
class TypeWithDefaultPropertyView
|
class TypeWithDefaultPropertyView
|
||||||
@@ -924,10 +960,12 @@ private:
|
|||||||
class FetchPropertyDeclarationResult
|
class FetchPropertyDeclarationResult
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FetchPropertyDeclarationResult(TypeId propertyTypeId,
|
FetchPropertyDeclarationResult(ImportedTypeNameId propertyImportedTypeNameId,
|
||||||
|
TypeId propertyTypeId,
|
||||||
PropertyDeclarationId propertyDeclarationId,
|
PropertyDeclarationId propertyDeclarationId,
|
||||||
Storage::PropertyDeclarationTraits propertyTraits)
|
Storage::PropertyDeclarationTraits propertyTraits)
|
||||||
: propertyTypeId{propertyTypeId}
|
: propertyImportedTypeNameId{propertyImportedTypeNameId}
|
||||||
|
, propertyTypeId{propertyTypeId}
|
||||||
, propertyDeclarationId{propertyDeclarationId}
|
, propertyDeclarationId{propertyDeclarationId}
|
||||||
, propertyTraits{propertyTraits}
|
, propertyTraits{propertyTraits}
|
||||||
{}
|
{}
|
||||||
@@ -937,7 +975,9 @@ private:
|
|||||||
{
|
{
|
||||||
using NanotraceHR::dictonary;
|
using NanotraceHR::dictonary;
|
||||||
using NanotraceHR::keyValue;
|
using NanotraceHR::keyValue;
|
||||||
auto dict = dictonary(keyValue("property type id", result.propertyTypeId),
|
auto dict = dictonary(keyValue("property imported type name id",
|
||||||
|
result.propertyImportedTypeNameId),
|
||||||
|
keyValue("property type id", result.propertyTypeId),
|
||||||
keyValue("property declaration id", result.propertyDeclarationId),
|
keyValue("property declaration id", result.propertyDeclarationId),
|
||||||
keyValue("property traits", result.propertyTraits));
|
keyValue("property traits", result.propertyTraits));
|
||||||
|
|
||||||
@@ -945,6 +985,7 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
ImportedTypeNameId propertyImportedTypeNameId;
|
||||||
TypeId propertyTypeId;
|
TypeId propertyTypeId;
|
||||||
PropertyDeclarationId propertyDeclarationId;
|
PropertyDeclarationId propertyDeclarationId;
|
||||||
Storage::PropertyDeclarationTraits propertyTraits;
|
Storage::PropertyDeclarationTraits propertyTraits;
|
||||||
|
|||||||
@@ -870,6 +870,21 @@ public:
|
|||||||
, kind{PropertyKind::Property}
|
, kind{PropertyKind::Property}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
explicit PropertyDeclaration(PropertyDeclarationId propertyDeclarationId,
|
||||||
|
::Utils::SmallStringView name,
|
||||||
|
TypeId propertyTypeId,
|
||||||
|
PropertyDeclarationTraits traits,
|
||||||
|
::Utils::SmallStringView aliasPropertyName,
|
||||||
|
TypeId typeId)
|
||||||
|
: name{name}
|
||||||
|
, aliasPropertyName{aliasPropertyName}
|
||||||
|
, traits{traits}
|
||||||
|
, propertyTypeId{propertyTypeId}
|
||||||
|
, typeId{typeId}
|
||||||
|
, propertyDeclarationId{propertyDeclarationId}
|
||||||
|
, kind{PropertyKind::Property}
|
||||||
|
{}
|
||||||
|
|
||||||
explicit PropertyDeclaration(::Utils::SmallStringView name,
|
explicit PropertyDeclaration(::Utils::SmallStringView name,
|
||||||
ImportedTypeName aliasTypeName,
|
ImportedTypeName aliasTypeName,
|
||||||
::Utils::SmallStringView aliasPropertyName,
|
::Utils::SmallStringView aliasPropertyName,
|
||||||
@@ -916,6 +931,7 @@ public:
|
|||||||
PropertyDeclarationTraits traits = {};
|
PropertyDeclarationTraits traits = {};
|
||||||
TypeId propertyTypeId;
|
TypeId propertyTypeId;
|
||||||
TypeId typeId;
|
TypeId typeId;
|
||||||
|
PropertyDeclarationId propertyDeclarationId;
|
||||||
PropertyKind kind = PropertyKind::Property;
|
PropertyKind kind = PropertyKind::Property;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -926,13 +942,13 @@ class PropertyDeclarationView
|
|||||||
public:
|
public:
|
||||||
explicit PropertyDeclarationView(::Utils::SmallStringView name,
|
explicit PropertyDeclarationView(::Utils::SmallStringView name,
|
||||||
PropertyDeclarationTraits traits,
|
PropertyDeclarationTraits traits,
|
||||||
TypeId typeId,
|
TypeId propertyTypeId,
|
||||||
ImportedTypeNameId typeNameId,
|
ImportedTypeNameId typeNameId,
|
||||||
PropertyDeclarationId id,
|
PropertyDeclarationId id,
|
||||||
PropertyDeclarationId aliasId)
|
PropertyDeclarationId aliasId)
|
||||||
: name{name}
|
: name{name}
|
||||||
, traits{traits}
|
, traits{traits}
|
||||||
, typeId{typeId}
|
, propertyTypeId{propertyTypeId}
|
||||||
, typeNameId{typeNameId}
|
, typeNameId{typeNameId}
|
||||||
, id{id}
|
, id{id}
|
||||||
, aliasId{aliasId}
|
, aliasId{aliasId}
|
||||||
@@ -945,7 +961,7 @@ public:
|
|||||||
using NanotraceHR::keyValue;
|
using NanotraceHR::keyValue;
|
||||||
auto dict = dictonary(keyValue("name", propertyDeclaration.name),
|
auto dict = dictonary(keyValue("name", propertyDeclaration.name),
|
||||||
keyValue("traits", propertyDeclaration.traits),
|
keyValue("traits", propertyDeclaration.traits),
|
||||||
keyValue("type id", propertyDeclaration.typeId),
|
keyValue("type id", propertyDeclaration.propertyTypeId),
|
||||||
keyValue("type name id", propertyDeclaration.typeNameId),
|
keyValue("type name id", propertyDeclaration.typeNameId),
|
||||||
keyValue("id", propertyDeclaration.id),
|
keyValue("id", propertyDeclaration.id),
|
||||||
keyValue("alias id", propertyDeclaration.aliasId));
|
keyValue("alias id", propertyDeclaration.aliasId));
|
||||||
@@ -956,7 +972,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
::Utils::SmallStringView name;
|
::Utils::SmallStringView name;
|
||||||
PropertyDeclarationTraits traits = {};
|
PropertyDeclarationTraits traits = {};
|
||||||
TypeId typeId;
|
TypeId propertyTypeId;
|
||||||
ImportedTypeNameId typeNameId;
|
ImportedTypeNameId typeNameId;
|
||||||
PropertyDeclarationId id;
|
PropertyDeclarationId id;
|
||||||
PropertyDeclarationId aliasId;
|
PropertyDeclarationId aliasId;
|
||||||
|
|||||||
@@ -705,8 +705,7 @@ std::ostream &operator<<(std::ostream &out, const PropertyDeclaration &propertyD
|
|||||||
{
|
{
|
||||||
using Utils::operator<<;
|
using Utils::operator<<;
|
||||||
return out << "(\"" << propertyDeclaration.typeId << "\", " << propertyDeclaration.name << ", "
|
return out << "(\"" << propertyDeclaration.typeId << "\", " << propertyDeclaration.name << ", "
|
||||||
<< propertyDeclaration.typeId << ", " << propertyDeclaration.traits << ", "
|
<< propertyDeclaration.traits << ", " << propertyDeclaration.propertyTypeId << ")";
|
||||||
<< propertyDeclaration.propertyTypeId << ")";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream &operator<<(std::ostream &out, const Type &type)
|
std::ostream &operator<<(std::ostream &out, const Type &type)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user