11import { BaseTransformer , TransformerContext } from '../visitors/base' ;
22import { Node as PG13Node } from '../13/types' ;
33import { Node as PG14Node } from '../14/types' ;
4+ import * as PG13 from '../13/types' ;
5+ import * as PG14 from '../14/types' ;
6+ import * as pg13RuntimeSchema from '../13/runtime-schema' ;
7+ import * as pg14RuntimeSchema from '../14/runtime-schema' ;
48
59export class V13ToV14Transformer extends BaseTransformer {
610 transform ( node : any , context ?: TransformerContext ) : any {
@@ -24,7 +28,7 @@ export class V13ToV14Transformer extends BaseTransformer {
2428
2529
2630
27- SelectStmt ( nodeData : any , context ?: TransformerContext ) : any {
31+ SelectStmt ( nodeData : PG13 . SelectStmt , context ?: TransformerContext ) : any {
2832 const transformedData : any = { } ;
2933
3034 for ( const [ key , value ] of Object . entries ( nodeData ) ) {
@@ -33,8 +37,8 @@ export class V13ToV14Transformer extends BaseTransformer {
3337
3438 const hasContent = ( nodeData . targetList && nodeData . targetList . length > 0 ) ||
3539 nodeData . fromClause || nodeData . whereClause ||
36- nodeData . groupClause || nodeData . havingClause || nodeData . orderClause ||
37- nodeData . limitClause || nodeData . withClause || nodeData . larg || nodeData . rarg ;
40+ nodeData . groupClause || nodeData . havingClause || nodeData . sortClause ||
41+ nodeData . limitOffset || nodeData . limitCount || nodeData . withClause || nodeData . larg || nodeData . rarg ;
3842
3943 if ( hasContent ) {
4044 if ( ! ( 'limitOption' in transformedData ) ) {
@@ -80,12 +84,16 @@ export class V13ToV14Transformer extends BaseTransformer {
8084 transformedData . havingClause = this . transform ( transformedData . havingClause , context ) ;
8185 }
8286
83- if ( transformedData . orderClause && Array . isArray ( transformedData . orderClause ) ) {
84- transformedData . orderClause = transformedData . orderClause . map ( ( item : any ) => this . transform ( item , context ) ) ;
87+ if ( transformedData . sortClause && Array . isArray ( transformedData . sortClause ) ) {
88+ transformedData . sortClause = transformedData . sortClause . map ( ( item : any ) => this . transform ( item , context ) ) ;
8589 }
8690
87- if ( transformedData . limitClause && typeof transformedData . limitClause === 'object' ) {
88- transformedData . limitClause = this . transform ( transformedData . limitClause , context ) ;
91+ if ( transformedData . limitOffset && typeof transformedData . limitOffset === 'object' ) {
92+ transformedData . limitOffset = this . transform ( transformedData . limitOffset , context ) ;
93+ }
94+
95+ if ( transformedData . limitCount && typeof transformedData . limitCount === 'object' ) {
96+ transformedData . limitCount = this . transform ( transformedData . limitCount , context ) ;
8997 }
9098
9199 if ( transformedData . valuesLists && Array . isArray ( transformedData . valuesLists ) ) {
@@ -97,7 +105,7 @@ export class V13ToV14Transformer extends BaseTransformer {
97105
98106
99107
100- FuncCall ( nodeData : any , context ?: TransformerContext ) : any {
108+ FuncCall ( nodeData : PG13 . FuncCall , context ?: TransformerContext ) : any {
101109 const transformedData : any = { ...nodeData } ;
102110
103111 if ( ! ( 'funcformat' in transformedData ) ) {
@@ -115,7 +123,7 @@ export class V13ToV14Transformer extends BaseTransformer {
115123 return transformedData ;
116124 }
117125
118- TypeName ( nodeData : any , context ?: TransformerContext ) : any {
126+ TypeName ( nodeData : PG13 . TypeName , context ?: TransformerContext ) : any {
119127 const transformedData : any = { } ;
120128
121129 for ( const [ key , value ] of Object . entries ( nodeData ) ) {
@@ -138,7 +146,93 @@ export class V13ToV14Transformer extends BaseTransformer {
138146 return transformedData ;
139147 }
140148
141- Alias ( nodeData : any , context ?: TransformerContext ) : any {
149+ Alias ( nodeData : PG13 . Alias , context ?: TransformerContext ) : any {
150+ const transformedData : any = { } ;
151+
152+ for ( const [ key , value ] of Object . entries ( nodeData ) ) {
153+ if ( Array . isArray ( value ) ) {
154+ transformedData [ key ] = value . map ( item => this . transform ( item , context ) ) ;
155+ } else if ( value && typeof value === 'object' ) {
156+ transformedData [ key ] = this . transform ( value , context ) ;
157+ } else {
158+ transformedData [ key ] = value ;
159+ }
160+ }
161+
162+ return transformedData ;
163+ }
164+
165+ FunctionParameter ( nodeData : PG13 . FunctionParameter , context ?: TransformerContext ) : any {
166+ const transformedData : any = { } ;
167+
168+ for ( const [ key , value ] of Object . entries ( nodeData ) ) {
169+ if ( Array . isArray ( value ) ) {
170+ transformedData [ key ] = value . map ( item => this . transform ( item , context ) ) ;
171+ } else if ( value && typeof value === 'object' ) {
172+ transformedData [ key ] = this . transform ( value , context ) ;
173+ } else {
174+ transformedData [ key ] = value ;
175+ }
176+ }
177+
178+ if ( 'mode' in nodeData && nodeData . mode === 'FUNC_PARAM_IN' ) {
179+ transformedData . mode = 'FUNC_PARAM_DEFAULT' ;
180+ }
181+
182+ return transformedData ;
183+ }
184+
185+ DeclareCursorStmt ( nodeData : PG13 . DeclareCursorStmt , context ?: TransformerContext ) : any {
186+ const transformedData : any = { } ;
187+
188+ for ( const [ key , value ] of Object . entries ( nodeData ) ) {
189+ if ( Array . isArray ( value ) ) {
190+ transformedData [ key ] = value . map ( item => this . transform ( item , context ) ) ;
191+ } else if ( value && typeof value === 'object' ) {
192+ transformedData [ key ] = this . transform ( value , context ) ;
193+ } else {
194+ transformedData [ key ] = value ;
195+ }
196+ }
197+
198+ if ( 'options' in nodeData ) {
199+ transformedData . options = nodeData . options ;
200+ }
201+
202+ return transformedData ;
203+ }
204+
205+ ObjectWithArgs ( nodeData : PG13 . ObjectWithArgs , context ?: TransformerContext ) : any {
206+ const transformedData : any = { } ;
207+
208+ for ( const [ key , value ] of Object . entries ( nodeData ) ) {
209+ if ( Array . isArray ( value ) ) {
210+ transformedData [ key ] = value . map ( item => this . transform ( item , context ) ) ;
211+ } else if ( value && typeof value === 'object' ) {
212+ transformedData [ key ] = this . transform ( value , context ) ;
213+ } else {
214+ transformedData [ key ] = value ;
215+ }
216+ }
217+
218+ if ( transformedData . objargs && Array . isArray ( transformedData . objargs ) ) {
219+ transformedData . objfuncargs = transformedData . objargs . map ( ( arg : any ) => {
220+ if ( arg && typeof arg === 'object' && arg . TypeName ) {
221+ return {
222+ FunctionParameter : {
223+ argType : arg . TypeName ,
224+ mode : "FUNC_PARAM_DEFAULT"
225+ }
226+ } ;
227+ }
228+ return arg ;
229+ } ) ;
230+ }
231+
232+ return transformedData ;
233+ }
234+
235+ AlterFunctionStmt ( nodeData : PG13 . AlterFunctionStmt , context ?: TransformerContext ) : any {
142236 const transformedData : any = { } ;
143237
144238 for ( const [ key , value ] of Object . entries ( nodeData ) ) {
0 commit comments