--- sql/pgsql/parser3pgsql.C 2007/10/25 17:08:41 1.28 +++ sql/pgsql/parser3pgsql.C 2008/06/24 17:43:48 1.29 @@ -7,7 +7,7 @@ 2007.10.25 using PgSQL 8.1.5 */ -static const char *RCSId="$Id: parser3pgsql.C,v 1.28 2007/10/25 17:08:41 misha Exp $"; +static const char *RCSId="$Id: parser3pgsql.C,v 1.29 2008/06/24 17:43:48 misha Exp $"; #include "config_includes.h" @@ -41,32 +41,32 @@ inline int min(int a,int b){ return a(aconnection); - PQfinish(connection.conn); + PQfinish(connection.conn); connection.conn=0; } + void commit(void *aconnection) { execute_transaction_cmd(aconnection, "COMMIT"); } + void rollback(void *aconnection) { execute_transaction_cmd(aconnection, "ROLLBACK"); } @@ -214,10 +216,10 @@ public: Connection& connection=*static_cast(aconnection); char *result=(char*)connection.services->malloc_atomic(length*2+1); - int err = 0; + int err=0; PQescapeStringConn (connection.conn, - result, from, length, - &err); + result, from, length, + &err); return result; } @@ -240,7 +242,7 @@ public: bind_parameters(placeholders_count, placeholders, paramValues, connection); } - // transcode from $request:charset to connect-string?client_charset + // transcode from $request:charset to ?ClientCharset if(cstrClientCharset) { size_t transcoded_statement_size; services.transcode(astatement, strlen(astatement), @@ -295,7 +297,7 @@ public: memcpy(strm, name, length+1); const char* str=strm; - // transcode to $request:charset from connect-string?client_charset + // transcode from ?ClientCharset to $request:charset if(cstrClientCharset) services.transcode(str, length, str, length, @@ -357,7 +359,7 @@ public: } if(str && length) { - // transcode to $request:charset from connect-string?client_charset + // transcode from ?ClientCharset to $request:charset if(cstrClientCharset) services.transcode(str, length, str, length, @@ -408,12 +410,14 @@ private: // private funcs void execute_transaction_cmd(void *aconnection, const char *query) { - if(isDefaultTransaction) - { + Connection& connection=*static_cast(aconnection); + + if(connection.autocommit){ Connection& connection=*static_cast(aconnection); execute_resultless(connection, query); - begin_transaction(connection); } + + begin_transaction(connection); } /** @@ -427,8 +431,7 @@ private: // private funcs } void begin_transaction(Connection& connection) { - if(isDefaultTransaction) - { + if(connection.autocommit){ execute_resultless(connection, "BEGIN"); } } @@ -529,7 +532,7 @@ private: // lo_read/write exchancements int size_op; while(len && (size_op=lo_func(conn, fd, buf, min(LO_BUFSIZE, len)))>0) { buf+=size_op; - len-=size_op; + len-=size_op; } return len==0; } @@ -548,25 +551,24 @@ private: // conn client library funcs typedef char *(*t_PQerrorMessage)(const PGconn* conn); t_PQerrorMessage PQerrorMessage; typedef ConnStatusType (*t_PQstatus)(const PGconn *conn); t_PQstatus PQstatus; typedef PGresult *(*t_PQexec)(PGconn *conn, - const char *query); t_PQexec PQexec; -//PQexecParams + const char *query); t_PQexec PQexec; typedef PGresult *(*t_PQexecParams)( - PGconn *conn, - const char *query, - int nParams, - const Oid *paramTypes, - const char * const *paramValues, - const int *paramLengths, - const int *paramFormats, - int resultFormat); t_PQexecParams PQexecParams; + PGconn *conn, + const char *query, + int nParams, + const Oid *paramTypes, + const char * const *paramValues, + const int *paramLengths, + const int *paramFormats, + int resultFormat); t_PQexecParams PQexecParams; typedef ExecStatusType (*t_PQresultStatus)(const PGresult *res); t_PQresultStatus PQresultStatus; typedef int (*t_PQgetlength)(const PGresult *res, - int tup_num, - int field_num); t_PQgetlength PQgetlength; + int tup_num, + int field_num); t_PQgetlength PQgetlength; typedef char* (*t_PQgetvalue)(const PGresult *res, - int tup_num, - int field_num); t_PQgetvalue PQgetvalue; + int tup_num, + int field_num); t_PQgetvalue PQgetvalue; typedef int (*t_PQntuples)(const PGresult *res); t_PQntuples PQntuples; typedef char *(*t_PQfname)(const PGresult *res, int field_index); t_PQfname PQfname; @@ -576,8 +578,8 @@ private: // conn client library funcs typedef Oid (*t_PQftype)(const PGresult *res, int field_num); t_PQftype PQftype; typedef size_t (*t_PQescapeStringConn)(PGconn *conn, - char *to, const char *from, size_t length, - int *error); t_PQescapeStringConn PQescapeStringConn; + char *to, const char *from, size_t length, + int *error); t_PQescapeStringConn PQescapeStringConn; typedef int (*t_lo_open)(PGconn *conn, Oid lobjId, int mode); t_lo_open lo_open; typedef int (*t_lo_close)(PGconn *conn, int fd); t_lo_close lo_close; @@ -595,8 +597,8 @@ private: // conn client library funcs li const char *dlink(const char *dlopen_file_spec) { if(lt_dlinit()) return lt_dlerror(); - lt_dlhandle handle=lt_dlopen(dlopen_file_spec); - if(!handle) + lt_dlhandle handle=lt_dlopen(dlopen_file_spec); + if(!handle) return "can not open the dynamic link module"; #define DSLINK(name, action) \ @@ -629,8 +631,6 @@ private: // conn client library funcs li return 0; } - - bool isDefaultTransaction; }; extern "C" SQL_Driver *SQL_DRIVER_CREATE() {