commit e86c23a203116b2fb158dfef6b446252dda9a7fc
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sun Jun 28 19:40:28 2015 +0200

    quoting

diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index 9e730db..e60cce8 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -60,6 +60,9 @@ bool EntityManager::startup(QString version, QStringList toInitialize) {
     QHash<QString, QVariant> map = QHash<QString, QVariant>();
     bool ok = true;
     map.insert("version", version);
+    if(!this->schema.data()->getTableNames().contains(dbm->getTablename())) {
+        this->createTable(ptrDbm,true);
+    }
     if (this->findAllByAttributes(map, dbm->getTablename()).isEmpty()) {
         for (int var = 0; var < toInitialize.size(); ++var) {
             if (ok) {
@@ -76,7 +79,6 @@ bool EntityManager::startup(QString version, QStringList toInitialize) {
             this->create(ptrDbm);
         }
     }
-    delete dbm;
     return ok;
 }
 
@@ -748,8 +750,8 @@ bool EntityManager::removeAll(QString tblname) {
     return this->schema.data()->getQueryBuilder().data()->removeAll(tblname).exec();
 }
 
-bool EntityManager::createTable(const QSharedPointer<Entity> &entity) {
-    return this->schema.data()->getQueryBuilder().data()->createTable(entity);
+bool EntityManager::createTable(const QSharedPointer<Entity> &entity,bool createRelationTables) {
+    return this->schema.data()->getQueryBuilder().data()->createTable(entity,createRelationTables);
 }
 
 qint8 EntityManager::count(const QSharedPointer<Entity> &entity,
diff --git a/src/entitymanager.h b/src/entitymanager.h
index 6bdc64d..206a746 100644
--- a/src/entitymanager.h
+++ b/src/entitymanager.h
@@ -136,7 +136,7 @@ class EntityManager : public QObject {
     bool merge(QSharedPointer<Entity> &entity, bool withRelations = true);
     bool remove(QSharedPointer<Entity> &entity);
     bool removeAll(QString tblname);
-    bool createTable(const QSharedPointer<Entity> &entity);
+    bool createTable(const QSharedPointer<Entity> &entity, bool createRelationTables=true);
     qint8 count(const QSharedPointer<Entity> &entity, bool ignoreID = true);
     qint8 count(const QString &tableName);
     QSharedPointer<Database> getDb() const;
diff --git a/src/querybuilder.cpp b/src/querybuilder.cpp
index 8d65057..fef88e7 100644
--- a/src/querybuilder.cpp
+++ b/src/querybuilder.cpp
@@ -31,7 +31,7 @@ QueryBuilder::QueryBuilder(QSharedPointer<Schema> schema,
 QueryBuilder::~QueryBuilder() {
 }
 
-bool QueryBuilder::createTable(const QSharedPointer<Entity> &entity) const {
+bool QueryBuilder::createTable(const QSharedPointer<Entity> &entity, bool createRelationTables) const {
     bool rc = false;
     if (entity.data()) {
         auto tableDefinition = this->generateTableDefinition(entity);
@@ -40,7 +40,17 @@ bool QueryBuilder::createTable(const QSharedPointer<Entity> &entity) const {
         if (!rc) {
             QSqlQuery q = this->database.data()->getQuery(this->createTable(tableName,
                           tableDefinition));
+
+
             if (this->database.data()->transaction(q)) {
+                if(createRelationTables) {
+                    auto relTables = this->generateRelationTables(entity);
+                    auto i = relTables.constBegin();
+                    while(i != relTables.constEnd()) {
+                        this->createTable(i.key(),i.value());
+                        ++i;
+                    }
+                }
                 this->schema.data()->getTableSchema(tableName);
                 rc = true;
                 if (rc) {
@@ -523,7 +533,7 @@ QSqlQuery QueryBuilder::find(const qint64 &id,
                              const QSharedPointer<Entity> &entity, qint64 offset, QString pk) const {
     QSqlQuery q = this->database.data()->getQuery(this->selectBase(QStringList(
                       entity.data()->getTablename())) + this->joinSuperClasses(
-                      entity) + " WHERE " + pk + "= :id" + this->limit(1, offset));
+                      entity) + " WHERE " + this->schema.data()->quoteColumnName(pk) + "= :id" + this->limit(1, offset));
     q.bindValue(":id", id);
     return q;
 }
diff --git a/src/querybuilder.h b/src/querybuilder.h
index a70248e..77e4744 100644
--- a/src/querybuilder.h
+++ b/src/querybuilder.h
@@ -40,7 +40,7 @@ class QueryBuilder {
   public:
     QueryBuilder(QSharedPointer<Schema> schema, QSharedPointer<Database> database);
     virtual ~QueryBuilder();
-    virtual bool createTable(const QSharedPointer<Entity> &entity) const;
+    virtual bool createTable(const QSharedPointer<Entity> &entity, bool createRelationTables=true) const;
     virtual bool createIndices(const QSharedPointer<Entity> &entity) const;
     virtual QString createTable(const QString &tableName,
                                 const QHash<QString, QString> &tableDefinition) const;
