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);
getCurrectScheema();
if (update)
getCurrectScheema();
connectionName = q->metaObject()->className()
+ QString::number(DatabasePrivate::lastId);
@ -88,7 +89,7 @@ bool DatabasePrivate::open()
qWarning("Creating database error: %s",
db.lastError().text().toLatin1().data());
return open();
return open(update);
} else {
qWarning("Unknown error detecting change logs, %s",
db.lastError().text().toLatin1().data());
@ -97,7 +98,10 @@ bool DatabasePrivate::open()
return false;
}
return updateDatabase();
if(update)
return updateDatabase();
else
return true;
}
bool DatabasePrivate::updateDatabase()
@ -441,7 +445,13 @@ void Database::databaseUpdated(int oldMajor, int oldMinor, int newMajor,
Q_UNUSED(newMinor);
}
bool Database::open()
{
return open(true);
}
bool Database::open(bool updateDatabase)
{
Q_D(Database);
@ -468,7 +478,7 @@ bool Database::open()
driver().toLatin1().constData());
return false;
} else {
return d->open();
return d->open(updateDatabase);
}
}

View File

@ -48,6 +48,7 @@ public:
~Database();
bool open();
bool open(bool updateDatabase);
void close();
QSqlQuery exec(QString sql);

View File

@ -38,7 +38,7 @@ public:
DatabasePrivate(Database *parent);
bool open();
bool open(bool updateDatabase);
bool updateDatabase();
void createChangeLogs();

View File

@ -36,8 +36,10 @@
#ifdef NUT_NAMESPACE
# define __NUT_NAMESPACE_PERFIX NUT_NAMESPACE::
# define NUT_WRAP_NAMESPACE(x) NUT_NAMESPACE::x
#else
# define __NUT_NAMESPACE_PERFIX
# define NUT_WRAP_NAMESPACE(x) x
#endif
// Database
@ -85,13 +87,13 @@ public: \
#define NUT_DECLARE_CHILD_TABLE(type, n) \
private: \
__NUT_NAMESPACE_PERFIX TableSet<type> *m_##n; \
NUT_WRAP_NAMESPACE(TableSet)<type> *m_##n; \
public: \
static type *n##Table(){ \
static type *f = new type(); \
return f; \
} \
__NUT_NAMESPACE_PERFIX TableSet<type> *n(){ \
NUT_WRAP_NAMESPACE(TableSet)<type> *n(){ \
return m_##n; \
}

View File

@ -65,10 +65,28 @@ QString MySqlGenerator::fieldType(FieldModel *field)
else
dbType = "text";
break;
case QVariant::Point:
case QVariant::PointF:
dbType = "POINT";
break;
case QVariant::Polygon:
case QVariant::PolygonF:
dbType = "POLYGON";
break;
default:
qWarning("Type %s::%s(%d) is not supported",
qPrintable(field->name),
QMetaType::typeName(field->type),
field->type);
dbType = "";
}
if(field->typeName == QStringLiteral("Nut::DbGeography"))
dbType = "GEOMETRY";
return dbType;
}

View File

@ -106,27 +106,35 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
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(
SqlGeneratorBase::SelectALl,
"",
d->wheres,
d->orderPhrases,
d->tableName,
d->joinClassName));
QString sql = d->database->sqlGenertor()->selectCommand(
SqlGeneratorBase::SelectALl,
"",
d->wheres,
d->orderPhrases,
d->tableName,
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();
int childTypeId = 0;
T *lastRow = 0;
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;
if(!d->joinClassName.isNull())
if(d->database->model().modelByClass(d->joinClassName)){
childFields = d->database->model().modelByClass(d->joinClassName)->fieldsNames();
if(!d->joinClassName.isNull()) {
TableModel *joinTableModel = TableModel::findByClassName(d->joinClassName);
if(joinTableModel){
// childFields = d->database->model().modelByClass(d->joinClassName)->fieldsNames();
childFields = TableModel::findByClassName(d->joinClassName)->fieldsNames();
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()) {
if(lastPkValue != q.value(pk)){

View File

@ -379,8 +379,8 @@ QString SqlGeneratorBase::selectCommand(QString selectPhrase, QList<WherePhrase>
+ whereText
+ orderText;
for(int i = 0; i < _database->model().count(); i++)
command = command.replace(_database->model().at(i)->className() + "." , _database->model().at(i)->name() + ".");
foreach (TableModel *m, TableModel::allModels())
command = command.replace(m->className() + "." , m->name() + ".");
return command;
}

View File

@ -90,6 +90,11 @@ QStringList TableModel::fieldsNames() const
return ret;
}
QSet<TableModel *> TableModel::allModels()
{
return _allModels;
}
TableModel *TableModel::findByTypeId(int typeId)
{
foreach (TableModel *model, _allModels)
@ -147,7 +152,6 @@ TableModel::TableModel(int typeId, QString tableName)
_name = tableName;
_className = tableMetaObject->className();
qDebug() << "New model"<< _className << tableName;
//#ifdef NUT_NAMESPACE
// if(_className.startsWith(QT_STRINGIFY(NUT_NAMESPACE) "::"))
// _className = _className.replace(QT_STRINGIFY(NUT_NAMESPACE) "::", "");
@ -181,8 +185,12 @@ TableModel::TableModel(int typeId, QString tableName)
f = fieldObj;
if(!fieldObj)
continue;
qDebug() <<"fieldProperty.type()"<<fieldProperty.typeName();
fieldObj->type = fieldProperty.type();
fieldObj->typeName = QString(fieldProperty.typeName());
// qDebug() <<"fieldProperty.type()"
// <<fieldProperty.typeName()
// << fieldProperty.type()
// << fieldObj->type;
}
// Browse class infos

View File

@ -39,6 +39,7 @@ struct FieldModel{
QString name;
QVariant::Type type;
QString typeName;
int length;
QString defaultValue;
bool notNull;
@ -100,6 +101,7 @@ public:
QList<RelationModel *> foregionKeys() const;
QStringList fieldsNames() const;
static QSet<TableModel *> allModels();
static TableModel *findByTypeId(int typeId);
static TableModel *findByName(QString name);
static TableModel *findByClassName(QString className);

View File

@ -26,7 +26,7 @@
NUT_BEGIN_NAMESPACE
PhraseData::PhraseData(const char *className, const char *s){
text = QString(className) + "." + s;
text = QString(s);// QString(className) + "." + s;
type = Field;
operatorCond = NotAssign;
// qDebug() << "(" << this << ")" << "Data type 0";