@@ -110,7 +110,7 @@ sqlda_common_total_size(const PGresult *res, int row, enum COMPAT_MODE compat, l
110
110
* int Unfortunately we need to do double work here to compute
111
111
* the size of the space needed for the numeric structure.
112
112
*/
113
- ecpg_sqlda_align_add_size (offset , sizeof (int ), sizeof (numeric ), & offset , & next_offset );
113
+ ecpg_sqlda_align_add_size (offset , sizeof (NumericDigit * ), sizeof (numeric ), & offset , & next_offset );
114
114
if (!PQgetisnull (res , row , i ))
115
115
{
116
116
char * val = PQgetvalue (res , row , i );
@@ -119,7 +119,8 @@ sqlda_common_total_size(const PGresult *res, int row, enum COMPAT_MODE compat, l
119
119
num = PGTYPESnumeric_from_asc (val , NULL );
120
120
if (!num )
121
121
break ;
122
- ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
122
+ if (num -> ndigits )
123
+ ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
123
124
PGTYPESnumeric_free (num );
124
125
}
125
126
break ;
@@ -318,7 +319,7 @@ ecpg_set_compat_sqlda(int lineno, struct sqlda_compat ** _sqlda, const PGresult
318
319
319
320
set_data = false;
320
321
321
- ecpg_sqlda_align_add_size (offset , sizeof (int ), sizeof (numeric ), & offset , & next_offset );
322
+ ecpg_sqlda_align_add_size (offset , sizeof (NumericDigit * ), sizeof (numeric ), & offset , & next_offset );
322
323
sqlda -> sqlvar [i ].sqldata = (char * ) sqlda + offset ;
323
324
sqlda -> sqlvar [i ].sqllen = sizeof (numeric );
324
325
@@ -338,11 +339,14 @@ ecpg_set_compat_sqlda(int lineno, struct sqlda_compat ** _sqlda, const PGresult
338
339
339
340
memcpy (sqlda -> sqlvar [i ].sqldata , num , sizeof (numeric ));
340
341
341
- ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
342
- memcpy ((char * ) sqlda + offset , num -> buf , num -> ndigits + 1 );
342
+ if (num -> ndigits )
343
+ {
344
+ ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
345
+ memcpy ((char * ) sqlda + offset , num -> buf , num -> ndigits + 1 );
343
346
344
- ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> buf = (NumericDigit * ) sqlda + offset ;
345
- ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> digits = (NumericDigit * ) sqlda + offset + (num -> digits - num -> buf );
347
+ ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> buf = (NumericDigit * ) sqlda + offset ;
348
+ ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> digits = (NumericDigit * ) sqlda + offset + (num -> digits - num -> buf );
349
+ }
346
350
347
351
PGTYPESnumeric_free (num );
348
352
@@ -504,7 +508,7 @@ ecpg_set_native_sqlda(int lineno, struct sqlda_struct ** _sqlda, const PGresult
504
508
505
509
set_data = false;
506
510
507
- ecpg_sqlda_align_add_size (offset , sizeof (int ), sizeof (numeric ), & offset , & next_offset );
511
+ ecpg_sqlda_align_add_size (offset , sizeof (NumericDigit * ), sizeof (numeric ), & offset , & next_offset );
508
512
sqlda -> sqlvar [i ].sqldata = (char * ) sqlda + offset ;
509
513
sqlda -> sqlvar [i ].sqllen = sizeof (numeric );
510
514
@@ -524,11 +528,14 @@ ecpg_set_native_sqlda(int lineno, struct sqlda_struct ** _sqlda, const PGresult
524
528
525
529
memcpy (sqlda -> sqlvar [i ].sqldata , num , sizeof (numeric ));
526
530
527
- ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
528
- memcpy ((char * ) sqlda + offset , num -> buf , num -> ndigits + 1 );
531
+ if (num -> ndigits )
532
+ {
533
+ ecpg_sqlda_align_add_size (next_offset , sizeof (int ), num -> ndigits + 1 , & offset , & next_offset );
534
+ memcpy ((char * ) sqlda + offset , num -> buf , num -> ndigits + 1 );
529
535
530
- ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> buf = (NumericDigit * ) sqlda + offset ;
531
- ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> digits = (NumericDigit * ) sqlda + offset + (num -> digits - num -> buf );
536
+ ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> buf = (NumericDigit * ) sqlda + offset ;
537
+ ((numeric * ) sqlda -> sqlvar [i ].sqldata )-> digits = (NumericDigit * ) sqlda + offset + (num -> digits - num -> buf );
538
+ }
532
539
533
540
PGTYPESnumeric_free (num );
534
541
0 commit comments