postgres data types [skip ci]
This commit is contained in:
parent
1bce39539f
commit
b3e23864ce
|
|
@ -36,32 +36,37 @@ QString MySqlGenerator::fieldType(FieldModel *field)
|
|||
QString dbType;
|
||||
|
||||
switch (field->type) {
|
||||
case QMetaType::Bool:
|
||||
dbType = "BOOLEAN";
|
||||
break;
|
||||
case QMetaType::QByteArray:
|
||||
dbType = "BLOB";
|
||||
break;
|
||||
case QMetaType::QDateTime:
|
||||
dbType = "DATETIME";
|
||||
break;
|
||||
|
||||
case QMetaType::QDate:
|
||||
dbType = "DATE";
|
||||
break;
|
||||
|
||||
case QMetaType::QTime:
|
||||
dbType = "TIME";
|
||||
break;
|
||||
case QMetaType::Double:
|
||||
dbType = "REAL";
|
||||
break;
|
||||
case QMetaType::Bool: return "BOOLEAN";
|
||||
case QMetaType::Char:
|
||||
case QMetaType::QChar: return "CHAR(1)";
|
||||
case QMetaType::SChar:
|
||||
case QMetaType::UChar: return "TINYINT";
|
||||
case QMetaType::Short:
|
||||
case QMetaType::UShort: return "SMALLINT";
|
||||
case QMetaType::UInt:
|
||||
case QMetaType::Int:
|
||||
dbType = "INT(4)";
|
||||
dbType = "INT";
|
||||
if(field->isAutoIncrement)
|
||||
dbType += " AUTO_INCREMENT";
|
||||
|
||||
break;
|
||||
case QMetaType::Long:
|
||||
case QMetaType::ULong:
|
||||
case QMetaType::LongLong:
|
||||
case QMetaType::ULongLong:
|
||||
return "BIGINT";
|
||||
|
||||
case QMetaType::Float:
|
||||
return "FLOAT";
|
||||
|
||||
case QMetaType::Double:
|
||||
return "REAL";
|
||||
|
||||
case QMetaType::QBitArray: return "VARBINARY";
|
||||
case QMetaType::QByteArray: return "BLOB";
|
||||
case QMetaType::QDate: return "DATE";
|
||||
case QMetaType::QTime: return "TIME";
|
||||
case QMetaType::QDateTime: return "DATETIME";
|
||||
|
||||
case QMetaType::QString:
|
||||
if(field->length)
|
||||
dbType = QString("VARCHAR(%1)").arg(field->length);
|
||||
|
|
@ -83,6 +88,20 @@ QString MySqlGenerator::fieldType(FieldModel *field)
|
|||
dbType = "VARCHAR(64)";
|
||||
break;
|
||||
|
||||
case QMetaType::QSize:
|
||||
case QMetaType::QSizeF:
|
||||
case QMetaType::QRect:
|
||||
case QMetaType::QRectF:
|
||||
case QMetaType::QLine:
|
||||
case QMetaType::QLineF:
|
||||
case QMetaType::QColor:
|
||||
case QMetaType::QUrl:
|
||||
case QMetaType::QJsonArray:
|
||||
case QMetaType::QJsonValue:
|
||||
case QMetaType::QJsonObject:
|
||||
case QMetaType::QJsonDocument:
|
||||
case QMetaType::QStringList: return "TEXT";
|
||||
|
||||
default:
|
||||
qWarning("Type %s::%s(%d) is not supported",
|
||||
qPrintable(field->name),
|
||||
|
|
|
|||
|
|
@ -19,6 +19,11 @@
|
|||
**************************************************************************/
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QPoint>
|
||||
#ifdef QT_GUI_LIB
|
||||
#include <QPolygon>
|
||||
#endif
|
||||
#include <QVariant>
|
||||
|
||||
#include "postgresqlgenerator.h"
|
||||
#include "../table.h"
|
||||
|
|
@ -169,9 +174,54 @@ QString PostgreSqlGenerator::diff(FieldModel *oldField, FieldModel *newField)
|
|||
|
||||
QString PostgreSqlGenerator::escapeValue(const QVariant &v) const
|
||||
{
|
||||
if (v.type() == QVariant::Time)
|
||||
return "'" + v.toTime().toString("HH:mm:ss") + "'";
|
||||
|
||||
if (v.type() == QVariant::Date)
|
||||
return "'" + v.toDate().toString("yyyy-MM-dd") + "'";
|
||||
|
||||
if (v.type() == QVariant::DateTime)
|
||||
return "'" + v.toDateTime().toString("yyyy-MM-dd HH:mm:ss") + "'";
|
||||
|
||||
if (v.type() == QVariant::StringList)
|
||||
return "'{" + v.toStringList().join(",") + "}'";
|
||||
|
||||
if (v.type() == QVariant::Point) {
|
||||
QPoint pt = v.toPoint();
|
||||
return QString("'(%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());
|
||||
}
|
||||
|
||||
#ifdef QT_GUI_LIB
|
||||
if (v.type() == QVariant::Polygon) {
|
||||
QString ret;
|
||||
QPoint pt;
|
||||
QPolygon pol = v.value<QPolygon>();
|
||||
for (int i = 0; i < pol.size(); ++i) {
|
||||
pt = pol.at(i);
|
||||
if (!ret.isEmpty())
|
||||
ret.append("),(");
|
||||
ret.append(QString::number(pt.x()) + ", " + QString::number(pt.y()));
|
||||
}
|
||||
return "'((" + ret + "))'";
|
||||
}
|
||||
if (v.type() == QVariant::PolygonF) {
|
||||
QString ret;
|
||||
QPointF pt;
|
||||
QPolygonF pol = v.value<QPolygonF>();
|
||||
for (int i = 0; i < pol.size(); ++i) {
|
||||
pt = pol.at(i);
|
||||
if (!ret.isEmpty())
|
||||
ret.append("),(");
|
||||
ret.append(QString::number(pt.x()) + ", " + QString::number(pt.y()));
|
||||
}
|
||||
return "'((" + ret + "))'";
|
||||
}
|
||||
#endif
|
||||
|
||||
return SqlGeneratorBase::escapeValue(v);
|
||||
}
|
||||
|
||||
|
|
@ -180,6 +230,14 @@ QVariant PostgreSqlGenerator::readValue(const QMetaType::Type &type, const QVari
|
|||
if (type == QMetaType::QDateTime)
|
||||
return dbValue.toDateTime();// QDateTime::fromString(dbValue.toString(), "yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
if (type == QMetaType::QPoint) {
|
||||
return SqlGeneratorBase::readValue(QMetaType::QPoint, dbValue.toString()
|
||||
.replace("(", "").replace(")", ""));
|
||||
}
|
||||
if (type == QMetaType::QPointF) {
|
||||
return SqlGeneratorBase::readValue(QMetaType::QPointF, dbValue.toString()
|
||||
.replace("(", "").replace(")", ""));
|
||||
}
|
||||
return SqlGeneratorBase::readValue(type, dbValue);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -64,6 +64,15 @@ public:
|
|||
explicit SqlGeneratorBase(Database *parent);
|
||||
virtual ~SqlGeneratorBase() = default;
|
||||
|
||||
virtual bool supportPrimaryKey(const QMetaType::Type &type) {
|
||||
Q_UNUSED(type);
|
||||
return true;
|
||||
}
|
||||
virtual bool supportAutoIncrement(const QMetaType::Type &type) {
|
||||
Q_UNUSED(type);
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual QString masterDatabaseName(QString databaseName);
|
||||
|
||||
virtual QString createTable(TableModel *table);
|
||||
|
|
|
|||
|
|
@ -116,6 +116,14 @@ QString SqlServerGenerator::fieldType(FieldModel *field)
|
|||
dbType = "UNIQUEIDENTIFIER";
|
||||
break;
|
||||
|
||||
case QMetaType::QPolygon:
|
||||
case QMetaType::QPolygonF:
|
||||
case QMetaType::QSize:
|
||||
case QMetaType::QSizeF:
|
||||
case QMetaType::QRect:
|
||||
case QMetaType::QRectF:
|
||||
case QMetaType::QLine:
|
||||
case QMetaType::QLineF:
|
||||
case QMetaType::QColor:
|
||||
case QMetaType::QStringList:
|
||||
case QMetaType::QJsonArray:
|
||||
|
|
|
|||
|
|
@ -74,6 +74,8 @@ void DataTypesTest::initTestCase()
|
|||
color = Qt::red;
|
||||
|
||||
QTEST_ASSERT(ok);
|
||||
|
||||
db.sampleTables()->query()->remove();
|
||||
}
|
||||
|
||||
void DataTypesTest::insert()
|
||||
|
|
|
|||
Loading…
Reference in New Issue