Add static_assert to get*, remove to reject non-pk arguments at compile time #1486
Open
Alvov1 wants to merge 2 commits into
Open
Add static_assert to get*, remove to reject non-pk arguments at compile time #1486Alvov1 wants to merge 2 commits into
Alvov1 wants to merge 2 commits into
Conversation
Added static_assert in get, get_pointer, get_optional and remove to produce a clear compile-time error when non-bindable types (e.g. where()) are passed as Ids, instead of a runtime crash. Changes are applied in dev/storage.h; include/sqlite_orm/sqlite_orm.h is the regenerated amalgamation.
Validate positive cases only
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
get(),get_pointer(),get_optional(),get_no_throw()andremove()silently accepted anyIds..., including query expressions likewhere(...). This compiled fine but crashed at runtime with a crypticstd::system_error.Now passing a non-bindable type produces a clear compile-time error:
How
Added
static_assert((is_bindable_v<Ids> && ...), ...)toget,get_pointer,get_optionalandremove.get_no_throwis not checked directly — it delegates toget_pointer, which already has the assert.Tests
Extended tests with
tests/static_tests/get_pk_ids.cppthat validates all five functions withSTATIC_REQUIRE(positive cases only)Closes #1485