@@ -113,7 +113,7 @@ namespace sqlite {
113
113
sqlite3_stmt* tmp = nullptr ;
114
114
const char *remaining;
115
115
hresult = sqlite3_prepare_v2 (_db.get (), sql.data (), sql.length (), &tmp, &remaining);
116
- if (hresult != SQLITE_OK) errors::throw_sqlite_error (hresult, sql);
116
+ if (hresult != SQLITE_OK) errors::throw_sqlite_error (hresult, sql, sqlite3_errmsg (_db. get ()) );
117
117
if (!std::all_of (remaining, sql.data () + sql.size (), [](char ch) {return std::isspace (ch);}))
118
118
throw errors::more_statements (" Multiple semicolon separated statements are unsupported" , sql);
119
119
return tmp;
@@ -214,7 +214,7 @@ namespace sqlite {
214
214
_binder = nullptr ;
215
215
break ;
216
216
default :
217
- exceptions::throw_sqlite_error (result, _binder->sql ());
217
+ exceptions::throw_sqlite_error (result, _binder->sql (), sqlite3_errmsg (_binder-> _db . get ()) );
218
218
}
219
219
return *this ;
220
220
}
@@ -387,7 +387,7 @@ namespace sqlite {
387
387
sqlite3* tmp = nullptr ;
388
388
auto ret = sqlite3_open_v2 (db_name.data (), &tmp, static_cast <int >(config.flags ), config.zVfs );
389
389
_db = std::shared_ptr<sqlite3>(tmp, [=](sqlite3* ptr) { sqlite3_close_v2 (ptr); }); // this will close the connection eventually when no longer needed.
390
- if (ret != SQLITE_OK) errors::throw_sqlite_error (_db ? sqlite3_extended_errcode (_db.get ()) : ret);
390
+ if (ret != SQLITE_OK) errors::throw_sqlite_error (_db ? sqlite3_extended_errcode (_db.get ()) : ret, {}, sqlite3_errmsg (_db. get ()) );
391
391
sqlite3_extended_result_codes (_db.get (), true );
392
392
if (config.encoding == Encoding::UTF16)
393
393
*this << R"( PRAGMA encoding = "UTF-16";)" ;
@@ -430,7 +430,7 @@ namespace sqlite {
430
430
nullptr , nullptr , [](void * ptr){
431
431
delete static_cast <decltype (funcPtr)>(ptr);
432
432
}))
433
- errors::throw_sqlite_error (result);
433
+ errors::throw_sqlite_error (result, {}, sqlite3_errmsg (_db. get ()) );
434
434
}
435
435
436
436
template <typename StepFunction, typename FinalFunction>
@@ -446,7 +446,7 @@ namespace sqlite {
446
446
[](void * ptr){
447
447
delete static_cast <decltype (funcPtr)>(ptr);
448
448
}))
449
- errors::throw_sqlite_error (result);
449
+ errors::throw_sqlite_error (result, {}, sqlite3_errmsg (_db. get ()) );
450
450
}
451
451
452
452
};
@@ -505,7 +505,7 @@ namespace sqlite {
505
505
db._next_index (); --db._inx ;
506
506
int result = bind_col_in_db (db._stmt .get (), val.index , std::forward<T>(val.value ));
507
507
if (result != SQLITE_OK)
508
- exceptions::throw_sqlite_error (result, db.sql ());
508
+ exceptions::throw_sqlite_error (result, db.sql (), sqlite3_errmsg (db. _db . get ()) );
509
509
return db;
510
510
}
511
511
@@ -516,14 +516,14 @@ namespace sqlite {
516
516
throw errors::unknown_binding (" The given binding name is not valid for this statement" , db.sql ());
517
517
int result = bind_col_in_db (db._stmt .get (), index , std::forward<T>(val.value ));
518
518
if (result != SQLITE_OK)
519
- exceptions::throw_sqlite_error (result, db.sql ());
519
+ exceptions::throw_sqlite_error (result, db.sql (), sqlite3_errmsg (db. _db . get ()) );
520
520
return db;
521
521
}
522
522
523
523
template <typename T> database_binder &operator <<(database_binder& db, T&& val) {
524
524
int result = bind_col_in_db (db._stmt .get (), db._next_index (), std::forward<T>(val));
525
525
if (result != SQLITE_OK)
526
- exceptions::throw_sqlite_error (result, db.sql ());
526
+ exceptions::throw_sqlite_error (result, db.sql (), sqlite3_errmsg (db. _db . get ()) );
527
527
return db;
528
528
}
529
529
// Convert the rValue binder to a reference and call first op<<, its needed for the call that creates the binder (be carefull of recursion here!)
0 commit comments