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