initial
This commit is contained in:
parent
967df3371c
commit
74b2a4524a
|
|
@ -1 +1 @@
|
||||||
Subproject commit f9d81fcc6244271b3926891b0c86554e1e6b967e
|
Subproject commit b3c550c5bb7c570b1b10492fcedf287c1915af39
|
||||||
|
|
@ -1,3 +1,3 @@
|
||||||
#QT -= gui
|
#QT -= gui
|
||||||
|
|
||||||
DEFINES += DOC_PATH=\\\"$$PWD/../../doc\\\"
|
DEFINES += NUT_PATH=\\\"$$PWD/../../\\\"
|
||||||
|
|
|
||||||
|
|
@ -84,15 +84,33 @@ public: \
|
||||||
|
|
||||||
#define NUT_FOREIGN_KEY(type, keytype, name, read, write) \
|
#define NUT_FOREIGN_KEY(type, keytype, name, read, write) \
|
||||||
Q_PROPERTY(Nut::Row<type> name READ read WRITE write) \
|
Q_PROPERTY(Nut::Row<type> name READ read WRITE write) \
|
||||||
NUT_DECLARE_FIELD(keytype, name##Id, read##Id, write##Id) \
|
/*NUT_DECLARE_FIELD(keytype, name##Id, read##Id, write##Id)*/ \
|
||||||
NUT_INFO(__nut_FOREIGN_KEY, name, type) \
|
NUT_INFO(__nut_FOREIGN_KEY, name, type) \
|
||||||
Nut::Row<type> m_##name; \
|
Nut::ForeignKeyData<type, keytype> m_##name; \
|
||||||
public: \
|
public: \
|
||||||
Nut::Row<type> read() const { return m_##name ; } \
|
Nut::Row<type> read() const { return m_##name.table() ; } \
|
||||||
void write(Nut::Row<type> name){ \
|
void write(Nut::Row<type> name){ \
|
||||||
m_##name = name; \
|
m_##name.setTable(name); \
|
||||||
|
}\
|
||||||
|
\
|
||||||
|
Q_PROPERTY(keytype name##Id READ read##Id WRITE write##Id) \
|
||||||
|
NUT_INFO(__nut_FIELD, name##Id, 0) \
|
||||||
|
public: \
|
||||||
|
static NUT_WRAP_NAMESPACE(FieldPhrase<keytype>)& name##Id ## Field(){ \
|
||||||
|
static NUT_WRAP_NAMESPACE(FieldPhrase<keytype>) f = \
|
||||||
|
NUT_WRAP_NAMESPACE(FieldPhrase<keytype>) \
|
||||||
|
(staticMetaObject.className(), #name); \
|
||||||
|
return f; \
|
||||||
|
} \
|
||||||
|
keytype read##Id() const{ \
|
||||||
|
return m_##name.value(); \
|
||||||
|
} \
|
||||||
|
void write##Id(keytype name##Id){ \
|
||||||
|
m_##name.setValue(name##Id); \
|
||||||
|
propertyChanged(QT_STRINGIFY2(name##Id)); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define NUT_DECLARE_CHILD_TABLE(type, n) \
|
#define NUT_DECLARE_CHILD_TABLE(type, n) \
|
||||||
private: \
|
private: \
|
||||||
NUT_WRAP_NAMESPACE(TableSet)<type> *m_##n; \
|
NUT_WRAP_NAMESPACE(TableSet)<type> *m_##n; \
|
||||||
|
|
@ -110,9 +128,18 @@ public: \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define NUT_FIELD(name) NUT_INFO(__nut_FIELD, name, 0)
|
#define NUT_FIELD(name) NUT_INFO(__nut_FIELD, name, 0)
|
||||||
#define NUT_PRIMARY_KEY(x) NUT_INFO(__nut_PRIMARY_KEY, x, 0)
|
#define NUT_PRIMARY_KEY(x) NUT_INFO(__nut_PRIMARY_KEY, x, 0) \
|
||||||
|
QVariant primaryValue() const override { \
|
||||||
|
return property(#x); \
|
||||||
|
} \
|
||||||
|
void setPrimaryValue(const QVariant &value) override { \
|
||||||
|
setProperty(#x, value); \
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#define NUT_AUTO_INCREMENT(x) NUT_INFO(__nut_AUTO_INCREMENT, x, 0)
|
#define NUT_AUTO_INCREMENT(x) NUT_INFO(__nut_AUTO_INCREMENT, x, 0)
|
||||||
#define NUT_PRIMARY_AUTO_INCREMENT(x) NUT_INFO(__nut_PRIMARY_KEY_AI, x, 0)
|
#define NUT_PRIMARY_AUTO_INCREMENT(x) NUT_INFO(__nut_PRIMARY_KEY_AI, x, 0)\
|
||||||
|
NUT_PRIMARY_KEY(X) NUT_AUTO_INCREMENT(X)
|
||||||
#define NUT_DISPLAY_NAME(field, name) NUT_INFO(__nut_DISPLAY, field, name)
|
#define NUT_DISPLAY_NAME(field, name) NUT_INFO(__nut_DISPLAY, field, name)
|
||||||
#define NUT_UNIQUE(x) NUT_INFO(__nut_UNIQUE, x, 0)
|
#define NUT_UNIQUE(x) NUT_INFO(__nut_UNIQUE, x, 0)
|
||||||
#define NUT_LEN(field, len) NUT_INFO(__nut_LEN, field, len)
|
#define NUT_LEN(field, len) NUT_INFO(__nut_LEN, field, len)
|
||||||
|
|
@ -250,6 +277,32 @@ inline T *get(const QSharedPointer<T> row) {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
template<class C, typename T>
|
||||||
|
struct ForeignKeyData {
|
||||||
|
Nut::Row<C> _table;
|
||||||
|
T _id;
|
||||||
|
|
||||||
|
ForeignKeyData() : _table(nullptr)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void setTable(Nut::Row<C> t) {
|
||||||
|
_table = t;
|
||||||
|
_id = t->primaryValue().value<T>();
|
||||||
|
}
|
||||||
|
Nut::Row<C> table() const {
|
||||||
|
return _table;
|
||||||
|
}
|
||||||
|
void setValue(const T& val) {
|
||||||
|
_table = nullptr;
|
||||||
|
_id = val;
|
||||||
|
}
|
||||||
|
T value() const {
|
||||||
|
if (_table)
|
||||||
|
return _table->primaryValue().value<T>();
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
NUT_END_NAMESPACE
|
NUT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // SYNTAX_DEFINES_H
|
#endif // SYNTAX_DEFINES_H
|
||||||
|
|
|
||||||
10
src/table.h
10
src/table.h
|
|
@ -55,14 +55,8 @@ public:
|
||||||
|
|
||||||
int save(Database *db);
|
int save(Database *db);
|
||||||
|
|
||||||
// Q_DECL_DEPRECATED
|
virtual QVariant primaryValue() const = 0;
|
||||||
// QString primaryKey() const;
|
virtual void setPrimaryValue(const QVariant &value) = 0;
|
||||||
|
|
||||||
// Q_DECL_DEPRECATED
|
|
||||||
// bool isPrimaryKeyAutoIncrement() const;
|
|
||||||
|
|
||||||
// Q_DECL_DEPRECATED
|
|
||||||
// QVariant primaryValue() const;
|
|
||||||
|
|
||||||
Status status() const;
|
Status status() const;
|
||||||
void setStatus(const Status &status);
|
void setStatus(const Status &status);
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
#include "comment.h"
|
#include "comment.h"
|
||||||
|
|
||||||
Comment::Comment(QObject *parent) : Table(parent),
|
Comment::Comment(QObject *parent) : Table(parent)
|
||||||
m_author(Q_NULLPTR), m_post(Q_NULLPTR)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,7 @@ void GeneratorsTest::cleanupTestCase()
|
||||||
i.value().psql, i.value().mssql));
|
i.value().psql, i.value().mssql));
|
||||||
}
|
}
|
||||||
|
|
||||||
QFile file(DOC_PATH "/datatypes.md");
|
QFile file(NUT_PATH "/doc/datatypes.md");
|
||||||
if (file.open(QIODevice::WriteOnly)) {
|
if (file.open(QIODevice::WriteOnly)) {
|
||||||
file.write(p.toUtf8());
|
file.write(p.toUtf8());
|
||||||
file.close();
|
file.close();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue