#pragma once #include "databasetable.h" #include #include #include #include class DatabaseUtilsTest; namespace serversdk { class DatabaseManager; class DatabaseUtils : public QObject { Q_OBJECT friend class ::DatabaseUtilsTest; public: explicit DatabaseUtils(DatabaseManager *manager = nullptr, const QString type = "SQLITE"); QSqlQuery createTable(const DatabaseTable *table, const QString table_name) const; QSqlQuery insertIntoTable(const DatabaseTable *table, const QString table_name) const; QSqlQuery updateTable(const DatabaseTable *table, const QString table_name) const; template QList> tableFromQuery(QSqlQuery query) const { QList> list; while (query.next()) { auto rec = query.record(); int total = rec.count(); QMap map; for (int column = 0; column < total; ++column) { QString columnName = rec.fieldName(column); QString propertyName = toCamelCase(columnName); map.insert(propertyName, query.value(column)); } auto data = std::make_shared(); data->fromVariantMap(map); list << data; } return list; } QString sqlType() const; void setSqlType(const QString &sqlType); static QString fromCamelCase(const QString &s); static QString toCamelCase(const QString& s); private: QString createTableText(const DatabaseTable *table, const QString table_name) const; private: DatabaseManager *mDatabaseManager = nullptr; QString mSqlType; }; } // namespace serversdk