1- /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.19 2003/07/15 12:38:38 meskes Exp $ */
1+ /* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.20 2003/07/25 16:10:26 meskes Exp $ */
22
33/*
44 * The aim is to get a simpler inteface to the database routines.
@@ -543,12 +543,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
543543
544544if (var -> arrsize > 1 )
545545{
546- strcpy (mallocedval ,"'{ " );
546+ strcpy (mallocedval ,"array [ " );
547547
548548for (element = 0 ;element < var -> arrsize ;element ++ )
549549sprintf (mallocedval + strlen (mallocedval ),"%hd," , ((short * )var -> value )[element ]);
550550
551- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
551+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
552552}
553553else
554554sprintf (mallocedval ,"%hd" ,* ((short * )var -> value ));
@@ -563,12 +563,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
563563
564564if (var -> arrsize > 1 )
565565{
566- strcpy (mallocedval ,"'{ " );
566+ strcpy (mallocedval ,"array [ " );
567567
568568for (element = 0 ;element < var -> arrsize ;element ++ )
569569sprintf (mallocedval + strlen (mallocedval ),"%d," , ((int * )var -> value )[element ]);
570570
571- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
571+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
572572}
573573else
574574sprintf (mallocedval ,"%d" ,* ((int * )var -> value ));
@@ -583,12 +583,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
583583
584584if (var -> arrsize > 1 )
585585{
586- strcpy (mallocedval ,"'{ " );
586+ strcpy (mallocedval ,"array [ " );
587587
588588for (element = 0 ;element < var -> arrsize ;element ++ )
589589sprintf (mallocedval + strlen (mallocedval ),"%hu," , ((unsigned short * )var -> value )[element ]);
590590
591- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
591+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
592592}
593593else
594594sprintf (mallocedval ,"%hu" ,* ((unsigned short * )var -> value ));
@@ -603,12 +603,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
603603
604604if (var -> arrsize > 1 )
605605{
606- strcpy (mallocedval ,"'{ " );
606+ strcpy (mallocedval ,"array [ " );
607607
608608for (element = 0 ;element < var -> arrsize ;element ++ )
609609sprintf (mallocedval + strlen (mallocedval ),"%u," , ((unsignedint * )var -> value )[element ]);
610610
611- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
611+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
612612}
613613else
614614sprintf (mallocedval ,"%u" ,* ((unsignedint * )var -> value ));
@@ -623,12 +623,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
623623
624624if (var -> arrsize > 1 )
625625{
626- strcpy (mallocedval ,"'{ " );
626+ strcpy (mallocedval ,"array [ " );
627627
628628for (element = 0 ;element < var -> arrsize ;element ++ )
629629sprintf (mallocedval + strlen (mallocedval ),"%ld," , ((long * )var -> value )[element ]);
630630
631- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
631+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
632632}
633633else
634634sprintf (mallocedval ,"%ld" ,* ((long * )var -> value ));
@@ -643,12 +643,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
643643
644644if (var -> arrsize > 1 )
645645{
646- strcpy (mallocedval ,"'{ " );
646+ strcpy (mallocedval ,"array [ " );
647647
648648for (element = 0 ;element < var -> arrsize ;element ++ )
649649sprintf (mallocedval + strlen (mallocedval ),"%lu," , ((unsigned long * )var -> value )[element ]);
650650
651- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
651+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
652652}
653653else
654654sprintf (mallocedval ,"%lu" ,* ((unsigned long * )var -> value ));
@@ -658,17 +658,17 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
658658break ;
659659#ifdef HAVE_LONG_LONG_INT_64
660660case ECPGt_long_long :
661- if (!(mallocedval = ECPGalloc (var -> arrsize * 25 ,stmt -> lineno )))
661+ if (!(mallocedval = ECPGalloc (var -> arrsize * 30 ,stmt -> lineno )))
662662return false;
663663
664664if (var -> arrsize > 1 )
665665{
666- strcpy (mallocedval ,"'{ " );
666+ strcpy (mallocedval ,"array [ " );
667667
668668for (element = 0 ;element < var -> arrsize ;element ++ )
669669sprintf (mallocedval + strlen (mallocedval ),"%lld," , ((long long * )var -> value )[element ]);
670670
671- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
671+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
672672}
673673else
674674sprintf (mallocedval ,"%lld" ,* ((long long * )var -> value ));
@@ -678,17 +678,17 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
678678break ;
679679
680680case ECPGt_unsigned_long_long :
681- if (!(mallocedval = ECPGalloc (var -> arrsize * 25 ,stmt -> lineno )))
681+ if (!(mallocedval = ECPGalloc (var -> arrsize * 30 ,stmt -> lineno )))
682682return false;
683683
684684if (var -> arrsize > 1 )
685685{
686- strcpy (mallocedval ,"'{ " );
686+ strcpy (mallocedval ,"array [ " );
687687
688688for (element = 0 ;element < var -> arrsize ;element ++ )
689689sprintf (mallocedval + strlen (mallocedval ),"%llu," , ((unsigned long long * )var -> value )[element ]);
690690
691- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
691+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
692692}
693693else
694694sprintf (mallocedval ,"%llu" ,* ((unsigned long long * )var -> value ));
@@ -698,17 +698,17 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
698698break ;
699699#endif /* HAVE_LONG_LONG_INT_64 */
700700case ECPGt_float :
701- if (!(mallocedval = ECPGalloc (var -> arrsize * 21 ,stmt -> lineno )))
701+ if (!(mallocedval = ECPGalloc (var -> arrsize * 25 ,stmt -> lineno )))
702702return false;
703703
704704if (var -> arrsize > 1 )
705705{
706- strcpy (mallocedval ,"'{ " );
706+ strcpy (mallocedval ,"array [ " );
707707
708708for (element = 0 ;element < var -> arrsize ;element ++ )
709709sprintf (mallocedval + strlen (mallocedval ),"%.14g," , ((float * )var -> value )[element ]);
710710
711- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
711+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
712712}
713713else
714714sprintf (mallocedval ,"%.14g" ,* ((float * )var -> value ));
@@ -718,17 +718,17 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
718718break ;
719719
720720case ECPGt_double :
721- if (!(mallocedval = ECPGalloc (var -> arrsize * 21 ,stmt -> lineno )))
721+ if (!(mallocedval = ECPGalloc (var -> arrsize * 25 ,stmt -> lineno )))
722722return false;
723723
724724if (var -> arrsize > 1 )
725725{
726- strcpy (mallocedval ,"'{ " );
726+ strcpy (mallocedval ,"array [ " );
727727
728728for (element = 0 ;element < var -> arrsize ;element ++ )
729729sprintf (mallocedval + strlen (mallocedval ),"%.14g," , ((double * )var -> value )[element ]);
730730
731- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
731+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
732732}
733733else
734734sprintf (mallocedval ,"%.14g" ,* ((double * )var -> value ));
@@ -738,12 +738,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
738738break ;
739739
740740case ECPGt_bool :
741- if (!(mallocedval = ECPGalloc (var -> arrsize * 2 ,stmt -> lineno )))
741+ if (!(mallocedval = ECPGalloc (var -> arrsize + sizeof ( "array []" ) ,stmt -> lineno )))
742742return false;
743743
744744if (var -> arrsize > 1 )
745745{
746- strcpy (mallocedval ,"'{ " );
746+ strcpy (mallocedval ,"array [ " );
747747
748748if (var -> offset == sizeof (char ))
749749for (element = 0 ;element < var -> arrsize ;element ++ )
@@ -759,7 +759,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
759759else
760760ECPGraise (stmt -> lineno ,ECPG_CONVERT_BOOL ,"different size" );
761761
762- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
762+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
763763}
764764else
765765{
@@ -854,16 +854,16 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
854854PGTYPESnumeric_free (nval );
855855slen = strlen (str );
856856
857- if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + 5 ,stmt -> lineno )))
857+ if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + sizeof ( "array [] " ) ,stmt -> lineno )))
858858return false;
859859
860860if (!element )
861- strcpy (mallocedval ,"'{ " );
861+ strcpy (mallocedval ,"array [ " );
862862
863863strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
864864strcpy (mallocedval + strlen (mallocedval ),"," );
865865}
866- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
866+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
867867}
868868else
869869{
@@ -902,27 +902,29 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
902902str = quote_postgres (PGTYPESinterval_to_asc ((Interval * )((var + var -> offset * element )-> value )),stmt -> lineno );
903903slen = strlen (str );
904904
905- if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + 5 ,stmt -> lineno )))
905+ if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + sizeof ( "array [],interval " ) ,stmt -> lineno )))
906906return false;
907907
908908if (!element )
909- strcpy (mallocedval ,"'{" );
910-
909+ strcpy (mallocedval ,"array [" );
910+
911+ strcpy (mallocedval + strlen (mallocedval ),"interval " );
911912strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
912913strcpy (mallocedval + strlen (mallocedval ),"," );
913914}
914- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
915+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
915916}
916917else
917918{
918919str = quote_postgres (PGTYPESinterval_to_asc ((Interval * )(var -> value )),stmt -> lineno );
919920slen = strlen (str );
920921
921- if (!(mallocedval = ECPGalloc (slen + 1 ,stmt -> lineno )))
922+ if (!(mallocedval = ECPGalloc (slen + sizeof ( "interval " ) + 1 ,stmt -> lineno )))
922923return false;
923924
924- strncpy (mallocedval ,str ,slen );
925- mallocedval [slen ]= '\0' ;
925+ strcpy (mallocedval ,"interval " );
926+ /* also copy trailing '\0' */
927+ strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
926928}
927929
928930* tobeinserted_p = mallocedval ;
@@ -943,27 +945,29 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
943945str = quote_postgres (PGTYPESdate_to_asc (* (Date * )((var + var -> offset * element )-> value )),stmt -> lineno );
944946slen = strlen (str );
945947
946- if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + 5 ,stmt -> lineno )))
948+ if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + sizeof ( "array [],date " ) ,stmt -> lineno )))
947949return false;
948950
949951if (!element )
950- strcpy (mallocedval ,"'{ " );
952+ strcpy (mallocedval ,"array [ " );
951953
954+ strcpy (mallocedval + strlen (mallocedval ),"date " );
952955strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
953956strcpy (mallocedval + strlen (mallocedval ),"," );
954957}
955- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
958+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
956959}
957960else
958961{
959962str = quote_postgres (PGTYPESdate_to_asc (* (Date * )(var -> value )),stmt -> lineno );
960963slen = strlen (str );
961964
962- if (!(mallocedval = ECPGalloc (slen + 1 ,stmt -> lineno )))
965+ if (!(mallocedval = ECPGalloc (slen + sizeof ( "date " ) + 1 ,stmt -> lineno )))
963966return false;
964967
965- strncpy (mallocedval ,str ,slen );
966- mallocedval [slen ]= '\0' ;
968+ strcpy (mallocedval ,"date " );
969+ /* also copy trailing '\0' */
970+ strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
967971}
968972
969973* tobeinserted_p = mallocedval ;
@@ -984,27 +988,29 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
984988str = quote_postgres (PGTYPEStimestamp_to_asc (* (Timestamp * )((var + var -> offset * element )-> value )),stmt -> lineno );
985989slen = strlen (str );
986990
987- if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + 5 ,stmt -> lineno )))
991+ if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + sizeof ( "array [], timestamp " ) ,stmt -> lineno )))
988992return false;
989993
990994if (!element )
991- strcpy (mallocedval ,"'{ " );
995+ strcpy (mallocedval ,"array [ " );
992996
997+ strcpy (mallocedval + strlen (mallocedval ),"timestamp " );
993998strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
994999strcpy (mallocedval + strlen (mallocedval ),"," );
9951000}
996- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
1001+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
9971002}
9981003else
9991004{
10001005str = quote_postgres (PGTYPEStimestamp_to_asc (* (Timestamp * )(var -> value )),stmt -> lineno );
10011006slen = strlen (str );
10021007
1003- if (!(mallocedval = ECPGalloc (slen + 1 ,stmt -> lineno )))
1008+ if (!(mallocedval = ECPGalloc (slen + sizeof ( "timestamp" ) + 1 ,stmt -> lineno )))
10041009return false;
10051010
1006- strncpy (mallocedval ,str ,slen );
1007- mallocedval [slen ]= '\0' ;
1011+ strcpy (mallocedval ,"timestamp " );
1012+ /* also copy trailing '\0' */
1013+ strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
10081014}
10091015
10101016* tobeinserted_p = mallocedval ;