SHA256
Добавить временную миграцию v11 для очистки старых DM
This commit is contained in:
@@ -14,7 +14,7 @@ import java.sql.Statement;
|
||||
public final class SqliteDbController {
|
||||
|
||||
private static volatile SqliteDbController instance;
|
||||
private static final int LATEST_SCHEMA_VERSION = 10;
|
||||
private static final int LATEST_SCHEMA_VERSION = 11;
|
||||
|
||||
private final String jdbcUrl;
|
||||
|
||||
@@ -93,6 +93,7 @@ public final class SqliteDbController {
|
||||
case 8 -> migrateToV8();
|
||||
case 9 -> migrateToV9();
|
||||
case 10 -> migrateToV10();
|
||||
case 11 -> migrateToV11();
|
||||
default -> throw new RuntimeException("Unknown DB migration target version: " + targetVersion);
|
||||
}
|
||||
}
|
||||
@@ -309,6 +310,25 @@ public final class SqliteDbController {
|
||||
}
|
||||
}
|
||||
|
||||
private void migrateToV11() {
|
||||
try (Connection c = DriverManager.getConnection(jdbcUrl);
|
||||
Statement st = c.createStatement()) {
|
||||
c.setAutoCommit(false);
|
||||
try {
|
||||
clearLegacySignedMessagesForDmV11(c, st);
|
||||
setSchemaVersion(c, 11);
|
||||
c.commit();
|
||||
} catch (Exception e) {
|
||||
try { c.rollback(); } catch (Exception ignored) {}
|
||||
throw new RuntimeException("DB migration to v11 failed", e);
|
||||
} finally {
|
||||
try { c.setAutoCommit(true); } catch (Exception ignored) {}
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
throw new RuntimeException("DB migration to v11 failed", e);
|
||||
}
|
||||
}
|
||||
|
||||
private static void ensureChat200StateTables(Statement st) throws SQLException {
|
||||
st.executeUpdate("""
|
||||
CREATE TABLE IF NOT EXISTS chat200_state (
|
||||
@@ -443,6 +463,21 @@ public final class SqliteDbController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Временная одноразовая миграция на переходе к SHiNE_DM v1:
|
||||
* старые строки signed_messages_v2 больше не гарантированно совместимы
|
||||
* с новым бинарным форматом и правилами tombstone/reencrypt.
|
||||
* Позже эту миграцию нужно убрать, чтобы случайно не очищать рабочие DM.
|
||||
*/
|
||||
private static void clearLegacySignedMessagesForDmV11(Connection c, Statement st) throws SQLException {
|
||||
if (tableExists(c, "signed_message_session_delivery")) {
|
||||
st.executeUpdate("DELETE FROM signed_message_session_delivery");
|
||||
}
|
||||
if (tableExists(c, "signed_messages_v2")) {
|
||||
st.executeUpdate("DELETE FROM signed_messages_v2");
|
||||
}
|
||||
}
|
||||
|
||||
private static void dropDmFileTables(Statement st) throws SQLException {
|
||||
st.executeUpdate("DROP INDEX IF EXISTS idx_dm_message_file_links_login");
|
||||
st.executeUpdate("DROP INDEX IF EXISTS idx_dm_message_file_links_message");
|
||||
|
||||
Reference in New Issue
Block a user