Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 6c14baaf

Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt

  • ID 6c14baaf920d61c818b0e462d347bd93e4fd2df9
  • Vorgänger 7b72386d
  • Nachfolger e7cfc35a

killed some potential crash points (qvariant isNull() checks)

Unterschiede anzeigen:

src/entitymanager.cpp
QString relKey = i.key();
QVariant v = entity->getProperty(relKey.remove(relKey.size() - appendix.size(),
appendix.size()));
if (v.isValid() && !v.isNull()) {
if (!v.isNull() && v.data()) {
auto e = EntityInstanceFactory::castQVariant(v);
if (e && e->getProperty(e->getPrimaryKey()) != i.value()) {
changed = true;
......
}
} else {
QVariant property = entity->getProperty(i.key());
changed = i.value() != property && !(i.value().isNull() && property.isNull());
changed = i.value() != property;
if (changed) {
break;
}
......
QSharedPointer<Entity> &e,
const bool refresh) {
QSharedPointer<Entity> r;
if (!e.isNull() && (refresh
|| !(r = this->cache.get(id, EntityHelper::getClassname(e.data()))))) {
if (e && (refresh
|| !(r = this->cache.get(id, EntityHelper::getClassname(e.data()))))) {
e->setId(id);
auto map = this->findByPk(id, e);
r = this->convert(map, EntityHelper::getClassname(e.data()), refresh);
......
while (iterator != relations.constEnd()) {
const Relation r = iterator.key();
auto var = iterator.value().read(entity.data());
if (!var.isNull()) {
if (var.data()) {
if (r.getType() == RelationType::MANY_TO_ONE) {
auto e = EntityInstanceFactory::castQVariant(var);
if (this->shouldBeSaved(e, r)) {
......
for (auto i = relations.constBegin(); i != relations.constEnd(); ++i) {
const Relation r = i.key();
auto var = i.value().read(entity.data());
if (!var.isNull()) {
if (!var.isNull() && var.data()) {
if (r.getType() == RelationType::MANY_TO_MANY) {
this->persistManyToMany(entity, r, var, mergedObjects, ignoreHasChanged,
newItem);
......
} else if (r.getType() == RelationType::ONE_TO_ONE
&& !r.getMappedBy().isEmpty()) {
auto e = EntityInstanceFactory::castQVariant(var);
auto fkProp = EntityHelper::mappedProperty(r, e);
EntityHelper::setProperty(e, entity, fkProp);
this->saveObject(e, mergedObjects, true, ignoreHasChanged);
if(e) {
auto fkProp = EntityHelper::mappedProperty(r, e);
EntityHelper::setProperty(e, entity, fkProp);
this->saveObject(e, mergedObjects, true, ignoreHasChanged);
}
}
}
}
......
if (r.getCascadeType().contains(CascadeType::REMOVE)
|| r.getCascadeType().contains(CascadeType::ALL)) {
this->removeEntity(var);
} else if (!r.getMappedBy().isEmpty() && !var.isNull()) {
} else if (!r.getMappedBy().isEmpty() && var.data()) {
auto e = EntityInstanceFactory::castQVariant(var);
auto metas = EntityHelper::getMetaProperties(e.data());
if (metas.contains(r.getMappedBy())) {
......
}
void EntityManager::removeEntity(QVariant &var) {
if (!var.isNull()) {
if (var.data()) {
auto e = EntityInstanceFactory::castQVariant(var);
this->remove(e);
if(e) {
this->remove(e);
}
}
}
......
const Relation &r, QVariant &property, QList<Entity *> &mergedObjects,
const bool ignoreHasChanged, const bool newItem) {
auto list = property.value<QList<QVariant>>();
if (!list.isEmpty() && !(list.at(0).isNull())) {
if (!list.isEmpty() && list.at(0).data()) {
auto var = list.at(0);
auto ptr = EntityInstanceFactory::castQVariant(var);
auto builder = this->schema->getQueryBuilder();

Auch abrufbar als: Unified diff