@@ -223,6 +223,19 @@ namespace sqlite {
223
223
template <typename T> friend database_binder& operator <<(database_binder& db, const std::unique_ptr<T>& val);
224
224
template <typename T> friend void get_col_from_db (database_binder& db, int inx, std::unique_ptr<T>& val);
225
225
template <typename T> friend T operator ++(database_binder& db, int );
226
+ // for nontemplate functions
227
+ friend database_binder& operator <<(database_binder& db, const int & val);
228
+ friend void get_col_from_db (database_binder& db, int inx, int & val);
229
+ friend database_binder& operator <<(database_binder& db, const sqlite_int64& val);
230
+ friend void get_col_from_db (database_binder& db, int inx, sqlite3_int64& i);
231
+ friend database_binder& operator <<(database_binder& db, const float & val);
232
+ friend void get_col_from_db (database_binder& db, int inx, float & f);
233
+ friend database_binder& operator <<(database_binder& db, const double & val);
234
+ friend void get_col_from_db (database_binder& db, int inx, double & d);
235
+ friend void get_col_from_db (database_binder& db, int inx, std::string & s);
236
+ friend database_binder& operator <<(database_binder& db, const std::string& txt);
237
+ friend void get_col_from_db (database_binder& db, int inx, std::u16string & w);
238
+ friend database_binder& operator <<(database_binder& db, const std::u16string& txt);
226
239
227
240
228
241
#ifdef _MODERN_SQLITE_BOOST_OPTIONAL_SUPPORT
@@ -350,7 +363,6 @@ namespace sqlite {
350
363
Values&&... values
351
364
) {
352
365
nth_argument_type<Function, sizeof ...(Values)> value{};
353
- get_col_from_db (db, sizeof ...(Values), value);
354
366
355
367
run<Function>(db, function, std::forward<Values>(values)..., std::move (value));
356
368
}
@@ -370,15 +382,15 @@ namespace sqlite {
370
382
};
371
383
372
384
// int
373
- template <> inline database_binder& operator <<(database_binder& db, const int & val) {
385
+ inline database_binder& operator <<(database_binder& db, const int & val) {
374
386
int hresult;
375
387
if ((hresult = sqlite3_bind_int (db._stmt .get (), db._inx , val)) != SQLITE_OK) {
376
388
exceptions::throw_sqlite_error (hresult);
377
389
}
378
390
++db._inx ;
379
391
return db;
380
392
}
381
- template <> inline void get_col_from_db (database_binder& db, int inx, int & val) {
393
+ inline void get_col_from_db (database_binder& db, int inx, int & val) {
382
394
if (sqlite3_column_type (db._stmt .get (), inx) == SQLITE_NULL) {
383
395
val = 0 ;
384
396
} else {
@@ -387,7 +399,7 @@ namespace sqlite {
387
399
}
388
400
389
401
// sqlite_int64
390
- template <> inline database_binder& operator <<(database_binder& db, const sqlite_int64& val) {
402
+ inline database_binder& operator <<(database_binder& db, const sqlite_int64& val) {
391
403
int hresult;
392
404
if ((hresult = sqlite3_bind_int64 (db._stmt .get (), db._inx , val)) != SQLITE_OK) {
393
405
exceptions::throw_sqlite_error (hresult);
@@ -396,7 +408,7 @@ namespace sqlite {
396
408
++db._inx ;
397
409
return db;
398
410
}
399
- template <> inline void get_col_from_db (database_binder& db, int inx, sqlite3_int64& i) {
411
+ inline void get_col_from_db (database_binder& db, int inx, sqlite3_int64& i) {
400
412
if (sqlite3_column_type (db._stmt .get (), inx) == SQLITE_NULL) {
401
413
i = 0 ;
402
414
} else {
@@ -405,7 +417,7 @@ namespace sqlite {
405
417
}
406
418
407
419
// float
408
- template <> inline database_binder& operator <<(database_binder& db, const float & val) {
420
+ inline database_binder& operator <<(database_binder& db, const float & val) {
409
421
int hresult;
410
422
if ((hresult = sqlite3_bind_double (db._stmt .get (), db._inx , double (val))) != SQLITE_OK) {
411
423
exceptions::throw_sqlite_error (hresult);
@@ -414,7 +426,7 @@ namespace sqlite {
414
426
++db._inx ;
415
427
return db;
416
428
}
417
- template <> inline void get_col_from_db (database_binder& db, int inx, float & f) {
429
+ inline void get_col_from_db (database_binder& db, int inx, float & f) {
418
430
if (sqlite3_column_type (db._stmt .get (), inx) == SQLITE_NULL) {
419
431
f = 0 ;
420
432
} else {
@@ -423,7 +435,7 @@ namespace sqlite {
423
435
}
424
436
425
437
// double
426
- template <> inline database_binder& operator <<(database_binder& db, const double & val) {
438
+ inline database_binder& operator <<(database_binder& db, const double & val) {
427
439
int hresult;
428
440
if ((hresult = sqlite3_bind_double (db._stmt .get (), db._inx , val)) != SQLITE_OK) {
429
441
exceptions::throw_sqlite_error (hresult);
@@ -432,7 +444,7 @@ namespace sqlite {
432
444
++db._inx ;
433
445
return db;
434
446
}
435
- template <> inline void get_col_from_db (database_binder& db, int inx, double & d) {
447
+ inline void get_col_from_db (database_binder& db, int inx, double & d) {
436
448
if (sqlite3_column_type (db._stmt .get (), inx) == SQLITE_NULL) {
437
449
d = 0 ;
438
450
} else {
@@ -491,7 +503,7 @@ namespace sqlite {
491
503
}
492
504
493
505
// std::string
494
- template <> inline void get_col_from_db (database_binder& db, int inx, std::string & s) {
506
+ inline void get_col_from_db (database_binder& db, int inx, std::string & s) {
495
507
if (sqlite3_column_type (db._stmt .get (), inx) == SQLITE_NULL) {
496
508
s = std::string ();
497
509
} else {
@@ -504,7 +516,7 @@ namespace sqlite {
504
516
template <std::size_t N> inline database_binder& operator <<(database_binder& db, const char (&STR)[N]) { return db << std::string (STR); }
505
517
template <std::size_t N> inline database_binder& operator <<(database_binder& db, const char16_t (&STR)[N]) { return db << std::u16string (STR); }
506
518
507
- template <> inline database_binder& operator <<(database_binder& db, const std::string& txt) {
519
+ inline database_binder& operator <<(database_binder& db, const std::string& txt) {
508
520
int hresult;
509
521
if ((hresult = sqlite3_bind_text (db._stmt .get (), db._inx , txt.data (), -1 , SQLITE_TRANSIENT)) != SQLITE_OK) {
510
522
exceptions::throw_sqlite_error (hresult);
@@ -514,7 +526,7 @@ namespace sqlite {
514
526
return db;
515
527
}
516
528
// std::u16string
517
- template <> inline void get_col_from_db (database_binder& db, int inx, std::u16string & w) {
529
+ inline void get_col_from_db (database_binder& db, int inx, std::u16string & w) {
518
530
if (sqlite3_column_type (db._stmt .get (), inx) == SQLITE_NULL) {
519
531
w = std::u16string ();
520
532
} else {
@@ -524,7 +536,7 @@ namespace sqlite {
524
536
}
525
537
526
538
527
- template <> inline database_binder& operator <<(database_binder& db, const std::u16string& txt) {
539
+ inline database_binder& operator <<(database_binder& db, const std::u16string& txt) {
528
540
int hresult;
529
541
if ((hresult = sqlite3_bind_text16 (db._stmt .get (), db._inx , txt.data (), -1 , SQLITE_TRANSIENT)) != SQLITE_OK) {
530
542
exceptions::throw_sqlite_error (hresult);
0 commit comments