From 7679ef2b77934e07ef2f85b0bbf95e84c0e9fc9f Mon Sep 17 00:00:00 2001 From: Kononnable Date: Thu, 19 Dec 2019 17:43:03 +0100 Subject: [PATCH] support for mysql set type (#91) --- src/drivers/MysqlDriver.ts | 23 +++++++++++++++++-- .../entityTypes/mariadb/entity/Post.ts | 6 +++++ .../entityTypes/mysql/entity/Post.ts | 6 +++++ 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 4e40085..b7185fc 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -75,7 +75,8 @@ export default class MysqlDriver extends AbstractDriver { }; const generated = resp.IsIdentity === 1 ? true : undefined; const defaultValue = MysqlDriver.ReturnDefaultValueFunction( - resp.COLUMN_DEFAULT + resp.COLUMN_DEFAULT, + resp.DATA_TYPE ); let columnType = resp.DATA_TYPE; if (resp.IS_NULLABLE === "YES") options.nullable = true; @@ -178,6 +179,20 @@ export default class MysqlDriver extends AbstractDriver { .replace(/'/gi, "") .split(","); break; + case "set": + tscType = `(${resp.COLUMN_TYPE.substring( + 4, + resp.COLUMN_TYPE.length - 1 + ) + .replace(/'/gi, '"') + .replace(/","/gi, '" | "')})[]`; + options.enum = resp.COLUMN_TYPE.substring( + 4, + resp.COLUMN_TYPE.length - 1 + ) + .replace(/'/gi, "") + .split(","); + break; case "json": tscType = "object"; break; @@ -488,7 +503,8 @@ export default class MysqlDriver extends AbstractDriver { } private static ReturnDefaultValueFunction( - defVal: string | undefined + defVal: string | undefined, + dataType: string ): string | undefined { let defaultValue = defVal; if (!defaultValue || defaultValue === "NULL") { @@ -503,6 +519,9 @@ export default class MysqlDriver extends AbstractDriver { ) { return `() => "${defaultValue}"`; } + if (dataType === "set") { + return `() => ['${defaultValue.split(",").join("','")}']`; + } return `() => "'${defaultValue}'"`; } } diff --git a/test/integration/entityTypes/mariadb/entity/Post.ts b/test/integration/entityTypes/mariadb/entity/Post.ts index 972bd30..271bad0 100644 --- a/test/integration/entityTypes/mariadb/entity/Post.ts +++ b/test/integration/entityTypes/mariadb/entity/Post.ts @@ -116,4 +116,10 @@ export class Post { @Column("geometrycollection") geometrycollection: string; + + @Column("set", { + enum: ["A", "B", "C"], + default: ["A", "B"] + }) + roles: ("A" | "B" | "C")[] } diff --git a/test/integration/entityTypes/mysql/entity/Post.ts b/test/integration/entityTypes/mysql/entity/Post.ts index f76777f..d529f2e 100644 --- a/test/integration/entityTypes/mysql/entity/Post.ts +++ b/test/integration/entityTypes/mysql/entity/Post.ts @@ -118,4 +118,10 @@ export class Post { @Column("geometrycollection") geometrycollection: string; + + @Column("set", { + enum: ["A", "B", "C"], + default: ["A", "B"] + }) + roles: ("A" | "B" | "C")[] }