Skip to content

Commit 4b8c4f7

Browse files
committed
Revert "Implemented std::experimental optional and consolidated the different optional implementations"
This reverts commit 7eaf518.
1 parent 805080e commit 4b8c4f7

File tree

1 file changed

+56
-22
lines changed

1 file changed

+56
-22
lines changed

hdr/sqlite_modern_cpp.h

Lines changed: 56 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,13 @@
2626
#endif
2727

2828
#ifdef MODERN_SQLITE_STD_OPTIONAL_SUPPORT
29-
#include <optional>
30-
template<class T>
31-
using optional = std::optional<T>;
32-
#define MODERN_SQLITE_OPTIONAL_SUPPORT
29+
#include <optional>
3330
#elif _MODERN_SQLITE_EXPERIMENTAL_OPTIONAL_SUPPORT && __has_include(<experimental/optional>)
34-
#include <experimental/optional>
35-
template<class T>
36-
using optional = std::experimental::optional<T>;
37-
#define MODERN_SQLITE_OPTIONAL_SUPPORT
38-
#elif _MODERN_SQLITE_BOOST_OPTIONAL_SUPPORT
39-
#include <boost/optional.hpp>
40-
template<class T>
41-
using optional = boost::optional<T>;
42-
#define MODERN_SQLITE_OPTIONAL_SUPPORT
31+
#include <experimental/optional>
32+
#endif
33+
34+
#ifdef _MODERN_SQLITE_BOOST_OPTIONAL_SUPPORT
35+
#include <boost/optional.hpp>
4336
#endif
4437

4538
#include <sqlite3.h>
@@ -246,9 +239,14 @@ namespace sqlite {
246239
friend database_binder& operator <<(database_binder& db, const std::u16string& txt);
247240

248241

249-
#ifdef MODERN_SQLITE_OPTIONAL_SUPPORT
250-
template <typename OptionalT> friend database_binder& operator <<(database_binder& db, const optional<OptionalT>& val);
251-
template <typename OptionalT> friend void get_col_from_db(database_binder& db, int inx, optional<OptionalT>& o);
242+
#ifdef MODERN_SQLITE_STD_OPTIONAL_SUPPORT
243+
template <typename OptionalT> friend database_binder& operator <<(database_binder& db, const std::optional<OptionalT>& val);
244+
template <typename OptionalT> friend void get_col_from_db(database_binder& db, int inx, std::optional<OptionalT>& o);
245+
#endif
246+
247+
#ifdef _MODERN_SQLITE_BOOST_OPTIONAL_SUPPORT
248+
template <typename BoostOptionalT> friend database_binder& operator <<(database_binder& db, const boost::optional<BoostOptionalT>& val);
249+
template <typename BoostOptionalT> friend void get_col_from_db(database_binder& db, int inx, boost::optional<BoostOptionalT>& o);
252250
#endif
253251

254252
public:
@@ -792,23 +790,23 @@ namespace sqlite {
792790
val = i;
793791
}
794792

795-
// optional support for NULL values, whether std::optional, std::experimental::optional or boost:optional
796-
#ifdef MODERN_SQLITE_OPTIONAL_SUPPORT
797-
template <typename OptionalT> inline database_binder& operator <<(database_binder& db, const optional<OptionalT>& val) {
793+
// std::optional support for NULL values
794+
#ifdef MODERN_SQLITE_STD_OPTIONAL_SUPPORT
795+
template <typename OptionalT> inline database_binder& operator <<(database_binder& db, const std::optional<OptionalT>& val) {
798796
if(val) {
799797
return db << std::move(*val);
800798
} else {
801799
return db << nullptr;
802800
}
803801
}
804-
template <typename OptionalT> inline void store_result_in_db(sqlite3_context* db, const optional<OptionalT>& val) {
802+
template <typename OptionalT> inline void store_result_in_db(sqlite3_context* db, const std::optional<OptionalT>& val) {
805803
if(val) {
806804
store_result_in_db(db, *val);
807805
}
808806
sqlite3_result_null(db);
809807
}
810808

811-
template <typename OptionalT> inline void get_col_from_db(database_binder& db, int inx, optional<OptionalT>& o) {
809+
template <typename OptionalT> inline void get_col_from_db(database_binder& db, int inx, std::optional<OptionalT>& o) {
812810
if(sqlite3_column_type(db._stmt.get(), inx) == SQLITE_NULL) {
813811
o.reset();
814812
} else {
@@ -817,7 +815,7 @@ namespace sqlite {
817815
o = std::move(v);
818816
}
819817
}
820-
template <typename OptionalT> inline void get_val_from_db(sqlite3_value *value, optional<OptionalT>& o) {
818+
template <typename OptionalT> inline void get_val_from_db(sqlite3_value *value, std::optional<OptionalT>& o) {
821819
if(sqlite3_value_type(value) == SQLITE_NULL) {
822820
o.reset();
823821
} else {
@@ -828,6 +826,42 @@ namespace sqlite {
828826
}
829827
#endif
830828

829+
// boost::optional support for NULL values
830+
#ifdef _MODERN_SQLITE_BOOST_OPTIONAL_SUPPORT
831+
template <typename BoostOptionalT> inline database_binder& operator <<(database_binder& db, const boost::optional<BoostOptionalT>& val) {
832+
if(val) {
833+
return db << std::move(*val);
834+
} else {
835+
return db << nullptr;
836+
}
837+
}
838+
template <typename BoostOptionalT> inline void store_result_in_db(sqlite3_context* db, const boost::optional<BoostOptionalT>& val) {
839+
if(val) {
840+
store_result_in_db(db, *val);
841+
}
842+
sqlite3_result_null(db);
843+
}
844+
845+
template <typename BoostOptionalT> inline void get_col_from_db(database_binder& db, int inx, boost::optional<BoostOptionalT>& o) {
846+
if(sqlite3_column_type(db._stmt.get(), inx) == SQLITE_NULL) {
847+
o.reset();
848+
} else {
849+
BoostOptionalT v;
850+
get_col_from_db(db, inx, v);
851+
o = std::move(v);
852+
}
853+
}
854+
template <typename BoostOptionalT> inline void get_val_from_db(sqlite3_value *value, boost::optional<BoostOptionalT>& o) {
855+
if(sqlite3_value_type(value) == SQLITE_NULL) {
856+
o.reset();
857+
} else {
858+
BoostOptionalT v;
859+
get_val_from_db(value, v);
860+
o = std::move(v);
861+
}
862+
}
863+
#endif
864+
831865
#ifdef MODERN_SQLITE_STD_VARIANT_SUPPORT
832866
template <typename ...Args> inline database_binder& operator <<(database_binder& db, const std::variant<Args...>& val) {
833867
std::visit([&](auto &&opt) {db << std::forward<decltype(opt)>(opt);}, val);

0 commit comments

Comments
 (0)