| | |
| | | import androidx.room.TypeConverters |
| | | import androidx.room.migration.Migration |
| | | import androidx.sqlite.db.SupportSQLiteDatabase |
| | | import com.example.firstapp.dao.PackageDao |
| | | import com.example.firstapp.database.dao.CodeDao |
| | | import com.example.firstapp.database.dao.KeywordDao |
| | | import com.example.firstapp.database.dao.MsgDao |
| | | import com.example.firstapp.database.dao.ReminderDao |
| | | import com.example.firstapp.database.entity.Code |
| | | import com.example.firstapp.database.entity.KeywordEntity |
| | | import com.example.firstapp.database.entity.Msg |
| | | import com.example.firstapp.database.entity.Reminder |
| | | import com.example.firstapp.utils.DATABASE_NAME |
| | | import com.example.firstapp.utils.SettingUtils |
| | | import com.example.firstapp.utils.TAG_LIST |
| | | |
| | | import com.example.firstapp.database.ext.ConvertersDate |
| | | |
| | | import com.example.firstapp.model.PackageInfo |
| | | import com.example.firstapp.model.CourierStat |
| | | import com.example.firstapp.model.DailyStat |
| | | |
| | | |
| | | @Database( |
| | | entities = [ Msg::class, Code::class], |
| | | // views = [LogsDetail::class], |
| | | version = 19, |
| | | entities = [ |
| | | Msg::class, |
| | | Code::class, |
| | | KeywordEntity::class, |
| | | Reminder::class, |
| | | PackageInfo::class |
| | | ], |
| | | views = [ |
| | | CourierStat::class, |
| | | DailyStat::class |
| | | ], |
| | | version = 20, |
| | | exportSchema = false |
| | | ) |
| | | @TypeConverters(ConvertersDate::class) |
| | | abstract class AppDatabase : RoomDatabase() { |
| | | abstract fun msgDao(): MsgDao |
| | | abstract fun codeDao(): CodeDao |
| | | abstract fun keywordDao(): KeywordDao |
| | | abstract fun reminderDao(): ReminderDao |
| | | abstract fun packageDao(): PackageDao |
| | | |
| | | companion object { |
| | | @Volatile |
| | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | private val MIGRATION_MSG = object : Migration(19, 20) { |
| | | override fun migrate(database: SupportSQLiteDatabase) { |
| | | //database.execSQL("Create table Msg as Select id,type,`from`,content,(case when sim_info like 'SIM1%' then '0' when sim_info like 'SIM2%' then '1' else '-1' end) as sim_slot,sim_info,sub_id,time from Logs where 1 = 1") |
| | | database.execSQL( |
| | | """ |
| | | CREATE TABLE "Msg" ( |
| | | "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, |
| | | "type" TEXT NOT NULL DEFAULT 'sms', |
| | | "from" TEXT NOT NULL DEFAULT '', |
| | | "content" TEXT NOT NULL DEFAULT '', |
| | | "sim_slot" INTEGER NOT NULL DEFAULT -1, |
| | | "sim_info" TEXT NOT NULL DEFAULT '', |
| | | "sub_id" INTEGER NOT NULL DEFAULT 0, |
| | | "time" INTEGER NOT NULL |
| | | ) |
| | | """.trimIndent() |
| | | CREATE TABLE "Msg" ( |
| | | "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, |
| | | "type" TEXT NOT NULL DEFAULT 'sms', |
| | | "from" TEXT NOT NULL DEFAULT '', |
| | | "content" TEXT NOT NULL DEFAULT '', |
| | | "sim_slot" INTEGER NOT NULL DEFAULT -1, |
| | | "sim_info" TEXT NOT NULL DEFAULT '', |
| | | "sub_id" INTEGER NOT NULL DEFAULT 0, |
| | | "time" INTEGER NOT NULL |
| | | ) |
| | | """.trimIndent() |
| | | ) |
| | | |
| | | database.execSQL("CREATE UNIQUE INDEX \"index_Msg_id\" ON \"Msg\" ( \"id\" ASC)") |
| | | |
| | | // 新增 KeywordEntity 表的创建逻辑 |
| | | database.execSQL(""" |
| | | CREATE TABLE IF NOT EXISTS `keywords` ( |
| | | `id` INTEGER PRIMARY KEY AUTOINCREMENT, |
| | | `keyword` TEXT NOT NULL, |
| | | `type` TEXT NOT NULL, |
| | | `isEnabled` INTEGER NOT NULL |
| | | ) |
| | | """) |
| | | |
| | | // 创建 CourierStat 视图 |
| | | database.execSQL(""" |
| | | CREATE VIEW IF NOT EXISTS CourierStat AS |
| | | SELECT courierName, COUNT(*) as count |
| | | FROM packages |
| | | GROUP BY courierName |
| | | """) |
| | | |
| | | // 创建 DailyStat 视图 |
| | | database.execSQL(""" |
| | | CREATE VIEW IF NOT EXISTS DailyStat AS |
| | | SELECT date(receivedTime/1000, 'unixepoch', 'localtime') as date, |
| | | COUNT(*) as count |
| | | FROM packages |
| | | GROUP BY date(receivedTime/1000, 'unixepoch', 'localtime') |
| | | """) |
| | | // database.execSQL(""" |
| | | // CREATE TABLE IF NOT EXISTS `reminders` ( |
| | | // id INTEGER PRIMARY KEY AUTOINCREMENT, |
| | | // type TEXT NOT NULL, |
| | | // nickname TEXT NOT NULL, |
| | | // keywords TEXT NOT NULL, |
| | | // ); |
| | | // """) |
| | | |
| | | } |
| | | } |
| | | |