#pragma once
#include "CivConnection.h"
#include <vector>
#include <libpq-fe.h>

#define SAFEDELETE(a)  if((a)!=nullptr){delete a;a=nullptr;}

/**
	postgress 连接类
*/
class CivPgDbConnection : public CivConnection
{
public:
	explicit CivPgDbConnection();
	~CivPgDbConnection();

	/**
	*@brief 建立数据，与具体的数据有关子类实现
	*/
	virtual bool connect(const std::string& url);

	/**
	*@brief 关闭数据，与具体的数据有关子类实现
	*/
	virtual bool disconnect();

	/**
	*@brief 执行查询操作，与具体的数据有关子类实现
	*@param sql 执行sql语句
	*/
	virtual bool execSql(const std::string& sql);

	virtual bool queryResult(std::vector<std::map<std::string, std::string>>& result);

	virtual bool beginTransaction();
	virtual bool commitTransaction();

private:
	PGconn* mConn; // 连接对象
	PGresult* mResult;  // 查询结果集
};
