@@ -414,7 +414,7 @@ ECPGexecute(struct statement * stmt)
414414char * mallocedval = NULL ;
415415char * tobeinserted = NULL ;
416416char * 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{
451451switch (var -> type )
452452{
453+ int element ;
454+
453455case 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 ;
456467break ;
457468
458469case 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 ;
461481break ;
462482
463483case 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 ;
466495break ;
467496
468497case ECPGt_unsigned_int :
469- sprintf (buff ,"%d" ,* (unsignedint * )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," , ((unsignedint * )var -> value )[element ]);
505+
506+ sprintf (mallocedval + strlen (mallocedval )- 1 ,"%s" , (var -> arrsize > 1 ) ?"}'" :"" );
507+
508+ tobeinserted = mallocedval ;
471509break ;
472510
473511case 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 ;
476523break ;
477524
478525case 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 ;
481537break ;
482538
483539case 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 ;
486551break ;
487552
488553case 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 ;
491565break ;
492566
493567case 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 ;
496579break ;
497580
498581case ECPGt_char :