diff --git a/app/schemas/com.todoroo.astrid.dao.Database/45.json b/app/schemas/com.todoroo.astrid.dao.Database/45.json new file mode 100644 index 000000000..84a98f7dd --- /dev/null +++ b/app/schemas/com.todoroo.astrid.dao.Database/45.json @@ -0,0 +1,493 @@ +{ + "formatVersion": 1, + "database": { + "version": 45, + "identityHash": "03cef4a25bd2d94d1501362c7a4e29e1", + "entities": [ + { + "tableName": "notification", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `type` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "taskId", + "columnName": "task", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "uid" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_notification_task", + "unique": true, + "columnNames": [ + "task" + ], + "createSql": "CREATE UNIQUE INDEX `index_notification_task` ON `${TABLE_NAME}` (`task`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "tagdata", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `name` TEXT, `color` INTEGER, `tagOrdering` TEXT, `deleted` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "color", + "columnName": "color", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "tagOrdering", + "columnName": "tagOrdering", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "userActivity", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `action` TEXT, `message` TEXT, `picture` TEXT, `target_id` TEXT, `created_at` INTEGER, `deleted_at` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "action", + "columnName": "action", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "message", + "columnName": "message", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "picture", + "columnName": "picture", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "targetId", + "columnName": "target_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "created", + "columnName": "created_at", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted_at", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "task_attachments", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `task_id` TEXT, `name` TEXT, `path` TEXT, `content_type` TEXT, `deleted_at` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "taskId", + "columnName": "task_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "path", + "columnName": "path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "contentType", + "columnName": "content_type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted_at", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "task_list_metadata", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `tag_uuid` TEXT, `filter` TEXT, `task_ids` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "tagUuid", + "columnName": "tag_uuid", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "filter", + "columnName": "filter", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "taskIds", + "columnName": "task_ids", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "store", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `item` TEXT, `value` TEXT, `value2` TEXT, `value3` TEXT, `value4` TEXT, `deleted` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "item", + "columnName": "item", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value2", + "columnName": "value2", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value3", + "columnName": "value3", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value4", + "columnName": "value4", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "so_id", + "unique": false, + "columnNames": [ + "type", + "item" + ], + "createSql": "CREATE INDEX `so_id` ON `${TABLE_NAME}` (`type`, `item`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "tasks", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT, `importance` INTEGER, `dueDate` INTEGER, `hideUntil` INTEGER, `created` INTEGER, `modified` INTEGER, `completed` INTEGER, `deleted` INTEGER, `notes` TEXT, `estimatedSeconds` INTEGER, `elapsedSeconds` INTEGER, `timerStart` INTEGER, `notificationFlags` INTEGER, `notifications` INTEGER, `lastNotified` INTEGER, `snoozeTime` INTEGER, `recurrence` TEXT, `repeatUntil` INTEGER, `calendarUri` TEXT, `remoteId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "importance", + "columnName": "importance", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dueDate", + "columnName": "dueDate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "hideUntil", + "columnName": "hideUntil", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "created", + "columnName": "created", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "modified", + "columnName": "modified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "completed", + "columnName": "completed", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notes", + "columnName": "notes", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "estimatedSeconds", + "columnName": "estimatedSeconds", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "elapsedSeconds", + "columnName": "elapsedSeconds", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "timerStart", + "columnName": "timerStart", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notificationFlags", + "columnName": "notificationFlags", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notifications", + "columnName": "notifications", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastNotified", + "columnName": "lastNotified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "snoozeTime", + "columnName": "snoozeTime", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "recurrence", + "columnName": "recurrence", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "repeatUntil", + "columnName": "repeatUntil", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "calendarUri", + "columnName": "calendarUri", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "t_rid", + "unique": true, + "columnNames": [ + "remoteId" + ], + "createSql": "CREATE UNIQUE INDEX `t_rid` ON `${TABLE_NAME}` (`remoteId`)" + } + ], + "foreignKeys": [] + } + ], + "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, \"03cef4a25bd2d94d1501362c7a4e29e1\")" + ] + } +} \ No newline at end of file diff --git a/app/schemas/com.todoroo.astrid.dao.Database/46.json b/app/schemas/com.todoroo.astrid.dao.Database/46.json new file mode 100644 index 000000000..5880b2300 --- /dev/null +++ b/app/schemas/com.todoroo.astrid.dao.Database/46.json @@ -0,0 +1,597 @@ +{ + "formatVersion": 1, + "database": { + "version": 46, + "identityHash": "14fe00b22e94ede6e73d2d9c1a91c794", + "entities": [ + { + "tableName": "notification", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `type` INTEGER NOT NULL)", + "fields": [ + { + "fieldPath": "uid", + "columnName": "uid", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "taskId", + "columnName": "task", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "uid" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "index_notification_task", + "unique": true, + "columnNames": [ + "task" + ], + "createSql": "CREATE UNIQUE INDEX `index_notification_task` ON `${TABLE_NAME}` (`task`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "tagdata", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `name` TEXT, `color` INTEGER, `tagOrdering` TEXT, `deleted` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "color", + "columnName": "color", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "tagOrdering", + "columnName": "tagOrdering", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "userActivity", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `action` TEXT, `message` TEXT, `picture` TEXT, `target_id` TEXT, `created_at` INTEGER, `deleted_at` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "action", + "columnName": "action", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "message", + "columnName": "message", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "picture", + "columnName": "picture", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "targetId", + "columnName": "target_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "created", + "columnName": "created_at", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted_at", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "task_attachments", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `task_id` TEXT, `name` TEXT, `path` TEXT, `content_type` TEXT, `deleted_at` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "taskId", + "columnName": "task_id", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "path", + "columnName": "path", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "contentType", + "columnName": "content_type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted_at", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "task_list_metadata", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `tag_uuid` TEXT, `filter` TEXT, `task_ids` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "tagUuid", + "columnName": "tag_uuid", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "filter", + "columnName": "filter", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "taskIds", + "columnName": "task_ids", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "store", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `type` TEXT, `item` TEXT, `value` TEXT, `value2` TEXT, `value3` TEXT, `value4` TEXT, `deleted` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "type", + "columnName": "type", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "item", + "columnName": "item", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value2", + "columnName": "value2", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value3", + "columnName": "value3", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value4", + "columnName": "value4", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "so_id", + "unique": false, + "columnNames": [ + "type", + "item" + ], + "createSql": "CREATE INDEX `so_id` ON `${TABLE_NAME}` (`type`, `item`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "tasks", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `title` TEXT, `importance` INTEGER, `dueDate` INTEGER, `hideUntil` INTEGER, `created` INTEGER, `modified` INTEGER, `completed` INTEGER, `deleted` INTEGER, `notes` TEXT, `estimatedSeconds` INTEGER, `elapsedSeconds` INTEGER, `timerStart` INTEGER, `notificationFlags` INTEGER, `notifications` INTEGER, `lastNotified` INTEGER, `snoozeTime` INTEGER, `recurrence` TEXT, `repeatUntil` INTEGER, `calendarUri` TEXT, `remoteId` TEXT)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "title", + "columnName": "title", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "importance", + "columnName": "importance", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "dueDate", + "columnName": "dueDate", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "hideUntil", + "columnName": "hideUntil", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "created", + "columnName": "created", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "modified", + "columnName": "modified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "completed", + "columnName": "completed", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notes", + "columnName": "notes", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "estimatedSeconds", + "columnName": "estimatedSeconds", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "elapsedSeconds", + "columnName": "elapsedSeconds", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "timerStart", + "columnName": "timerStart", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notificationFlags", + "columnName": "notificationFlags", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "notifications", + "columnName": "notifications", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "lastNotified", + "columnName": "lastNotified", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "snoozeTime", + "columnName": "snoozeTime", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "recurrence", + "columnName": "recurrence", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "repeatUntil", + "columnName": "repeatUntil", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "calendarUri", + "columnName": "calendarUri", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "remoteId", + "columnName": "remoteId", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "t_rid", + "unique": true, + "columnNames": [ + "remoteId" + ], + "createSql": "CREATE UNIQUE INDEX `t_rid` ON `${TABLE_NAME}` (`remoteId`)" + } + ], + "foreignKeys": [] + }, + { + "tableName": "metadata", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `task` INTEGER, `key` TEXT, `value` TEXT, `value2` TEXT, `value3` TEXT, `value4` TEXT, `value5` TEXT, `value6` TEXT, `value7` TEXT, `created` INTEGER, `deleted` INTEGER)", + "fields": [ + { + "fieldPath": "id", + "columnName": "_id", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "task", + "columnName": "task", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "key", + "columnName": "key", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value1", + "columnName": "value", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value2", + "columnName": "value2", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value3", + "columnName": "value3", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value4", + "columnName": "value4", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value5", + "columnName": "value5", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value6", + "columnName": "value6", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "value7", + "columnName": "value7", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "created", + "columnName": "created", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "deleted", + "columnName": "deleted", + "affinity": "INTEGER", + "notNull": false + } + ], + "primaryKey": { + "columnNames": [ + "_id" + ], + "autoGenerate": true + }, + "indices": [ + { + "name": "md_tid", + "unique": false, + "columnNames": [ + "task" + ], + "createSql": "CREATE INDEX `md_tid` ON `${TABLE_NAME}` (`task`)" + }, + { + "name": "md_tkid", + "unique": false, + "columnNames": [ + "task", + "key" + ], + "createSql": "CREATE INDEX `md_tkid` ON `${TABLE_NAME}` (`task`, `key`)" + } + ], + "foreignKeys": [] + } + ], + "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, \"14fe00b22e94ede6e73d2d9c1a91c794\")" + ] + } +} \ No newline at end of file diff --git a/app/src/main/java/com/todoroo/andlib/data/AbstractModel.java b/app/src/main/java/com/todoroo/andlib/data/AbstractModel.java index 3f7a9e60f..2e541f4ee 100644 --- a/app/src/main/java/com/todoroo/andlib/data/AbstractModel.java +++ b/app/src/main/java/com/todoroo/andlib/data/AbstractModel.java @@ -5,6 +5,7 @@ */ package com.todoroo.andlib.data; +import android.arch.persistence.room.Ignore; import android.content.ContentValues; import android.os.Parcel; import android.os.Parcelable; @@ -64,13 +65,16 @@ public abstract class AbstractModel implements Parcelable, Cloneable { */ /** User set values */ + @Ignore protected ContentValues setValues = null; /** Values from database */ + @Ignore protected ContentValues values = null; /** Transitory Metadata (not saved in database) */ @SuppressWarnings("WeakerAccess") + @Ignore HashMap transitoryData = null; protected AbstractModel() { diff --git a/app/src/main/java/com/todoroo/andlib/data/SqlConstructorVisitor.java b/app/src/main/java/com/todoroo/andlib/data/SqlConstructorVisitor.java deleted file mode 100644 index fe3c677c4..000000000 --- a/app/src/main/java/com/todoroo/andlib/data/SqlConstructorVisitor.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.todoroo.andlib.data; - -/** - * Visitor that returns SQL constructor for this property - * - * @author Tim Su - * - */ -public class SqlConstructorVisitor implements Property.PropertyVisitor { - - @Override - public String visitDouble(Property property, Void data) { - return String.format("%s REAL", property.getColumnName()); - } - - @Override - public String visitInteger(Property property, Void data) { - return String.format("%s INTEGER", property.getColumnName()); - } - - @Override - public String visitLong(Property property, Void data) { - return String.format("%s INTEGER", property.getColumnName()); - } - - @Override - public String visitString(Property property, Void data) { - return String.format("%s TEXT", property.getColumnName()); - } -} - diff --git a/app/src/main/java/com/todoroo/astrid/dao/Database.java b/app/src/main/java/com/todoroo/astrid/dao/Database.java index 90a4a2266..c113790cf 100644 --- a/app/src/main/java/com/todoroo/astrid/dao/Database.java +++ b/app/src/main/java/com/todoroo/astrid/dao/Database.java @@ -43,9 +43,11 @@ import timber.log.Timber; UserActivity.class, TaskAttachment.class, TaskListMetadata.class, - StoreObject.class + StoreObject.class, + Task.class, + Metadata.class }, - version = 44) + version = 46) public abstract class Database extends RoomDatabase { public abstract NotificationDao notificationDao(); diff --git a/app/src/main/java/com/todoroo/astrid/data/Metadata.java b/app/src/main/java/com/todoroo/astrid/data/Metadata.java index f59b8a5ec..0ecb2172c 100644 --- a/app/src/main/java/com/todoroo/astrid/data/Metadata.java +++ b/app/src/main/java/com/todoroo/astrid/data/Metadata.java @@ -6,6 +6,11 @@ package com.todoroo.astrid.data; +import android.arch.persistence.room.ColumnInfo; +import android.arch.persistence.room.Entity; +import android.arch.persistence.room.Ignore; +import android.arch.persistence.room.Index; +import android.arch.persistence.room.PrimaryKey; import android.content.ContentValues; import com.todoroo.andlib.data.AbstractModel; @@ -20,6 +25,11 @@ import com.todoroo.andlib.data.Table; * @author Tim Su * */ +@Entity(tableName = "metadata", + indices = { + @Index(name = "md_tid", value = "task"), + @Index(name = "md_tkid", value = {"task", "key"}) + }) public class Metadata extends AbstractModel { // --- table @@ -30,48 +40,73 @@ public class Metadata extends AbstractModel { // --- properties /** ID */ + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "_id") + public Long id; public static final LongProperty ID = new LongProperty( TABLE, ID_PROPERTY_NAME); /** Associated Task */ + @ColumnInfo(name = "task") + public Long task; public static final LongProperty TASK = new LongProperty( TABLE, "task"); /** Metadata Key */ + @ColumnInfo(name = "key") + public String key; public static final StringProperty KEY = new StringProperty( TABLE, "key"); /** Metadata Text Value Column 1 */ + @ColumnInfo(name = "value") + public String value1; public static final StringProperty VALUE1 = new StringProperty( TABLE, "value"); /** Metadata Text Value Column 2 */ + @ColumnInfo(name = "value2") + public String value2; public static final StringProperty VALUE2 = new StringProperty( TABLE, "value2"); /** Metadata Text Value Column 3 */ + @ColumnInfo(name = "value3") + public String value3; public static final StringProperty VALUE3 = new StringProperty( TABLE, "value3"); /** Metadata Text Value Column 4 */ + @ColumnInfo(name = "value4") + public String value4; public static final StringProperty VALUE4 = new StringProperty( TABLE, "value4"); /** Metadata Text Value Column 5 */ + @ColumnInfo(name = "value5") + public String value5; public static final StringProperty VALUE5 = new StringProperty( TABLE, "value5"); + @ColumnInfo(name = "value6") + public String value6; public static final StringProperty VALUE6 = new StringProperty( TABLE, "value6"); + @ColumnInfo(name = "value7") + public String value7; public static final StringProperty VALUE7 = new StringProperty( TABLE, "value7"); /** Unixtime Metadata was created */ + @ColumnInfo(name = "created") + public Long created; public static final LongProperty CREATION_DATE = new LongProperty( TABLE, "created"); /** Unixtime metadata was deleted/tombstoned */ + @ColumnInfo(name = "deleted") + public Long deleted = 0L; public static final LongProperty DELETION_DATE = new LongProperty( TABLE, "deleted"); @@ -91,6 +126,7 @@ public class Metadata extends AbstractModel { super(); } + @Ignore public Metadata(Metadata metadata) { super(metadata); } diff --git a/app/src/main/java/com/todoroo/astrid/data/Task.java b/app/src/main/java/com/todoroo/astrid/data/Task.java index 118748714..9b3a2a9a0 100644 --- a/app/src/main/java/com/todoroo/astrid/data/Task.java +++ b/app/src/main/java/com/todoroo/astrid/data/Task.java @@ -6,6 +6,11 @@ package com.todoroo.astrid.data; +import android.arch.persistence.room.ColumnInfo; +import android.arch.persistence.room.Entity; +import android.arch.persistence.room.Ignore; +import android.arch.persistence.room.Index; +import android.arch.persistence.room.PrimaryKey; import android.content.ContentValues; import android.text.TextUtils; @@ -28,6 +33,8 @@ import static org.tasks.date.DateTimeUtils.newDateTime; * @author Tim Su * */ +@Entity(tableName = "tasks", + indices = @Index(name = "t_rid", value = "remoteId", unique = true)) public class Task extends RemoteModel { // --- table and uri @@ -38,83 +45,126 @@ public class Task extends RemoteModel { // --- properties /** ID */ + @PrimaryKey(autoGenerate = true) + @ColumnInfo(name = "_id") + public Long id; public static final LongProperty ID = new LongProperty( TABLE, ID_PROPERTY_NAME); /** Name of Task */ + @ColumnInfo(name = "title") + public String title = ""; public static final StringProperty TITLE = new StringProperty( TABLE, "title"); /** Importance of Task (see importance flags) */ + @ColumnInfo(name = "importance") + public Integer importance = IMPORTANCE_NONE; public static final IntegerProperty IMPORTANCE = new IntegerProperty( TABLE, "importance"); /** Unixtime Task is due, 0 if not set */ + @ColumnInfo(name = "dueDate") + public Long dueDate = 0L; public static final LongProperty DUE_DATE = new LongProperty( TABLE, "dueDate", Property.PROP_FLAG_DATE); /** Unixtime Task should be hidden until, 0 if not set */ + @ColumnInfo(name = "hideUntil") + public Long hideUntil = 0L; public static final LongProperty HIDE_UNTIL = new LongProperty( TABLE, "hideUntil", Property.PROP_FLAG_DATE); /** Unixtime Task was created */ + @ColumnInfo(name = "created") + public Long created; public static final LongProperty CREATION_DATE = new LongProperty( TABLE, "created", Property.PROP_FLAG_DATE); /** Unixtime Task was last touched */ + @ColumnInfo(name = "modified") + public Long modified; public static final LongProperty MODIFICATION_DATE = new LongProperty( TABLE, "modified", Property.PROP_FLAG_DATE); /** Unixtime Task was completed. 0 means active */ + @ColumnInfo(name = "completed") + public Long completed = 0L; public static final LongProperty COMPLETION_DATE = new LongProperty( TABLE, "completed", Property.PROP_FLAG_DATE); /** Unixtime Task was deleted. 0 means not deleted */ + @ColumnInfo(name = "deleted") + public Long deleted = 0L; public static final LongProperty DELETION_DATE = new LongProperty( TABLE, "deleted", Property.PROP_FLAG_DATE); // --- non-core task metadata + @ColumnInfo(name = "notes") + public String notes = ""; public static final StringProperty NOTES = new StringProperty( TABLE, "notes"); + @ColumnInfo(name = "estimatedSeconds") + public Integer estimatedSeconds = 0; public static final IntegerProperty ESTIMATED_SECONDS = new IntegerProperty( TABLE, "estimatedSeconds"); + @ColumnInfo(name = "elapsedSeconds") + public Integer elapsedSeconds = 0; public static final IntegerProperty ELAPSED_SECONDS = new IntegerProperty( TABLE, "elapsedSeconds"); + @ColumnInfo(name = "timerStart") + public Long timerStart = 0L; public static final LongProperty TIMER_START = new LongProperty( TABLE, "timerStart", Property.PROP_FLAG_DATE); /** Flags for when to send reminders */ + @ColumnInfo(name = "notificationFlags") + public Integer notificationFlags = 0; public static final IntegerProperty REMINDER_FLAGS = new IntegerProperty( TABLE, "notificationFlags"); /** Reminder period, in milliseconds. 0 means disabled */ + @ColumnInfo(name = "notifications") + public Long notifications = 0L; public static final LongProperty REMINDER_PERIOD = new LongProperty( TABLE, "notifications", Property.PROP_FLAG_DATE); /** Unixtime the last reminder was triggered */ + @ColumnInfo(name = "lastNotified") + public Long lastNotified = 0L; public static final LongProperty REMINDER_LAST = new LongProperty( TABLE, "lastNotified", Property.PROP_FLAG_DATE); /** Unixtime snooze is set (0 -> no snooze) */ + @ColumnInfo(name = "snoozeTime") + public Long snoozeTime = 0L; public static final LongProperty REMINDER_SNOOZE = new LongProperty( TABLE, "snoozeTime", Property.PROP_FLAG_DATE); + @ColumnInfo(name = "recurrence") + public String recurrence = ""; public static final StringProperty RECURRENCE = new StringProperty( TABLE, "recurrence"); + @ColumnInfo(name = "repeatUntil") + public Long repeatUntil = 0L; public static final LongProperty REPEAT_UNTIL = new LongProperty( TABLE, "repeatUntil", Property.PROP_FLAG_DATE); + @ColumnInfo(name = "calendarUri") + public String calendarUri = ""; public static final StringProperty CALENDAR_URI = new StringProperty( TABLE, "calendarUri"); // --- for astrid.com /** Remote id */ + @ColumnInfo(name = "remoteId") + public String remoteId = RemoteModel.NO_UUID; public static final StringProperty UUID = new StringProperty( TABLE, UUID_PROPERTY_NAME, Property.PROP_FLAG_NULLABLE); @@ -183,10 +233,12 @@ public class Task extends RemoteModel { super(); } + @Ignore public Task(TodorooCursor cursor) { super(cursor); } + @Ignore public Task(Task task) { super(task); } diff --git a/app/src/main/java/org/tasks/db/Migrations.java b/app/src/main/java/org/tasks/db/Migrations.java index 616422653..925b7f687 100644 --- a/app/src/main/java/org/tasks/db/Migrations.java +++ b/app/src/main/java/org/tasks/db/Migrations.java @@ -1,19 +1,9 @@ package org.tasks.db; import android.arch.persistence.db.SupportSQLiteDatabase; -import android.arch.persistence.room.RoomDatabase; import android.arch.persistence.room.migration.Migration; import android.support.annotation.NonNull; -import com.todoroo.andlib.data.AbstractModel; -import com.todoroo.andlib.data.Property; -import com.todoroo.andlib.data.SqlConstructorVisitor; -import com.todoroo.andlib.data.Table; -import com.todoroo.astrid.dao.Database; -import com.todoroo.astrid.data.Metadata; -import com.todoroo.astrid.data.StoreObject; -import com.todoroo.astrid.data.Task; - public class Migrations { private static final Migration MIGRATION_35_36 = new Migration(35, 36) { @Override @@ -62,52 +52,8 @@ public class Migrations { NOOP(40, 41), NOOP(41, 42), NOOP(42, 43), - NOOP(43, 44) - }; - - public static RoomDatabase.Callback ON_CREATE = new RoomDatabase.Callback() { - @Override - public void onCreate(@NonNull SupportSQLiteDatabase db) { - StringBuilder sql = new StringBuilder(); - SqlConstructorVisitor sqlVisitor = new SqlConstructorVisitor(); - - // create tables - for(Table table : Database.TABLES) { - sql.append("CREATE TABLE IF NOT EXISTS ").append(table.name).append('('). - append(AbstractModel.ID_PROPERTY).append(" INTEGER PRIMARY KEY AUTOINCREMENT"); - for(Property property : table.getProperties()) { - if(AbstractModel.ID_PROPERTY.name.equals(property.name)) { - continue; - } - sql.append(',').append(property.accept(sqlVisitor, null)); - } - sql.append(')'); - db.execSQL(sql.toString()); - sql.setLength(0); - } - - sql.setLength(0); - sql.append("CREATE INDEX IF NOT EXISTS md_tid ON "). - append(Metadata.TABLE).append('('). - append(Metadata.TASK.name). - append(')'); - db.execSQL(sql.toString()); - sql.setLength(0); - - sql.append("CREATE INDEX IF NOT EXISTS md_tkid ON "). - append(Metadata.TABLE).append('('). - append(Metadata.TASK.name).append(','). - append(Metadata.KEY.name). - append(')'); - db.execSQL(sql.toString()); - sql.setLength(0); - - sql.append("CREATE UNIQUE INDEX IF NOT EXISTS t_rid ON "). - append(Task.TABLE).append('('). - append(Task.UUID.name). - append(')'); - db.execSQL(sql.toString()); - sql.setLength(0); - } + NOOP(43, 44), + NOOP(44, 45), + NOOP(45, 46) }; } diff --git a/app/src/main/java/org/tasks/injection/ApplicationModule.java b/app/src/main/java/org/tasks/injection/ApplicationModule.java index 464b0f283..b4a51a6ad 100644 --- a/app/src/main/java/org/tasks/injection/ApplicationModule.java +++ b/app/src/main/java/org/tasks/injection/ApplicationModule.java @@ -57,7 +57,6 @@ public class ApplicationModule { .databaseBuilder(context, Database.class, Database.NAME) .allowMainThreadQueries() // TODO: remove me .addMigrations(Migrations.MIGRATIONS) - .addCallback(Migrations.ON_CREATE) .build() .setOnDatabaseUpdated(() -> Astrid2TaskProvider.notifyDatabaseModification(context)); }