Skip to content

Commit 686b718

Browse files
committed
support uniqeptr<T> as input arguments
1 parent 69388a0 commit 686b718

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

hdr/sqlite_modern_cpp.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ namespace sqlite {
215215
template<typename T> friend void get_col_from_db(database_binder& db, int inx, std::vector<T>& val);
216216
/* for nullptr & unique_ptr support */
217217
friend database_binder::chain_type& operator <<(database_binder::chain_type& db, std::nullptr_t);
218+
template<typename T> friend database_binder::chain_type& operator <<(database_binder::chain_type& db, const std::unique_ptr<T>& val);
218219
template<typename T> friend void get_col_from_db(database_binder& db, int inx, std::unique_ptr<T>& val);
219220
template<typename T> friend T operator++(database_binder& db, int);
220221

@@ -471,6 +472,14 @@ namespace sqlite {
471472
++db->_inx;
472473
return db;
473474
}
475+
/* for nullptr support */
476+
template<typename T> inline database_binder::chain_type& operator <<(database_binder::chain_type& db, const std::unique_ptr<T>& val) {
477+
if(val)
478+
db << *val;
479+
else
480+
db << nullptr;
481+
return db;
482+
}
474483

475484
/* for unique_ptr<T> support */
476485
template<typename T> inline void get_col_from_db(database_binder& db, int inx, std::unique_ptr<T>& _ptr_) {

tests/nullptr_uniqueptr.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ int main() {
1111
database db(":memory:");
1212
db << "CREATE TABLE tbl (id integer,age integer, name string, img blob);";
1313
db << "INSERT INTO tbl VALUES (?, ?, ?, ?);" << 1 << 24 << "bob" << vector<int> { 1, 2 , 3};
14-
db << "INSERT INTO tbl VALUES (?, ?, ?, ?);" << 2 << nullptr << nullptr << nullptr;
14+
unique_ptr<string> ptr_null;
15+
db << "INSERT INTO tbl VALUES (?, ?, ?, ?);" << 2 << nullptr << ptr_null << nullptr;
1516

1617
db << "select age,name,img from tbl where id = 1" >> [](unique_ptr<int> age_p, unique_ptr<string> name_p, unique_ptr<vector<int>> img_p) {
1718
if(age_p == nullptr || name_p == nullptr || img_p == nullptr) {

0 commit comments

Comments
 (0)