8#line 1 "PgConnection.pgc"
25#if __DCL_HAVE_ALLOC_DEBUG
26#undef __DCL_ALLOC_LEVEL
27#define __DCL_ALLOC_LEVEL __DCL_ALLOC_INTERNAL
47static volatile long __connectionID__ = 0;
52 Connection::__canTransact =
true;
53 __connectionID = ByteString::format(
"con:%ld",
76 ListedByteStringToByteStringMap map;
77 Connection::splitConnectionString(_pszConnString, _n, map);
79 ByteString strServer = map[
"SERVER"];
80 ByteString strUser = map[
"USER"];
81 ByteString strPassword = map[
"PASSWORD"];
82 ByteString strDatabase = map[
"DATABASE"];
84 ByteStringBuilder sbTarget;
85 if (!strServer.isEmpty()) {
88 if (!strDatabase.isEmpty()) {
89 if (!sbTarget.isEmpty()) {
92 sbTarget += strDatabase;
101#line 88 "PgConnection.pgc"
102 char * pszUserName = (
_CONST char * ) strUser . data () ;
104#line 89 "PgConnection.pgc"
105 char * pszPassword = (
_CONST char * ) strPassword . data () ;
107#line 90 "PgConnection.pgc"
108 char * pszTarget = (
_CONST char * ) sbTarget . data () ;
110#line 91 "PgConnection.pgc"
111 char * pszConnectionID =
NULL ;
113#line 92 "PgConnection.pgc"
116 pszConnectionID = (
_CONST char*) __connectionID.data();
118 { ECPGconnect(__LINE__, 0, pszTarget , pszUserName , pszPassword , pszConnectionID, 0); }
119#line 97 "PgConnection.pgc"
135#line 111 "PgConnection.pgc"
136 char * pszConnectionID = (
_CONST char * ) __connectionID . data () ;
138#line 112 "PgConnection.pgc"
141 { ECPGdisconnect(__LINE__, pszConnectionID);}
142#line 114 "PgConnection.pgc"
170static StmtType __GetStmtType(
const char* _sql)
172 for(
size_t i = 0; sp[i].type !=
StmtOther; i++)
190 PGconn* conn = ECPGget_PGconn(__connectionID.data());
191 PGresult* res = PQexec(conn, _sql);
192 ExecStatusType status = PQresultStatus(res);
193 if (status != PGRES_COMMAND_OK) {
194 ByteStringBuilder sb;
195 sb.format(
"ExecStatusType(%d)", status)
196 .append(PQresultErrorMessage(res));
203 switch(__GetStmtType(_sql))
224#line 193 "PgConnection.pgc"
225 char * pszConnectionID = (
_CONST char * ) __connectionID . data () ;
227#line 194 "PgConnection.pgc"
230 { ECPGsetconn(__LINE__, pszConnectionID);}
231#line 196 "PgConnection.pgc"
239 { ECPGtrans(__LINE__,
NULL,
"begin work");}
240#line 203 "PgConnection.pgc"
258#line 218 "PgConnection.pgc"
259 char * pszConnectionID = (
_CONST char * ) __connectionID . data () ;
261#line 219 "PgConnection.pgc"
264 { ECPGsetconn(__LINE__, pszConnectionID);}
265#line 221 "PgConnection.pgc"
273 { ECPGtrans(__LINE__,
NULL,
"commit work");}
274#line 228 "PgConnection.pgc"
292#line 243 "PgConnection.pgc"
293 char * pszConnectionID = (
_CONST char * ) __connectionID . data () ;
295#line 244 "PgConnection.pgc"
298 { ECPGsetconn(__LINE__, pszConnectionID);}
299#line 246 "PgConnection.pgc"
307 { ECPGtrans(__LINE__,
NULL,
"rollback work");}
308#line 253 "PgConnection.pgc"
332 *_queryHandleOut = pNewQuery;
340 if (_SQLCODE == 0 ) {
341 __lastErrorMessage.clear();
344 ByteStringBuilder sb;
345 sb.format(
"SQLCODE(%d) ", _SQLCODE);
346 sb.append(sqlca.sqlerrm.sqlerrmc, sqlca.sqlerrm.sqlerrml);
347 __lastErrorMessage = sb.toByteString();
354 if (__lastErrorMessage.length() < *_buflen)
355 *_buflen = __lastErrorMessage.length();
356 strncpy(_buf, __lastErrorMessage.data(), *_buflen);
363 if (pQuery ==
NULL) {
368 bool localTrans =
false;
374 const char* _sql =
"select version()";
376 if (!pQuery->prepare(_sql, ByteString::length(_sql), 0))
379 if (!pQuery->execute())
382 if (!pQuery->fetch())
#define __DCL_ASSERT(expr)
#define IMPLEMENT_CLASSINFO(class_name, base_class_name)
#define __SET_ERROR_SQLCODE(SQLCODE)
#define __SET_ERROR(_error)
#define __SET_ERROR_MSG(_message)
#define __UNSET_STATE(state)
#define __SET_STATE(state)
void CharsetConvertException *size_t n
PgConnection(const wchar_t *_serverTitle)
virtual bool __execute(const char *pszSQL, size_t n)
virtual bool __getErrorMessage(char *_buf, size_t *_buflen)
virtual bool __open(const char *_pszConnString, size_t _n)
virtual bool __getServerInfo(char *_buf, size_t *_buflen)
virtual bool __createQueryInstance(SQL::Query **_queryHandleOut)
virtual bool __rollbackTrans()
virtual bool __startTrans()
virtual bool __commitTrans()
void setErrorStatus(SQL::Error _error, long _SQLCODE, const wchar_t *_filename, int _line)
virtual bool __getData(void *_pv, size_t *_size, SQL::DataType _dataType)
virtual bool isNull() const
virtual bool __getField(size_t _index, SQL::Field **_fieldHandleOut)
static bool test(const wchar_t *_regex, const wchar_t *_string, bool _icase=false) __DCL_THROWS1(RegexException *)
Connection(const wchar_t *_serverTitle)
bool inState(unsigned int uState) const
__PROTECTED const wchar_t int _line
__PROTECTED const wchar_t * _filename
static long incrementAndGet(volatile long &_n)