generators data types
This commit is contained in:
parent
6606f5c7ca
commit
1bce39539f
|
|
@ -39,6 +39,8 @@ QString PostgreSqlGenerator::fieldType(FieldModel *field)
|
|||
case QMetaType::Bool:
|
||||
dbType = "BOOLEAN";
|
||||
break;
|
||||
|
||||
case QMetaType::QBitArray:
|
||||
case QMetaType::QByteArray:
|
||||
dbType = "BYTEA";
|
||||
break;
|
||||
|
|
@ -75,14 +77,20 @@ QString PostgreSqlGenerator::fieldType(FieldModel *field)
|
|||
dbType = "INTEGER";
|
||||
break;
|
||||
|
||||
case QMetaType::ULongLong:
|
||||
case QMetaType::Long:
|
||||
case QMetaType::ULong:
|
||||
case QMetaType::LongLong:
|
||||
case QMetaType::ULongLong:
|
||||
if(field->isAutoIncrement)
|
||||
dbType = "BIGSERIAL";
|
||||
else
|
||||
dbType = "BIGINT";
|
||||
break;
|
||||
|
||||
case QMetaType::Char:
|
||||
case QMetaType::QChar:
|
||||
return "CHAR(1)";
|
||||
|
||||
case QMetaType::QString:
|
||||
if(field->length)
|
||||
dbType = QString("VARCHAR(%1)").arg(field->length);
|
||||
|
|
@ -121,6 +129,8 @@ QString PostgreSqlGenerator::fieldType(FieldModel *field)
|
|||
case QMetaType::QStringList:
|
||||
return "TEXT[]";
|
||||
|
||||
case QMetaType::QSize:
|
||||
case QMetaType::QSizeF:
|
||||
case QMetaType::QUrl:
|
||||
case QMetaType::QColor:
|
||||
return "TEXT";
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ NUT_BEGIN_NAMESPACE
|
|||
class PostgreSqlGenerator : public SqlGeneratorBase
|
||||
{
|
||||
public:
|
||||
explicit PostgreSqlGenerator(Database *parent);
|
||||
explicit PostgreSqlGenerator(Database *parent = nullptr);
|
||||
|
||||
QString fieldType(FieldModel *field);
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ QString SqliteGenerator::fieldType(FieldModel *field)
|
|||
}
|
||||
switch (field->type) {
|
||||
case QMetaType::Bool: return "BOOLEAN";
|
||||
case QMetaType::QBitArray:
|
||||
case QMetaType::QByteArray: return "BLOB";
|
||||
case QMetaType::QDate: return "DATE";
|
||||
case QMetaType::QDateTime: return "DATETIME";
|
||||
|
|
@ -67,6 +68,12 @@ QString SqliteGenerator::fieldType(FieldModel *field)
|
|||
case QMetaType::QJsonDocument:
|
||||
case QMetaType::QPoint:
|
||||
case QMetaType::QPointF:
|
||||
case QMetaType::QSize:
|
||||
case QMetaType::QSizeF:
|
||||
case QMetaType::QLine:
|
||||
case QMetaType::QLineF:
|
||||
case QMetaType::QRect:
|
||||
case QMetaType::QRectF:
|
||||
case QMetaType::QPolygon:
|
||||
case QMetaType::QPolygonF:
|
||||
case QMetaType::QStringList:
|
||||
|
|
|
|||
|
|
@ -45,10 +45,44 @@ QString SqlServerGenerator::fieldType(FieldModel *field)
|
|||
QString dbType;
|
||||
|
||||
switch (field->type) {
|
||||
case QVariant::Bool:
|
||||
case QMetaType::Bool:
|
||||
dbType = "BIT";
|
||||
break;
|
||||
case QVariant::ByteArray:
|
||||
|
||||
case QMetaType::Char:
|
||||
case QMetaType::QChar:
|
||||
dbType = "CHAR(1)";
|
||||
break;
|
||||
|
||||
case QMetaType::SChar:
|
||||
case QMetaType::UChar:
|
||||
return "tinyint";
|
||||
|
||||
case QMetaType::Short:
|
||||
case QMetaType::UShort:
|
||||
return "smallint";
|
||||
|
||||
case QMetaType::UInt:
|
||||
case QMetaType::Int:
|
||||
dbType = "INT";
|
||||
if (field->isAutoIncrement)
|
||||
dbType += " IDENTITY(1,1)";
|
||||
break;
|
||||
|
||||
case QMetaType::Long:
|
||||
case QMetaType::ULong:
|
||||
case QMetaType::LongLong:
|
||||
case QMetaType::ULongLong:
|
||||
return "bigint";
|
||||
|
||||
case QMetaType::Float:
|
||||
return "FLOAT(24)";
|
||||
|
||||
case QMetaType::Double:
|
||||
return "REAL";
|
||||
|
||||
case QMetaType::QBitArray:
|
||||
case QMetaType::QByteArray:
|
||||
dbType = "VARBINARY";
|
||||
|
||||
if (field->length)
|
||||
|
|
@ -56,42 +90,43 @@ QString SqlServerGenerator::fieldType(FieldModel *field)
|
|||
else
|
||||
dbType.append(" (MAX)");
|
||||
break;
|
||||
case QVariant::Date:
|
||||
case QMetaType::QDate:
|
||||
dbType = "DATE";
|
||||
break;
|
||||
case QVariant::DateTime:
|
||||
case QMetaType::QDateTime:
|
||||
dbType = "DATETIME";
|
||||
break;
|
||||
case QVariant::Time:
|
||||
case QMetaType::QTime:
|
||||
dbType = "TIME";
|
||||
break;
|
||||
case QVariant::Double:
|
||||
dbType = "REAL";
|
||||
break;
|
||||
case QVariant::Int:
|
||||
dbType = "INT";
|
||||
if (field->isAutoIncrement)
|
||||
dbType += " IDENTITY(1,1)";
|
||||
break;
|
||||
|
||||
case QVariant::Point:
|
||||
case QVariant::PointF:
|
||||
case QMetaType::QPoint:
|
||||
case QMetaType::QPointF:
|
||||
dbType = "GEOMETRY";
|
||||
break;
|
||||
|
||||
case QVariant::String:
|
||||
case QMetaType::QString:
|
||||
if (field->length)
|
||||
dbType = QString("NVARCHAR(%1)").arg(field->length);
|
||||
else
|
||||
dbType = "NVARCHAR(MAX)";
|
||||
break;
|
||||
|
||||
case QVariant::Uuid:
|
||||
case QMetaType::QUuid:
|
||||
dbType = "UNIQUEIDENTIFIER";
|
||||
break;
|
||||
|
||||
case QMetaType::QColor:
|
||||
case QMetaType::QStringList:
|
||||
case QMetaType::QJsonArray:
|
||||
case QMetaType::QJsonValue:
|
||||
case QMetaType::QJsonObject:
|
||||
case QMetaType::QJsonDocument:
|
||||
case QMetaType::QUrl:
|
||||
return "TEXT";
|
||||
|
||||
default:
|
||||
Q_UNREACHABLE();
|
||||
// Q_UNREACHABLE();
|
||||
dbType = QString();
|
||||
}
|
||||
|
||||
|
|
@ -120,13 +155,13 @@ QString SqlServerGenerator::diff(FieldModel *oldField, FieldModel *newField)
|
|||
|
||||
QString SqlServerGenerator::escapeValue(const QVariant &v) const
|
||||
{
|
||||
if (v.type() == QVariant::String || v.type() == QVariant::Char)
|
||||
if (v.type() == QMetaType::QString || v.type() == QMetaType::QChar)
|
||||
return "N'" + v.toString() + "'";
|
||||
else if (v.type() == QVariant::Point) {
|
||||
else if (v.type() == QMetaType::QPoint) {
|
||||
QPoint pt = v.toPoint();
|
||||
return QString("geography::POINT(%1, %2, 4326)").arg(pt.x()).arg(
|
||||
pt.y());
|
||||
} else if (v.type() == QVariant::PointF) {
|
||||
} else if (v.type() == QMetaType::QPointF) {
|
||||
QPointF pt = v.toPointF();
|
||||
return QString("geography::POINT(%1, %2, 4326)").arg(pt.x()).arg(
|
||||
pt.y());
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ NUT_BEGIN_NAMESPACE
|
|||
class SqlServerGenerator : public SqlGeneratorBase
|
||||
{
|
||||
public:
|
||||
explicit SqlServerGenerator(Database *parent = 0);
|
||||
explicit SqlServerGenerator(Database *parent = nullptr);
|
||||
|
||||
QString masterDatabaseName(QString databaseName);
|
||||
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#include "consts.h"
|
||||
|
||||
#include "maintest.h"
|
||||
#include "tst_datatypes.h"
|
||||
#include "query.h"
|
||||
#include "tableset.h"
|
||||
#include "tablemodel.h"
|
||||
|
|
|
|||
|
|
@ -59,7 +59,6 @@ signals:
|
|||
private slots:
|
||||
void initTestCase();
|
||||
|
||||
void types();
|
||||
void insert();
|
||||
void retrive();
|
||||
void cleanupTestCase();
|
||||
|
|
@ -14,6 +14,6 @@ SOURCES += \
|
|||
tst_datatypes.cpp
|
||||
|
||||
HEADERS += \
|
||||
maintest.h \
|
||||
db.h \
|
||||
sampletable.h
|
||||
sampletable.h \
|
||||
tst_datatypes.h
|
||||
|
|
|
|||
|
|
@ -9,102 +9,120 @@
|
|||
#include "generators/sqlitegenerator.h"
|
||||
#include "generators/sqlservergenerator.h"
|
||||
#include "generators/mysqlgenerator.h"
|
||||
#include "generators/mysqlgenerator.h"
|
||||
#include "generators/postgresqlgenerator.h"
|
||||
|
||||
class tst_generators : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
#include "tst_generators.h"
|
||||
|
||||
public:
|
||||
tst_generators();
|
||||
~tst_generators();
|
||||
|
||||
void types(Nut::SqlGeneratorBase *g);
|
||||
|
||||
private slots:
|
||||
void test_sqlite();
|
||||
void test_sqlserver();
|
||||
void test_psql();
|
||||
void test_mysql();
|
||||
|
||||
};
|
||||
|
||||
tst_generators::tst_generators()
|
||||
GeneratorsTest::GeneratorsTest(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
tst_generators::~tst_generators()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void tst_generators::types(Nut::SqlGeneratorBase *g)
|
||||
void GeneratorsTest::types(Nut::SqlGeneratorBase *g)
|
||||
{
|
||||
QList<QMetaType::Type> types;
|
||||
types
|
||||
<< QMetaType::Bool
|
||||
<< QMetaType::Int
|
||||
<< QMetaType::UInt
|
||||
<< QMetaType::Double
|
||||
<< QMetaType::QChar
|
||||
<< QMetaType::QString
|
||||
<< QMetaType::QByteArray
|
||||
<< QMetaType::Long
|
||||
<< QMetaType::LongLong
|
||||
<< QMetaType::Short
|
||||
<< QMetaType::Char
|
||||
<< QMetaType::ULong
|
||||
<< QMetaType::ULongLong
|
||||
<< QMetaType::UShort
|
||||
<< QMetaType::SChar
|
||||
<< QMetaType::UChar
|
||||
<< QMetaType::Float
|
||||
<< QMetaType::QDate
|
||||
// << QMetaType::QSize
|
||||
<< QMetaType::QTime
|
||||
// << QMetaType::QPolygon
|
||||
// << QMetaType::QPolygonF
|
||||
// << QMetaType::QColor
|
||||
// << QMetaType::QSizeF
|
||||
// << QMetaType::QRectF
|
||||
// << QMetaType::QLine
|
||||
// << QMetaType::QStringList
|
||||
// << QMetaType::QLineF
|
||||
// << QMetaType::QRect
|
||||
// << QMetaType::QPoint
|
||||
<< QMetaType::QUrl
|
||||
<< QMetaType::QDateTime
|
||||
// << QMetaType::QPointF
|
||||
// << QMetaType::QRegion
|
||||
// << QMetaType::QBitArray
|
||||
// << QMetaType::QImage
|
||||
// << QMetaType::QPixmap
|
||||
// << QMetaType::QLocale
|
||||
// << QMetaType::QMatrix
|
||||
// << QMetaType::QMatrix4x4
|
||||
// << QMetaType::QVector2D
|
||||
// << QMetaType::QVector3D
|
||||
// << QMetaType::QVector4D
|
||||
<< QMetaType::QJsonValue
|
||||
<< QMetaType::QJsonObject
|
||||
<< QMetaType::QJsonArray
|
||||
<< QMetaType::QJsonDocument
|
||||
<< QMetaType::QUuid
|
||||
// << QMetaType::QByteArrayList
|
||||
;
|
||||
<< QMetaType::Bool
|
||||
|
||||
<< QMetaType::Char
|
||||
<< QMetaType::SChar
|
||||
<< QMetaType::UChar
|
||||
<< QMetaType::QChar
|
||||
|
||||
<< QMetaType::Short
|
||||
<< QMetaType::UShort
|
||||
<< QMetaType::Int
|
||||
<< QMetaType::UInt
|
||||
<< QMetaType::Long
|
||||
<< QMetaType::LongLong
|
||||
<< QMetaType::ULong
|
||||
<< QMetaType::ULongLong
|
||||
|
||||
<< QMetaType::Double
|
||||
<< QMetaType::Float
|
||||
|
||||
<< QMetaType::QString
|
||||
<< QMetaType::QStringList
|
||||
|
||||
<< QMetaType::QBitArray
|
||||
<< QMetaType::QByteArray
|
||||
|
||||
<< QMetaType::QDate
|
||||
<< QMetaType::QTime
|
||||
<< QMetaType::QDateTime
|
||||
|
||||
<< QMetaType::QUrl
|
||||
<< QMetaType::QColor
|
||||
|
||||
<< QMetaType::QPoint
|
||||
<< QMetaType::QPointF
|
||||
<< QMetaType::QPolygon
|
||||
<< QMetaType::QPolygonF
|
||||
<< QMetaType::QSize
|
||||
<< QMetaType::QSizeF
|
||||
<< QMetaType::QRect
|
||||
<< QMetaType::QRectF
|
||||
<< QMetaType::QLine
|
||||
<< QMetaType::QLineF
|
||||
|
||||
// << QMetaType::QRegion
|
||||
// << QMetaType::QImage
|
||||
// << QMetaType::QPixmap
|
||||
// << QMetaType::QLocale
|
||||
// << QMetaType::QMatrix
|
||||
// << QMetaType::QMatrix4x4
|
||||
// << QMetaType::QVector2D
|
||||
// << QMetaType::QVector3D
|
||||
// << QMetaType::QVector4D
|
||||
<< QMetaType::QJsonValue
|
||||
<< QMetaType::QJsonObject
|
||||
<< QMetaType::QJsonArray
|
||||
<< QMetaType::QJsonDocument
|
||||
|
||||
<< QMetaType::QUuid
|
||||
// << QMetaType::QByteArrayList
|
||||
;
|
||||
|
||||
Nut::FieldModel m;
|
||||
foreach (QMetaType::Type t, types) {
|
||||
m.type = t;
|
||||
QString fn = g->fieldType(&m);
|
||||
|
||||
if (fn.isEmpty())
|
||||
qDebug() << "No rule for" << t << "(" << QMetaType::typeName(t) << ")";
|
||||
Q_ASSERT(!fn.isEmpty());
|
||||
}
|
||||
// for (int i = 0; i < en.keyCount(); i++)
|
||||
// qDebug() << en.value(i);
|
||||
}
|
||||
|
||||
void GeneratorsTest::test_sqlite()
|
||||
{
|
||||
auto g = new Nut::SqliteGenerator;
|
||||
types(g);
|
||||
g->deleteLater();
|
||||
}
|
||||
|
||||
QTEST_APPLESS_MAIN(tst_generators)
|
||||
void GeneratorsTest::test_sqlserver()
|
||||
{
|
||||
auto g = new Nut::SqlServerGenerator;
|
||||
types(g);
|
||||
g->deleteLater();
|
||||
}
|
||||
|
||||
//#include "tst_tst_generators.moc"
|
||||
void GeneratorsTest::test_psql()
|
||||
{
|
||||
auto g = new Nut::PostgreSqlGenerator;
|
||||
types(g);
|
||||
g->deleteLater();
|
||||
}
|
||||
|
||||
void GeneratorsTest::test_mysql()
|
||||
{
|
||||
auto g = new Nut::MySqlGenerator;
|
||||
types(g);
|
||||
g->deleteLater();
|
||||
}
|
||||
|
||||
QTEST_MAIN(GeneratorsTest)
|
||||
|
||||
//#include "tst_GeneratorsTest.moc"
|
||||
|
|
|
|||
|
|
@ -0,0 +1,27 @@
|
|||
#ifndef TST_GENERATORS_H
|
||||
#define TST_GENERATORS_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
namespace Nut {
|
||||
class SqlGeneratorBase;
|
||||
}
|
||||
|
||||
class GeneratorsTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit GeneratorsTest(QObject *parent = nullptr);
|
||||
|
||||
void types(Nut::SqlGeneratorBase *g);
|
||||
|
||||
private slots:
|
||||
void test_sqlite();
|
||||
void test_psql();
|
||||
void test_sqlserver();
|
||||
void test_mysql();
|
||||
|
||||
};
|
||||
|
||||
#endif // TST_GENERATORS_H
|
||||
|
|
@ -12,3 +12,6 @@ IMPORTPATH += $$OUT_PWD/../src/imports
|
|||
|
||||
SOURCES += \
|
||||
tst_generators.cpp
|
||||
|
||||
HEADERS += \
|
||||
tst_generators.h
|
||||
|
|
|
|||
Loading…
Reference in New Issue