Possible to INSERT and SELECT from database

This commit is contained in:
Filip Bucek 2019-11-12 16:16:39 +01:00
parent 174ede92ee
commit eb2a6c92fa
5 changed files with 47 additions and 24 deletions

View File

@ -64,6 +64,17 @@ 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>> list;
for (const QVariantMap &map : listMap) {
auto data = std::make_shared<DatabaseTable>();
data->fromVariantMap(map);
list << data;
}
return list;
}
bool DatabaseTable::fromJson(const QByteArray &data) bool DatabaseTable::fromJson(const QByteArray &data)
{ {
QJsonDocument doc = QJsonDocument::fromJson(data); QJsonDocument doc = QJsonDocument::fromJson(data);

View File

@ -31,6 +31,8 @@ public:
bool fromJson(const QByteArray &data); bool fromJson(const QByteArray &data);
QVariantMap toVariantMap() const; QVariantMap toVariantMap() const;
bool fromVariantMap(const QVariantMap &variantMap); bool fromVariantMap(const QVariantMap &variantMap);
static QList<std::shared_ptr<DatabaseTable>> fromListVariantMap(const QList<QVariantMap> &listMap);
}; };
} // namespace serversdk } // namespace serversdk

View File

@ -1,8 +1,10 @@
#include "databaseutils.h" #include "databaseutils.h"
#include "databasemanager.h" #include "databasemanager.h"
#include "databasetable.h"
#include "logger.h" #include "logger.h"
#include <QMetaProperty> #include <QMetaProperty>
#include <QSqlRecord>
namespace serversdk { namespace serversdk {
@ -140,9 +142,20 @@ QSqlQuery DatabaseUtils::insertIntoTable(const DatabaseTable *table, const QStri
return res; return res;
} }
void DatabaseUtils::udpateFromSqlQuery(DatabaseTable *table, QSqlQuery query) const
QList<QMap<QString, QVariant>> DatabaseUtils::listMapFromQuery(QSqlQuery query) const
{ {
qCDebug(sdkdb) << "not implemented"; 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
@ -180,4 +193,6 @@ QString DatabaseUtils::textSQLIteType(QVariant::Type type) const
} }
} }
} // namespace serversdk } // namespace serversdk

View File

@ -22,7 +22,8 @@ public:
QSqlQuery createTable(const DatabaseTable *table, const QString table_name) const; QSqlQuery createTable(const DatabaseTable *table, const QString table_name) const;
QSqlQuery insertIntoTable(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<typename T> QList<std::shared_ptr<T>> dataFromSqlQuery(QSqlQuery query);
QList<QMap<QString, QVariant>> listMapFromQuery(QSqlQuery query) const;
QString sqlType() const; QString sqlType() const;

View File

@ -74,34 +74,28 @@ void SqliteTest::createTable_test()
// Not correct way Names names;
auto names = std::make_unique<Names>();
// CREATE TABLE
// Creating table
serversdk::DatabaseUtils utils(&db); serversdk::DatabaseUtils utils(&db);
QSqlQuery query = utils.createTable(names.get(), "names"); QSqlQuery query = utils.createTable(&names, "names");
// Q_ASSERT(query.isValid());
// Inserting into table // INSERT INTO TABLE
names->set_id(2); names.set_id(2);
names->set_name("Testname"); names.set_name("Testname");
utils.insertIntoTable(names.get(), "names"); utils.insertIntoTable(&names, "names");
QSqlQuery insertQuery = utils.insertIntoTable(names.get(), "names");
//Q_ASSERT(insertQuery.isValid());
// Select from table // SELECT FROM TABLE
QSqlQuery selectSQL("SELECT * FROM names"); QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
auto listVariantMap = utils.listMapFromQuery(selectSQL);
auto list = Names::fromListVariantMap(listVariantMap);
// TODO: finish -> have to use sqlPlain // ENSURE SAME
// Q_ASSERT(db.executeQselectSQL)); QCOMPARE(list.count(), 1);
while (selectSQL.next()) { QCOMPARE(list.first()->name(), QStringLiteral("Testname"));
QString value = selectSQL.value(1).toString();
qDebug() << "value is" << value;
}
//db.create QCOMPARE(list.first()->jsonData(), names.jsonData());
} }
QTEST_APPLESS_MAIN(SqliteTest) QTEST_APPLESS_MAIN(SqliteTest)