migrateLegacyEventIfNeeded method
Implementation
Future<LegacyMigrationInsertResult> migrateLegacyEventIfNeeded({
required int sourcePosition,
required int tsMillis,
required String eventName,
required String payloadJson,
}) async {
if (_db == null || !_isOpen) {
return LegacyMigrationInsertResult.failed;
}
try {
final result = await _db!.transaction<LegacyMigrationInsertResult>((txn) async {
final existing = await txn.rawQuery(
'''
SELECT 1 FROM $_legacyMigrationJournalTable
WHERE source_position = ? AND source_line = ?
LIMIT 1
''',
[sourcePosition, payloadJson],
);
if (existing.isNotEmpty) {
return LegacyMigrationInsertResult.alreadyMigrated;
}
await txn.insert(_tableName, {
'ts_millis': tsMillis,
'event_name': eventName,
'payload_json': payloadJson,
});
await txn.insert(_legacyMigrationJournalTable, {
'source_position': sourcePosition,
'source_line': payloadJson,
});
return LegacyMigrationInsertResult.inserted;
});
if (result == LegacyMigrationInsertResult.inserted) {
_insertCounter++;
if (_insertCounter % _capCheckInterval == 0) {
await enforceDbCaps();
}
}
return result;
} catch (e, st) {
dbLogger.severe(
'SqliteEventStorage: migrateLegacyEventIfNeeded failed',
e,
st,
);
await _handlePotentialCorruption(e);
return LegacyMigrationInsertResult.failed;
}
}