@@ -252,11 +252,6 @@ export class V14ToV15Transformer {
252252 }
253253 }
254254
255- // Handle boolval field - in PG15, all boolval fields are represented as empty objects
256- if ( result . boolval !== undefined ) {
257- // Handle both direct boolval and nested boolval structures
258- result . boolval = { } ;
259- }
260255
261256 // Handle ival field directly (not nested in val) - removed overly broad conversion
262257
@@ -382,7 +377,7 @@ export class V14ToV15Transformer {
382377 if ( isBoolType ) {
383378 return {
384379 A_Const : {
385- boolval : boolValue ? { boolval : true } : { } ,
380+ boolval : { } ,
386381 location : result . arg . A_Const . location
387382 }
388383 } ;
@@ -421,58 +416,45 @@ export class V14ToV15Transformer {
421416 }
422417
423418 Integer ( node : PG14 . Integer , context : TransformerContext ) : any {
424- // Check if we're in a DefElem context - if so, handle special cases
425- const isInDefElemContext = context . parentNodeTypes &&
426- context . parentNodeTypes . some ( nodeType => nodeType === 'DefElem' ) ;
427419
428- if ( isInDefElemContext && node . ival !== undefined ) {
420+ // AlterTableCmd context: SET STATISTICS with ival 0 or -1 -> empty Integer
421+ if ( context . parentNodeTypes ?. includes ( 'AlterTableCmd' ) &&
422+ ( node . ival === 0 || node . ival === - 1 ) ) {
423+ return { Integer : { } } ;
424+ }
425+
426+ // DefineStmt context: specific cases where ival should become empty Integer
427+ if ( context . parentNodeTypes ?. includes ( 'DefineStmt' ) ) {
429428 const defElemName = ( context as any ) . defElemName ;
430429
431- // DefElem name-specific transformations - be very restrictive
432- if ( defElemName ) {
433- if ( defElemName === 'cycle' && node . ival === 1 &&
434- context . parentNodeTypes ?. some ( nodeType => nodeType === 'CreateSeqStmt' ) ) {
435- return {
436- Boolean : {
437- boolval : true
438- }
439- } ;
440- }
441-
442-
443- if ( defElemName === 'increment' && node . ival < 0 &&
444- context . parentNodeTypes ?. some ( nodeType => nodeType === 'CreateSeqStmt' ) ) {
445- return { Integer : { } } ;
446- }
447-
448-
449- if ( defElemName === 'sspace' && node . ival === 0 &&
450- context . parentNodeTypes ?. some ( nodeType => nodeType === 'DefineStmt' ) ) {
451- return { Integer : { } } ;
452- }
430+ if ( defElemName === 'initcond' && ( node . ival === 0 || node . ival === - 100 ) ) {
431+ return { Integer : { } } ;
453432 }
454433
455- const isBooleanContext = context . parentNodeTypes &&
456- ( context . parentNodeTypes . some ( nodeType =>
457- nodeType === 'CreateRoleStmt' ||
458- nodeType === 'AlterRoleStmt' ||
459- nodeType === 'CreateFunctionStmt' ||
460- nodeType === 'AlterFunctionStmt' ||
461- nodeType === 'CreateExtensionStmt'
462- ) ) ;
434+ if ( defElemName === 'sspace' && node . ival === 0 ) {
435+ return { Integer : { } } ;
436+ }
463437
464- if ( isBooleanContext ) {
465- // Boolean contexts: ival: 0 -> boolval: false, ival: 1 -> boolval: true
466- if ( node . ival === 0 || node . ival === 1 ) {
467- const boolValue = node . ival === 1 ;
468- return {
469- Boolean : {
470- boolval : boolValue
471- }
472- } ;
473- }
438+ if ( node . ival === - 1 && ! defElemName ) {
439+ return { Integer : { } } ;
440+ }
441+ }
442+
443+ // CreateSeqStmt context: specific cases where ival should become empty Integer
444+ if ( context . parentNodeTypes ?. includes ( 'CreateSeqStmt' ) ) {
445+ const defElemName = ( context as any ) . defElemName ;
446+
447+ if ( defElemName === 'start' && node . ival === 0 ) {
448+ return { Integer : { } } ;
474449 }
475450
451+ if ( defElemName === 'minvalue' && node . ival === 0 ) {
452+ return { Integer : { } } ;
453+ }
454+
455+ if ( defElemName === 'increment' && node . ival === - 1 ) {
456+ return { Integer : { } } ;
457+ }
476458 }
477459
478460 const result : any = { ...node } ;
0 commit comments