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", // ChangeLogTable *u = q->_change_logs()->createQuery()->orderBy("id",
// "desc")->first(); // "desc")->first();
ChangeLogTable *u ChangeLogTable *u
= changeLogs->createQuery()->orderBy("id", "desc")->first(); = changeLogs->query()->orderBy("id", "desc")->first();
DatabaseModel ret; DatabaseModel ret;

View File

@ -72,6 +72,8 @@ public:
// Query<T> *setWhere(const QString &where); // Query<T> *setWhere(const QString &where);
Query<T> *orderBy(QString fieldName, QString type); Query<T> *orderBy(QString fieldName, QString type);
Query<T> *orderBy(WherePhrase phrase); Query<T> *orderBy(WherePhrase phrase);
int update(WherePhrase phrase);
}; };
template <typename T> template <typename T>
@ -309,6 +311,20 @@ Q_OUTOFLINE_TEMPLATE Query<T> *Query<T>::orderBy(WherePhrase phrase)
return this; 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 NUT_END_NAMESPACE
#endif // QUERY_H #endif // QUERY_H

View File

@ -431,6 +431,22 @@ QString SqlGeneratorBase::deleteCommand(QList<WherePhrase> &wheres, QString tabl
return command; 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 QString SqlGeneratorBase::escapeValue(const QVariant &v)const
{ {
switch (v.type()) { switch (v.type()) {

View File

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

View File

@ -52,7 +52,7 @@ public:
int length() const; int length() const;
T *at(int i) const; T *at(int i) const;
const T &operator[](int i) const; const T &operator[](int i) const;
Query<T> *createQuery(); Query<T> *query();
}; };
template<class T> template<class T>
@ -68,7 +68,7 @@ Q_OUTOFLINE_TEMPLATE TableSet<T>::TableSet(Table *parent) : TableSetBase(parent)
} }
template<class T> 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); 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); 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) WherePhrase WherePhrase::operator =(const WherePhrase &other)
{ {
return WherePhrase(this, PhraseData::Set, (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 >=(const WherePhrase &other); WherePhrase operator >=(const WherePhrase &other);
WherePhrase operator !();
WherePhrase operator =(const WherePhrase &other); WherePhrase operator =(const WherePhrase &other);
WherePhrase operator +(const WherePhrase &other); WherePhrase operator +(const WherePhrase &other);
@ -149,8 +150,8 @@ public:
WherePhrase operator !(); WherePhrase operator !();
WherePhrase isNull(); WherePhrase isNull();
WherePhrase in(QVariantList list); WherePhrase in(QList<T> list);
WherePhrase in(QStringList list); // WherePhrase in(QStringList list);
WherePhrase like(QString pattern); WherePhrase like(QString pattern);
}; };
@ -191,16 +192,20 @@ Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::isNull(){
} }
template<typename T> 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> //template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::in(QStringList list) //Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::in(QStringList list)
{ //{
return WherePhrase(this, PhraseData::In, list); // return WherePhrase(this, PhraseData::In, list);
} //}
template<typename T> template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::like(QString pattern) Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::like(QString pattern)