SQLiteStore.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #pragma once
  2. #include "DBStoreBase.h"
  3. #include "CppSQLite3U.h"
  4. #include <wtypes.h>
  5. #include <vector>
  6. #include "DBQueryBase.h"
  7. #include <wtypes.h>
  8. namespace OTSSQLITE
  9. {
  10. class CDBStoreFile;
  11. class CSQLiteStore : public CDBStoreBase
  12. {
  13. public:
  14. CSQLiteStore();
  15. ~CSQLiteStore();
  16. //virtual CDBStoreFile* GetDatastoreFile() override { return m_pDatastoreFile; }
  17. // Get the file name.
  18. virtual CString GetFileName() override{ return m_sDatastorePathName; }
  19. virtual BOOL Open(LPCTSTR a_sFileName, const BOOL a_bForce = TRUE)override ;
  20. virtual BOOL Create(LPCTSTR a_sFileName, const BOOL a_bOverwrite = FALSE)override ;
  21. virtual BOOL Save(LPCTSTR a_sFileName, const BOOL a_bOverwrite = FALSE) override;
  22. virtual BOOL IsOpened() override { return GetDBPtr()->isOpened() ? TRUE : FALSE; }
  23. virtual std::vector<CString> GetTableList() override;
  24. virtual BOOL IsTableExists(LPCTSTR a_sTableName) override;
  25. virtual CDBQueryBasePtr QueryByTableName(LPCTSTR a_sTableName, LPCTSTR a_sOrderColumnName = nullptr) override;
  26. virtual CDBQueryBasePtr QueryByCommand(LPCTSTR a_sQueryString) override;
  27. virtual BOOL DeleteTable(LPCTSTR a_sTableName) override;
  28. virtual BOOL RunCommand(LPCTSTR a_sCommandString, const BOOL a_bIgnoreExist = FALSE) override;
  29. BOOL InsertBlobData(CString sqlStr, const DWORD * xrayData);
  30. virtual BOOL Commit() override;
  31. virtual BOOL BeginTransaction() override;
  32. virtual BOOL CloseSynchronous() override;
  33. virtual BOOL CommitTransaction() override;
  34. virtual long GetLastRowId(LPCTSTR a_sTableName = nullptr) override;
  35. virtual void Close() ;
  36. virtual BOOL InsertBlobData(char* szSql, const void* pBlobData, int iBlobDataLen) override;
  37. static CString GetExceptionErrorString(CppSQLite3Exception& a_ex);
  38. CppSQLite3DBPtr GetDBPtr()
  39. {
  40. if (!m_dbPtr)
  41. {
  42. m_dbPtr.reset(new CppSQLite3DB());
  43. }
  44. return m_dbPtr;
  45. }
  46. protected:
  47. BOOL OpenOrCreate(LPCTSTR a_sFileName);
  48. protected:
  49. CString m_sDatastorePathName;
  50. //CDBStoreFile* m_pDatastoreFile;
  51. CppSQLite3DBPtr m_dbPtr;
  52. BOOL Exists(LPCTSTR a_sPath)
  53. {
  54. return ::PathFileExists(a_sPath) == TRUE;
  55. }
  56. BOOL SetReadOnly(LPCTSTR a_sPath, BOOL a_bReadOnly)
  57. {
  58. DWORD flags = GetFileAttributes(a_sPath);
  59. if (a_bReadOnly)
  60. {
  61. flags |= FILE_ATTRIBUTE_READONLY;
  62. }
  63. else
  64. {
  65. flags &= ~FILE_ATTRIBUTE_READONLY;
  66. }
  67. return SetFileAttributes(a_sPath, flags) != 0;
  68. }
  69. BOOL DeleteAFile(LPCTSTR a_sFileName)
  70. {
  71. if (!Exists(a_sFileName))
  72. {
  73. return TRUE;
  74. }
  75. if (!SetReadOnly(a_sFileName, FALSE))
  76. {
  77. return FALSE;
  78. }
  79. if (!::DeleteFile(a_sFileName))
  80. {
  81. return FALSE;
  82. }
  83. return TRUE;
  84. }
  85. };
  86. typedef std::shared_ptr<CSQLiteStore> CSQLiteStorePtr;
  87. }