Added Timetable.kt which was a PAIN because SQLite does not support ADD FOREIGN KEY on ALTER TABLE, and as such, the required workaround is to create a temporary table with the new constraint added, insert the values from the old table into the new table, drop the old table, and finally rename the new table to the name of the old table so that the app thinks that nothing ever happened... UGH

This commit is contained in:
denizk0461
2023-07-03 15:47:55 +02:00
parent 97b713a578
commit 694d962896
9 changed files with 480 additions and 11 deletions
@@ -0,0 +1,387 @@
{
"formatVersion": 1,
"database": {
"version": 22,
"identityHash": "d55bef3b8778cd6346bf65455993008d",
"entities": [
{
"tableName": "timetables",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `name` TEXT NOT NULL)",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "name",
"columnName": "name",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"id"
]
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "studip_events",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`eventId` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `timetableId` INTEGER NOT NULL, `title` TEXT NOT NULL, `lecturer` TEXT NOT NULL, `room` TEXT NOT NULL, `day` INTEGER NOT NULL, `timeslotStart` TEXT NOT NULL, `timeslotEnd` TEXT NOT NULL, `timeslotId` INTEGER NOT NULL, `colour` INTEGER NOT NULL, FOREIGN KEY(`timetableId`) REFERENCES `timetables`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "eventId",
"columnName": "eventId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "timetableId",
"columnName": "timetableId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "lecturer",
"columnName": "lecturer",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "room",
"columnName": "room",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "day",
"columnName": "day",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "timeslotStart",
"columnName": "timeslotStart",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "timeslotEnd",
"columnName": "timeslotEnd",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "timeslotId",
"columnName": "timeslotId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "colour",
"columnName": "colour",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"eventId"
]
},
"indices": [],
"foreignKeys": [
{
"table": "timetables",
"onDelete": "CASCADE",
"onUpdate": "NO ACTION",
"columns": [
"timetableId"
],
"referencedColumns": [
"id"
]
}
]
},
{
"tableName": "offer_date",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `date` TEXT NOT NULL, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "date",
"columnName": "date",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"id"
]
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "offer_canteen",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `canteen` TEXT NOT NULL, `openingHours` TEXT NOT NULL, `news` TEXT NOT NULL, PRIMARY KEY(`id`))",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "canteen",
"columnName": "canteen",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "openingHours",
"columnName": "openingHours",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "news",
"columnName": "news",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"id"
]
},
"indices": [],
"foreignKeys": []
},
{
"tableName": "offer_category",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER NOT NULL, `dateId` INTEGER NOT NULL, `canteenId` INTEGER NOT NULL, `category` TEXT NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY(`dateId`) REFERENCES `offer_date`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`canteenId`) REFERENCES `offer_canteen`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "id",
"columnName": "id",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "dateId",
"columnName": "dateId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "canteenId",
"columnName": "canteenId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "category",
"columnName": "category",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"id"
]
},
"indices": [],
"foreignKeys": [
{
"table": "offer_date",
"onDelete": "CASCADE",
"onUpdate": "NO ACTION",
"columns": [
"dateId"
],
"referencedColumns": [
"id"
]
},
{
"table": "offer_canteen",
"onDelete": "CASCADE",
"onUpdate": "NO ACTION",
"columns": [
"canteenId"
],
"referencedColumns": [
"id"
]
}
]
},
{
"tableName": "offer_item",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` INTEGER NOT NULL, `categoryId` INTEGER NOT NULL, `title` TEXT NOT NULL, `price` TEXT NOT NULL, `dietary_preferences` TEXT NOT NULL, `allergens` TEXT NOT NULL, PRIMARY KEY(`itemId`), FOREIGN KEY(`categoryId`) REFERENCES `offer_category`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "itemId",
"columnName": "itemId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "categoryId",
"columnName": "categoryId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "price",
"columnName": "price",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "dietaryPreferences",
"columnName": "dietary_preferences",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "allergens",
"columnName": "allergens",
"affinity": "TEXT",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": false,
"columnNames": [
"itemId"
]
},
"indices": [],
"foreignKeys": [
{
"table": "offer_category",
"onDelete": "CASCADE",
"onUpdate": "NO ACTION",
"columns": [
"categoryId"
],
"referencedColumns": [
"id"
]
}
]
},
{
"tableName": "event_tasks",
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`taskId` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `eventId` INTEGER NOT NULL, `dueDate` INTEGER NOT NULL, `notifyDate` INTEGER NOT NULL, `title` TEXT NOT NULL, `notes` TEXT NOT NULL, `room` TEXT NOT NULL, `isFinished` INTEGER NOT NULL, FOREIGN KEY(`eventId`) REFERENCES `studip_events`(`eventId`) ON UPDATE NO ACTION ON DELETE CASCADE )",
"fields": [
{
"fieldPath": "taskId",
"columnName": "taskId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "eventId",
"columnName": "eventId",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "dueDate",
"columnName": "dueDate",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "notifyDate",
"columnName": "notifyDate",
"affinity": "INTEGER",
"notNull": true
},
{
"fieldPath": "title",
"columnName": "title",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "notes",
"columnName": "notes",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "room",
"columnName": "room",
"affinity": "TEXT",
"notNull": true
},
{
"fieldPath": "isFinished",
"columnName": "isFinished",
"affinity": "INTEGER",
"notNull": true
}
],
"primaryKey": {
"autoGenerate": true,
"columnNames": [
"taskId"
]
},
"indices": [],
"foreignKeys": [
{
"table": "studip_events",
"onDelete": "CASCADE",
"onUpdate": "NO ACTION",
"columns": [
"eventId"
],
"referencedColumns": [
"eventId"
]
}
]
}
],
"views": [],
"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, 'd55bef3b8778cd6346bf65455993008d')"
]
}
}