@@ -77,4 +77,45 @@ describe('DECFLOAT Support Integration (Firebird 4.0+)', () => {
7777 await fromCallback ( cb => db . query ( 'DROP TABLE TEST_DEC' , cb ) ) . catch ( ( ) => { } ) ;
7878 }
7979 } ) ;
80+
81+ it ( 'should handle INSERT ... RETURNING with DECFLOAT' , { skip : ! supportsDecFloat } , async ( ) => {
82+ const table_sql = 'CREATE TABLE TEST_DEC_RET (ID INT, D16 DECFLOAT(16))' ;
83+ await fromCallback ( cb => db . query ( table_sql , cb ) ) ;
84+
85+ try {
86+ const d16_val = Buffer . alloc ( 8 , 0x33 ) ;
87+
88+ const row = await fromCallback ( cb => db . query (
89+ 'INSERT INTO TEST_DEC_RET (ID, D16) VALUES (?, ?) RETURNING D16' ,
90+ [ 1 , d16_val ] ,
91+ cb
92+ ) ) ;
93+
94+ assert . ok ( row . d16 instanceof Buffer ) ;
95+ assert . ok ( row . d16 . equals ( d16_val ) , 'DECFLOAT RETURNING mismatch' ) ;
96+ } finally {
97+ await fromCallback ( cb => db . query ( 'DROP TABLE TEST_DEC_RET' , cb ) ) . catch ( ( ) => { } ) ;
98+ }
99+ } ) ;
100+
101+ it ( 'should handle NULL values in DECFLOAT columns' , { skip : ! supportsDecFloat } , async ( ) => {
102+ const table_sql = 'CREATE TABLE TEST_DEC_NULL (ID INT, D16 DECFLOAT(16), D34 DECFLOAT(34))' ;
103+ await fromCallback ( cb => db . query ( table_sql , cb ) ) ;
104+
105+ try {
106+ await fromCallback ( cb => db . query (
107+ 'INSERT INTO TEST_DEC_NULL (ID, D16, D34) VALUES (?, ?, ?)' ,
108+ [ 1 , null , null ] ,
109+ cb
110+ ) ) ;
111+
112+ const rows = await fromCallback ( cb => db . query ( 'SELECT D16, D34 FROM TEST_DEC_NULL WHERE ID = 1' , cb ) ) ;
113+ const row = rows [ 0 ] ;
114+
115+ assert . strictEqual ( row . d16 , null , 'DECFLOAT(16) should be null' ) ;
116+ assert . strictEqual ( row . d34 , null , 'DECFLOAT(34) should be null' ) ;
117+ } finally {
118+ await fromCallback ( cb => db . query ( 'DROP TABLE TEST_DEC_NULL' , cb ) ) . catch ( ( ) => { } ) ;
119+ }
120+ } ) ;
80121} ) ;
0 commit comments