@@ -110,7 +110,7 @@ abstract class UtilitiesDatabase : RoomDatabase() {
110110 companion object {
111111 private val logger = LoggerFactory .getLogger(UtilitiesDatabase ::class .java)
112112 private const val DATABASE_NAME = " utilities.db"
113- const val DATABASE_VERSION = 6
113+ const val DATABASE_VERSION = 7
114114 const val TABLE_HISTORY = " history"
115115 const val TABLE_HIDDEN = " hidden"
116116 const val TABLE_LIST = " list"
@@ -136,7 +136,7 @@ abstract class UtilitiesDatabase : RoomDatabase() {
136136 COLUMN_ID +
137137 " INTEGER PRIMARY KEY," +
138138 COLUMN_PATH +
139- " TEXT UNIQUE" +
139+ " TEXT UNIQUE NOT NULL " +
140140 " );"
141141 )
142142 private const val queryHidden = (
@@ -146,7 +146,7 @@ abstract class UtilitiesDatabase : RoomDatabase() {
146146 COLUMN_ID +
147147 " INTEGER PRIMARY KEY," +
148148 COLUMN_PATH +
149- " TEXT UNIQUE" +
149+ " TEXT UNIQUE NOT NULL " +
150150 " );"
151151 )
152152 private const val queryList = (
@@ -156,7 +156,7 @@ abstract class UtilitiesDatabase : RoomDatabase() {
156156 COLUMN_ID +
157157 " INTEGER PRIMARY KEY," +
158158 COLUMN_PATH +
159- " TEXT UNIQUE" +
159+ " TEXT UNIQUE NOT NULL " +
160160 " );"
161161 )
162162 private const val queryGrid = (
@@ -166,7 +166,7 @@ abstract class UtilitiesDatabase : RoomDatabase() {
166166 COLUMN_ID +
167167 " INTEGER PRIMARY KEY," +
168168 COLUMN_PATH +
169- " TEXT UNIQUE" +
169+ " TEXT UNIQUE NOT NULL " +
170170 " );"
171171 )
172172 private const val queryBookmarks = (
@@ -176,33 +176,33 @@ abstract class UtilitiesDatabase : RoomDatabase() {
176176 COLUMN_ID +
177177 " INTEGER PRIMARY KEY," +
178178 COLUMN_NAME +
179- " TEXT," +
179+ " TEXT NOT NULL ," +
180180 COLUMN_PATH +
181- " TEXT UNIQUE" +
181+ " TEXT UNIQUE NOT NULL " +
182182 " );"
183183 )
184184 private const val querySmb = (
185185 " CREATE TABLE IF NOT EXISTS " +
186186 TABLE_SMB +
187187 " (" +
188188 COLUMN_ID +
189- " INTEGER PRIMARY KEY," +
189+ " INTEGER PRIMARY KEY NOT NULL ," +
190190 COLUMN_NAME +
191- " TEXT," +
191+ " TEXT NOT NULL ," +
192192 COLUMN_PATH +
193- " TEXT UNIQUE" +
193+ " TEXT UNIQUE NOT NULL " +
194194 " );"
195195 )
196196 private const val querySftp = (
197197 " CREATE TABLE IF NOT EXISTS " +
198198 TABLE_SFTP +
199199 " (" +
200200 COLUMN_ID +
201- " INTEGER PRIMARY KEY," +
201+ " INTEGER PRIMARY KEY NOT NULL ," +
202202 COLUMN_NAME +
203- " TEXT," +
203+ " TEXT NOT NULL ," +
204204 COLUMN_PATH +
205- " TEXT UNIQUE," +
205+ " TEXT UNIQUE NOT NULL ," +
206206 COLUMN_HOST_PUBKEY +
207207 " TEXT," +
208208 COLUMN_PRIVATE_KEY_NAME +
@@ -481,7 +481,7 @@ abstract class UtilitiesDatabase : RoomDatabase() {
481481 }
482482
483483 internal val MIGRATION_5_6 : Migration =
484- object : Migration (5 , DATABASE_VERSION ) {
484+ object : Migration (5 , 6 ) {
485485 override fun migrate (database : SupportSQLiteDatabase ) {
486486 val updateSqls: MutableList <String > = ArrayList ()
487487 updateSqls.addAll(migratePasswordInUris(database, TABLE_SMB ))
@@ -492,6 +492,101 @@ abstract class UtilitiesDatabase : RoomDatabase() {
492492 }
493493 }
494494
495+ internal val MIGRATION_6_7 : Migration =
496+ object : Migration (6 , DATABASE_VERSION ) {
497+ override fun migrate (database : SupportSQLiteDatabase ) {
498+ var backupTable = TEMP_TABLE_PREFIX + TABLE_BOOKMARKS
499+ database.execSQL(
500+ queryBookmarks
501+ .replace(TABLE_BOOKMARKS , backupTable)
502+ .replace(" PRIMARY KEY," , " PRIMARY KEY NOT NULL," ),
503+ )
504+ database.execSQL(
505+ " INSERT INTO " +
506+ backupTable +
507+ " (" +
508+ COLUMN_NAME +
509+ " ," +
510+ COLUMN_PATH +
511+ " ) SELECT DISTINCT(" +
512+ COLUMN_NAME +
513+ " ), " +
514+ COLUMN_PATH +
515+ " FROM " +
516+ TABLE_BOOKMARKS ,
517+ )
518+ database.execSQL(" DROP TABLE $TABLE_BOOKMARKS ;" )
519+ database.execSQL(" ALTER TABLE $backupTable RENAME TO $TABLE_BOOKMARKS ;" )
520+ database.execSQL(
521+ " CREATE UNIQUE INDEX 'bookmarks_idx' ON " +
522+ TABLE_BOOKMARKS +
523+ " (" +
524+ COLUMN_NAME +
525+ " , " +
526+ COLUMN_PATH +
527+ " );" ,
528+ )
529+ backupTable = TEMP_TABLE_PREFIX + TABLE_GRID
530+ database.execSQL(
531+ queryGrid
532+ .replace(TABLE_GRID , backupTable)
533+ .replace(" PRIMARY KEY," , " PRIMARY KEY NOT NULL," ),
534+ )
535+ database.execSQL(
536+ " INSERT INTO $backupTable SELECT * FROM $TABLE_GRID group by path;" ,
537+ )
538+ database.execSQL(" DROP TABLE $TABLE_GRID ;" )
539+ database.execSQL(" ALTER TABLE $backupTable RENAME TO $TABLE_GRID ;" )
540+ backupTable = TEMP_TABLE_PREFIX + TABLE_HIDDEN
541+ database.execSQL(
542+ queryHidden
543+ .replace(TABLE_HIDDEN , backupTable)
544+ .replace(" PRIMARY KEY," , " PRIMARY KEY NOT NULL," ),
545+ )
546+ database.execSQL(
547+ " INSERT INTO $backupTable SELECT * FROM $TABLE_HIDDEN group by path;" ,
548+ )
549+ database.execSQL(" DROP TABLE $TABLE_HIDDEN ;" )
550+ database.execSQL(" ALTER TABLE $backupTable RENAME TO $TABLE_HIDDEN ;" )
551+ backupTable = TEMP_TABLE_PREFIX + TABLE_HISTORY
552+ database.execSQL(
553+ queryHistory
554+ .replace(TABLE_HISTORY , backupTable)
555+ .replace(" PRIMARY KEY," , " PRIMARY KEY NOT NULL," ),
556+ )
557+ database.execSQL(
558+ " INSERT INTO $backupTable SELECT * FROM $TABLE_HISTORY group by path;" ,
559+ )
560+ database.execSQL(" DROP TABLE $TABLE_HISTORY ;" )
561+ database.execSQL(" ALTER TABLE $backupTable RENAME TO $TABLE_HISTORY ;" )
562+ backupTable = TEMP_TABLE_PREFIX + TABLE_LIST
563+ database.execSQL(
564+ queryList
565+ .replace(TABLE_LIST , backupTable)
566+ .replace(" PRIMARY KEY," , " PRIMARY KEY NOT NULL," ),
567+ )
568+ database.execSQL(
569+ " INSERT INTO $backupTable SELECT * FROM $TABLE_LIST group by path;" ,
570+ )
571+ database.execSQL(" DROP TABLE $TABLE_LIST ;" )
572+ database.execSQL(" ALTER TABLE $backupTable RENAME TO $TABLE_LIST ;" )
573+ backupTable = TEMP_TABLE_PREFIX + TABLE_SMB
574+ database.execSQL(querySmb.replace(TABLE_SMB , backupTable))
575+ database.execSQL(
576+ " INSERT INTO $backupTable SELECT * FROM $TABLE_SMB group by path;" ,
577+ )
578+ database.execSQL(" DROP TABLE $TABLE_SMB ;" )
579+ database.execSQL(" ALTER TABLE $backupTable RENAME TO $TABLE_SMB ;" )
580+ backupTable = TEMP_TABLE_PREFIX + TABLE_SFTP
581+ database.execSQL(querySftp.replace(TABLE_SFTP , backupTable))
582+ database.execSQL(
583+ " INSERT INTO $backupTable SELECT * FROM $TABLE_SFTP group by path;" ,
584+ )
585+ database.execSQL(" DROP TABLE $TABLE_SFTP ;" )
586+ database.execSQL(" ALTER TABLE $backupTable RENAME TO $TABLE_SFTP ;" )
587+ }
588+ }
589+
495590 /* *
496591 * Initialize the database. Optionally, may provide a custom way to create the database
497592 * with supplied [Context].
@@ -512,6 +607,7 @@ abstract class UtilitiesDatabase : RoomDatabase() {
512607 MIGRATION_3_4 ,
513608 MIGRATION_4_5 ,
514609 MIGRATION_5_6 ,
610+ MIGRATION_6_7 ,
515611 )
516612 .build()
517613 }
0 commit comments