LCOV - code coverage report
Current view: top level - include/storage - sqlite_store.hpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 100.0 % 1 1
Test Date: 2025-12-19 03:13:09 Functions: 100.0 % 1 1

            Line data    Source code
       1              : /**
       2              :  * @file sqlite_store.hpp
       3              :  * @brief SQLite 持久化存储实现
       4              :  */
       5              : 
       6              : #pragma once
       7              : 
       8              : #include "storage/store.hpp"
       9              : #include <sqlite3.h>
      10              : #include <memory>
      11              : #include <mutex>
      12              : 
      13              : namespace fix40 {
      14              : 
      15              : /**
      16              :  * @class SqliteStore
      17              :  * @brief SQLite 存储实现
      18              :  *
      19              :  * 线程安全的 SQLite 存储实现。
      20              :  * 支持内存数据库 (":memory:") 用于测试。
      21              :  */
      22              : class SqliteStore : public IStore {
      23              : public:
      24              :     /**
      25              :      * @brief 构造函数
      26              :      * @param dbPath 数据库文件路径,":memory:" 表示内存数据库
      27              :      */
      28              :     explicit SqliteStore(const std::string& dbPath);
      29              :     
      30              :     ~SqliteStore() override;
      31              : 
      32              :     // 禁止拷贝
      33              :     SqliteStore(const SqliteStore&) = delete;
      34              :     SqliteStore& operator=(const SqliteStore&) = delete;
      35              : 
      36              :     /**
      37              :      * @brief 检查数据库是否已打开
      38              :      */
      39         1130 :     bool isOpen() const { return db_ != nullptr; }
      40              : 
      41              :     // IStore 接口实现
      42              :     bool saveOrder(const Order& order) override;
      43              :     bool saveOrderForAccount(const Order& order, const std::string& accountId) override;
      44              :     bool updateOrder(const Order& order) override;
      45              :     std::optional<Order> loadOrder(const std::string& clOrdID) override;
      46              :     std::vector<Order> loadOrdersBySymbol(const std::string& symbol) override;
      47              :     std::vector<Order> loadOrdersByAccount(const std::string& accountId) override;
      48              :     std::vector<Order> loadActiveOrders() override;
      49              :     std::vector<Order> loadAllOrders() override;
      50              : 
      51              :     bool saveTrade(const StoredTrade& trade) override;
      52              :     std::vector<StoredTrade> loadTradesByOrder(const std::string& clOrdID) override;
      53              :     std::vector<StoredTrade> loadTradesBySymbol(const std::string& symbol) override;
      54              : 
      55              :     bool saveSessionState(const SessionState& state) override;
      56              :     std::optional<SessionState> loadSessionState(
      57              :         const std::string& senderCompID, const std::string& targetCompID) override;
      58              : 
      59              :     bool saveMessage(const StoredMessage& msg) override;
      60              :     std::vector<StoredMessage> loadMessages(
      61              :         const std::string& senderCompID, const std::string& targetCompID,
      62              :         int beginSeqNum, int endSeqNum) override;
      63              :     bool deleteMessagesForSession(
      64              :         const std::string& senderCompID, const std::string& targetCompID) override;
      65              :     bool deleteMessagesOlderThan(int64_t timestamp) override;
      66              : 
      67              :     // 账户存储
      68              :     bool saveAccount(const Account& account) override;
      69              :     std::optional<Account> loadAccount(const std::string& accountId) override;
      70              :     std::vector<Account> loadAllAccounts() override;
      71              :     bool deleteAccount(const std::string& accountId) override;
      72              : 
      73              :     // 持仓存储
      74              :     bool savePosition(const Position& position) override;
      75              :     std::optional<Position> loadPosition(
      76              :         const std::string& accountId, const std::string& instrumentId) override;
      77              :     std::vector<Position> loadPositionsByAccount(const std::string& accountId) override;
      78              :     std::vector<Position> loadAllPositions() override;
      79              :     bool deletePosition(const std::string& accountId, const std::string& instrumentId) override;
      80              :     bool deletePositionsByAccount(const std::string& accountId) override;
      81              : 
      82              : private:
      83              :     /**
      84              :      * @brief 初始化数据库表
      85              :      */
      86              :     bool initTables();
      87              : 
      88              :     /**
      89              :      * @brief 执行 SQL 语句
      90              :      */
      91              :     bool execute(const std::string& sql);
      92              : 
      93              :     /**
      94              :      * @brief 从 SQLite 结果行提取 Order 对象
      95              :      */
      96              :     Order extractOrder(sqlite3_stmt* stmt);
      97              : 
      98              :     /**
      99              :      * @brief 从 SQLite 结果行提取 StoredTrade 对象
     100              :      */
     101              :     StoredTrade extractTrade(sqlite3_stmt* stmt);
     102              : 
     103              :     /**
     104              :      * @brief 从 SQLite 结果行提取 Account 对象
     105              :      */
     106              :     Account extractAccount(sqlite3_stmt* stmt);
     107              : 
     108              :     /**
     109              :      * @brief 从 SQLite 结果行提取 Position 对象
     110              :      */
     111              :     Position extractPosition(sqlite3_stmt* stmt);
     112              : 
     113              :     sqlite3* db_ = nullptr;
     114              :     mutable std::mutex mutex_;
     115              : };
     116              : 
     117              : } // namespace fix40
        

Generated by: LCOV version 2.0-1