"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `widget_id` INTEGER NOT NULL, `component_name` TEXT NOT NULL, `item_id` INTEGER NOT NULL, `user_serial_number` INTEGER NOT NULL DEFAULT -1, `span_y` INTEGER NOT NULL DEFAULT 3, `span_y_new` INTEGER NOT NULL DEFAULT 1)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"widgetId",
"columnName":"widget_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"componentName",
"columnName":"component_name",
"affinity":"TEXT",
"notNull":true
},
{
"fieldPath":"itemId",
"columnName":"item_id",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"userSerialNumber",
"columnName":"user_serial_number",
"affinity":"INTEGER",
"notNull":true,
"defaultValue":"-1"
},
{
"fieldPath":"spanY",
"columnName":"span_y",
"affinity":"INTEGER",
"notNull":true,
"defaultValue":"3"
},
{
"fieldPath":"spanYNew",
"columnName":"span_y_new",
"affinity":"INTEGER",
"notNull":true,
"defaultValue":"1"
}
],
"primaryKey":{
"autoGenerate":true,
"columnNames":[
"uid"
]
},
"indices":[
{
"name":"widget_id_index",
"unique":true,
"columnNames":[
"widget_id"
],
"orders":[],
"createSql":"CREATE UNIQUE INDEX IF NOT EXISTS `widget_id_index` ON `${TABLE_NAME}` (`widget_id`)"
}
]
},
{
"tableName":"communal_item_rank_table",
"createSql":"CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `rank` INTEGER NOT NULL DEFAULT 0)",
"fields":[
{
"fieldPath":"uid",
"columnName":"uid",
"affinity":"INTEGER",
"notNull":true
},
{
"fieldPath":"rank",
"columnName":"rank",
"affinity":"INTEGER",
"notNull":true,
"defaultValue":"0"
}
],
"primaryKey":{
"autoGenerate":true,
"columnNames":[
"uid"
]
}
}
],
"setupQueries":[
"CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
"INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '912adf66ee487e9e4afba007cc8073c7')"
@@ -155,5 +156,27 @@ abstract class CommunalDatabase : RoomDatabase() {
}
}
}
/** Eliminates duplicate entries with same widget id and enforces a uniqueness index */
@VisibleForTesting
valMIGRATION_5_6=
object: Migration(5,6){
overridefunmigrate(db:SupportSQLiteDatabase){
Log.i(TAG,"Migrating from version 5 to 6")
db.query(
"SELECT item_id, widget_id FROM communal_widget_table WHERE widget_id IN (SELECT widget_id FROM communal_widget_table GROUP BY widget_id HAVING COUNT(widget_id) > 1)"