updated comments to DatabaseTable

This commit is contained in:
Filip Bucek 2019-11-12 16:59:41 +01:00
parent 136ee8300a
commit c4c51e5099
2 changed files with 87 additions and 2 deletions

View File

@ -77,10 +77,13 @@ QList<std::shared_ptr<DatabaseTable> > DatabaseTable::fromListVariantMap(const Q
bool DatabaseTable::fromJson(const QByteArray &data) bool DatabaseTable::fromJson(const QByteArray &data)
{ {
// in: JSON ( e.g. {"id": 300} )
QJsonDocument doc = QJsonDocument::fromJson(data); QJsonDocument doc = QJsonDocument::fromJson(data);
QVariantMap variant = qvariant_cast<QVariantMap>(doc.toVariant()); QVariantMap variant = qvariant_cast<QVariantMap>(doc.toVariant());
return fromVariantMap(variant); // Populate this object data
bool res = fromVariantMap(variant);
return res;
} }

View File

@ -6,7 +6,6 @@
#include <memory> #include <memory>
// Default TABLE_PROPERTY
#define TABLE_PROPERTY(TYPE, NAME, SETNAME, INITVAL) \ #define TABLE_PROPERTY(TYPE, NAME, SETNAME, INITVAL) \
Q_PROPERTY(TYPE NAME READ NAME WRITE SETNAME NOTIFY NAME ## Changed USER true) \ Q_PROPERTY(TYPE NAME READ NAME WRITE SETNAME NOTIFY NAME ## Changed USER true) \
public: \ public: \
@ -22,6 +21,60 @@
namespace serversdk { namespace serversdk {
// Default TABLE_PROPERTY
/** # DatabaseTable
*
* Class for automatic CREATE/INSERT/SELECT and JSON handling
*
* ## Usage
*
* 1. define custom class by subclassint serversdk::DatabaseTable
*
* @code
class Names : public serversdk::DatabaseTable {
Q_OBJECT
TABLE_PROPERTY(int, id, set_id, 0);
TABLE_PROPERTY(QString, name, set_name, 0);
};
int main() {
// Prepare temporary path for database
QTemporaryDir dir;
QString dbpath = dir.path() + "/testdb.sqlite";
serversdk::DatabaseManager db;
db.openSQLite(dbpath);
Names names;
// CREATE TABLE
serversdk::DatabaseUtils utils(&db);
QSqlQuery query = utils.createTable(&names, "names");
// INSERT INTO TABLE
names.set_id(2);
names.set_name("Testname");
utils.insertIntoTable(&names, "names");
// SELECT FROM TABLE
QSqlQuery selectSQL = db.execPlainSql("SELECT * FROM names");
auto listVariantMap = utils.listMapFromQuery(selectSQL);
auto list = Names::fromListVariantMap(listVariantMap);
}
*
* @endcode
*
*
* @code
* in: TABLE_PROPERTY
* Q_PROPERTY
* @endcode
*
*
*
*
*/
class DatabaseTable : public QObject class DatabaseTable : public QObject
{ {
Q_OBJECT Q_OBJECT
@ -29,11 +82,40 @@ class DatabaseTable : public QObject
TABLE_PROPERTY(QString, name, setName, QString()); TABLE_PROPERTY(QString, name, setName, QString());
public: public:
explicit DatabaseTable(QObject *parent = nullptr); explicit DatabaseTable(QObject *parent = nullptr);
/**
* @brief Creates JSON from QMetaObject data ( Q_PROPERTY ) -> TABLE_PROPERTY
* @return text json e.g. { "id": 00344 }
*/
QByteArray jsonData() const; QByteArray jsonData() const;
/**
* @brief Populates object with JSON {"id": 300} )
* @return true if success TODO: not implemented corrrectly
*/
bool fromJson(const QByteArray &data); bool fromJson(const QByteArray &data);
/**
* @brief Creates VariantMap from QMetaObject data ( Q_PROPERTY )
* @return QVariantMap containing property with key/value pairs
*/
QVariantMap toVariantMap() const; QVariantMap toVariantMap() const;
/**
* @brief Populates object with QVariantMap
* @return true if success TODO: not implemented corrrectly
*/
bool fromVariantMap(const QVariantMap &variantMap); bool fromVariantMap(const QVariantMap &variantMap);
/**
* @brief Creates QList of objects from SELECT query
* @param rows with QVariantMap ( rows of key/value pairs )
* @return List of objects
*/
static QList<std::shared_ptr<DatabaseTable>> fromListVariantMap(const QList<QVariantMap> &listMap); static QList<std::shared_ptr<DatabaseTable>> fromListVariantMap(const QList<QVariantMap> &listMap);
}; };