commit 1e213c091347cfd9cbd2c50354e234b5b0ef42dd
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Tue Apr 28 21:16:48 2015 +0200

    ...

diff --git a/src/databasemigration.cpp b/src/databasemigration.cpp
index cada894..7875df9 100644
--- a/src/databasemigration.cpp
+++ b/src/databasemigration.cpp
@@ -5,6 +5,11 @@ DatabaseMigration::DatabaseMigration() : Entity() {
 
 }
 
+DatabaseMigration::DatabaseMigration(QString version, QDateTime applyTime) {
+    this->version = version;
+    this->applyTime = applyTime;
+}
+
 DatabaseMigration::~DatabaseMigration() {
 
 }
diff --git a/src/databasemigration.h b/src/databasemigration.h
index 5d51b43..3da47cb 100644
--- a/src/databasemigration.h
+++ b/src/databasemigration.h
@@ -11,6 +11,7 @@ class DatabaseMigration : public Entity {
 
   public:
     DatabaseMigration();
+    DatabaseMigration(QString version, QDateTime applyTime);
     ~DatabaseMigration();
     QString getVersion() const;
     void setVersion(const QString &value);
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index 828cdd8..90f659c 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -17,6 +17,7 @@
 #include "entitymanager.h"
 #include "enums/databasetype.h"
 #include "entityinstancefactory.h"
+#include "databasemigration.h"
 using namespace CuteEntityManager;
 
 QStringList EntityManager::connectionNames = QStringList();
@@ -34,6 +35,13 @@ EntityManager::EntityManager(QSqlDatabase database) {
     this->init();
 }
 
+bool EntityManager::startup(QString version, QStringList toInitialize) {
+    DatabaseMigration dbm = DatabaseMigration();
+    QHash<QString, QVariant> map = QHash<QString, QVariant>();
+    map.insert("version", version);
+    this->findAllByAttributes(map, dbm.getTablename());
+}
+
 EntityManager::EntityManager(const QString &databaseType, QString databasename , QString hostname, QString username,
                              QString password, QString port) {
     auto db = new Database(databaseType, this->createConnection(), hostname, databasename, username, password,
@@ -117,7 +125,7 @@ QSharedPointer<Entity> EntityManager::findEntity(QSharedPointer<Entity> entity)
 
 QList<QSharedPointer<Entity> > EntityManager::findEntityByAttributes(const QSharedPointer<Entity> &entity,
         bool ignoreID) {
-    auto maps = this->findByAttributes(entity, ignoreID);
+    auto maps = this->findAllByAttributes(entity, ignoreID);
     return this->convert(maps, entity.data()->getClassname());
 }
 
@@ -164,12 +172,13 @@ QHash<QString, QVariant> EntityManager::find(qint64 id, QString tblname) {
 }
 
 
-QList<QHash<QString, QVariant> > EntityManager::findByAttributes(const QSharedPointer<Entity> &entity, bool ignoreID) {
+QList<QHash<QString, QVariant> > EntityManager::findAllByAttributes(const QSharedPointer<Entity> &entity,
+        bool ignoreID) {
     QSqlQuery q = this->schema.data()->getQueryBuilder().data()->findByAttributes(entity, ignoreID);
     return this->convertQueryResult(q);
 }
 
-QList<QHash <QString, QVariant> > EntityManager::findByAttributes(const QHash<QString, QVariant> &m,
+QList<QHash <QString, QVariant> > EntityManager::findAllByAttributes(const QHash<QString, QVariant> &m,
         const QString &tblname,
         bool ignoreID) {
     QSqlQuery q = this->schema.data()->getQueryBuilder().data()->findByAttributes(m,
diff --git a/src/entitymanager.h b/src/entitymanager.h
index 906141e..7e40245 100644
--- a/src/entitymanager.h
+++ b/src/entitymanager.h
@@ -50,10 +50,10 @@ class EntityManager {
     QHash<QString, QVariant> find(QSharedPointer<Entity> entity);
     QHash<QString, QVariant> find(qint64 id, QString tblname);
     QSharedPointer<Entity> convert(const QHash<QString, QVariant> &map, const char *classname);
-    QList<QSharedPointer<Entity>> convert(QList<QHash<QString, QVariant> > maps,const char *classname);
+    QList<QSharedPointer<Entity>> convert(QList<QHash<QString, QVariant> > maps, const char *classname);
 
-    QList<QHash<QString, QVariant> > findByAttributes(const QSharedPointer<Entity> &entity, bool ignoreID = false);
-    QList<QHash<QString, QVariant> > findByAttributes(const QHash<QString, QVariant> &m, const QString &tblname,
+    QList<QHash<QString, QVariant> > findAllByAttributes(const QSharedPointer<Entity> &entity, bool ignoreID = false);
+    QList<QHash<QString, QVariant> > findAllByAttributes(const QHash<QString, QVariant> &m, const QString &tblname,
             bool ignoreID = false);
 
   public:
@@ -62,6 +62,13 @@ class EntityManager {
                   QString password = "", QString port = "");
     ~EntityManager();
     static QStringList getConnectionNames();
+    /**
+     * @brief startup
+     * @param version must be unique
+     * @param toInitialize list of entity classnames which database tables should be created
+     * @return
+     */
+    bool startup(QString version, QStringList toInitialize);
     static void removeConnectionName(const QString &name);
     QList<QSharedPointer<Entity>> findAllEntities(QSharedPointer<Entity> entity);
     QSharedPointer<Entity> findEntity(QSharedPointer<Entity> entity);
diff --git a/src/querybuilder.cpp b/src/querybuilder.cpp
index c6e2b21..b19f992 100644
--- a/src/querybuilder.cpp
+++ b/src/querybuilder.cpp
@@ -367,6 +367,10 @@ QSqlQuery QueryBuilder::create(const QSharedPointer<Entity> &entity) const {
     return q;
 }
 
+QString QueryBuilder::limit(const qint8 limit, const qint64 offset) const {
+    return " LIMIT " + QString(limit) + (offset > 0 ? QString("," + offset) : "");
+}
+
 QHash<QString, QVariant> QueryBuilder::saveAttributes(const QSharedPointer<Entity> &entity) const {
     auto props = entity.data()->getMetaProperties();
     auto values = this->getEntityAttributes(props, entity);
diff --git a/src/querybuilder.h b/src/querybuilder.h
index 1e633cd..1d41f57 100644
--- a/src/querybuilder.h
+++ b/src/querybuilder.h
@@ -56,6 +56,7 @@ class QueryBuilder {
     QSqlQuery count(const QString &tableName) const;
     QSqlQuery merge(const QSharedPointer<Entity> &entity) const;
     QSqlQuery create(const QSharedPointer<Entity> &entity) const;
+    virtual QString limit(const qint8 limit, const qint64 offset) const;
 
   protected:
     void insertRelationId(const Entity *e, QHash<QString, QVariant> &map, QString relName) const;
