diff --git a/doc/PaxHeader/html b/doc/PaxHeader/html new file mode 100644 index 0000000..e4f8396 --- /dev/null +++ b/doc/PaxHeader/html @@ -0,0 +1,3 @@ +20 ctime=1465132049 +20 atime=1495727196 +23 SCHILY.fflags=btree diff --git a/include/header_copier b/include/header_copier old mode 100755 new mode 100644 diff --git a/src/database.cpp b/src/database.cpp index c2c078c..b923e34 100644 --- a/src/database.cpp +++ b/src/database.cpp @@ -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); } } diff --git a/src/database.h b/src/database.h index c2df6d8..79dd6e9 100644 --- a/src/database.h +++ b/src/database.h @@ -48,6 +48,7 @@ public: ~Database(); bool open(); + bool open(bool updateDatabase); void close(); QSqlQuery exec(QString sql); diff --git a/src/database_p.h b/src/database_p.h index 6699197..5a19e95 100644 --- a/src/database_p.h +++ b/src/database_p.h @@ -38,7 +38,7 @@ public: DatabasePrivate(Database *parent); - bool open(); + bool open(bool updateDatabase); bool updateDatabase(); void createChangeLogs(); diff --git a/src/defines.h b/src/defines.h index 257e394..7d4336b 100644 --- a/src/defines.h +++ b/src/defines.h @@ -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 *m_##n; \ + NUT_WRAP_NAMESPACE(TableSet) *m_##n; \ public: \ static type *n##Table(){ \ static type *f = new type(); \ return f; \ } \ - __NUT_NAMESPACE_PERFIX TableSet *n(){ \ + NUT_WRAP_NAMESPACE(TableSet) *n(){ \ return m_##n; \ } diff --git a/src/mysqlgenerator.cpp b/src/mysqlgenerator.cpp index 1c6838a..fd5bb49 100644 --- a/src/mysqlgenerator.cpp +++ b/src/mysqlgenerator.cpp @@ -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; } diff --git a/src/query.h b/src/query.h index 583bc12..ff128a8 100644 --- a/src/query.h +++ b/src/query.h @@ -106,27 +106,35 @@ Q_OUTOFLINE_TEMPLATE QList Query::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="<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)){ diff --git a/src/sqlgeneratorbase.cpp b/src/sqlgeneratorbase.cpp index 05473fe..2afea5a 100644 --- a/src/sqlgeneratorbase.cpp +++ b/src/sqlgeneratorbase.cpp @@ -379,8 +379,8 @@ QString SqlGeneratorBase::selectCommand(QString selectPhrase, QList + 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; } diff --git a/src/tablemodel.cpp b/src/tablemodel.cpp index 9abe7df..cc3f9cf 100644 --- a/src/tablemodel.cpp +++ b/src/tablemodel.cpp @@ -90,6 +90,11 @@ QStringList TableModel::fieldsNames() const return ret; } +QSet 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()"<type = fieldProperty.type(); + fieldObj->typeName = QString(fieldProperty.typeName()); +// qDebug() <<"fieldProperty.type()" +// <type; } // Browse class infos diff --git a/src/tablemodel.h b/src/tablemodel.h index 3ae341c..36f040e 100644 --- a/src/tablemodel.h +++ b/src/tablemodel.h @@ -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 foregionKeys() const; QStringList fieldsNames() const; + static QSet allModels(); static TableModel *findByTypeId(int typeId); static TableModel *findByName(QString name); static TableModel *findByClassName(QString className); diff --git a/src/wherephrase.cpp b/src/wherephrase.cpp index 82e9ad0..a4af1f9 100644 --- a/src/wherephrase.cpp +++ b/src/wherephrase.cpp @@ -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";