forked from ondra/server-sdk
Possible to INSERT and SELECT from database
This commit is contained in:
parent
174ede92ee
commit
eb2a6c92fa
@ -64,6 +64,17 @@ bool DatabaseTable::fromVariantMap(const QVariantMap &variantMap)
|
||||
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)
|
||||
{
|
||||
QJsonDocument doc = QJsonDocument::fromJson(data);
|
||||
|
||||
@ -31,6 +31,8 @@ public:
|
||||
bool fromJson(const QByteArray &data);
|
||||
QVariantMap toVariantMap() const;
|
||||
bool fromVariantMap(const QVariantMap &variantMap);
|
||||
|
||||
static QList<std::shared_ptr<DatabaseTable>> fromListVariantMap(const QList<QVariantMap> &listMap);
|
||||
};
|
||||
|
||||
} // namespace serversdk
|
||||
|
||||
@ -1,8 +1,10 @@
|
||||
#include "databaseutils.h"
|
||||
#include "databasemanager.h"
|
||||
#include "databasetable.h"
|
||||
#include "logger.h"
|
||||
|
||||
#include <QMetaProperty>
|
||||
#include <QSqlRecord>
|
||||
|
||||
|
||||
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<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
|
||||
@ -180,4 +193,6 @@ QString DatabaseUtils::textSQLIteType(QVariant::Type type) const
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace serversdk
|
||||
|
||||
@ -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<typename T> QList<std::shared_ptr<T>> dataFromSqlQuery(QSqlQuery query);
|
||||
QList<QMap<QString, QVariant>> listMapFromQuery(QSqlQuery query) const;
|
||||
|
||||
|
||||
QString sqlType() const;
|
||||
|
||||
@ -74,34 +74,28 @@ void SqliteTest::createTable_test()
|
||||
|
||||
|
||||
|
||||
// Not correct way
|
||||
auto names = std::make_unique<Names>();
|
||||
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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user