commit b0e92bc613953f25368ba575d62528e10b025a53
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sun Jun 21 23:13:52 2015 +0200

    fks

diff --git a/src/querybuilder.cpp b/src/querybuilder.cpp
index aea5622..137c8d6 100644
--- a/src/querybuilder.cpp
+++ b/src/querybuilder.cpp
@@ -70,26 +70,32 @@ bool QueryBuilder::createIndices(const QSharedPointer<Entity> &entity) const {
 QStringList QueryBuilder::relationFks(const QSharedPointer<Entity> &entity)
 const {
     QStringList queries = QStringList();
-    auto relations = entity.data()->getNonInheritedRelations();
-    auto props = entity.data()->getMetaProperties();
-    auto iterator = relations.constBegin();
-    while (iterator != relations.constEnd()) {
-        auto relation = iterator.value();
-        if (relation.getMappedBy().isEmpty() && !relation.getCascadeType().isEmpty()) {
-            QString update = relation.getCascadeType().contains(MERGE)
-                             || relation.getCascadeType().contains(ALL) ?  this->getForeignKeyCascade(
-                                 CASCADE) : this->getForeignKeyCascade(NO_ACTION);
-            QString remove = relation.getCascadeType().contains(REMOVE)
-                             || relation.getCascadeType().contains(ALL) ?  this->getForeignKeyCascade(
-                                 CASCADE) : this->getForeignKeyCascade(SET_NULL);
-            this->createRelationFK(queries, entity, relation,
-                                   props.value(relation.getPropertyName()), update, remove);
+    if (this->supportsForeignKeys()) {
+        auto relations = entity.data()->getNonInheritedRelations();
+        auto props = entity.data()->getMetaProperties();
+        auto iterator = relations.constBegin();
+        while (iterator != relations.constEnd()) {
+            auto relation = iterator.value();
+            if (relation.getMappedBy().isEmpty() && !relation.getCascadeType().isEmpty()) {
+                QString update = relation.getCascadeType().contains(MERGE)
+                                 || relation.getCascadeType().contains(ALL) ?  this->getForeignKeyCascade(
+                                     CASCADE) : this->getForeignKeyCascade(NO_ACTION);
+                QString remove = relation.getCascadeType().contains(REMOVE)
+                                 || relation.getCascadeType().contains(ALL) ?  this->getForeignKeyCascade(
+                                     CASCADE) : this->getForeignKeyCascade(SET_NULL);
+                this->createRelationFK(queries, entity, relation,
+                                       props.value(relation.getPropertyName()), update, remove);
+            }
+            ++iterator;
         }
-        ++iterator;
     }
     return queries;
 }
 
+bool QueryBuilder::supportsForeignKeys() const {
+    return true;
+}
+
 void QueryBuilder::createRelationFK(QStringList &queries,
                                     const QSharedPointer<Entity> &entity, const Relation &relation,
                                     const QMetaProperty &metaProperty, const QString &update,
diff --git a/src/querybuilder.h b/src/querybuilder.h
index ce5f262..3ab4b3f 100644
--- a/src/querybuilder.h
+++ b/src/querybuilder.h
@@ -78,6 +78,7 @@ class QueryBuilder {
             &props,
             const QSharedPointer<Entity> &entity) const;
     virtual QStringList relationFks(const QSharedPointer<Entity> &entity) const;
+    virtual bool supportsForeignKeys() const;
 
     virtual QString createForeignKeyManyToMany(const QString &tableName,
             const QSharedPointer<Entity> &entity, const QString &update,
diff --git a/src/schema/sqlitequerybuilder.cpp b/src/schema/sqlitequerybuilder.cpp
index 0e32d75..a625ab1 100644
--- a/src/schema/sqlitequerybuilder.cpp
+++ b/src/schema/sqlitequerybuilder.cpp
@@ -85,3 +85,7 @@ QString CuteEntityManager::SqliteQueryBuilder::dropPrimaryKey(QString name,
     //not supported
     return "";
 }
+
+bool CuteEntityManager::SqliteQueryBuilder::supportsForeignKeys() const {
+    return false;
+}
diff --git a/src/schema/sqlitequerybuilder.h b/src/schema/sqlitequerybuilder.h
index 3bee36d..3bfa518 100644
--- a/src/schema/sqlitequerybuilder.h
+++ b/src/schema/sqlitequerybuilder.h
@@ -38,7 +38,7 @@ class SqliteQueryBuilder : public QueryBuilder {
     virtual QString addPrimaryKey(QString name, QString tableName,
                                   QStringList columns) const;
     virtual QString dropPrimaryKey(QString name, QString tableName) const;
-
+    virtual bool supportsForeignKeys() const;
 };
 
 }
diff --git a/src/schema/sqliteschema.cpp b/src/schema/sqliteschema.cpp
index f815866..7c9c406 100644
--- a/src/schema/sqliteschema.cpp
+++ b/src/schema/sqliteschema.cpp
@@ -59,6 +59,7 @@ QSharedPointer<QHash<QString, QString>> SqliteSchema::getTypeMap() {
 }
 
 QStringList SqliteSchema::findTableNames(QString schema) {
+    Q_UNUSED(schema)
     auto l = QStringList();
     QString sql =
         "SELECT DISTINCT tbl_name FROM sqlite_master WHERE tbl_name<>'sqlite_sequence' ORDER BY tbl_name";
diff --git a/src/tableschema.cpp b/src/tableschema.cpp
index 42d7828..4bbf422 100644
--- a/src/tableschema.cpp
+++ b/src/tableschema.cpp
@@ -96,3 +96,9 @@ void TableSchema::setRelations(
     const QHash<QString, QSharedPointer<QSqlRelation> > &value) {
     relations = value;
 }
+
+QSharedPointer<QSqlRelationalTableModel> TableSchema::getTableModel() const {
+    QSqlRelationalTableModel *model = new QSqlRelationalTableModel;
+    model->setTable(this->getName());
+    return QSharedPointer<QSqlRelationalTableModel>(model);
+}
diff --git a/src/tableschema.h b/src/tableschema.h
index 9ecac26..fd98f26 100644
--- a/src/tableschema.h
+++ b/src/tableschema.h
@@ -22,6 +22,7 @@
 #include <QSharedPointer>
 #include <QSqlField>
 #include <QSqlRelation>
+#include <QSqlRelationalTableModel>
 namespace CuteEntityManager {
 
 class TableSchema {
@@ -52,6 +53,8 @@ class TableSchema {
     QHash<QString, QSharedPointer<QSqlRelation> > getRelations() const;
     void setRelations(const QHash<QString, QSharedPointer<QSqlRelation> > &value);
 
+    QSharedPointer<QSqlRelationalTableModel> getTableModel() const;
+
   private:
     QString schemaName;
     QString name;
@@ -60,6 +63,7 @@ class TableSchema {
     QString sequenceName;
     QHash<QString, QSharedPointer<QSqlRelation>>  relations;
     QHash<QString, QSharedPointer<QSqlField>> columns;
+
 };
 
 }
