where phrase
This commit is contained in:
parent
37915378b1
commit
cf9fcde6d5
|
|
@ -133,7 +133,7 @@ bool DatabasePrivate::updateDatabase()
|
|||
}
|
||||
bool ok = db.commit();
|
||||
|
||||
if (ok) {
|
||||
if (db.lastError().type() == QSqlError::NoError) {
|
||||
storeScheemaInDB();
|
||||
|
||||
q->databaseUpdated(last.versionMajor(), last.versionMinor(),
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ public: \
|
|||
#define NUT_PRIMARY_AUTO_INCREMENT(x) NUT_PRIMARY_KEY(x) \
|
||||
NUT_AUTO_INCREMENT(x)
|
||||
#define NUT_UNIQUE(x) Q_CLASSINFO(QT_STRINGIFY(__nut_NAME_PERFIX #x " " __nut_UNIQUE), #x)
|
||||
#define NUT_LEN(x, n) Q_CLASSINFO(QT_STRINGIFY(__nut_NAME_PERFIX #x " " __nut_LEN), #n)
|
||||
#define NUT_LEN(field, len) Q_CLASSINFO(QT_STRINGIFY(__nut_NAME_PERFIX #field " " __nut_LEN), #len)
|
||||
#define NUT_DEFAULT_VALUE(x, n) Q_CLASSINFO(QT_STRINGIFY(__nut_NAME_PERFIX #x " " __nut_DEFAULT_VALUE), #n)
|
||||
#define NUT_NOT_NULL(x) Q_CLASSINFO(QT_STRINGIFY(__nut_NAME_PERFIX #x " " __nut_NOT_NULL), "1")
|
||||
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@
|
|||
#include "mysqlgenerator.h"
|
||||
#include "tablemodel.h"
|
||||
|
||||
#include <QPoint>
|
||||
#include <QPointF>
|
||||
|
||||
NUT_BEGIN_NAMESPACE
|
||||
|
||||
MySqlGenerator::MySqlGenerator(Database *parent) : SqlGeneratorBase(parent)
|
||||
|
|
@ -90,4 +93,40 @@ QString MySqlGenerator::fieldType(FieldModel *field)
|
|||
return dbType;
|
||||
}
|
||||
|
||||
QString MySqlGenerator::escapeValue(const QVariant &v) const
|
||||
{
|
||||
switch (v.type()) {
|
||||
case QVariant::Point: {
|
||||
QPoint pt = v.toPoint();
|
||||
return QString("GeomFromText('POINT(%1 %2)',0)").arg(pt.x()).arg(pt.y());
|
||||
}
|
||||
|
||||
case QVariant::PointF: {
|
||||
QPointF pt = v.toPointF();
|
||||
return QString("GeomFromText('POINT(%1 %2)',0)").arg(pt.x()).arg(pt.y());
|
||||
}
|
||||
|
||||
default:
|
||||
return SqlGeneratorBase::escapeValue(v);
|
||||
}
|
||||
}
|
||||
|
||||
QVariant MySqlGenerator::readValue(const QVariant::Type &type, const QVariant &dbValue)
|
||||
{
|
||||
if (type == QVariant::PointF) {
|
||||
qDebug() << "QVariant::PointF" << dbValue;
|
||||
}
|
||||
}
|
||||
|
||||
QString MySqlGenerator::phrase(const PhraseData *d) const
|
||||
{
|
||||
if (d->operatorCond == PhraseData::Distance) {
|
||||
return QString("ST_Distance(%1, %2)")
|
||||
.arg(d->left->text)
|
||||
.arg(escapeValue(d->operand.toPointF()));
|
||||
}
|
||||
|
||||
return SqlGeneratorBase::phrase(d);
|
||||
}
|
||||
|
||||
NUT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -32,7 +32,9 @@ public:
|
|||
MySqlGenerator(Database *parent = 0);
|
||||
|
||||
QString fieldType(FieldModel *field);
|
||||
|
||||
QString escapeValue(const QVariant &v) const;
|
||||
QVariant readValue(const QVariant::Type &type, const QVariant &dbValue);
|
||||
QString phrase(const PhraseData *d) const;
|
||||
};
|
||||
|
||||
NUT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@
|
|||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QScopedPointer>
|
||||
#include <QtCore/QRegularExpression>
|
||||
#include <QtCore/QMetaObject>
|
||||
|
||||
#include "query_p.h"
|
||||
#include "database.h"
|
||||
|
|
@ -118,6 +119,7 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
|||
d->orderPhrases,
|
||||
d->tableName,
|
||||
d->joinClassName);
|
||||
qDebug() << sql;
|
||||
QSqlQuery q = d->database->exec(sql);
|
||||
|
||||
// QString pk = TableModel::findByName(d->tableName)->primaryKey();
|
||||
|
|
@ -145,9 +147,13 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
|||
while (q.next()) {
|
||||
if(lastPkValue != q.value(pk)){
|
||||
T *t = new T();
|
||||
|
||||
foreach (QString field, masterFields)
|
||||
t->setProperty(field.toLatin1().data(), q.value(field));
|
||||
// for (int i = 0; i < t->metaObject()->propertyCount(); i++) {
|
||||
// const QMetaProperty p = t->metaObject()->property(i);
|
||||
|
||||
// p.write(t, d->database->sqlGenertor()->readValue(p.type(), q.value(p.name())));
|
||||
// }
|
||||
|
||||
t->setTableSet(d->tableSet);
|
||||
t->setStatus(Table::FeatchedFromDB);
|
||||
|
|
|
|||
|
|
@ -499,6 +499,11 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v)const
|
|||
return "";
|
||||
}
|
||||
|
||||
QVariant SqlGeneratorBase::readValue(const QVariant::Type &type, const QVariant &dbValue)
|
||||
{
|
||||
return dbValue;
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::phraseOrder(const PhraseData *d) const
|
||||
{
|
||||
|
||||
|
|
|
|||
|
|
@ -95,6 +95,7 @@ public:
|
|||
virtual QString updateCommand(WherePhrase &phrase, QList<WherePhrase> &wheres, QString tableName);
|
||||
|
||||
virtual QString escapeValue(const QVariant &v) const;
|
||||
virtual QVariant readValue(const QVariant::Type &type, const QVariant &dbValue);
|
||||
virtual QString phrase(const PhraseData *d) const;
|
||||
virtual QString phraseUpdate(const PhraseData *d) const;
|
||||
virtual QString operatorString(const PhraseData::Condition &cond) const;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include <QDate>
|
||||
#include <QDateTime>
|
||||
#include <QTime>
|
||||
#include <QPoint>
|
||||
#include <QSharedPointer>
|
||||
#include "defines.h"
|
||||
#include "dbgeography.h"
|
||||
|
|
@ -146,7 +147,9 @@ class FieldPhrase: public WherePhrase{
|
|||
public:
|
||||
FieldPhrase(const char *className, const char* s);
|
||||
|
||||
WherePhrase operator =(const WherePhrase &other);
|
||||
WherePhrase operator =(const QVariant &other);
|
||||
WherePhrase operator +(const QVariant &other);
|
||||
WherePhrase operator !();
|
||||
|
||||
WherePhrase isNull();
|
||||
|
|
@ -168,6 +171,18 @@ Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator =(const QVariant &othe
|
|||
return WherePhrase(this, PhraseData::Set, other);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator =(const WherePhrase &other)
|
||||
{
|
||||
return WherePhrase(this, PhraseData::Set, &other);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator+(const QVariant &other)
|
||||
{
|
||||
return WherePhrase(this, PhraseData::Add, other);
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator !()
|
||||
{
|
||||
|
|
@ -220,6 +235,38 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
// Custom types
|
||||
template<>
|
||||
class FieldPhrase<QPoint>: public WherePhrase {
|
||||
public:
|
||||
FieldPhrase(const char *className, const char* s) : WherePhrase(className, s){
|
||||
|
||||
}
|
||||
|
||||
WherePhrase distance(const QPoint &geo) {
|
||||
return WherePhrase(this, PhraseData::Distance, QVariant::fromValue(geo));
|
||||
}
|
||||
WherePhrase operator =(const QPoint &other) {
|
||||
return WherePhrase(this, PhraseData::Set, other);
|
||||
}
|
||||
};
|
||||
|
||||
// Custom types
|
||||
template<>
|
||||
class FieldPhrase<QPointF>: public WherePhrase {
|
||||
public:
|
||||
FieldPhrase(const char *className, const char* s) : WherePhrase(className, s){
|
||||
|
||||
}
|
||||
|
||||
WherePhrase distance(const QPointF &geo) {
|
||||
return WherePhrase(this, PhraseData::Distance, QVariant::fromValue(geo));
|
||||
}
|
||||
WherePhrase operator =(const QPointF &other) {
|
||||
return WherePhrase(this, PhraseData::Set, other);
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
class FieldPhrase<bool>: public WherePhrase{
|
||||
public:
|
||||
|
|
|
|||
Loading…
Reference in New Issue