#pragma once #include #include "sqlite/sqlite3.h" #include "Utils.h" enum class SqliteType { INT32, INT64, FLOAT, DOUBLE, TEXT, BLOB, DATETIME }; typedef std::function SEL_CALLBAC; class ColumnValue { template static SqliteType _getType(T v) { if constexpr (std::is_same_v) return SqliteType::INT32; else if constexpr (std::is_same_v) return SqliteType::INT32; else if constexpr (std::is_same_v) return SqliteType::INT32; else if constexpr (std::is_same_v) return SqliteType::INT32; else if constexpr (std::is_same_v) return SqliteType::INT64; else if constexpr (std::is_same_v) return SqliteType::INT64; else if constexpr (std::is_same_v) return SqliteType::FLOAT; else if constexpr (std::is_same_v) return SqliteType::DOUBLE; else if constexpr (std::is_same_v) return SqliteType::TEXT; else if constexpr (std::is_same_v) return SqliteType::TEXT; else if constexpr (std::is_same_v) return SqliteType::TEXT; else if constexpr (std::is_same_v) return SqliteType::TEXT; else if constexpr (std::is_same_v>) return SqliteType::BLOB; else if constexpr (std::is_same_v>) return SqliteType::BLOB; return SqliteType::BLOB; } public: std::string columnName; std::string value; SqliteType DataType; ColumnValue(std::string _columnName, char* _value) : columnName(_columnName), value(_value), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, const char* _value) : columnName(_columnName), value(_value), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, std::string _value) : columnName(_columnName), value(_value), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, int8_t _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, uint8_t _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, int16_t _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, uint16_t _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, int32_t _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, uint32_t _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, int64_t _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, uint64_t _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, float _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, double _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(_getType(_value)) {} ColumnValue(std::string _columnName, std::vector _value) : columnName(_columnName), value((char*)_value.data(), _value.size()), DataType(SqliteType::BLOB) {} ColumnValue(std::string _columnName, std::vector _value) : columnName(_columnName), value((char*)_value.data(), _value.size()), DataType(SqliteType::BLOB) {} template ColumnValue(std::string _columnName, T _value) : columnName(_columnName), value((char*)&_value, sizeof(_value)), DataType(SqliteType::BLOB) {} }; class SqliteHelper { public: sqlite3* pDB = nullptr; char* path = nullptr; SqliteHelper(const char* _path); void Open(); bool IsTableExist(std::string tableName); void DeleteTable(std::string tableName); void CreateTable(std::string tableName, std::vector> columus); void Close(); void Select(std::string sql, SEL_CALLBAC callback); List> Select(std::string sql); bool Insert(const std::string tableName, const std::vector& columnValues); int Excute(std::string sql); int Excute(const char* sql); };