1 /* Processed by ecpg (regression mode) */
2 /* These include files are added by the preprocessor */
3 #include <ecpglib.h>
4 #include <ecpgerrno.h>
5 #include <sqlca.h>
6 /* End of automatic include section */
7 #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))
8 
9 #line 1 "dt_test2.pgc"
10 #include <stdio.h>
11 #include <string.h>
12 #include <stdlib.h>
13 #include <limits.h>
14 #include <pgtypes_date.h>
15 #include <pgtypes_timestamp.h>
16 
17 
18 #line 1 "regression.h"
19 
20 
21 
22 
23 
24 
25 #line 8 "dt_test2.pgc"
26 
27 
28 char *dates[] = { "19990108foobar",
29 				  "19990108 foobar",
30 				  "1999-01-08 foobar",
31 				  "January 8, 1999",
32 				  "1999-01-08",
33 				  "1/8/1999",
34 				  "1/18/1999",
35 				  "01/02/03",
36 				  "1999-Jan-08",
37 				  "Jan-08-1999",
38 				  "08-Jan-1999",
39 				  "99-Jan-08",
40 				  "08-Jan-99",
41 				  "08-Jan-06",
42 				  "Jan-08-99",
43 				  "19990108",
44 				  "990108",
45 				  "1999.008",
46 				  "J2451187",
47 				  "January 8, 99 BC",
48 				  /*
49 				   * Maximize space usage in ParseDateTime() with 25
50 				   * (MAXDATEFIELDS) fields and 128 (MAXDATELEN) total length.
51 				   */
52 				  "........................Xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
53 				  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
54 				  /* 26 fields */
55 				  ".........................aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
56 				  "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
57 				  NULL };
58 
59 /* do not conflict with libc "times" symbol */
60 static char *times[] = { "0:04",
61 				  "1:59 PDT",
62 				  "13:24:40 -8:00",
63 				  "13:24:40.495+3",
64 				  "13:24:40.123456123+3",
65 				  NULL };
66 
67 char *intervals[] = { "1 minute",
68 					  "1 12:59:10",
69 					  "2 day 12 hour 59 minute 10 second",
70 					  "1 days 12 hrs 59 mins 10 secs",
71 					  "1 days 1 hours 1 minutes 1 seconds",
72 					  "1 year 59 mins",
73 					  "1 year 59 mins foobar",
74 					  NULL };
75 
76 int
main(void)77 main(void)
78 {
79 	/* exec sql begin declare section */
80 
81 
82 
83 
84 
85 
86 #line 62 "dt_test2.pgc"
87  date date1 ;
88 
89 #line 63 "dt_test2.pgc"
90  timestamp ts1 , ts2 ;
91 
92 #line 64 "dt_test2.pgc"
93  char * text ;
94 
95 #line 65 "dt_test2.pgc"
96  interval * i1 ;
97 
98 #line 66 "dt_test2.pgc"
99  date * dc ;
100 /* exec sql end declare section */
101 #line 67 "dt_test2.pgc"
102 
103 
104 	int i, j;
105 	char *endptr;
106 
107 	ECPGdebug(1, stderr);
108 
109 	ts1 = PGTYPEStimestamp_from_asc("2003-12-04 17:34:29", NULL);
110 	text = PGTYPEStimestamp_to_asc(ts1);
111 
112 	printf("timestamp: %s\n", text);
113 	PGTYPESchar_free(text);
114 
115 	date1 = PGTYPESdate_from_timestamp(ts1);
116 	dc = PGTYPESdate_new();
117 	*dc = date1;
118 	text = PGTYPESdate_to_asc(*dc);
119 	printf("Date of timestamp: %s\n", text);
120 	PGTYPESchar_free(text);
121 	PGTYPESdate_free(dc);
122 
123 	for (i = 0; dates[i]; i++)
124 	{
125 		bool err = false;
126 		date1 = PGTYPESdate_from_asc(dates[i], &endptr);
127 		if (date1 == INT_MIN) {
128 			err = true;
129 		}
130 		text = PGTYPESdate_to_asc(date1);
131 		printf("Date[%d]: %s (%c - %c)\n",
132 					i, err ? "-" : text,
133 					endptr ? 'N' : 'Y',
134 					err ? 'T' : 'F');
135 		PGTYPESchar_free(text);
136 		if (!err)
137 		{
138 			for (j = 0; times[j]; j++)
139 			{
140 				int length = strlen(dates[i])
141 						+ 1
142 						+ strlen(times[j])
143 						+ 1;
144 				char* t = malloc(length);
145 				sprintf(t, "%s %s", dates[i], times[j]);
146 				ts1 = PGTYPEStimestamp_from_asc(t, NULL);
147 				text = PGTYPEStimestamp_to_asc(ts1);
148 				printf("TS[%d,%d]: %s\n",
149 				       i, j, errno ? "-" : text);
150 				PGTYPESchar_free(text);
151 				free(t);
152 			}
153 		}
154 	}
155 
156 	ts1 = PGTYPEStimestamp_from_asc("2004-04-04 23:23:23", NULL);
157 
158 	for (i = 0; intervals[i]; i++)
159 	{
160 		interval *ic;
161 		i1 = PGTYPESinterval_from_asc(intervals[i], &endptr);
162 		if (*endptr)
163 			printf("endptr set to %s\n", endptr);
164 		if (!i1)
165 		{
166 			printf("Error parsing interval %d\n", i);
167 			continue;
168 		}
169 		j = PGTYPEStimestamp_add_interval(&ts1, i1, &ts2);
170 		if (j < 0)
171 			continue;
172 		text = PGTYPESinterval_to_asc(i1);
173 		printf("interval[%d]: %s\n", i, text ? text : "-");
174 		PGTYPESchar_free(text);
175 
176 		ic = PGTYPESinterval_new();
177 		PGTYPESinterval_copy(i1, ic);
178 		text = PGTYPESinterval_to_asc(i1);
179 		printf("interval_copy[%d]: %s\n", i, text ? text : "-");
180 		PGTYPESchar_free(text);
181 		PGTYPESinterval_free(ic);
182 		PGTYPESinterval_free(i1);
183 	}
184 
185 	return (0);
186 }
187