1
- /* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.58 2006/08/09 09:08:31 meskes Exp $ */
1
+ /* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.59 2006/08/18 16:30:53 meskes Exp $ */
2
2
3
3
/*
4
4
* The aim is to get a simpler inteface to the database routines.
@@ -572,19 +572,21 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
572
572
}
573
573
if (* * tobeinserted_p == '\0' )
574
574
{
575
+ int asize = var -> arrsize ? var -> arrsize : 1 ;
576
+
575
577
switch (var -> type )
576
578
{
577
579
int element ;
578
580
579
581
case ECPGt_short :
580
- if (!(mallocedval = ECPGalloc (var -> arrsize * 20 , lineno )))
582
+ if (!(mallocedval = ECPGalloc (asize * 20 , lineno )))
581
583
return false;
582
584
583
- if (var -> arrsize > 1 )
585
+ if (asize > 1 )
584
586
{
585
587
strcpy (mallocedval , "array [" );
586
588
587
- for (element = 0 ; element < var -> arrsize ; element ++ )
589
+ for (element = 0 ; element < asize ; element ++ )
588
590
sprintf (mallocedval + strlen (mallocedval ), "%hd," , ((short * ) var -> value )[element ]);
589
591
590
592
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
@@ -597,14 +599,14 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
597
599
break ;
598
600
599
601
case ECPGt_int :
600
- if (!(mallocedval = ECPGalloc (var -> arrsize * 20 , lineno )))
602
+ if (!(mallocedval = ECPGalloc (asize * 20 , lineno )))
601
603
return false;
602
604
603
- if (var -> arrsize > 1 )
605
+ if (asize > 1 )
604
606
{
605
607
strcpy (mallocedval , "array [" );
606
608
607
- for (element = 0 ; element < var -> arrsize ; element ++ )
609
+ for (element = 0 ; element < asize ; element ++ )
608
610
sprintf (mallocedval + strlen (mallocedval ), "%d," , ((int * ) var -> value )[element ]);
609
611
610
612
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
@@ -617,14 +619,14 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
617
619
break ;
618
620
619
621
case ECPGt_unsigned_short :
620
- if (!(mallocedval = ECPGalloc (var -> arrsize * 20 , lineno )))
622
+ if (!(mallocedval = ECPGalloc (asize * 20 , lineno )))
621
623
return false;
622
624
623
- if (var -> arrsize > 1 )
625
+ if (asize > 1 )
624
626
{
625
627
strcpy (mallocedval , "array [" );
626
628
627
- for (element = 0 ; element < var -> arrsize ; element ++ )
629
+ for (element = 0 ; element < asize ; element ++ )
628
630
sprintf (mallocedval + strlen (mallocedval ), "%hu," , ((unsigned short * ) var -> value )[element ]);
629
631
630
632
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
@@ -637,14 +639,14 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
637
639
break ;
638
640
639
641
case ECPGt_unsigned_int :
640
- if (!(mallocedval = ECPGalloc (var -> arrsize * 20 , lineno )))
642
+ if (!(mallocedval = ECPGalloc (asize * 20 , lineno )))
641
643
return false;
642
644
643
- if (var -> arrsize > 1 )
645
+ if (asize > 1 )
644
646
{
645
647
strcpy (mallocedval , "array [" );
646
648
647
- for (element = 0 ; element < var -> arrsize ; element ++ )
649
+ for (element = 0 ; element < asize ; element ++ )
648
650
sprintf (mallocedval + strlen (mallocedval ), "%u," , ((unsigned int * ) var -> value )[element ]);
649
651
650
652
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
@@ -657,14 +659,14 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
657
659
break ;
658
660
659
661
case ECPGt_long :
660
- if (!(mallocedval = ECPGalloc (var -> arrsize * 20 , lineno )))
662
+ if (!(mallocedval = ECPGalloc (asize * 20 , lineno )))
661
663
return false;
662
664
663
- if (var -> arrsize > 1 )
665
+ if (asize > 1 )
664
666
{
665
667
strcpy (mallocedval , "array [" );
666
668
667
- for (element = 0 ; element < var -> arrsize ; element ++ )
669
+ for (element = 0 ; element < asize ; element ++ )
668
670
sprintf (mallocedval + strlen (mallocedval ), "%ld," , ((long * ) var -> value )[element ]);
669
671
670
672
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
@@ -677,14 +679,14 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
677
679
break ;
678
680
679
681
case ECPGt_unsigned_long :
680
- if (!(mallocedval = ECPGalloc (var -> arrsize * 20 , lineno )))
682
+ if (!(mallocedval = ECPGalloc (asize * 20 , lineno )))
681
683
return false;
682
684
683
- if (var -> arrsize > 1 )
685
+ if (asize > 1 )
684
686
{
685
687
strcpy (mallocedval , "array [" );
686
688
687
- for (element = 0 ; element < var -> arrsize ; element ++ )
689
+ for (element = 0 ; element < asize ; element ++ )
688
690
sprintf (mallocedval + strlen (mallocedval ), "%lu," , ((unsigned long * ) var -> value )[element ]);
689
691
690
692
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
@@ -697,14 +699,14 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
697
699
break ;
698
700
#ifdef HAVE_LONG_LONG_INT_64
699
701
case ECPGt_long_long :
700
- if (!(mallocedval = ECPGalloc (var -> arrsize * 30 , lineno )))
702
+ if (!(mallocedval = ECPGalloc (asize * 30 , lineno )))
701
703
return false;
702
704
703
- if (var -> arrsize > 1 )
705
+ if (asize > 1 )
704
706
{
705
707
strcpy (mallocedval , "array [" );
706
708
707
- for (element = 0 ; element < var -> arrsize ; element ++ )
709
+ for (element = 0 ; element < asize ; element ++ )
708
710
sprintf (mallocedval + strlen (mallocedval ), "%lld," , ((long long * ) var -> value )[element ]);
709
711
710
712
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
@@ -717,14 +719,14 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
717
719
break ;
718
720
719
721
case ECPGt_unsigned_long_long :
720
- if (!(mallocedval = ECPGalloc (var -> arrsize * 30 , lineno )))
722
+ if (!(mallocedval = ECPGalloc (asize * 30 , lineno )))
721
723
return false;
722
724
723
- if (var -> arrsize > 1 )
725
+ if (asize > 1 )
724
726
{
725
727
strcpy (mallocedval , "array [" );
726
728
727
- for (element = 0 ; element < var -> arrsize ; element ++ )
729
+ for (element = 0 ; element < asize ; element ++ )
728
730
sprintf (mallocedval + strlen (mallocedval ), "%llu," , ((unsigned long long * ) var -> value )[element ]);
729
731
730
732
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
@@ -737,14 +739,14 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
737
739
break ;
738
740
#endif /* HAVE_LONG_LONG_INT_64 */
739
741
case ECPGt_float :
740
- if (!(mallocedval = ECPGalloc (var -> arrsize * 25 , lineno )))
742
+ if (!(mallocedval = ECPGalloc (asize * 25 , lineno )))
741
743
return false;
742
744
743
- if (var -> arrsize > 1 )
745
+ if (asize > 1 )
744
746
{
745
747
strcpy (mallocedval , "array [" );
746
748
747
- for (element = 0 ; element < var -> arrsize ; element ++ )
749
+ for (element = 0 ; element < asize ; element ++ )
748
750
sprintf (mallocedval + strlen (mallocedval ), "%.14g," , ((float * ) var -> value )[element ]);
749
751
750
752
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
@@ -757,14 +759,14 @@ ECPGstore_input(const int lineno, const bool force_indicator, const struct varia
757
759
break ;
758
760
759
761
case ECPGt_double :
760
- if (!(mallocedval = ECPGalloc (var -> arrsize * 25 , lineno )))
762
+ if (!(mallocedval = ECPGalloc (asize * 25 , lineno )))
761
763
return false;
762
764
763
- if (var -> arrsize > 1 )
765
+ if (asize > 1 )
764
766
{
765
767
strcpy (mallocedval , "array [" );
766
768
767
- for (element = 0 ; element < var -> arrsize ; element ++ )
769
+ for (element = 0 ; element < asize ; element ++ )
768
770
sprintf (mallocedval + strlen (mallocedval ), "%.14g," , ((double * ) var -> value )[element ]);
769
771
770
772
strcpy (mallocedval + strlen (mallocedval ) - 1 , "]" );
0 commit comments