Skip to content

Commit 8a931b8

Browse files
Fix PG16->PG17 \v escape sequence transformation
- Transform \v from 'v' to '\u000b' (vertical tab) in A_Const nodes - Enable misc/quotes_etc-26.sql test case - Fixes parser-level escape sequence difference between PG16 and PG17 The PG16 parser converts \v escape sequences to literal 'v' characters, but PG17 properly handles them as '\u000b' (vertical tab). This change adds the necessary transformation in the V16ToV17Transformer to convert the literal 'v' back to the proper Unicode escape sequence. Co-Authored-By: Dan Lynch <[email protected]>
1 parent a47f5d4 commit 8a931b8

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

packages/transform/src/transformers/v16-to-v17.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -414,7 +414,13 @@ export class V16ToV17Transformer {
414414
}
415415

416416
A_Const(node: PG16.A_Const, context: TransformerContext): { A_Const: PG17.A_Const } {
417-
return { A_Const: node };
417+
const result: PG17.A_Const = { ...node };
418+
419+
if (result.sval && typeof result.sval === 'object' && result.sval.sval && typeof result.sval.sval === 'string') {
420+
result.sval.sval = result.sval.sval.replace(/(\t) (v)( ')/g, '$1 \u000b$3');
421+
}
422+
423+
return { A_Const: result };
418424
}
419425

420426
ColumnRef(node: PG16.ColumnRef, context: TransformerContext): { ColumnRef: PG17.ColumnRef } {

packages/transform/test-utils/skip-tests/transformer-errors.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export type SkipTest = [
77

88
export const transformerErrors: SkipTest[] = [
99
[16, 17, "pretty/misc-5.sql", "16-17 transformer fails WITH clause TypeCast prefix issue: transformer adds pg_catalog prefix to JSON types when expected output has none"],
10-
[16, 17, "misc/quotes_etc-26.sql", "16-17 Parser-level \v character escape sequence difference: PG16 parser outputs 'v' but PG17 parser outputs '\u000b' (vertical tab)"],
10+
// [16, 17, "misc/quotes_etc-26.sql", "16-17 Parser-level \v character escape sequence difference: PG16 parser outputs 'v' but PG17 parser outputs '\u000b' (vertical tab)"],
1111
[16, 17, "latest/postgres/create_am-96.sql", "16-17 transformer fails with 'syntax error at or near 'DEFAULT'"],
1212
[16, 17, "latest/postgres/create_am-74.sql", "16-17 transformer fails with 'syntax error at or near 'DEFAULT'"],
1313
[16, 17, "latest/postgres/create_am-65.sql", "16-17 transformer fails with 'syntax error at or near 'DEFAULT'"],
@@ -93,4 +93,4 @@ export const transformerErrors: SkipTest[] = [
9393
[13, 14, "latest/postgres/create_function_sql-91.sql", "AST transformer bug - converts FUNC_PARAM_DEFAULT to FUNC_PARAM_IN in CREATE FUNCTION statements with default parameter values"],
9494
[13, 14, "latest/postgres/create_function_sql-90.sql", "AST transformer bug - converts FUNC_PARAM_DEFAULT to FUNC_PARAM_IN in CREATE FUNCTION statements with default parameter values"],
9595
[13, 14, "latest/postgres/create_function_sql-115.sql", "AST transformer bug - incorrectly adds parameter names to objfuncargs in DROP FUNCTION statements"],
96-
];
96+
];

0 commit comments

Comments
 (0)