server-sdk/src/serversdk/databaseutils.h
2019-12-02 18:13:17 +01:00

68 lines
1.7 KiB
C++

#pragma once
#include "databasetable.h"
#include <QObject>
#include <QRegularExpression>
#include <QSqlQuery>
#include <QSqlRecord>
class DatabaseUtilsTest;
namespace serversdk {
class DatabaseManager;
class DatabaseUtils : public QObject
{
Q_OBJECT
friend class ::DatabaseUtilsTest;
public:
explicit DatabaseUtils(DatabaseManager *manager = nullptr, 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 QSet<QString> &filters = {}) const;
template <class T>
QList<std::shared_ptr<T>> tableFromQuery(QSqlQuery query) const {
QList<std::shared_ptr<T>> list;
while (query.next()) {
auto rec = query.record();
int total = rec.count();
QMap<QString, QVariant> 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<T>();
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