Revision 2316d17f
Von Christian Ehringfeld vor etwa 9 Jahren hinzugefügt
src/query.cpp | ||
---|---|---|
return qb->like(conditions, conjunction, jp, wildcard);
|
||
}
|
||
|
||
QVariant Query::convertParam(const QVariant val) {
|
||
auto typeName = QString(val.typeName());
|
||
QVariant r = val;
|
||
if(typeName.contains("QSharedPointer")) {
|
||
if(typeName.contains("QList")) {
|
||
auto entities = EntityInstanceFactory::castQVariantList(r);
|
||
QList<QVariant> ids;
|
||
for (int i = 0; i < entities.size(); ++i) {
|
||
if(entities.at(i)) {
|
||
ids.append(entities.at(i)->getProperty(entities.at(i)->getPrimaryKey()));
|
||
}
|
||
}
|
||
r.setValue<QList<QVariant>>(ids);
|
||
} else {
|
||
auto entity = EntityInstanceFactory::castQVariant(r);
|
||
if(entity && entity->getId() != -1) {
|
||
r = entity->getProperty(entity->getPrimaryKey());
|
||
}
|
||
}
|
||
}
|
||
return r;
|
||
}
|
||
|
||
QString Query::getSelectOption() const {
|
||
return selectOption;
|
||
}
|
||
... | ... | |
}
|
||
|
||
void Query::appendParam(const QString &column, QVariant value) {
|
||
this->params.insert(column, this->convertParam(value));
|
||
this->params.insert(column, value);
|
||
}
|
||
|
||
void Query::appendParams(const QHash<QString, QVariant> ¶ms) {
|
||
for (auto i = params.constBegin(); i != params.constEnd(); ++i) {
|
||
this->params.insert(i.key(), this->convertParam(i.value()));
|
||
this->params.insert(i.key(), i.value());
|
||
}
|
||
}
|
||
|
src/query.h | ||
---|---|---|
QHash<QString, QVariant> conditions,
|
||
QString conjunction = QStringLiteral("AND"),
|
||
JokerPosition jp = JokerPosition::BOTH, QChar wildcard = '%');
|
||
protected:
|
||
QVariant convertParam(const QVariant val);
|
||
|
||
private:
|
||
QList<Expression> select;
|
src/querybuilder.cpp | ||
---|---|---|
return true;
|
||
}
|
||
|
||
|
||
//QVariant Query::convertParam(const QVariant val) {
|
||
// auto typeName = QString(val.typeName());
|
||
// QVariant r = val;
|
||
// if(typeName.contains("QSharedPointer")) {
|
||
// if(typeName.contains("QList")) {
|
||
// auto entities = EntityInstanceFactory::castQVariantList(r);
|
||
// QList<QVariant> ids;
|
||
// for (int i = 0; i < entities.size(); ++i) {
|
||
// if(entities.at(i)) {
|
||
// ids.append(entities.at(i)->getProperty(entities.at(i)->getPrimaryKey()));
|
||
// }
|
||
// }
|
||
// r.setValue<QList<QVariant>>(ids);
|
||
// } else {
|
||
// auto entity = EntityInstanceFactory::castQVariant(r);
|
||
// if(entity && entity->getId() != -1) {
|
||
// r = entity->getProperty(entity->getPrimaryKey());
|
||
// }
|
||
// }
|
||
// }
|
||
// return r;
|
||
//}
|
||
|
||
void QueryBuilder::createRelationFK(QStringList &queries,
|
||
const QSharedPointer<Entity> &entity, const Relation &relation,
|
||
const QMetaProperty &metaProperty, const QString &update,
|
src/queryinterpreter.cpp | ||
---|---|---|
return sqlSelect + "*";
|
||
}
|
||
bool first = true;
|
||
int paramCount = 0;
|
||
for (int i = 0; i < columns.size(); ++i) {
|
||
if (first) {
|
||
first = false;
|
||
... | ... | |
sqlSelect += ", ";
|
||
}
|
||
Expression e = columns.at(i);
|
||
q.appendParams(e.getParams());
|
||
QString nExp = e.getExpression();
|
||
auto params = e.getParams();
|
||
this->convertParams("s", params, nExp, paramCount);
|
||
q.appendParams(params);
|
||
if (e.getOnlyColumn()) {
|
||
sqlSelect += this->ar->getQb()->getSchema()->quoteColumnName(e.getExpression());
|
||
} else if (!nExp.contains("(")) {
|
||
... | ... | |
return sqlOrder;
|
||
}
|
||
|
||
|
||
|
||
|
||
QString QueryInterpreter::buildCondition(Query &q,
|
||
const QList<Expression> &conditions) const {
|
||
if (conditions.isEmpty()) {
|
||
... | ... | |
}
|
||
QString sqlCondition = "";
|
||
bool first = true;
|
||
int paramCount = 0;
|
||
for (int i = 0; i < conditions.size(); ++i) {
|
||
Expression exp = conditions.at(i);
|
||
QString expression = exp.getExpression();
|
||
... | ... | |
sqlCondition += this->ar->getQb()->getSeparator();
|
||
}
|
||
}
|
||
auto params = exp.getParams();
|
||
this->convertParams("p", params, expression, paramCount);
|
||
sqlCondition += expression;
|
||
q.appendParams(exp.getParams());
|
||
q.appendParams(params);
|
||
}
|
||
return sqlCondition;
|
||
}
|
||
|
||
void QueryInterpreter::convertParams(const QString &prefix,
|
||
QHash<QString, QVariant> ¶ms, QString &condition, int &start) const {
|
||
auto keys = params.keys();
|
||
for (int i = 0; i < keys.size(); ++i) {
|
||
QString val = prefix + QString::number(start);
|
||
condition.replace(this->ar->getQb()->placeHolder(keys.at(i)),
|
||
this->ar->getQb()->placeHolder(val));
|
||
params.insert(val, params.value(keys.at(i)));
|
||
params.remove(keys.at(i));
|
||
++start;
|
||
}
|
||
}
|
src/queryinterpreter.h | ||
---|---|---|
const quint64 &limit, const quint64 &offset) const;
|
||
QString buildOrderBy(const QList<OrderBy> &columns) const;
|
||
QString buildCondition(Query &q, const QList<Expression> &conditions) const;
|
||
void convertParams(const QString &prefix,
|
||
QHash<QString, QVariant> ¶ms, QString &condition, int &start) const;
|
||
|
||
private:
|
||
QSharedPointer<AttributeResolver> ar;
|
Auch abrufbar als: Unified diff
querybuilder params get own notations