at the db layer.
#include <QDir>
#include <QVariant>
#include <QDebug>
+#include <QDateTime>
const QString DatabaseManager::DB_FILENAME = QString("my.db.sqlite");
const QString DatabaseManager::DATABASE = QString("QSQLITE");
EmuFrontObject* DatabaseManager::getDataObject(int id)
{
filterById(id);
- EmuFrontObject *plf = 0;
+ return getFilteredDataObject();
+ /*EmuFrontObject *plf = 0;
if (sqlTableModel->rowCount() == 1)
{
QSqlRecord record = sqlTableModel->record(0);
}
else plf = recordToDataObject(&record);
}
- return plf;
+ return plf;*/
+}
+
+EmuFrontObject* DatabaseManager::getDataObject(QString filter)
+{
+ filterDataObjects(filter);
+ return getFilteredDataObject();
+}
+
+EmuFrontObject* DatabaseManager::getFilteredDataObject()
+{
+ EmuFrontObject *plf = 0;
+ if (sqlTableModel->rowCount() == 1)
+ {
+ QSqlRecord record = sqlTableModel->record(0);
+ if (record.isEmpty())
+ {
+ throw new EmuFrontException(tr("No filtered data available"));
+ }
+ else plf = recordToDataObject(&record);
+ }
+ return plf;
}
EmuFrontObject* DatabaseManager::getDataObjectFromModel(QModelIndex *index)
QSqlRecord record = sqlTableModel->record(index->row());
return recordToDataObject(&record);
}
+
+int DatabaseManager::getCurrentTimeStamp() {
+ return QDateTime::currentDateTime().toTime_t();
+}
QSqlQueryModel* getDataModel();
EmuFrontObject* getDataObjectFromModel(QModelIndex*);
EmuFrontObject* getDataObject(int id);
+ EmuFrontObject* getDataObject(QString filter);
virtual bool updateDataObjectToModel(const EmuFrontObject*) = 0;
virtual bool insertDataObjectToModel(const EmuFrontObject*) = 0;
virtual bool deleteDataObjectFromModel(QModelIndex*) = 0;
virtual int countDataObjectRefs(int id) const = 0;
+ static int getCurrentTimeStamp();
static bool openDB();
void resetModel();
enum {
QSqlQueryModel* sqlTableModel;
virtual EmuFrontObject* recordToDataObject(const QSqlRecord* ) = 0;
virtual void filterById(int id) = 0;
+ virtual void filterDataObjects(QString filter) = 0;
virtual void clearFilters() = 0;
int countRows(QString tableName, QString columnName, int id) const;
static const QString DB_TABLE_NAME_FILE;
static const QString DATABASE;
virtual QSqlQueryModel* getData() = 0;
static QString getDbPath();
+ EmuFrontObject* getFilteredDataObject();
+
};
#endif
#include <QSqlRecord>
#include <QSqlQuery>
#include <QSqlTableModel>
-#include <QDateTime>
#include "dbfile.h"
DbFile::DbFile(QObject *parent) : DbTableModelManager(parent)
-{ }
+{
+ type = -1;
+}
EmuFrontObject* DbFile::recordToDataObject(const QSqlRecord *record)
{
record.setValue("type", plf->getType());
record.setValue("checksum", plf->getCheckSum());
record.setValue("size", plf->getSize());
- record.setValue("updatetime", QDateTime::currentDateTime().toTime_t());
+ record.setValue("updatetime", getCurrentTimeStamp());
tmodel->setRecord(0, record);
ret = tmodel->submitAll();
}
tmodel->setData(sqlTableModel->index(row, File_FileType), plf->getType());
tmodel->setData(sqlTableModel->index(row, File_CheckSum), plf->getCheckSum());
tmodel->setData(sqlTableModel->index(row, File_FileSize), plf->getSize());
- tmodel->setData(sqlTableModel->index(row, File_UpdateTime),
- QDateTime::currentDateTime().toTime_t());
+ tmodel->setData(sqlTableModel->index(row, File_UpdateTime), getCurrentTimeStamp());
return tmodel->submitAll();
}
+int DbFile::insertFile(const EmuFrontFile *mi)
+{
+ QSqlQuery q;
+ q.prepare("INSERT INTO file "
+ "(id, name, type, checksum, size, updatetime) "
+ "VALUES (NULL, :name, :type, :checksum, :size, :updatetime)");
+ q.bindValue(":name", mi->getName());
+ q.bindValue(":type", mi->getType());
+ q.bindValue(":checksum", mi->getCheckSum());
+ q.bindValue(":size", mi->getSize());
+ q.bindValue(":updatetime", DatabaseManager::getCurrentTimeStamp());
+ int id = -1;
+ if (q.exec())
+ id = q.lastInsertId().toInt();
+ return id;
+
+}
+
int DbFile::countDataObjectRefs(int id) const
{
return 0; // TODO
model->setHeaderData(File_CheckSum, Qt::Horizontal, tr("Checksum"));
model->setHeaderData(File_FileSize, Qt::Horizontal, tr("Size"));
model->setHeaderData(File_UpdateTime, Qt::Horizontal, tr("Updated"));
+ if (type >= 0) model->setFilter(QString("type=%1").arg(type));
model->select();
return model;
}
+
+EmuFrontObject* DbFile::getFileByChecksum(QString checksum)
+{
+ return getDataObject(QString("checksum LIKE '%1'").arg(checksum));
+}
bool insertDataObjectToModel(const EmuFrontObject*);
bool deleteDataObjectFromModel(QModelIndex*);
int countDataObjectRefs(int) const;
+ EmuFrontObject* getFileByChecksum(QString checksum);
+ int insertFile(const EmuFrontFile *);
+
enum {
File_Id = 0,
File_Name,
protected:
virtual EmuFrontObject* recordToDataObject(const QSqlRecord*);
+ int type;
private:
virtual QSqlQueryModel* getData();
// along with EmuFront. If not, see <http://www.gnu.org/licenses/>.
#include <QDebug>
+#include <QSqlTableModel>
+#include <QSqlQuery>
#include "dbmediaimage.h"
DbMediaImage::DbMediaImage(QObject *parent)
- : DbQueryModelManager(parent)
-{ }
+ : DbFile(parent)
+{
+ type = EmuFrontFile::FileType_MediaImage;
+}
-bool DbMediaImage::updateDataObjectToModel(const EmuFrontObject *efo)
+/*bool DbMediaImage::updateDataObjectToModel(const EmuFrontObject *efo)
{
+ // TODO
return false;
-}
+}*/
-bool DbMediaImage::insertDataObjectToModel(const EmuFrontObject *efo)
+/*bool DbMediaImage::insertDataObjectToModel(const EmuFrontObject *efo)
{
+ // TODO
return false;
-}
+}*/
-bool DbMediaImage::deleteDataObjectFromModel(QModelIndex *i)
+/*bool DbMediaImage::deleteDataObjectFromModel(QModelIndex *i)
{
+ // TODO
return false;
-}
+}*/
-int DbMediaImage::countDataObjectRefs(int id) const
+/*int DbMediaImage::countDataObjectRefs(int id) const
{
+ // TODO
return -1;
-}
+}*/
-QString DbMediaImage::constructSelect(QString whereClause) const
+/*QString DbMediaImage::constructSelect(QString whereClause) const
{
+ // TODO
return "";
}
QString DbMediaImage::constructSelectById(int id) const
{
+ // TODO
return "";
-}
+}*/
-EmuFrontObject* DbMediaImage::recordToDataObject(const QSqlRecord *)
+/*EmuFrontObject* DbMediaImage::recordToDataObject(const QSqlRecord *)
{
+ // TODO
return 0;
-}
+}*/
-QSqlQueryModel* DbMediaImage::getData()
+/*QSqlQueryModel* DbMediaImage::getData()
{
- return 0;
-}
+ QSqlTableModel *model = new QSqlTableModel;
+ model->setTable(DB_TABLE_NAME_FILE);
+}*/
-int DbMediaImage::getMediaImage(QString checksum) const
-{
- return -1;
-}
int DbMediaImage::insertMediaImage(const MediaImage *mi)
{
- return -1;
+ return DbFile::insertFile(mi);
}
QList<int> DbMediaImage::storeMediaImages(QList<MediaImage *> images)
foreach(MediaImage* mi, images)
{
QString cksum = mi->getCheckSum();
- int id = getMediaImage(cksum);
+ EmuFrontObject *o = getFileByChecksum(cksum);
+ int id = o ? o->getId() : -1;
if (id >= 0)
{
// this media image is already in the database
// TODO: what if the name differs?
- ids.append(id);
- continue;
}
- if (id < 0)
+ else if (id < 0)
{
- // insert new media image to db
id = insertMediaImage(mi);
if (id < 0)
{
// TODO: Build an error message of failed inserts
qDebug() << "Failed inserting media image" << mi->getName();
}
- else
- {
- ids.append(id);
- }
}
+ ids.append(id);
}
}
#ifndef DBMEDIAIMAGE_H
#define DBMEDIAIMAGE_H
-#include "dbquerymodelmanager.h"
+#include "dbfile.h"
#include "../dataobjects/mediaimage.h"
-class DbMediaImage : public DbQueryModelManager
+class DbMediaImage : public DbFile
{
public:
DbMediaImage(QObject *parent);
QList<int> storeMediaImages(QList<MediaImage*>);
- virtual bool updateDataObjectToModel(const EmuFrontObject *);
- virtual bool insertDataObjectToModel(const EmuFrontObject *);
- virtual bool deleteDataObjectFromModel(QModelIndex *);
- virtual int countDataObjectRefs(int id) const;
- int getMediaImage(QString checksum) const;
+ //virtual bool updateDataObjectToModel(const EmuFrontObject *);
+ //virtual bool insertDataObjectToModel(const EmuFrontObject *);
+ //virtual bool deleteDataObjectFromModel(QModelIndex *);
+ //virtual int countDataObjectRefs(int id) const;
+ //int getMediaImage(QString checksum) const;
int insertMediaImage(const MediaImage*);
protected:
- virtual QString constructSelect(QString whereClause) const;
- virtual QString constructSelectById(int id) const;
- virtual EmuFrontObject* recordToDataObject(const QSqlRecord *);
+ //virtual QString constructSelect(QString whereClause) const;
+ //virtual QString constructSelectById(int id) const;
+ //virtual EmuFrontObject* recordToDataObject(const QSqlRecord *);
private:
- virtual QSqlQueryModel* getData();
+ //virtual QSqlQueryModel* getData();
};
#endif // DBMEDIAIMAGE_H
bool DbMediaImageContainer::updateDataObjectToModel(const EmuFrontObject *efo)
{
+ // TODO
return false;
}
bool DbMediaImageContainer::insertDataObjectToModel(const EmuFrontObject *efo)
{
+ // TODO
return false;
}
bool DbMediaImageContainer::deleteDataObjectFromModel(QModelIndex *i)
{
+ // TODO
return false;
}
int DbMediaImageContainer::countDataObjectRefs(int id) const
{
+ // TODO
return -1;
}
QString DbMediaImageContainer::constructSelect(QString whereClause) const
{
+ // TODO
return "";
}
QString DbMediaImageContainer::constructSelectById(int id) const
{
+ // TODO
return "";
}
EmuFrontObject* DbMediaImageContainer::recordToDataObject(const QSqlRecord *)
{
+ // TODO
return 0;
}
QSqlQueryModel* DbMediaImageContainer::getData()
{
+ // TODO
return 0;
}
int DbMediaImageContainer::getMediaImageContainer(QString checksum) const
{
+ // TODO
return -1;
}
#include <QSqlQueryModel>
#include "dbquerymodelmanager.h"
-
DbQueryModelManager::DbQueryModelManager(QObject *parent)
: DatabaseManager(parent)
{
void DbQueryModelManager::filterById(int id)
{
- if (!sqlTableModel) sqlTableModel = getDataModel();
- QString query = constructSelectById(id);
+ return filterDataObjects(QString("setup.id = %1").arg(id));
+}
+
+/* filter must be in SQL where clause format (without the WHERE word) */
+void DbQueryModelManager::filterDataObjects(QString filter)
+{
+ if (!sqlTableModel) sqlTableModel = getDataModel();
+ QString query = constructSelect(filter);
sqlTableModel->setQuery(query);
}
DbQueryModelManager(QObject *parent);
protected:
void filterById(int id);
+ void filterDataObjects(QString filter);
void clearFilters();
virtual QString constructSelectById(int id) const = 0;
virtual QString constructSelect(QString whereClause = "") const = 0;
void DbTableModelManager::filterById(int id)
{
+ return filterDataObjects(QString("id = %1").arg(id));
+}
+
+void DbTableModelManager::filterDataObjects(QString filter)
+{
if (!sqlTableModel) sqlTableModel = getDataModel(); // throw EmuFrontException("Data model not available!");
QSqlTableModel *tmodel = dynamic_cast<QSqlTableModel*>(sqlTableModel);
- tmodel->setFilter(QString("id = %1").arg(id));
+ tmodel->setFilter(filter);
tmodel->select();
}
DbTableModelManager(QObject *parent);
protected:
void filterById(int id);
+ void filterDataObjects(QString filter);
void clearFilters();
};