Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 2316d17f

Von Christian Ehringfeld vor mehr als 8 Jahren hinzugefügt

  • ID 2316d17ff8017530773063790e267e1f3f51d92c
  • Vorgänger c6e41b5c
  • Nachfolger 8fea42af

querybuilder params get own notations

Unterschiede anzeigen:

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> &params) {
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> &params, 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> &params, QString &condition, int &start) const;
private:
QSharedPointer<AttributeResolver> ar;

Auch abrufbar als: Unified diff