]> Some of my projects - localmylist.git/commitdiff
Add new FileEpisode table to DynamicModel.
authorAPTX <marek321@gmail.com>
Sun, 14 Jun 2015 10:27:56 +0000 (12:27 +0200)
committerAPTX <marek321@gmail.com>
Sun, 14 Jun 2015 10:27:56 +0000 (12:27 +0200)
This new table shows all files related to an episode
and not just the files for which an episode is the
main episode.

To get all episodes a UNION is needed over file and file
joined with file_episode_rel, but Dynamic Model's query
builder does not support building such queries. The
workaround is to do the UNION in a view and query it
instead.

File will be changed to what FileEpisode does in the
future as it was File's intended behaviour.

localmylist-management/tabs/dynamicmodeltab.cpp
localmylist/dynamicmodel/types.cpp
localmylist/dynamicmodel/types.h
localmylist/share/schema/schema.sql

index 85033896f83fa9456d65a42d55b269bff21731d8..7dae96c6702c621084aabb194833f25a4568f0ad 100644 (file)
@@ -58,6 +58,7 @@ void DynamicModelTab::init()
        dataModel->registerDataType(new ColumnType);
        dataModel->registerDataType(new AnimeType);
        dataModel->registerDataType(new EpisodeType);
+       dataModel->registerDataType(new EpisodeFileType);
        dataModel->registerDataType(new FileType);
        dataModel->registerDataType(new FileLocationType);
        dataModel->registerDataType(new AnimeTitleType);
@@ -66,8 +67,10 @@ void DynamicModelTab::init()
        dataModel->registerTypeRelation(new ForeignKeyRelation("anime", "file", "aid"));
        dataModel->registerTypeRelation(new ForeignKeyRelation("file", "anime", "aid"));
        dataModel->registerTypeRelation(new ForeignKeyRelation("episode", "file", "eid"));
+       dataModel->registerTypeRelation(new ForeignKeyRelation("episode", "episode_file", "eid", "meid"));
        dataModel->registerTypeRelation(new ForeignKeyRelation("file", "episode", "eid"));
        dataModel->registerTypeRelation(new ForeignKeyRelation("file", "file_location", "fid"));
+       dataModel->registerTypeRelation(new ForeignKeyRelation("episode_file", "file_location", "fid"));
 
 
        dynamicModelFilterModel = new DynamicModelFilterModel(this);
index 2c4ea389fca8dbabd5e560b284a384e4ccd92cbc..6376afa6bdf7e7b102f6c42630a252722dca2aab 100644 (file)
@@ -482,6 +482,11 @@ void FileType::fillFileData(FileData &data, const SqlResultIteratorInterface &qu
        Database::readFileData(query, data.fileData, 1);
 }
 
+QString EpisodeFileType::tableName() const
+{
+       return "episode_file";
+}
+
 // =============================================================================================================
 
 QString FileLocationType::tableName() const
index 1a3c37c825d41fde96e3f4118baa41a151251aab..8c7f04edd811078f6f4d8914485bee8712176d06 100644 (file)
@@ -122,6 +122,12 @@ private:
        static void fillFileData(FileData &data, const SqlResultIteratorInterface &query);
 };
 
+class LOCALMYLISTSHARED_EXPORT EpisodeFileType : public FileType
+{
+       Q_OBJECT
+       QString tableName() const override;
+};
+
 // =============================================================================================================
 
 class LOCALMYLISTSHARED_EXPORT FileLocationType : public DataType
index e55f5681a39c63788fd64e87db7feb4155fa1ec1..f44ce9fb96729d7812a17bae8551d29bcd390ecc 100644 (file)
@@ -291,6 +291,12 @@ CREATE OR REPLACE VIEW rename_data AS
                JOIN quality q ON q.quality = f.quality
                JOIN file_location fl ON fl.fid = f.fid;
 
+CREATE OR REPLACE VIEW episode_file AS
+       SELECT f.eid AS meid, f.* FROM file f
+       UNION
+       SELECT fer.eid AS meid, f.* FROM file f
+               JOIN file_episode_rel fer ON f.fid = fer.fid;
+
 CREATE OR REPLACE RULE anime_update_rename_rule AS
        ON UPDATE TO anime
                WHERE old.aid = new.aid