Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 4e75d5a1

Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt

  • ID 4e75d5a1eccaf269829248be40dbe3f2e0160e01
  • Vorgänger 01fe6db3
  • Nachfolger 46d2de48

many-to-many table name resolve

Unterschiede anzeigen:

src/querybuilder.cpp
QString QueryBuilder::createForeignKeyManyToMany(const QString &tableName,
const QSharedPointer<Entity> &entity, const QString &update,
const QString &remove) const {
QString fkColumn = this->generateManyToManyColumnName(entity);
QString fkColumn = this->generateManyToManyColumnName(entity, "id");
QString indexName = this->generateIndexName(fkColumn,
tableName, fkColumn,
entity->getTablename(), true);
......
QString QueryBuilder::generateManyToManyTableName(const QSharedPointer<Entity>
&firstEntity,
const QSharedPointer<Entity> &secondEntity, const Relation &r) const {
if (r.getMappedBy().isEmpty()) {
return firstEntity->getTablename() + "_" + r.getPropertyName();
} else {
return secondEntity->getTablename() + "_" + r.getMappedBy();
auto ptr = firstEntity;
QString attributeName = r.getPropertyName();
if (!r.getMappedBy().isEmpty()) {
ptr = secondEntity;
attributeName = r.getMappedBy();
}
auto obj = EntityHelper::getBaseClassObject(ptr, attributeName);
QString tblName = obj->getTablename() + "_" + attributeName;
delete obj;
return tblName;
}
QHash<QString, QHash<QString, QString>> QueryBuilder::generateRelationTables(
......
if (r.getType() == RelationType::MANY_TO_MANY && r.getMappedBy().isEmpty()) {
QHash<QString, QString> h = QHash<QString, QString>();
h.insert(entity->getPrimaryKey(), this->schema->TYPE_BIGPK);
h.insert(this->generateManyToManyColumnName(entity),
h.insert(this->generateManyToManyColumnName(entity, r.getPropertyName()),
this->schema->TYPE_BIGINT);
auto meta = props.value(r.getPropertyName());
QSharedPointer<Entity> ptr = QSharedPointer<Entity>
(EntityInstanceFactory::createInstance(EntityInstanceFactory::extractEntityType(
QMetaType::typeName(meta.userType()))));
h.insert(this->generateManyToManyColumnName(ptr),
h.insert(this->generateManyToManyColumnName(ptr, r.getMappedBy()),
this->schema->TYPE_BIGINT);
relations.insert(this->generateManyToManyTableName(entity, ptr, r), h);
}
......
}
QString QueryBuilder::generateManyToManyColumnName(const QSharedPointer<Entity>
&entity) const {
&entity, QString attribute) const {
if (entity) {
return this->generateColumnNameID(entity->getTablename());
auto obj = EntityHelper::getBaseClassObject(entity, attribute);
QString tblName = obj->getTablename();
delete obj;
return this->generateColumnNameID(tblName);
}
this->database->getLogger()->logMsg("Entity is empty!", MsgType::WARNING);
return "";

Auch abrufbar als: Unified diff