Files
H100PowerManger/src/pPowerManger/sqlit3/SQLite.h
T

88 lines
2.8 KiB
C++

#ifndef SQLITE_H
#define SQLITE_H
#include "sqlite3.h"
#include <string>
#include <mutex>
#include <vector>
#include <cstdint>
#include "../pmSysvariable.h"
#include "../udpcomm/ccuUdpMsg.h"
#include "../udpcomm/CommLogger.h"
class SQLite : public ICommLogger
{
public:
// 数据库健康状态
enum class Status { OK, Degraded, Disabled };
explicit SQLite(const std::string& dbPath);
~SQLite();
// 连接是否有效(无锁的指针判断,仅用于快速探活)
bool isConnected() const { return m_db != nullptr; }
Status status() const { return m_status; }
std::string lastError() const;
// 建表(幂等,含迁移)
bool createTable();
bool createTable(const std::string& tableName, const std::string& columns);
// 状态反馈数据
bool insertData(ccuState data);
bool insertData(disHighVolBusState data);
bool insertData(disHighAVolBusState data);
bool insertData(disLowMainBusState data);
bool insertData(disLowBusState data);
bool insertData(const msg_CcuSetParmFbMsg& fb);
// 下发指令数据
bool insertData(ccuColCmd cmd);
bool insertData(ccuSetParmCmd cmd);
bool insertData(disHighVolBusCmd cmd);
bool insertData(disHighAVolBusCmd cmd);
bool insertData(disLowMainBusCmd cmd);
bool insertData(disLowBusCmd cmd);
// 原始收发帧落库(实现 ICommLogger,供 udpComm 调用)
void onFrame(int direction, unsigned short msgId, const char* name,
const unsigned char* data, unsigned int len,
bool checksumOk) override;
// 查询接口
long long count(const std::string& table);
bool queryInt(const std::string& sql, long long& out);
std::string m_dbPath;
private:
sqlite3* m_db;
mutable std::mutex m_dbMutex;
Status m_status;
std::string m_lastError;
bool setError(int rc, const char* op);
bool applyPragmas();
bool migrate();
bool createTableInternal(const std::string& tableName, const std::string& columns);
bool createAllTablesUnlocked();
// 列描述:名称 + SQL 类型 + 绑定器(无捕获函数指针)
struct Column {
const char* name;
const char* sqlType;
void (*bind)(sqlite3_stmt*, int& idx, const void* obj);
};
// 表描述:表名 + 数据列。建表(DDL)与插入(DML)共用这一份,作为唯一数据源。
struct TableDesc {
const char* name;
std::vector<Column> columns;
};
// 泛化插入:按表名在注册表中查找描述并绑定,所有类型共用这一条路径
bool insertGeneric(const char* tableName, const void* obj);
// 所有协议结构表的描述注册表(不含 msg_log 等特殊表)
static const std::vector<TableDesc>& allTables();
};
#endif // SQLITE_H