Revision bb5e9339
Von Sebastian Diel vor mehr als 10 Jahren hinzugefügt
| example/main.cpp | ||
|---|---|---|
|
#include <QMetaMethod>
|
||
|
#include <QMetaProperty>
|
||
|
#include "models/group.h"
|
||
|
#include "entity.h"
|
||
|
#include "entitymanager.h"
|
||
|
#include "../src/entity.h"
|
||
|
#include "../src/entitymanager.h"
|
||
|
#include <QGenericReturnArgument>
|
||
|
/**
|
||
|
* create,remove und merge funktionieren
|
||
|
*/
|
||
|
|
||
|
int main(int argc, char *argv[]) {
|
||
|
Q_UNUSED(argc) Q_UNUSED(argv)
|
||
|
CuteEntityManager::EntityManager *e = new CuteEntityManager::EntityManager("QSQLITE",
|
||
|
QDir::currentPath() + "/db.sqlite");
|
||
|
QSharedPointer<Artikel> a = QSharedPointer<Artikel>(new Artikel(20.0, "Müsli"));
|
||
| example/models/artikel.h | ||
|---|---|---|
|
|
||
|
#ifndef ARTIKEL_H
|
||
|
#define ARTIKEL_H
|
||
|
#include "entity.h"
|
||
|
#include "../../src/entity.h"
|
||
|
#include <QHash>
|
||
|
#include <QVariant>
|
||
|
|
||
| example/models/group.cpp | ||
|---|---|---|
|
|
||
|
#include "models/person.h"
|
||
|
#include "models/group.h"
|
||
|
#include "relation.h"
|
||
|
#include "../src/relation.h"
|
||
|
//#include <QQmlListProperty>
|
||
|
#include <QDebug>
|
||
|
|
||
| example/models/person.h | ||
|---|---|---|
|
#include <QString>
|
||
|
#include <QList>
|
||
|
#include <QObject>
|
||
|
#include "entity.h"
|
||
|
#include "../../src/entity.h"
|
||
|
#include <QAbstractListModel>
|
||
|
#include <QDebug>
|
||
|
|
||
| src/entity.h | ||
|---|---|---|
|
virtual QHash<QString, Relation> getRelations();
|
||
|
virtual QStringList getTransientAttributes();
|
||
|
virtual QStringList getBLOBColumns();
|
||
|
|
||
|
//return value must be the exact name defined in Q_PROPERTY
|
||
|
virtual QString getPrimaryKey();
|
||
|
QHash<QString, QMetaProperty> getMetaProperties() const;
|
||
| src/entityinstancefactory.cpp | ||
|---|---|---|
|
return EntityInstanceFactory::createInstance(className.toUtf8().constData());
|
||
|
}
|
||
|
|
||
|
Entity *EntityInstanceFactory::createInstance(int id) {
|
||
|
Entity *EntityInstanceFactory::createInstance(int metaTypeId) {
|
||
|
Entity *e = 0;
|
||
|
if (id != -1) {
|
||
|
e = static_cast<Entity *>(QMetaType::create(id));
|
||
|
if (metaTypeId != -1) {
|
||
|
e = static_cast<Entity *>(QMetaType::create(metaTypeId));
|
||
|
}
|
||
|
return e;
|
||
|
}
|
||
| src/entityinstancefactory.h | ||
|---|---|---|
|
public:
|
||
|
static Entity *createInstance(const char *className);
|
||
|
static Entity *createInstance(const QString &className);
|
||
|
static Entity *createInstance(int id);
|
||
|
static Entity *createInstance(int metaTypeId);
|
||
|
static Entity *createInstance(const char *className, const QHash<QString, QVariant> &attributes);
|
||
|
static Entity *setAttributes(Entity *e, const QHash<QString, QVariant> &attributes, QHash<QString, QMetaProperty> metaprops);
|
||
|
static Entity *setAttributes(Entity *e, const QHash<QString, QVariant> &attributes);
|
||
| src/querybuilder.cpp | ||
|---|---|---|
|
auto o = entity.data()->metaObject();
|
||
|
QHash<QString, Relation> relations = entity.data()->getRelations();
|
||
|
for (int var = 0; var < o->propertyCount(); ++var) {
|
||
|
o->property(var);
|
||
|
auto m = o->property(var);
|
||
|
if (m.name() != QString("objectName") && m.isReadable()
|
||
|
&& !entity.data()->getTransientAttributes().contains(m.name())) {
|
||
| src/relation.h | ||
|---|---|---|
|
#include <QString>
|
||
|
namespace CuteEntityManager {
|
||
|
enum RelationType {
|
||
|
ONE_TO_ONE, //e.g. specialization
|
||
|
ONE_TO_ONE, //e.g. specialization, heritage
|
||
|
ONE_TO_MANY, //@OneToMany(cascade=ALL, mappedBy="customer")
|
||
|
MANY_TO_ONE, //1-n Entity foreign key in same table
|
||
|
MANY_TO_MANY,
|
||
| src/schema/sqlitequerybuilder.cpp | ||
|---|---|---|
|
QString CuteEntityManager::SqliteQueryBuilder::addForeignKey(QString name, QString tableName, QStringList columns,
|
||
|
QString refTableName, QStringList refColumns, QString deleteConstraint, QString updateConstraint) const {
|
||
|
//not supported
|
||
|
Q_UNUSED(refTableName)
|
||
|
Q_UNUSED(refColumns)
|
||
|
Q_UNUSED(name)
|
||
|
Q_UNUSED(tableName)
|
||
|
Q_UNUSED(deleteConstraint)
|
||
|
Q_UNUSED(columns)
|
||
|
Q_UNUSED(updateConstraint)
|
||
|
return "";
|
||
|
}
|
||
|
|
||
Auch abrufbar als: Unified diff
Bei Sebastian