Skip to content

Commit 5f421c2

Browse files
committed
Support (const) reference arguments
1 parent bbfff7b commit 5f421c2

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

hdr/sqlite_modern_cpp.h

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -434,12 +434,13 @@ namespace sqlite {
434434
typedef utility::function_traits<Function> traits;
435435

436436
auto funcPtr = new auto(std::forward<Function>(func));
437-
sqlite3_create_function_v2(
437+
if(int result = sqlite3_create_function_v2(
438438
_db.get(), name.c_str(), traits::arity, SQLITE_UTF8, funcPtr,
439439
sql_function_binder::scalar<traits::arity, typename std::remove_reference<Function>::type>,
440440
nullptr, nullptr, [](void* ptr){
441441
delete static_cast<decltype(funcPtr)>(ptr);
442-
});
442+
}))
443+
exceptions::throw_sqlite_error(result);
443444
}
444445

445446
template <typename StepFunction, typename FinalFunction>
@@ -455,7 +456,7 @@ namespace sqlite {
455456
[](void* ptr){
456457
delete static_cast<decltype(funcPtr)>(ptr);
457458
}))
458-
exceptions::throw_sqlite_error(result);
459+
exceptions::throw_sqlite_error(result);
459460
}
460461

461462
};
@@ -488,7 +489,7 @@ namespace sqlite {
488489
Function&& function,
489490
Values&&... values
490491
) {
491-
nth_argument_type<Function, sizeof...(Values)> value{};
492+
typename std::remove_cv<typename std::remove_reference<nth_argument_type<Function, sizeof...(Values)>>::type>::type value{};
492493
get_col_from_db(db, sizeof...(Values), value);
493494

494495
run<Function>(db, function, std::forward<Values>(values)..., std::move(value));
@@ -882,7 +883,13 @@ namespace sqlite {
882883
sqlite3_value** vals,
883884
Values&&... values
884885
) {
885-
typename utility::function_traits<typename Functions::first_type>::template argument<sizeof...(Values)> value{};
886+
typename std::remove_cv<
887+
typename std::remove_reference<
888+
typename utility::function_traits<
889+
typename Functions::first_type
890+
>::template argument<sizeof...(Values)>
891+
>::type
892+
>::type value{};
886893
get_val_from_db(vals[sizeof...(Values) - 1], value);
887894

888895
step<Count, Functions>(db, count, vals, std::forward<Values>(values)..., std::move(value));
@@ -934,7 +941,11 @@ namespace sqlite {
934941
sqlite3_value** vals,
935942
Values&&... values
936943
) {
937-
typename utility::function_traits<Function>::template argument<sizeof...(Values)> value{};
944+
typename std::remove_cv<
945+
typename std::remove_reference<
946+
typename utility::function_traits<Function>::template argument<sizeof...(Values)>
947+
>::type
948+
>::type value{};
938949
get_val_from_db(vals[sizeof...(Values)], value);
939950

940951
scalar<Count, Function>(db, count, vals, std::forward<Values>(values)..., std::move(value));

0 commit comments

Comments
 (0)