#ifndef CIVPGCONN_H
#define CIVPGCONN_H

#include "CivDbConn.h"
#include <libpq-fe.h>


/**
 postgress 数据库
*/
class DBEXPORT CivPgConn: public CivDbConn
{
public:
	CivPgConn(char* uri);
	~CivPgConn();

private:
	/**
	*@brief 连接数据库，与具体的数据有关子类实现
	*/
	virtual bool open();

	/**
	*@brief 关闭数据库连接，与具体的数据有关子类实现
	*/
	virtual void close();

	/**
	*@brief 判断某张表是否存在，判断方法跟具体的数据库有关，延迟到子类实现
	*@tableName: 表名称
	*/
	virtual bool tableExist(StrQuote tableName);

	/**
	*@brief 执行sql语句
	*@sql: 需要执行的sql语句
	*/
	virtual bool execSql(Str sql);
	virtual bool getNode(CivNode& node) ;
	virtual bool getPipe(CivPipe& pipe) ;
	virtual bool getTank(CivTank& tank) ;
	virtual bool getValve(CivValve& valve) ;
	virtual bool getPumps(CivPumps& pump) ;
	virtual bool getReservoirs(CivReservoirs& reservoirs) ;
	virtual bool getEmitters(CivEmitters& emitter) ;
	virtual bool getCoordinates(CivCoordinates& coord) ;
	virtual bool getMixing(CivMixing& mixing) ;
	virtual bool getParameter(std::vector<CivParameter>& param) ;
	virtual bool getPatterns(CivPatterns& patterns) ;
	virtual bool getCurves(CivCurves& curves) ;
	virtual bool getDemands(CivDemands& demands) ;
	virtual bool getSources(CivSources& sources) ;
	virtual bool getStatus(CivStatus& status) ;
	virtual bool getQuality(CivQuality& quality) ;
	virtual bool getLabels(CivLabels& labels) ;
	virtual bool getTags(CivTags& tags) ;

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

	char* mUri;
};

#endif // !CIVPGCONN_H
