Fixing the uid Column isn't unique.
uid is required to be unique for the the Changed Events (with the new Data) to be inserted without creating new Rows.
This commit is contained in:
39
run/db_migration_v0.1.3.ts
Normal file
39
run/db_migration_v0.1.3.ts
Normal file
@@ -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();
|
||||
1
sql/events/events_create_unique_index_uid.sql
Normal file
1
sql/events/events_create_unique_index_uid.sql
Normal file
@@ -0,0 +1 @@
|
||||
CREATE UNIQUE INDEX idx_events_uid ON events(uid);
|
||||
6
sql/events/events_delete_duplicate_rows.sql
Normal file
6
sql/events/events_delete_duplicate_rows.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
DELETE FROM events
|
||||
WHERE rowid NOT IN (
|
||||
SELECT MIN(rowid)
|
||||
FROM events
|
||||
GROUP BY uid
|
||||
);
|
||||
4
sql/events/events_find_duplicate_uid.sql
Normal file
4
sql/events/events_find_duplicate_uid.sql
Normal file
@@ -0,0 +1,4 @@
|
||||
SELECT uid, COUNT(*) AS count
|
||||
FROM events
|
||||
GROUP BY uid
|
||||
HAVING COUNT(*) > 1;
|
||||
29
sql/sql_migration_v0.1.3.sql
Normal file
29
sql/sql_migration_v0.1.3.sql
Normal file
@@ -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;
|
||||
@@ -42,9 +42,9 @@ export class Event implements TEventEntity {
|
||||
deleteDate: TEventEntity["deleteDate"];
|
||||
|
||||
static createTable (db: Database): void {
|
||||
const query = db.query(`CREATE TABLE IF NOT EXISTS "events" (
|
||||
"event_uid" INTEGER NOT NULL,
|
||||
"uid" TEXT NOT NULL,
|
||||
const query = db.query(`CREATE TABLE IF NOT EXISTS "events"
|
||||
"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();
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@ console.log(db_filepath);
|
||||
|
||||
export const db = new Database(db_filepath);
|
||||
|
||||
export default db;
|
||||
|
||||
export function init () {
|
||||
Event.createTable(db);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user