#ifndef ODBC_CONNECTION_H #define ODBC_CONNECTION_H #include #include #include "odbc-dsn.h" #include "odbc-error.h" #include namespace ODBC { class ConnectionError : public virtual Error, public virtual DB::ConnectionError { public: ConnectionError(RETCODE err, SQLSMALLINT handletype, SQLHANDLE handle); }; class Connection : public DB::Connection { public: Connection(const DSN& d); Connection(const std::string & str); ~Connection(); SQLHENV env; SQLHDBC conn; void finish() const override; int beginTx() const override; int commitTx() const override; int rollbackTx() const override; void abortTx() const; bool txIsAborted() const; bool inTx() const override; void ping() const override; std::string getAttrStr(SQLINTEGER) const; SQLINTEGER getAttrInt(SQLINTEGER) const; DB::BulkDeleteStyle bulkDeleteStyle() const override; DB::BulkUpdateStyle bulkUpdateStyle() const override; DB::SelectCommand * newSelectCommand(const std::string & sql) override; DB::ModifyCommand * newModifyCommand(const std::string & sql) override; private: DB::BulkDeleteStyle thinkDelStyle; DB::BulkUpdateStyle thinkUpdStyle; void connectPre(); void connectPost(); mutable unsigned int txDepth; mutable bool txAborted; }; } #endif