commit b0b8dac34ab36a7dce4fe7b24e0497086f24c8cc
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Tue Mar 24 21:22:57 2015 +0100

    ...

diff --git a/EntityManager.pro b/EntityManager.pro
index 79bf3d2..c51cb5f 100644
--- a/EntityManager.pro
+++ b/EntityManager.pro
@@ -21,7 +21,9 @@ src/entity.h \
     src/schema.h \
     src/schema/sqliteschema.h \
     src/tableschema.h \
-    src/columnschema.h
+    src/columnschema.h \
+    src/schema/pgsqlschema.h \
+    src/schema/mysqlschema.h
 
 SOURCES += \
 src/entity.cpp \
@@ -30,7 +32,9 @@ src/entity.cpp \
     src/schema.cpp \
     src/schema/sqliteschema.cpp \
     src/tableschema.cpp \
-    src/columnschema.cpp
+    src/columnschema.cpp \
+    src/schema/pgsqlschema.cpp \
+    src/schema/mysqlschema.cpp
 
 unix {
     target.path = /usr/lib
diff --git a/build-Example-Desktop-Debug/Makefile b/build-Example-Desktop-Debug/Makefile
new file mode 100644
index 0000000..0edac80
--- /dev/null
+++ b/build-Example-Desktop-Debug/Makefile
@@ -0,0 +1,624 @@
+#############################################################################
+# Makefile for building: EntityManager
+# Generated by qmake (3.0) (Qt 5.4.1)
+# Project:  ../example/Example.pro
+# Template: app
+# Command: /usr/lib/qt/bin/qmake -spec linux-g++ CONFIG+=debug -o Makefile ../example/Example.pro
+#############################################################################
+
+MAKEFILE      = Makefile
+
+####### Compiler, tools and options
+
+CC            = gcc
+CXX           = g++
+DEFINES       = -DQT_SQL_LIB -DQT_CORE_LIB
+CFLAGS        = -pipe -g -Wall -W -D_REENTRANT -fPIE $(DEFINES)
+CXXFLAGS      = -pipe -g -Wall -W -D_REENTRANT -fPIE $(DEFINES)
+INCPATH       = -I../example -I. -isystem /usr/include/qt -isystem /usr/include/qt/QtSql -isystem /usr/include/qt/QtCore -I. -I/usr/lib/qt/mkspecs/linux-g++
+QMAKE         = /usr/lib/qt/bin/qmake
+DEL_FILE      = rm -f
+CHK_DIR_EXISTS= test -d
+MKDIR         = mkdir -p
+COPY          = cp -f
+COPY_FILE     = cp -f
+COPY_DIR      = cp -f -R
+INSTALL_FILE  = install -m 644 -p
+INSTALL_PROGRAM = install -m 755 -p
+INSTALL_DIR   = $(COPY_DIR)
+DEL_FILE      = rm -f
+SYMLINK       = ln -f -s
+DEL_DIR       = rmdir
+MOVE          = mv -f
+TAR           = tar -cf
+COMPRESS      = gzip -9f
+DISTNAME      = EntityManager1.0.0
+DISTDIR = /home/cehringfeld/gitrepos/entitymanager/example/.tmp/EntityManager1.0.0
+LINK          = g++
+LFLAGS        = 
+LIBS          = $(SUBLIBS) -lQt5Sql -lQt5Core -lpthread 
+AR            = ar cqs
+RANLIB        = 
+SED           = sed
+STRIP         = strip
+
+####### Output directory
+
+OBJECTS_DIR   = ./
+
+####### Files
+
+SOURCES       = ../example/models/artikel.cpp 
+OBJECTS       = artikel.o
+DIST          = /usr/lib/qt/mkspecs/features/spec_pre.prf \
+		/usr/lib/qt/mkspecs/common/shell-unix.conf \
+		/usr/lib/qt/mkspecs/common/unix.conf \
+		/usr/lib/qt/mkspecs/common/linux.conf \
+		/usr/lib/qt/mkspecs/common/gcc-base.conf \
+		/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
+		/usr/lib/qt/mkspecs/common/g++-base.conf \
+		/usr/lib/qt/mkspecs/common/g++-unix.conf \
+		/usr/lib/qt/mkspecs/qconfig.pri \
+		/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KActivities.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDESu.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KHtml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJS.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJsEmbed.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KRunner.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KScreen.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KService.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_declarative.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_declarative_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_platformsupport_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
+		/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
+		/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
+		/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \
+		/usr/lib/qt/mkspecs/features/qt_functions.prf \
+		/usr/lib/qt/mkspecs/features/qt_config.prf \
+		/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
+		/usr/lib/qt/mkspecs/features/spec_post.prf \
+		/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
+		/usr/lib/qt/mkspecs/features/default_pre.prf \
+		/usr/lib/qt/mkspecs/features/resolve_config.prf \
+		/usr/lib/qt/mkspecs/features/default_post.prf \
+		/usr/lib/qt/mkspecs/features/warn_on.prf \
+		/usr/lib/qt/mkspecs/features/qt.prf \
+		/usr/lib/qt/mkspecs/features/resources.prf \
+		/usr/lib/qt/mkspecs/features/moc.prf \
+		/usr/lib/qt/mkspecs/features/unix/thread.prf \
+		/usr/lib/qt/mkspecs/features/testcase_targets.prf \
+		/usr/lib/qt/mkspecs/features/exceptions.prf \
+		/usr/lib/qt/mkspecs/features/yacc.prf \
+		/usr/lib/qt/mkspecs/features/lex.prf \
+		../example/Example.pro ../example/models/artikel.h ../example/models/artikel.cpp
+QMAKE_TARGET  = EntityManager
+DESTDIR       = #avoid trailing-slash linebreak
+TARGET        = EntityManager
+
+
+first: all
+####### Implicit rules
+
+.SUFFIXES: .o .c .cpp .cc .cxx .C
+
+.cpp.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cc.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cxx.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.C.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.c.o:
+	$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
+
+####### Build rules
+
+$(TARGET):  $(OBJECTS)  
+	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+
+Makefile: ../example/Example.pro /usr/lib/qt/mkspecs/linux-g++/qmake.conf /usr/lib/qt/mkspecs/features/spec_pre.prf \
+		/usr/lib/qt/mkspecs/common/shell-unix.conf \
+		/usr/lib/qt/mkspecs/common/unix.conf \
+		/usr/lib/qt/mkspecs/common/linux.conf \
+		/usr/lib/qt/mkspecs/common/gcc-base.conf \
+		/usr/lib/qt/mkspecs/common/gcc-base-unix.conf \
+		/usr/lib/qt/mkspecs/common/g++-base.conf \
+		/usr/lib/qt/mkspecs/common/g++-unix.conf \
+		/usr/lib/qt/mkspecs/qconfig.pri \
+		/usr/lib/qt/mkspecs/modules/qt_Attica.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KActivities.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KArchive.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KAuth.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KCrash.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDESu.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KHtml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KI18n.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJS.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KJsEmbed.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KParts.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KPty.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KRunner.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KScreen.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KService.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWallet.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri \
+		/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_core.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_declarative.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_declarative_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_help.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_location.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_network.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_platformsupport_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_script.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri \
+		/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
+		/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri \
+		/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri \
+		/usr/lib/qt/mkspecs/modules/qt_Solid.pri \
+		/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri \
+		/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri \
+		/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri \
+		/usr/lib/qt/mkspecs/features/qt_functions.prf \
+		/usr/lib/qt/mkspecs/features/qt_config.prf \
+		/usr/lib/qt/mkspecs/linux-g++/qmake.conf \
+		/usr/lib/qt/mkspecs/features/spec_post.prf \
+		/usr/lib/qt/mkspecs/features/exclusive_builds.prf \
+		/usr/lib/qt/mkspecs/features/default_pre.prf \
+		/usr/lib/qt/mkspecs/features/resolve_config.prf \
+		/usr/lib/qt/mkspecs/features/default_post.prf \
+		/usr/lib/qt/mkspecs/features/warn_on.prf \
+		/usr/lib/qt/mkspecs/features/qt.prf \
+		/usr/lib/qt/mkspecs/features/resources.prf \
+		/usr/lib/qt/mkspecs/features/moc.prf \
+		/usr/lib/qt/mkspecs/features/unix/thread.prf \
+		/usr/lib/qt/mkspecs/features/testcase_targets.prf \
+		/usr/lib/qt/mkspecs/features/exceptions.prf \
+		/usr/lib/qt/mkspecs/features/yacc.prf \
+		/usr/lib/qt/mkspecs/features/lex.prf \
+		../example/Example.pro \
+		/usr/lib/libQt5Sql.prl \
+		/usr/lib/libQt5Core.prl
+	$(QMAKE) -spec linux-g++ CONFIG+=debug -o Makefile ../example/Example.pro
+/usr/lib/qt/mkspecs/features/spec_pre.prf:
+/usr/lib/qt/mkspecs/common/shell-unix.conf:
+/usr/lib/qt/mkspecs/common/unix.conf:
+/usr/lib/qt/mkspecs/common/linux.conf:
+/usr/lib/qt/mkspecs/common/gcc-base.conf:
+/usr/lib/qt/mkspecs/common/gcc-base-unix.conf:
+/usr/lib/qt/mkspecs/common/g++-base.conf:
+/usr/lib/qt/mkspecs/common/g++-unix.conf:
+/usr/lib/qt/mkspecs/qconfig.pri:
+/usr/lib/qt/mkspecs/modules/qt_Attica.pri:
+/usr/lib/qt/mkspecs/modules/qt_KActivities.pri:
+/usr/lib/qt/mkspecs/modules/qt_KArchive.pri:
+/usr/lib/qt/mkspecs/modules/qt_KAuth.pri:
+/usr/lib/qt/mkspecs/modules/qt_KBookmarks.pri:
+/usr/lib/qt/mkspecs/modules/qt_KCMUtils.pri:
+/usr/lib/qt/mkspecs/modules/qt_KCodecs.pri:
+/usr/lib/qt/mkspecs/modules/qt_KCompletion.pri:
+/usr/lib/qt/mkspecs/modules/qt_KConfigCore.pri:
+/usr/lib/qt/mkspecs/modules/qt_KConfigGui.pri:
+/usr/lib/qt/mkspecs/modules/qt_KConfigWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KCoreAddons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KCrash.pri:
+/usr/lib/qt/mkspecs/modules/qt_KDBusAddons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KDeclarative.pri:
+/usr/lib/qt/mkspecs/modules/qt_KDESu.pri:
+/usr/lib/qt/mkspecs/modules/qt_KDEWebKit.pri:
+/usr/lib/qt/mkspecs/modules/qt_KEmoticons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KGlobalAccel.pri:
+/usr/lib/qt/mkspecs/modules/qt_KGuiAddons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KHtml.pri:
+/usr/lib/qt/mkspecs/modules/qt_KI18n.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIconThemes.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIdleTime.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIOCore.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIOFileWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KIOWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KItemModels.pri:
+/usr/lib/qt/mkspecs/modules/qt_KItemViews.pri:
+/usr/lib/qt/mkspecs/modules/qt_KJobWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KJS.pri:
+/usr/lib/qt/mkspecs/modules/qt_KJSApi.pri:
+/usr/lib/qt/mkspecs/modules/qt_KJsEmbed.pri:
+/usr/lib/qt/mkspecs/modules/qt_KNewStuff.pri:
+/usr/lib/qt/mkspecs/modules/qt_KNotifications.pri:
+/usr/lib/qt/mkspecs/modules/qt_KNotifyConfig.pri:
+/usr/lib/qt/mkspecs/modules/qt_KNTLM.pri:
+/usr/lib/qt/mkspecs/modules/qt_KParts.pri:
+/usr/lib/qt/mkspecs/modules/qt_KPlotting.pri:
+/usr/lib/qt/mkspecs/modules/qt_KPty.pri:
+/usr/lib/qt/mkspecs/modules/qt_KRunner.pri:
+/usr/lib/qt/mkspecs/modules/qt_KScreen.pri:
+/usr/lib/qt/mkspecs/modules/qt_KService.pri:
+/usr/lib/qt/mkspecs/modules/qt_KTextEditor.pri:
+/usr/lib/qt/mkspecs/modules/qt_KTextWidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_KUnitConversion.pri:
+/usr/lib/qt/mkspecs/modules/qt_KWallet.pri:
+/usr/lib/qt/mkspecs/modules/qt_KWidgetsAddons.pri:
+/usr/lib/qt/mkspecs/modules/qt_KWindowSystem.pri:
+/usr/lib/qt/mkspecs/modules/qt_KXmlGui.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_bootstrap_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_clucene_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_concurrent.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_concurrent_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_core.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_core_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_dbus.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_dbus_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_declarative.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_declarative_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_designer.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_designer_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_designercomponents_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_gui.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_gui_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_help.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_help_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_location.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_location_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_multimedia.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_multimedia_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_network.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_network_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_opengl.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_opengl_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_openglextensions_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_platformsupport_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_positioning.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_positioning_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_printsupport.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_printsupport_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qml.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qml_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qmldevtools_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qmltest.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qmltest_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quick.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quick_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quickparticles_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_quickwidgets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_script.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_script_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_scripttools.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_scripttools_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_sensors.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_sensors_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_sql.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_sql_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_svg.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_svg_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_testlib.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_testlib_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_uitools.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_uitools_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webchannel.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webchannel_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webkit.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webkit_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_webkitwidgets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_websockets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_websockets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_widgets.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_widgets_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_x11extras.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_x11extras_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_xml.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_xml_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns.pri:
+/usr/lib/qt/mkspecs/modules/qt_lib_xmlpatterns_private.pri:
+/usr/lib/qt/mkspecs/modules/qt_phonon4qt5.pri:
+/usr/lib/qt/mkspecs/modules/qt_QuickAddons.pri:
+/usr/lib/qt/mkspecs/modules/qt_Solid.pri:
+/usr/lib/qt/mkspecs/modules/qt_SonnetCore.pri:
+/usr/lib/qt/mkspecs/modules/qt_SonnetUi.pri:
+/usr/lib/qt/mkspecs/modules/qt_ThreadWeaver.pri:
+/usr/lib/qt/mkspecs/features/qt_functions.prf:
+/usr/lib/qt/mkspecs/features/qt_config.prf:
+/usr/lib/qt/mkspecs/linux-g++/qmake.conf:
+/usr/lib/qt/mkspecs/features/spec_post.prf:
+/usr/lib/qt/mkspecs/features/exclusive_builds.prf:
+/usr/lib/qt/mkspecs/features/default_pre.prf:
+/usr/lib/qt/mkspecs/features/resolve_config.prf:
+/usr/lib/qt/mkspecs/features/default_post.prf:
+/usr/lib/qt/mkspecs/features/warn_on.prf:
+/usr/lib/qt/mkspecs/features/qt.prf:
+/usr/lib/qt/mkspecs/features/resources.prf:
+/usr/lib/qt/mkspecs/features/moc.prf:
+/usr/lib/qt/mkspecs/features/unix/thread.prf:
+/usr/lib/qt/mkspecs/features/testcase_targets.prf:
+/usr/lib/qt/mkspecs/features/exceptions.prf:
+/usr/lib/qt/mkspecs/features/yacc.prf:
+/usr/lib/qt/mkspecs/features/lex.prf:
+../example/Example.pro:
+/usr/lib/libQt5Sql.prl:
+/usr/lib/libQt5Core.prl:
+qmake: FORCE
+	@$(QMAKE) -spec linux-g++ CONFIG+=debug -o Makefile ../example/Example.pro
+
+qmake_all: FORCE
+
+
+all: Makefile $(TARGET)
+
+dist: distdir FORCE
+	(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
+
+distdir: FORCE
+	@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
+	$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
+	$(COPY_FILE) --parents ../example/models/artikel.h $(DISTDIR)/
+	$(COPY_FILE) --parents ../example/models/artikel.cpp $(DISTDIR)/
+
+
+clean:compiler_clean 
+	-$(DEL_FILE) $(OBJECTS)
+	-$(DEL_FILE) *~ core *.core
+
+
+distclean: clean 
+	-$(DEL_FILE) $(TARGET) 
+	-$(DEL_FILE) Makefile
+
+
+####### Sub-libraries
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+check: first
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_moc_header_make_all:
+compiler_moc_header_clean:
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: 
+
+####### Compile
+
+artikel.o: ../example/models/artikel.cpp ../example/models/artikel.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o artikel.o ../example/models/artikel.cpp
+
+####### Install
+
+install:   FORCE
+
+uninstall:   FORCE
+
+FORCE:
+
diff --git a/src/columnschema.h b/src/columnschema.h
index ee6bf7d..dfe326f 100644
--- a/src/columnschema.h
+++ b/src/columnschema.h
@@ -1,6 +1,7 @@
 #ifndef COLUMNSCHEMA_H
 #define COLUMNSCHEMA_H
 #include <QString>
+#include <QList>
 
 namespace CuteEntityManager {
 
diff --git a/src/database.cpp b/src/database.cpp
index fd13b99..5b64d81 100644
--- a/src/database.cpp
+++ b/src/database.cpp
@@ -52,25 +52,18 @@ void Database::init() {
 }
 
 
-DatabaseType Database::getDatabaseType() {
-    QString d = this->database.driverName();
-    if(d == "qmysql") {
-        return CuteEntityManager::MYSQL;
-    } else if(d == "qpgsql") {
-        return CuteEntityManager::PGSQL;
-    } else {
-        return CuteEntityManager::SQLITE;
-    }
+int Database::getDatabaseType() {
+    return CuteEntityManager::getDatabaseType(this->database.driverName());
 }
 
 void Database::getTableListFromDatabase() {
     if(this->database.open()) {
         QString q = "";
-        if(this->databasetype == OpenTeacherTool::SQLITE) {
+        if(this->databasetype == CuteEntityManager::SQLITE) {
             q = this->sqliteTableList();
-        } else if(this->databasetype == OpenTeacherTool::MYSQL){
+        } else if(this->databasetype == CuteEntityManager::MYSQL){
             q = this->mysqlTableList();
-        } else if(this->databasetype == OpenTeacherTool::PGSQL) {
+        } else if(this->databasetype == CuteEntityManager::PGSQL) {
             q = this->pgsqlSeqTable();
         }
         QSqlQuery query = QSqlQuery(this->database);
@@ -129,9 +122,9 @@ QString Database::sqliteSeqTable() {
 
 QChar Database::escapeChar() {
     QChar c = QChar();
-    if(this->databasetype == OpenTeacherTool::SQLITE) {
+    if(this->databasetype == CuteEntityManager::SQLITE) {
         c = '\'';
-    } else if(this->databasetype == OpenTeacherTool::MYSQL) {
+    } else if(this->databasetype == CuteEntityManager::MYSQL) {
         c = '`';
     }
     return c;
@@ -274,11 +267,11 @@ void Database::createSequenceTable() {
     if(this->database.open() && this->getLastId() == -1) {
         QString query = "";
         QStringList l = QStringList();
-        if(this->databasetype == OpenTeacherTool::MYSQL) {
+        if(this->databasetype == CuteEntityManager::MYSQL) {
             query = this->mysqlSeqTable();
-        } else if(this->databasetype == OpenTeacherTool::SQLITE) {
+        } else if(this->databasetype == CuteEntityManager::SQLITE) {
             query = this->sqliteSeqTable();
-        } else if(this->databasetype == OpenTeacherTool::PGSQL) {
+        } else if(this->databasetype == CuteEntityManager::PGSQL) {
             query = this->pgsqlSeqTable();
         }
         l.append(query);
diff --git a/src/database.h b/src/database.h
index fbf7b48..d8f42e4 100644
--- a/src/database.h
+++ b/src/database.h
@@ -77,7 +77,7 @@ public:
     void refreshTableList();
     bool containsTable(QString tblname);
     bool updateSequenceCounter(QSqlQuery &q);
-    DatabaseType getDatabaseType();
+    int getDatabaseType();
     QChar escapeChar();
 };
 }
diff --git a/src/entity.h b/src/entity.h
index a768e3d..ba29b38 100644
--- a/src/entity.h
+++ b/src/entity.h
@@ -26,13 +26,14 @@ namespace CuteEntityManager {
 class Entity : public QObject {
     Q_OBJECT
 public:
-    qint64 getId() = 0;
-    void setId(qint64 id) = 0;
+    virtual qint64 getId();
+    virtual void setId(qint64 id);
     virtual ~Entity();
     virtual QString getTablename() = 0;
     //  virtual QMap<QString, QString> getManyToManyRelations() = 0;   //Key = Table, Value = joined Table Column
 protected:
     Entity();
+    qint64 id;
 };
 }
 #endif // MODEL_H
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index 279debd..9ccf5d3 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -88,205 +88,205 @@ void EntityManager::bindValues(const QHash<QString, QVariant> *h, QSqlQuery &q,
     }
 }
 
-qint8 EntityManager::count(Entity* entity, bool ignoreID) {
-    qint8 rc = 0;
-    QSqlQuery q = this->db->getQuery("SELECT COUNT(*) FROM " + entity->getTablename() + this->where(entity->getAttributeValues(),"AND",ignoreID));
-    this->bindValues(entity->getAttributeValues(),q);
-    this->db->select(q);
-    if(q.next()) {
-        rc = q.value(0).toInt();
-    }
-    return rc;
-}
-
-QString EntityManager::buildCreateQuery(QHash<QString,QVariant>::const_iterator i, QHash<QString,QVariant>::const_iterator end, QString &p1, QString &p2) {
-    bool first = true;
-    while(i != end) {
-        if(!first) {
-            p1 += ",";
-            p2 += ",";
-        } else {
-            first = false;
-        }
-        p1 += i.key();
-        p2 += ":"+i.key();
-        ++i;
-    }
-    p1 += ")";
-    p2 += ");";
-    return p1 + p2;
-}
-
-bool EntityManager::create(Entity *entity) {
-    bool rc = false;
-    if(this->checkTable(entity) && this->count(entity) == 0) {
-        QSqlQuery q = this->db->getQuery();
-        QString p1 = "INSERT INTO " + entity->getTablename() + "(";
-        QString p2 = "VALUES(";
-        entity->setId(this->db->getLastId());
-        if(!entity->getAttributeValues()->isEmpty()) {
-            q.prepare(this->buildCreateQuery(entity->getAttributeValues()->constBegin(),entity->getAttributeValues()->constEnd(),p1,p2));
-        }
-        this->bindValues(entity->getAttributeValues(),q);
-        if(this->db->updateSequenceCounter(q)) {
-            entity->setId(this->findId(entity));
-            rc = true;
-        }
-    }
-    return rc;
-}
-
-QHash<QString,QVariant> EntityManager::find(qint64 id, QString tblname) {
-    QSqlQuery q = this->db->getQuery("SELECT * FROM " + tblname +" WHERE id= :id LIMIT 1;");
-    q.bindValue(":id",id);
-    this->db->select(q);
-    QSqlRecord rec = q.record();
-    QHash<QString,QVariant> map = QHash<QString, QVariant>();
-    if(q.next()) {
-        for (int var = 0; var < rec.count(); ++var) {
-            map.insert(rec.fieldName(var),q.value(rec.indexOf(rec.fieldName(var)))); // parameters of q.value can maybe replaced with var
-        }
-    }
-    return map;
-}
-
-QList<QHash <QString,QVariant> > EntityManager::findByAttributes(QHash<QString, QVariant> *m, const QString &tblname, bool ignoreID) {
-    QSqlQuery q = this->db->getQuery("SELECT * FROM " + tblname + this->where(m,"AND",ignoreID));
-    this->bindValues(m,q,true);
-    return this->convertQueryResult(q);
-}
-
-QList<QHash<QString, QVariant> > EntityManager::convertQueryResult(QSqlQuery &q) {
-    QList<QHash <QString, QVariant> > listmap = QList<QHash <QString,QVariant> >();
-    this->db->select(q);
-    QSqlRecord rec = q.record();
-    QStringList l = QStringList();
-    qint16 field_count = rec.count();
-    for (int var = 0; var < field_count; ++var) {
-        l.append(rec.fieldName(var));
-    }
-    QHash<QString,QVariant> map = QHash<QString, QVariant>();
-    while(q.next()) {
-        for (int var = 0; var < field_count; ++var) {
-            map.insert(l.at(var),q.value(rec.indexOf(l.at(var))));
-        }
-        listmap.append(map);
-    }
-    return listmap;
-}
-
-QList<QHash <QString,QVariant> > EntityManager::findAll(QString tblname) {
-    QSqlQuery q =this->db->getQuery("SELECT * FROM " + tblname + ";");
-    return this->convertQueryResult(q);
-}
-
-bool EntityManager::merge(Entity *entity) {
-    if(this->count(entity) == 0 && entity->getId() != -1) {
-        QSqlQuery q = this->db->getQuery("UPDATE " + entity->getTablename() + " SET " +this->attributes(entity->getAttributeValues()) + " WHERE id=:idM;");
-        this->bindValues(entity->getAttributeValues(),q);
-        q.bindValue(":idM",entity->getId());
-        return this->db->transaction(q);
-    } else {
-        return false;
-    }
-}
-
-
-qint64 EntityManager::findId(Entity *entity) {
-    qint64 r = -1;
-    QSqlQuery q = this->db->getQuery("SELECT id FROM " + entity->getTablename() + this->where(entity->getAttributeValues(),"AND",true) + " LIMIT 1");
-    this->bindValues(entity->getAttributeValues(),q);
-    this->db->select(q);
-    if(q.next()) {
-        r = q.value(0).toInt();
-    }
-    return r;
-}
-
-QString EntityManager::attributes(QHash<QString, QVariant> *m, QString conjunction, bool ignoreID) {
-    QString rc = "";
-    if(!m->isEmpty()) {
-        QHash<QString, QVariant>::const_iterator i = m->constBegin();
-        while(i != m->constEnd()) {
-            if(!ignoreID || (ignoreID && !(i.key() == "id"))) {
-                if(!(rc == "")) {
-                    rc += " " + conjunction + " ";
-                }
-                rc += i.key() + "= :" +i.key();
-            }
-            ++i;
-        }
-    }
-    return rc;
-}
-
-
-QString EntityManager::where(QHash<QString, QVariant> *m, QString conjunction, bool ignoreID) {
-    if(m->size() == 0 || (ignoreID && m->contains("id") && m->size() == 1)) {
-        return "";
-    }
-    return " WHERE " + this->attributes(m,conjunction,ignoreID);
-}
-
-QString EntityManager::where(Entity *entity, QString conjunction, bool ignoreID) {
-    return this->where(entity->getAttributeValues(),conjunction,ignoreID);
-}
-
-QList<QHash <QString,QVariant> > EntityManager::findByAttributes(Entity *entity, bool ignoreID) {
-    return this->findByAttributes(entity->getAttributeValues(), entity->getTablename(),ignoreID);
-}
-
-bool EntityManager::save(Entity *entity) {
-    if(entity->getId() > -1) {
-        return this->merge(entity);
-    } else {
-        return this->create(entity);
-    }
-}
-
-
-bool EntityManager::remove(Entity *&entity) {
-    bool rc = false;
-    QSqlQuery q = this->db->getQuery("DELETE FROM " + entity->getTablename() + " WHERE id= :id;");
-    q.bindValue(":id",entity->getId());
-    if(this->db->transaction(q)) {
-        delete entity;
-        entity = 0;
-        rc = true;
-    }
-    return rc;
-}
-
-QString EntityManager::createTableQuery(Entity *entity) {
-    QChar c = this->db->escapeChar();
-    QHash<QString, QString> m = entity->getProperties(this->db->getDatabaseType());
-    bool first = true;
-    QString s = "CREATE TABLE IF NOT EXISTS ";
-    s.append(c).append(entity->getTablename()).append(c).append("(");
-    QHash<QString, QString>::const_iterator i = m.constBegin();
-    while (i != m.constEnd()) {
-        if(first) {
-            first = false;
-        } else {
-            s.append(',');
-        }
-        s.append(c).append(i.key()).append(c).append(" " + i.value());
-        ++i;
-    }
-    s.append(");");
-    return s;
-}
-
-bool EntityManager::createTable(Entity *entity) {
-    bool rc = false;
-    this->db->containsTable(entity->getTablename()) ? rc = true : rc = false;
-    if(!rc) {
-        QSqlQuery q = this->db->getQuery(this->createTableQuery(entity));
-        if(this->db->transaction(q)) {
-            this->db->refreshTableList();
-            rc = true;
-        }
-    }
-    return rc;
-
-}
+//qint8 EntityManager::count(Entity* entity, bool ignoreID) {
+//    qint8 rc = 0;
+//    QSqlQuery q = this->db->getQuery("SELECT COUNT(*) FROM " + entity->getTablename() + this->where(entity->getAttributeValues(),"AND",ignoreID));
+//    this->bindValues(entity->getAttributeValues(),q);
+//    this->db->select(q);
+//    if(q.next()) {
+//        rc = q.value(0).toInt();
+//    }
+//    return rc;
+//}
+
+//QString EntityManager::buildCreateQuery(QHash<QString,QVariant>::const_iterator i, QHash<QString,QVariant>::const_iterator end, QString &p1, QString &p2) {
+//    bool first = true;
+//    while(i != end) {
+//        if(!first) {
+//            p1 += ",";
+//            p2 += ",";
+//        } else {
+//            first = false;
+//        }
+//        p1 += i.key();
+//        p2 += ":"+i.key();
+//        ++i;
+//    }
+//    p1 += ")";
+//    p2 += ");";
+//    return p1 + p2;
+//}
+
+//bool EntityManager::create(Entity *entity) {
+//    bool rc = false;
+//    if(this->checkTable(entity) && this->count(entity) == 0) {
+//        QSqlQuery q = this->db->getQuery();
+//        QString p1 = "INSERT INTO " + entity->getTablename() + "(";
+//        QString p2 = "VALUES(";
+//        entity->setId(this->db->getLastId());
+//        if(!entity->getAttributeValues()->isEmpty()) {
+//            q.prepare(this->buildCreateQuery(entity->getAttributeValues()->constBegin(),entity->getAttributeValues()->constEnd(),p1,p2));
+//        }
+//        this->bindValues(entity->getAttributeValues(),q);
+//        if(this->db->updateSequenceCounter(q)) {
+//            entity->setId(this->findId(entity));
+//            rc = true;
+//        }
+//    }
+//    return rc;
+//}
+
+//QHash<QString,QVariant> EntityManager::find(qint64 id, QString tblname) {
+//    QSqlQuery q = this->db->getQuery("SELECT * FROM " + tblname +" WHERE id= :id LIMIT 1;");
+//    q.bindValue(":id",id);
+//    this->db->select(q);
+//    QSqlRecord rec = q.record();
+//    QHash<QString,QVariant> map = QHash<QString, QVariant>();
+//    if(q.next()) {
+//        for (int var = 0; var < rec.count(); ++var) {
+//            map.insert(rec.fieldName(var),q.value(rec.indexOf(rec.fieldName(var)))); // parameters of q.value can maybe replaced with var
+//        }
+//    }
+//    return map;
+//}
+
+//QList<QHash <QString,QVariant> > EntityManager::findByAttributes(QHash<QString, QVariant> *m, const QString &tblname, bool ignoreID) {
+//    QSqlQuery q = this->db->getQuery("SELECT * FROM " + tblname + this->where(m,"AND",ignoreID));
+//    this->bindValues(m,q,true);
+//    return this->convertQueryResult(q);
+//}
+
+//QList<QHash<QString, QVariant> > EntityManager::convertQueryResult(QSqlQuery &q) {
+//    QList<QHash <QString, QVariant> > listmap = QList<QHash <QString,QVariant> >();
+//    this->db->select(q);
+//    QSqlRecord rec = q.record();
+//    QStringList l = QStringList();
+//    qint16 field_count = rec.count();
+//    for (int var = 0; var < field_count; ++var) {
+//        l.append(rec.fieldName(var));
+//    }
+//    QHash<QString,QVariant> map = QHash<QString, QVariant>();
+//    while(q.next()) {
+//        for (int var = 0; var < field_count; ++var) {
+//            map.insert(l.at(var),q.value(rec.indexOf(l.at(var))));
+//        }
+//        listmap.append(map);
+//    }
+//    return listmap;
+//}
+
+//QList<QHash <QString,QVariant> > EntityManager::findAll(QString tblname) {
+//    QSqlQuery q =this->db->getQuery("SELECT * FROM " + tblname + ";");
+//    return this->convertQueryResult(q);
+//}
+
+//bool EntityManager::merge(Entity *entity) {
+//    if(this->count(entity) == 0 && entity->getId() != -1) {
+//        QSqlQuery q = this->db->getQuery("UPDATE " + entity->getTablename() + " SET " +this->attributes(entity->getAttributeValues()) + " WHERE id=:idM;");
+//        this->bindValues(entity->getAttributeValues(),q);
+//        q.bindValue(":idM",entity->getId());
+//        return this->db->transaction(q);
+//    } else {
+//        return false;
+//    }
+//}
+
+
+//qint64 EntityManager::findId(Entity *entity) {
+//    qint64 r = -1;
+//    QSqlQuery q = this->db->getQuery("SELECT id FROM " + entity->getTablename() + this->where(entity->getAttributeValues(),"AND",true) + " LIMIT 1");
+//    this->bindValues(entity->getAttributeValues(),q);
+//    this->db->select(q);
+//    if(q.next()) {
+//        r = q.value(0).toInt();
+//    }
+//    return r;
+//}
+
+//QString EntityManager::attributes(QHash<QString, QVariant> *m, QString conjunction, bool ignoreID) {
+//    QString rc = "";
+//    if(!m->isEmpty()) {
+//        QHash<QString, QVariant>::const_iterator i = m->constBegin();
+//        while(i != m->constEnd()) {
+//            if(!ignoreID || (ignoreID && !(i.key() == "id"))) {
+//                if(!(rc == "")) {
+//                    rc += " " + conjunction + " ";
+//                }
+//                rc += i.key() + "= :" +i.key();
+//            }
+//            ++i;
+//        }
+//    }
+//    return rc;
+//}
+
+
+//QString EntityManager::where(QHash<QString, QVariant> *m, QString conjunction, bool ignoreID) {
+//    if(m->size() == 0 || (ignoreID && m->contains("id") && m->size() == 1)) {
+//        return "";
+//    }
+//    return " WHERE " + this->attributes(m,conjunction,ignoreID);
+//}
+
+//QString EntityManager::where(Entity *entity, QString conjunction, bool ignoreID) {
+//    return this->where(entity->getAttributeValues(),conjunction,ignoreID);
+//}
+
+//QList<QHash <QString,QVariant> > EntityManager::findByAttributes(Entity *entity, bool ignoreID) {
+//    return this->findByAttributes(entity->getAttributeValues(), entity->getTablename(),ignoreID);
+//}
+
+//bool EntityManager::save(Entity *entity) {
+//    if(entity->getId() > -1) {
+//        return this->merge(entity);
+//    } else {
+//        return this->create(entity);
+//    }
+//}
+
+
+//bool EntityManager::remove(Entity *&entity) {
+//    bool rc = false;
+//    QSqlQuery q = this->db->getQuery("DELETE FROM " + entity->getTablename() + " WHERE id= :id;");
+//    q.bindValue(":id",entity->getId());
+//    if(this->db->transaction(q)) {
+//        delete entity;
+//        entity = 0;
+//        rc = true;
+//    }
+//    return rc;
+//}
+
+//QString EntityManager::createTableQuery(Entity *entity) {
+//    QChar c = this->db->escapeChar();
+//    QHash<QString, QString> m = entity->getProperties(this->db->getDatabaseType());
+//    bool first = true;
+//    QString s = "CREATE TABLE IF NOT EXISTS ";
+//    s.append(c).append(entity->getTablename()).append(c).append("(");
+//    QHash<QString, QString>::const_iterator i = m.constBegin();
+//    while (i != m.constEnd()) {
+//        if(first) {
+//            first = false;
+//        } else {
+//            s.append(',');
+//        }
+//        s.append(c).append(i.key()).append(c).append(" " + i.value());
+//        ++i;
+//    }
+//    s.append(");");
+//    return s;
+//}
+
+//bool EntityManager::createTable(Entity *entity) {
+//    bool rc = false;
+//    this->db->containsTable(entity->getTablename()) ? rc = true : rc = false;
+//    if(!rc) {
+//        QSqlQuery q = this->db->getQuery(this->createTableQuery(entity));
+//        if(this->db->transaction(q)) {
+//            this->db->refreshTableList();
+//            rc = true;
+//        }
+//    }
+//    return rc;
+
+//}
diff --git a/src/enums/databasetype.h b/src/enums/databasetype.h
index 6b82b0e..ce874e5 100644
--- a/src/enums/databasetype.h
+++ b/src/enums/databasetype.h
@@ -16,12 +16,39 @@
 
 #ifndef DATABASETYPE_H
 #define DATABASETYPE_H
-
+#include <QString>
+#include "../schema.h"
+#include "../schema/sqliteschema.h"
 namespace CuteEntityManager {
-   enum DatabaseType {
-       SQLITE=0,
-       PGSQL=1,
-       MYSQL=2
-   };
+enum DatabaseType {
+    SQLITE=0,
+    PGSQL=1,
+    MYSQL=2
+};
+
+static const int getDatabaseType(QString s) {
+    if(s == "qmysql") {
+        return CuteEntityManager::MYSQL;
+    } else if(s == "qpgsql") {
+        return CuteEntityManager::PGSQL;
+    } else if(s == "qsqlite"){
+        return CuteEntityManager::SQLITE;
+    }
+}
+
+static const Schema getSchema(int db) {
+    switch (db) {
+    case SQLITE:
+        return SqliteSchema();
+        break;
+    case PGSQL:
+    case MYSQL:
+    default:
+        return SqliteSchema();
+        break;
+    }
+}
+
+
 }
 #endif // DATABASETYPE_H
diff --git a/src/schema.cpp b/src/schema.cpp
index 498c062..fd32749 100644
--- a/src/schema.cpp
+++ b/src/schema.cpp
@@ -2,7 +2,7 @@
 using namespace CuteEntityManager;
 
 Schema::Schema() {
-
+    this->typeMap = QSharedPointer<QHash<QString,QString>>(new QHash<QString,QString>());
 }
 
 Schema::~Schema() {
diff --git a/src/schema.h b/src/schema.h
index 9f36972..9ff87a4 100644
--- a/src/schema.h
+++ b/src/schema.h
@@ -2,20 +2,41 @@
 #define SCHEMA_H
 #include <QString>
 #include "tableschema.h"
+#include <QHash>
+#include <QSharedPointer>
 
 namespace CuteEntityManager {
 
 class Schema {
 public:
     Schema();
-    ~Schema();
+    virtual ~Schema();
+    const QString TYPE_PK = "pk";
+    const QString TYPE_BIGPK = "bigpk";
+    const QString TYPE_STRING = "string";
+    const QString TYPE_TEXT = "text";
+    const QString TYPE_SMALLINT = "smallint";
+    const QString TYPE_INTEGER = "integer";
+    const QString TYPE_BIGINT = "bigint";
+    const QString TYPE_FLOAT = "float";
+    const QString TYPE_DOUBLE = "double";
+    const QString TYPE_DECIMAL = "decimal";
+    const QString TYPE_DATETIME = "datetime";
+    const QString TYPE_TIMESTAMP = "timestamp";
+    const QString TYPE_TIME = "time";
+    const QString TYPE_DATE = "date";
+    const QString TYPE_BINARY = "binary";
+    const QString TYPE_BOOLEAN = "boolean";
+    const QString TYPE_MONEY = "money";
+    virtual QHash<QString, QString> *getTypeMap() = 0;
+
 protected:
     virtual QList<QString> findTableNames(QString schema = "");
     virtual QList<QString> findUniqueIndexes(QString tableName);
     virtual TableSchema findConstraints(TableSchema ts);
     virtual QString getCreateTableSql(TableSchema ts);
-   virtual bool findColumns(TableSchema ts);
-
+    virtual bool findColumns(TableSchema ts);
+    QSharedPointer<QHash<QString, QString>> typeMap;
 
 };
 }
diff --git a/src/schema/mysqlschema.cpp b/src/schema/mysqlschema.cpp
new file mode 100644
index 0000000..bd2a4cc
--- /dev/null
+++ b/src/schema/mysqlschema.cpp
@@ -0,0 +1,44 @@
+#include "mysqlschema.h"
+using namespace CuteEntityManager;
+
+MysqlSchema::MysqlSchema() : Schema() {
+
+}
+
+MysqlSchema::~MysqlSchema() {
+
+}
+
+QHash<QString, QString>* MysqlSchema::getTypeMap() {
+    if(this->typeMap.data()->empty()) {
+//        this->typeMap->data()->insert(TYPE_SMALLINT, 'tinyint');
+//        this->typeMap->data()->insert(TYPE_SMALLINT, 'bit');
+//        this->typeMap->data()->insert(TYPE_BOOLEAN, 'boolean');
+//        this->typeMap->data()->insert(TYPE_BOOLEAN, 'bool');
+//        this->typeMap->data()->insert(TYPE_SMALLINT, 'smallint');
+//        this->typeMap->data()->insert(TYPE_INTEGER, 'mediumint');
+//        this->typeMap->data()->insert(TYPE_INTEGER, 'int');
+//        this->typeMap->data()->insert(TYPE_INTEGER, 'integer');
+//        this->typeMap->data()->insert(TYPE_BIGINT, 'bigint');
+//        this->typeMap->data()->insert(TYPE_FLOAT, 'float');
+//        this->typeMap->data()->insert(TYPE_DOUBLE, 'double');
+//        this->typeMap->data()->insert(TYPE_FLOAT, 'real');
+//        this->typeMap->data()->insert(TYPE_DECIMAL, 'decimal');
+//        this->typeMap->data()->insert(TYPE_DECIMAL, 'numeric');
+//        this->typeMap->data()->insert(TYPE_TEXT, 'tinytext');
+//        this->typeMap->data()->insert(TYPE_TEXT, 'mediumtext');
+//        this->typeMap->data()->insert(TYPE_TEXT, 'longtext');
+//        this->typeMap->data()->insert(TYPE_TEXT, 'text');
+//        this->typeMap->data()->insert(TYPE_STRING, 'varchar');
+//        this->typeMap->data()->insert(TYPE_STRING, 'string');
+//        this->typeMap->data()->insert(TYPE_STRING, 'char');
+//        this->typeMap->data()->insert(TYPE_BINARY, 'blob');
+//        this->typeMap->data()->insert(TYPE_DATETIME, 'datetime');
+//        this->typeMap->data()->insert(TYPE_DATE, 'year');
+//        this->typeMap->data()->insert(TYPE_DATE, 'date');
+//        this->typeMap->data()->insert(TYPE_TIME, 'time');
+//        this->typeMap->data()->insert(TYPE_TIMESTAMP, 'timestamp');
+//        this->typeMap->data()->insert(TYPE_STRING, 'enum');
+    }
+    return this->typeMap.data();
+}
diff --git a/src/schema/mysqlschema.h b/src/schema/mysqlschema.h
new file mode 100644
index 0000000..7c3157d
--- /dev/null
+++ b/src/schema/mysqlschema.h
@@ -0,0 +1,12 @@
+#ifndef MYSQLSCHEMA_H
+#define MYSQLSCHEMA_H
+#include "../schema.h"
+namespace CuteEntityManager {
+class MysqlSchema : public Schema {
+public:
+    MysqlSchema();
+    ~MysqlSchema();
+    QHash<QString, QString> *getTypeMap();
+};
+}
+#endif // MYSQLSCHEMA_H
diff --git a/src/schema/pgsqlschema.cpp b/src/schema/pgsqlschema.cpp
new file mode 100644
index 0000000..7abf8a3
--- /dev/null
+++ b/src/schema/pgsqlschema.cpp
@@ -0,0 +1,45 @@
+#include "pgsqlschema.h"
+using namespace CuteEntityManager;
+
+PgSqlSchema::PgSqlSchema() : Schema() {
+
+}
+
+PgSqlSchema::~PgSqlSchema() {
+
+}
+
+QHash<QString, QString>* PgSqlSchema::getTypeMap() {
+    if(this->typeMap.data()->empty()) {
+//        this->typeMap->data()->insert(TYPE_SMALLINT, 'tinyint');
+//        this->typeMap->data()->insert(TYPE_SMALLINT, 'bit');
+//        this->typeMap->data()->insert(TYPE_BOOLEAN, 'boolean');
+//        this->typeMap->data()->insert(TYPE_BOOLEAN, 'bool');
+//        this->typeMap->data()->insert(TYPE_SMALLINT, 'smallint');
+//        this->typeMap->data()->insert(TYPE_INTEGER, 'mediumint');
+//        this->typeMap->data()->insert(TYPE_INTEGER, 'int');
+//        this->typeMap->data()->insert(TYPE_INTEGER, 'integer');
+//        this->typeMap->data()->insert(TYPE_BIGINT, 'bigint');
+//        this->typeMap->data()->insert(TYPE_FLOAT, 'float');
+//        this->typeMap->data()->insert(TYPE_DOUBLE, 'double');
+//        this->typeMap->data()->insert(TYPE_FLOAT, 'real');
+//        this->typeMap->data()->insert(TYPE_DECIMAL, 'decimal');
+//        this->typeMap->data()->insert(TYPE_DECIMAL, 'numeric');
+//        this->typeMap->data()->insert(TYPE_TEXT, 'tinytext');
+//        this->typeMap->data()->insert(TYPE_TEXT, 'mediumtext');
+//        this->typeMap->data()->insert(TYPE_TEXT, 'longtext');
+//        this->typeMap->data()->insert(TYPE_TEXT, 'text');
+//        this->typeMap->data()->insert(TYPE_STRING, 'varchar');
+//        this->typeMap->data()->insert(TYPE_STRING, 'string');
+//        this->typeMap->data()->insert(TYPE_STRING, 'char');
+//        this->typeMap->data()->insert(TYPE_BINARY, 'blob');
+//        this->typeMap->data()->insert(TYPE_DATETIME, 'datetime');
+//        this->typeMap->data()->insert(TYPE_DATE, 'year');
+//        this->typeMap->data()->insert(TYPE_DATE, 'date');
+//        this->typeMap->data()->insert(TYPE_TIME, 'time');
+//        this->typeMap->data()->insert(TYPE_TIMESTAMP, 'timestamp');
+//        this->typeMap->data()->insert(TYPE_STRING, 'enum');
+    }
+    return this->typeMap.data();
+}
+
diff --git a/src/schema/pgsqlschema.h b/src/schema/pgsqlschema.h
new file mode 100644
index 0000000..9ed20a7
--- /dev/null
+++ b/src/schema/pgsqlschema.h
@@ -0,0 +1,13 @@
+#ifndef PGSQLSCHEMA_H
+#define PGSQLSCHEMA_H
+#include "../schema.h"
+namespace CuteEntityManager {
+class PgSqlSchema : public Schema {
+public:
+    PgSqlSchema();
+    ~PgSqlSchema();
+    QHash<QString, QString> *getTypeMap();
+};
+}
+
+#endif // PGSQLSCHEMA_H
diff --git a/src/schema/sqliteschema.cpp b/src/schema/sqliteschema.cpp
index 1e5378b..4a93399 100644
--- a/src/schema/sqliteschema.cpp
+++ b/src/schema/sqliteschema.cpp
@@ -1,15 +1,49 @@
 #include "sqliteschema.h"
+using namespace CuteEntityManager;
 
-SqliteSchema::SqliteSchema() : parent() {
+SqliteSchema::SqliteSchema() : Schema() {
 
 }
 
-SqliteSchema::~SqliteSchema()
-{
+SqliteSchema::~SqliteSchema() {
 
 }
 
-
-QString Database::sqliteTableList() {
-    return "SELECT tbl_name FROM sqlite_master WHERE type='table';";
+QHash<QString, QString>* SqliteSchema::getTypeMap() {
+    if(this->typeMap.data()->empty()) {
+        this->typeMap.data()->insert(TYPE_SMALLINT, "tinyint");
+        this->typeMap.data()->insert(TYPE_SMALLINT, "bit");
+        this->typeMap.data()->insert(TYPE_BOOLEAN, "boolean");
+        this->typeMap.data()->insert(TYPE_BOOLEAN, "bool");
+        this->typeMap.data()->insert(TYPE_SMALLINT, "smallint");
+        this->typeMap.data()->insert(TYPE_INTEGER, "mediumint");
+        this->typeMap.data()->insert(TYPE_INTEGER, "int");
+        this->typeMap.data()->insert(TYPE_INTEGER, "integer");
+        this->typeMap.data()->insert(TYPE_BIGINT, "bigint");
+        this->typeMap.data()->insert(TYPE_FLOAT, "float");
+        this->typeMap.data()->insert(TYPE_DOUBLE, "double");
+        this->typeMap.data()->insert(TYPE_FLOAT, "real");
+        this->typeMap.data()->insert(TYPE_DECIMAL, "decimal");
+        this->typeMap.data()->insert(TYPE_DECIMAL, "numeric");
+        this->typeMap.data()->insert(TYPE_TEXT, "tinytext");
+        this->typeMap.data()->insert(TYPE_TEXT, "mediumtext");
+        this->typeMap.data()->insert(TYPE_TEXT, "longtext");
+        this->typeMap.data()->insert(TYPE_TEXT, "text");
+        this->typeMap.data()->insert(TYPE_STRING, "varchar");
+        this->typeMap.data()->insert(TYPE_STRING, "string");
+        this->typeMap.data()->insert(TYPE_STRING, "char");
+        this->typeMap.data()->insert(TYPE_BINARY, "blob");
+        this->typeMap.data()->insert(TYPE_DATETIME, "datetime");
+        this->typeMap.data()->insert(TYPE_DATE, "year");
+        this->typeMap.data()->insert(TYPE_DATE, "date");
+        this->typeMap.data()->insert(TYPE_TIME, "time");
+        this->typeMap.data()->insert(TYPE_TIMESTAMP, "timestamp");
+        this->typeMap.data()->insert(TYPE_STRING, "enum");
+    }
+    return this->typeMap.data();
 }
+
+
+//QString Database::sqliteTableList() {
+//    return "SELECT tbl_name FROM sqlite_master WHERE type="table";";
+//}
diff --git a/src/schema/sqliteschema.h b/src/schema/sqliteschema.h
index e269928..7a8d669 100644
--- a/src/schema/sqliteschema.h
+++ b/src/schema/sqliteschema.h
@@ -7,6 +7,7 @@ class SqliteSchema : public Schema {
 public:
     SqliteSchema();
     ~SqliteSchema();
+    QHash<QString, QString> *getTypeMap();
 };
 }
 #endif // SQLITESCHEMA_H
diff --git a/src/tableschema.cpp b/src/tableschema.cpp
index b365386..4721525 100644
--- a/src/tableschema.cpp
+++ b/src/tableschema.cpp
@@ -1,4 +1,5 @@
 #include "tableschema.h"
+using namespace CuteEntityManager;
 
 TableSchema::TableSchema()
 {
