class SPgSQLStatement: public SSqlStatement
{
public:
- SPgSQLStatement(const string& query, bool dolog, int nparams, SPgSQL* db) {
+ SPgSQLStatement(const string& query, bool dolog, int nparams, SPgSQL* db, unsigned int nstatement) {
d_query = query;
d_dolog = dolog;
d_parent = db;
paramValues = NULL;
paramLengths = NULL;
d_do_commit = false;
+ d_nstatement = nstatement;
}
SSqlStatement* bind(const string& name, bool value) { return bind(name, string(value ? "t" : "f")); }
void prepareStatement() {
if (d_prepared) return;
- // prepare a statement; name must be unique per session.
- this->d_stmt = string("stmt") + std::to_string((uintptr_t)this);
+ // prepare a statement; name must be unique per session (using d_nstatement to ensure this).
+ this->d_stmt = string("stmt") + std::to_string(d_nstatement);
PGresult* res = PQprepare(d_db(), d_stmt.c_str(), d_query.c_str(), d_nparams, NULL);
ExecStatusType status = PQresultStatus(res);
string errmsg(PQresultErrorMessage(res));
int d_fnum;
int d_cur_set;
bool d_do_commit;
+ unsigned int d_nstatement;
};
bool SPgSQL::s_dolog;
d_db=0;
d_in_trx = false;
d_connectstr="";
+ d_nstatement = 0;
if (!database.empty())
d_connectstr+="dbname="+database;
SSqlStatement* SPgSQL::prepare(const string& query, int nparams)
{
- return new SPgSQLStatement(query, s_dolog, nparams, this);
+ d_nstatement++;
+ return new SPgSQLStatement(query, s_dolog, nparams, this, d_nstatement);
}
void SPgSQL::startTransaction() {