From 0f0d6765ce0b10b989df60d89f2f6f4661c72218 Mon Sep 17 00:00:00 2001
From: Michael Meskes <meskes@postgresql.org>
Date: Thu, 14 Sep 2006 08:02:38 +0000
Subject: [PATCH] Added missing constuctor/destructor for interval and date.

---
 src/interfaces/ecpg/ChangeLog                 |  5 +++++
 src/interfaces/ecpg/include/pgtypes_date.h    |  4 +++-
 .../ecpg/include/pgtypes_interval.h           |  4 +++-
 src/interfaces/ecpg/pgtypeslib/datetime.c     | 17 ++++++++++++++++-
 src/interfaces/ecpg/pgtypeslib/interval.c     | 17 ++++++++++++++++-
 .../ecpg/test/expected/pgtypeslib-dt_test2.c  | 19 +++++++++++++++++--
 .../test/expected/pgtypeslib-dt_test2.stdout  |  6 ++++++
 .../ecpg/test/pgtypeslib/dt_test2.pgc         | 14 +++++++++++++-
 8 files changed, 79 insertions(+), 7 deletions(-)

diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog
index 6f698f4cbd8..5e4524e791a 100644
--- a/src/interfaces/ecpg/ChangeLog
+++ b/src/interfaces/ecpg/ChangeLog
@@ -2144,5 +2144,10 @@ Tu 5. Sep 11:49:08 CEST 2006
 	- Fixed port number setting in regression suite.
 	- Added some interval checks to regression suite.
 	- Started to cleanup complex tests.
+
+Th 14. Sep 09:47:03 CEST 2006
+
+	- Completely removed complex tests.
+	- Added missing constuctor/destructor for interval and date.
 	- Set ecpg library version to 5.2.
 	- Set ecpg version to 4.2.1.
diff --git a/src/interfaces/ecpg/include/pgtypes_date.h b/src/interfaces/ecpg/include/pgtypes_date.h
index 10fe53c8c8c..2afc97198e2 100644
--- a/src/interfaces/ecpg/include/pgtypes_date.h
+++ b/src/interfaces/ecpg/include/pgtypes_date.h
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/pgtypes_date.h,v 1.9 2006/03/11 04:38:39 momjian Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/pgtypes_date.h,v 1.10 2006/09/14 08:02:38 meskes Exp $ */
 
 #ifndef PGTYPES_DATETIME
 #define PGTYPES_DATETIME
@@ -12,6 +12,8 @@ extern		"C"
 {
 #endif
 
+extern date *PGTYPESdate_new(void);
+extern void  PGTYPESdate_free(date *);
 extern date PGTYPESdate_from_asc(char *, char **);
 extern char *PGTYPESdate_to_asc(date);
 extern date PGTYPESdate_from_timestamp(timestamp);
diff --git a/src/interfaces/ecpg/include/pgtypes_interval.h b/src/interfaces/ecpg/include/pgtypes_interval.h
index ad427c4887e..b2ab1a871ed 100644
--- a/src/interfaces/ecpg/include/pgtypes_interval.h
+++ b/src/interfaces/ecpg/include/pgtypes_interval.h
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/pgtypes_interval.h,v 1.11 2006/08/24 10:48:21 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/include/pgtypes_interval.h,v 1.12 2006/09/14 08:02:38 meskes Exp $ */
 
 #ifndef PGTYPES_INTERVAL
 #define PGTYPES_INTERVAL
@@ -49,6 +49,8 @@ extern		"C"
 {
 #endif
 
+extern interval *PGTYPESinterval_new(void);
+extern void PGTYPESinterval_free(interval *);
 extern interval *PGTYPESinterval_from_asc(char *, char **);
 extern char *PGTYPESinterval_to_asc(interval *);
 extern int	PGTYPESinterval_copy(interval *, interval *);
diff --git a/src/interfaces/ecpg/pgtypeslib/datetime.c b/src/interfaces/ecpg/pgtypeslib/datetime.c
index 095209a4fcb..e323d579e78 100644
--- a/src/interfaces/ecpg/pgtypeslib/datetime.c
+++ b/src/interfaces/ecpg/pgtypeslib/datetime.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/datetime.c,v 1.30 2006/08/15 06:40:19 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/datetime.c,v 1.31 2006/09/14 08:02:38 meskes Exp $ */
 
 #include "postgres_fe.h"
 
@@ -12,6 +12,21 @@
 #include "pgtypes_error.h"
 #include "pgtypes_date.h"
 
+date *
+PGTYPESdate_new(void)
+{
+	date *result;
+	result = (date *) pgtypes_alloc(sizeof(date));
+	/* result can be NULL if we run out of memory */
+	return result;
+}
+
+void
+PGTYPESdate_free(date *d)
+{
+	free(d);
+}
+
 date
 PGTYPESdate_from_timestamp(timestamp dt)
 {
diff --git a/src/interfaces/ecpg/pgtypeslib/interval.c b/src/interfaces/ecpg/pgtypeslib/interval.c
index d68866856c3..b49267eb62c 100644
--- a/src/interfaces/ecpg/pgtypeslib/interval.c
+++ b/src/interfaces/ecpg/pgtypeslib/interval.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/interval.c,v 1.34 2006/09/05 12:17:09 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/interval.c,v 1.35 2006/09/14 08:02:38 meskes Exp $ */
 
 #include "postgres_fe.h"
 #include <time.h>
@@ -753,6 +753,21 @@ tm2interval(struct tm * tm, fsec_t fsec, interval * span)
 	return 0;
 }	/* tm2interval() */
 
+interval *
+PGTYPESinterval_new(void)
+{
+	interval *result;
+	result = (interval *) pgtypes_alloc(sizeof(interval));
+	/* result can be NULL if we run out of memory */
+	return result;
+}
+
+void
+PGTYPESinterval_free(interval *intvl)
+{
+	free(intvl);
+}
+
 interval *
 PGTYPESinterval_from_asc(char *str, char **endptr)
 {
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
index c92f354ec45..e5388b6fa8d 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c
@@ -70,6 +70,7 @@ main(void)
 		  
 		 
 		 
+		 
 	
 #line 51 "dt_test2.pgc"
  date  date1    ;
@@ -82,8 +83,11 @@ main(void)
  
 #line 54 "dt_test2.pgc"
  interval * i1    ;
-/* exec sql end declare section */
+ 
 #line 55 "dt_test2.pgc"
+ date * dc    ;
+/* exec sql end declare section */
+#line 56 "dt_test2.pgc"
 
 
 	int i, j;
@@ -98,9 +102,12 @@ main(void)
 	free(text);
 
 	date1 = PGTYPESdate_from_timestamp(ts1);
-	text = PGTYPESdate_to_asc(date1);
+	dc = PGTYPESdate_new();
+	*dc = date1;
+	text = PGTYPESdate_to_asc(*dc);
 	printf("Date of timestamp: %s\n", text);
 	free(text);
+	PGTYPESdate_free(dc);
 
 	for (i = 0; dates[i]; i++)
 	{
@@ -139,6 +146,7 @@ main(void)
 
 	for (i = 0; intervals[i]; i++)
 	{
+		interval *ic;
 		i1 = PGTYPESinterval_from_asc(intervals[i], &endptr);
 		if (*endptr)
 			printf("endptr set to %s\n", endptr);
@@ -153,6 +161,13 @@ main(void)
 		text = PGTYPESinterval_to_asc(i1);
 		printf("interval[%d]: %s\n", i, text ? text : "-");
 		free(text);
+
+		ic = PGTYPESinterval_new();
+		PGTYPESinterval_copy(i1, ic);
+		text = PGTYPESinterval_to_asc(i1);
+		printf("interval_copy[%d]: %s\n", i, text ? text : "-");
+		free(text);
+		PGTYPESinterval_free(ic);
 	}
 
 	return (0);
diff --git a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout
index 1a40893aed7..24e9d26dfeb 100644
--- a/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout
+++ b/src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.stdout
@@ -88,9 +88,15 @@ TS[19,0]: 0099-01-08 00:04:00 BC
 TS[19,1]: 0099-01-08 01:59:00 BC
 TS[19,2]: 0099-01-08 13:24:40 BC
 interval[0]: @ 1 min
+interval_copy[0]: @ 1 min
 interval[1]: @ 1 day 12 hours 59 mins 10 secs
+interval_copy[1]: @ 1 day 12 hours 59 mins 10 secs
 interval[2]: @ 2 days 12 hours 59 mins 10 secs
+interval_copy[2]: @ 2 days 12 hours 59 mins 10 secs
 interval[3]: @ 1 day 12 hours 59 mins 10 secs
+interval_copy[3]: @ 1 day 12 hours 59 mins 10 secs
 interval[4]: @ 1 day 1 hour 1 min 1 sec
+interval_copy[4]: @ 1 day 1 hour 1 min 1 sec
 interval[5]: @ 1 year 59 mins
+interval_copy[5]: @ 1 year 59 mins
 Error parsing interval 6
diff --git a/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc b/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
index 09a95f7aba9..08d1d6c412f 100644
--- a/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
+++ b/src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc
@@ -52,6 +52,7 @@ main(void)
 		timestamp ts1, ts2;
 		char *text;
 		interval *i1;
+		date *dc;
 	exec sql end declare section;
 
 	int i, j;
@@ -66,9 +67,12 @@ main(void)
 	free(text);
 
 	date1 = PGTYPESdate_from_timestamp(ts1);
-	text = PGTYPESdate_to_asc(date1);
+	dc = PGTYPESdate_new();
+	*dc = date1;
+	text = PGTYPESdate_to_asc(*dc);
 	printf("Date of timestamp: %s\n", text);
 	free(text);
+	PGTYPESdate_free(dc);
 
 	for (i = 0; dates[i]; i++)
 	{
@@ -107,6 +111,7 @@ main(void)
 
 	for (i = 0; intervals[i]; i++)
 	{
+		interval *ic;
 		i1 = PGTYPESinterval_from_asc(intervals[i], &endptr);
 		if (*endptr)
 			printf("endptr set to %s\n", endptr);
@@ -121,6 +126,13 @@ main(void)
 		text = PGTYPESinterval_to_asc(i1);
 		printf("interval[%d]: %s\n", i, text ? text : "-");
 		free(text);
+
+		ic = PGTYPESinterval_new();
+		PGTYPESinterval_copy(i1, ic);
+		text = PGTYPESinterval_to_asc(i1);
+		printf("interval_copy[%d]: %s\n", i, text ? text : "-");
+		free(text);
+		PGTYPESinterval_free(ic);
 	}
 
 	return (0);
-- 
GitLab