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 $ */
2
2
3
3
/*
4
4
* 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,
543
543
544
544
if (var -> arrsize > 1 )
545
545
{
546
- strcpy (mallocedval ,"'{ " );
546
+ strcpy (mallocedval ,"array [ " );
547
547
548
548
for (element = 0 ;element < var -> arrsize ;element ++ )
549
549
sprintf (mallocedval + strlen (mallocedval ),"%hd," , ((short * )var -> value )[element ]);
550
550
551
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
551
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
552
552
}
553
553
else
554
554
sprintf (mallocedval ,"%hd" ,* ((short * )var -> value ));
@@ -563,12 +563,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
563
563
564
564
if (var -> arrsize > 1 )
565
565
{
566
- strcpy (mallocedval ,"'{ " );
566
+ strcpy (mallocedval ,"array [ " );
567
567
568
568
for (element = 0 ;element < var -> arrsize ;element ++ )
569
569
sprintf (mallocedval + strlen (mallocedval ),"%d," , ((int * )var -> value )[element ]);
570
570
571
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
571
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
572
572
}
573
573
else
574
574
sprintf (mallocedval ,"%d" ,* ((int * )var -> value ));
@@ -583,12 +583,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
583
583
584
584
if (var -> arrsize > 1 )
585
585
{
586
- strcpy (mallocedval ,"'{ " );
586
+ strcpy (mallocedval ,"array [ " );
587
587
588
588
for (element = 0 ;element < var -> arrsize ;element ++ )
589
589
sprintf (mallocedval + strlen (mallocedval ),"%hu," , ((unsigned short * )var -> value )[element ]);
590
590
591
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
591
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
592
592
}
593
593
else
594
594
sprintf (mallocedval ,"%hu" ,* ((unsigned short * )var -> value ));
@@ -603,12 +603,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
603
603
604
604
if (var -> arrsize > 1 )
605
605
{
606
- strcpy (mallocedval ,"'{ " );
606
+ strcpy (mallocedval ,"array [ " );
607
607
608
608
for (element = 0 ;element < var -> arrsize ;element ++ )
609
609
sprintf (mallocedval + strlen (mallocedval ),"%u," , ((unsignedint * )var -> value )[element ]);
610
610
611
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
611
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
612
612
}
613
613
else
614
614
sprintf (mallocedval ,"%u" ,* ((unsignedint * )var -> value ));
@@ -623,12 +623,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
623
623
624
624
if (var -> arrsize > 1 )
625
625
{
626
- strcpy (mallocedval ,"'{ " );
626
+ strcpy (mallocedval ,"array [ " );
627
627
628
628
for (element = 0 ;element < var -> arrsize ;element ++ )
629
629
sprintf (mallocedval + strlen (mallocedval ),"%ld," , ((long * )var -> value )[element ]);
630
630
631
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
631
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
632
632
}
633
633
else
634
634
sprintf (mallocedval ,"%ld" ,* ((long * )var -> value ));
@@ -643,12 +643,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
643
643
644
644
if (var -> arrsize > 1 )
645
645
{
646
- strcpy (mallocedval ,"'{ " );
646
+ strcpy (mallocedval ,"array [ " );
647
647
648
648
for (element = 0 ;element < var -> arrsize ;element ++ )
649
649
sprintf (mallocedval + strlen (mallocedval ),"%lu," , ((unsigned long * )var -> value )[element ]);
650
650
651
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
651
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
652
652
}
653
653
else
654
654
sprintf (mallocedval ,"%lu" ,* ((unsigned long * )var -> value ));
@@ -658,17 +658,17 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
658
658
break ;
659
659
#ifdef HAVE_LONG_LONG_INT_64
660
660
case ECPGt_long_long :
661
- if (!(mallocedval = ECPGalloc (var -> arrsize * 25 ,stmt -> lineno )))
661
+ if (!(mallocedval = ECPGalloc (var -> arrsize * 30 ,stmt -> lineno )))
662
662
return false;
663
663
664
664
if (var -> arrsize > 1 )
665
665
{
666
- strcpy (mallocedval ,"'{ " );
666
+ strcpy (mallocedval ,"array [ " );
667
667
668
668
for (element = 0 ;element < var -> arrsize ;element ++ )
669
669
sprintf (mallocedval + strlen (mallocedval ),"%lld," , ((long long * )var -> value )[element ]);
670
670
671
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
671
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
672
672
}
673
673
else
674
674
sprintf (mallocedval ,"%lld" ,* ((long long * )var -> value ));
@@ -678,17 +678,17 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
678
678
break ;
679
679
680
680
case ECPGt_unsigned_long_long :
681
- if (!(mallocedval = ECPGalloc (var -> arrsize * 25 ,stmt -> lineno )))
681
+ if (!(mallocedval = ECPGalloc (var -> arrsize * 30 ,stmt -> lineno )))
682
682
return false;
683
683
684
684
if (var -> arrsize > 1 )
685
685
{
686
- strcpy (mallocedval ,"'{ " );
686
+ strcpy (mallocedval ,"array [ " );
687
687
688
688
for (element = 0 ;element < var -> arrsize ;element ++ )
689
689
sprintf (mallocedval + strlen (mallocedval ),"%llu," , ((unsigned long long * )var -> value )[element ]);
690
690
691
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
691
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
692
692
}
693
693
else
694
694
sprintf (mallocedval ,"%llu" ,* ((unsigned long long * )var -> value ));
@@ -698,17 +698,17 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
698
698
break ;
699
699
#endif /* HAVE_LONG_LONG_INT_64 */
700
700
case ECPGt_float :
701
- if (!(mallocedval = ECPGalloc (var -> arrsize * 21 ,stmt -> lineno )))
701
+ if (!(mallocedval = ECPGalloc (var -> arrsize * 25 ,stmt -> lineno )))
702
702
return false;
703
703
704
704
if (var -> arrsize > 1 )
705
705
{
706
- strcpy (mallocedval ,"'{ " );
706
+ strcpy (mallocedval ,"array [ " );
707
707
708
708
for (element = 0 ;element < var -> arrsize ;element ++ )
709
709
sprintf (mallocedval + strlen (mallocedval ),"%.14g," , ((float * )var -> value )[element ]);
710
710
711
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
711
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
712
712
}
713
713
else
714
714
sprintf (mallocedval ,"%.14g" ,* ((float * )var -> value ));
@@ -718,17 +718,17 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
718
718
break ;
719
719
720
720
case ECPGt_double :
721
- if (!(mallocedval = ECPGalloc (var -> arrsize * 21 ,stmt -> lineno )))
721
+ if (!(mallocedval = ECPGalloc (var -> arrsize * 25 ,stmt -> lineno )))
722
722
return false;
723
723
724
724
if (var -> arrsize > 1 )
725
725
{
726
- strcpy (mallocedval ,"'{ " );
726
+ strcpy (mallocedval ,"array [ " );
727
727
728
728
for (element = 0 ;element < var -> arrsize ;element ++ )
729
729
sprintf (mallocedval + strlen (mallocedval ),"%.14g," , ((double * )var -> value )[element ]);
730
730
731
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
731
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
732
732
}
733
733
else
734
734
sprintf (mallocedval ,"%.14g" ,* ((double * )var -> value ));
@@ -738,12 +738,12 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
738
738
break ;
739
739
740
740
case ECPGt_bool :
741
- if (!(mallocedval = ECPGalloc (var -> arrsize * 2 ,stmt -> lineno )))
741
+ if (!(mallocedval = ECPGalloc (var -> arrsize + sizeof ( "array []" ) ,stmt -> lineno )))
742
742
return false;
743
743
744
744
if (var -> arrsize > 1 )
745
745
{
746
- strcpy (mallocedval ,"'{ " );
746
+ strcpy (mallocedval ,"array [ " );
747
747
748
748
if (var -> offset == sizeof (char ))
749
749
for (element = 0 ;element < var -> arrsize ;element ++ )
@@ -759,7 +759,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
759
759
else
760
760
ECPGraise (stmt -> lineno ,ECPG_CONVERT_BOOL ,"different size" );
761
761
762
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
762
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
763
763
}
764
764
else
765
765
{
@@ -854,16 +854,16 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
854
854
PGTYPESnumeric_free (nval );
855
855
slen = strlen (str );
856
856
857
- if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + 5 ,stmt -> lineno )))
857
+ if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + sizeof ( "array [] " ) ,stmt -> lineno )))
858
858
return false;
859
859
860
860
if (!element )
861
- strcpy (mallocedval ,"'{ " );
861
+ strcpy (mallocedval ,"array [ " );
862
862
863
863
strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
864
864
strcpy (mallocedval + strlen (mallocedval ),"," );
865
865
}
866
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
866
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
867
867
}
868
868
else
869
869
{
@@ -902,27 +902,29 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
902
902
str = quote_postgres (PGTYPESinterval_to_asc ((Interval * )((var + var -> offset * element )-> value )),stmt -> lineno );
903
903
slen = strlen (str );
904
904
905
- if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + 5 ,stmt -> lineno )))
905
+ if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + sizeof ( "array [],interval " ) ,stmt -> lineno )))
906
906
return false;
907
907
908
908
if (!element )
909
- strcpy (mallocedval ,"'{" );
910
-
909
+ strcpy (mallocedval ,"array [" );
910
+
911
+ strcpy (mallocedval + strlen (mallocedval ),"interval " );
911
912
strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
912
913
strcpy (mallocedval + strlen (mallocedval ),"," );
913
914
}
914
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
915
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
915
916
}
916
917
else
917
918
{
918
919
str = quote_postgres (PGTYPESinterval_to_asc ((Interval * )(var -> value )),stmt -> lineno );
919
920
slen = strlen (str );
920
921
921
- if (!(mallocedval = ECPGalloc (slen + 1 ,stmt -> lineno )))
922
+ if (!(mallocedval = ECPGalloc (slen + sizeof ( "interval " ) + 1 ,stmt -> lineno )))
922
923
return false;
923
924
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 );
926
928
}
927
929
928
930
* tobeinserted_p = mallocedval ;
@@ -943,27 +945,29 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
943
945
str = quote_postgres (PGTYPESdate_to_asc (* (Date * )((var + var -> offset * element )-> value )),stmt -> lineno );
944
946
slen = strlen (str );
945
947
946
- if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + 5 ,stmt -> lineno )))
948
+ if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + sizeof ( "array [],date " ) ,stmt -> lineno )))
947
949
return false;
948
950
949
951
if (!element )
950
- strcpy (mallocedval ,"'{ " );
952
+ strcpy (mallocedval ,"array [ " );
951
953
954
+ strcpy (mallocedval + strlen (mallocedval ),"date " );
952
955
strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
953
956
strcpy (mallocedval + strlen (mallocedval ),"," );
954
957
}
955
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
958
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
956
959
}
957
960
else
958
961
{
959
962
str = quote_postgres (PGTYPESdate_to_asc (* (Date * )(var -> value )),stmt -> lineno );
960
963
slen = strlen (str );
961
964
962
- if (!(mallocedval = ECPGalloc (slen + 1 ,stmt -> lineno )))
965
+ if (!(mallocedval = ECPGalloc (slen + sizeof ( "date " ) + 1 ,stmt -> lineno )))
963
966
return false;
964
967
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 );
967
971
}
968
972
969
973
* tobeinserted_p = mallocedval ;
@@ -984,27 +988,29 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
984
988
str = quote_postgres (PGTYPEStimestamp_to_asc (* (Timestamp * )((var + var -> offset * element )-> value )),stmt -> lineno );
985
989
slen = strlen (str );
986
990
987
- if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + 5 ,stmt -> lineno )))
991
+ if (!(mallocedval = ECPGrealloc (mallocedval ,strlen (mallocedval )+ slen + sizeof ( "array [], timestamp " ) ,stmt -> lineno )))
988
992
return false;
989
993
990
994
if (!element )
991
- strcpy (mallocedval ,"'{ " );
995
+ strcpy (mallocedval ,"array [ " );
992
996
997
+ strcpy (mallocedval + strlen (mallocedval ),"timestamp " );
993
998
strncpy (mallocedval + strlen (mallocedval ),str ,slen + 1 );
994
999
strcpy (mallocedval + strlen (mallocedval ),"," );
995
1000
}
996
- strcpy (mallocedval + strlen (mallocedval )- 1 ,"}' " );
1001
+ strcpy (mallocedval + strlen (mallocedval )- 1 ,"] " );
997
1002
}
998
1003
else
999
1004
{
1000
1005
str = quote_postgres (PGTYPEStimestamp_to_asc (* (Timestamp * )(var -> value )),stmt -> lineno );
1001
1006
slen = strlen (str );
1002
1007
1003
- if (!(mallocedval = ECPGalloc (slen + 1 ,stmt -> lineno )))
1008
+ if (!(mallocedval = ECPGalloc (slen + sizeof ( "timestamp" ) + 1 ,stmt -> lineno )))
1004
1009
return false;
1005
1010
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 );
1008
1014
}
1009
1015
1010
1016
* tobeinserted_p = mallocedval ;