Update command

This commit is contained in:
blackdal 2017-05-30 20:49:37 +04:30
parent c65d0e748c
commit 36a298d5c0
7 changed files with 62 additions and 12 deletions

View File

@ -227,7 +227,7 @@ DatabaseModel DatabasePrivate::getLastScheema()
// ChangeLogTable *u = q->_change_logs()->createQuery()->orderBy("id",
// "desc")->first();
ChangeLogTable *u
= changeLogs->createQuery()->orderBy("id", "desc")->first();
= changeLogs->query()->orderBy("id", "desc")->first();
DatabaseModel ret;

View File

@ -72,6 +72,8 @@ public:
// Query<T> *setWhere(const QString &where);
Query<T> *orderBy(QString fieldName, QString type);
Query<T> *orderBy(WherePhrase phrase);
int update(WherePhrase phrase);
};
template <typename T>
@ -309,6 +311,20 @@ Q_OUTOFLINE_TEMPLATE Query<T> *Query<T>::orderBy(WherePhrase phrase)
return this;
}
template<class T>
Q_OUTOFLINE_TEMPLATE int Query<T>::update(WherePhrase phrase)
{
Q_D(Query);
QString sql = d->database->sqlGenertor()->updateCommand(
phrase,
d->wheres,
d->tableName);
qDebug() << sql;
QSqlQuery q = d->database->exec(sql);
return q.numRowsAffected();
}
NUT_END_NAMESPACE
#endif // QUERY_H

View File

@ -431,6 +431,22 @@ QString SqlGeneratorBase::deleteCommand(QList<WherePhrase> &wheres, QString tabl
return command;
}
QString SqlGeneratorBase::updateCommand(WherePhrase &phrase, QList<WherePhrase> &wheres, QString tableName)
{
QString p = this->phrase(phrase.data());
QString where = createWhere(wheres);
QString sql = "UPDATE " + tableName + " SET " + p;
if(where != "")
sql.append(" WHERE " + where);
for(int i = 0; i < _database->model().count(); i++)
sql = sql.replace(_database->model().at(i)->className() + "." , _database->model().at(i)->name() + ".");
return sql;
}
QString SqlGeneratorBase::escapeValue(const QVariant &v)const
{
switch (v.type()) {

View File

@ -92,6 +92,8 @@ public:
virtual QString deleteCommand(QList<WherePhrase> &wheres, QString tableName);
virtual QString updateCommand(WherePhrase &phrase, QList<WherePhrase> &wheres, QString tableName);
virtual QString escapeValue(const QVariant &v) const;
virtual QString phrase(const PhraseData *d) const;
virtual QString operatorString(const PhraseData::Condition &cond) const;

View File

@ -52,7 +52,7 @@ public:
int length() const;
T *at(int i) const;
const T &operator[](int i) const;
Query<T> *createQuery();
Query<T> *query();
};
template<class T>
@ -68,7 +68,7 @@ Q_OUTOFLINE_TEMPLATE TableSet<T>::TableSet(Table *parent) : TableSetBase(parent)
}
template<class T>
Q_OUTOFLINE_TEMPLATE Query<T> *TableSet<T>::createQuery()
Q_OUTOFLINE_TEMPLATE Query<T> *TableSet<T>::query()
{
Query<T> *q = new Query<T>(_database, this);

View File

@ -164,6 +164,17 @@ WherePhrase WherePhrase::operator >=(const WherePhrase &other)
return WherePhrase(this, PhraseData::GreaterEqual, (WherePhrase*)&other);
}
WherePhrase WherePhrase::operator !()
{
if(_data->operatorCond < 20)
_data->operatorCond = (PhraseData::Condition)((_data->operatorCond + 10) % 20);
else
qFatal("Operator ! can not aplied to non condition statements");
return this;//WherePhrase(this, PhraseData::Not);
}
WherePhrase WherePhrase::operator =(const WherePhrase &other)
{
return WherePhrase(this, PhraseData::Set, (WherePhrase*)&other);

View File

@ -116,6 +116,7 @@ public:
WherePhrase operator <=(const WherePhrase &other);
WherePhrase operator >=(const WherePhrase &other);
WherePhrase operator !();
WherePhrase operator =(const WherePhrase &other);
WherePhrase operator +(const WherePhrase &other);
@ -149,8 +150,8 @@ public:
WherePhrase operator !();
WherePhrase isNull();
WherePhrase in(QVariantList list);
WherePhrase in(QStringList list);
WherePhrase in(QList<T> list);
// WherePhrase in(QStringList list);
WherePhrase like(QString pattern);
};
@ -191,16 +192,20 @@ Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::isNull(){
}
template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::in(QVariantList list)
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::in(QList<T> list)
{
return WherePhrase(this, PhraseData::In, list);
QVariantList vlist;
foreach (T t, list)
vlist.append(QVariant::fromValue(t));
return WherePhrase(this, PhraseData::In, vlist);
}
template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::in(QStringList list)
{
return WherePhrase(this, PhraseData::In, list);
}
//template<typename T>
//Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::in(QStringList list)
//{
// return WherePhrase(this, PhraseData::In, list);
//}
template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::like(QString pattern)