Revision f5087482
Von Christian Ehringfeld vor mehr als 10 Jahren hinzugefügt
| example/main.cpp | ||
|---|---|---|
|
qDebug() << e;
|
||
|
qDebug() << "Tabelle artikel erstellt:" << e->createTable(ep);
|
||
|
e->create(ep);
|
||
|
|
||
|
//qDebug() << e->findById<Artikel *>(1); //not working grml!
|
||
|
// QSharedPointer<CuteEntityManager::Entity> p = QSharedPointer<CuteEntityManager::Entity>(new Person("Max", "Mustermann", Person::MALE, "", "", "",
|
||
|
// QDate::currentDate()));
|
||
|
// auto pptr = p.dynamicCast<CuteEntityManager::Entity>();
|
||
| ... | ... | |
|
// e->save(a);
|
||
|
// }
|
||
|
// qDebug() << "Dauer:" << t.elapsed();
|
||
|
|
||
|
Pupil *p = new Pupil();
|
||
|
auto hash = p->getMetaProperties();
|
||
|
// auto iterator = hash.constBegin();
|
||
| example/models/artikel.h | ||
|---|---|---|
|
#include <QHash>
|
||
|
#include <QVariant>
|
||
|
|
||
|
class Artikel : public CuteEntityManager::Entity {
|
||
|
class Artikel : virtual public CuteEntityManager::Entity {
|
||
|
Q_OBJECT
|
||
|
Q_PROPERTY(double preis READ getPreis WRITE setPreis)
|
||
|
Q_PROPERTY(QString name READ getName WRITE setName)
|
||
| src/entity.cpp | ||
|---|---|---|
|
return QHash<QString, Relation>();
|
||
|
}
|
||
|
|
||
|
const QHash<QString, Relation> Entity::getNonInheritedRelations() const
|
||
|
{
|
||
|
const QHash<QString, Relation> Entity::getNonInheritedRelations() const {
|
||
|
auto relations = this->getRelations();
|
||
|
auto superObject = EntityInstanceFactory::newSuperClassInstance(this);
|
||
|
if (superObject) {
|
||
|
auto superRelations = superObject->getRelations();
|
||
|
auto iterator = superRelations.constBegin();
|
||
|
while (iterator != relations.constEnd()) {
|
||
|
if (relations.contains(iterator.key())) {
|
||
|
relations.remove(iterator.key());
|
||
|
}
|
||
|
++iterator;
|
||
|
auto superObject = EntityInstanceFactory::newSuperClassInstance(this);
|
||
|
if (superObject) {
|
||
|
auto superRelations = superObject->getRelations();
|
||
|
auto iterator = superRelations.constBegin();
|
||
|
while (iterator != relations.constEnd()) {
|
||
|
if (relations.contains(iterator.key())) {
|
||
|
relations.remove(iterator.key());
|
||
|
}
|
||
|
delete superObject;
|
||
|
superObject = 0;
|
||
|
++iterator;
|
||
|
}
|
||
|
return relations;
|
||
|
delete superObject;
|
||
|
superObject = 0;
|
||
|
}
|
||
|
return relations;
|
||
|
}
|
||
|
|
||
|
const QStringList Entity::getTransientAttributes() const {
|
||
| ... | ... | |
|
return "id";
|
||
|
}
|
||
|
|
||
|
const QStack<const QMetaObject *> Entity::superClasses() const {
|
||
|
const QStack<const QMetaObject *> Entity::superClasses(bool
|
||
|
stopAtSingleTableInheritance) const {
|
||
|
QStack<const QMetaObject *> classes = QStack<const QMetaObject *>();
|
||
|
auto superMetaObject = this->metaObject()->superClass();
|
||
|
if (this->getInheritanceStrategy() == JOINED_TABLE) {
|
||
|
while (QString(superMetaObject->className()) != QString("Entity")) {
|
||
|
classes.push(superMetaObject);
|
||
|
superMetaObject = superMetaObject->superClass();
|
||
|
Entity *e = 0;
|
||
|
while (superMetaObject != 0
|
||
|
&& QString(superMetaObject->className()) != QString("CuteEntityManager::Entity")) {
|
||
|
e = EntityInstanceFactory::createInstance(superMetaObject->className());
|
||
|
if (e) {
|
||
|
classes.push(superMetaObject);
|
||
|
superMetaObject = superMetaObject->superClass();
|
||
|
quint8 s = e->getInheritanceStrategy();
|
||
|
delete e;
|
||
|
e = 0;
|
||
|
if (stopAtSingleTableInheritance && s == PER_CLASS_TABLE) {
|
||
|
break;
|
||
|
}
|
||
|
} else {
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return classes;
|
||
| ... | ... | |
|
return Entity::getMetaProperties(this->metaObject());
|
||
|
}
|
||
|
|
||
|
const QHash<QString, QMetaProperty> Entity::getSuperMetaProperties() const
|
||
|
{
|
||
|
const QHash<QString, QMetaProperty> Entity::getSuperMetaProperties() const {
|
||
|
auto superMetaObjectPropertyMap = QHash<QString, QMetaProperty>();
|
||
|
auto superMeta = this->metaObject()->superClass();
|
||
|
if (QString(superMeta->className()) != QString("Entity")
|
||
|
if (QString(superMeta->className()) != QString("CuteEntityManager::Entity")
|
||
|
&& this->getInheritanceStrategy() == JOINED_TABLE) {
|
||
|
for (int var = 0; var < superMeta->propertyCount(); ++var) {
|
||
|
QMetaProperty prop = superMeta->property(var);
|
||
| ... | ... | |
|
return superMetaObjectPropertyMap;
|
||
|
}
|
||
|
|
||
|
const QHash<QString, QMetaProperty> Entity::getMetaProperties(const QMetaObject *object) {
|
||
|
const QHash<QString, QMetaProperty> Entity::getMetaProperties(
|
||
|
const QMetaObject *object) {
|
||
|
auto h = QHash<QString, QMetaProperty>();
|
||
|
for (int var = 0; var < object->propertyCount(); ++var) {
|
||
|
QMetaProperty m = object->property(var);
|
||
| ... | ... | |
|
const QHash<QString, QMetaProperty> Entity::getInheritedMetaProperties() const {
|
||
|
auto classes = this->superClasses();
|
||
|
auto wholeProperties = QHash<QString, QMetaProperty>();
|
||
|
while(!classes.isEmpty()) {
|
||
|
while (!classes.isEmpty()) {
|
||
|
auto metaObject = classes.pop();
|
||
|
auto properties = Entity::getMetaProperties(metaObject);
|
||
|
auto iterator = properties.constBegin();
|
||
|
while (iterator != properties.constEnd()) {
|
||
|
wholeProperties.insert(iterator.key(),iterator.value());
|
||
|
wholeProperties.insert(iterator.key(), iterator.value());
|
||
|
++iterator;
|
||
|
}
|
||
|
}
|
||
| src/entity.h | ||
|---|---|---|
|
|
||
|
//return value must be the exact name defined in Q_PROPERTY
|
||
|
virtual QString getPrimaryKey() const;
|
||
|
const QStack<const QMetaObject *> superClasses() const;
|
||
|
const QStack<const QMetaObject *> superClasses(bool stopAtSingleTableInheritance = false) const;
|
||
|
const QHash<QString, QMetaProperty> getMetaProperties() const;
|
||
|
const QHash<QString, QMetaProperty> getSuperMetaProperties() const;
|
||
|
static const QHash<QString, QMetaProperty> getMetaProperties(const QMetaObject* object);
|
||
| src/entityinstancefactory.cpp | ||
|---|---|---|
|
|
||
|
Entity *EntityInstanceFactory::createInstance(int metaTypeId) {
|
||
|
Entity *e = 0;
|
||
|
if (metaTypeId != -1) {
|
||
|
if (metaTypeId != QMetaType::UnknownType) {
|
||
|
e = static_cast<Entity *>(QMetaType::create(metaTypeId));
|
||
|
}
|
||
|
if(!e) {
|
||
|
qDebug() << "Entity instance could not created!";
|
||
|
throw -2; //testing
|
||
|
}
|
||
|
} else {
|
||
|
qDebug() << metaTypeId <<" is NOT registered! Please register it!";
|
||
|
throw -1; //testing
|
||
|
}
|
||
|
return e;
|
||
|
}
|
||
|
|
||
| ... | ... | |
|
Entity *super = 0;
|
||
|
if (e) {
|
||
|
auto metaObject = e->metaObject()->superClass();
|
||
|
if (QString(metaObject->className()) != QString("Entity")) {
|
||
|
if (QString(metaObject->className()) != QString("CuteEntityManager::Entity")) {
|
||
|
super = EntityInstanceFactory::createInstance(metaObject->className());
|
||
|
}
|
||
|
}
|
||
| src/entitymanager.cpp | ||
|---|---|---|
|
EntityManager::connectionNames.removeOne(name);
|
||
|
}
|
||
|
|
||
|
QSharedPointer<Entity> EntityManager::findById(const qint64 &id, Entity *&e,
|
||
|
QSharedPointer<Entity> EntityManager::findById(const qint64 &id,
|
||
|
QSharedPointer<Entity> &e,
|
||
|
const bool refresh) {
|
||
|
QSharedPointer<Entity> r;
|
||
|
if (e) {
|
||
|
if (refresh || ((r = this->cache.get(id, QString(e->getClassname())))
|
||
|
if (!e.isNull()) {
|
||
|
if (refresh || ((r = this->cache.get(id, QString(e.data()->getClassname())))
|
||
|
&& !r.data())) {
|
||
|
auto map = this->findByPk(id, e->getTablename());
|
||
|
auto map = this->findByPk(e);
|
||
|
r = this->convert(map, e->getClassname(), refresh);
|
||
|
}
|
||
|
delete e;
|
||
|
}
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
QSharedPointer<Entity> EntityManager::findById(const qint64 &id,
|
||
|
const QString &classname) {
|
||
|
Entity *e = EntityInstanceFactory::createInstance(classname);
|
||
|
QSharedPointer<Entity> e = QSharedPointer<Entity>
|
||
|
(EntityInstanceFactory::createInstance(classname));
|
||
|
return this->findById(id, e);
|
||
|
}
|
||
|
|
||
| ... | ... | |
|
return EntityManager::connectionNames;
|
||
|
}
|
||
|
|
||
|
QHash<QString, QVariant> EntityManager::findByPk(qint64 id, QString tblname) {
|
||
|
QSqlQuery q = this->schema.data()->getQueryBuilder().data()->find(id, tblname);
|
||
|
QHash<QString, QVariant> EntityManager::findByPk(const QSharedPointer<Entity>
|
||
|
&e) {
|
||
|
QSqlQuery q = this->schema.data()->getQueryBuilder().data()->find(e);
|
||
|
auto listMap = this->convertQueryResult(q);
|
||
|
if (!listMap.isEmpty()) {
|
||
|
return listMap.at(0);
|
||
| ... | ... | |
|
return listmap;
|
||
|
}
|
||
|
|
||
|
QList<QHash <QString, QVariant> > EntityManager::findAll(QString tblname) {
|
||
|
QSqlQuery q = this->schema.data()->getQueryBuilder().data()->findAll(tblname);
|
||
|
QList<QHash <QString, QVariant> > EntityManager::findAll(
|
||
|
const QSharedPointer<Entity> &e) {
|
||
|
QSqlQuery q = this->schema.data()->getQueryBuilder().data()->findAll(e);
|
||
|
return this->convertQueryResult(q);
|
||
|
}
|
||
|
|
||
| src/entitymanager.h | ||
|---|---|---|
|
|
||
|
protected:
|
||
|
void init();
|
||
|
QList<QHash<QString, QVariant> > findAll(QString tblname);
|
||
|
QList<QHash<QString, QVariant> > findAll(const QSharedPointer<Entity> &e);
|
||
|
void resolveRelations(const QSharedPointer<Entity> &entity,
|
||
|
const QHash<QString, QVariant> &map, const bool refresh = false);
|
||
|
QHash<QString, QVariant> findByPk(qint64 id, QString tblname);
|
||
|
QHash<QString, QVariant> findByPk(const QSharedPointer<Entity> &e);
|
||
|
QSharedPointer<Entity> convert(const QHash<QString, QVariant> &map,
|
||
|
const char *classname, const bool refresh = false);
|
||
|
QList<QSharedPointer<Entity>> convert(QList<QHash<QString, QVariant> > maps,
|
||
| ... | ... | |
|
QHash<QString, QVariant> &m,
|
||
|
const QString &tblname,
|
||
|
bool ignoreID = false);
|
||
|
QSharedPointer<Entity> findById(const qint64 &id, Entity *&e,
|
||
|
QSharedPointer<Entity> findById(const qint64 &id, QSharedPointer<Entity> &e,
|
||
|
const bool refresh = false);
|
||
|
void addEntityToListProperty(const QSharedPointer<Entity> &entity,
|
||
|
QSharedPointer<Entity> add, const QMetaProperty &property);
|
||
| ... | ... | |
|
}
|
||
|
|
||
|
template<class T> QList<QSharedPointer<Entity>> findAll() {
|
||
|
Entity *e = EntityInstanceFactory::createInstance<T>();
|
||
|
if (e) {
|
||
|
auto maps = this->findAll(e->getTablename());
|
||
|
const char *className = e->getClassname();
|
||
|
delete e;
|
||
|
QSharedPointer<Entity> ptr = QSharedPointer<Entity>(EntityInstanceFactory::createInstance<T>());
|
||
|
if (!ptr.isNull()) {
|
||
|
auto maps = this->findAll(ptr);
|
||
|
const char *className = ptr.data()->getClassname();
|
||
|
return this->convert(maps, className);
|
||
|
}
|
||
|
return QList<QSharedPointer<Entity>>();
|
||
|
}
|
||
|
|
||
|
template<class T> QSharedPointer<Entity> findById(const qint64 &id) {
|
||
|
Entity *e = EntityInstanceFactory::createInstance<T>();
|
||
|
return this->findById(id, e);
|
||
|
auto e = EntityInstanceFactory::createInstance<T>();
|
||
|
QSharedPointer<Entity> ptr = QSharedPointer<Entity>(e);
|
||
|
return this->findById(id, ptr);
|
||
|
}
|
||
|
|
||
|
template<class T> QSharedPointer<Entity> findEntityByAttributes(
|
||
| src/querybuilder.cpp | ||
|---|---|---|
|
QString r = "";
|
||
|
auto superMetaObject = e->metaObject()->superClass();
|
||
|
if (e->getInheritanceStrategy() == JOINED_TABLE
|
||
|
&& QString(superMetaObject->className()) != QString("Entity")) {
|
||
|
&& QString(superMetaObject->className()) != QString("CuteEntityManager::Entity")) {
|
||
|
qDebug() << superMetaObject->className();
|
||
|
Entity *superClass = EntityInstanceFactory::createInstance(
|
||
|
superMetaObject->className());
|
||
|
if (superClass) {
|
||
| ... | ... | |
|
}
|
||
|
}
|
||
|
}
|
||
|
if (QString(superMetaObject->className()) != QString("Entity")
|
||
|
if (QString(superMetaObject->className()) != QString("CuteEntityManager::Entity")
|
||
|
&& entity.data()->getInheritanceStrategy() != JOINED_TABLE) {
|
||
|
map.insert(entity.data()->getPrimaryKey(), this->schema.data()->TYPE_BIGPK);
|
||
|
}
|
||
| ... | ... | |
|
* @return
|
||
|
*/
|
||
|
QSqlQuery QueryBuilder::find(const qint64 &id, const QString &tableName) const {
|
||
|
QSqlQuery q = this->database.data()->getQuery("SELECT * FROM " +
|
||
|
this->schema.data()->quoteTableName(
|
||
|
tableName) + " WHERE id= :id LIMIT 1;");
|
||
|
QSqlQuery q = this->database.data()->getQuery(this->selectBase(QStringList(
|
||
|
tableName)) + " WHERE id= :id LIMIT 1;");
|
||
|
q.bindValue(":id", id);
|
||
|
return q;
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::selectBase(const QStringList &tables,
|
||
|
const QStringList &columns) const {
|
||
|
QString r = "SELECT ";
|
||
|
if (columns.isEmpty()) {
|
||
|
r.append("*");
|
||
|
} else {
|
||
|
for (int var = 0; var < columns.size(); ++var) {
|
||
|
if (var != 0) {
|
||
|
r.append(" ");
|
||
|
}
|
||
|
r.append(this->schema.data()->quoteColumnName(columns.at(var)));
|
||
|
}
|
||
|
}
|
||
|
r.append(" FROM");
|
||
|
for (int var = 0; var < tables.size(); ++var) {
|
||
|
r.append(" ");
|
||
|
r.append(this->schema.data()->quoteTableName(tables.at(var)));
|
||
|
}
|
||
|
return r;
|
||
|
}
|
||
|
|
||
|
QSqlQuery QueryBuilder::find(const QSharedPointer<Entity> &entity,
|
||
|
qint64 offset) const {
|
||
|
QSqlQuery q = this->database.data()->getQuery(this->selectBase(QStringList(
|
||
|
entity.data()->getTablename())) + " " + this->joinSuperClasses(
|
||
|
entity) + " WHERE id= :id " + this->limit(1, offset));
|
||
|
q.bindValue(":id", entity.data()->getId());
|
||
|
return q;
|
||
|
}
|
||
|
|
||
|
QSqlQuery QueryBuilder::findAll(const QSharedPointer<Entity> &entity,
|
||
|
const qint64 limit, qint64 offset) {
|
||
|
return this->database->getQuery(this->selectBase(QStringList(
|
||
|
entity.data()->getTablename())) + " " + this->joinSuperClasses(
|
||
|
entity) + " " + this->limit(limit, offset) + ";");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief QueryBuilder::findByAttributes
|
||
|
* @param m
|
||
| ... | ... | |
|
QSqlQuery QueryBuilder::findByAttributes(const QHash<QString, QVariant> &m,
|
||
|
const QString &tableName,
|
||
|
const bool &ignoreID, const qint64 limit, const qint64 offset) const {
|
||
|
QSqlQuery q = this->database.data()->getQuery("SELECT * FROM " +
|
||
|
this->schema.data()->quoteTableName(
|
||
|
tableName) + this->where(m, "AND", ignoreID) + this->limit(limit, offset));
|
||
|
QSqlQuery q = this->database.data()->getQuery(this->selectBase(QStringList(
|
||
|
tableName)) + this->where(m, "AND", ignoreID) + this->limit(limit, offset));
|
||
|
this->bindValues(m, q, ignoreID);
|
||
|
return q;
|
||
|
}
|
||
| ... | ... | |
|
}
|
||
|
|
||
|
QSqlQuery QueryBuilder::findAll(const QString &tableName) const {
|
||
|
return this->database->getQuery("SELECT * FROM " +
|
||
|
this->schema.data()->quoteTableName(
|
||
|
tableName) + ";");
|
||
|
return this->database->getQuery(this->selectBase(QStringList(tableName)) + ";");
|
||
|
}
|
||
|
|
||
|
QSqlQuery QueryBuilder::remove(const QSharedPointer<Entity> &entity) const {
|
||
| ... | ... | |
|
QHash<QString, QVariant> values = this->getEntityAttributes(
|
||
|
entity.data()->getMetaProperties(),
|
||
|
entity);
|
||
|
QSqlQuery q = this->database.data()->getQuery("SELECT " +
|
||
|
this->schema.data()->quoteColumnName("id")
|
||
|
+ " FROM " +
|
||
|
this->schema.data()->quoteTableName(
|
||
|
entity.data()->getTablename()) + this->where(values,
|
||
|
QSqlQuery q = this->database.data()->getQuery(this->selectBase(QStringList(
|
||
|
entity.data()->getTablename()), QStringList("id")) + this->where(values,
|
||
|
"AND", true) + " LIMIT 1");
|
||
|
this->bindValues(values, q);
|
||
|
return q;
|
||
| ... | ... | |
|
QHash<QString, QVariant> values = this->getEntityAttributes(
|
||
|
entity.data()->getMetaProperties(),
|
||
|
entity);
|
||
|
QSqlQuery q = this->database.data()->getQuery("SELECT COUNT(*) FROM " +
|
||
|
this->schema.data()->quoteTableName(
|
||
|
entity.data()->getTablename()) + this->where(
|
||
|
QSqlQuery q = this->database.data()->getQuery(this->selectBase(QStringList(
|
||
|
entity.data()->getTablename()),
|
||
|
QStringList(this->countFunction())) + this->where(
|
||
|
values, "AND", ignoreID));
|
||
|
this->bindValues(values, q, ignoreID);
|
||
|
return q;
|
||
|
}
|
||
|
|
||
|
QSqlQuery QueryBuilder::count(const QString &tableName) const {
|
||
|
QSqlQuery q = this->database.data()->getQuery("SELECT COUNT(*) FROM " +
|
||
|
this->schema.data()->quoteTableName(
|
||
|
tableName) + ";");
|
||
|
QSqlQuery q = this->database.data()->getQuery(this->selectBase(QStringList(
|
||
|
tableName), QStringList(this->countFunction())) + ";");
|
||
|
return q;
|
||
|
}
|
||
|
|
||
| ... | ... | |
|
const qint64 &id,
|
||
|
const QString &foreignKey, const QString &foreignTable) {
|
||
|
QSqlQuery q = this->database.data()->getQuery();
|
||
|
QString sql = "SELECT " +
|
||
|
this->schema.data()->quoteTableName(
|
||
|
foreignTable) + ".* FROM " +
|
||
|
this->schema.data()->quoteTableName(tableName) + " " + this->leftJoin(
|
||
|
QString sql = this->selectBase(QStringList(tableName),
|
||
|
QStringList(foreignTable + ".*")) + " " + this->leftJoin(
|
||
|
foreignTable, tableName,
|
||
|
foreignKey) + " WHERE " + this->schema.data()->quoteColumnName(
|
||
|
attribute) + "=:id;";
|
||
| ... | ... | |
|
return q;
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::leftJoin(const QString &foreignTable,
|
||
|
const QString &tableName,
|
||
|
const QString &foreignKey) {
|
||
|
return "LEFT JOIN " + this->schema.data()->quoteTableName(
|
||
|
foreignTable) + " ON " +
|
||
|
this->schema.data()->quoteColumnName(foreignTable + ".id") + "=" +
|
||
|
this->schema.data()->quoteColumnName(
|
||
|
tableName + "." + foreignKey);
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::superClassColumnName(const QMetaObject *&superMeta)
|
||
|
const {
|
||
|
return QString(superMeta->className()).toLower();
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::joinSuperClasses(const QSharedPointer<Entity> &entity)
|
||
|
const {
|
||
|
auto stack = entity.data()->superClasses();
|
||
|
QString joined = "";
|
||
|
bool first = true;
|
||
|
Entity *e = 0;
|
||
|
while (!stack.isEmpty()) {
|
||
|
auto metaObject = stack.pop();
|
||
|
e = EntityInstanceFactory::createInstance(metaObject->className());
|
||
|
if (first) {
|
||
|
first = false;
|
||
|
} else {
|
||
|
if (e) {
|
||
|
joined.append(" ");
|
||
|
}
|
||
|
}
|
||
|
if (e) {
|
||
|
joined.append(this->leftJoin(e->getTablename(), entity.data()->getTablename(),
|
||
|
e->getPrimaryKey(), entity.data()->getPrimaryKey()));
|
||
|
}
|
||
|
delete e;
|
||
|
e = 0;
|
||
|
}
|
||
|
return joined;
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::countFunction(const QString &distinctColumn) const {
|
||
|
return QString("COUNT(" + distinctColumn.isEmpty() ? "*" : (this->distinct() +
|
||
|
this->schema.data()->quoteColumnName(distinctColumn)) + ")");
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::distinct() const {
|
||
|
return "DISTINCT";
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::limit(const qint64 &limit, const qint64 &offset) const {
|
||
|
QString s = "";
|
||
|
if (limit > 0) {
|
||
| ... | ... | |
|
|
||
|
QString QueryBuilder::generateManyToManyColumnName(const QSharedPointer<Entity>
|
||
|
&entity) const {
|
||
|
return this->generateColumnNameID(QString(
|
||
|
entity.data()->metaObject()->className()));
|
||
|
return this->generateColumnNameID(entity.data()->getTablename());
|
||
|
}
|
||
|
|
||
|
QSqlQuery QueryBuilder::getQuery() const {
|
||
| ... | ... | |
|
return values;
|
||
|
}
|
||
|
|
||
|
QString QueryBuilder::leftJoin(const QString &foreignTable,
|
||
|
const QString &tableName, const QString &foreignKey,
|
||
|
const QString &primaryKey) const {
|
||
|
return "LEFT JOIN " + this->schema.data()->quoteTableName(
|
||
|
foreignTable) + " ON " +
|
||
|
this->schema.data()->quoteColumnName(foreignTable + "." + primaryKey) + "=" +
|
||
|
this->schema.data()->quoteColumnName(
|
||
|
tableName + "." + foreignKey);
|
||
|
}
|
||
|
|
||
|
QHash<QString, QVariant> QueryBuilder::getEntityAttributes(
|
||
|
const QHash<QString, QMetaProperty>
|
||
|
&props,
|
||
| src/querybuilder.h | ||
|---|---|---|
|
#include <QSharedPointer>
|
||
|
#include <QPointer>
|
||
|
#include <QSqlQuery>
|
||
|
#include <QStringList>
|
||
|
#include "relation.h"
|
||
|
namespace CuteEntityManager {
|
||
|
class Schema;
|
||
|
class Entity;
|
||
|
class Database;
|
||
|
/**
|
||
|
RESTRICT, CASCADE, NO ACTION, SET DEFAULT, SET NULL
|
||
|
*/
|
||
|
|
||
|
enum DbForeignKeyCascade {
|
||
|
RESTRICT,
|
||
|
CASCADE,
|
||
| ... | ... | |
|
QString transformAbstractTypeToRealDbType(QString typeName) const;
|
||
|
QString getColumnType(const QString &type) const;
|
||
|
QSqlQuery find(const qint64 &id, const QString &tableName) const;
|
||
|
QSqlQuery find(const QSharedPointer<Entity> &entity,
|
||
|
qint64 offset = 0) const;
|
||
|
QSqlQuery findByAttributes(const QHash<QString, QVariant> &m,
|
||
|
const QString &tableName,
|
||
|
const bool &ignoreID = true, const qint64 limit = 0,
|
||
| ... | ... | |
|
bool ignoreID = true,
|
||
|
const qint64 limit = 0, const qint64 offset = 0);
|
||
|
QSqlQuery findAll(const QString &tableName) const;
|
||
|
QSqlQuery findAll(const QSharedPointer<Entity> &entity, const qint64 limit = 0,
|
||
|
qint64 offset = 0);
|
||
|
QSqlQuery remove(const QSharedPointer<Entity> &entity) const;
|
||
|
QSqlQuery findId(const QSharedPointer<Entity> &entity) const;
|
||
|
QSqlQuery count(const QSharedPointer<Entity> &entity, bool ignoreID) const;
|
||
| ... | ... | |
|
QSqlQuery getQuery() const;
|
||
|
|
||
|
protected:
|
||
|
virtual void createRelationFK(QStringList &queries, const QSharedPointer<Entity> &entity, const Relation &relation, const QMetaProperty &metaProperty, const QString &update, const QString &remove) const;
|
||
|
virtual void createRelationFK(QStringList &queries,
|
||
|
const QSharedPointer<Entity> &entity, const Relation &relation,
|
||
|
const QMetaProperty &metaProperty, const QString &update,
|
||
|
const QString &remove) const;
|
||
|
void insertRelationId(const Entity *e, QHash<QString, QVariant> &map,
|
||
|
QString relName) const;
|
||
|
QString buildColumns(const QStringList &columns) const;
|
||
| ... | ... | |
|
QHash<QString, QVariant> saveAttributes(const QSharedPointer<Entity> &entity)
|
||
|
const;
|
||
|
QString leftJoin(const QString &foreignTable, const QString &tableName,
|
||
|
const QString &foreignKey);
|
||
|
const QString &foreignKey = "id", const QString &primaryKey = "id") const;
|
||
|
QString superClassColumnName(const QMetaObject *&superMeta) const;
|
||
|
|
||
|
QString joinSuperClasses(const QSharedPointer<Entity> &entity) const;
|
||
|
virtual QString selectBase(const QStringList &tables,
|
||
|
const QStringList &columns = QStringList()) const;
|
||
|
virtual QString countFunction(const QString &distinctColumn = "") const;
|
||
|
virtual QString distinct() const;
|
||
|
|
||
|
|
||
|
QSharedPointer<Schema> schema;
|
||
|
QSharedPointer<Database> database;
|
||
|
};
|
||
Auch abrufbar als: Unified diff
some sql and inheritance stuff,debugging entityinstancefactory