forked from ondra/server-sdk
DatabaseTable new method primaryKey
This commit is contained in:
parent
c038568124
commit
f387b600f7
@ -13,6 +13,18 @@ DatabaseTable::DatabaseTable(QObject *parent) : QObject(parent)
|
||||
{
|
||||
}
|
||||
|
||||
QString DatabaseTable::primaryKey() const
|
||||
{
|
||||
const QMetaObject *metaObj = this->metaObject();
|
||||
for (int i = metaObj->propertyOffset(); i < metaObj->propertyCount(); ++i) {
|
||||
QMetaProperty prop = metaObj->property(i);
|
||||
if (!prop.isUser())
|
||||
continue;
|
||||
return prop.name();
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
QByteArray DatabaseTable::jsonData(const QSet<QString> &filters) const
|
||||
{
|
||||
auto variantMap = this->toVariantMap(filters);
|
||||
|
||||
@ -84,6 +84,8 @@ class DatabaseTable : public QObject
|
||||
public:
|
||||
explicit DatabaseTable(QObject *parent = nullptr);
|
||||
|
||||
QString primaryKey() const;
|
||||
|
||||
/**
|
||||
* @brief Creates JSON from QMetaObject data ( Q_PROPERTY ) -> TABLE_PROPERTY
|
||||
* @return text json e.g. { "id": 00344 }
|
||||
|
||||
@ -109,7 +109,14 @@ QSqlQuery DatabaseUtils::createTable(const DatabaseTable *table, const QString t
|
||||
return mDatabaseManager->execPlainSql(sql);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief DatabaseUtils::insertIntoTable
|
||||
* @param table
|
||||
* @param table_name
|
||||
* @return
|
||||
*
|
||||
* @todo Loop VariantMap change to Loop over propertiess
|
||||
*/
|
||||
QSqlQuery DatabaseUtils::insertIntoTable(const DatabaseTable *table, const QString table_name) const
|
||||
{
|
||||
QString columns;
|
||||
@ -145,6 +152,7 @@ QSqlQuery DatabaseUtils::insertIntoTable(const DatabaseTable *table, const QStri
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
QSqlQuery DatabaseUtils::updateTable(const DatabaseTable *table, const QString table_name) const
|
||||
{
|
||||
QString columnsAndValues;
|
||||
@ -157,7 +165,8 @@ QSqlQuery DatabaseUtils::updateTable(const DatabaseTable *table, const QString t
|
||||
// Primary key is first user property ( first VariantMap item )
|
||||
// in ( primary key ): id
|
||||
// out: id = :id
|
||||
primaryKeyCondition = keys.at(0) + " = :" + keys.at(0);
|
||||
const QString primaryKey = table->primaryKey();
|
||||
primaryKeyCondition = primaryKey + " = :" + primaryKey;
|
||||
|
||||
for (auto _key : keys) {
|
||||
QString key = fromCamelCase(_key);
|
||||
|
||||
@ -105,8 +105,11 @@ void DatabaseTableTest::constructor_test()
|
||||
auto table = std::make_unique<BookTable>();
|
||||
QCOMPARE(table->id(), 0);
|
||||
QCOMPARE(table->name(), QStringLiteral("Test"));
|
||||
|
||||
QCOMPARE(table->primaryKey(), QStringLiteral("uuid"));
|
||||
}
|
||||
|
||||
|
||||
void DatabaseTableTest::qvariant_test()
|
||||
{
|
||||
auto table = std::make_unique<BookTable>();
|
||||
|
||||
@ -107,35 +107,45 @@ void SqliteTest::updateTable_test()
|
||||
db.openSQLite(dbpath);
|
||||
QVERIFY(db.isOpen());
|
||||
|
||||
Name names;
|
||||
Name name_A, name_B;
|
||||
|
||||
// CREATE TABLE
|
||||
serversdk::DatabaseUtils utils(&db);
|
||||
QSqlQuery query = utils.createTable(&names, "names");
|
||||
QSqlQuery query = utils.createTable(&name_A, "names");
|
||||
|
||||
// INSERT INTO TABLE
|
||||
const QString uuidA = "48f64fab-ba2a-40b5-8fbb-75361099dfb6";
|
||||
names.set_uuid(uuidA);
|
||||
names.set_id(2);
|
||||
names.set_name("Testname");
|
||||
const QString uuidB = "d70143ab-8c14-4ee0-85cb-f0d1b72df104";
|
||||
name_A.set_uuid(uuidA);
|
||||
name_A.set_id(2);
|
||||
name_A.set_name("TestnameA");
|
||||
name_B.set_uuid(uuidB);
|
||||
name_B.set_id(2);
|
||||
name_B.set_name("TestnameB");
|
||||
|
||||
|
||||
utils.insertIntoTable(&name_A, "names");
|
||||
utils.insertIntoTable(&name_B, "names");
|
||||
|
||||
utils.insertIntoTable(&names, "names");
|
||||
|
||||
// NOW UPDATING TABLE WITH name: NewName
|
||||
names.set_name("NewName");
|
||||
utils.updateTable(&names, "names");
|
||||
name_A.set_name("TestnameA-new");
|
||||
utils.updateTable(&name_A, "names");
|
||||
name_B.set_name("TestnameB-new");
|
||||
utils.updateTable(&name_B, "names");
|
||||
|
||||
// SELECT FROM TABLE
|
||||
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
|
||||
auto list = utils.tableFromQuery<Name>(selectSQL);
|
||||
QCOMPARE(list.count(), 2);
|
||||
|
||||
// ENSURE SAME
|
||||
QCOMPARE(list.count(), 1);
|
||||
auto names_tab = list.first();
|
||||
QVERIFY(names_tab);
|
||||
QCOMPARE(names_tab->name(), QStringLiteral("NewName"));
|
||||
auto dbA = list.first();
|
||||
auto dbB = list.last();
|
||||
QCOMPARE(dbA->name(), name_A.name());
|
||||
QCOMPARE(dbB->name(), name_B.name());
|
||||
|
||||
QCOMPARE(list.first()->jsonData(), names.jsonData());
|
||||
QCOMPARE(dbA->jsonData(), name_A.jsonData());
|
||||
QCOMPARE(dbB->jsonData(), name_B.jsonData());
|
||||
}
|
||||
|
||||
QTEST_APPLESS_MAIN(SqliteTest)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user