Revision dbf92b46
Von Christian Ehringfeld vor etwa 9 Jahren hinzugefügt
src/entitymanager.h | ||
---|---|---|
QHash<QString, QString>(), quint64 limit = 0, quint64 offset = 0,
|
||
bool joinBaseClasses = false, const bool resolveRelations = true) {
|
||
QSharedPointer<Entity> e = QSharedPointer<Entity>
|
||
(EntityInstanceFactory::createInstance<T *>());
|
||
(EntityInstanceFactory::createInstance<T*>());
|
||
if (e) {
|
||
Query query = Query(QStringList(e->getTablename()));
|
||
if (joinBaseClasses) {
|
src/query.cpp | ||
---|---|---|
*/
|
||
|
||
#include "query.h"
|
||
#include "entity.h"
|
||
using namespace CuteEntityManager;
|
||
Query::Query() {
|
||
}
|
||
... | ... | |
this->groupBy.append(groupBy);
|
||
this->distinct = distinct;
|
||
this->having = having;
|
||
|
||
}
|
||
|
||
void Query::appendWhere(const QString &condition) {
|
src/query.h | ||
---|---|---|
namespace CuteEntityManager {
|
||
class Condition;
|
||
class OrderBy;
|
||
class Entity;
|
||
enum class Direction;
|
||
class Query {
|
||
public:
|
||
... | ... | |
quint64 offset = 0;
|
||
};
|
||
|
||
/**
|
||
* @brief The JokerPosition enum
|
||
* FRONT -> e.g. "%foo"
|
||
* BEHIND -> e.g. "foo%"
|
||
* BOTH -> e.g. "%foo%"
|
||
*/
|
||
enum class JokerPosition {
|
||
FRONT, // e.g. "%foo"
|
||
BEHIND, // e.g. "foo%"
|
||
BOTH, // e.g. "%foo%"
|
||
FRONT,
|
||
BEHIND,
|
||
BOTH,
|
||
NONE
|
||
};
|
||
|
src/querybuilder.cpp | ||
---|---|---|
QSqlQuery q = this->database->getQuery(this->selectBase(QStringList(
|
||
entity->getTablename())) + this->joinSuperClasses(
|
||
entity) + " WHERE " + this->schema->quoteColumnName(entity->getTablename() + "."
|
||
+ pk) + "= " + this->placeHolder(pk) + this->limit(1, offset));
|
||
+ pk) + this->equalOperator() + " " + this->placeHolder(pk) + this->limit(1, offset));
|
||
this->bindValue(pk, id, q);
|
||
return q;
|
||
}
|
||
... | ... | |
sql += " " + this->whereKeyword() + " ";
|
||
sql += this->schema->quoteColumnName(
|
||
attribute);
|
||
sql += " = " + this->placeHolder(pk) + ";";
|
||
sql += " " + this->equalOperator()+" " + this->placeHolder(pk) + ";";
|
||
q.prepare(sql);
|
||
this->bindValue(pk, id, q);
|
||
return q;
|
||
... | ... | |
QString pkCol = "id";
|
||
QString sql = "DELETE FROM " + this->schema->quoteTableName(
|
||
tableName) + " WHERE " + this->schema->quoteColumnName(
|
||
attribute) + "=" + this->placeHolder(pkCol);
|
||
attribute) + this->equalOperator() + this->placeHolder(pkCol);
|
||
q.prepare(sql);
|
||
this->bindValue(pkCol, id, q);
|
||
return q;
|
||
... | ... | |
return "COUNT";
|
||
}
|
||
|
||
QString QueryBuilder::notEqualOperator() const {
|
||
return "!=";
|
||
}
|
||
|
||
QString QueryBuilder::equalOperator() const {
|
||
return "=";
|
||
}
|
||
|
||
QString QueryBuilder::fromKeyword() const {
|
||
return "FROM";
|
||
}
|
||
|
||
QString QueryBuilder::isNullKeywords() const {
|
||
return "IS NULL";
|
||
}
|
||
|
||
QString QueryBuilder::isNotNullKeywords() const {
|
||
return "IS NOT NULL";
|
||
}
|
||
|
||
Expression QueryBuilder::inFunction(QString column,
|
||
QList<QVariant> values, bool notOp) const {
|
||
QString condition = "";
|
||
... | ... | |
ignoreID, primaryKey);
|
||
}
|
||
|
||
QString QueryBuilder::where(const QString &key, const QVariant &var, bool withKeyword, bool select, bool notEqual) const {
|
||
QString r = (withKeyword ? " WHERE " : "");
|
||
r += this->schema->quoteColumnName(key) + (var.isNull() && select
|
||
? (" " +(notEqual ? this->isNotNullKeywords(): this->isNullKeywords()))
|
||
: (notEqual ? this->notEqualOperator() : this->equalOperator() ) + this->placeHolder(key));
|
||
return r;
|
||
}
|
||
|
||
QString QueryBuilder::attributes(const QHash<QString, QVariant> &m, bool select,
|
||
const QString &conjunction,
|
||
bool ignoreID, const QString &primaryKey) const {
|
||
... | ... | |
if (!rc.isEmpty()) {
|
||
rc += " " + conjunction + " ";
|
||
}
|
||
rc += this->schema->quoteColumnName(i.key()) + (i.value().isNull()
|
||
&& select ? " is null"
|
||
: "=" + this->placeHolder(i.key()));
|
||
rc += this->where(i.key(), i.value(), false, select);
|
||
}
|
||
}
|
||
return rc;
|
||
... | ... | |
}
|
||
|
||
Expression QueryBuilder::isNull(QString column) const {
|
||
return Expression(this->schema->quoteColumnName(column) + " IS NULL");
|
||
return Expression(this->schema->quoteColumnName(column) + this->isNullKeywords());
|
||
}
|
||
|
||
Expression QueryBuilder::isNotNull(QString column) const {
|
||
return Expression(this->schema->quoteColumnName(column) + " IS " +
|
||
this->notKeyword() + " NULL");
|
||
return Expression(this->schema->quoteColumnName(column) + this->isNotNullKeywords());
|
||
}
|
||
|
||
Expression QueryBuilder::plainOr() const {
|
||
... | ... | |
return exp;
|
||
}
|
||
|
||
Expression QueryBuilder::equal(QString &key, QVariant &value) {
|
||
Expression exp = Expression(this->where(key, value, false, true, false));
|
||
exp.appendParam(key,value);
|
||
return exp;
|
||
}
|
||
|
||
Expression QueryBuilder::notEqual(QString &key, QVariant &value) {
|
||
Expression exp = Expression(this->where(key, value, false, true, true));
|
||
exp.appendParam(key,value);
|
||
return exp;
|
||
}
|
||
|
||
Expression QueryBuilder::between(QString column, QVariant firstValue,
|
||
QVariant secondValue) const {
|
||
QString firstPh = column + "_bet1";
|
||
... | ... | |
condition += " " + this->orKeyword() + " ";
|
||
}
|
||
condition += this->schema->quoteColumnName(i.key()) + (like ? " " +
|
||
this->likeKeyword() + " " : "=") +
|
||
this->likeKeyword() + " " : this->equalOperator()) +
|
||
this->placeHolder(i.key());
|
||
exp.appendParam(i.key(), i.value());
|
||
}
|
src/querybuilder.h | ||
---|---|---|
QString conjunction = QStringLiteral("AND")) const;
|
||
Expression where(QString condition,
|
||
QHash<QString, QVariant> values = QHash<QString, QVariant>()) const;
|
||
Expression equal(QString &key, QVariant &value);
|
||
Expression notEqual(QString &key, QVariant &value);
|
||
//void where(Query &query,QHash<QString, QList<QVariant>> conditions, QString concat="AND");
|
||
Expression between(QString column, QVariant firstValue,
|
||
QVariant secondValue) const;
|
||
... | ... | |
const QString &conjunction,
|
||
bool ignoreID = false, const QString &primaryKey = "id",
|
||
bool withKeyword = true) const;
|
||
QString where(const QString &key, const QVariant &var, bool withKeyword, bool select=true, bool notEqual=false) const;
|
||
QString attributes(const QHash<QString, QVariant> &m, bool select = true,
|
||
const QString &conjunction = ",",
|
||
bool ignoreID = false, const QString &primaryKey = "id") const;
|
||
... | ... | |
virtual QString inKeyword() const;
|
||
virtual QString whereKeyword() const;
|
||
virtual QString countKeyword() const;
|
||
virtual QString notEqualOperator() const;
|
||
virtual QString equalOperator() const;
|
||
virtual QString fromKeyword() const;
|
||
virtual QString isNullKeywords() const;
|
||
virtual QString isNotNullKeywords() const;
|
||
virtual Expression inFunction(QString column, QList<QVariant> values,
|
||
bool notOp = false) const;
|
||
virtual QString between(QString colName, QString valName1, QString valName2,
|
Auch abrufbar als: Unified diff
some comfort methods for query builder