ecpg-timestamp- interval problem V8.2.x

Started by Paul Tillesabout 18 years ago2 messagesgeneral
Jump to latest
#1Paul Tilles
Paul.Tilles@noaa.gov

A colleague of mine is working with the following code (postgres Version
8.2.4):

#include <stdio.h>
#include <stdlib.h>
#include "pgtypes_timestamp.h"
#include "pgtypes_interval.h"

EXEC SQL INCLUDE sqlca;

main(argc, argv)
int argc;
char *argv[];
{
timestamp dt1st, dt2nd;
interval *int_day, *int_pt;

char timebeg[40];
char timeend[40];
int rc;

strcpy(timebeg,"2008-04-01");
strcpy(timeend,"2008-04-05");

printf("timebeg: %s\n", timebeg);
printf("timeend: %s\n", timeend);

dt1st=PGTYPEStimestamp_from_asc(timebeg,NULL);
dt2nd=PGTYPEStimestamp_from_asc(timeend,NULL);
int_day=PGTYPESinterval_from_asc("02 01:02:03", NULL);
printf("int_day : %s\n", PGTYPESinterval_to_asc(int_day));

rc=PGTYPEStimestamp_sub(&dt2nd, &dt1st, int_pt);
printf("rc, date2 - date1 = %d, %s\n", rc, PGTYPESinterval_to_asc(int_pt));
exit(0);
}

--------------------------------------------------------------------------------------------
The output is

timebeg: 2008-04-01
timeend: 2008-04-05
int_day : @ 2 days 1 hour 2 mins 3 secs
rc, date2 - date1 = 0, @ 1 sec ago

--------------------------------------------------------------------------------------------

The result of the subtraction of the the two timestamps is not correct.

What's going on?

TIA.

Paul Tilles

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Paul Tilles (#1)
Re: ecpg-timestamp- interval problem V8.2.x

paul tilles <Paul.Tilles@noaa.gov> writes:

{
timestamp dt1st, dt2nd;
interval *int_day, *int_pt;

char timebeg[40];
char timeend[40];
int rc;

strcpy(timebeg,"2008-04-01");
strcpy(timeend,"2008-04-05");

printf("timebeg: %s\n", timebeg);
printf("timeend: %s\n", timeend);

dt1st=PGTYPEStimestamp_from_asc(timebeg,NULL);
dt2nd=PGTYPEStimestamp_from_asc(timeend,NULL);
int_day=PGTYPESinterval_from_asc("02 01:02:03", NULL);
printf("int_day : %s\n", PGTYPESinterval_to_asc(int_day));

rc=PGTYPEStimestamp_sub(&dt2nd, &dt1st, int_pt);
printf("rc, date2 - date1 = %d, %s\n", rc, PGTYPESinterval_to_asc(int_pt));
exit(0);
}

Surely this code is using "int_pt" without having first assigned to it?
IOW the interval result is being stored at some unpredictable place that
could get clobbered during the printf.

regards, tom lane