Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 506067a2

Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt

  • ID 506067a2376bc70badb37ff4b7a97c5d1f8d4668
  • Vorgänger 38838b5b
  • Nachfolger 1b167b6c

some improvements

Unterschiede anzeigen:

src/entitymanager.h
#include "database.h"
#include "entityinstancefactory.h"
#include "cache.h"
#include "queryinterpreter.h"
namespace CuteEntityManager {
......
bool removeAll(QString tblname);
bool createTable(const QSharedPointer<Entity> &entity,
bool createRelationTables = true);
qint8 count(const QSharedPointer<Entity> &entity, bool ignoreID = true);
qint8 count(const QString &tableName);
quint8 count(const QSharedPointer<Entity> &entity, bool ignoreID = true);
quint8 count(const QString &tableName);
QSharedPointer<Database> getDb() const;
void setDb(const QSharedPointer<Database> &value);
QSharedPointer<Schema> getSchema() const;
void refresh(QSharedPointer<Entity> &entity);
void setSchema(const QSharedPointer<Schema> &value);
/**
*@TODO use conditions
*/
public:
template<class T> qint8 count(QHash<QString, QString> condition =
QHash<QString, QVariant>()) {
Entity *e = EntityInstanceFactory::createInstance<T>();
qint8 rc = 0;
if (e) {
rc = this->count(e->getTablename());
delete e;
}
return rc;
}
QList<QHash<QString, QVariant> > selectByQuery(Query &query);
QList<QHash<QString, QVariant> > selectBySql(const QString &sql);
qint8 count(Query &query);
template<class T> QList<QSharedPointer<Entity>> findAll() {
public:
template<class T> QList<QSharedPointer<T>> findAll() {
QSharedPointer<Entity> ptr = QSharedPointer<Entity>
(EntityInstanceFactory::createInstance<T>());
(EntityInstanceFactory::createInstance<T *>());
if (ptr) {
auto maps = this->findAll(ptr);
return this->convert(maps, EntityHelper::getClassname(ptr.data()));
auto converted = this->convert(maps, EntityHelper::getClassname(ptr.data()));
return this->convertList<T>(converted);
}
return QList<QSharedPointer<Entity>>();
return QList<QSharedPointer<T>>();
}
template<class T> QSharedPointer<Entity> findById(const qint64 &id) {
auto e = EntityInstanceFactory::createInstance<T>();
template<class T> QSharedPointer<T> findById(const qint64 &id) {
auto e = EntityInstanceFactory::createInstance<T *>();
QSharedPointer<Entity> ptr = QSharedPointer<Entity>(e);
return this->findById(id, ptr);
return this->findById(id, ptr).objectCast<T>();
}
template<class T> QSharedPointer<Entity> findEntityByAttributes(
template<class T> QSharedPointer<T> findEntityByAttributes(
const QHash<QString, QVariant>
&attributes) {
auto list = this->findAllEntitiesByAttributes<T>(attributes, 1, 0);
auto list = this->findAllEntitiesByAttributes<T *>(attributes, 1, 0);
if (list.isEmpty()) {
return QSharedPointer<Entity>();
return QSharedPointer<T>();
}
return list.at(0);
QSharedPointer<Entity> obj = list.at(0);
return obj.objectCast<T>();
}
template<class T> QList<QSharedPointer<Entity>> findAllEntitiesByAttributes(
const QHash<QString, QVariant> &attributes =
QHash<QString, QString>(), quint32 limit = 0, quint32 offset = 0) {
QSharedPointer<Entity> e = QSharedPointer<Entity>
(EntityInstanceFactory::createInstance<T>());
template<class T> QList<QSharedPointer<T>> findAllEntitiesByAttributes(
const QHash<QString, QVariant> &attributes =
QHash<QString, QString>(), quint64 limit = 0, quint64 offset = 0) {
QSharedPointer<T> e = QSharedPointer<T>
(EntityInstanceFactory::createInstance<T *>());
if (e) {
auto results = this->findAllByAttributes(attributes, e->getTablename());
Query query = Query(QStringList(e->getTablename()),
this->schema->getQueryBuilder()->where(attributes));
query.setLimit(limit);
query.setOffset(offset);
QSqlQuery q = this->queryInterpreter->build(query);
this->db->select(q);
auto results = this->convertQueryResult(q);
auto list = this->convert(results, EntityHelper::getClassname(e.data()));
return list;
return this->convertList<T>(list);
}
return QList<QSharedPointer<Entity>>();
}
template<class T> QList<QSharedPointer<Entity>> findEntitiesBySql(
template<class T> QList<QSharedPointer<T>> findEntitiesBySql(
const QString &sql) {
Entity *e = EntityInstanceFactory::createInstance<T>();
QSharedPointer<T> e = EntityInstanceFactory::createInstance<T *>();
if (e) {
QSqlQuery q = this->db.data()->select(sql);
QSqlQuery q = this->db->select(sql);
auto result = this->convertQueryResult(q);
auto ret = this->convert(result, EntityHelper::getClassname(e));
delete e;
return ret;
auto converted = this->convert(result, EntityHelper::getClassname(e));
return this->convertList<T>(converted);
}
return QList<QSharedPointer<Entity>>();
return QList<QSharedPointer<T>>();
}
template<class T> bool remove(const QList<qint64> &ids) {
bool ok = true;
foreach (qint64 var, ids) {
if (!this->remove<T>(var)) {
if (!this->remove<T *>(var)) {
ok = false;
break;
}
......
}
template<class T> bool remove(qint64 id) {
Entity *e = EntityInstanceFactory::createInstance<T>();
Entity *e = EntityInstanceFactory::createInstance<T *>();
if (e) {
QSharedPointer<Entity> ptr = QSharedPointer<Entity>(e);
ptr->setId(id);
......
}
protected:
template<class T> QList<QSharedPointer<T>> convertList(const
QList<QSharedPointer<Entity>> &list) {
QList<QSharedPointer<T>> newList = QList<QSharedPointer<T>>();
for (int i = 0; i < list.size(); ++i) {
newList.append(list.at(i).objectCast<T>());
}
return newList;
}
void init();
QList<QHash<QString, QVariant> > findAll(const QSharedPointer<Entity> &e);
void resolveRelations(const QSharedPointer<Entity> &entity,

Auch abrufbar als: Unified diff