#pragma once #include "DBStoreBase.h" #include "CppSQLite3U.h" #include #include #include "DBQueryBase.h" #include namespace OTSSQLITE { class CDBStoreFile; class CSQLiteStore : public CDBStoreBase { public: CSQLiteStore(); ~CSQLiteStore(); //virtual CDBStoreFile* GetDatastoreFile() override { return m_pDatastoreFile; } // Get the file name. virtual CString GetFileName() override{ return m_sDatastorePathName; } virtual BOOL Open(LPCTSTR a_sFileName, const BOOL a_bForce = TRUE)override ; virtual BOOL Create(LPCTSTR a_sFileName, const BOOL a_bOverwrite = FALSE)override ; virtual BOOL Save(LPCTSTR a_sFileName, const BOOL a_bOverwrite = FALSE) override; virtual BOOL IsOpened() override { return GetDBPtr()->isOpened() ? TRUE : FALSE; } virtual std::vector GetTableList() override; virtual BOOL IsTableExists(LPCTSTR a_sTableName) override; virtual CDBQueryBasePtr QueryByTableName(LPCTSTR a_sTableName, LPCTSTR a_sOrderColumnName = nullptr) override; virtual CDBQueryBasePtr QueryByCommand(LPCTSTR a_sQueryString) override; virtual BOOL DeleteTable(LPCTSTR a_sTableName) override; virtual BOOL RunCommand(LPCTSTR a_sCommandString, const BOOL a_bIgnoreExist = FALSE) override; BOOL InsertBlobData(CString sqlStr, const DWORD * xrayData); virtual BOOL Commit() override; virtual BOOL BeginTransaction() override; virtual BOOL CloseSynchronous() override; virtual BOOL CommitTransaction() override; virtual long GetLastRowId(LPCTSTR a_sTableName = nullptr) override; virtual void Close() ; virtual BOOL InsertBlobData(char* szSql, const void* pBlobData, int iBlobDataLen) override; static CString GetExceptionErrorString(CppSQLite3Exception& a_ex); CppSQLite3DBPtr GetDBPtr() { if (!m_dbPtr) { m_dbPtr.reset(new CppSQLite3DB()); } return m_dbPtr; } protected: BOOL OpenOrCreate(LPCTSTR a_sFileName); protected: CString m_sDatastorePathName; //CDBStoreFile* m_pDatastoreFile; CppSQLite3DBPtr m_dbPtr; BOOL Exists(LPCTSTR a_sPath) { return ::PathFileExists(a_sPath) == TRUE; } BOOL SetReadOnly(LPCTSTR a_sPath, BOOL a_bReadOnly) { DWORD flags = GetFileAttributes(a_sPath); if (a_bReadOnly) { flags |= FILE_ATTRIBUTE_READONLY; } else { flags &= ~FILE_ATTRIBUTE_READONLY; } return SetFileAttributes(a_sPath, flags) != 0; } BOOL DeleteAFile(LPCTSTR a_sFileName) { if (!Exists(a_sFileName)) { return TRUE; } if (!SetReadOnly(a_sFileName, FALSE)) { return FALSE; } if (!::DeleteFile(a_sFileName)) { return FALSE; } return TRUE; } }; typedef std::shared_ptr CSQLiteStorePtr; }