diff --git a/run/db_migration_v0.1.3.ts b/run/db_migration_v0.1.3.ts new file mode 100644 index 0000000..60aea85 --- /dev/null +++ b/run/db_migration_v0.1.3.ts @@ -0,0 +1,39 @@ +import db from "../src/sql"; + +const run_migration = db.transaction(() => { + // SQL 1: Insert a new user + db.run(`DELETE FROM events + WHERE rowid NOT IN ( + SELECT MIN(rowid) + FROM events + GROUP BY uid + );`); + + // SQL 2: Update product stock + db.run(`CREATE TABLE events_new ( + "event_uid" INTEGER PRIMARY KEY, + "uid" TEXT NOT NULL UNIQUE, + "title" TEXT NOT NULL, + "date_at" DATETIME NOT NULL, + "time_start" TEXT NOT NULL, + "time_end" TEXT NOT NULL, + "posted_by" TEXT NOT NULL, + "location" TEXT NOT NULL, + "event_type" TEXT NOT NULL, + "link" TEXT NOT NULL, + "description" TEXT NOT NULL, + "timezone" TEXT NOT NULL, + "notification" TEXT NOT NULL, + "deleteDate" INTEGER NULL + );`); + + // SQL 3: Log the transaction + db.run(`INSERT INTO events_new (event_uid, uid, title, date_at, time_start, time_end, posted_by, location, event_type, link, description, timezone, notification, deleteDate) + SELECT event_uid, uid, title, date_at, time_start, time_end, posted_by, location, event_type, link, description, timezone, notification, deleteDate FROM events; + `); + db.run(`DROP TABLE events; + ALTER TABLE events_new RENAME TO events;`); +}); + +// Run the transaction +run_migration(); \ No newline at end of file diff --git a/sql/events/events_create_unique_index_uid.sql b/sql/events/events_create_unique_index_uid.sql new file mode 100644 index 0000000..c928e12 --- /dev/null +++ b/sql/events/events_create_unique_index_uid.sql @@ -0,0 +1 @@ +CREATE UNIQUE INDEX idx_events_uid ON events(uid); \ No newline at end of file diff --git a/sql/events/events_delete_duplicate_rows.sql b/sql/events/events_delete_duplicate_rows.sql new file mode 100644 index 0000000..b1f1234 --- /dev/null +++ b/sql/events/events_delete_duplicate_rows.sql @@ -0,0 +1,6 @@ +DELETE FROM events +WHERE rowid NOT IN ( + SELECT MIN(rowid) + FROM events + GROUP BY uid +); \ No newline at end of file diff --git a/sql/events/events_find_duplicate_uid.sql b/sql/events/events_find_duplicate_uid.sql new file mode 100644 index 0000000..331fd14 --- /dev/null +++ b/sql/events/events_find_duplicate_uid.sql @@ -0,0 +1,4 @@ +SELECT uid, COUNT(*) AS count +FROM events +GROUP BY uid +HAVING COUNT(*) > 1; \ No newline at end of file diff --git a/sql/sql_migration_v0.1.3.sql b/sql/sql_migration_v0.1.3.sql new file mode 100644 index 0000000..ae309e4 --- /dev/null +++ b/sql/sql_migration_v0.1.3.sql @@ -0,0 +1,29 @@ +DELETE FROM events +WHERE rowid NOT IN ( + SELECT MIN(rowid) + FROM events + GROUP BY uid +); + +CREATE TABLE events_new ( + "event_uid" INTEGER PRIMARY KEY, + "uid" TEXT NOT NULL UNIQUE, + "title" TEXT NOT NULL, + "date_at" DATETIME NOT NULL, + "time_start" TEXT NOT NULL, + "time_end" TEXT NOT NULL, + "posted_by" TEXT NOT NULL, + "location" TEXT NOT NULL, + "event_type" TEXT NOT NULL, + "link" TEXT NOT NULL, + "description" TEXT NOT NULL, + "timezone" TEXT NOT NULL, + "notification" TEXT NOT NULL, + "deleteDate" INTEGER NULL +); + +INSERT INTO events_new (event_uid, uid, title, date_at, time_start, time_end, posted_by, location, event_type, link, description, timezone, notification, deleteDate) +SELECT event_uid, uid, title, date_at, time_start, time_end, posted_by, location, event_type, link, description, timezone, notification, deleteDate FROM events; + +DROP TABLE events; +ALTER TABLE events_new RENAME TO events; \ No newline at end of file diff --git a/src/component/event/events.ts b/src/component/event/events.ts index 59ea846..b4ef02b 100644 --- a/src/component/event/events.ts +++ b/src/component/event/events.ts @@ -43,8 +43,8 @@ export class Event implements TEventEntity { static createTable (db: Database): void { const query = db.query(`CREATE TABLE IF NOT EXISTS "events" ( - "event_uid" INTEGER NOT NULL, - "uid" TEXT NOT NULL, + "event_uid" INTEGER PRIMARY KEY, + "uid" TEXT NOT NULL UNIQUE, "title" TEXT NOT NULL, "date_at" DATETIME NOT NULL, "time_start" TEXT NOT NULL, @@ -56,10 +56,8 @@ export class Event implements TEventEntity { "description" TEXT NOT NULL, "timezone" TEXT NOT NULL, "notification" TEXT NOT NULL, - "deleteDate" INTEGER NULL, - PRIMARY KEY ("event_uid") - ); - CREATE UNIQUE INDEX "sqlite_autoindex_events_1" ON "events" ("uid");`); + "deleteDate" INTEGER NULL + );`); query.run(); } diff --git a/src/sql.ts b/src/sql.ts index 6d55878..9429e98 100644 --- a/src/sql.ts +++ b/src/sql.ts @@ -8,6 +8,8 @@ console.log(db_filepath); export const db = new Database(db_filepath); +export default db; + export function init () { Event.createTable(db); }