From 27037f95c7dae030d656d7a7ca1f30832b347211 Mon Sep 17 00:00:00 2001 From: Aiden Foxx Date: Mon, 26 Jul 2021 18:37:45 +0200 Subject: [PATCH] Fix quotes with schema default values (#6968) * Added quote trimming to schema default values * Add return type to stripQuotes function Co-authored-by: rijkvanzanten --- packages/schema/src/dialects/oracledb.ts | 3 ++- packages/schema/src/dialects/sqlite.ts | 3 ++- packages/schema/src/utils/strip-quotes.ts | 16 ++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 packages/schema/src/utils/strip-quotes.ts diff --git a/packages/schema/src/dialects/oracledb.ts b/packages/schema/src/dialects/oracledb.ts index f2beab17b9..02c2d526e0 100644 --- a/packages/schema/src/dialects/oracledb.ts +++ b/packages/schema/src/dialects/oracledb.ts @@ -2,6 +2,7 @@ import KnexOracle from 'knex-schema-inspector/dist/dialects/oracledb'; import { Column } from 'knex-schema-inspector/dist/types/column'; import { SchemaOverview } from '../types/overview'; import { SchemaInspector } from '../types/schema'; +import { stripQuotes } from '../utils/strip-quotes'; export default class Oracle extends KnexOracle implements SchemaInspector { private static _mapColumnAutoIncrement(column: Column): Column { @@ -87,7 +88,7 @@ export default class Oracle extends KnexOracle implements SchemaInspector { overview[column.table_name].columns[column.column_name] = { ...column, is_nullable: column.is_nullable === 'Y', - default_value: hasAutoIncrement ? 'AUTO_INCREMENT' : column.default_value, + default_value: hasAutoIncrement ? 'AUTO_INCREMENT' : stripQuotes(column.default_value), }; } diff --git a/packages/schema/src/dialects/sqlite.ts b/packages/schema/src/dialects/sqlite.ts index d83a1bac6b..5af794489d 100644 --- a/packages/schema/src/dialects/sqlite.ts +++ b/packages/schema/src/dialects/sqlite.ts @@ -3,6 +3,7 @@ import extractMaxLength from 'knex-schema-inspector/dist/utils/extract-max-lengt import extractType from 'knex-schema-inspector/dist/utils/extract-type'; import { SchemaOverview } from '../types/overview'; import { SchemaInspector } from '../types/schema'; +import { stripQuotes } from '../utils/strip-quotes'; type RawColumn = { cid: number; @@ -39,7 +40,7 @@ export default class SQLite extends KnexSQLite implements SchemaInspector { default_value: column.pk === 1 && tablesWithAutoIncrementPrimaryKeys.includes(table) ? 'AUTO_INCREMENT' - : column.dflt_value, + : stripQuotes(column.dflt_value), is_nullable: column.notnull == 0, data_type: extractType(column.type), max_length: extractMaxLength(column.type), diff --git a/packages/schema/src/utils/strip-quotes.ts b/packages/schema/src/utils/strip-quotes.ts new file mode 100644 index 0000000000..aa6f604a90 --- /dev/null +++ b/packages/schema/src/utils/strip-quotes.ts @@ -0,0 +1,16 @@ +/** + * Strip leading/trailing quotes from a string + */ +export function stripQuotes(value: string | null): string | null { + if (value == null) { + return null; + } + + const trimmed = value.trim(); + + if ((trimmed.startsWith(`'`) && trimmed.endsWith(`'`)) || (trimmed.startsWith('"') && trimmed.endsWith('"'))) { + return trimmed.slice(1, -1); + } + + return value; +}