No title
Hi,
I'm trying a simple pgsql program with PQexecPrepared and have a few questions.
I have seen the example but didn't find the answer there. googled too.
http://www.postgresql.org/docs/9.2/static/libpq-example.html
Q1. what format is date set in ? what is the length ?
Q2.Q2.what is the type and length of bit wise fields
Q3. how to convert seconds since epoch to date
Q4. is int passable as time?
Q5. the paramValsVec_ is char* const char[] . Can we type cast int to char* and pass in ? and set type to INT4OID?
Below is some pseudo code to put above questions in perspective.
. table
CREATE TABLE t1
(curdate date,
str1 varchar(19),
tm_new timestamptz,
count int);
c++ code PGconn* pgconn; // connected
char * UpsertStmt_= "INSERT INTO t1 values( $1, $2, $3, $4)";
int result=0;
PGresult* pgres = PQprepare (pgconn, "stmtname", UpsertStmt_, 4, NULL);
int result = PQresultStatus(pgres);
PQclear(pgres_);
struct mydata
{
int curtime;
char str1[32];
int mycount;
intmybitfield : 3;
},
mydata myvar;
myvar.curtime = time(NULL)
strcpy(myvar.str1, hello);
myvar.mycount = 2;
myvar.mybitfield = 2;
// set helper vars
paramLenVec_[0] = 8;// Q1. what format is date set in ? what is the length
paramLenVec_[1] = strlen(str1);
paramLenVec_[2] = sizeof(int); // type = INT4OID, sizeof (int)
paramLenVec_[3] = sizeof(int);// Q2.what is the type and length of bit wise fields
paramValsVec_[0] = (char*)&myvar.curtime; // Q3. how to convert to date
paramValsVec_[1] = myvar.str1;
paramValsVec_[2] = &myvar.curtime; // Q4. is int passable as time
paramValsVec_[3] = (char*)&myvar.mycount; // Q5.
PQexecPrepared (pgconn, "stmtname", 4,
paramValsVec_,
paramLenVec_,
NULL, 0
);
Hi,
I forgot to mention that I'm trying to use binary data format.
I found exanples of sending string fornatted date time. However, i am assuming there are functions to covert unix time to pgtimestamptz and may be faster
Looking for inverse of ts.epoch
I can bypass bitwise fueld issue by assigning to int.
I think Q5 can be ignored. It should work the same for execparams and execprepared.
Thanks
Neeraj
Hi,
1. I am having trouble writing long values via c interface .testlibqp-dt.c is attached.
. 2 is being inserted as 8589934592.
qsf=> select * from t1;
curdate | strf | intf | tm_new | txnid
------------+--------+--------------------+------------------------+-------
1999-01-10 | hello2 |8589934592 | 1999-01-08 04:05:06-05 | 3
I tried htobe64 but that didn't help either.
Any advise would be appreciated.
2. I have switched to using string for data and timestamp and it seems to work.
I found functions like TimestampTzGetDatum,time_t_to_timestamptz in the code
But it seems they are not exposed to interface.
I have the date time in unix format (via time and gettimeofday). I would prefer to pass those values
in binary, rather than string format. Is there any option to do this ? Or is it easily addable?
thanks
Neeraj
testlibqp-dt.c is attached
Show quoted text
________________________________
From: Neeraj Rai <rneeraj@yahoo.com>
To: "pgsql-interfaces@postgresql.org" <pgsql-interfaces@postgresql.org>
Sent: Wednesday, May 22, 2013 7:52 PM
Subject: [INTERFACES]- pgaql long value corrupted using htonsHi,
1. I am having trouble writing long values via c interface .testlibqp-dt.c is attached.
. 2 is being inserted as 8589934592.qsf=> select * from t1;
curdate | strf | intf | tm_new | txnid
------------+--------+--------------------+------------------------+-------
1999-01-10 | hello2 |8589934592 | 1999-01-08 04:05:06-05 | 3I tried htobe64 but that didn't help either.
Any advise would be appreciated.2. I have switched to using string for data and timestamp and it seems to work.
I found functions like TimestampTzGetDatum,time_t_to_timestamptz in the code
But it seems they are not exposed to interface.
I have the date time in unix format (via time and gettimeofday). I would prefer to pass those values
in binary, rather than string format. Is there any option to do this ? Or is it easily addable?thanks
Neeraj
Attachments:
testlibpq-dt.ctext/x-csrc; name=testlibpq-dt.cDownload
1. I am having trouble writing long values via c interface .testlibqp-dt.c is attached.
. 2 is being inserted as 8589934592.
qsf=> select * from t1;
curdate | strf | intf | tm_new | txnid
------------+--------+--------------------+------------------------+-------
1999-01-10 | hello2 |8589934592 | 1999-01-08 04:05:06-05 | 3
I tried htobe64 but that didn't help either.
Any advise would be appreciated.
2. I am using string for data and timestamp and it seems to work.
I found functions like TimestampTzGetDatum,time_t_to_timestamptz in the code
But it seems they are not exposed to interface.
I have the date time in unix format (via time and gettimeofday). I would prefer to pass those values
in binary, rather than string format. Is there any option to do this ? Or is it easily addable?
thanks
Neeraj