Merge branch 'refs/heads/master' into possible-change

# Conflicts:
#	src/serversdk/databaseutils.h
This commit is contained in:
Filip Bucek 2019-11-14 14:56:13 +01:00
commit 4dfd4227cb
6 changed files with 28 additions and 25 deletions

View File

@ -64,6 +64,7 @@ bool DatabaseTable::fromVariantMap(const QVariantMap &variantMap)
return true; return true;
} }
QList<std::shared_ptr<DatabaseTable> > DatabaseTable::fromListVariantMap(const QList<QVariantMap> &listMap) QList<std::shared_ptr<DatabaseTable> > DatabaseTable::fromListVariantMap(const QList<QVariantMap> &listMap)
{ {
QList<std::shared_ptr<DatabaseTable>> list; QList<std::shared_ptr<DatabaseTable>> list;
@ -134,5 +135,4 @@ QString DatabaseTable::textPostgresType(QVariant::Type type) const
} }
} }
} // namespace serversdk } // namespace serversdk

View File

@ -59,8 +59,7 @@ namespace serversdk {
// SELECT FROM TABLE // SELECT FROM TABLE
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names"); QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
auto listVariantMap = utils.listMapFromQuery(selectSQL); auto list = utils.tableFromQuery<Names>(selectSQL);
auto list = Names::fromListVariantMap(listVariantMap);
} }
* *
* @endcode * @endcode
@ -156,5 +155,6 @@ public:
}; };
} // namespace serversdk } // namespace serversdk

View File

@ -4,7 +4,6 @@
#include "logger.h" #include "logger.h"
#include <QMetaProperty> #include <QMetaProperty>
#include <QSqlRecord>
namespace serversdk { namespace serversdk {
@ -174,20 +173,6 @@ QSqlQuery DatabaseUtils::updateTable(const DatabaseTable *table, const QString t
} }
QList<QMap<QString, QVariant>> DatabaseUtils::listMapFromQuery(QSqlQuery query) const
{
QList<QMap<QString, QVariant>> list;
while (query.next()) {
auto rec = query.record();
int total = rec.count();
QMap<QString, QVariant> map;
for (int column = 0; column < total; ++column) {
map.insert(rec.fieldName(column), query.value(column));
}
list << map;
}
return list;
}
QString DatabaseUtils::sqlType() const QString DatabaseUtils::sqlType() const
{ {

View File

@ -4,6 +4,7 @@
#include <QObject> #include <QObject>
#include <QSqlQuery> #include <QSqlQuery>
#include <QSqlRecord>
class DatabaseUtilsTest; class DatabaseUtilsTest;
@ -25,7 +26,24 @@ public:
QSqlQuery updateTable(const DatabaseTable *table, const QString table_name) const; QSqlQuery updateTable(const DatabaseTable *table, const QString table_name) const;
QList<QMap<QString, QVariant>> listMapFromQuery(QSqlQuery query) 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) {
map.insert(rec.fieldName(column), query.value(column));
}
auto data = std::make_shared<T>();
data->fromVariantMap(map);
list << data;
}
return list;
}
QString sqlType() const; QString sqlType() const;
void setSqlType(const QString &sqlType); void setSqlType(const QString &sqlType);

View File

@ -87,8 +87,7 @@ void PostgresqlTest::createTable_test()
// SELECT FROM TABLE // SELECT FROM TABLE
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names"); QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
auto listVariantMap = utils.listMapFromQuery(selectSQL); auto list = utils.tableFromQuery<Names>(selectSQL);
auto list = Names::fromListVariantMap(listVariantMap);
// ENSURE SAME // ENSURE SAME
auto first = list.first(); auto first = list.first();

View File

@ -86,13 +86,14 @@ void SqliteTest::createTable_test()
// SELECT FROM TABLE // SELECT FROM TABLE
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names"); QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
auto listVariantMap = utils.listMapFromQuery(selectSQL); auto list = utils.tableFromQuery<Names>(selectSQL);
auto list = Names::fromListVariantMap(listVariantMap);
// ENSURE SAME // ENSURE SAME
auto first = list.first();
auto names_tab = std::dynamic_pointer_cast<Names>(first);
QCOMPARE(list.count(), 1); QCOMPARE(list.count(), 1);
auto first = list.first();
QVERIFY(first);
auto names_tab = std::dynamic_pointer_cast<Names>(first);
QVERIFY(names_tab);
QCOMPARE(names_tab->name(), QStringLiteral("Testname")); QCOMPARE(names_tab->name(), QStringLiteral("Testname"));
QCOMPARE(list.first()->jsonData(), names.jsonData()); QCOMPARE(list.first()->jsonData(), names.jsonData());