@@ -113,7 +113,7 @@ namespace sqlite {
113113 sqlite3_stmt* tmp = nullptr ;
114114 const char *remaining;
115115 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 ()) );
117117 if (!std::all_of (remaining, sql.data () + sql.size (), [](char ch) {return std::isspace (ch);}))
118118 throw errors::more_statements (" Multiple semicolon separated statements are unsupported" , sql);
119119 return tmp;
@@ -214,7 +214,7 @@ namespace sqlite {
214214 _binder = nullptr ;
215215 break ;
216216 default :
217- exceptions::throw_sqlite_error (result, _binder->sql ());
217+ exceptions::throw_sqlite_error (result, _binder->sql (), sqlite3_errmsg (_binder-> _db . get ()) );
218218 }
219219 return *this ;
220220 }
@@ -387,7 +387,7 @@ namespace sqlite {
387387 sqlite3* tmp = nullptr ;
388388 auto ret = sqlite3_open_v2 (db_name.data (), &tmp, static_cast <int >(config.flags ), config.zVfs );
389389 _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 ()) );
391391 sqlite3_extended_result_codes (_db.get (), true );
392392 if (config.encoding == Encoding::UTF16)
393393 *this << R"( PRAGMA encoding = "UTF-16";)" ;
@@ -430,7 +430,7 @@ namespace sqlite {
430430 nullptr , nullptr , [](void * ptr){
431431 delete static_cast <decltype (funcPtr)>(ptr);
432432 }))
433- errors::throw_sqlite_error (result);
433+ errors::throw_sqlite_error (result, {}, sqlite3_errmsg (_db. get ()) );
434434 }
435435
436436 template <typename StepFunction, typename FinalFunction>
@@ -446,7 +446,7 @@ namespace sqlite {
446446 [](void * ptr){
447447 delete static_cast <decltype (funcPtr)>(ptr);
448448 }))
449- errors::throw_sqlite_error (result);
449+ errors::throw_sqlite_error (result, {}, sqlite3_errmsg (_db. get ()) );
450450 }
451451
452452 };
@@ -505,7 +505,7 @@ namespace sqlite {
505505 db._next_index (); --db._inx ;
506506 int result = bind_col_in_db (db._stmt .get (), val.index , std::forward<T>(val.value ));
507507 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 ()) );
509509 return db;
510510 }
511511
@@ -516,14 +516,14 @@ namespace sqlite {
516516 throw errors::unknown_binding (" The given binding name is not valid for this statement" , db.sql ());
517517 int result = bind_col_in_db (db._stmt .get (), index, std::forward<T>(val.value ));
518518 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 ()) );
520520 return db;
521521 }
522522
523523 template <typename T> database_binder &operator <<(database_binder& db, T&& val) {
524524 int result = bind_col_in_db (db._stmt .get (), db._next_index (), std::forward<T>(val));
525525 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 ()) );
527527 return db;
528528 }
529529 // 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