commit d568923d44b6f1f608722a170f216ff6de81d07c
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Thu Apr 30 15:44:07 2015 +0200

    example compiles, persisting of entities without relations works, added
    debug output for queries

diff --git a/example/main.cpp b/example/main.cpp
index 8033f1c..ca676dc 100644
--- a/example/main.cpp
+++ b/example/main.cpp
@@ -21,6 +21,7 @@ int main(int argc, char *argv[]) {
     auto ep = a.dynamicCast<CuteEntityManager::Entity>();
     qDebug() << e;
     qDebug() << "Tabelle artikel erstellt:" << e->createTable(ep);
+    e->create(ep);
 //    OpenTeacherTool::Artikel *b= new OpenTeacherTool::Artikel(30,"Peter123");
 //    OpenTeacherTool::Entity *entity = b->getEntity();
 //    qDebug() << "findByAttributes:" << e->findByAttributes(entity,true);
diff --git a/example/models/group.cpp b/example/models/group.cpp
index b6adf92..682cd90 100644
--- a/example/models/group.cpp
+++ b/example/models/group.cpp
@@ -62,7 +62,7 @@ void Group::personChangedSlot() {
 QHash<QString, CuteEntityManager::Relation> Group::getRelations()
 {
     QHash<QString, CuteEntityManager::Relation> h = QHash<QString, CuteEntityManager::Relation>();
-    CuteEntityManager::Relation r = CuteEntityManager::Relation("artikel",CuteEntityManager::BELONGS_TO);
+    CuteEntityManager::Relation r = CuteEntityManager::Relation("artikel",CuteEntityManager::MANY_TO_ONE);
     h.insert("artikel", r);
     return h;
 }
diff --git a/src/database.cpp b/src/database.cpp
index 8148b89..484d9e7 100644
--- a/src/database.cpp
+++ b/src/database.cpp
@@ -71,6 +71,7 @@ bool Database::transaction(const QString &query) {
     } else {
         rc = this->exec(query);
     }
+    qDebug() << "Executed Query:" << query;
     return rc;
 }
 
@@ -106,6 +107,7 @@ bool Database::transaction(const QStringList &queries) {
 bool Database::transaction(QSqlQuery &query) {
     this->database.transaction();
     query.exec();
+    this->debugQuery(query);
     if (!this->database.commit()) {
         this->database.rollback();
         return false;
@@ -119,6 +121,7 @@ bool Database::transaction(QList<QSqlQuery> &queries) {
     for (int var = 0; var < queries.size(); ++var) {
         q = queries.at(var);
         q.exec();
+        this->debugQuery(q);
     }
     if (!this->database.commit()) {
         this->database.rollback();
@@ -127,10 +130,11 @@ bool Database::transaction(QList<QSqlQuery> &queries) {
     return true;
 }
 
-bool Database::exec(QString query) {
+bool Database::exec(const QString &query) {
     this->database.transaction();
     QSqlQuery q = QSqlQuery(this->database);
     q.exec(query);
+    this->debugQuery(q);
     if (!this->database.commit()) {
         this->database.rollback();
         return false;
@@ -143,6 +147,7 @@ bool Database::exec(QStringList queries) {
     bool ok = true;
     for (int var = 0; var < queries.size() && ok; ++var) {
         ok = q.exec(queries.at(var));
+        this->debugQuery(q);
         if (!ok) {
             break;
         }
@@ -150,8 +155,10 @@ bool Database::exec(QStringList queries) {
     return ok;
 }
 
-bool Database::exec(QSqlQuery query) {
-    return query.exec();
+bool Database::exec(QSqlQuery &query) {
+    bool ok = query.exec();
+    this->debugQuery(query);
+    return ok;
 }
 
 bool Database::exec(QList<QSqlQuery> queries) {
@@ -160,6 +167,7 @@ bool Database::exec(QList<QSqlQuery> queries) {
     for (int var = 0; var < queries.size() && ok; ++var) {
         q = queries.at(var);
         ok = q.exec();
+        this->debugQuery(q);
         if (!ok) {
             break;
         }
@@ -167,14 +175,21 @@ bool Database::exec(QList<QSqlQuery> queries) {
     return ok;
 }
 
+void Database::debugQuery(const QSqlQuery &query) const {
+    qDebug() << query.executedQuery();
+}
+
 bool Database::select(QSqlQuery &query) {
     query.setForwardOnly(true);
-    return query.exec();
+    bool ok  = query.exec();
+    this->debugQuery(query);
+    return ok;
 }
 
 QSqlQuery Database::select(const QString &query) {
     QSqlQuery q = QSqlQuery(this->database);
     q.exec(query);
+    this->debugQuery(q);
     return q;
 }
 
diff --git a/src/database.h b/src/database.h
index 1121fcb..d7fbb3d 100644
--- a/src/database.h
+++ b/src/database.h
@@ -51,10 +51,11 @@ class Database {
     bool transaction(const QStringList &queries);
     bool transaction(QSqlQuery &query);
     bool transaction(QList<QSqlQuery> &queries);
-    bool exec(QString query);
+    bool exec(const QString &query);
     bool exec(QStringList queries);
-    bool exec(QSqlQuery query);
+    bool exec(QSqlQuery &query);
     bool exec(QList<QSqlQuery> queries);
+    void debugQuery(const QSqlQuery &query) const;
     bool select(QSqlQuery &query);
     QSqlQuery select(const QString &query);
 
diff --git a/src/databasemigration.cpp b/src/databasemigration.cpp
index 7875df9..a9579fa 100644
--- a/src/databasemigration.cpp
+++ b/src/databasemigration.cpp
@@ -5,7 +5,7 @@ DatabaseMigration::DatabaseMigration() : Entity() {
 
 }
 
-DatabaseMigration::DatabaseMigration(QString version, QDateTime applyTime) {
+DatabaseMigration::DatabaseMigration(QString version, QDateTime applyTime) : Entity() {
     this->version = version;
     this->applyTime = applyTime;
 }
diff --git a/src/entityinstancefactory.cpp b/src/entityinstancefactory.cpp
index 48dc6fd..543da6c 100644
--- a/src/entityinstancefactory.cpp
+++ b/src/entityinstancefactory.cpp
@@ -10,6 +10,10 @@ Entity *EntityInstanceFactory::createInstance(const char *className) {
     return EntityInstanceFactory::createInstance(QMetaType::type(className));
 }
 
+Entity *EntityInstanceFactory::createInstance(const QString &className) {
+    return EntityInstanceFactory::createInstance(className.toUtf8().constData());
+}
+
 Entity *EntityInstanceFactory::createInstance(int id) {
     Entity *e = 0;
     if (id != -1) {
diff --git a/src/entityinstancefactory.h b/src/entityinstancefactory.h
index cc0deee..4a0637e 100644
--- a/src/entityinstancefactory.h
+++ b/src/entityinstancefactory.h
@@ -9,6 +9,7 @@ class Entity;
 class EntityInstanceFactory {
   public:
     static Entity *createInstance(const char *className);
+    static Entity *createInstance(const QString &className);
     static Entity *createInstance(int id);
     static Entity *createInstance(const char *className, const QHash<QString, QVariant> &attributes);
     static Entity *setAttributes(Entity *e, const QHash<QString, QVariant> &attributes, QHash<QString, QMetaProperty> metaprops);
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index 90f659c..984dbef 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -36,10 +36,20 @@ EntityManager::EntityManager(QSqlDatabase database) {
 }
 
 bool EntityManager::startup(QString version, QStringList toInitialize) {
-    DatabaseMigration dbm = DatabaseMigration();
+    DatabaseMigration *dbm = new DatabaseMigration();
+    QSharedPointer<Entity> ptrDbm = QSharedPointer<Entity>(dbm);
     QHash<QString, QVariant> map = QHash<QString, QVariant>();
     map.insert("version", version);
-    this->findAllByAttributes(map, dbm.getTablename());
+    if (this->findAllByAttributes(map, dbm->getTablename()).isEmpty()) {
+        for (int var = 0; var < toInitialize.size(); ++var) {
+            QString c = toInitialize.at(var);
+            this->createTable(QSharedPointer<Entity>(EntityInstanceFactory::createInstance(c)));
+        }
+        dbm->setVersion(version);
+        dbm->setApplyTime(QDateTime::currentDateTime());
+        this->create(ptrDbm);
+    }
+    delete dbm;
 }
 
 EntityManager::EntityManager(const QString &databaseType, QString databasename , QString hostname, QString username,
diff --git a/src/querybuilder.cpp b/src/querybuilder.cpp
index b19f992..23b052b 100644
--- a/src/querybuilder.cpp
+++ b/src/querybuilder.cpp
@@ -4,6 +4,7 @@
 #include <QMetaProperty>
 #include "entity.h"
 #include <QRegularExpression>
+#include "entityinstancefactory.h"
 
 using namespace CuteEntityManager;
 
@@ -207,7 +208,7 @@ const {
             h.insert("id", this->schema.data()->TYPE_BIGPK);
             h.insert(QString(entity.data()->metaObject()->className()) + QString("_id"), this->schema.data()->TYPE_BIGINT);
             auto m = props.value(r.getPropertyName());
-            Entity *e = this->createInstance(m.type());
+            Entity *e = EntityInstanceFactory::createInstance(m.type());
             QSharedPointer<Entity> ptr = QSharedPointer<Entity>(e);
             h.insert(QString(ptr.data()->metaObject()->className()) + QString("_id"),
                      this->schema.data()->TYPE_BIGINT);
diff --git a/src/querybuilder.h b/src/querybuilder.h
index 1d41f57..22c060e 100644
--- a/src/querybuilder.h
+++ b/src/querybuilder.h
@@ -73,8 +73,6 @@ class QueryBuilder {
     QString where(const QHash<QString, QVariant> &m, const QString &conjunction = ",", bool ignoreID = false) const;
     QString attributes(const QHash<QString, QVariant> &m, const QString &conjunction = ",", bool ignoreID = false) const;
     QHash<QString, QVariant> saveAttributes(const QSharedPointer<Entity> &entity) const;
-    Entity* createInstance(const char *className) const;
-    Entity* createInstance(int id) const;
 
     QSharedPointer<Schema> schema;
     QSharedPointer<Database> database;
