query enhancment
This commit is contained in:
parent
36a298d5c0
commit
c120ba8545
45
src/query.h
45
src/query.h
|
|
@ -43,12 +43,13 @@ class NUT_EXPORT Query : public QueryBase
|
||||||
QueryPrivate *d_ptr;
|
QueryPrivate *d_ptr;
|
||||||
Q_DECLARE_PRIVATE(Query)
|
Q_DECLARE_PRIVATE(Query)
|
||||||
|
|
||||||
|
bool m_autoDelete;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Query(Database *database, TableSetBase *tableSet);
|
Query(Database *database, TableSetBase *tableSet, bool autoDelete);
|
||||||
|
|
||||||
~Query();
|
~Query();
|
||||||
|
|
||||||
int remove();
|
|
||||||
T *first();
|
T *first();
|
||||||
|
|
||||||
int count();
|
int count();
|
||||||
|
|
@ -74,6 +75,7 @@ public:
|
||||||
Query<T> *orderBy(WherePhrase phrase);
|
Query<T> *orderBy(WherePhrase phrase);
|
||||||
|
|
||||||
int update(WherePhrase phrase);
|
int update(WherePhrase phrase);
|
||||||
|
int remove();
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
@ -82,8 +84,8 @@ inline Query<T> *createQuery(TableSet<T> *tableSet){
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
Q_OUTOFLINE_TEMPLATE Query<T>::Query(Database *database, TableSetBase *tableSet) : QueryBase(database),
|
Q_OUTOFLINE_TEMPLATE Query<T>::Query(Database *database, TableSetBase *tableSet, bool autoDelete) : QueryBase(database),
|
||||||
d_ptr(new QueryPrivate(this))
|
d_ptr(new QueryPrivate(this)), m_autoDelete(autoDelete)
|
||||||
{
|
{
|
||||||
Q_D(Query);
|
Q_D(Query);
|
||||||
|
|
||||||
|
|
@ -180,7 +182,8 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteLater();
|
if(m_autoDelete)
|
||||||
|
deleteLater();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -199,12 +202,14 @@ Q_OUTOFLINE_TEMPLATE QList<F> Query<T>::select(const FieldPhrase<F> f)
|
||||||
d->joinClassName);
|
d->joinClassName);
|
||||||
QSqlQuery q = d->database->exec(sql);
|
QSqlQuery q = d->database->exec(sql);
|
||||||
|
|
||||||
|
qDebug() << sql;
|
||||||
while (q.next()) {
|
while (q.next()) {
|
||||||
QVariant v = q.value(f.data()->text);
|
QVariant v = q.value(f.data()->text);
|
||||||
ret.append(v.value<F>());
|
ret.append(v.value<F>());
|
||||||
}
|
}
|
||||||
|
|
||||||
deleteLater();
|
if(m_autoDelete)
|
||||||
|
deleteLater();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -267,18 +272,6 @@ Q_OUTOFLINE_TEMPLATE QVariant Query<T>::average(FieldPhrase<int> &f)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
|
||||||
Q_OUTOFLINE_TEMPLATE int Query<T>::remove()
|
|
||||||
{
|
|
||||||
Q_D(Query);
|
|
||||||
|
|
||||||
QString sql = d->database->sqlGenertor()->deleteCommand(d->wheres, d->tableName);
|
|
||||||
// d->_database->sqlGenertor()->deleteRecords(_tableName, queryText());
|
|
||||||
// sql = compileCommand(sql);
|
|
||||||
QSqlQuery q = d->database->exec(sql);
|
|
||||||
return q.numRowsAffected();
|
|
||||||
}
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
Q_OUTOFLINE_TEMPLATE Query<T> *Query<T>::join(const QString &tableName)
|
Q_OUTOFLINE_TEMPLATE Query<T> *Query<T>::join(const QString &tableName)
|
||||||
{
|
{
|
||||||
|
|
@ -322,6 +315,22 @@ Q_OUTOFLINE_TEMPLATE int Query<T>::update(WherePhrase phrase)
|
||||||
d->tableName);
|
d->tableName);
|
||||||
qDebug() << sql;
|
qDebug() << sql;
|
||||||
QSqlQuery q = d->database->exec(sql);
|
QSqlQuery q = d->database->exec(sql);
|
||||||
|
|
||||||
|
if (m_autoDelete)
|
||||||
|
deleteLater();
|
||||||
|
return q.numRowsAffected();
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Q_OUTOFLINE_TEMPLATE int Query<T>::remove()
|
||||||
|
{
|
||||||
|
Q_D(Query);
|
||||||
|
|
||||||
|
QString sql = d->database->sqlGenertor()->deleteCommand(
|
||||||
|
d->wheres,
|
||||||
|
d->tableName);
|
||||||
|
qDebug() << sql;
|
||||||
|
QSqlQuery q = d->database->exec(sql);
|
||||||
return q.numRowsAffected();
|
return q.numRowsAffected();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
#include <QPointF>
|
||||||
#include <QTime>
|
#include <QTime>
|
||||||
#include <QVariant>
|
#include <QVariant>
|
||||||
|
|
||||||
|
|
@ -477,7 +478,17 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v)const
|
||||||
|
|
||||||
case QVariant::StringList:
|
case QVariant::StringList:
|
||||||
case QVariant::List:
|
case QVariant::List:
|
||||||
return "['" + v.toStringList().join("', '") + "']";
|
return "('" + v.toStringList().join("', '") + "')";
|
||||||
|
|
||||||
|
case QVariant::Point: {
|
||||||
|
QPoint pt = v.toPoint();
|
||||||
|
return QString("POINT(%1 %2)").arg(pt.x()).arg(pt.y());
|
||||||
|
}
|
||||||
|
|
||||||
|
case QVariant::PointF: {
|
||||||
|
QPointF pt = v.toPointF();
|
||||||
|
return QString("POINT(%1 %2)").arg(pt.x()).arg(pt.y());
|
||||||
|
}
|
||||||
|
|
||||||
case QVariant::Invalid:
|
case QVariant::Invalid:
|
||||||
qFatal("Invalud field value");
|
qFatal("Invalud field value");
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ public:
|
||||||
T *at(int i) const;
|
T *at(int i) const;
|
||||||
const T &operator[](int i) const;
|
const T &operator[](int i) const;
|
||||||
Query<T> *query();
|
Query<T> *query();
|
||||||
|
Query<T> *query(bool autoDelete);
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|
@ -70,7 +71,15 @@ Q_OUTOFLINE_TEMPLATE TableSet<T>::TableSet(Table *parent) : TableSetBase(parent)
|
||||||
template<class T>
|
template<class T>
|
||||||
Q_OUTOFLINE_TEMPLATE Query<T> *TableSet<T>::query()
|
Q_OUTOFLINE_TEMPLATE Query<T> *TableSet<T>::query()
|
||||||
{
|
{
|
||||||
Query<T> *q = new Query<T>(_database, this);
|
Query<T> *q = new Query<T>(_database, this, true);
|
||||||
|
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
Q_OUTOFLINE_TEMPLATE Query<T> *TableSet<T>::query(bool autoDelete)
|
||||||
|
{
|
||||||
|
Query<T> *q = new Query<T>(_database, this, autoDelete);
|
||||||
|
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue