1+ import { Parser } from '@pgsql/parser' ;
2+ import {
3+ PG13ToPG17Transformer ,
4+ PG14ToPG17Transformer ,
5+ PG15ToPG17Transformer ,
6+ PG16ToPG17Transformer
7+ } from '../src/transformers-full' ;
8+
9+ describe ( 'Direct Transformers' , ( ) => {
10+ const testSQL = 'SELECT id, name FROM users WHERE active = true' ;
11+
12+ describe ( 'PG16ToPG17Transformer' , ( ) => {
13+ it ( 'should transform PG16 AST to PG17' , async ( ) => {
14+ const pg16Parser = new Parser ( { version : 16 } ) ;
15+
16+ const pg16Ast = await pg16Parser . parse ( testSQL ) ;
17+ const transformer = new PG16ToPG17Transformer ( ) ;
18+ const transformedAst = transformer . transform ( pg16Ast ) ;
19+
20+ expect ( transformedAst . version ) . toBe ( 170004 ) ;
21+ expect ( transformedAst . stmts ) . toBeDefined ( ) ;
22+ expect ( transformedAst . stmts . length ) . toBe ( 1 ) ;
23+
24+ // Verify the structure is preserved
25+ expect ( transformedAst . stmts [ 0 ] . stmt ) . toBeDefined ( ) ;
26+ const stmt = transformedAst . stmts [ 0 ] . stmt as any ;
27+ expect ( stmt . SelectStmt ) . toBeDefined ( ) ;
28+ } ) ;
29+ } ) ;
30+
31+ describe ( 'PG15ToPG17Transformer' , ( ) => {
32+ it ( 'should transform PG15 AST to PG17' , async ( ) => {
33+ const pg15Parser = new Parser ( { version : 15 } ) ;
34+
35+ const pg15Ast = await pg15Parser . parse ( testSQL ) ;
36+ const transformer = new PG15ToPG17Transformer ( ) ;
37+ const transformedAst = transformer . transform ( pg15Ast ) ;
38+
39+ expect ( transformedAst . version ) . toBe ( 170004 ) ;
40+ expect ( transformedAst . stmts ) . toBeDefined ( ) ;
41+ expect ( transformedAst . stmts . length ) . toBe ( 1 ) ;
42+
43+ // Verify the structure is preserved
44+ expect ( transformedAst . stmts [ 0 ] . stmt ) . toBeDefined ( ) ;
45+ const stmt = transformedAst . stmts [ 0 ] . stmt as any ;
46+ expect ( stmt . SelectStmt ) . toBeDefined ( ) ;
47+ } ) ;
48+ } ) ;
49+
50+ describe ( 'PG14ToPG17Transformer' , ( ) => {
51+ it ( 'should transform PG14 AST to PG17' , async ( ) => {
52+ const pg14Parser = new Parser ( { version : 14 } ) ;
53+
54+ const pg14Ast = await pg14Parser . parse ( testSQL ) ;
55+ const transformer = new PG14ToPG17Transformer ( ) ;
56+ const transformedAst = transformer . transform ( pg14Ast ) ;
57+
58+ expect ( transformedAst . version ) . toBe ( 170004 ) ;
59+ expect ( transformedAst . stmts ) . toBeDefined ( ) ;
60+ expect ( transformedAst . stmts . length ) . toBe ( 1 ) ;
61+
62+ // Verify the structure is preserved
63+ expect ( transformedAst . stmts [ 0 ] . stmt ) . toBeDefined ( ) ;
64+ const stmt = transformedAst . stmts [ 0 ] . stmt as any ;
65+ expect ( stmt . SelectStmt ) . toBeDefined ( ) ;
66+ } ) ;
67+ } ) ;
68+
69+ describe ( 'PG13ToPG17Transformer' , ( ) => {
70+ it ( 'should transform PG13 AST to PG17' , async ( ) => {
71+ const pg13Parser = new Parser ( { version : 13 } ) ;
72+
73+ const pg13Ast = await pg13Parser . parse ( testSQL ) ;
74+ const transformer = new PG13ToPG17Transformer ( ) ;
75+ const transformedAst = transformer . transform ( pg13Ast ) ;
76+
77+ expect ( transformedAst . version ) . toBe ( 170004 ) ;
78+ expect ( transformedAst . stmts ) . toBeDefined ( ) ;
79+ expect ( transformedAst . stmts . length ) . toBe ( 1 ) ;
80+
81+ // Verify the structure is preserved
82+ expect ( transformedAst . stmts [ 0 ] . stmt ) . toBeDefined ( ) ;
83+ const stmt = transformedAst . stmts [ 0 ] . stmt as any ;
84+ expect ( stmt . SelectStmt ) . toBeDefined ( ) ;
85+ } ) ;
86+ } ) ;
87+
88+ describe ( 'transformStatement method' , ( ) => {
89+ it ( 'should transform individual statements' , async ( ) => {
90+ const pg15Parser = new Parser ( { version : 15 } ) ;
91+ const pg15Ast = await pg15Parser . parse ( testSQL ) ;
92+
93+ const transformer = new PG15ToPG17Transformer ( ) ;
94+ const stmt = pg15Ast . stmts [ 0 ] . stmt ;
95+ const transformedStmt = transformer . transformStatement ( stmt ) ;
96+
97+ expect ( transformedStmt ) . toBeDefined ( ) ;
98+ // The transformed statement should have the same top-level structure
99+ expect ( Object . keys ( transformedStmt ) ) . toEqual ( Object . keys ( stmt ) ) ;
100+ } ) ;
101+ } ) ;
102+
103+ describe ( 'Error handling' , ( ) => {
104+ it ( 'should throw error for invalid parse result' , ( ) => {
105+ const transformer = new PG15ToPG17Transformer ( ) ;
106+
107+ expect ( ( ) => transformer . transform ( null as any ) ) . toThrow ( 'Invalid parse result' ) ;
108+ expect ( ( ) => transformer . transform ( { } as any ) ) . toThrow ( 'Invalid parse result' ) ;
109+ expect ( ( ) => transformer . transform ( { version : 150001 } as any ) ) . toThrow ( 'Invalid parse result' ) ;
110+ } ) ;
111+ } ) ;
112+ } ) ;
0 commit comments