some polish

This commit is contained in:
Hamed Masafi 2018-02-26 13:44:36 +03:30
parent cd07c580f6
commit 465aee8998
29 changed files with 139 additions and 87 deletions

View File

@ -38,7 +38,7 @@ class ChangeLogTable : public Table
NUT_DECLARE_FIELD(QString, version, version, setVersion)
public:
ChangeLogTable(QObject *parentTableSet = Q_NULLPTR);
explicit ChangeLogTable(QObject *parentTableSet = Q_NULLPTR);
};
NUT_END_NAMESPACE

View File

@ -52,7 +52,9 @@ NUT_BEGIN_NAMESPACE
qulonglong DatabasePrivate::lastId = 0;
QMap<QString, DatabaseModel> DatabasePrivate::allTableMaps;
DatabasePrivate::DatabasePrivate(Database *parent) : q_ptr(parent), isDatabaseNew(false)
DatabasePrivate::DatabasePrivate(Database *parent) : q_ptr(parent),
port(0), sqlGenertor(0), changeLogs(0),
isDatabaseNew(false)
{
}

View File

@ -43,9 +43,9 @@ class NUT_EXPORT Database : public QObject
Q_DECLARE_PRIVATE(Database)
public:
Database(QObject *parent = 0);
Database(const Database &other);
Database(const QSqlDatabase &other);
explicit Database(QObject *parent = 0);
explicit Database(const Database &other);
explicit Database(const QSqlDatabase &other);
~Database();
bool open();

View File

@ -35,7 +35,7 @@ class DatabasePrivate
Q_DECLARE_PUBLIC(Database)
public:
DatabasePrivate(Database *parent);
explicit DatabasePrivate(Database *parent);
bool open(bool updateDatabase);

View File

@ -57,6 +57,11 @@ DatabaseModel::DatabaseModel(const QJsonObject &json) :
}
}
DatabaseModel::DatabaseModel(DatabaseModel &model)
{
}
TableModel *DatabaseModel::tableByName(QString tableName) const
{
for(int i = 0; i < size(); i++){

View File

@ -43,6 +43,7 @@ public:
DatabaseModel(const QString &name = QString::null);
DatabaseModel(const DatabaseModel &other);
DatabaseModel(const QJsonObject &json);
DatabaseModel(DatabaseModel &model);
TableModel *tableByName(QString tableName) const;
TableModel *tableByClassName(QString className) const;

View File

@ -29,7 +29,7 @@ NUT_BEGIN_NAMESPACE
class MySqlGenerator : public SqlGeneratorBase
{
public:
MySqlGenerator(Database *parent = 0);
explicit MySqlGenerator(Database *parent = 0);
QString fieldType(FieldModel *field);
QString escapeValue(const QVariant &v) const;

View File

@ -29,7 +29,7 @@ NUT_BEGIN_NAMESPACE
class PostgreSqlGenerator : public SqlGeneratorBase
{
public:
PostgreSqlGenerator(Database *parent);
explicit PostgreSqlGenerator(Database *parent);
QString fieldType(FieldModel *field);

View File

@ -959,7 +959,7 @@ QString SqlGeneratorBase::createConditionalPhrase(const PhraseData *d) const
else if (op == PhraseData::AddMonths)
ret = QString("DATEADD(month, %1, %2)")
.arg(d->operand.toString()).arg(createConditionalPhrase(d->left));
else if (op == PhraseData::AddYears)
else if (op == PhraseData::AddDays)
ret = QString("DATEADD(day, %1, %2)")
.arg(d->operand.toString()).arg(createConditionalPhrase(d->left));
else if (op == PhraseData::AddHours)

View File

@ -57,7 +57,7 @@ public:
SignleField
};
SqlGeneratorBase(Database *parent);
explicit SqlGeneratorBase(Database *parent);
virtual ~SqlGeneratorBase();
virtual QString masterDatabaseName(QString databaseName);

View File

@ -29,7 +29,7 @@ NUT_BEGIN_NAMESPACE
class SqliteGenerator : public SqlGeneratorBase
{
public:
SqliteGenerator(Database *parent = 0);
explicit SqliteGenerator(Database *parent = 0);
QString fieldType(FieldModel *field);

View File

@ -126,7 +126,7 @@ QString SqlServerGenerator::escapeValue(const QVariant &v) const
QPoint pt = v.toPoint();
return QString("geography::POINT(%1, %2, 4326)").arg(pt.x()).arg(
pt.y());
} else if (v.type() == QVariant::Point) {
} else if (v.type() == QVariant::PointF) {
QPointF pt = v.toPointF();
return QString("geography::POINT(%1, %2, 4326)").arg(pt.x()).arg(
pt.y());

View File

@ -29,7 +29,7 @@ NUT_BEGIN_NAMESPACE
class SqlServerGenerator : public SqlGeneratorBase
{
public:
SqlServerGenerator(Database *parent = 0);
explicit SqlServerGenerator(Database *parent = 0);
QString masterDatabaseName(QString databaseName);

View File

@ -45,23 +45,20 @@ PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o,
PhraseData::PhraseData(PhraseData *l, PhraseData::Condition o, QVariant r)
: className(0), fieldName(0),
type(WithVariant), operatorCond(o), left(new PhraseData(l)), operand(r), isNot(false)
type(WithVariant), operatorCond(o), left(new PhraseData(l)), right(0), operand(r), isNot(false)
{ }
PhraseData::PhraseData(const PhraseData *other)
{
left = other->left;
right = other->right;
operand = other->operand;
operatorCond = other->operatorCond;
className = other->className;
fieldName = other->fieldName;
type = other->type;
isNot = other->isNot;
if (type != Field) {
qDebug() << "Bug";
}
}
PhraseData::PhraseData(const PhraseData &other) :
left(other.left), right(other.right), operand(other.operand),
operatorCond(other.operatorCond), className(other.className),
fieldName(other.fieldName), type(other.type), isNot(other.isNot)
{ }
PhraseData::PhraseData(const PhraseData *other) :
left(other->left), right(other->right), operand(other->operand),
operatorCond(other->operatorCond), className(other->className),
fieldName(other->fieldName), type(other->type), isNot(other->isNot)
{ }
QString PhraseData::toString() const
{
@ -169,7 +166,7 @@ PhraseList::PhraseList() : isValid(false)
}
PhraseList::PhraseList(const PhraseList &other)
PhraseList::PhraseList(const PhraseList &other) : isValid(true)
{
data = qMove(other.data);
}
@ -211,7 +208,10 @@ PhraseList PhraseList::operator |(PhraseList &other) {
return PhraseList(this, &other);
}
AssignmentPhrase::AssignmentPhrase(AbstractFieldPhrase *l, QVariant r)
AssignmentPhrase::AssignmentPhrase(PhraseData *d) : data(d)
{ }
AssignmentPhrase::AssignmentPhrase(AbstractFieldPhrase *l, const QVariant r)
{
data = new PhraseData(l->data, PhraseData::Equal, r);
// l->data = 0;
@ -223,6 +223,17 @@ AssignmentPhrase::AssignmentPhrase(AbstractFieldPhrase *l, const AssignmentPhras
// l->data = 0;
}
AssignmentPhrase::AssignmentPhrase(AssignmentPhrase *ph, const QVariant &v)
{
data = new PhraseData(ph->data, PhraseData::Equal, v);
}
//AssignmentPhrase::AssignmentPhrase(AssignmentPhrase &other)
//{
// data = other.data;
// other.data = 0;
//}
AssignmentPhrase::~AssignmentPhrase()
{
if (data)
@ -235,10 +246,10 @@ AssignmentPhrase::~AssignmentPhrase()
// qFatal("SS");
//}
//AssignmentPhraseList AssignmentPhrase::operator &(const AssignmentPhrase &other)
//{
// return AssignmentPhraseList(this, &other);
//}
AssignmentPhraseList AssignmentPhrase::operator &(const AssignmentPhrase &other)
{
return AssignmentPhraseList(this, &other);
}
AssignmentPhraseList::AssignmentPhraseList()
{
@ -256,6 +267,12 @@ AssignmentPhraseList::AssignmentPhraseList(AssignmentPhraseList *l, const Assign
data.append(r->data);
}
AssignmentPhraseList::AssignmentPhraseList(AssignmentPhrase *l, const AssignmentPhrase *r)
{
data.append(l->data);
data.append(r->data);
}
AssignmentPhraseList::AssignmentPhraseList(const AssignmentPhrase &r, const AssignmentPhrase &l)
{
data.append(l.data);
@ -269,7 +286,8 @@ AssignmentPhraseList AssignmentPhraseList::operator &(const AssignmentPhrase &ph
AssignmentPhraseList::~AssignmentPhraseList()
{
qDeleteAll(data);
// qDeleteAll(data);
// data.clear();
}
ConditionalPhrase::ConditionalPhrase() : data(0)
@ -355,7 +373,7 @@ ConditionalPhrase::~ConditionalPhrase()
delete data;
}
ConditionalPhrase ConditionalPhrase::operator =(const ConditionalPhrase &other)
ConditionalPhrase &ConditionalPhrase::operator =(const ConditionalPhrase &other)
{
this->data = new PhraseData(other.data);
return *this;
@ -390,27 +408,27 @@ ConditionalPhrase ConditionalPhrase::operator !()
return f;
}
AssignmentPhraseList operator &(const AssignmentPhrase &l, const AssignmentPhrase &r)
{
return AssignmentPhraseList(l, r);
}
//AssignmentPhraseList operator &(const AssignmentPhrase &l, const AssignmentPhrase &r)
//{
// return AssignmentPhraseList(l, r);
//}
AssignmentPhraseList operator &(const AssignmentPhrase &l, AssignmentPhrase &&r)
{
r.data = 0;
return AssignmentPhraseList(l, r);
}
//AssignmentPhraseList operator &(const AssignmentPhrase &l, AssignmentPhrase &&r)
//{
// r.data = 0;
// return AssignmentPhraseList(l, r);
//}
AssignmentPhraseList operator &(AssignmentPhrase &&l, const AssignmentPhrase &r)
{
l.data = 0;
return AssignmentPhraseList(l, r);
}
//AssignmentPhraseList operator &(AssignmentPhrase &&l, const AssignmentPhrase &r)
//{
// l.data = 0;
// return AssignmentPhraseList(l, r);
//}
AssignmentPhraseList operator &(AssignmentPhrase &&l, AssignmentPhrase &&r)
{
r.data = l.data = 0;
return AssignmentPhraseList(l, r);
}
//AssignmentPhraseList operator &(AssignmentPhrase &&l, AssignmentPhrase &&r)
//{
// r.data = l.data = 0;
// return AssignmentPhraseList(l, r);
//}
NUT_END_NAMESPACE

View File

@ -103,8 +103,8 @@ public:
PhraseData(PhraseData *l, Condition o);
PhraseData(PhraseData *l, Condition o, const PhraseData *r);
PhraseData(PhraseData *l, Condition o, QVariant r);
PhraseData(const PhraseData *other);
explicit PhraseData(const PhraseData &other);
explicit PhraseData(const PhraseData *other);
QString toString() const;
@ -115,7 +115,7 @@ class AssignmentPhraseList
{
public:
QList<PhraseData*> data;
AssignmentPhraseList();
explicit AssignmentPhraseList();
AssignmentPhraseList(const AssignmentPhrase &l);
AssignmentPhraseList(AssignmentPhraseList *l, const AssignmentPhrase *r);
AssignmentPhraseList(AssignmentPhrase *l, const AssignmentPhrase *r);
@ -130,25 +130,28 @@ class AssignmentPhrase
{
public:
PhraseData *data;
AssignmentPhrase(AbstractFieldPhrase *l, QVariant r);
AssignmentPhrase(AbstractFieldPhrase *l, const AssignmentPhrase *r);
explicit AssignmentPhrase(PhraseData *d);
explicit AssignmentPhrase(AbstractFieldPhrase *l, const QVariant r);
explicit AssignmentPhrase(AbstractFieldPhrase *l, const AssignmentPhrase *r);
explicit AssignmentPhrase(AssignmentPhrase *ph, const QVariant &v);
// explicit AssignmentPhrase(AssignmentPhrase &other);
~AssignmentPhrase();
// AssignmentPhrase(AssignmentPhrase *l, const AssignmentPhrase *r);
// AssignmentPhraseList operator &(const AssignmentPhrase &other);
AssignmentPhraseList operator &(const AssignmentPhrase &other);
};
AssignmentPhraseList operator &(const AssignmentPhrase &l, const AssignmentPhrase &r);
AssignmentPhraseList operator &(const AssignmentPhrase &l, AssignmentPhrase &&r);
AssignmentPhraseList operator &(AssignmentPhrase &&l, const AssignmentPhrase &r);
AssignmentPhraseList operator &(AssignmentPhrase &&l, AssignmentPhrase &&r);
//AssignmentPhraseList operator &(const AssignmentPhrase &l, const AssignmentPhrase &r);
//AssignmentPhraseList operator &(const AssignmentPhrase &l, AssignmentPhrase &&r);
//AssignmentPhraseList operator &(AssignmentPhrase &&l, const AssignmentPhrase &r);
//AssignmentPhraseList operator &(AssignmentPhrase &&l, AssignmentPhrase &&r);
class PhraseList{
public:
bool isValid;
QList<const PhraseData*> data;
PhraseList();
explicit PhraseList();
PhraseList(const PhraseList &other);
PhraseList(const AbstractFieldPhrase &other);
PhraseList(const AbstractFieldPhrase *left, const AbstractFieldPhrase &right);
@ -181,7 +184,7 @@ public:
ConditionalPhrase(ConditionalPhrase *l, PhraseData::Condition cond, ConditionalPhrase &r);
virtual ~ConditionalPhrase();
ConditionalPhrase operator =(const ConditionalPhrase &other);
ConditionalPhrase &operator =(const ConditionalPhrase &other);
ConditionalPhrase operator ==(const QVariant &other);
ConditionalPhrase operator ==(const AbstractFieldPhrase &other);
ConditionalPhrase operator &&(const ConditionalPhrase &other);
@ -267,8 +270,8 @@ public:
return ConditionalPhrase(this, PhraseData::Like, term);
}
AssignmentPhrase operator =(const QVariant &other) {
return AssignmentPhrase(this, other);
AssignmentPhrase operator =(const QVariant &v) {
return AssignmentPhrase(this, v);
}
};

View File

@ -23,7 +23,7 @@
NUT_BEGIN_NAMESPACE
QueryPrivate::QueryPrivate(QueryBase *parent) : q_ptr(parent),
skip(-1), take(-1)
database(0), tableSet(0), skip(-1), take(-1)
{
}

View File

@ -50,7 +50,7 @@ template <class T>
bool m_autoDelete;
public:
Query(Database *database, TableSetBase *tableSet, bool autoDelete);
explicit Query(Database *database, TableSetBase *tableSet, bool autoDelete);
~Query();
//ddl
@ -520,7 +520,7 @@ Q_OUTOFLINE_TEMPLATE int Query<T>::update(const AssignmentPhraseList &ph)
ph,
d->wherePhrase);
QSqlQuery q = d->database->exec(d->sql);
qDebug() << d->sql;
if (m_autoDelete)
deleteLater();
return q.numRowsAffected();

View File

@ -37,7 +37,7 @@ class QueryPrivate{
Q_DECLARE_PUBLIC(QueryBase)
public:
QueryPrivate(QueryBase *parent);
explicit QueryPrivate(QueryBase *parent);
~QueryPrivate();
QString sql;

View File

@ -85,4 +85,9 @@ QVariant SqlModel::data(const QModelIndex &index, int role) const
return QVariant();
}
SqlModelPrivate::SqlModelPrivate()
{
}
NUT_END_NAMESPACE

View File

@ -36,7 +36,7 @@ class SqlModel : public QAbstractTableModel
Q_OBJECT
public:
SqlModel(Database *database, TableSetBase *tableSet, QObject *parent = Q_NULLPTR);
explicit SqlModel(Database *database, TableSetBase *tableSet, QObject *parent = Q_NULLPTR);
int rowCount(const QModelIndex &parent) const;
int columnCount(const QModelIndex &parent) const;

View File

@ -13,6 +13,8 @@ class SqlModelPrivate {
SqlModel *q_ptr;
Q_DECLARE_PUBLIC(SqlModel)
public:
explicit SqlModelPrivate();
QString tableName;
QList<Table*> rows;

View File

@ -39,7 +39,7 @@ NUT_BEGIN_NAMESPACE
* This should be fixed to v1.2
*/
Table::Table(QObject *parent) : QObject(parent), myModel(0)
Table::Table(QObject *parent) : QObject(parent), myModel(0), _parentTableSet(0)
{
setStatus(NewCreated);
}

View File

@ -408,6 +408,7 @@ FieldModel::FieldModel(const QJsonObject &json)
isAutoIncrement = json.value(__nut_AUTO_INCREMENT).toBool();
isPrimaryKey = json.value(__nut_PRIMARY_KEY).toBool();
defaultValue = json.value(__nut_DEFAULT_VALUE).toString();
isUnique = json.value(__nut_UNIQUE).toBool();
}
QJsonObject FieldModel::toJson() const
@ -429,6 +430,7 @@ RelationModel::RelationModel(const QJsonObject &obj)
localProperty = obj.value("localProperty").toString();
masterClassName = obj.value("masterClassName").toString();
foreignColumn = obj.value("foreignColumn").toString();
slaveTable = masterTable = 0;
}
QJsonObject RelationModel::toJson() const

View File

@ -31,13 +31,13 @@ NUT_BEGIN_NAMESPACE
class TableModel;
struct FieldModel{
FieldModel() : name(QString::null), length(0), defaultValue(QString::null),
explicit FieldModel() : name(QString::null), length(0), defaultValue(QString::null),
notNull(false), isPrimaryKey(false), isAutoIncrement(false), isUnique(false)
{
}
FieldModel(const QJsonObject &json);
explicit FieldModel(const QJsonObject &json);
QString name;
//TODO: QMetaType::Type??
@ -73,7 +73,7 @@ struct RelationModel{
RelationModel() : localColumn(""), localProperty(""), slaveTable(0),
foreignColumn(""), masterTable(0), masterClassName("")
{}
RelationModel(const QJsonObject &obj);
explicit RelationModel(const QJsonObject &obj);
//slave
QString localColumn;
@ -92,9 +92,8 @@ bool operator !=(const RelationModel &l, const RelationModel &r);
class TableModel
{
public:
TableModel(int typeId, QString tableName = QString::null);
TableModel(QJsonObject json, QString tableName);
explicit TableModel(int typeId, QString tableName = QString::null);
explicit TableModel(QJsonObject json, QString tableName);
QJsonObject toJson() const;

View File

@ -39,8 +39,8 @@ template<class T>
class NUT_EXPORT TableSet : public TableSetBase
{
public:
TableSet(Database *parent);
TableSet(Table *parent);
explicit TableSet(Database *parent);
explicit TableSet(Table *parent);
void append(T *t);
void append(QList<T *> t);

View File

@ -35,8 +35,8 @@ class TableSetBase : public QObject
{
public:
TableSetBase(Database *parent);
TableSetBase(Table *parent);
explicit TableSetBase(Database *parent);
explicit TableSetBase(Table *parent);
virtual int save(Database *db, bool cleanUp = false);
void clearChilds();

View File

@ -35,8 +35,8 @@ class NUT_EXPORT DbGeography
public:
explicit DbGeography();
DbGeography(const DbGeography &other);
DbGeography(const QVariant &value);
explicit DbGeography(const DbGeography &other);
explicit DbGeography(const QVariant &value);
qreal longitude() const;
qreal latitude() const;

View File

@ -69,6 +69,7 @@ void MainTest::createUser()
void MainTest::createPost()
{
TIC();
Post *newPost = new Post;
newPost->setTitle("post title");
newPost->setSaveDate(QDateTime::currentDateTime());
@ -93,6 +94,7 @@ void MainTest::createPost()
postId = newPost->id();
QTEST_ASSERT(newPost->id() != 0);
TOC();
qDebug() << "New post inserted with id:" << newPost->id();
}
@ -119,12 +121,24 @@ void MainTest::createPost2()
qDebug() << "New post2 inserted with id:" << newPost->id();
}
void MainTest::updatePostOnTheFly()
{
auto c = db.postTable()->query()
->where(Post::idField() == postId)
->update(Post::titleField() = "New title");
QTEST_ASSERT(c == 1);
}
void MainTest::selectPublicts()
{
auto q = db.postTable()->query()
->where(Post::isPublicField())
->toList();
auto q2 = db.postTable()->query()
->where(!Post::isPublicField())
->toList();
}
void MainTest::selectPosts()

View File

@ -27,6 +27,7 @@ private slots:
void createUser();
void createPost();
void createPost2();
void updatePostOnTheFly();
void selectPublicts();
void join();
void selectPosts();