From 3cf7272b5b64e069a61a8ea47c90f6ae5d88b367 Mon Sep 17 00:00:00 2001 From: Dustin Date: Fri, 13 Mar 2020 17:03:42 -0500 Subject: [PATCH 1/2] fixing json default value typescript parsing errors --- src/drivers/MssqlDriver.ts | 15 +++++++++------ src/drivers/MysqlDriver.ts | 3 ++- src/drivers/OracleDriver.ts | 6 ++---- src/drivers/PostgresDriver.ts | 6 ++---- src/drivers/SqliteDriver.ts | 6 ++---- 5 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index 14709e1..a610581 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -89,7 +89,10 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG entities.forEach(ent => { response .filter(filterVal => { - return filterVal.TABLE_NAME === ent.tscName && filterVal.TABLE_SCHEMA === ent.schema; + return ( + filterVal.TABLE_NAME === ent.tscName && + filterVal.TABLE_SCHEMA === ent.schema + ); }) .forEach(resp => { const tscName = resp.COLUMN_NAME; @@ -298,7 +301,9 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG entities.forEach(ent => { const entityIndices = response.filter( - filterVal => filterVal.TableName === ent.tscName && filterVal.TableSchema === ent.schema + filterVal => + filterVal.TableName === ent.tscName && + filterVal.TableSchema === ent.schema ); const indexNames = new Set(entityIndices.map(v => v.IndexName)); indexNames.forEach(indexName => { @@ -514,9 +519,7 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG if (defaultValue.startsWith("(") && defaultValue.endsWith(")")) { defaultValue = defaultValue.slice(1, -1); } - if (defaultValue.startsWith(`'`)) { - return `() => "${defaultValue}"`; - } - return `() => "${defaultValue}"`; + + return `() => \`${defaultValue}\``; } } diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 59a5e33..3dfaa28 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -529,6 +529,7 @@ export default class MysqlDriver extends AbstractDriver { if (dataType === "set") { return `() => ['${defaultValue.split(",").join("','")}']`; } - return `() => "'${defaultValue}'"`; + + return `() => \`${defaultValue}\``; } } diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 9518d54..2ac5791 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -416,9 +416,7 @@ export default class OracleDriver extends AbstractDriver { if (defaultVal.endsWith(" ")) { defaultVal = defaultVal.slice(0, -1); } - if (defaultVal.startsWith(`'`)) { - return `() => "${defaultVal}"`; - } - return `() => "${defaultVal}"`; + + return `() => \`${defaultVal}\``; } } diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index 174becb..a032f58 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -655,9 +655,7 @@ export default class PostgresDriver extends AbstractDriver { return undefined; } defaultValue = defaultValue.replace(/'::[\w ]*/, "'"); - if (defaultValue.startsWith(`'`)) { - return `() => "${defaultValue}"`; - } - return `() => "${defaultValue}"`; + + return `() => \`${defaultValue}\``; } } diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index 2eee238..e29140c 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -436,9 +436,7 @@ export default class SqliteDriver extends AbstractDriver { if (!defVal) { return undefined; } - if (defVal.startsWith(`'`)) { - return `() => "${defVal}"`; - } - return `() => "${defVal}"`; + + return `() => \`${defVal}\``; } } From c6538f8c67a81f79139ff0e46ff5b11479f532f0 Mon Sep 17 00:00:00 2001 From: Kononnable Date: Sat, 28 Mar 2020 09:51:47 +0100 Subject: [PATCH 2/2] add test; changes are necessary only in postgres driver it's the only one where typeorm support default value for json fields --- src/drivers/MssqlDriver.ts | 2 +- src/drivers/MysqlDriver.ts | 2 +- src/drivers/OracleDriver.ts | 2 +- src/drivers/PostgresDriver.ts | 11 +++++++--- src/drivers/SqliteDriver.ts | 2 +- .../github-issues/248/entity/Post.ts | 22 +++++++++++++++++++ test/integration/runTestsFromPath.test.ts | 4 ++++ 7 files changed, 38 insertions(+), 7 deletions(-) create mode 100644 test/integration/github-issues/248/entity/Post.ts diff --git a/src/drivers/MssqlDriver.ts b/src/drivers/MssqlDriver.ts index a610581..bc5bde6 100644 --- a/src/drivers/MssqlDriver.ts +++ b/src/drivers/MssqlDriver.ts @@ -520,6 +520,6 @@ WHERE TABLE_TYPE='BASE TABLE' and TABLE_SCHEMA in (${schema}) AND TABLE_CATALOG defaultValue = defaultValue.slice(1, -1); } - return `() => \`${defaultValue}\``; + return `() => "${defaultValue}"`; } } diff --git a/src/drivers/MysqlDriver.ts b/src/drivers/MysqlDriver.ts index 3dfaa28..32ac292 100644 --- a/src/drivers/MysqlDriver.ts +++ b/src/drivers/MysqlDriver.ts @@ -530,6 +530,6 @@ export default class MysqlDriver extends AbstractDriver { return `() => ['${defaultValue.split(",").join("','")}']`; } - return `() => \`${defaultValue}\``; + return `() => "'${defaultValue}'"`; } } diff --git a/src/drivers/OracleDriver.ts b/src/drivers/OracleDriver.ts index 2ac5791..0c75678 100644 --- a/src/drivers/OracleDriver.ts +++ b/src/drivers/OracleDriver.ts @@ -417,6 +417,6 @@ export default class OracleDriver extends AbstractDriver { defaultVal = defaultVal.slice(0, -1); } - return `() => \`${defaultVal}\``; + return `() => "${defaultVal}"`; } } diff --git a/src/drivers/PostgresDriver.ts b/src/drivers/PostgresDriver.ts index a032f58..ca26e93 100644 --- a/src/drivers/PostgresDriver.ts +++ b/src/drivers/PostgresDriver.ts @@ -103,7 +103,8 @@ export default class PostgresDriver extends AbstractDriver { const defaultValue = generated ? undefined : PostgresDriver.ReturnDefaultValueFunction( - resp.column_default + resp.column_default, + resp.data_type ); const columnTypes = this.MatchColumnTypes( @@ -648,7 +649,8 @@ export default class PostgresDriver extends AbstractDriver { } private static ReturnDefaultValueFunction( - defVal: string | null + defVal: string | null, + dataType: string ): string | undefined { let defaultValue = defVal; if (!defaultValue) { @@ -656,6 +658,9 @@ export default class PostgresDriver extends AbstractDriver { } defaultValue = defaultValue.replace(/'::[\w ]*/, "'"); - return `() => \`${defaultValue}\``; + if (["json", "jsonb"].some(x => x === dataType)) { + return `${defaultValue.slice(1, defaultValue.length - 1)}`; + } + return `() => "${defaultValue}"`; } } diff --git a/src/drivers/SqliteDriver.ts b/src/drivers/SqliteDriver.ts index e29140c..ab0d2f5 100644 --- a/src/drivers/SqliteDriver.ts +++ b/src/drivers/SqliteDriver.ts @@ -437,6 +437,6 @@ export default class SqliteDriver extends AbstractDriver { return undefined; } - return `() => \`${defVal}\``; + return `() => "${defVal}"`; } } diff --git a/test/integration/github-issues/248/entity/Post.ts b/test/integration/github-issues/248/entity/Post.ts new file mode 100644 index 0000000..18675fb --- /dev/null +++ b/test/integration/github-issues/248/entity/Post.ts @@ -0,0 +1,22 @@ +import { PrimaryGeneratedColumn, Column, Entity, OneToOne, JoinColumn, Index } from "typeorm"; + +@Entity("Post") +export class Post { + + @PrimaryGeneratedColumn() + id: number; + + @Column("json", { + default: { type: null, values: true } + }) + data: object; + + @Column("jsonb", { + default: { type: null, values: true } + }) + data2: object; + + @Column() + text: string; + +} diff --git a/test/integration/runTestsFromPath.test.ts b/test/integration/runTestsFromPath.test.ts index 9b52340..9ee1a62 100644 --- a/test/integration/runTestsFromPath.test.ts +++ b/test/integration/runTestsFromPath.test.ts @@ -132,6 +132,10 @@ function runTestForMultipleDrivers( return dbDrivers.filter(dbDriver => ["mysql", "mariadb"].includes(dbDriver) ); + case "248": + return dbDrivers.filter(dbDriver => + dbDriver === "postgres" + ); default: return dbDrivers; }