From 6d3b28f9b12964b161b5a7ac0038435cfdd6e27b Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 31 Jul 2010 11:05:59 +0200 Subject: Added database maintenance code Implemented a function in MappingTableModel to remove all actors/genres with no references in the according mapping table. Available through the "File" menu. --- mappingtablemodel.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'mappingtablemodel.cpp') diff --git a/mappingtablemodel.cpp b/mappingtablemodel.cpp index 65221e4..47e3136 100644 --- a/mappingtablemodel.cpp +++ b/mappingtablemodel.cpp @@ -39,6 +39,12 @@ MappingTableModel::MappingTableModel(QStringList &headers, const QString &table, QString mappingQuery = QString("SELECT %1 FROM %2, %3 WHERE %2.%4 = %3.%4 AND %3.iseriesparts_id = :id").arg(mNameColumnName).arg(mTable).arg(mMappingTable).arg(mIdColumnName); mMappingQuery = new QSqlQuery(mDb); mMappingQuery->prepare(mappingQuery); + QString allItemsQuery = QString("SELECT %1, %2 FROM %3").arg(mIdColumnName).arg(mNameColumnName).arg(mTable); + mAllItemsQuery = new QSqlQuery(mDb); + mAllItemsQuery->prepare(allItemsQuery); + QString itemCountQuery = QString("SELECT COUNT(*) FROM %1 WHERE %2 = :id").arg(mMappingTable).arg(mIdColumnName); + mItemCountQuery = new QSqlQuery(mDb); + mItemCountQuery->prepare(itemCountQuery); //get data populate(); @@ -51,6 +57,8 @@ MappingTableModel::~MappingTableModel(){ delete mAddMappingQuery; delete mRemoveMappingQuery; delete mMappingQuery; + delete mAllItemsQuery; + delete mItemCountQuery; mDb = QSqlDatabase(); } @@ -194,9 +202,45 @@ QList MappingTableModel::mappings(int seriesId){ return retval; } +QHash MappingTableModel::zeroUsers(){ + QHash items; + mAllItemsQuery->exec(); + while(mAllItemsQuery->next()){ + items.insert(mAllItemsQuery->value(0).toInt(), mAllItemsQuery->value(1).toString()); + } + QHash retval; + if(!items.isEmpty()){ + QList ids = items.keys(); + foreach(int id, ids){ + mItemCountQuery->bindValue(":id", id); + if(mItemCountQuery->exec()){ + mItemCountQuery->first(); + int count = mItemCountQuery->value(0).toInt(); + if(count == 0){ + QString itemName = items.value(id); + retval.insert(itemName, id); + } + } + } + } + return retval; +} + +void MappingTableModel::deleteItems(const QList &ids){ + if(ids.isEmpty()){ + return; + } + foreach(int id, ids){ + mDeleteItemQuery->bindValue(":id", id); + mDeleteItemQuery->exec(); + } + populate(); +} + void MappingTableModel::populate(){ QString query = QString("SELECT %1, %2 FROM %3 ORDER BY %2").arg(mIdColumnName).arg(mNameColumnName).arg(mTable); QList rootData; + mItemNames.clear(); rootData << QString(tr("%1 name")).arg(mTable) << tr("Id"); SmTreeItem *root = new SmTreeItem(rootData); QSqlQuery dataQuery(query, mDb); -- cgit v1.2.3-70-g09d2