wip: Database model moved to TableModel
This commit is contained in:
parent
3e888c080e
commit
805f56c76a
|
|
@ -0,0 +1,3 @@
|
||||||
|
20 ctime=1465132049
|
||||||
|
20 atime=1495727196
|
||||||
|
23 SCHILY.fflags=btree
|
||||||
|
|
@ -53,10 +53,11 @@ DatabasePrivate::DatabasePrivate(Database *parent) : q_ptr(parent)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DatabasePrivate::open()
|
bool DatabasePrivate::open(bool update)
|
||||||
{
|
{
|
||||||
Q_Q(Database);
|
Q_Q(Database);
|
||||||
getCurrectScheema();
|
if (update)
|
||||||
|
getCurrectScheema();
|
||||||
|
|
||||||
connectionName = q->metaObject()->className()
|
connectionName = q->metaObject()->className()
|
||||||
+ QString::number(DatabasePrivate::lastId);
|
+ QString::number(DatabasePrivate::lastId);
|
||||||
|
|
@ -88,7 +89,7 @@ bool DatabasePrivate::open()
|
||||||
qWarning("Creating database error: %s",
|
qWarning("Creating database error: %s",
|
||||||
db.lastError().text().toLatin1().data());
|
db.lastError().text().toLatin1().data());
|
||||||
|
|
||||||
return open();
|
return open(update);
|
||||||
} else {
|
} else {
|
||||||
qWarning("Unknown error detecting change logs, %s",
|
qWarning("Unknown error detecting change logs, %s",
|
||||||
db.lastError().text().toLatin1().data());
|
db.lastError().text().toLatin1().data());
|
||||||
|
|
@ -97,7 +98,10 @@ bool DatabasePrivate::open()
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return updateDatabase();
|
if(update)
|
||||||
|
return updateDatabase();
|
||||||
|
else
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DatabasePrivate::updateDatabase()
|
bool DatabasePrivate::updateDatabase()
|
||||||
|
|
@ -441,7 +445,13 @@ void Database::databaseUpdated(int oldMajor, int oldMinor, int newMajor,
|
||||||
Q_UNUSED(newMinor);
|
Q_UNUSED(newMinor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Database::open()
|
bool Database::open()
|
||||||
|
{
|
||||||
|
return open(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Database::open(bool updateDatabase)
|
||||||
{
|
{
|
||||||
Q_D(Database);
|
Q_D(Database);
|
||||||
|
|
||||||
|
|
@ -468,7 +478,7 @@ bool Database::open()
|
||||||
driver().toLatin1().constData());
|
driver().toLatin1().constData());
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
return d->open();
|
return d->open(updateDatabase);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ public:
|
||||||
~Database();
|
~Database();
|
||||||
|
|
||||||
bool open();
|
bool open();
|
||||||
|
bool open(bool updateDatabase);
|
||||||
void close();
|
void close();
|
||||||
|
|
||||||
QSqlQuery exec(QString sql);
|
QSqlQuery exec(QString sql);
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ public:
|
||||||
DatabasePrivate(Database *parent);
|
DatabasePrivate(Database *parent);
|
||||||
|
|
||||||
|
|
||||||
bool open();
|
bool open(bool updateDatabase);
|
||||||
|
|
||||||
bool updateDatabase();
|
bool updateDatabase();
|
||||||
void createChangeLogs();
|
void createChangeLogs();
|
||||||
|
|
|
||||||
|
|
@ -36,8 +36,10 @@
|
||||||
|
|
||||||
#ifdef NUT_NAMESPACE
|
#ifdef NUT_NAMESPACE
|
||||||
# define __NUT_NAMESPACE_PERFIX NUT_NAMESPACE::
|
# define __NUT_NAMESPACE_PERFIX NUT_NAMESPACE::
|
||||||
|
# define NUT_WRAP_NAMESPACE(x) NUT_NAMESPACE::x
|
||||||
#else
|
#else
|
||||||
# define __NUT_NAMESPACE_PERFIX
|
# define __NUT_NAMESPACE_PERFIX
|
||||||
|
# define NUT_WRAP_NAMESPACE(x) x
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Database
|
// Database
|
||||||
|
|
@ -85,13 +87,13 @@ public: \
|
||||||
|
|
||||||
#define NUT_DECLARE_CHILD_TABLE(type, n) \
|
#define NUT_DECLARE_CHILD_TABLE(type, n) \
|
||||||
private: \
|
private: \
|
||||||
__NUT_NAMESPACE_PERFIX TableSet<type> *m_##n; \
|
NUT_WRAP_NAMESPACE(TableSet)<type> *m_##n; \
|
||||||
public: \
|
public: \
|
||||||
static type *n##Table(){ \
|
static type *n##Table(){ \
|
||||||
static type *f = new type(); \
|
static type *f = new type(); \
|
||||||
return f; \
|
return f; \
|
||||||
} \
|
} \
|
||||||
__NUT_NAMESPACE_PERFIX TableSet<type> *n(){ \
|
NUT_WRAP_NAMESPACE(TableSet)<type> *n(){ \
|
||||||
return m_##n; \
|
return m_##n; \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,10 +65,28 @@ QString MySqlGenerator::fieldType(FieldModel *field)
|
||||||
else
|
else
|
||||||
dbType = "text";
|
dbType = "text";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case QVariant::Point:
|
||||||
|
case QVariant::PointF:
|
||||||
|
dbType = "POINT";
|
||||||
|
break;
|
||||||
|
|
||||||
|
case QVariant::Polygon:
|
||||||
|
case QVariant::PolygonF:
|
||||||
|
dbType = "POLYGON";
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
qWarning("Type %s::%s(%d) is not supported",
|
||||||
|
qPrintable(field->name),
|
||||||
|
QMetaType::typeName(field->type),
|
||||||
|
field->type);
|
||||||
dbType = "";
|
dbType = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(field->typeName == QStringLiteral("Nut::DbGeography"))
|
||||||
|
dbType = "GEOMETRY";
|
||||||
|
|
||||||
return dbType;
|
return dbType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
34
src/query.h
34
src/query.h
|
|
@ -106,27 +106,35 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
||||||
d->select = "*";
|
d->select = "*";
|
||||||
|
|
||||||
// QSqlQuery q = d->database->exec(d->database->sqlGenertor()->selectCommand(d->wheres, d->orders, d->tableName, d->joinClassName));
|
// QSqlQuery q = d->database->exec(d->database->sqlGenertor()->selectCommand(d->wheres, d->orders, d->tableName, d->joinClassName));
|
||||||
QSqlQuery q = d->database->exec(d->database->sqlGenertor()->selectCommand(
|
QString sql = d->database->sqlGenertor()->selectCommand(
|
||||||
SqlGeneratorBase::SelectALl,
|
SqlGeneratorBase::SelectALl,
|
||||||
"",
|
"",
|
||||||
d->wheres,
|
d->wheres,
|
||||||
d->orderPhrases,
|
d->orderPhrases,
|
||||||
d->tableName,
|
d->tableName,
|
||||||
d->joinClassName));
|
d->joinClassName);
|
||||||
|
qDebug() << "sql="<<sql;
|
||||||
|
QSqlQuery q = d->database->exec(sql);
|
||||||
|
|
||||||
QString pk = d->database->model().model(d->tableName)->primaryKey();
|
QString pk = TableModel::findByName(d->tableName)->primaryKey();
|
||||||
|
// QString pk = d->database->model().model(d->tableName)->primaryKey();
|
||||||
QVariant lastPkValue = QVariant();
|
QVariant lastPkValue = QVariant();
|
||||||
int childTypeId = 0;
|
int childTypeId = 0;
|
||||||
T *lastRow = 0;
|
T *lastRow = 0;
|
||||||
TableSetBase *childTableSet;
|
TableSetBase *childTableSet;
|
||||||
QStringList masterFields = d->database->model().model(d->tableName)->fieldsNames();
|
QStringList masterFields = TableModel::findByName(d->tableName)->fieldsNames();
|
||||||
|
//QStringList masterFields = d->database->model().model(d->tableName)->fieldsNames();
|
||||||
QStringList childFields;
|
QStringList childFields;
|
||||||
if(!d->joinClassName.isNull())
|
if(!d->joinClassName.isNull()) {
|
||||||
if(d->database->model().modelByClass(d->joinClassName)){
|
TableModel *joinTableModel = TableModel::findByClassName(d->joinClassName);
|
||||||
childFields = d->database->model().modelByClass(d->joinClassName)->fieldsNames();
|
if(joinTableModel){
|
||||||
|
// childFields = d->database->model().modelByClass(d->joinClassName)->fieldsNames();
|
||||||
|
childFields = TableModel::findByClassName(d->joinClassName)->fieldsNames();
|
||||||
QString joinTableName = d->database->tableName(d->joinClassName);
|
QString joinTableName = d->database->tableName(d->joinClassName);
|
||||||
childTypeId = d->database->model().model(joinTableName)->typeId();
|
// childTypeId = d->database->model().model(joinTableName)->typeId();
|
||||||
|
childTypeId = TableModel::findByName(joinTableName)->typeId();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (q.next()) {
|
while (q.next()) {
|
||||||
if(lastPkValue != q.value(pk)){
|
if(lastPkValue != q.value(pk)){
|
||||||
|
|
|
||||||
|
|
@ -379,8 +379,8 @@ QString SqlGeneratorBase::selectCommand(QString selectPhrase, QList<WherePhrase>
|
||||||
+ whereText
|
+ whereText
|
||||||
+ orderText;
|
+ orderText;
|
||||||
|
|
||||||
for(int i = 0; i < _database->model().count(); i++)
|
foreach (TableModel *m, TableModel::allModels())
|
||||||
command = command.replace(_database->model().at(i)->className() + "." , _database->model().at(i)->name() + ".");
|
command = command.replace(m->className() + "." , m->name() + ".");
|
||||||
|
|
||||||
return command;
|
return command;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,11 @@ QStringList TableModel::fieldsNames() const
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QSet<TableModel *> TableModel::allModels()
|
||||||
|
{
|
||||||
|
return _allModels;
|
||||||
|
}
|
||||||
|
|
||||||
TableModel *TableModel::findByTypeId(int typeId)
|
TableModel *TableModel::findByTypeId(int typeId)
|
||||||
{
|
{
|
||||||
foreach (TableModel *model, _allModels)
|
foreach (TableModel *model, _allModels)
|
||||||
|
|
@ -147,7 +152,6 @@ TableModel::TableModel(int typeId, QString tableName)
|
||||||
_name = tableName;
|
_name = tableName;
|
||||||
_className = tableMetaObject->className();
|
_className = tableMetaObject->className();
|
||||||
|
|
||||||
qDebug() << "New model"<< _className << tableName;
|
|
||||||
//#ifdef NUT_NAMESPACE
|
//#ifdef NUT_NAMESPACE
|
||||||
// if(_className.startsWith(QT_STRINGIFY(NUT_NAMESPACE) "::"))
|
// if(_className.startsWith(QT_STRINGIFY(NUT_NAMESPACE) "::"))
|
||||||
// _className = _className.replace(QT_STRINGIFY(NUT_NAMESPACE) "::", "");
|
// _className = _className.replace(QT_STRINGIFY(NUT_NAMESPACE) "::", "");
|
||||||
|
|
@ -181,8 +185,12 @@ TableModel::TableModel(int typeId, QString tableName)
|
||||||
f = fieldObj;
|
f = fieldObj;
|
||||||
if(!fieldObj)
|
if(!fieldObj)
|
||||||
continue;
|
continue;
|
||||||
qDebug() <<"fieldProperty.type()"<<fieldProperty.typeName();
|
|
||||||
fieldObj->type = fieldProperty.type();
|
fieldObj->type = fieldProperty.type();
|
||||||
|
fieldObj->typeName = QString(fieldProperty.typeName());
|
||||||
|
// qDebug() <<"fieldProperty.type()"
|
||||||
|
// <<fieldProperty.typeName()
|
||||||
|
// << fieldProperty.type()
|
||||||
|
// << fieldObj->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Browse class infos
|
// Browse class infos
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ struct FieldModel{
|
||||||
|
|
||||||
QString name;
|
QString name;
|
||||||
QVariant::Type type;
|
QVariant::Type type;
|
||||||
|
QString typeName;
|
||||||
int length;
|
int length;
|
||||||
QString defaultValue;
|
QString defaultValue;
|
||||||
bool notNull;
|
bool notNull;
|
||||||
|
|
@ -100,6 +101,7 @@ public:
|
||||||
QList<RelationModel *> foregionKeys() const;
|
QList<RelationModel *> foregionKeys() const;
|
||||||
QStringList fieldsNames() const;
|
QStringList fieldsNames() const;
|
||||||
|
|
||||||
|
static QSet<TableModel *> allModels();
|
||||||
static TableModel *findByTypeId(int typeId);
|
static TableModel *findByTypeId(int typeId);
|
||||||
static TableModel *findByName(QString name);
|
static TableModel *findByName(QString name);
|
||||||
static TableModel *findByClassName(QString className);
|
static TableModel *findByClassName(QString className);
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
NUT_BEGIN_NAMESPACE
|
NUT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
PhraseData::PhraseData(const char *className, const char *s){
|
PhraseData::PhraseData(const char *className, const char *s){
|
||||||
text = QString(className) + "." + s;
|
text = QString(s);// QString(className) + "." + s;
|
||||||
type = Field;
|
type = Field;
|
||||||
operatorCond = NotAssign;
|
operatorCond = NotAssign;
|
||||||
// qDebug() << "(" << this << ")" << "Data type 0";
|
// qDebug() << "(" << this << ")" << "Data type 0";
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue