numeric field phrase

This commit is contained in:
blackdal 2017-07-24 12:57:52 +04:30
parent 09877631d2
commit a9224fcb40
8 changed files with 219 additions and 84 deletions

View File

@ -2,7 +2,7 @@
NUT_BEGIN_NAMESPACE NUT_BEGIN_NAMESPACE
DbGeography::DbGeography(QObject *parent) //: QObject(parent) DbGeography::DbGeography(QObject *parent)
{ {
} }
@ -29,7 +29,6 @@ void DbGeography::setLatitude(qreal latitude)
return; return;
m_latitude = latitude; m_latitude = latitude;
// emit latitudeChanged(latitude);
} }
void DbGeography::setLongitude(qreal longitude) void DbGeography::setLongitude(qreal longitude)
@ -38,7 +37,20 @@ void DbGeography::setLongitude(qreal longitude)
return; return;
m_longitude = longitude; m_longitude = longitude;
// emit longitudeChanged(longitude); }
QString DbGeography::toString()
{
return QString("%1,%2").arg(longitude()).arg(latitude());
}
void DbGeography::fromString(const QString &s)
{
QStringList parts = s.split(',');
if (parts.count() == 2) {
setLongitude(parts[0].toDouble());
setLatitude(parts[1].toDouble());
}
} }
NUT_END_NAMESPACE NUT_END_NAMESPACE

View File

@ -9,10 +9,6 @@ NUT_BEGIN_NAMESPACE
class NUT_EXPORT DbGeography //: public QObject class NUT_EXPORT DbGeography //: public QObject
{ {
// Q_PROPERTY(qreal latitude READ latitude WRITE setLatitude NOTIFY
// latitudeChanged)
// Q_PROPERTY(qreal longitude READ longitude WRITE setLongitude NOTIFY
// longitudeChanged)
qreal m_latitude; qreal m_latitude;
qreal m_longitude; qreal m_longitude;
@ -23,13 +19,11 @@ public:
qreal latitude() const; qreal latitude() const;
qreal longitude() const; qreal longitude() const;
//signals:
// void latitudeChanged(qreal latitude);
// void longitudeChanged(qreal longitude);
//public slots:
void setLatitude(qreal latitude); void setLatitude(qreal latitude);
void setLongitude(qreal longitude); void setLongitude(qreal longitude);
QString toString();
void fromString(const QString &s);
}; };
NUT_END_NAMESPACE NUT_END_NAMESPACE

View File

@ -37,36 +37,36 @@ QString MySqlGenerator::fieldType(FieldModel *field)
switch (field->type) { switch (field->type) {
case QVariant::Bool: case QVariant::Bool:
dbType = "boolean"; dbType = "BOOLEAN";
break; break;
case QVariant::ByteArray: case QVariant::ByteArray:
dbType = "blob"; dbType = "BLOB";
break; break;
case QVariant::DateTime: case QVariant::DateTime:
dbType = "datetime"; dbType = "DATETIME";
break; break;
case QVariant::Date: case QVariant::Date:
dbType = "date"; dbType = "DATE";
break; break;
case QVariant::Time: case QVariant::Time:
dbType = "time"; dbType = "TIME";
break; break;
case QVariant::Double: case QVariant::Double:
dbType = "real"; dbType = "REAL";
break; break;
case QVariant::Int: case QVariant::Int:
dbType = "int(4)"; dbType = "INT(4)";
if(field->isAutoIncrement) if(field->isAutoIncrement)
dbType += " auto_increment"; dbType += " AUTO_INCREMENT";
break; break;
case QVariant::String: case QVariant::String:
if(field->length) if(field->length)
dbType = QString("varchar(%1)").arg(field->length); dbType = QString("VARCHAR(%1)").arg(field->length);
else else
dbType = "text"; dbType = "TEXT";
break; break;
case QVariant::Point: case QVariant::Point:
@ -79,6 +79,10 @@ QString MySqlGenerator::fieldType(FieldModel *field)
dbType = "POLYGON"; dbType = "POLYGON";
break; break;
case QVariant::Uuid:
dbType = "VARCHAR(64)";
break;
default: default:
qWarning("Type %s::%s(%d) is not supported", qWarning("Type %s::%s(%d) is not supported",
qPrintable(field->name), qPrintable(field->name),

View File

@ -35,39 +35,59 @@ QString PostgreSqlGenerator::fieldType(FieldModel *field)
switch (field->type) { switch (field->type) {
case QVariant::Bool: case QVariant::Bool:
dbType = "boolean"; dbType = "BOOLEAN";
break; break;
case QVariant::ByteArray: case QVariant::ByteArray:
dbType = "bytea"; dbType = "BYTEA";
break; break;
case QVariant::Date: case QVariant::Date:
dbType = "date"; dbType = "DATE";
break; break;
case QVariant::DateTime: case QVariant::DateTime:
dbType = "timestamp"; dbType = "TIMESTAMP";
break; break;
case QVariant::Time: case QVariant::Time:
dbType = "time"; dbType = "TIME";
break; break;
case QVariant::Int: case QVariant::Int:
case QVariant::UInt:
if(field->isAutoIncrement) if(field->isAutoIncrement)
dbType = "serial"; dbType = "SERIAL";
else else
dbType = "integer"; dbType = "INTEGER";
break; break;
case QVariant::ULongLong:
case QVariant::LongLong:
if(field->isAutoIncrement)
dbType = "BIGSERIAL";
else
dbType = "BIGINTEGER";
break;
case QVariant::Double: case QVariant::Double:
dbType = "real"; dbType = "REAL";
break; break;
case QVariant::String: case QVariant::String:
if(field->length) if(field->length)
dbType = QString("varchar(%1)").arg(field->length); dbType = QString("VARCHAR(%1)").arg(field->length);
else else
dbType = "text"; dbType = "TEXT";
break; break;
case QVariant::Point: case QVariant::Point:
case QVariant::PointF: case QVariant::PointF:
dbType="point"; dbType="POINT";
break;
case QVariant::Uuid:
dbType = "UUID";
break;
case QVariant::Polygon:
case QVariant::PolygonF:
dbType = "POLYGON";
break; break;
default: default:

View File

@ -127,7 +127,7 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
QVariant lastPkValue = QVariant(); QVariant lastPkValue = QVariant();
int childTypeId = 0; int childTypeId = 0;
T *lastRow = 0; T *lastRow = 0;
TableSetBase *childTableSet; TableSetBase *childTableSet = Q_NULLPTR;
//FIXME: getting table error //FIXME: getting table error
// QStringList masterFields = TableModel::findByName(d->tableName)->fieldsNames(); // QStringList masterFields = TableModel::findByName(d->tableName)->fieldsNames();
@ -321,7 +321,7 @@ Q_OUTOFLINE_TEMPLATE int Query<T>::update(WherePhrase phrase)
d->wheres, d->wheres,
d->tableName); d->tableName);
QSqlQuery q = d->database->exec(sql); QSqlQuery q = d->database->exec(sql);
qDebug()<<sql;
if (m_autoDelete) if (m_autoDelete)
deleteLater(); deleteLater();
return q.numRowsAffected(); return q.numRowsAffected();

View File

@ -43,10 +43,10 @@ QString SqlServerGenerator::fieldType(FieldModel *field)
switch (field->type) { switch (field->type) {
case QVariant::Bool: case QVariant::Bool:
dbType = "bit"; dbType = "BIT";
break; break;
case QVariant::ByteArray: case QVariant::ByteArray:
dbType = "varbinary"; dbType = "VARBINARY";
if(field->length) if(field->length)
dbType.append(" (" + QString::number(field->length) + ")"); dbType.append(" (" + QString::number(field->length) + ")");
@ -54,21 +54,21 @@ QString SqlServerGenerator::fieldType(FieldModel *field)
dbType.append(" (MAX)"); dbType.append(" (MAX)");
break; break;
case QVariant::Date: case QVariant::Date:
dbType = "date"; dbType = "DATE";
break; break;
case QVariant::DateTime: case QVariant::DateTime:
dbType = "datetime"; dbType = "DATETIME";
break; break;
case QVariant::Time: case QVariant::Time:
dbType = "time"; dbType = "TIME";
break; break;
case QVariant::Double: case QVariant::Double:
dbType = "real"; dbType = "REAL";
break; break;
case QVariant::Int: case QVariant::Int:
dbType = "int"; dbType = "INT";
if(field->isAutoIncrement) if(field->isAutoIncrement)
dbType += " identity(1,1)"; dbType += " IDENTITY(1,1)";
break; break;
case QVariant::Point: case QVariant::Point:
@ -78,10 +78,15 @@ QString SqlServerGenerator::fieldType(FieldModel *field)
case QVariant::String: case QVariant::String:
if(field->length) if(field->length)
dbType = QString("varchar(%1)").arg(field->length); dbType = QString("NVARCHAR(%1)").arg(field->length);
else else
dbType = "varchar(max)"; dbType = "NVARCHAR(MAX)";
break; break;
case QVariant::Uuid:
dbType = "UNIQUEIDENTIFIER";
break;
default: default:
dbType = ""; dbType = "";
} }

View File

@ -200,34 +200,4 @@ WherePhrase WherePhrase::operator&(const WherePhrase &other)
return WherePhrase(this, PhraseData::Append, (WherePhrase *)&other); return WherePhrase(this, PhraseData::Append, (WherePhrase *)&other);
} }
WherePhrase WherePhrase::operator==(const QVariant &other)
{
return WherePhrase(this, PhraseData::Equal, other);
}
WherePhrase WherePhrase::operator!=(const QVariant &other)
{
return WherePhrase(this, PhraseData::NotEqual, other);
}
WherePhrase WherePhrase::operator<(const QVariant &other)
{
return WherePhrase(this, PhraseData::Less, other);
}
WherePhrase WherePhrase::operator>(const QVariant &other)
{
return WherePhrase(this, PhraseData::Greater, other);
}
WherePhrase WherePhrase::operator<=(const QVariant &other)
{
return WherePhrase(this, PhraseData::LessEqual, other);
}
WherePhrase WherePhrase::operator>=(const QVariant &other)
{
return WherePhrase(this, PhraseData::GreaterEqual, other);
}
NUT_END_NAMESPACE NUT_END_NAMESPACE

View File

@ -130,15 +130,6 @@ public:
WherePhrase operator &(const WherePhrase &other); WherePhrase operator &(const WherePhrase &other);
WherePhrase operator ==(const QVariant &other);
WherePhrase operator !=(const QVariant &other);
WherePhrase operator <(const QVariant &other);
WherePhrase operator >(const QVariant &other);
WherePhrase operator <=(const QVariant &other);
WherePhrase operator >=(const QVariant &other);
PhraseData *data() const; PhraseData *data() const;
}; };
@ -152,6 +143,13 @@ public:
WherePhrase operator +(const QVariant &other); WherePhrase operator +(const QVariant &other);
WherePhrase operator !(); WherePhrase operator !();
WherePhrase operator ==(const QVariant &other);
WherePhrase operator !=(const QVariant &other);
WherePhrase operator <(const QVariant &other);
WherePhrase operator >(const QVariant &other);
WherePhrase operator <=(const QVariant &other);
WherePhrase operator >=(const QVariant &other);
WherePhrase isNull(); WherePhrase isNull();
WherePhrase in(QList<T> list); WherePhrase in(QList<T> list);
// WherePhrase in(QStringList list); // WherePhrase in(QStringList list);
@ -194,6 +192,42 @@ Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator !()
return this;//WherePhrase(this, PhraseData::Not); return this;//WherePhrase(this, PhraseData::Not);
} }
template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator==(const QVariant &other)
{
return WherePhrase(this, PhraseData::Equal, other);
}
template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator!=(const QVariant &other)
{
return WherePhrase(this, PhraseData::NotEqual, other);
}
template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator<(const QVariant &other)
{
return WherePhrase(this, PhraseData::Less, other);
}
template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator>(const QVariant &other)
{
return WherePhrase(this, PhraseData::Greater, other);
}
template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator<=(const QVariant &other)
{
return WherePhrase(this, PhraseData::LessEqual, other);
}
template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::operator>=(const QVariant &other)
{
return WherePhrase(this, PhraseData::GreaterEqual, other);
}
template<typename T> template<typename T>
Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::isNull(){ Q_OUTOFLINE_TEMPLATE WherePhrase FieldPhrase<T>::isNull(){
return WherePhrase(this, PhraseData::Null); return WherePhrase(this, PhraseData::Null);
@ -267,6 +301,21 @@ public:
} }
}; };
//template<>
//class FieldPhrase<QString>: public WherePhrase {
//public:
// FieldPhrase(const char *className, const char* s) : WherePhrase(className, s){
// }
// WherePhrase like(QString pattern)
// {
// return WherePhrase(this, PhraseData::Like, pattern);
// }
//};
template<> template<>
class FieldPhrase<bool>: public WherePhrase{ class FieldPhrase<bool>: public WherePhrase{
public: public:
@ -287,6 +336,87 @@ public:
} }
}; };
class NumericFieldPhrase: public WherePhrase{
public:
NumericFieldPhrase(const char *className, const char* s) : WherePhrase(className, s) { }
WherePhrase operator =(const QVariant &other)
{
return WherePhrase(this, PhraseData::Set, other);
}
WherePhrase operator +(const QVariant &other)
{
return WherePhrase(this, PhraseData::Add, other);
}
WherePhrase operator -(const QVariant &other)
{
return WherePhrase(this, PhraseData::Minus, other);
}
WherePhrase operator ==(const QVariant &other)
{
return WherePhrase(this, PhraseData::Equal, other);
}
WherePhrase operator !=(const QVariant &other)
{
return WherePhrase(this, PhraseData::NotEqual, other);
}
WherePhrase operator <(const QVariant &other)
{
return WherePhrase(this, PhraseData::Less, other);
}
WherePhrase operator >(const QVariant &other)
{
return WherePhrase(this, PhraseData::Greater, other);
}
WherePhrase operator <=(const QVariant &other)
{
return WherePhrase(this, PhraseData::LessEqual, other);
}
WherePhrase operator >=(const QVariant &other)
{
return WherePhrase(this, PhraseData::GreaterEqual, other);
}
WherePhrase isNull()
{
return WherePhrase(this, PhraseData::Null);
}
};
#define SPECIALIZATION_NUMERIC(type) \
template<> \
class FieldPhrase<type>: public NumericFieldPhrase{ \
public: \
FieldPhrase(const char *className, const char* s) \
: NumericFieldPhrase(className, s) { } \
WherePhrase operator =(const WherePhrase &other) \
{ \
return WherePhrase(this, PhraseData::Set, (WherePhrase *)&other); \
} \
WherePhrase in(QList<type> list) \
{ \
QVariantList vlist; \
foreach (type t, list) \
vlist.append(QVariant::fromValue(t)); \
return WherePhrase(this, PhraseData::In, vlist); \
} \
};
SPECIALIZATION_NUMERIC(qint16)
SPECIALIZATION_NUMERIC(qint32)
SPECIALIZATION_NUMERIC(qint64)
SPECIALIZATION_NUMERIC(qreal)
NUT_END_NAMESPACE NUT_END_NAMESPACE
#endif // PHRASE_H #endif // PHRASE_H