/* * This file is a part of Winix * and is not publicly distributed * * Copyright (c) 2010, Tomasz Sowa * All rights reserved. * */ #ifndef headerfile_winix_db_dbbase #define headerfile_winix_db_dbbase #include "dbconn.h" #include "dbtextstream.h" #include #include #include "core/error.h" class DbBase { public: DbBase(); void SetConn(DbConn * conn); void SetConn(DbConn & conn); DbConn * GetConn(); void LogQueries(bool log_q); PGresult * AssertQuery(const char * query); PGresult * AssertQuery(const std::wstring & query); PGresult * AssertQuery(const DbTextStream & query); void AssertResult(PGresult * r, ExecStatusType t); static int AssertColumn(PGresult * r, const char * column_name); static const char * AssertValue(PGresult * r, int row, int col); static const std::wstring & AssertValueWide(PGresult * r, int row, int col); // warning: this method uses a static buffer static void AssertValueWide(PGresult * r, int row, int col, std::wstring & result); static long AssertValueLong(PGresult * r, int row, int col); static int AssertValueInt(PGresult * r, int row, int col); static bool AssertValueBool(PGresult * r, int row, int col); static unsigned long AssertValueULong(PGresult * r, int row, int col); static unsigned int AssertValueUInt(PGresult * r, int row, int col); static tm AssertValueTm(PGresult * r, int row, int col); void ClearResult(PGresult * r); long AssertCurrval(const char * table); bool IsNull(PGresult * r, int row, int col); int Rows(PGresult * r); int Cols(PGresult * r); long AffectedRows(PGresult * r); static tm ConvertTime(const char * str); static const char * ConvertTime(const tm & t); // warning: it uses its own static buffer void CreateIdList(const std::vector & id_tab, std::wstring & list, bool add_parentheses = true); Error DoCommand(const char * command); Error BeginTrans(); Error RollbackTrans(); Error CommitTrans(); protected: // a helper method for escaping strings template DbTextStream::RawText R(const RawType & par) { return DbTextStream::RawText(par); } DbConn * db_conn; bool log_queries; private: DbTextStream bquery; }; #endif