Files
whatsms-gateway-android/app/src/main/java/me/capcom/smsgateway/data/Migrations.kt
T

87 lines
3.0 KiB
Kotlin

package me.capcom.smsgateway.data
import androidx.room.migration.Migration
import androidx.sqlite.db.SupportSQLiteDatabase
val MIGRATION_7_8 = object : Migration(7, 8) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL(
"""
UPDATE message
SET validUntil = strftime('%FT%TZ', createdAt / 1000 + 86400, 'unixepoch')
WHERE validUntil IS NULL AND state = 'Pending'
""".trimIndent()
)
}
}
val MIGRATION_13_14 = object : Migration(13, 14) {
override fun migrate(database: SupportSQLiteDatabase) {
// Create a new table with the desired schema (without the text column)
database.execSQL(
"""
CREATE TABLE IF NOT EXISTS message_new (
`id` TEXT NOT NULL,
`withDeliveryReport` INTEGER NOT NULL DEFAULT 1,
`simNumber` INTEGER,
`validUntil` TEXT,
`isEncrypted` INTEGER NOT NULL DEFAULT 0,
`skipPhoneValidation` INTEGER NOT NULL DEFAULT 0,
`priority` INTEGER NOT NULL DEFAULT 0,
`type` TEXT NOT NULL DEFAULT 'Text',
`source` TEXT NOT NULL DEFAULT 'Local',
`content` TEXT NOT NULL,
`state` TEXT NOT NULL,
`createdAt` INTEGER NOT NULL DEFAULT 0,
`processedAt` INTEGER,
PRIMARY KEY(`id`)
)
""".trimIndent()
)
// Copy data from the old table to the new table
database.execSQL(
"""
INSERT INTO message_new (
id,
withDeliveryReport,
simNumber,
validUntil,
isEncrypted,
skipPhoneValidation,
priority,
source,
type,
content,
state,
createdAt,
processedAt
) SELECT
id,
withDeliveryReport,
simNumber,
validUntil,
isEncrypted,
skipPhoneValidation,
priority,
source,
'Text' AS type,
'{"text": "' || replace(replace(text, '\\', '\\\\'), '"', '\\"') || '"}' AS content,
state,
createdAt,
processedAt
FROM message
""".trimIndent()
)
// Drop the old table and rename the new table to the original name
database.execSQL("DROP TABLE IF EXISTS message")
database.execSQL("ALTER TABLE message_new RENAME TO message")
// Create indices
database.execSQL("CREATE INDEX IF NOT EXISTS index_Message_state ON message (state)")
database.execSQL("CREATE INDEX IF NOT EXISTS index_Message_createdAt ON message (createdAt)")
database.execSQL("CREATE INDEX IF NOT EXISTS index_Message_processedAt ON message (processedAt)")
}
}