diff --git a/pegjs/transactsql.pegjs b/pegjs/transactsql.pegjs index bcddd0e6..7ac9c2f0 100644 --- a/pegjs/transactsql.pegjs +++ b/pegjs/transactsql.pegjs @@ -1814,6 +1814,9 @@ table_base type: 'dual' }; } + / e:func_call __ alias:alias_clause? { + return { type: 'expr', expr: e, as: alias }; + } / t:table_name __ tt:temporal_table? __ alias:alias_clause? __ th:table_hint? { t.as = alias t.table_hint = th diff --git a/src/column.js b/src/column.js index 33515ff8..9c3e9288 100644 --- a/src/column.js +++ b/src/column.js @@ -66,7 +66,8 @@ function columnRefToSQL(expr) { function columnDataType(definition) { if (!definition) return const { dataType, length, suffix, scale, expr } = definition - let result = dataTypeToSQL({ dataType, length, suffix, scale, parentheses: length != null ? true : false }) + const parentheses = length != null && true || false + let result = dataTypeToSQL({ dataType, length, suffix, scale, parentheses }) if (expr) result += exprToSQL(expr) if (definition.array) { const arrayExpr = arrayDimensionToSymbol(definition) diff --git a/test/transactsql.spec.js b/test/transactsql.spec.js index 7cc24efe..90cddab7 100644 --- a/test/transactsql.spec.js +++ b/test/transactsql.spec.js @@ -436,6 +436,13 @@ describe('transactsql', () => { 'CREATE TABLE [visits] ([url] VARBINARY(max))' ] }, + { + title: 'table-valued function in from clause', + sql: [ + "select * from dbo.fn_name(N'000')", + "SELECT * FROM dbo.fn_name(N'000')" + ] + }, ] SQL_LIST.forEach(sqlInfo => { const { title, sql } = sqlInfo