QSqlQuery &q = prepare(
"SELECT fid, eid, aid, gid, lid, entry_added, anidb_update, entry_update, my_update, "
" ed2k, size, length, extension, group_name, group_name_short, crc, "
- " release_date, version, censored, deprecated, source, quality_id, quality, resolution, "
+ " release_date, version, censored, deprecated, source, quality, resolution, "
" video_codec, audio_codec, audio_language, subtitle_language, aspect_ratio, "
" my_watched, my_state, my_file_state, my_storage, my_source, my_other "
" FROM file "
QSqlQuery &q = prepare(
"SELECT f.fid, f.eid, f.aid, f.gid, f.entry_added, f.anidb_update, f.entry_update, f.my_update, "
" f.ed2k, f.size, f.length, f.extension, f.group_name, f.group_name_short, f.crc, "
- " f.release_date, f.version, f.censored, f.source, f.quality_id, f.quality, f.resolution, "
+ " f.release_date, f.version, f.censored, f.source, f.quality, f.resolution, "
" f.video_codec, f.audio_codec, f.audio_language, f.subtitle_language, f.aspect_ratio, "
" f.my_watched, f.my_state, f.my_file_state, f.my_storage, f.my_source, f.my_other "
" FROM file f "
QSqlQuery &q = prepare(
"SELECT f.fid, f.eid, f.aid, f.gid, f.entry_added, f.anidb_update, f.entry_update, f.my_update, "
" f.ed2k, f.size, f.length, f.extension, f.group_name, f.group_name_short, f.crc, "
- " f.release_date, f.version, f.censored, f.source, f.quality_id, f.quality, f.resolution, "
+ " f.release_date, f.version, f.censored, f.source, f.quality, f.resolution, "
" f.video_codec, f.audio_codec, f.audio_language, f.subtitle_language, f.aspect_ratio, "
" f.my_watched, f.my_state, f.my_file_state, f.my_storage, f.my_source, f.my_other "
" FROM file f "
"UNION "
"SELECT f.fid, f.eid, f.aid, f.gid, f.entry_added, f.anidb_update, f.entry_update, f.my_update, "
" f.ed2k, f.size, f.length, f.extension, f.group_name, f.group_name_short, f.crc, "
- " f.release_date, f.version, f.censored, f.source, f.quality_id, f.quality, f.resolution, "
+ " f.release_date, f.version, f.censored, f.source, f.quality, f.resolution, "
" f.video_codec, f.audio_codec, f.audio_language, f.subtitle_language, f.aspect_ratio, "
" f.my_watched, f.my_state, f.my_file_state, f.my_storage, f.my_source, f.my_other "
" FROM file f "
" AND e.epno = :epno "
"GROUP BY f.fid, f.eid, f.aid, f.gid, f.entry_added, f.anidb_update, f.entry_update, f.my_update, "
" f.ed2k, f.size, f.length, f.extension, f.group_name, f.group_name_short, f.crc, "
- " f.release_date, f.version, f.censored, f.source, f.quality_id, f.quality, f.resolution, "
+ " f.release_date, f.version, f.censored, f.source, f.quality, f.resolution, "
" f.video_codec, f.audio_codec, f.audio_language, f.subtitle_language, f.aspect_ratio, "
" f.my_watched, f.my_state, f.my_file_state, f.my_storage, f.my_source, f.my_other ");
" ed2k = :ed2k, size = :size, length = :length, extension = :extension, "
" group_name = :groupName, group_name_short = :groupNameShort, crc = :crc, "
" release_date = :releaseDate, version = :version, censored = :censored, "
- " deprecated = :deprecated, source = :source, quality_id = :qualityId, quality = :quality, "
+ " deprecated = :deprecated, source = :source, quality = :quality, "
" resolution = :resolution, video_codec = :videoCodec, "
" audio_codec = :audioCodec, audio_language = :audioLanguage, "
" subtitle_language = :subtitleLanguage, aspect_ratio = :aspectRatio, "
q.bindValue(":censored", file.censored);
q.bindValue(":deprecated", file.deprecated);
q.bindValue(":source", file.source);
- q.bindValue(":qualityId", file.qualityId);
q.bindValue(":quality", file.quality);
q.bindValue(":resolution", file.resolution);
q.bindValue(":videoCodec", file.videoCodec);
QSqlQuery &q = prepare(
"INSERT INTO file VALUES(:fid, :eid, :aid, :gid, :lid, DEFAULT, :anidbUpdate, :entryUpdate, :myUpdate, "
" :ed2k, :size, :length, :extension, :groupName, :groupNameShort, "
- " :crc, :releaseDate, :version, :censored, :deprecated, :source, :qualityId, "
+ " :crc, :releaseDate, :version, :censored, :deprecated, :source, "
" :quality, :resolution, :vidoeCodec, :audioCodec, :audioLanguage, "
" :subtitleLanguage, :aspectRatio, :myWatched, :myState, "
" :myFileState, :myStorage, :mySource, :myOther) ");
q.bindValue(":censored", file.censored);
q.bindValue(":deprecated", file.deprecated);
q.bindValue(":source", file.source);
- q.bindValue(":qualityId", file.qualityId);
q.bindValue(":quality", file.quality);
q.bindValue(":resolution", file.resolution);
q.bindValue(":videoCodec", file.videoCodec);
data.censored = result.value(offset++).toBool();
data.deprecated = result.value(offset++).toBool();
data.source = result.value(offset++).toString();
- data.qualityId = result.value(offset++).toInt();
data.quality = result.value(offset++).toString();
data.resolution = result.value(offset++).toString();
data.videoCodec = result.value(offset++).toString();
return
"f.fid, f.eid, f.aid, f.gid, f.lid, f.entry_added, f.anidb_update, f.entry_update, f.my_update, "
"f.ed2k, f.size, f.length, f.extension, f.group_name, f.group_name_short, f.crc, "
- "f.release_date, f.version, f.censored, f.deprecated, f.source, f.quality_id, f.quality, f.resolution, "
+ "f.release_date, f.version, f.censored, f.deprecated, f.source, f.quality, f.resolution, "
"f.video_codec, f.audio_codec, f.audio_language, f.subtitle_language, f.aspect_ratio, "
"f.my_watched, f.my_state, f.my_file_state, f.my_storage, f.my_source, f.my_other ";
}
f.version = q.value(16).toInt();
f.censored = q.value(17).toBool();
f.source = q.value(18).toString();
- f.qualityId = q.value(19).toInt();
f.quality = q.value(20).toString();
f.resolution = q.value(21).toString();
f.videoCodec = q.value(22).toString();
DROP TYPE IF EXISTS episode_type_enum;
CREATE TYPE episode_type_enum AS ENUM ('', 'S', 'C', 'T', 'P', 'O');
+DROP TYPE IF EXISTS quality_enum;
+CREATE TYPE quality_enum AS ENUM ('unknown', 'very high', 'high', 'med',
+ 'low', 'very low', 'corrupted', 'eyecancer');
CREATE TABLE anime (
aid integer NOT NULL,
censored boolean,
deprecated boolean DEFAULT false,
source character varying(50),
- quality_id integer,
- quality character varying(50),
+ quality quality_enum NOT NULL,
resolution character varying(50),
video_codec character varying(50),
audio_codec character varying(50),
CREATE INDEX file_aid_fk ON file USING btree (aid);
CREATE INDEX file_eid_fk ON file USING btree (eid);
+CREATE TABLE quality
+(
+ quality quality_enum NOT NULL,
+ quality_id integer NOT NULL,
+ ordering integer NOT NULL DEFAULT 0,
+ CONSTRAINT quality_pk PRIMARY KEY (quality ),
+ CONSTRAINT quality_id_unique UNIQUE (quality_id )
+);
+
CREATE TABLE file_episode_rel (
fid integer NOT NULL,
eid integer NOT NULL,
CONSTRAINT file_location_pk PRIMARY KEY (location_id ),
CONSTRAINT file_location_unique_location UNIQUE (fid, host_id, path )
);
+CREATE INDEX file_location_fid_fk ON file_location USING btree (fid);
CREATE TABLE unknown_file (
ed2k character(32) NOT NULL,
CONSTRAINT log_pk PRIMARY KEY (log_id)
);
-CREATE VIEW file_data AS
- SELECT f.fid, f.eid, f.aid, f.gid, f.anidb_update, f.entry_update, f.my_update, f.ed2k, f.size, f.length, f.extension, f.group_name, f.group_name_short, f.crc, f.release_date, f.version, f.censored, f.deprecated, f.source, f.quality_id, f.quality, f.resolution, f.video_codec, f.audio_codec, f.audio_language, f.subtitle_language, f.aspect_ratio, f.my_watched, f.my_state, f.my_file_state, f.my_storage, f.my_source, f.my_other, a.title_romaji AS atitle, e.title_english AS eptitle FROM ((file f LEFT JOIN anime a ON ((f.aid = a.aid))) LEFT JOIN episode e ON ((f.eid = e.eid)));
-
CREATE VIEW rename_data AS
SELECT f.fid, f.eid, f.aid, f.gid, a.anidb_update AS anime_anidb_update, a.entry_update AS anime_entry_update, a.my_update AS anime_my_update, a.title_english AS anime_title_english,
a.title_romaji AS anime_title_romaji, a.title_kanji AS anime_title_kanji, a.description, a.year, a.start_date, a.end_date, a.type AS anime_type, a.total_episode_count, a.highest_epno, a.rating AS anime_rating, a.votes AS anime_votes,
FROM file f
JOIN anime a ON a.aid = f.aid
JOIN episode e ON e.eid = f.eid
+ JOIN episode_type et ON et.type = e.type
+ JOIN quality q ON q.quality = f.quality
JOIN file_location fl ON fl.fid = f.fid;
--- WHEN (OLD.* IS DISTINCT FROM NEW.*) <- means if anything changed
CREATE OR REPLACE RULE anime_update_rename_rule AS
ON UPDATE TO anime
WHERE old.aid = new.aid
- AND (old.title_english <> new.title_english OR old.title_romaji <> new.title_romaji OR old.title_kanji <> new.title_kanji OR old.description <> new.description OR old.year <> new.year OR old.start_date <> new.start_date OR old.end_date <> new.end_date OR old.type::text <> new.type::text OR old.total_episode_count <> new.total_episode_count OR old.highest_epno <> new.highest_epno OR old.rating <> new.rating OR old.votes <> new.votes OR old.temp_rating <> new.temp_rating OR old.temp_votes <> new.temp_votes)
+ AND (old.* IS DISTINCT FROM new.*)
DO UPDATE file_location fl SET renamed = NULL
FROM file f
WHERE f.fid = fl.fid AND f.aid = old.aid;
CREATE OR REPLACE RULE episode_update_rename_rule AS
ON UPDATE TO episode
WHERE old.eid = new.eid
- AND (old.aid <> new.aid OR old.epno <> new.epno OR old.title_english <> new.title_english OR old.title_romaji <> new.title_romaji OR old.title_kanji <> new.title_kanji OR old.length <> new.length OR old.airdate <> new.airdate OR old.state <> new.state OR old.type <> new.type OR old.recap <> new.recap OR old.rating <> new.rating OR old.votes <> new.votes)
+ AND (old.* IS DISTINCT FROM new.*)
DO UPDATE file_location fl SET renamed = NULL
FROM file f
WHERE f.fid = fl.fid AND f.eid = old.eid;
CREATE OR REPLACE RULE file_update_rename_rule AS
ON UPDATE TO file
WHERE old.fid = new.fid
- AND (old.eid <> new.eid OR old.aid <> new.aid OR old.gid <> new.gid OR old.ed2k <> new.ed2k OR old.size <> new.size OR old.length <> new.length OR old.extension::text <> new.extension::text OR old.group_name <> new.group_name OR old.group_name_short <> new.group_name_short OR old.crc <> new.crc OR old.release_date <> new.release_date OR old.version <> new.version OR old.censored <> new.censored OR old.source::text <> new.source::text OR old.quality_id <> new.quality_id OR old.quality::text <> new.quality::text OR old.resolution::text <> new.resolution::text OR old.video_codec::text <> new.video_codec::text OR old.audio_codec::text <> new.audio_codec::text OR old.audio_language::text <> new.audio_language::text OR old.subtitle_language::text <> new.subtitle_language::text OR old.aspect_ratio::text <> new.aspect_ratio::text)
+ AND (old.* IS DISTINCT FROM new.*)
DO UPDATE file_location fl SET renamed = NULL
WHERE fl.fid = old.fid;