diff --git a/src/query.h b/src/query.h index bbbe66a..f3d7bfc 100644 --- a/src/query.h +++ b/src/query.h @@ -43,12 +43,13 @@ class NUT_EXPORT Query : public QueryBase QueryPrivate *d_ptr; Q_DECLARE_PRIVATE(Query) + bool m_autoDelete; + public: - Query(Database *database, TableSetBase *tableSet); + Query(Database *database, TableSetBase *tableSet, bool autoDelete); ~Query(); - int remove(); T *first(); int count(); @@ -74,6 +75,7 @@ public: Query *orderBy(WherePhrase phrase); int update(WherePhrase phrase); + int remove(); }; template @@ -82,8 +84,8 @@ inline Query *createQuery(TableSet *tableSet){ } template -Q_OUTOFLINE_TEMPLATE Query::Query(Database *database, TableSetBase *tableSet) : QueryBase(database), - d_ptr(new QueryPrivate(this)) +Q_OUTOFLINE_TEMPLATE Query::Query(Database *database, TableSetBase *tableSet, bool autoDelete) : QueryBase(database), + d_ptr(new QueryPrivate(this)), m_autoDelete(autoDelete) { Q_D(Query); @@ -180,7 +182,8 @@ Q_OUTOFLINE_TEMPLATE QList Query::toList(int count) break; } - deleteLater(); + if(m_autoDelete) + deleteLater(); return result; } @@ -199,12 +202,14 @@ Q_OUTOFLINE_TEMPLATE QList Query::select(const FieldPhrase f) d->joinClassName); QSqlQuery q = d->database->exec(sql); + qDebug() << sql; while (q.next()) { QVariant v = q.value(f.data()->text); ret.append(v.value()); } - deleteLater(); + if(m_autoDelete) + deleteLater(); return ret; } @@ -267,18 +272,6 @@ Q_OUTOFLINE_TEMPLATE QVariant Query::average(FieldPhrase &f) return 0; } -template -Q_OUTOFLINE_TEMPLATE int Query::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 Q_OUTOFLINE_TEMPLATE Query *Query::join(const QString &tableName) { @@ -322,6 +315,22 @@ Q_OUTOFLINE_TEMPLATE int Query::update(WherePhrase phrase) d->tableName); qDebug() << sql; QSqlQuery q = d->database->exec(sql); + + if (m_autoDelete) + deleteLater(); + return q.numRowsAffected(); +} + +template +Q_OUTOFLINE_TEMPLATE int Query::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(); } diff --git a/src/sqlgeneratorbase.cpp b/src/sqlgeneratorbase.cpp index d64b4ac..a65139e 100644 --- a/src/sqlgeneratorbase.cpp +++ b/src/sqlgeneratorbase.cpp @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -477,7 +478,17 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v)const case QVariant::StringList: 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: qFatal("Invalud field value"); diff --git a/src/tableset.h b/src/tableset.h index a759a73..c315098 100644 --- a/src/tableset.h +++ b/src/tableset.h @@ -53,6 +53,7 @@ public: T *at(int i) const; const T &operator[](int i) const; Query *query(); + Query *query(bool autoDelete); }; template @@ -70,7 +71,15 @@ Q_OUTOFLINE_TEMPLATE TableSet::TableSet(Table *parent) : TableSetBase(parent) template Q_OUTOFLINE_TEMPLATE Query *TableSet::query() { - Query *q = new Query(_database, this); + Query *q = new Query(_database, this, true); + + return q; +} + +template +Q_OUTOFLINE_TEMPLATE Query *TableSet::query(bool autoDelete) +{ + Query *q = new Query(_database, this, autoDelete); return q; }