@@ -414,7 +414,7 @@ ECPGexecute(struct statement * stmt)
414414 char * mallocedval = NULL ;
415415 char * tobeinserted = NULL ;
416416 char * p ;
417- char buff [20 ];
417+ char buff [20 ];
418418
419419 /*
420420 * Some special treatment is needed for records since we want
@@ -450,49 +450,132 @@ ECPGexecute(struct statement * stmt)
450450 {
451451 switch (var -> type )
452452 {
453+ int element ;
454+
453455 case ECPGt_short :
454- sprintf (buff , "%d" , * (short * ) var -> value );
455- tobeinserted = buff ;
456+ if (!(mallocedval = ecpg_alloc (var -> arrsize * 20 , stmt -> lineno )))
457+ return false;
458+
459+ sprintf (mallocedval , "%s" , (var -> arrsize > 1 ) ? "'{" : "" );
460+
461+ for (element = 0 ; element < var -> arrsize ; element ++ )
462+ sprintf (mallocedval + strlen (mallocedval ), "%d," , ((short * ) var -> value )[element ]);
463+
464+ sprintf (mallocedval + strlen (mallocedval ) - 1 , "%s" , (var -> arrsize > 1 ) ? "}'" : "" );
465+
466+ tobeinserted = mallocedval ;
456467 break ;
457468
458469 case ECPGt_int :
459- sprintf (buff , "%d" , * (int * ) var -> value );
460- tobeinserted = buff ;
470+ if (!(mallocedval = ecpg_alloc (var -> arrsize * 20 , stmt -> lineno )))
471+ return false;
472+
473+ sprintf (mallocedval , "%s" , (var -> arrsize > 1 ) ? "'{" : "" );
474+
475+ for (element = 0 ; element < var -> arrsize ; element ++ )
476+ sprintf (mallocedval + strlen (mallocedval ), "%d," , ((int * ) var -> value )[element ]);
477+
478+ sprintf (mallocedval + strlen (mallocedval ) - 1 , "%s" , (var -> arrsize > 1 ) ? "}'" : "" );
479+
480+ tobeinserted = mallocedval ;
461481 break ;
462482
463483 case ECPGt_unsigned_short :
464- sprintf (buff , "%d" , * (unsigned short * ) var -> value );
465- tobeinserted = buff ;
484+ if (!(mallocedval = ecpg_alloc (var -> arrsize * 20 , stmt -> lineno )))
485+ return false;
486+
487+ sprintf (mallocedval , "%s" , (var -> arrsize > 1 ) ? "'{" : "" );
488+
489+ for (element = 0 ; element < var -> arrsize ; element ++ )
490+ sprintf (mallocedval + strlen (mallocedval ), "%d," , ((unsigned short * ) var -> value )[element ]);
491+
492+ sprintf (mallocedval + strlen (mallocedval ) - 1 , "%s" , (var -> arrsize > 1 ) ? "}'" : "" );
493+
494+ tobeinserted = mallocedval ;
466495 break ;
467496
468497 case ECPGt_unsigned_int :
469- sprintf (buff , "%d" , * (unsigned int * ) var -> value );
470- tobeinserted = buff ;
498+ if (!(mallocedval = ecpg_alloc (var -> arrsize * 20 , stmt -> lineno )))
499+ return false;
500+
501+ sprintf (mallocedval , "%s" , (var -> arrsize > 1 ) ? "'{" : "" );
502+
503+ for (element = 0 ; element < var -> arrsize ; element ++ )
504+ sprintf (mallocedval + strlen (mallocedval ), "%d," , ((unsigned int * ) var -> value )[element ]);
505+
506+ sprintf (mallocedval + strlen (mallocedval ) - 1 , "%s" , (var -> arrsize > 1 ) ? "}'" : "" );
507+
508+ tobeinserted = mallocedval ;
471509 break ;
472510
473511 case ECPGt_long :
474- sprintf (buff , "%ld" , * (long * ) var -> value );
475- tobeinserted = buff ;
512+ if (!(mallocedval = ecpg_alloc (var -> arrsize * 20 , stmt -> lineno )))
513+ return false;
514+
515+ sprintf (mallocedval , "%s" , (var -> arrsize > 1 ) ? "'{" : "" );
516+
517+ for (element = 0 ; element < var -> arrsize ; element ++ )
518+ sprintf (mallocedval + strlen (mallocedval ), "%ld," , ((long * ) var -> value )[element ]);
519+
520+ sprintf (mallocedval + strlen (mallocedval ) - 1 , "%s" , (var -> arrsize > 1 ) ? "}'" : "" );
521+
522+ tobeinserted = mallocedval ;
476523 break ;
477524
478525 case ECPGt_unsigned_long :
479- sprintf (buff , "%ld" , * (unsigned long * ) var -> value );
480- tobeinserted = buff ;
526+ if (!(mallocedval = ecpg_alloc (var -> arrsize * 20 , stmt -> lineno )))
527+ return false;
528+
529+ sprintf (mallocedval , "%s" , (var -> arrsize > 1 ) ? "'{" : "" );
530+
531+ for (element = 0 ; element < var -> arrsize ; element ++ )
532+ sprintf (mallocedval + strlen (mallocedval ), "%ld," , ((unsigned long * ) var -> value )[element ]);
533+
534+ sprintf (mallocedval + strlen (mallocedval ) - 1 , "%s" , (var -> arrsize > 1 ) ? "}'" : "" );
535+
536+ tobeinserted = mallocedval ;
481537 break ;
482538
483539 case ECPGt_float :
484- sprintf (buff , "%.14g" , * (float * ) var -> value );
485- tobeinserted = buff ;
540+ if (!(mallocedval = ecpg_alloc (var -> arrsize * 20 , stmt -> lineno )))
541+ return false;
542+
543+ sprintf (mallocedval , "%s" , (var -> arrsize > 1 ) ? "'{" : "" );
544+
545+ for (element = 0 ; element < var -> arrsize ; element ++ )
546+ sprintf (mallocedval + strlen (mallocedval ), "%.14g," , ((float * ) var -> value )[element ]);
547+
548+ sprintf (mallocedval + strlen (mallocedval ) - 1 , "%s" , (var -> arrsize > 1 ) ? "}'" : "" );
549+
550+ tobeinserted = mallocedval ;
486551 break ;
487552
488553 case ECPGt_double :
489- sprintf (buff , "%.14g" , * (double * ) var -> value );
490- tobeinserted = buff ;
554+ if (!(mallocedval = ecpg_alloc (var -> arrsize * 20 , stmt -> lineno )))
555+ return false;
556+
557+ sprintf (mallocedval , "%s" , (var -> arrsize > 1 ) ? "'{" : "" );
558+
559+ for (element = 0 ; element < var -> arrsize ; element ++ )
560+ sprintf (mallocedval + strlen (mallocedval ), "%.14g," , ((double * ) var -> value )[element ]);
561+
562+ sprintf (mallocedval + strlen (mallocedval ) - 1 , "%s" , (var -> arrsize > 1 ) ? "}'" : "" );
563+
564+ tobeinserted = mallocedval ;
491565 break ;
492566
493567 case ECPGt_bool :
494- sprintf (buff , "'%c'" , (* (char * ) var -> value ? 't' : 'f' ));
495- tobeinserted = buff ;
568+ if (!(mallocedval = ecpg_alloc (var -> arrsize * 20 , stmt -> lineno )))
569+ return false;
570+
571+ sprintf (mallocedval , "%s" , (var -> arrsize > 1 ) ? "'{" : "" );
572+
573+ for (element = 0 ; element < var -> arrsize ; element ++ )
574+ sprintf (mallocedval + strlen (mallocedval ), "%c," , (((char * ) var -> value )[element ]) ? 't' : 'f' );
575+
576+ sprintf (mallocedval + strlen (mallocedval ) - 1 , "%s" , (var -> arrsize > 1 ) ? "}'" : "" );
577+
578+ tobeinserted = mallocedval ;
496579 break ;
497580
498581 case ECPGt_char :
0 commit comments