@@ -188,6 +188,35 @@ inline MaybeLocal<Object> CreateSQLiteError(Isolate* isolate, sqlite3* db) {
188188 return e;
189189}
190190
191+ inline MaybeLocal<Object> CreateSQLiteError (Isolate* isolate,
192+ sqlite3* db,
193+ const char * message) {
194+ int errcode = sqlite3_extended_errcode (db);
195+ const char * errstr = sqlite3_errstr (errcode);
196+ const char * errmsg = sqlite3_errmsg (db);
197+ Local<String> js_errstr;
198+ Local<String> js_errmsg;
199+ Local<Object> e;
200+ if (!String::NewFromUtf8 (isolate, errstr).ToLocal (&js_errmsg) ||
201+ !String::NewFromUtf8 (isolate, errmsg).ToLocal (&js_errstr) ||
202+ !CreateSQLiteError (isolate, message).ToLocal (&e) ||
203+ e->Set (isolate->GetCurrentContext (),
204+ Environment::GetCurrent (isolate)->errcode_string (),
205+ Integer::New (isolate, errcode))
206+ .IsNothing () ||
207+ e->Set (isolate->GetCurrentContext (),
208+ Environment::GetCurrent (isolate)->errstr_string (),
209+ js_errstr)
210+ .IsNothing () ||
211+ e->Set (isolate->GetCurrentContext (),
212+ Environment::GetCurrent (isolate)->errmsg_string (),
213+ js_errmsg)
214+ .IsNothing ()) {
215+ return MaybeLocal<Object>();
216+ }
217+ return e;
218+ }
219+
191220void JSValueToSQLiteResult (Isolate* isolate,
192221 sqlite3_context* ctx,
193222 Local<Value> value) {
@@ -241,6 +270,20 @@ inline void THROW_ERR_SQLITE_ERROR(Isolate* isolate, const char* message) {
241270 }
242271}
243272
273+ inline void THROW_ERR_SQLITE_ERROR (Isolate* isolate,
274+ DatabaseSync* db,
275+ const char * message) {
276+ if (db->ShouldIgnoreSQLiteError ()) {
277+ db->SetIgnoreNextSQLiteError (false );
278+ return ;
279+ }
280+
281+ Local<Object> e;
282+ if (CreateSQLiteError (isolate, db->Connection (), message).ToLocal (&e)) {
283+ isolate->ThrowException (e);
284+ }
285+ }
286+
244287inline void THROW_ERR_SQLITE_ERROR (Isolate* isolate, int errcode) {
245288 const char * errstr = sqlite3_errstr (errcode);
246289
@@ -2906,7 +2949,8 @@ BaseObjectPtr<StatementSync> SQLTagStore::PrepareStatement(
29062949 session->database_ ->connection_ , sql.data (), sql.size (), &s, 0 );
29072950
29082951 if (r != SQLITE_OK) {
2909- THROW_ERR_SQLITE_ERROR (isolate, " Failed to prepare statement" );
2952+ THROW_ERR_SQLITE_ERROR (
2953+ isolate, session->database_ .get (), " Failed to prepare statement" );
29102954 sqlite3_finalize (s);
29112955 return BaseObjectPtr<StatementSync>();
29122956 }
0 commit comments