commit a604a5a21754089497e7d645f4dcfc094528f674
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Wed Mar 25 11:59:31 2015 +0100

    ...

diff --git a/example/.gitignore b/example/.gitignore
new file mode 100644
index 0000000..1e75006
--- /dev/null
+++ b/example/.gitignore
@@ -0,0 +1,2 @@
+*.pro.user
+*build
diff --git a/src/database.cpp b/src/database.cpp
index 5b64d81..584b02f 100644
--- a/src/database.cpp
+++ b/src/database.cpp
@@ -52,7 +52,7 @@ void Database::init() {
 }
 
 
-int Database::getDatabaseType() {
+DatabaseType Database::getDatabaseType() {
     return CuteEntityManager::getDatabaseType(this->database.driverName());
 }
 
diff --git a/src/database.h b/src/database.h
index d8f42e4..fbf7b48 100644
--- a/src/database.h
+++ b/src/database.h
@@ -77,7 +77,7 @@ public:
     void refreshTableList();
     bool containsTable(QString tblname);
     bool updateSequenceCounter(QSqlQuery &q);
-    int getDatabaseType();
+    DatabaseType getDatabaseType();
     QChar escapeChar();
 };
 }
diff --git a/src/enums/databasetype.h b/src/enums/databasetype.h
index ce874e5..3ca383c 100644
--- a/src/enums/databasetype.h
+++ b/src/enums/databasetype.h
@@ -19,6 +19,10 @@
 #include <QString>
 #include "../schema.h"
 #include "../schema/sqliteschema.h"
+#include "../schema/pgsqlschema.h"
+#include "../schema/mysqlschema.h"
+#include <memory>
+
 namespace CuteEntityManager {
 enum DatabaseType {
     SQLITE=0,
@@ -26,25 +30,29 @@ enum DatabaseType {
     MYSQL=2
 };
 
-static const int getDatabaseType(QString s) {
+static const DatabaseType getDatabaseType(QString s) {
     if(s == "qmysql") {
         return CuteEntityManager::MYSQL;
     } else if(s == "qpgsql") {
         return CuteEntityManager::PGSQL;
-    } else if(s == "qsqlite"){
+    } else {
         return CuteEntityManager::SQLITE;
     }
 }
 
-static const Schema getSchema(int db) {
+static const std::shared_ptr<Schema> getSchema(int db) {
     switch (db) {
     case SQLITE:
-        return SqliteSchema();
+        return std::shared_ptr<Schema>(new SqliteSchema());
         break;
     case PGSQL:
+        return std::shared_ptr<Schema>(new PgSqlSchema());
+        break;
     case MYSQL:
+        return std::shared_ptr<Schema>(new MysqlSchema());
+        break;
     default:
-        return SqliteSchema();
+        return std::shared_ptr<Schema>(new SqliteSchema());
         break;
     }
 }
diff --git a/src/schema.cpp b/src/schema.cpp
index fd32749..2ac10cc 100644
--- a/src/schema.cpp
+++ b/src/schema.cpp
@@ -9,3 +9,12 @@ Schema::~Schema() {
 
 }
 
+QString Schema::quoteSimpleTableName(QString name) {
+    //    return strpos($name, "`") !== false ? $name : "`" . $name . "`";
+}
+
+QString Schema::quoteSimpleColumnName(QString name)
+{
+//return strpos($name, '`') !== false || $name === '*' ? $name : '`' . $name . '`';
+}
+
diff --git a/src/schema.h b/src/schema.h
index 9ff87a4..71f2753 100644
--- a/src/schema.h
+++ b/src/schema.h
@@ -28,7 +28,31 @@ public:
     const QString TYPE_BINARY = "binary";
     const QString TYPE_BOOLEAN = "boolean";
     const QString TYPE_MONEY = "money";
+
+    //    /**
+    //     * @var array list of ALL table names in the database
+    //     */
+    //    private $_tableNames = [];
+    //    /**
+    //     * @var array list of loaded table metadata (table name => TableSchema)
+    //     */
+    //    private $_tables = [];
+    //    /**
+    //     * @var QueryBuilder the query builder for this database
+    //     */
+    //    private $_builder;
+
+
     virtual QHash<QString, QString> *getTypeMap() = 0;
+    virtual QString quoteSimpleTableName(QString name);
+    virtual QString quoteSimpleColumnName(QString name);
+    virtual QList<TableSchema> getTableSchemas(QString schema = "", bool refresh = false);
+    virtual QList<QString> getTableNames(QString schema = "", $refresh = false);
+    //virtual QueryBuilder getQueryBuilder();
+    //virtual QueryBuilder createQueryBuilder();
+    virtual QList<QString> findUniqueIndexes(TableSchema schema);
+    virtual QString getLastInsertID(QString sequenceName = "");
+    virtual void refresh();
 
 protected:
     virtual QList<QString> findTableNames(QString schema = "");
@@ -37,6 +61,9 @@ protected:
     virtual QString getCreateTableSql(TableSchema ts);
     virtual bool findColumns(TableSchema ts);
     QSharedPointer<QHash<QString, QString>> typeMap;
+    virtual TableSchema loadTableSchema(QString name)  = 0;
+    virtual TableSchema getTableSchema(QString name, bool refresh = false);
+    virtual QList<QString> findTableNames(QString schema = "");
 
 };
 }
