diff --git a/src/Lightweight/DataMapper/BelongsTo.hpp b/src/Lightweight/DataMapper/BelongsTo.hpp index 6dba6eec..2dfad6fe 100644 --- a/src/Lightweight/DataMapper/BelongsTo.hpp +++ b/src/Lightweight/DataMapper/BelongsTo.hpp @@ -324,7 +324,7 @@ class BelongsTo } private: - void RequireLoaded() + void RequireLoaded() const { if (_loaded) return; @@ -346,9 +346,9 @@ class BelongsTo ValueType _referencedFieldValue {}; Loader _loader {}; - bool _loaded = false; bool _modified = false; - std::unique_ptr _record {}; + mutable bool _loaded = false; + mutable std::unique_ptr _record {}; }; template diff --git a/src/tests/DataMapper/RelationTests.cpp b/src/tests/DataMapper/RelationTests.cpp index ee267175..b9d64b06 100644 --- a/src/tests/DataMapper/RelationTests.cpp +++ b/src/tests/DataMapper/RelationTests.cpp @@ -620,4 +620,30 @@ TEST_CASE_METHOD(SqlTestFixture, "BelongsTo Optinal records", "[DataMapper]") REQUIRE(!nullableFKUserNotSet.user.Record().transform(Light::Unwrap).value_or(User{}).id.Value()); } +bool CheckFieldInEntityConstCorrectness(auto const& nullableFKUser) +{ + return static_cast(nullableFKUser.id.Value()); +} + +bool CheckBelongsToInEntityConstCorrectness(auto const& nullableFKUser) +{ + return nullableFKUser.user.Record().transform(Light::Unwrap).has_value(); +} + +TEST_CASE_METHOD(SqlTestFixture, "Entity const corectness", "[DataMapper]") +{ + auto dm = DataMapper(); + + dm.CreateTables(); + + auto user = User { .id = SqlGuid::Create(), .name = "John Doe" }; + dm.Create(user); + + auto nullableFKUser = NullableForeignKeyUser { .user = user }; + dm.Create(nullableFKUser); + + REQUIRE(CheckFieldInEntityConstCorrectness(nullableFKUser)); + REQUIRE(CheckBelongsToInEntityConstCorrectness(nullableFKUser)); +} + // NOLINTEND(bugprone-unchecked-optional-access)