Handle missing jmdict entries gracefully on import #215

Open
opened 2026-06-01 20:59:34 +02:00 by oysteikt · 1 comment
Owner

Example of what could happen when resetting the database to a new copy of jadb with updated datasource for jmdict:

I/flutter (25896): Library list "favourites" already exists but is empty. Importing entries from file Directory: '/data/user/0/wtf.nani.mugiten.debug/code_cache/mugiten_data_IPELEG/library/favourites/'.
E/flutter (25896): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: SqfliteFfiException(sqlite_error: 787, , SqliteException(787): while executing statement, FOREIGN KEY constraint failed, constraint failed (code 787)
E/flutter (25896):   Causing statement: INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?), parameters: 情報学単語, 1232500, 7600, 1780340231765}) DatabaseException(SqliteException(787): while executing statement, FOREIGN KEY constraint failed, constraint failed (code 787)
E/flutter (25896):   Causing statement: INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?), parameters: 情報学単語, 1232500, 7600, 1780340231765) sql 'INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?)' args [情報学単語, 1232500, 7600, 1780340231765] {details: {database: {path: /data/user/0/wtf.nani.mugiten.debug/app_flutter/mugiten.sqlite, id: 3, readOnly: false, singleInstance: true}}}
E/flutter (25896): #0      responseToResultOrThrow (package:sqflite_common_ffi/src/method_call.dart:125:9)
E/flutter (25896): #1      SqfliteIsolate.handle (package:sqflite_common_ffi/src/isolate.dart:35:12)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #2      _isolateHandle (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:106:10)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #3      ffiMethodCallhandleInIsolate (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:59:18)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #4      _SqfliteDatabaseFactoryImpl.invokeMethod (package:sqflite_common/src/mixin/factory.dart:22:8)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #5      SqfliteDatabaseMixin.txnApplyBatch.<anonymous closure> (package:sqflite_common/src/database_mixin.dart:841:23)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #6      SqfliteDatabaseMixin.txnSynchronized (package:sqflite_common/src/database_mixin.dart:555:16)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #7      SqfliteDatabaseMixinExt._txnTransaction (package:sqflite_common/src/database_mixin.dart:389:16)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #8      BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38:16)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #9      SqfliteDatabaseMixin.txnSynchronized (package:sqflite_common/src/database_mixin.dart:590:14)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #10     LibraryListExt.libraryListInsertEntries (package:mugiten/models/library_list.dart:558:5)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #11     importLibraryList (package:mugiten/services/archive/v2/library_lists.dart:271:20)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #12     importLibraryLists (package:mugiten/services/archive/v2/library_lists.dart:229:5)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #13     importData (package:mugiten/services/archive/v2/format.dart:340:3)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896): #14     _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:183:3)
E/flutter (25896): <asynchronous suspension>
E/flutter (25896):
Example of what could happen when resetting the database to a new copy of jadb with updated datasource for jmdict: ``` I/flutter (25896): Library list "favourites" already exists but is empty. Importing entries from file Directory: '/data/user/0/wtf.nani.mugiten.debug/code_cache/mugiten_data_IPELEG/library/favourites/'. E/flutter (25896): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: SqfliteFfiException(sqlite_error: 787, , SqliteException(787): while executing statement, FOREIGN KEY constraint failed, constraint failed (code 787) E/flutter (25896): Causing statement: INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?), parameters: 情報学単語, 1232500, 7600, 1780340231765}) DatabaseException(SqliteException(787): while executing statement, FOREIGN KEY constraint failed, constraint failed (code 787) E/flutter (25896): Causing statement: INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?), parameters: 情報学単語, 1232500, 7600, 1780340231765) sql 'INSERT OR IGNORE INTO Mugiten_LibraryListEntry (listName, jmdictEntryId, kanji, orderNum, lastModified) VALUES (?, ?, NULL, ?, ?)' args [情報学単語, 1232500, 7600, 1780340231765] {details: {database: {path: /data/user/0/wtf.nani.mugiten.debug/app_flutter/mugiten.sqlite, id: 3, readOnly: false, singleInstance: true}}} E/flutter (25896): #0 responseToResultOrThrow (package:sqflite_common_ffi/src/method_call.dart:125:9) E/flutter (25896): #1 SqfliteIsolate.handle (package:sqflite_common_ffi/src/isolate.dart:35:12) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #2 _isolateHandle (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:106:10) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #3 ffiMethodCallhandleInIsolate (package:sqflite_common_ffi/src/database_factory_ffi_io.dart:59:18) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #4 _SqfliteDatabaseFactoryImpl.invokeMethod (package:sqflite_common/src/mixin/factory.dart:22:8) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #5 SqfliteDatabaseMixin.txnApplyBatch.<anonymous closure> (package:sqflite_common/src/database_mixin.dart:841:23) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #6 SqfliteDatabaseMixin.txnSynchronized (package:sqflite_common/src/database_mixin.dart:555:16) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #7 SqfliteDatabaseMixinExt._txnTransaction (package:sqflite_common/src/database_mixin.dart:389:16) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #8 BasicLock.synchronized (package:synchronized/src/basic_lock.dart:38:16) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #9 SqfliteDatabaseMixin.txnSynchronized (package:sqflite_common/src/database_mixin.dart:590:14) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #10 LibraryListExt.libraryListInsertEntries (package:mugiten/models/library_list.dart:558:5) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #11 importLibraryList (package:mugiten/services/archive/v2/library_lists.dart:271:20) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #12 importLibraryLists (package:mugiten/services/archive/v2/library_lists.dart:229:5) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #13 importData (package:mugiten/services/archive/v2/format.dart:340:3) E/flutter (25896): <asynchronous suspension> E/flutter (25896): #14 _ForwardingStreamSubscription._handleData (dart:async/stream_pipe.dart:183:3) E/flutter (25896): <asynchronous suspension> E/flutter (25896): ```
oysteikt added the crash reportsafety labels 2026-06-01 20:59:34 +02:00
oysteikt added this to the Kanban project 2026-06-01 21:00:48 +02:00
oysteikt moved this to Next Version in Kanban on 2026-06-01 21:00:57 +02:00
oysteikt changed title from Handle missing jmdict entries gracefully to Handle missing jmdict entries gracefully on import 2026-06-01 21:05:17 +02:00
oysteikt added the topic/archive label 2026-06-01 21:05:20 +02:00
Author
Owner

Just some extra info: this entry seems like it was 1232500, 挙げられる, "to be arrested, to be captured (e.g. data), to be caught"

But we need a general way of handling missing entries

Just some extra info: this entry seems like it was 1232500, 挙げられる, "to be arrested, to be captured (e.g. data), to be caught" But we need a general way of handling missing entries
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mugiten/mugiten#215