subdirs
This commit is contained in:
parent
afcfa39ada
commit
f5c10e8759
55
nut.pro
55
nut.pro
|
|
@ -1,53 +1,6 @@
|
||||||
QT += sql
|
TEMPLATE = subdirs
|
||||||
QT -= gui
|
|
||||||
|
|
||||||
TARGET = nut
|
SUBDIRS += \
|
||||||
TEMPLATE = lib
|
src \
|
||||||
CONFIG += c++11
|
test
|
||||||
|
|
||||||
DEFINES += QT_DEPRECATED_WARNINGS
|
|
||||||
|
|
||||||
HEADERS += \
|
|
||||||
$$PWD/src/generators/sqlgeneratorbase_p.h \
|
|
||||||
$$PWD/src/generators/postgresqlgenerator.h \
|
|
||||||
$$PWD/src/generators/mysqlgenerator.h \
|
|
||||||
$$PWD/src/generators/sqlitegenerator.h \
|
|
||||||
$$PWD/src/generators/sqlservergenerator.h \
|
|
||||||
$$PWD/src/types/dbgeography.h \
|
|
||||||
$$PWD/src/tableset.h \
|
|
||||||
$$PWD/src/defines_p.h \
|
|
||||||
$$PWD/src/defines.h \
|
|
||||||
$$PWD/src/query.h \
|
|
||||||
$$PWD/src/databasemodel.h \
|
|
||||||
$$PWD/src/changelogtable.h \
|
|
||||||
$$PWD/src/tablesetbase_p.h \
|
|
||||||
$$PWD/src/querybase_p.h \
|
|
||||||
$$PWD/src/tablemodel.h \
|
|
||||||
$$PWD/src/query_p.h \
|
|
||||||
$$PWD/src/table.h \
|
|
||||||
$$PWD/src/database.h \
|
|
||||||
$$PWD/src/database_p.h \
|
|
||||||
$$PWD/src/serializableobject.h \
|
|
||||||
$$PWD/src/sqlmodel.h \
|
|
||||||
$$PWD/src/sqlmodel_p.h \
|
|
||||||
$$PWD/src/phrase.h
|
|
||||||
|
|
||||||
SOURCES += \
|
|
||||||
$$PWD/src/generators/sqlgeneratorbase.cpp \
|
|
||||||
$$PWD/src/generators/postgresqlgenerator.cpp \
|
|
||||||
$$PWD/src/generators/mysqlgenerator.cpp \
|
|
||||||
$$PWD/src/generators/sqlitegenerator.cpp \
|
|
||||||
$$PWD/src/generators/sqlservergenerator.cpp \
|
|
||||||
$$PWD/src/types/dbgeography.cpp \
|
|
||||||
$$PWD/src/tableset.cpp \
|
|
||||||
$$PWD/src/query.cpp \
|
|
||||||
$$PWD/src/databasemodel.cpp \
|
|
||||||
$$PWD/src/tablesetbase.cpp \
|
|
||||||
$$PWD/src/changelogtable.cpp \
|
|
||||||
$$PWD/src/querybase.cpp \
|
|
||||||
$$PWD/src/tablemodel.cpp \
|
|
||||||
$$PWD/src/table.cpp \
|
|
||||||
$$PWD/src/database.cpp \
|
|
||||||
$$PWD/src/serializableobject.cpp \
|
|
||||||
$$PWD/src/sqlmodel.cpp \
|
|
||||||
$$PWD/src/phrase.cpp
|
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,17 @@ bool DatabasePrivate::updateDatabase()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (TableModel *tm, current) {
|
||||||
|
foreach (FieldModel *fm, tm->fields()) {
|
||||||
|
if (sqlGenertor->fieldType(fm).isEmpty()) {
|
||||||
|
qWarning("The type (%s) is not supported for field %s::%s",
|
||||||
|
QMetaType::typeName(fm->type),
|
||||||
|
qPrintable(tm->className()),
|
||||||
|
qPrintable(fm->name));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (!last.count())
|
if (!last.count())
|
||||||
qDebug("Databse is new");
|
qDebug("Databse is new");
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@
|
||||||
#include "../table.h"
|
#include "../table.h"
|
||||||
#include "../databasemodel.h"
|
#include "../databasemodel.h"
|
||||||
#include "../tablemodel.h"
|
#include "../tablemodel.h"
|
||||||
|
#include "stringserializer.h"
|
||||||
|
|
||||||
NUT_BEGIN_NAMESPACE
|
NUT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|
@ -56,6 +57,8 @@ SqlGeneratorBase::SqlGeneratorBase(Database *parent)
|
||||||
{
|
{
|
||||||
if (parent)
|
if (parent)
|
||||||
_database = parent;
|
_database = parent;
|
||||||
|
|
||||||
|
_serializer = new StringSerializer;
|
||||||
}
|
}
|
||||||
|
|
||||||
SqlGeneratorBase::~SqlGeneratorBase()
|
SqlGeneratorBase::~SqlGeneratorBase()
|
||||||
|
|
@ -792,6 +795,13 @@ void SqlGeneratorBase::removeTableNames(QString &command)
|
||||||
|
|
||||||
QString SqlGeneratorBase::escapeValue(const QVariant &v) const
|
QString SqlGeneratorBase::escapeValue(const QVariant &v) const
|
||||||
{
|
{
|
||||||
|
QString serialized = _serializer->toString(v);
|
||||||
|
if (serialized.isEmpty()) {
|
||||||
|
qWarning("No field escape rule for: %s", v.typeName());
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
return "'" + serialized + "'";
|
||||||
|
|
||||||
switch (v.type()) {
|
switch (v.type()) {
|
||||||
case QVariant::Bool:
|
case QVariant::Bool:
|
||||||
return v.toBool() ? "1" : "0";
|
return v.toBool() ? "1" : "0";
|
||||||
|
|
@ -823,15 +833,11 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v) const
|
||||||
case QVariant::List:
|
case QVariant::List:
|
||||||
return "('" + v.toStringList().join("', '") + "')";
|
return "('" + v.toStringList().join("', '") + "')";
|
||||||
|
|
||||||
case QVariant::Point: {
|
case QVariant::Point:
|
||||||
QPoint pt = v.toPoint();
|
case QVariant::PointF:
|
||||||
return QString("POINT(%1 %2)").arg(pt.x()).arg(pt.y());
|
case QVariant::Polygon:
|
||||||
}
|
case QVariant::PolygonF:
|
||||||
|
return "'" + _serializer->toString(v) + "'";
|
||||||
case QVariant::PointF: {
|
|
||||||
QPointF pt = v.toPointF();
|
|
||||||
return QString("POINT(%1 %2)").arg(pt.x()).arg(pt.y());
|
|
||||||
}
|
|
||||||
|
|
||||||
case QVariant::Invalid:
|
case QVariant::Invalid:
|
||||||
qFatal("Invalud field value");
|
qFatal("Invalud field value");
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,8 @@
|
||||||
#include "../phrase.h"
|
#include "../phrase.h"
|
||||||
//#include "../wherephrase.h"
|
//#include "../wherephrase.h"
|
||||||
|
|
||||||
|
class StringSerializer;
|
||||||
|
|
||||||
NUT_BEGIN_NAMESPACE
|
NUT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class Table;
|
class Table;
|
||||||
|
|
@ -40,6 +42,8 @@ class SqlGeneratorBase : public QObject
|
||||||
// Q_OBJECT
|
// Q_OBJECT
|
||||||
|
|
||||||
Database *_database;
|
Database *_database;
|
||||||
|
StringSerializer *_serializer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
//TODO: remove this enum
|
//TODO: remove this enum
|
||||||
enum CommandType{
|
enum CommandType{
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,10 @@ QString SqliteGenerator::fieldType(FieldModel *field)
|
||||||
case QMetaType::QJsonValue:
|
case QMetaType::QJsonValue:
|
||||||
case QMetaType::QJsonObject:
|
case QMetaType::QJsonObject:
|
||||||
case QMetaType::QJsonDocument:
|
case QMetaType::QJsonDocument:
|
||||||
|
case QMetaType::QPoint:
|
||||||
|
case QMetaType::QPointF:
|
||||||
|
case QMetaType::QPolygon:
|
||||||
|
case QMetaType::QPolygonF:
|
||||||
case QMetaType::QUuid: return "text";
|
case QMetaType::QUuid: return "text";
|
||||||
|
|
||||||
// if (field->isAutoIncrement)
|
// if (field->isAutoIncrement)
|
||||||
|
|
@ -78,8 +82,8 @@ QString SqliteGenerator::fieldType(FieldModel *field)
|
||||||
else
|
else
|
||||||
return "TEXT";
|
return "TEXT";
|
||||||
default:
|
default:
|
||||||
qWarning("The type (%s) does not supported",
|
// qWarning("The type (%s) does not supported",
|
||||||
QMetaType::typeName(field->type));
|
// QMetaType::typeName(field->type));
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
QT += sql
|
||||||
|
QT -= gui
|
||||||
|
|
||||||
|
TARGET = nut
|
||||||
|
TEMPLATE = lib
|
||||||
|
CONFIG += c++11
|
||||||
|
|
||||||
|
DEFINES += QT_DEPRECATED_WARNINGS
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
$$PWD/generators/sqlgeneratorbase_p.h \
|
||||||
|
$$PWD/generators/postgresqlgenerator.h \
|
||||||
|
$$PWD/generators/mysqlgenerator.h \
|
||||||
|
$$PWD/generators/sqlitegenerator.h \
|
||||||
|
$$PWD/generators/sqlservergenerator.h \
|
||||||
|
$$PWD/types/dbgeography.h \
|
||||||
|
$$PWD/tableset.h \
|
||||||
|
$$PWD/defines_p.h \
|
||||||
|
$$PWD/defines.h \
|
||||||
|
$$PWD/query.h \
|
||||||
|
$$PWD/databasemodel.h \
|
||||||
|
$$PWD/changelogtable.h \
|
||||||
|
$$PWD/tablesetbase_p.h \
|
||||||
|
$$PWD/querybase_p.h \
|
||||||
|
$$PWD/tablemodel.h \
|
||||||
|
$$PWD/query_p.h \
|
||||||
|
$$PWD/table.h \
|
||||||
|
$$PWD/database.h \
|
||||||
|
$$PWD/database_p.h \
|
||||||
|
$$PWD/serializableobject.h \
|
||||||
|
$$PWD/sqlmodel.h \
|
||||||
|
$$PWD/sqlmodel_p.h \
|
||||||
|
$$PWD/phrase.h
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
$$PWD/generators/sqlgeneratorbase.cpp \
|
||||||
|
$$PWD/generators/postgresqlgenerator.cpp \
|
||||||
|
$$PWD/generators/mysqlgenerator.cpp \
|
||||||
|
$$PWD/generators/sqlitegenerator.cpp \
|
||||||
|
$$PWD/generators/sqlservergenerator.cpp \
|
||||||
|
$$PWD/types/dbgeography.cpp \
|
||||||
|
$$PWD/tableset.cpp \
|
||||||
|
$$PWD/query.cpp \
|
||||||
|
$$PWD/databasemodel.cpp \
|
||||||
|
$$PWD/tablesetbase.cpp \
|
||||||
|
$$PWD/changelogtable.cpp \
|
||||||
|
$$PWD/querybase.cpp \
|
||||||
|
$$PWD/tablemodel.cpp \
|
||||||
|
$$PWD/table.cpp \
|
||||||
|
$$PWD/database.cpp \
|
||||||
|
$$PWD/serializableobject.cpp \
|
||||||
|
$$PWD/sqlmodel.cpp \
|
||||||
|
$$PWD/phrase.cpp
|
||||||
|
|
||||||
|
include($$PWD/../3rdparty/serializer/src/src.pri)
|
||||||
|
|
@ -16,8 +16,8 @@
|
||||||
#define DRIVER "QSQLITE"
|
#define DRIVER "QSQLITE"
|
||||||
#define HOST "127.0.0.1"
|
#define HOST "127.0.0.1"
|
||||||
#define DATABASE "nutdb1"
|
#define DATABASE "nutdb1"
|
||||||
//#define USERNAME "root"
|
#define USERNAME "root"
|
||||||
//#define PASSWORD "onlyonlyi"
|
#define PASSWORD "onlyonlyi"
|
||||||
|
|
||||||
//#define DRIVER "QODBC"
|
//#define DRIVER "QODBC"
|
||||||
//#define HOST "127.0.0.1"
|
//#define HOST "127.0.0.1"
|
||||||
|
|
|
||||||
|
|
@ -11,5 +11,5 @@ Post::Post(QObject *parent) : Table(parent),
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NUT_IMPLEMENT_CHILD_TABLE(Post, Comment, comments)
|
//NUT_IMPLEMENT_CHILD_TABLE(Post, Comment, comments)
|
||||||
NUT_IMPLEMENT_CHILD_TABLE(Post, Score, scores)
|
//NUT_IMPLEMENT_CHILD_TABLE(Post, Score, scores)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
TEMPLATE = subdirs
|
||||||
|
|
||||||
|
SUBDIRS += \
|
||||||
|
tst_basic \
|
||||||
|
tst_benckmark \
|
||||||
|
tst_commands \
|
||||||
|
tst_datatypes \
|
||||||
|
#tst_join \
|
||||||
|
tst_phrases \
|
||||||
|
tst_quuid
|
||||||
|
|
||||||
|
|
@ -106,6 +106,23 @@ void MainTest::types()
|
||||||
// qDebug() << en.value(i);
|
// qDebug() << en.value(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainTest::insert()
|
||||||
|
{
|
||||||
|
SampleTable t;
|
||||||
|
t.setFint8(1);
|
||||||
|
t.setFreal(1.2);
|
||||||
|
t.setFfloat(4.5f);
|
||||||
|
t.setFint16(16);
|
||||||
|
t.setFint32(65000);
|
||||||
|
t.setFint64(3255465232);
|
||||||
|
t.setFuint8(2);
|
||||||
|
t.setPoint(QPoint(1, 2));
|
||||||
|
t.setPolygon(QPolygon() << QPoint(1, 2) << QPoint(3, 4) << QPoint(5, 6));
|
||||||
|
|
||||||
|
db.sampleTables()->append(&t);
|
||||||
|
db.saveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
void MainTest::cleanupTestCase()
|
void MainTest::cleanupTestCase()
|
||||||
{
|
{
|
||||||
db.close();
|
db.close();
|
||||||
|
|
@ -20,7 +20,7 @@ private slots:
|
||||||
void initTestCase();
|
void initTestCase();
|
||||||
|
|
||||||
void types();
|
void types();
|
||||||
|
void insert();
|
||||||
void cleanupTestCase();
|
void cleanupTestCase();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -26,7 +26,7 @@ class SampleTable : public Nut::Table
|
||||||
|
|
||||||
NUT_DECLARE_FIELD(qreal, freal, freal, setFreal)
|
NUT_DECLARE_FIELD(qreal, freal, freal, setFreal)
|
||||||
NUT_DECLARE_FIELD(float, ffloat, ffloat, setFfloat)
|
NUT_DECLARE_FIELD(float, ffloat, ffloat, setFfloat)
|
||||||
NUT_DECLARE_FIELD(long double, fldouble, fldouble, setFldouble)
|
// NUT_DECLARE_FIELD(long double, fldouble, fldouble, setFldouble)
|
||||||
NUT_DECLARE_FIELD(QString, string, string, setString)
|
NUT_DECLARE_FIELD(QString, string, string, setString)
|
||||||
NUT_DECLARE_FIELD(QPoint, point, point, setPoint)
|
NUT_DECLARE_FIELD(QPoint, point, point, setPoint)
|
||||||
NUT_DECLARE_FIELD(QPolygon, polygon, polygon, setPolygon)
|
NUT_DECLARE_FIELD(QPolygon, polygon, polygon, setPolygon)
|
||||||
Loading…
Reference in New Issue