diff --git a/src/serversdk/databasetable.cpp b/src/serversdk/databasetable.cpp index 918c04c..f7878cd 100644 --- a/src/serversdk/databasetable.cpp +++ b/src/serversdk/databasetable.cpp @@ -64,6 +64,17 @@ bool DatabaseTable::fromVariantMap(const QVariantMap &variantMap) return true; } +QList > DatabaseTable::fromListVariantMap(const QList &listMap) +{ + QList> list; + for (const QVariantMap &map : listMap) { + auto data = std::make_shared(); + data->fromVariantMap(map); + list << data; + } + return list; +} + bool DatabaseTable::fromJson(const QByteArray &data) { QJsonDocument doc = QJsonDocument::fromJson(data); diff --git a/src/serversdk/databasetable.h b/src/serversdk/databasetable.h index 96d5dca..c46baed 100644 --- a/src/serversdk/databasetable.h +++ b/src/serversdk/databasetable.h @@ -31,6 +31,8 @@ public: bool fromJson(const QByteArray &data); QVariantMap toVariantMap() const; bool fromVariantMap(const QVariantMap &variantMap); + + static QList> fromListVariantMap(const QList &listMap); }; } // namespace serversdk diff --git a/src/serversdk/databaseutils.cpp b/src/serversdk/databaseutils.cpp index fe66019..ec20528 100644 --- a/src/serversdk/databaseutils.cpp +++ b/src/serversdk/databaseutils.cpp @@ -1,8 +1,10 @@ #include "databaseutils.h" #include "databasemanager.h" +#include "databasetable.h" #include "logger.h" #include +#include namespace serversdk { @@ -140,9 +142,20 @@ QSqlQuery DatabaseUtils::insertIntoTable(const DatabaseTable *table, const QStri return res; } -void DatabaseUtils::udpateFromSqlQuery(DatabaseTable *table, QSqlQuery query) const + +QList> DatabaseUtils::listMapFromQuery(QSqlQuery query) const { - qCDebug(sdkdb) << "not implemented"; + QList> list; + while (query.next()) { + auto rec = query.record(); + int total = rec.count(); + QMap map; + for (int column = 0; column < total; ++column) { + map.insert(rec.fieldName(column), query.value(column)); + } + list << map; + } + return list; } QString DatabaseUtils::sqlType() const @@ -180,4 +193,6 @@ QString DatabaseUtils::textSQLIteType(QVariant::Type type) const } } + + } // namespace serversdk diff --git a/src/serversdk/databaseutils.h b/src/serversdk/databaseutils.h index 70e40b4..fb385b6 100644 --- a/src/serversdk/databaseutils.h +++ b/src/serversdk/databaseutils.h @@ -22,7 +22,8 @@ public: QSqlQuery createTable(const DatabaseTable *table, const QString table_name) const; QSqlQuery insertIntoTable(const DatabaseTable *table, const QString table_name) const; - void udpateFromSqlQuery(DatabaseTable *table, QSqlQuery query) const; + template QList> dataFromSqlQuery(QSqlQuery query); + QList> listMapFromQuery(QSqlQuery query) const; QString sqlType() const; diff --git a/test/auto/database/tst_sqlite.cpp b/test/auto/database/tst_sqlite.cpp index fc85399..300011c 100644 --- a/test/auto/database/tst_sqlite.cpp +++ b/test/auto/database/tst_sqlite.cpp @@ -74,34 +74,28 @@ void SqliteTest::createTable_test() - // Not correct way - auto names = std::make_unique(); + Names names; - - // Creating table + // CREATE TABLE serversdk::DatabaseUtils utils(&db); - QSqlQuery query = utils.createTable(names.get(), "names"); -// Q_ASSERT(query.isValid()); + QSqlQuery query = utils.createTable(&names, "names"); - // Inserting into table - names->set_id(2); - names->set_name("Testname"); + // INSERT INTO TABLE + names.set_id(2); + names.set_name("Testname"); - utils.insertIntoTable(names.get(), "names"); - QSqlQuery insertQuery = utils.insertIntoTable(names.get(), "names"); - //Q_ASSERT(insertQuery.isValid()); + utils.insertIntoTable(&names, "names"); - // Select from table - QSqlQuery selectSQL("SELECT * FROM names"); + // SELECT FROM TABLE + QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names"); + auto listVariantMap = utils.listMapFromQuery(selectSQL); + auto list = Names::fromListVariantMap(listVariantMap); - // TODO: finish -> have to use sqlPlain - // Q_ASSERT(db.executeQselectSQL)); - while (selectSQL.next()) { - QString value = selectSQL.value(1).toString(); - qDebug() << "value is" << value; - } + // ENSURE SAME + QCOMPARE(list.count(), 1); + QCOMPARE(list.first()->name(), QStringLiteral("Testname")); - //db.create + QCOMPARE(list.first()->jsonData(), names.jsonData()); } QTEST_APPLESS_MAIN(SqliteTest)