commit ac5cbdcffe45328b9fb09889f827558572d27ad3
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Tue Jul 21 20:53:13 2015 +0200

    stackoverflow fix in em

diff --git a/EntityManager.pro b/EntityManager.pro
index 43744c0..b6d229c 100644
--- a/EntityManager.pro
+++ b/EntityManager.pro
@@ -47,3 +47,4 @@ unix {
     INSTALLS += target
 }
 CONFIG += c++14
+QMAKE_CXXFLAGS += -Wall -Wextra -Wuninitialized -Wmaybe-uninitialized -Wsuggest-final-types -Wstrict-overflow -Wsuggest-final-methods -Wsuggest-override -Wunsafe-loop-optimizations -Waddress
diff --git a/src/entity.cpp b/src/entity.cpp
index 807c9ba..8dfb687 100644
--- a/src/entity.cpp
+++ b/src/entity.cpp
@@ -35,8 +35,8 @@ QString Entity::toString() const {
         } else if (value.canConvert<QList<QVariant>>()) {
             auto list = value.toList();
             val.append("[");
-            for (int var = 0; var < list.size(); ++var) {
-                val = list.at(var).toString();
+            for (int i = 0; i < list.size(); ++i) {
+                val = list.at(i).toString();
             }
             val.append("]");
         } else {
diff --git a/src/entitymanager.h b/src/entitymanager.h
index d99d4d8..ade7c6d 100644
--- a/src/entitymanager.h
+++ b/src/entitymanager.h
@@ -83,7 +83,7 @@ class EntityManager : public QObject {
      */
   public:
     template<class T> qint8 count(QHash<QString, QString> condition =
-                                      QHash<QString, QString>()) {
+                                      QHash<QString, QVariant>()) {
         Entity *e = EntityInstanceFactory::createInstance<T>();
         qint8 rc = 0;
         if (e) {
@@ -98,8 +98,7 @@ class EntityManager : public QObject {
                                      (EntityInstanceFactory::createInstance<T>());
         if (ptr) {
             auto maps = this->findAll(ptr);
-            const char *className = ptr.data()->getClassname();
-            return this->convert(maps, className);
+            return this->convert(maps, ptr->getClassname());
         }
         return QList<QSharedPointer<Entity>>();
     }
@@ -111,7 +110,7 @@ class EntityManager : public QObject {
     }
 
     template<class T> QSharedPointer<Entity> findEntityByAttributes(
-        const QHash<QString, QString>
+        const QHash<QString, QVariant>
         &attributes) {
         auto list = this->findAllEntitiesByAttributes<T>(attributes, 1, 0);
         if (list.isEmpty()) {
@@ -121,10 +120,16 @@ class EntityManager : public QObject {
     }
 
     template<class T> QList<QSharedPointer<Entity>> findAllEntitiesByAttributes(
-                const QHash<QString, QString> &attributes =
+                const QHash<QString, QVariant> &attributes =
     QHash<QString, QString>(), quint32 limit = 0, quint32 offset = 0) {
-        auto list = this->findAllEntitiesByAttributes<T>(attributes);
-        return list;
+        QSharedPointer<Entity> e = QSharedPointer<Entity>
+                                   (EntityInstanceFactory::createInstance<T>());
+        if (e) {
+            auto results = this->findAllByAttributes(attributes, e->getTablename());
+            auto list = this->convert(results, e->getClassname());
+            return list;
+        }
+        return QList<QSharedPointer<Entity>>();
     }
 
     template<class T> QList<QSharedPointer<Entity>> findEntitiesBySql(
diff --git a/src/schema/sqlitequerybuilder.h b/src/schema/sqlitequerybuilder.h
index cf2f28f..ba6240a 100644
--- a/src/schema/sqlitequerybuilder.h
+++ b/src/schema/sqlitequerybuilder.h
@@ -23,22 +23,23 @@ class SqliteQueryBuilder : public QueryBuilder {
                        QSharedPointer<Database> database);
     ~SqliteQueryBuilder();
 
-    virtual QString truncateTable(QString tableName) const;
-    virtual QString dropIndex(QString name, QString tableName) const;
-    virtual QString dropColumn(QString tableName, QString columnName)const;
+    virtual QString truncateTable(QString tableName) const override;
+    virtual QString dropIndex(QString name, QString tableName) const override;
+    virtual QString dropColumn(QString tableName, QString columnName)const override;
     virtual QString renameColumn(QString tableName, QString oldName,
-                                 QString newName) const;
-    virtual QString addForeignKey(QString name, QString tableName, QStringList columns,
+                                 QString newName) const override;
+    virtual QString addForeignKey(QString name, QString tableName,
+                                  QStringList columns,
                                   QString refTableName,
                                   QStringList refColumns, QString deleteConstraint,
-                                  QString updateConstraint) const;
-    virtual QString dropForeignKey(QString name, QString tableName) const;
+                                  QString updateConstraint) const override;
+    virtual QString dropForeignKey(QString name, QString tableName) const override;
     virtual QString alterColumn(QString tableName, QString columnName,
-                                QString newType) const;
+                                QString newType) const override;
     virtual QString addPrimaryKey(QString name, QString tableName,
-                                  QStringList columns) const;
-    virtual QString dropPrimaryKey(QString name, QString tableName) const;
-    virtual bool supportsForeignKeys() const;
+                                  QStringList columns) const override;
+    virtual QString dropPrimaryKey(QString name, QString tableName) const override;
+    virtual bool supportsForeignKeys() const override;
 };
 
 }
diff --git a/src/schema/sqliteschema.h b/src/schema/sqliteschema.h
index ee089c9..cf1e4d1 100644
--- a/src/schema/sqliteschema.h
+++ b/src/schema/sqliteschema.h
@@ -22,15 +22,16 @@ class SqliteSchema : public Schema {
   public:
     SqliteSchema(QSharedPointer<Database> database);
     ~SqliteSchema();
-    QSharedPointer<QHash<QString, QString> > getTypeMap();
+    QSharedPointer<QHash<QString, QString> > getTypeMap() override;
   protected:
 
-    virtual QStringList findTableNames(QString schema = "");
-    virtual QHash<QString, QStringList> findUniqueIndexes(const QSharedPointer<TableSchema>
-            &table);
-    virtual void findConstraints(const QSharedPointer<TableSchema> &ts);
-    virtual bool findColumns(const QSharedPointer<TableSchema> &ts);
-    virtual QSharedPointer<TableSchema> loadTableSchema(QString name);
+    virtual QStringList findTableNames(QString schema = "") override;
+    virtual QHash<QString, QStringList> findUniqueIndexes(const
+            QSharedPointer<TableSchema>
+            &table) override;
+    virtual void findConstraints(const QSharedPointer<TableSchema> &ts) override;
+    virtual bool findColumns(const QSharedPointer<TableSchema> &ts) override;
+    virtual QSharedPointer<TableSchema> loadTableSchema(QString name) override;
 };
 }
 #endif // SQLITESCHEMA_H
