int PGTYPEStimestamp_sub_interval(timestamp * tin, interval * span, timestamp * tout) { interval tspan; tspan.month = -span->month; tspan.time = -span->time; return PGTYPEStimestamp_add_interval(tin, &tspan, tout); }
int main(void) { /* exec sql begin declare section */ #line 62 "dt_test2.pgc" date date1 ; #line 63 "dt_test2.pgc" timestamp ts1 , ts2 ; #line 64 "dt_test2.pgc" char * text ; #line 65 "dt_test2.pgc" interval * i1 ; #line 66 "dt_test2.pgc" date * dc ; /* exec sql end declare section */ #line 67 "dt_test2.pgc" int i, j; char *endptr; ECPGdebug(1, stderr); ts1 = PGTYPEStimestamp_from_asc("2003-12-04 17:34:29", NULL); text = PGTYPEStimestamp_to_asc(ts1); printf("timestamp: %s\n", text); free(text); date1 = PGTYPESdate_from_timestamp(ts1); 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++) { bool err = false; date1 = PGTYPESdate_from_asc(dates[i], &endptr); if (date1 == INT_MIN) { err = true; } text = PGTYPESdate_to_asc(date1); printf("Date[%d]: %s (%c - %c)\n", i, err ? "-" : text, endptr ? 'N' : 'Y', err ? 'T' : 'F'); free(text); if (!err) { for (j = 0; times[j]; j++) { int length = strlen(dates[i]) + 1 + strlen(times[j]) + 1; char* t = malloc(length); sprintf(t, "%s %s", dates[i], times[j]); ts1 = PGTYPEStimestamp_from_asc(t, NULL); text = PGTYPEStimestamp_to_asc(ts1); printf("TS[%d,%d]: %s\n", i, j, errno ? "-" : text); free(text); free(t); } } } ts1 = PGTYPEStimestamp_from_asc("2004-04-04 23:23:23", NULL); for (i = 0; intervals[i]; i++) { interval *ic; i1 = PGTYPESinterval_from_asc(intervals[i], &endptr); if (*endptr) printf("endptr set to %s\n", endptr); if (!i1) { printf("Error parsing interval %d\n", i); continue; } j = PGTYPEStimestamp_add_interval(&ts1, i1, &ts2); if (j < 0) continue; 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); PGTYPESinterval_free(i1); } return 0; }
int main(void) { /* exec sql begin declare section */ #line 49 "test_informix2.pgc" int c ; #line 50 "test_informix2.pgc" timestamp d ; #line 51 "test_informix2.pgc" timestamp e ; #line 52 "test_informix2.pgc" timestamp maxd ; #line 53 "test_informix2.pgc" char dbname [ 30 ] ; /* exec sql end declare section */ #line 54 "test_informix2.pgc" interval *intvl; /* exec sql whenever sqlerror sqlprint ; */ #line 58 "test_informix2.pgc" ECPGdebug(1, stderr); strcpy(dbname, "ecpg1_regression"); { ECPGconnect(__LINE__, 1, dbname , NULL, NULL , NULL, 0); #line 63 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 63 "test_informix2.pgc" sql_check("main", "connect", 0); { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "set DateStyle to 'DMY'", ECPGt_EOIT, ECPGt_EORT); #line 66 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 66 "test_informix2.pgc" { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "create table history ( customerid integer , timestamp timestamp without time zone , action_taken char ( 5 ) , narrative varchar ( 100 ) )", ECPGt_EOIT, ECPGt_EORT); #line 68 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 68 "test_informix2.pgc" sql_check("main", "create", 0); { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into history ( customerid , timestamp , action_taken , narrative ) values ( 1 , '2003-05-07 13:28:34 CEST' , 'test' , 'test' )", ECPGt_EOIT, ECPGt_EORT); #line 73 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 73 "test_informix2.pgc" sql_check("main", "insert", 0); { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "select max ( timestamp ) from history", ECPGt_EOIT, ECPGt_timestamp,&(maxd),(long)1,(long)1,sizeof(timestamp), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); #line 78 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 78 "test_informix2.pgc" sql_check("main", "select max", 100); { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "select customerid , timestamp from history where timestamp = $1 limit 1", ECPGt_timestamp,&(maxd),(long)1,(long)1,sizeof(timestamp), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_int,&(c),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_timestamp,&(d),(long)1,(long)1,sizeof(timestamp), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EORT); #line 85 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 85 "test_informix2.pgc" sql_check("main", "select", 0); printf("Read in customer %d\n", c); intvl = PGTYPESinterval_from_asc("1 day 2 hours 24 minutes 65 seconds", NULL); PGTYPEStimestamp_add_interval(&d, intvl, &e); free(intvl); c++; { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "insert into history ( customerid , timestamp , action_taken , narrative ) values ( $1 , $2 , 'test' , 'test' )", ECPGt_int,&(c),(long)1,(long)1,sizeof(int), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_timestamp,&(e),(long)1,(long)1,sizeof(timestamp), ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L, ECPGt_EOIT, ECPGt_EORT); #line 97 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 97 "test_informix2.pgc" sql_check("main", "update", 0); { ECPGtrans(__LINE__, NULL, "commit"); #line 100 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 100 "test_informix2.pgc" { ECPGdo(__LINE__, 1, 1, NULL, 0, ECPGst_normal, "drop table history", ECPGt_EOIT, ECPGt_EORT); #line 102 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 102 "test_informix2.pgc" sql_check("main", "drop", 0); { ECPGtrans(__LINE__, NULL, "commit"); #line 105 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 105 "test_informix2.pgc" { ECPGdisconnect(__LINE__, "CURRENT"); #line 107 "test_informix2.pgc" if (sqlca.sqlcode < 0) sqlprint();} #line 107 "test_informix2.pgc" sql_check("main", "disconnect", 0); printf("All OK!\n"); exit(0); /* Table "public.history" Column | Type | Nullable --------------+-----------------------------+---------- customerid | integer | not null timestamp | timestamp without time zone | not null action_taken | character(5) | not null narrative | character varying(100) | */ }