From 4e08afb8a6237239385879f698a71611af7e2b88 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Sun, 20 Jan 2019 20:25:32 +0330 Subject: [PATCH] data types test 2 --- src/generators/sqlitegenerator.cpp | 13 +++++- src/generators/sqlitegenerator.h | 2 +- src/tablemodel.cpp | 7 ++-- src/tablemodel.h | 3 +- test/datatypes/maintest.cpp | 64 +++++++++++++++++++++++++++++- test/datatypes/maintest.h | 1 + 6 files changed, 81 insertions(+), 9 deletions(-) diff --git a/src/generators/sqlitegenerator.cpp b/src/generators/sqlitegenerator.cpp index 2e6b529..614a83b 100644 --- a/src/generators/sqlitegenerator.cpp +++ b/src/generators/sqlitegenerator.cpp @@ -34,7 +34,7 @@ QString SqliteGenerator::fieldType(FieldModel *field) QString ret = field->name + " "; QString dbType; - switch (static_cast(field->type)) { + switch (field->type) { case QMetaType::Bool: return "BOOLEAN"; case QMetaType::QByteArray: return "BLOB"; case QMetaType::QDate: return "DATE"; @@ -55,17 +55,26 @@ QString SqliteGenerator::fieldType(FieldModel *field) case QMetaType::LongLong: return "BIGINT"; case QMetaType::ULongLong: return "BIGINT UNSIGNED"; + case QMetaType::QChar: return "NCHAR(1)"; + + case QMetaType::QUrl: + case QMetaType::QJsonArray: + case QMetaType::QJsonValue: + case QMetaType::QJsonObject: + case QMetaType::QJsonDocument: case QMetaType::QUuid: return "text"; // if (field->isAutoIncrement) // dbType.append(" PRIMARY KEY AUTOINCREMENT"); + case QMetaType::QString: if(field->length) return QString("VARCHAR(%1)").arg(field->length); else return "TEXT"; default: - qDebug() << "The type (" << field->type << ") does not supported"; + qWarning("The type (%s) does not supported", + QMetaType::typeName(field->type)); return QString(); } } diff --git a/src/generators/sqlitegenerator.h b/src/generators/sqlitegenerator.h index 5969cde..36b5811 100644 --- a/src/generators/sqlitegenerator.h +++ b/src/generators/sqlitegenerator.h @@ -29,7 +29,7 @@ NUT_BEGIN_NAMESPACE class SqliteGenerator : public SqlGeneratorBase { public: - explicit SqliteGenerator(Database *parent = 0); + explicit SqliteGenerator(Database *parent = nullptr); QString fieldType(FieldModel *field); diff --git a/src/tablemodel.cpp b/src/tablemodel.cpp index 81e891c..737c036 100644 --- a/src/tablemodel.cpp +++ b/src/tablemodel.cpp @@ -219,7 +219,7 @@ TableModel::TableModel(int typeId, QString tableName) f = fieldObj; if(!fieldObj) continue; - fieldObj->type = fieldProperty.type(); + fieldObj->type = static_cast(fieldProperty.type()); fieldObj->typeName = QString(fieldProperty.typeName()); } @@ -303,7 +303,8 @@ TableModel::TableModel(QJsonObject json, QString tableName) QJsonObject fieldObject = fields.value(key).toObject(); FieldModel *f = new FieldModel; f->name = fieldObject.value(__NAME).toString(); - f->type = QVariant::nameToType(fieldObject.value(__TYPE).toString().toLatin1().data()); + f->type = static_cast(QMetaType::type(fieldObject.value(__TYPE).toString().toLatin1().data())); + f->typeName = QMetaType::typeName(f->type); if(fieldObject.contains(__nut_NOT_NULL)) f->notNull = fieldObject.value(__nut_NOT_NULL).toBool(); @@ -414,7 +415,7 @@ QString TableModel::primaryKey() const FieldModel::FieldModel(const QJsonObject &json) { name = json.value(__NAME).toString(); - type = static_cast(json.value(__TYPE).toInt()); + type = static_cast(json.value(__TYPE).toInt()); length = json.value(__nut_LEN).toInt(); notNull = json.value(__nut_NOT_NULL).toBool(); isAutoIncrement = json.value(__nut_AUTO_INCREMENT).toBool(); diff --git a/src/tablemodel.h b/src/tablemodel.h index 084f5de..429e72f 100644 --- a/src/tablemodel.h +++ b/src/tablemodel.h @@ -40,8 +40,7 @@ struct FieldModel{ explicit FieldModel(const QJsonObject &json); QString name; - //TODO: QMetaType::Type?? - QVariant::Type type; + QMetaType::Type type; QString typeName; int length; QString defaultValue; diff --git a/test/datatypes/maintest.cpp b/test/datatypes/maintest.cpp index 6fa792a..e3d1002 100644 --- a/test/datatypes/maintest.cpp +++ b/test/datatypes/maintest.cpp @@ -13,6 +13,9 @@ #include "sampletable.h" +#include "generators/sqlitegenerator.h" +#include "generators/sqlservergenerator.h" + #define PRINT(x) qDebug() << #x "=" << x; #define TIC() QElapsedTimer timer; timer.start() #define TOC() qDebug() << QString("Elapsed time: %1ms for %2") \ @@ -43,7 +46,66 @@ void MainTest::initTestCase() void MainTest::types() { -// QMetaEnum en = QMetaEnum::fromType(); + QList 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 + ; + + Nut::SqlServerGenerator g; + Nut::FieldModel m; + foreach (QMetaType::Type t, types) { + m.type = t; + QString fn = g.fieldType(&m); + Q_ASSERT(!fn.isEmpty()); + } // for (int i = 0; i < en.keyCount(); i++) // qDebug() << en.value(i); } diff --git a/test/datatypes/maintest.h b/test/datatypes/maintest.h index 3b0925e..0c2d1d4 100644 --- a/test/datatypes/maintest.h +++ b/test/datatypes/maintest.h @@ -10,6 +10,7 @@ class MainTest : public QObject Q_OBJECT DB db; +// void test_generator(); public: explicit MainTest(QObject *parent = nullptr);