Revision 554f7bc0
Von Christian Ehringfeld vor etwa 10 Jahren hinzugefügt
| samples/example/main.cpp | ||
|---|---|---|
|
qWarning() << "-----------------------------";
|
||
|
|
||
|
QSharedPointer<Entity> personFindPtr = e->findById(1, QString("Person"));
|
||
|
qDebug() << "HASCHANGED:" << e->hasChanged(personFindPtr);
|
||
|
e->refresh(personFindPtr);
|
||
|
QSharedPointer<Person> pers = personFindPtr.objectCast<Person>();
|
||
|
qWarning() << "MainTeacher:" << personFindPtr->toString();
|
||
| src/entitymanager.cpp | ||
|---|---|---|
|
return !entity->hasErrors();
|
||
|
}
|
||
|
|
||
|
bool EntityManager::hasChanged(QSharedPointer<Entity> &entity) {
|
||
|
bool changed = true;
|
||
|
if (entity->getId() >= -1) {
|
||
|
changed = false;
|
||
|
auto listmap = this->findByPk(entity->getId(), entity);
|
||
|
auto relations = entity->getRelations();
|
||
|
QStringList rels = QStringList();
|
||
|
for (auto i = relations.constBegin(); i != relations.constEnd(); ++i) {
|
||
|
if (i.value().getType() == RelationType::MANY_TO_ONE
|
||
|
|| (i.value().getType() == RelationType::ONE_TO_ONE
|
||
|
&& i.value().getMappedBy().isEmpty())) {
|
||
|
rels.append(this->schema->getQueryBuilder()->generateColumnNameID(i.key()));
|
||
|
}
|
||
|
}
|
||
|
for (auto i = listmap.constBegin(); i != listmap.constEnd(); ++i) {
|
||
|
if (rels.contains(i.key())) {
|
||
|
QString appendix =
|
||
|
this->schema->getQueryBuilder()->columnNameIDAppendix();
|
||
|
QString relKey = i.key();
|
||
|
QVariant v = entity->getProperty(relKey.remove(relKey.size() - appendix.size(),
|
||
|
appendix.size()));
|
||
|
if (!v.isNull()) {
|
||
|
auto entity = EntityInstanceFactory::castQVariant(v);
|
||
|
if (entity->getProperty(entity->getPrimaryKey()) != i.value()) {
|
||
|
changed = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
} else {
|
||
|
QVariant property = entity->getProperty(i.key());
|
||
|
changed = i.value() != property && !(i.value().isNull() && property.isNull());
|
||
|
if (changed) {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
return changed;
|
||
|
}
|
||
|
|
||
|
QString EntityManager::createConnection() {
|
||
|
QStringList l = EntityManager::getConnectionNames();
|
||
|
QString conName = "";
|
||
| src/entitymanager.h | ||
|---|---|---|
|
QList<QHash<QString, QVariant> > selectBySql(const QString &sql);
|
||
|
qint8 count(Query &query);
|
||
|
bool validate(QSharedPointer<Entity> &entity);
|
||
|
bool hasChanged(QSharedPointer<Entity> &entity);
|
||
|
|
||
|
|
||
|
public:
|
||
|
EntityManager(QSqlDatabase database, bool logQueries = false);
|
||
| src/querybuilder.cpp | ||
|---|---|---|
|
}
|
||
|
|
||
|
QString QueryBuilder::generateColumnNameID(QString name) const {
|
||
|
return name.append("_id");
|
||
|
return name.append(this->columnNameIDAppendix());
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::columnNameIDAppendix() const {
|
||
|
return "_id";
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::getForeignKeyCascade(DbForeignKeyCascade cascade) const {
|
||
| src/querybuilder.h | ||
|---|---|---|
|
QString generateIndexName(const QString &name, const QString &table,
|
||
|
const QString &refColumn, const QString &refTable, const bool fk) const;
|
||
|
QString generateColumnNameID(QString name) const;
|
||
|
QString columnNameIDAppendix() const;
|
||
|
virtual void createRelationFK(QStringList &queries,
|
||
|
const QSharedPointer<Entity> &entity, const Relation &relation,
|
||
|
const QMetaProperty &metaProperty, const QString &update,
|
||
Auch abrufbar als: Unified diff
has changed method