diff --git a/3rdparty/serializer b/3rdparty/serializer index 7f4a9a2..1d3495b 160000 --- a/3rdparty/serializer +++ b/3rdparty/serializer @@ -1 +1 @@ -Subproject commit 7f4a9a2a5f3eec799e4253259df4b87a98a1b9ee +Subproject commit 1d3495bed909392cdf128e8ef6f8b3986b2c09b5 diff --git a/README.md b/README.md index 315ab32..488da1e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ + + # Nut ## Build result @@ -17,6 +19,52 @@ - Automatically create and update database - IDE auto complete support, No hard-code nedded - Table join detect + - Supported types: + +| Type | Sqlite | MySql | Postgresql| Ms Sql server | +|--------|--------|--------|--------|--------| +| QBitArray | BLOB | VARBINARY | BYTEA | VARBINARY (MAX) | +| QByteArray | BLOB | BLOB | BYTEA | VARBINARY (MAX) | +| QChar | NCHAR(1) | CHAR(1) | CHAR(1) | CHAR(1) | +| QColor | TEXT | TEXT | TEXT | TEXT | +| QDate | DATE | DATE | DATE | DATE | +| QDateTime | DATETIME | DATETIME | TIMESTAMP | DATETIME | +| QJsonArray | TEXT | TEXT | JSON | TEXT | +| QJsonDocument | TEXT | TEXT | JSON | TEXT | +| QJsonObject | TEXT | TEXT | JSON | TEXT | +| QJsonValue | TEXT | TEXT | JSON | TEXT | +| QLine | TEXT | TEXT | LINE | TEXT | +| QLineF | TEXT | TEXT | LINE | TEXT | +| QPoint | TEXT | POINT | POINT | GEOMETRY | +| QPointF | TEXT | POINT | POINT | GEOMETRY | +| QPolygon | TEXT | POLYGON | POLYGON | TEXT | +| QPolygonF | TEXT | POLYGON | POLYGON | TEXT | +| QRect | TEXT | TEXT | BOX | TEXT | +| QRectF | TEXT | TEXT | BOX | TEXT | +| QSize | TEXT | TEXT | TEXT | TEXT | +| QSizeF | TEXT | TEXT | TEXT | TEXT | +| QString | TEXT | TEXT | TEXT | NVARCHAR(MAX) | +| QStringList | TEXT[^*] | TEXT | TEXT[] | TEXT | +| QTime | TIME | TIME | TIME | TIME | +| QUrl | TEXT | TEXT | TEXT | TEXT | +| QUuid | TEXT | VARCHAR(64) | UUID | UNIQUEIDENTIFIER | +| bool | BOOLEAN | BOOLEAN | BOOLEAN | BIT | +| char | TINYINT | CHAR(1) | CHAR(1) | CHAR(1) | +| double | DOUBLE | REAL | REAL | REAL | +| float | FLOAT | FLOAT | FLOAT | FLOAT(24) | +| int | INT | INT | INTEGER | INT | +| long | MEDIUMINT | BIGINT | BIGINT | BIGINT | +| qlonglong | BIGINT | BIGINT | BIGINT | BIGINT | +| qulonglong | BIGINT UNSIGNED | BIGINT | BIGINT | BIGINT | +| short | SMALLINT | SMALLINT | SMALLINT | SMALLINT | +| signed char | TINYINT | TINYINT | SMALLINT | TINYINT | +| uchar | TINYINT UNSIGNED | TINYINT | SMALLINT | TINYINT | +| uint | INT UNSIGNED | INT | INTEGER | INT | +| ulong | MEDIUMINT UNSIGNED | BIGINT | BIGINT | BIGINT | +| ushort | SMALLINT UNSIGNED | SMALLINT | SMALLINT | SMALLINT | + +[^*]: Using internal store/restore serialization + ## Sample Codes ### Read data from database: diff --git a/test/tst_generators/tst_generators.cpp b/test/tst_generators/tst_generators.cpp index ea1a16a..285cd05 100644 --- a/test/tst_generators/tst_generators.cpp +++ b/test/tst_generators/tst_generators.cpp @@ -19,7 +19,7 @@ GeneratorsTest::GeneratorsTest(QObject *parent) : QObject(parent) } -void GeneratorsTest::types(Nut::SqlGeneratorBase *g) +void GeneratorsTest::types(Nut::SqlGeneratorBase *g, QString name) { QList types; types @@ -89,6 +89,12 @@ void GeneratorsTest::types(Nut::SqlGeneratorBase *g) m.type = t; QString fn = g->fieldType(&m); + QString tn = QString(QMetaType::typeName(t)); + if (!table.contains(tn)) + table.insert(tn, row()); + + table[tn].set(name, fn); + if (fn.isEmpty()) qDebug() << "No rule for" << t << "(" << QMetaType::typeName(t) << ")"; Q_ASSERT(!fn.isEmpty()); @@ -98,31 +104,44 @@ void GeneratorsTest::types(Nut::SqlGeneratorBase *g) void GeneratorsTest::test_sqlite() { auto g = new Nut::SqliteGenerator; - types(g); + types(g, "sqlite"); g->deleteLater(); } void GeneratorsTest::test_sqlserver() { auto g = new Nut::SqlServerGenerator; - types(g); + types(g, "mssql"); g->deleteLater(); } void GeneratorsTest::test_psql() { auto g = new Nut::PostgreSqlGenerator; - types(g); + types(g, "psql"); g->deleteLater(); } void GeneratorsTest::test_mysql() { auto g = new Nut::MySqlGenerator; - types(g); + types(g, "mysql"); g->deleteLater(); } +void GeneratorsTest::cleanupTestCase() +{ + QMap::const_iterator i; + QString p = "\n| Type | Sqlite | MySql | Postgresql| Ms Sql server |" + "\n|--------|--------|--------|--------|--------|"; + for (i = table.constBegin(); i != table.constEnd(); ++i) { + p.append(QString("\n|%1|%2|%3|%4|%5|") + .arg(i.key(), i.value().sqlite, i.value().mysql, + i.value().psql, i.value().mssql)); + } + qDebug() << p.toStdString().c_str(); +} + QTEST_MAIN(GeneratorsTest) //#include "tst_GeneratorsTest.moc" diff --git a/test/tst_generators/tst_generators.h b/test/tst_generators/tst_generators.h index 6c5ea34..3f65973 100644 --- a/test/tst_generators/tst_generators.h +++ b/test/tst_generators/tst_generators.h @@ -1,6 +1,7 @@ #ifndef TST_GENERATORS_H #define TST_GENERATORS_H +#include #include namespace Nut { @@ -11,10 +12,28 @@ class GeneratorsTest : public QObject { Q_OBJECT + struct row { + QString sqlite; + QString psql; + QString mysql; + QString mssql; + void set(QString name, QString value) { + if (name == "sqlite") + sqlite = value.toUpper(); + else if (name == "psql") + psql = value.toUpper(); + else if (name == "mysql") + mysql = value.toUpper(); + else if (name == "mssql") + mssql = value.toUpper(); + } + }; + QMap table; + public: explicit GeneratorsTest(QObject *parent = nullptr); - void types(Nut::SqlGeneratorBase *g); + void types(Nut::SqlGeneratorBase *g, QString name); private slots: void test_sqlite(); @@ -22,6 +41,8 @@ private slots: void test_sqlserver(); void test_mysql(); + void cleanupTestCase(); + }; #endif // TST_GENERATORS_H