// // Created by Adarion on 2024/2/18. // #ifndef DWASEARCH_SQLITEOBJECT_H #define DWASEARCH_SQLITEOBJECT_H #include #include #include "sqlite3.h" #include "DatabaseManager.h" #define DECLARE_PROPERTY(name, type, index) \ private: \ type name = {}; \ [[maybe_unused]] int __##name##Setter = [this]() { \ propertiesSetters.emplace_back([&](sqlite3_stmt *stmt) { \ name = Mika::DatabaseManager::getResultValue(stmt, index); \ }); \ \ return 0; \ }(); \ public: \ [[nodiscard]]type get##name() const { return name; } \ void set##name(type &&value) { name = std::move(value); } #define SQLITE_OBJECT \ private: \ std::vector> propertiesSetters; \ public: \ void fillData(sqlite3_stmt *stmt) { \ for (auto &setter : propertiesSetters) { \ setter(stmt); \ } \ }; #endif //DWASEARCH_SQLITEOBJECT_H