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,9 +53,10 @@ DatabasePrivate::DatabasePrivate(Database *parent) : q_ptr(parent)
|
|||
{
|
||||
}
|
||||
|
||||
bool DatabasePrivate::open()
|
||||
bool DatabasePrivate::open(bool update)
|
||||
{
|
||||
Q_Q(Database);
|
||||
if (update)
|
||||
getCurrectScheema();
|
||||
|
||||
connectionName = q->metaObject()->className()
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -48,6 +48,7 @@ public:
|
|||
~Database();
|
||||
|
||||
bool open();
|
||||
bool open(bool updateDatabase);
|
||||
void close();
|
||||
|
||||
QSqlQuery exec(QString sql);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ public:
|
|||
DatabasePrivate(Database *parent);
|
||||
|
||||
|
||||
bool open();
|
||||
bool open(bool updateDatabase);
|
||||
|
||||
bool updateDatabase();
|
||||
void createChangeLogs();
|
||||
|
|
|
|||
|
|
@ -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; \
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
24
src/query.h
24
src/query.h
|
|
@ -106,26 +106,34 @@ 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(
|
||||
QString sql = d->database->sqlGenertor()->selectCommand(
|
||||
SqlGeneratorBase::SelectALl,
|
||||
"",
|
||||
d->wheres,
|
||||
d->orderPhrases,
|
||||
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();
|
||||
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()) {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
Loading…
Reference in New Issue