/************************************************************************/
/*  Copyright (C), 2016-2020, [IT], 保留所有权利;
/*  模 块 名：;
/*  描    述：当前项目数据库操作实现;
/*
/*  版    本：[V];	
/*  作    者：[IT];
/*  日    期：[11/13/2016];
/*
/*
/*  注    意：;
/*
/*  修改记录：[IT];
/*  修改日期：;
/*  修改版本：;
/*  修改内容：;
/************************************************************************/
#ifndef __DATA_IMPL__
#define __DATA_IMPL__

#pragma once

#include "stdafx.h"
#include "table.pb.h"
#include "..\\SQLite3\\sqlite3.h"
#pragma comment(lib, "SQLite3.lib")
#include <vector>

#ifndef _WIN32
using CHAR = char;
using BOOL = bool;
using INT = int;
#define TRUE 1
#define FALSE 0
using LPCSTR = const char*;
#define MAX_PATH 256
#define IN
#define OUT
#define OutputDebugString(str) cout << str << endl
#endif

class CDataImpl
{
	CDataImpl(void);
public:
	static CDataImpl* GetInstance()
	{
		static CDataImpl *pObj = NULL;
		if ( pObj == NULL )
		{
			pObj = new CDataImpl;
			//pObj->Open();
		}

		return pObj;
	}

	virtual ~CDataImpl(void);

	// 私有变量;
private:
	sqlite3		*m_psqlite3;
	CHAR		*m_pszErrmsg;

	// 用户函数;
public:
	BOOL Open();
	void Close();

	// begin;
	BOOL TransactionBegin()
	{
		INT nRet = sqlite3_exec(m_psqlite3, "begin", 0, 0, &m_pszErrmsg);
		return ( nRet == 0 ) ? TRUE : FALSE;
	}

	BOOL TransactionCommit()
	{
		INT nRet = sqlite3_exec(m_psqlite3, "commit", 0, 0, &m_pszErrmsg);
		return ( nRet == 0 ) ? TRUE : FALSE;
	}

	// commit;
	// 执行语句;
	BOOL ExecteSQL(IN LPCSTR lpSQL);

	// 查询编译服务器表;
	INT QueryComplieServer(satdDatabase::listServer &list);
	// 查询自动编译脚本模型;
	INT QueryAutoComplieModel(satdDatabase::listModel &list);

	// 插入编译服务器;
	BOOL InsertComplieServer(IN satdDatabase::complieServer &server);
	// 插入自动化编译脚本模型;
	BOOL InsertAutoComplieModel(IN satdDatabase::model &model);

	// 更新编译服务器信息;
	BOOL UpdateComplieServer(IN satdDatabase::complieServer &server);
	// 更新自动化编译脚本模型;
	BOOL UpdateAutoCompliteModel(IN satdDatabase::model &model);
};

#endif