readme table
This commit is contained in:
parent
49f006e2d5
commit
0f32f7af9a
|
|
@ -1 +1 @@
|
||||||
Subproject commit 7f4a9a2a5f3eec799e4253259df4b87a98a1b9ee
|
Subproject commit 1d3495bed909392cdf128e8ef6f8b3986b2c09b5
|
||||||
48
README.md
48
README.md
|
|
@ -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:
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue