readme table

This commit is contained in:
Hamed Masafi 2019-02-12 19:33:22 +03:30
parent 49f006e2d5
commit 0f32f7af9a
4 changed files with 95 additions and 7 deletions

2
3rdparty/serializer vendored

@ -1 +1 @@
Subproject commit 7f4a9a2a5f3eec799e4253259df4b87a98a1b9ee Subproject commit 1d3495bed909392cdf128e8ef6f8b3986b2c09b5

View File

@ -1,3 +1,5 @@
# Nut # Nut
## Build result ## Build result
@ -17,6 +19,52 @@
- Automatically create and update database - Automatically create and update database
- IDE auto complete support, No hard-code nedded - IDE auto complete support, No hard-code nedded
- Table join detect - 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 ## Sample Codes
### Read data from database: ### Read data from database:

View File

@ -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<QMetaType::Type> types; QList<QMetaType::Type> types;
types types
@ -89,6 +89,12 @@ void GeneratorsTest::types(Nut::SqlGeneratorBase *g)
m.type = t; m.type = t;
QString fn = g->fieldType(&m); 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()) if (fn.isEmpty())
qDebug() << "No rule for" << t << "(" << QMetaType::typeName(t) << ")"; qDebug() << "No rule for" << t << "(" << QMetaType::typeName(t) << ")";
Q_ASSERT(!fn.isEmpty()); Q_ASSERT(!fn.isEmpty());
@ -98,31 +104,44 @@ void GeneratorsTest::types(Nut::SqlGeneratorBase *g)
void GeneratorsTest::test_sqlite() void GeneratorsTest::test_sqlite()
{ {
auto g = new Nut::SqliteGenerator; auto g = new Nut::SqliteGenerator;
types(g); types(g, "sqlite");
g->deleteLater(); g->deleteLater();
} }
void GeneratorsTest::test_sqlserver() void GeneratorsTest::test_sqlserver()
{ {
auto g = new Nut::SqlServerGenerator; auto g = new Nut::SqlServerGenerator;
types(g); types(g, "mssql");
g->deleteLater(); g->deleteLater();
} }
void GeneratorsTest::test_psql() void GeneratorsTest::test_psql()
{ {
auto g = new Nut::PostgreSqlGenerator; auto g = new Nut::PostgreSqlGenerator;
types(g); types(g, "psql");
g->deleteLater(); g->deleteLater();
} }
void GeneratorsTest::test_mysql() void GeneratorsTest::test_mysql()
{ {
auto g = new Nut::MySqlGenerator; auto g = new Nut::MySqlGenerator;
types(g); types(g, "mysql");
g->deleteLater(); g->deleteLater();
} }
void GeneratorsTest::cleanupTestCase()
{
QMap<QString, row>::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) QTEST_MAIN(GeneratorsTest)
//#include "tst_GeneratorsTest.moc" //#include "tst_GeneratorsTest.moc"

View File

@ -1,6 +1,7 @@
#ifndef TST_GENERATORS_H #ifndef TST_GENERATORS_H
#define TST_GENERATORS_H #define TST_GENERATORS_H
#include <QMap>
#include <QObject> #include <QObject>
namespace Nut { namespace Nut {
@ -11,10 +12,28 @@ class GeneratorsTest : public QObject
{ {
Q_OBJECT 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<QString, row> table;
public: public:
explicit GeneratorsTest(QObject *parent = nullptr); explicit GeneratorsTest(QObject *parent = nullptr);
void types(Nut::SqlGeneratorBase *g); void types(Nut::SqlGeneratorBase *g, QString name);
private slots: private slots:
void test_sqlite(); void test_sqlite();
@ -22,6 +41,8 @@ private slots:
void test_sqlserver(); void test_sqlserver();
void test_mysql(); void test_mysql();
void cleanupTestCase();
}; };
#endif // TST_GENERATORS_H #endif // TST_GENERATORS_H