in pgxalib.cpp [133:190]
HDBC XAConnection::ActivateConnection(void)
{
RETCODE ret;
MLOCK_ACQUIRE;
if (!init_crit.env)
{
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &init_crit.env);
if (!SQL_SUCCEEDED(ret))
{
MLOCK_RELEASE;
return NULL;
}
}
MLOCK_RELEASE;
if (xaconn)
return xaconn;
ret = SQLSetEnvAttr(init_crit.env, SQL_ATTR_ODBC_VERSION, (PTR) SQL_OV_ODBC3, 0);
ret = SQLAllocHandle(SQL_HANDLE_DBC, init_crit.env, &xaconn);
if (!SQL_SUCCEEDED(ret))
return NULL;
ret = SQLDriverConnect(xaconn, NULL,
(SQLCHAR *) dsnstr.c_str(), SQL_NTS, NULL, SQL_NULL_DATA, NULL, SQL_DRIVER_COMPLETE);
if (SQL_SUCCEEDED(ret))
return xaconn;
SQLCHAR sqlstate[8], errmsg[256];
SQLGetDiagRec(SQL_HANDLE_DBC, xaconn,
1, sqlstate, NULL, errmsg,
sizeof(errmsg), NULL);
mylog("first SQLDriverConnect return=%d sqlstate=%s error=%s\n", ret, sqlstate, errmsg);
sqlState = (char *) sqlstate;
errMsg = (char *) errmsg;
if (!AuthenticationError())
{
SQLFreeHandle(SQL_HANDLE_DBC, xaconn);
return NULL;
}
sqlState.clear();
errMsg.clear();
ret = SQLDriverConnect(xaconn, NULL,
(SQLCHAR *) (dsnstr + ";Username=postgres;Password=postgres;sslmode=allow").c_str(), SQL_NTS, NULL, SQL_NULL_DATA, NULL, SQL_DRIVER_COMPLETE);
if (SQL_SUCCEEDED(ret))
{
mylog("second SQLDriverConnect success\n");
return xaconn;
}
SQLGetDiagRec(SQL_HANDLE_DBC, xaconn,
1, sqlstate, NULL, errmsg,
sizeof(errmsg), NULL);
mylog("second SQLDriverConnect return=%d sqlstate=%s error=%s\n", ret, sqlstate, errmsg);
sqlState = (char *) sqlstate;
errMsg = (char *) errmsg;
return NULL;
}