wip: Database model moved to TableModel

This commit is contained in:
blackdal 2017-05-27 20:10:10 +04:30
parent 3e888c080e
commit 805f56c76a
12 changed files with 78 additions and 26 deletions

3
doc/PaxHeader/html Normal file
View File

@ -0,0 +1,3 @@
20 ctime=1465132049
20 atime=1495727196
23 SCHILY.fflags=btree

0
include/header_copier Executable file → Normal file
View File

View File

@ -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);
} }
} }

View File

@ -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);

View File

@ -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();

View File

@ -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; \
} }

View File

@ -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;
} }

View File

@ -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)){

View File

@ -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;
} }

View File

@ -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

View File

@ -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);

View File

@ -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";