Обсуждение: ...
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.
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; // connectedchar * 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;
 int mybitfield  : 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 can bypass bitwise fueld issue by assigning to int. Thanks  | 
From: Neeraj Rai <rneeraj@yahoo.com>;
To: pgsql-interfaces@postgresql.org <pgsql-interfaces@postgresql.org>;
Subject: [INTERFACES]
Sent: Wed, May 22, 2013 1:26:08 AM
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. 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; // connectedchar * 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;  int mybitfield  : 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,
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
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 codeBut 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 valuesin binary, rather than string format. Is there any option to do this ? Or is it easily addable?thanksNeeraj