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 /* Needed for informix compatibility */
7 #include <ecpg_informix.h>
8 /* End of automatic include section */
9 #define ECPGdebug(X,Y) ECPGdebug((X)+100,(Y))
10 
11 #line 1 "rfmtdate.pgc"
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <pgtypes_error.h>
15 #include <sqltypes.h>
16 
17 /*
18  * This file tests various forms of date-input/output by means of
19  * rfmtdate / rdefmtdate / rstrdate
20  */
21 
22 
23 static void
24 check_return(int ret);
25 
26 static void
date_test_strdate(const char * input)27 date_test_strdate(const char *input)
28 {
29 	static int i;
30 	date d;
31 	int r, q;
32 	char dbuf[11];
33 
34 	r = rstrdate(input, &d);
35 	printf("r: %d ", r);
36 	if (r == 0)
37 	{
38 		q = rdatestr(d, dbuf);
39 		printf("q: %d ", q);
40 		if (q == 0)
41 		{
42 			printf("date %d: %s\n", i++, dbuf);
43 		}
44 		else
45 			printf("\n");
46 	}
47 	else
48 		check_return(r);
49 }
50 
51 static void
date_test_defmt(const char * fmt,const char * input)52 date_test_defmt(const char *fmt, const char *input)
53 {
54 	static int i;
55 	char dbuf[11];
56 	date d;
57 	int q, r;
58 
59 	r = rdefmtdate(&d, fmt, input);
60 	printf("r: %d ", r);
61 	if (r == 0)
62 	{
63 		q = rdatestr(d, dbuf);
64 		printf("q: %d ", q);
65 		if (q == 0)
66 		{
67 			printf("date %d: %s\n", i++, dbuf);
68 		}
69 		else
70 			printf("\n");
71 	}
72 	else
73 		check_return(r);
74 }
75 
76 static void
date_test_fmt(date d,const char * fmt)77 date_test_fmt(date d, const char *fmt)
78 {
79 	static int i;
80 	char buf[200];
81 	int r;
82 
83 	r = rfmtdate(d, fmt, buf);
84 	printf("r: %d ", r);
85 	if (r != 0)
86 		check_return(r);
87 	else
88 		printf("date: %d: %s\n", i++, buf);
89 }
90 
91 
92 int
main(void)93 main(void)
94 {
95 	short mdy[3] = { 11, 23, 1959 };
96 	char dbuf[11];
97 	date d;
98 	int r;
99 
100 	ECPGdebug(1, stderr);
101 
102 	r = rmdyjul(mdy, &d);
103 	printf("create: r: %d\n", r);
104 	if (r == 0)
105 	{
106 		rdatestr(d, dbuf);
107 		printf("date: %s\n", dbuf);
108 	}
109 
110 	/* input mask is mmddyyyy */
111 	date_test_strdate("12031994");
112 	date_test_strdate("9.6.1994");
113 
114 	date_test_fmt(d, "mmddyy");
115 	date_test_fmt(d, "ddmmyy");
116 	date_test_fmt(d, "yymmdd");
117 	date_test_fmt(d, "yy/mm/dd");
118 	date_test_fmt(d, "yy mm dd");
119 	date_test_fmt(d, "yy.mm.dd");
120 	date_test_fmt(d, ".mm.yyyy.dd.");
121 	date_test_fmt(d, "mmm. dd, yyyy");
122 	date_test_fmt(d, "mmm dd yyyy");
123 	date_test_fmt(d, "yyyy dd mm");
124 	date_test_fmt(d, "ddd, mmm. dd, yyyy");
125 	date_test_fmt(d, "(ddd) mmm. dd, yyyy");
126 
127 	date_test_defmt("ddmmyy", "21-2-54");
128 	date_test_defmt("ddmmyy", "2-12-54");
129 	date_test_defmt("ddmmyy", "20111954");
130 	date_test_defmt("ddmmyy", "130464");
131 	date_test_defmt("mmm.dd.yyyy", "MAR-12-1967");
132 	date_test_defmt("yy/mm/dd", "1954, February 3rd");
133 	date_test_defmt("mmm.dd.yyyy", "041269");
134 	date_test_defmt("yy/mm/dd", "In the year 2525, in the month of July, mankind will be alive on the 28th day");
135 	date_test_defmt("dd-mm-yy", "I said on the 28th of July in the year 2525");
136 	date_test_defmt("mmm.dd.yyyy", "9/14/58");
137 	date_test_defmt("yy/mm/dd", "47/03/29");
138 	date_test_defmt("mmm.dd.yyyy", "oct 28 1975");
139 	date_test_defmt("mmddyy", "Nov 14th, 1985");
140 	/* ok: still contains dd mm yy */
141 	date_test_defmt("bladdfoommbaryybong", "20/11/1954");
142 	/* 1994 is not a leap year, it accepts the date as 01-03-1994 */
143 	date_test_defmt("ddmmyy", "29-02-1994");
144 
145 	/* ECPG_INFORMIX_ENOTDMY, need "dd", "mm" and "yy" */
146 	date_test_defmt("dmy", "20/11/1954");
147 
148 	/* ECPG_INFORMIX_ENOSHORTDATE */
149 	date_test_defmt("ddmmyy", "21254");
150 	date_test_defmt("ddmmyy", "    21254    ");
151 
152 	/* ECPG_INFORMIX_BAD_DAY */
153 	date_test_defmt("ddmmyy", "320494");
154 
155 	/* ECPG_INFORMIX_BAD_MONTH */
156 	date_test_defmt("mm-yyyy-dd", "13-1993-21");
157 
158 	/* ECPG_INFORMIX_BAD_YEAR */
159 	/* ??? */
160 
161 	return 0;
162 }
163 
164 static void
check_return(int ret)165 check_return(int ret)
166 {
167 	switch(ret)
168 	{
169 		case ECPG_INFORMIX_ENOTDMY:
170 			printf("(ECPG_INFORMIX_ENOTDMY)");
171 			break;
172 		case ECPG_INFORMIX_ENOSHORTDATE:
173 			printf("(ECPG_INFORMIX_ENOSHORTDATE)");
174 			break;
175 		case ECPG_INFORMIX_BAD_DAY:
176 			printf("(ECPG_INFORMIX_BAD_DAY)");
177 			break;
178 		case ECPG_INFORMIX_BAD_MONTH:
179 			printf("(ECPG_INFORMIX_BAD_MONTH)");
180 			break;
181 		default:
182 			printf("(unknown ret: %d)", ret);
183 			break;
184 	}
185 	printf("\n");
186 }
187