support PostGis types with equal operator
This commit is contained in:
parent
d2822e3ef3
commit
45dc96611d
|
|
@ -62,6 +62,16 @@ bool PostgreSqlGenerator::readInsideParentese(QString &text, QString &out)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool PostgreSqlGenerator::isPostGisType(const QVariant::Type &t) const
|
||||
{
|
||||
return t == QVariant::Point
|
||||
|| t == QVariant::PointF
|
||||
|| t == QVariant::Rect
|
||||
|| t == QVariant::RectF
|
||||
|| t == QVariant::Polygon
|
||||
|| t == QVariant::PolygonF;
|
||||
}
|
||||
|
||||
PostgreSqlGenerator::PostgreSqlGenerator(Database *parent) : SqlGeneratorBase (parent)
|
||||
{
|
||||
|
||||
|
|
@ -215,14 +225,14 @@ QString PostgreSqlGenerator::escapeValue(const QVariant &v) const
|
|||
|
||||
if (v.type() == QVariant::Point) {
|
||||
QPoint pt = v.toPoint();
|
||||
return QString("'(%1, %2)'").arg(pt.x()).arg(pt.y());
|
||||
return QString("point(%1, %2)").arg(pt.x()).arg(pt.y());
|
||||
}
|
||||
if (v.type() == QVariant::PointF) {
|
||||
QPointF pt = v.toPointF();
|
||||
return QString("'(%1, %2)'").arg(pt.x()).arg(pt.y());
|
||||
return QString("point(%1, %2)").arg(pt.x()).arg(pt.y());
|
||||
}
|
||||
if (v.userType() == QMetaType::QJsonDocument) {
|
||||
return "'" + QString(v.toJsonDocument().toJson()) + "'";
|
||||
return "'" + QString(v.toJsonDocument().toJson(QJsonDocument::Compact)) + "'";
|
||||
}
|
||||
|
||||
#ifdef QT_GUI_LIB
|
||||
|
|
@ -313,5 +323,21 @@ QVariant PostgreSqlGenerator::unescapeValue(const QMetaType::Type &type, const Q
|
|||
return SqlGeneratorBase::unescapeValue(type, dbValue);
|
||||
}
|
||||
|
||||
QString PostgreSqlGenerator::createConditionalPhrase(const PhraseData *d) const
|
||||
{
|
||||
if (!d)
|
||||
return QString();
|
||||
|
||||
if (d->type == PhraseData::WithVariant) {
|
||||
if (isPostGisType(d->operand.type()) && d->operatorCond == PhraseData::Equal) {
|
||||
return QString("%1 ~= %2")
|
||||
.arg(SqlGeneratorBase::createConditionalPhrase(d->left),
|
||||
escapeValue(d->operand));
|
||||
}
|
||||
}
|
||||
|
||||
return SqlGeneratorBase::createConditionalPhrase(d);
|
||||
}
|
||||
|
||||
|
||||
NUT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -30,18 +30,22 @@ class PostgreSqlGenerator : public SqlGeneratorBase
|
|||
{
|
||||
private:
|
||||
bool readInsideParentese(QString &ref, QString &out);
|
||||
|
||||
bool isPostGisType(const QVariant::Type &t) const;
|
||||
public:
|
||||
explicit PostgreSqlGenerator(Database *parent = nullptr);
|
||||
|
||||
QString fieldType(FieldModel *field);
|
||||
QString fieldType(FieldModel *field) override;
|
||||
|
||||
QString diff(FieldModel *oldField, FieldModel *newField);
|
||||
QString diff(FieldModel *oldField, FieldModel *newField) override;
|
||||
|
||||
// SqlGeneratorBase interface
|
||||
public:
|
||||
QString escapeValue(const QVariant &v) const;
|
||||
QVariant unescapeValue(const QMetaType::Type &type, const QVariant &dbValue);
|
||||
QString escapeValue(const QVariant &v) const override;
|
||||
QVariant unescapeValue(const QMetaType::Type &type, const QVariant &dbValue) override;
|
||||
|
||||
// SqlGeneratorBase interface
|
||||
protected:
|
||||
QString createConditionalPhrase(const PhraseData *d) const override;
|
||||
};
|
||||
|
||||
NUT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ public:
|
|||
virtual QString primaryKeyConstraint(const TableModel *table) const;
|
||||
|
||||
protected:
|
||||
QString createConditionalPhrase(const PhraseData *d) const;
|
||||
virtual QString createConditionalPhrase(const PhraseData *d) const;
|
||||
QString createFieldPhrase(const PhraseList &ph);
|
||||
QString createOrderPhrase(const PhraseList &ph);
|
||||
void createInsertPhrase(const AssignmentPhraseList &ph, QString &fields, QString &values);
|
||||
|
|
|
|||
Loading…
Reference in New Issue