fix: mysql migration not working (#1138)
* fix: mysql migration not working * test: add system integration test for mysql migration * fix: format issues * fix: deepsource issues * chore: address bad name for mysql migration test
This commit is contained in:
@@ -1,14 +1,14 @@
|
|||||||
CREATE TABLE `integrationGroupPermissions` (
|
CREATE TABLE `integrationGroupPermissions` (
|
||||||
`integration_id` varchar(64) NOT NULL,
|
`integration_id` varchar(64) NOT NULL,
|
||||||
`group_id` varchar(64) NOT NULL,
|
`group_id` varchar(64) NOT NULL,
|
||||||
`permission` text NOT NULL,
|
`permission` varchar(128) NOT NULL,
|
||||||
CONSTRAINT `integrationGroupPermissions_integration_id_group_id_permission_pk` PRIMARY KEY(`integration_id`,`group_id`,`permission`)
|
CONSTRAINT `integration_group_permission__pk` PRIMARY KEY(`integration_id`,`group_id`,`permission`)
|
||||||
);
|
);
|
||||||
--> statement-breakpoint
|
--> statement-breakpoint
|
||||||
CREATE TABLE `integrationUserPermission` (
|
CREATE TABLE `integrationUserPermission` (
|
||||||
`integration_id` varchar(64) NOT NULL,
|
`integration_id` varchar(64) NOT NULL,
|
||||||
`user_id` varchar(64) NOT NULL,
|
`user_id` varchar(64) NOT NULL,
|
||||||
`permission` text NOT NULL,
|
`permission` varchar(128) NOT NULL,
|
||||||
CONSTRAINT `integrationUserPermission_integration_id_user_id_permission_pk` PRIMARY KEY(`integration_id`,`user_id`,`permission`)
|
CONSTRAINT `integrationUserPermission_integration_id_user_id_permission_pk` PRIMARY KEY(`integration_id`,`user_id`,`permission`)
|
||||||
);
|
);
|
||||||
--> statement-breakpoint
|
--> statement-breakpoint
|
||||||
|
|||||||
@@ -2,5 +2,5 @@ ALTER TABLE `section` RENAME COLUMN `position` TO `y_offset`;--> statement-break
|
|||||||
ALTER TABLE `section` ADD `x_offset` int NOT NULL;--> statement-breakpoint
|
ALTER TABLE `section` ADD `x_offset` int NOT NULL;--> statement-breakpoint
|
||||||
ALTER TABLE `section` ADD `width` int;--> statement-breakpoint
|
ALTER TABLE `section` ADD `width` int;--> statement-breakpoint
|
||||||
ALTER TABLE `section` ADD `height` int;--> statement-breakpoint
|
ALTER TABLE `section` ADD `height` int;--> statement-breakpoint
|
||||||
ALTER TABLE `section` ADD `parent_section_id` text;--> statement-breakpoint
|
ALTER TABLE `section` ADD `parent_section_id` varchar(64);--> statement-breakpoint
|
||||||
ALTER TABLE `section` ADD CONSTRAINT `section_parent_section_id_section_id_fk` FOREIGN KEY (`parent_section_id`) REFERENCES `section`(`id`) ON DELETE cascade ON UPDATE no action;
|
ALTER TABLE `section` ADD CONSTRAINT `section_parent_section_id_section_id_fk` FOREIGN KEY (`parent_section_id`) REFERENCES `section`(`id`) ON DELETE cascade ON UPDATE no action;
|
||||||
@@ -655,7 +655,7 @@
|
|||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"name": "permission",
|
"name": "permission",
|
||||||
"type": "text",
|
"type": "varchar(128)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": true,
|
"notNull": true,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
@@ -683,8 +683,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compositePrimaryKeys": {
|
"compositePrimaryKeys": {
|
||||||
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
|
"integration_group_permission__pk": {
|
||||||
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk",
|
"name": "integration_group_permission__pk",
|
||||||
"columns": ["integration_id", "group_id", "permission"]
|
"columns": ["integration_id", "group_id", "permission"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -819,7 +819,7 @@
|
|||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"name": "permission",
|
"name": "permission",
|
||||||
"type": "text",
|
"type": "varchar(128)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": true,
|
"notNull": true,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
|
|||||||
@@ -655,7 +655,7 @@
|
|||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"name": "permission",
|
"name": "permission",
|
||||||
"type": "text",
|
"type": "varchar(128)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": true,
|
"notNull": true,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
@@ -683,8 +683,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compositePrimaryKeys": {
|
"compositePrimaryKeys": {
|
||||||
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
|
"integration_group_permission__pk": {
|
||||||
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk",
|
"name": "integration_group_permission__pk",
|
||||||
"columns": ["integration_id", "group_id", "permission"]
|
"columns": ["integration_id", "group_id", "permission"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -819,7 +819,7 @@
|
|||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"name": "permission",
|
"name": "permission",
|
||||||
"type": "text",
|
"type": "varchar(128)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": true,
|
"notNull": true,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
|
|||||||
@@ -655,7 +655,7 @@
|
|||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"name": "permission",
|
"name": "permission",
|
||||||
"type": "text",
|
"type": "varchar(128)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": true,
|
"notNull": true,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
@@ -683,8 +683,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compositePrimaryKeys": {
|
"compositePrimaryKeys": {
|
||||||
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
|
"integration_group_permission__pk": {
|
||||||
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk",
|
"name": "integration_group_permission__pk",
|
||||||
"columns": ["integration_id", "group_id", "permission"]
|
"columns": ["integration_id", "group_id", "permission"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -819,7 +819,7 @@
|
|||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"name": "permission",
|
"name": "permission",
|
||||||
"type": "text",
|
"type": "varchar(128)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": true,
|
"notNull": true,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
@@ -1109,7 +1109,7 @@
|
|||||||
},
|
},
|
||||||
"parent_section_id": {
|
"parent_section_id": {
|
||||||
"name": "parent_section_id",
|
"name": "parent_section_id",
|
||||||
"type": "text",
|
"type": "varchar(64)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": false,
|
"notNull": false,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
|
|||||||
@@ -655,7 +655,7 @@
|
|||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"name": "permission",
|
"name": "permission",
|
||||||
"type": "text",
|
"type": "varchar(128)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": true,
|
"notNull": true,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
@@ -683,8 +683,8 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compositePrimaryKeys": {
|
"compositePrimaryKeys": {
|
||||||
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
|
"integration_group_permission__pk": {
|
||||||
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk",
|
"name": "integration_group_permission__pk",
|
||||||
"columns": ["integration_id", "group_id", "permission"]
|
"columns": ["integration_id", "group_id", "permission"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -819,7 +819,7 @@
|
|||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"name": "permission",
|
"name": "permission",
|
||||||
"type": "text",
|
"type": "varchar(128)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": true,
|
"notNull": true,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
@@ -1109,7 +1109,7 @@
|
|||||||
},
|
},
|
||||||
"parent_section_id": {
|
"parent_section_id": {
|
||||||
"name": "parent_section_id",
|
"name": "parent_section_id",
|
||||||
"type": "text",
|
"type": "varchar(64)",
|
||||||
"primaryKey": false,
|
"primaryKey": false,
|
||||||
"notNull": false,
|
"notNull": false,
|
||||||
"autoincrement": false
|
"autoincrement": false
|
||||||
|
|||||||
@@ -659,9 +659,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compositePrimaryKeys": {
|
"compositePrimaryKeys": {
|
||||||
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
|
"integration_group_permission__pk": {
|
||||||
"columns": ["group_id", "integration_id", "permission"],
|
"columns": ["group_id", "integration_id", "permission"],
|
||||||
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk"
|
"name": "integration_group_permission__pk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"uniqueConstraints": {}
|
"uniqueConstraints": {}
|
||||||
|
|||||||
@@ -659,9 +659,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compositePrimaryKeys": {
|
"compositePrimaryKeys": {
|
||||||
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
|
"integration_group_permission__pk": {
|
||||||
"columns": ["group_id", "integration_id", "permission"],
|
"columns": ["group_id", "integration_id", "permission"],
|
||||||
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk"
|
"name": "integration_group_permission__pk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"uniqueConstraints": {}
|
"uniqueConstraints": {}
|
||||||
|
|||||||
@@ -659,9 +659,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compositePrimaryKeys": {
|
"compositePrimaryKeys": {
|
||||||
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
|
"integration_group_permission__pk": {
|
||||||
"columns": ["group_id", "integration_id", "permission"],
|
"columns": ["group_id", "integration_id", "permission"],
|
||||||
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk"
|
"name": "integration_group_permission__pk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"uniqueConstraints": {}
|
"uniqueConstraints": {}
|
||||||
|
|||||||
@@ -659,9 +659,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"compositePrimaryKeys": {
|
"compositePrimaryKeys": {
|
||||||
"integrationGroupPermissions_integration_id_group_id_permission_pk": {
|
"integration_group_permission__pk": {
|
||||||
"columns": ["integration_id", "group_id", "permission"],
|
"columns": ["integration_id", "group_id", "permission"],
|
||||||
"name": "integrationGroupPermissions_integration_id_group_id_permission_pk"
|
"name": "integration_group_permission__pk"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"uniqueConstraints": {}
|
"uniqueConstraints": {}
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
"@homarr/definitions": "workspace:^0.1.0",
|
"@homarr/definitions": "workspace:^0.1.0",
|
||||||
"@homarr/log": "workspace:^0.1.0",
|
"@homarr/log": "workspace:^0.1.0",
|
||||||
"@paralleldrive/cuid2": "^2.2.2",
|
"@paralleldrive/cuid2": "^2.2.2",
|
||||||
|
"@testcontainers/mysql": "^10.13.1",
|
||||||
"better-sqlite3": "^11.3.0",
|
"better-sqlite3": "^11.3.0",
|
||||||
"dotenv": "^16.4.5",
|
"dotenv": "^16.4.5",
|
||||||
"drizzle-kit": "^0.24.2",
|
"drizzle-kit": "^0.24.2",
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ export const integrationUserPermissions = mysqlTable(
|
|||||||
userId: varchar("user_id", { length: 64 })
|
userId: varchar("user_id", { length: 64 })
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => users.id, { onDelete: "cascade" }),
|
.references(() => users.id, { onDelete: "cascade" }),
|
||||||
permission: text("permission").$type<IntegrationPermission>().notNull(),
|
permission: varchar("permission", { length: 128 }).$type<IntegrationPermission>().notNull(),
|
||||||
},
|
},
|
||||||
(table) => ({
|
(table) => ({
|
||||||
compoundKey: primaryKey({
|
compoundKey: primaryKey({
|
||||||
@@ -189,11 +189,12 @@ export const integrationGroupPermissions = mysqlTable(
|
|||||||
groupId: varchar("group_id", { length: 64 })
|
groupId: varchar("group_id", { length: 64 })
|
||||||
.notNull()
|
.notNull()
|
||||||
.references(() => groups.id, { onDelete: "cascade" }),
|
.references(() => groups.id, { onDelete: "cascade" }),
|
||||||
permission: text("permission").$type<IntegrationPermission>().notNull(),
|
permission: varchar("permission", { length: 128 }).$type<IntegrationPermission>().notNull(),
|
||||||
},
|
},
|
||||||
(table) => ({
|
(table) => ({
|
||||||
compoundKey: primaryKey({
|
compoundKey: primaryKey({
|
||||||
columns: [table.integrationId, table.groupId, table.permission],
|
columns: [table.integrationId, table.groupId, table.permission],
|
||||||
|
name: "integration_group_permission__pk",
|
||||||
}),
|
}),
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
@@ -276,7 +277,7 @@ export const sections = mysqlTable("section", {
|
|||||||
width: int("width"),
|
width: int("width"),
|
||||||
height: int("height"),
|
height: int("height"),
|
||||||
name: text("name"),
|
name: text("name"),
|
||||||
parentSectionId: text("parent_section_id").references((): AnyMySqlColumn => sections.id, {
|
parentSectionId: varchar("parent_section_id", { length: 64 }).references((): AnyMySqlColumn => sections.id, {
|
||||||
onDelete: "cascade",
|
onDelete: "cascade",
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|||||||
38
packages/db/test/mysql-migration.spec.ts
Normal file
38
packages/db/test/mysql-migration.spec.ts
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import path from "path";
|
||||||
|
import { MySqlContainer } from "@testcontainers/mysql";
|
||||||
|
import { drizzle } from "drizzle-orm/mysql2";
|
||||||
|
import { migrate } from "drizzle-orm/mysql2/migrator";
|
||||||
|
import mysql from "mysql2";
|
||||||
|
import { describe, test } from "vitest";
|
||||||
|
|
||||||
|
import * as mysqlSchema from "../schema/mysql";
|
||||||
|
|
||||||
|
describe("Mysql Migration", () => {
|
||||||
|
test("should add all tables and keys specified in migration files", async () => {
|
||||||
|
const mysqlContainer = await new MySqlContainer().start();
|
||||||
|
|
||||||
|
const connection = mysql.createConnection({
|
||||||
|
host: mysqlContainer.getHost(),
|
||||||
|
database: mysqlContainer.getDatabase(),
|
||||||
|
port: mysqlContainer.getPort(),
|
||||||
|
user: mysqlContainer.getUsername(),
|
||||||
|
password: mysqlContainer.getUserPassword(),
|
||||||
|
});
|
||||||
|
|
||||||
|
const database = drizzle(connection, {
|
||||||
|
schema: mysqlSchema,
|
||||||
|
mode: "default",
|
||||||
|
});
|
||||||
|
|
||||||
|
// Run migrations and check if it works
|
||||||
|
await migrate(database, {
|
||||||
|
migrationsFolder: path.join(__dirname, "..", "migrations", "mysql"),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Check if users table exists
|
||||||
|
await database.query.users.findMany();
|
||||||
|
|
||||||
|
connection.end();
|
||||||
|
await mysqlContainer.stop();
|
||||||
|
}, 40_000);
|
||||||
|
});
|
||||||
12
pnpm-lock.yaml
generated
12
pnpm-lock.yaml
generated
@@ -841,6 +841,9 @@ importers:
|
|||||||
'@paralleldrive/cuid2':
|
'@paralleldrive/cuid2':
|
||||||
specifier: ^2.2.2
|
specifier: ^2.2.2
|
||||||
version: 2.2.2
|
version: 2.2.2
|
||||||
|
'@testcontainers/mysql':
|
||||||
|
specifier: ^10.13.1
|
||||||
|
version: 10.13.1
|
||||||
better-sqlite3:
|
better-sqlite3:
|
||||||
specifier: ^11.3.0
|
specifier: ^11.3.0
|
||||||
version: 11.3.0
|
version: 11.3.0
|
||||||
@@ -2986,6 +2989,9 @@ packages:
|
|||||||
'@tanstack/virtual-core@3.8.3':
|
'@tanstack/virtual-core@3.8.3':
|
||||||
resolution: {integrity: sha512-vd2A2TnM5lbnWZnHi9B+L2gPtkSeOtJOAw358JqokIH1+v2J7vUAzFVPwB/wrye12RFOurffXu33plm4uQ+JBQ==}
|
resolution: {integrity: sha512-vd2A2TnM5lbnWZnHi9B+L2gPtkSeOtJOAw358JqokIH1+v2J7vUAzFVPwB/wrye12RFOurffXu33plm4uQ+JBQ==}
|
||||||
|
|
||||||
|
'@testcontainers/mysql@10.13.1':
|
||||||
|
resolution: {integrity: sha512-G4I59inEQ37yxeMgXyNgLbGf+aUNGoQDdgrfNWpWC/s0z5fiFSROEngcp8ueGA4UgH9Jte8iXo0WrMgmBfwJEQ==}
|
||||||
|
|
||||||
'@tiptap/core@2.7.1':
|
'@tiptap/core@2.7.1':
|
||||||
resolution: {integrity: sha512-/sOJ3J2OWxQrho6MWgE9xaRBln5MC4BEuevTYIGia4zrc523lX9s+h/lUeLtCPhI0+J6z9Vz+v3G/uoEqWCL+A==}
|
resolution: {integrity: sha512-/sOJ3J2OWxQrho6MWgE9xaRBln5MC4BEuevTYIGia4zrc523lX9s+h/lUeLtCPhI0+J6z9Vz+v3G/uoEqWCL+A==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -9152,6 +9158,12 @@ snapshots:
|
|||||||
|
|
||||||
'@tanstack/virtual-core@3.8.3': {}
|
'@tanstack/virtual-core@3.8.3': {}
|
||||||
|
|
||||||
|
'@testcontainers/mysql@10.13.1':
|
||||||
|
dependencies:
|
||||||
|
testcontainers: 10.13.1
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
|
||||||
'@tiptap/core@2.7.1(@tiptap/pm@2.7.1)':
|
'@tiptap/core@2.7.1(@tiptap/pm@2.7.1)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@tiptap/pm': 2.7.1
|
'@tiptap/pm': 2.7.1
|
||||||
|
|||||||
Reference in New Issue
Block a user