Data filtering changes.
authorMikko Keinänen <mikko.keinanen@gmail.com>
Sun, 3 Oct 2010 08:28:45 +0000 (11:28 +0300)
committerMikko Keinänen <mikko.keinanen@gmail.com>
Sun, 3 Oct 2010 08:28:45 +0000 (11:28 +0300)
12 files changed:
doc/uml-db_layer.dia
src/db/databasemanager.cpp
src/db/databasemanager.h
src/db/dbemufrontfileobject.cpp
src/db/dbfile.cpp
src/db/dbfilepath.cpp
src/db/dbmediaimagecontainer.cpp
src/db/dbmediaimagecontainer.h
src/db/dbquerymodelmanager.cpp
src/db/dbquerymodelmanager.h
src/db/dbsetup.cpp
src/emulauncher.cpp

index b18718a..e2b38ab 100644 (file)
Binary files a/doc/uml-db_layer.dia and b/doc/uml-db_layer.dia differ
index b70f36f..6a639d7 100644 (file)
@@ -116,7 +116,9 @@ EmuFrontObject* DatabaseManager::getDataObject(int id)
 EmuFrontObject* DatabaseManager::getDataObject(QString filter)
 {
     qDebug() << "Filtering data object" << filter;
-    filterDataObjects(filter);
+    QList<QString> filters;
+    filters.append(filter);
+    filterDataObjects(filters);
     qDebug() << "...done filtering.";
     return getFilteredDataObject();
 }
index 44787c0..77b9e1c 100644 (file)
@@ -57,7 +57,7 @@ protected:
     QSqlQueryModel* sqlTableModel;
     virtual EmuFrontObject* recordToDataObject(const QSqlRecord* ) = 0;
     virtual void filterById(int id) = 0;
-    virtual void filterDataObjects(QString filter) = 0;
+    virtual void filterDataObjects(QList<QString> filter) = 0;
     virtual void clearFilters() = 0;
     int countRows(QString tableName, QString columnName, int id) const;
     static const QString DB_TABLE_NAME_FILE;
index d98246a..4a411a7 100644 (file)
@@ -131,10 +131,10 @@ bool DbEmuFrontFileObject::deleteDataObjectFromModel(QModelIndex *index)
     */
 }
 
-QString DbEmuFrontFileObject::constructSelect(QString whereClause) const
+QString DbEmuFrontFileObject::constructSelect(QString where) const
 {
-    QString where = whereClause.isEmpty()
-        ? "" : QString("WHERE ").append(whereClause);
+    /*QString where = whereClause.isEmpty()
+        ? "" : QString("WHERE ").append(whereClause);*/
 
     return QString("SELECT maintbl.id AS FileObjectId, "
             "maintbl.name AS Name, "
@@ -152,7 +152,7 @@ QString DbEmuFrontFileObject::constructSelect(QString whereClause) const
 
 QString DbEmuFrontFileObject::constructSelectById(int id) const
 {
-    return constructSelect(constructFilterById(id));
+    return constructSelect(QString("WHERE %1").arg(constructFilterById(id)));
 }
 
 QString DbEmuFrontFileObject::constructFilterById(int id) const
index 950a0c3..cc1adf8 100644 (file)
@@ -141,10 +141,10 @@ bool DbFile::deleteDataObject(int id) const
     return q.exec();
 }
 
-QString DbFile::constructSelect(QString whereClause) const
+QString DbFile::constructSelect(QString where) const
 {
-    QString where = whereClause.isEmpty()
-                    ? "" : QString("WHERE ").append(whereClause);
+    /*QString where = whereClause.isEmpty()
+                    ? "" : QString("WHERE ").append(whereClause);*/
 
     return QString("SELECT file.id AS FileId, "
                    "file.name AS Name, "
@@ -164,7 +164,7 @@ QString DbFile::constructFilterById(int id) const
 
 QString DbFile::constructSelectById(int id) const
 {
-    return constructSelect(constructFilterById(id));
+    return constructSelect(QString("WHERE %1").arg(constructFilterById(id)));
 }
 
 QSqlQueryModel* DbFile::getData()
index 0c4285a..f8bb72a 100644 (file)
@@ -100,10 +100,10 @@ bool DbFilePath::deleteDataObject(int id) const
     return q.exec();
 }
 
-QString DbFilePath::constructSelect(QString whereClause) const
+QString DbFilePath::constructSelect(QString where) const
 {
-    QString where = whereClause.isEmpty()
-        ? "" : QString("WHERE ").append(whereClause);
+    /*QString where = whereClause.isEmpty()
+        ? "" : QString("WHERE ").append(whereClause);*/
 
     return QString("SELECT filepath.id AS FilePathId, "
             "filepath.name AS Name, "
@@ -125,7 +125,8 @@ QString DbFilePath::constructFilterById(int id) const
 
 QString DbFilePath::constructSelectById(int id) const
 {
-    return constructSelect(constructFilterById(id));
+    QString where = QString("WHERE %1").arg(constructFilterById(id));
+    return constructSelect(where);
 }
 
 QSqlQueryModel* DbFilePath::getData()
index dc6aab6..dab5472 100644 (file)
@@ -211,10 +211,13 @@ void DbMediaImageContainer::linkMediaImagesWithContainer(int micId, QList<int> m
     }
 }
 
-void DbMediaImageContainer::filter(int mediaTypeId, int platformId) const
+void DbMediaImageContainer::filter(int mediaTypeId, int platformId)
 {
-        /*
-        WHERE setup.platformid = :platformid
-        AND setup.mediatypeid = :mediatypeid
-    */
+    QList<QString> filters;
+    if (mediaTypeId >= 0)
+        filters.append(QString("mediatype.id=%1").arg(mediaTypeId));
+    if (platformId >= 0)
+        filters.append(QString("platform.id=%1").arg(platformId));
+    filterDataObjects(filters);
 }
+
index 1812b44..33bfc50 100644 (file)
@@ -36,9 +36,9 @@ public:
     virtual int countDataObjectRefs(int id) const;
     void storeContainers(QList<MediaImageContainer*>, FilePathObject*);
     int getMediaImageContainer(QString checksum) const;
-    void filter(int mediaTypeId, int platformId) const;
+    void filter(int mediaTypeId, int platformId);
 protected:
-    virtual QString constructSelect(QString whereClause) const;
+    virtual QString constructSelect(QString whereClause = "") const;
     virtual QString constructSelectById(int id) const;
     virtual QString constructFilterById(int id) const;
     virtual EmuFrontObject* recordToDataObject(const QSqlRecord *);
index 3f1c101..6a3535e 100644 (file)
@@ -18,6 +18,7 @@
 // along with EmuFront.  If not, see <http://www.gnu.org/licenses/>.
 
 #include <QSqlQueryModel>
+#include <QDebug>
 #include "dbquerymodelmanager.h"
 
 DbQueryModelManager::DbQueryModelManager(QObject *parent)
@@ -27,17 +28,33 @@ DbQueryModelManager::DbQueryModelManager(QObject *parent)
 
 void DbQueryModelManager::filterById(int id)
 {
-    filterDataObjects(constructFilterById(id));
+    QList<QString> filters;
+    filters.append(constructFilterById(id));
+    filterDataObjects(filters);
 }
 
-/* filter must be in SQL where clause format (without the WHERE word) */
-void DbQueryModelManager::filterDataObjects(QString filter)
+/* filters is a list of SQL conditions e.g. setup.id=1 */
+void DbQueryModelManager::filterDataObjects(QList<QString> filters)
 {
    if (!sqlTableModel) sqlTableModel = getDataModel();
-    QString query = constructSelect(filter);
+    QString query = constructSelect(constructWhereByFilters(filters));
     sqlTableModel->setQuery(query);
 }
 
+QString DbQueryModelManager::constructWhereByFilters(QList<QString>filters)
+{
+    if (filters.count() == 0) return "";
+    QString where = " WHERE ";
+    int c = 0;
+    foreach(QString filter, filters){
+        where.append(" %1 ").arg(filter);
+        if (++c < filters.count())
+            where.append(" AND ");
+    }
+    qDebug() << "constructWhereByFilters: " << where;
+    return where;
+}
+
 void DbQueryModelManager::clearFilters()
 {
     sqlTableModel->setQuery(constructSelect());
index 66c1e92..cb65369 100644 (file)
@@ -28,8 +28,9 @@ public:
     DbQueryModelManager(QObject *parent);
 protected:
     void filterById(int id);
-    void filterDataObjects(QString filter);
+    void filterDataObjects(QList<QString> filter);
     void clearFilters();
+    QString constructWhereByFilters(QList<QString> filters);
     virtual QString constructSelectById(int id) const = 0;
     virtual QString constructFilterById(int id) const = 0;
     virtual QString constructSelect(QString whereClause = "") const = 0;
index 443fb44..fc4bc08 100644 (file)
@@ -96,10 +96,10 @@ int DbSetup::countDataObjectRefs(int ) const
     return 0;
 }
 
-QString DbSetup::constructSelect(QString whereClause) const
+QString DbSetup::constructSelect(QString where) const
 {
-    QString where = whereClause.isEmpty()
-        ? "" : QString("WHERE ").append(whereClause);
+    /*QString where = whereClause.isEmpty()
+        ? "" : QString("WHERE ").append(whereClause);*/
     return QString(
         "SELECT setup.id AS SetupId, "
         "setup.platformid AS PlatformId, "
@@ -121,7 +121,7 @@ QString DbSetup::constructFilterById(int id) const
 
 QString DbSetup::constructSelectById(int id) const
 {
-     return constructSelect(constructFilterById(id));
+    return constructSelect(QString("WHERE %1").append(constructFilterById(id)));
 }
 
 // WARNING: this will delete also all the databindings to selected media image path
index 3123cda..3d6d4fc 100644 (file)
@@ -30,6 +30,7 @@ EmuLauncher::EmuLauncher(QWidget *parent) :
 {
     dbPlatform = new DbPlatform(this);
     dbMediaType = new DbMediaType(this);
+    dbMic = 0;
     initWidgets();
     layout();
     connectSignals();
@@ -69,6 +70,7 @@ void EmuLauncher::updateMediaImageContainers()
         ? platformSelectBox->getSelected()->getId()
         : -1;
 
+    if (!dbMic) dbMic = new DbMediaImageContainer(this);
     dbMic->filter(mtid, plfid);
     micTable->setModel(dbMic->getDataModel());
     micTable->resizeColumnsToContents();