commit a42de475baab93158e436299dc0f3e69206ddbb6
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Sun Sep 25 21:25:59 2016 +0200

    refs #621

diff --git a/src/entitymanager.h b/src/entitymanager.h
index 5b8506b..e55ee71 100644
--- a/src/entitymanager.h
+++ b/src/entitymanager.h
@@ -153,6 +153,26 @@ class EntityManager : public QObject {
         return QList<QSharedPointer<T>>();
     }
 
+    template<class T> quint32 countEntities(Query &q, const bool joinBaseClasses = true) {
+        auto instance = QSharedPointer<Entity>(EntityInstanceFactory::createInstance<T *>());
+        quint32 count = 0;
+        if (instance) {
+            if (q.getFrom().isEmpty()) {
+                q.setFrom(QStringList(instance->getTablename()));
+            }
+            if (joinBaseClasses) {
+                q.appendJoins(this->schema->getQueryBuilder()->joinBaseClasses(instance));
+            }
+            q.appendSelect("COUNT(*)");
+            QSqlQuery query = this->queryInterpreter->build(q);
+            this->db->select(query);
+            if (query.next()) {
+                count = query.value(0).toInt();
+            }
+        }
+        return count;
+    }
+
     template<class T>
     bool remove(QSharedPointer<T> &entity) {
         static_assert(std::is_base_of<Entity, T>::value, "T must inherit from Entity");
diff --git a/tests/em/tst_em.cpp b/tests/em/tst_em.cpp
index 5e68291..132d8d9 100644
--- a/tests/em/tst_em.cpp
+++ b/tests/em/tst_em.cpp
@@ -72,6 +72,12 @@ void EmTest::testDatabaseMigrationTable() {
     }
 }
 
+void EmTest::testCountEntities() {
+    Query q = Query();
+    auto count = this->e->countEntities<DatabaseMigration>(q, true);
+    QCOMPARE(count, (unsigned int)1);
+}
+
 void EmTest::testTableCreation() {
     auto tables = this->e->getSchema()->getTables();
     bool containsArticle = tables.contains("article");
diff --git a/tests/em/tst_em.h b/tests/em/tst_em.h
index 3915e80..b3c2ace 100644
--- a/tests/em/tst_em.h
+++ b/tests/em/tst_em.h
@@ -26,6 +26,7 @@ class EmTest : public QObject {
     void testInheritedRelations();
     void testNonCachedInheritedRelations();
     void testDatabaseMigrationTable();
+    void testCountEntities();
     void testTableCreation();
 
   private:
