/***************************************************************************
                Source Data
                -----------------------------------------
	begin      : 2011/10/27
	copyright  : (C) 2011 SolutionBox Inc.
	author     : Service 1 Team
	email      : svc1@solbox.com
	version    : 3.0.1

    CopyRight(C) 2011 SolutionBox Inc. All Rights reserved.
    Redistribution and use in source and binary forms, with or with out
    modification, are not permitted in outside of SolutionBox Inc.
***************************************************************************/

#ifndef __SOURCE_DATA_H__
#define __SOURCE_DATA_H__

#include <sys/types.h>
#include <string>

#include "DataFile.h"
#include "SyncList.h"

using namespace std;

class DataBase;

class CSourceData
{
private:
	pthread_t	m_handleThread;		// 스레드 핸들
	CSyncInfo	m_sourceParam;		// sync info
	CDataFile	m_dataFile;			// 파일저장시 사용할 객체
	bool		m_bDELETED_YN;		// bDELETED_YN값이 true일때 deleted_yn = 'N' 조회	
	bool		m_usedisplay;		// 신규형상(9.3)에서는 display_name 사용하며, 기존 uri 값과 동일한 값
	bool		m_ismaster;			// master / slave 여부

	// 에러 메시지를 담는다.
	// 주의 : 호출한 함수에서 isError() 를 통해 에러 처리를 따로하므로, 에러가 아닌 경우에 변수에 값을 담으면 안된다.
	string		m_strErrorMessage;

public:
	CSourceData();
	~CSourceData();

protected:
	static void*	Run(void* arg);	// 스레드 시작

	bool			IsSkipKeyword(string key);	// uri에 skip keyword 포함 유무 체크

	string			GetTargetTable(DataBase *d);

	int64_t			GetRows(DataBase *d, const char* tblname);

	inline void		SetErrorMessage(const string strErrorMessage)
		{ m_strErrorMessage = strErrorMessage; }

public:
	// thread 초기화
	bool Init(bool master, CSyncInfo sourceParam);

	// thread 실행
	bool Execute();

	// 호출측에서 Thread의 종료 여부등을 판단하기 위함
	inline pthread_t* GetThreadHandle()
		{ return &m_handleThread; }

	inline string GetMetaFilePath()
		{ return m_dataFile.GetFilePath(); }

	inline bool isError(string & errmsg )
	{
		errmsg = m_strErrorMessage; return bool(m_strErrorMessage.size() > 0);
	}

};

#endif // __SOURCE_DATA_H__
