#ifndef __SQL_STATEMENT_IMPL_HEADER__
#define __SQL_STATEMENT_IMPL_HEADER__

#pragma once

enum SQLSTATEMENTKIND
{
	KIND_INSERT = 1,
	KIND_UPDATE = 2
};

class CSQLStatementImpl
{
	CSQLStatementImpl();
protected:
	CString m_strSQL;
	CString m_strTableName;
	CString m_strFilter;
	int m_nStatementKind;	// 1==Insert, 2==Update;
	
	int m_nCount;
	int m_nSzie;
	CStringArray m_saFields;
	CStringArray m_saValues;

public:
	~CSQLStatementImpl();
	inline static CSQLStatementImpl *GetInstancePtr()
	{
		static CSQLStatementImpl lInstance;
		return &lInstance;
	}

	inline void ReSetKind(LPCTSTR lpTableName,LPCTSTR lpFilter,const int &nStatementKind,const int &nSize)
	{
		m_nStatementKind = nStatementKind;
		//if(m_nStatementKind == KIND_UPDATE)
			m_strTableName = lpTableName;
		m_strFilter = lpFilter;
				
		m_nCount = 0;
		m_nSzie = nSize;

		// SetSize֮��,�������RemoveAll,����AddʱԪ��λ���Ǵ�m_nSize��ʼ,�����Ǵ�0��ʼ;
		m_saFields.SetSize(m_nSzie,256);
		m_saValues.SetSize(m_nSzie,256);
		m_saFields.RemoveAll();
		m_saValues.RemoveAll();
	}

	void AddElement(LPCTSTR lpField, LPCTSTR lpValue);
	void AddElement(LPCTSTR lpField, CONST INT &nValue);
	CString ReturnSQL();
	void ReturnSQL(CString &strSQL);
};

#endif