package com.florianmski.tracktoid.data.database;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import com.florianmski.tracktoid.data.database.columns.EpisodeColumns;
import com.florianmski.tracktoid.data.database.columns.MovieColumns;
import com.florianmski.tracktoid.data.database.columns.SeasonColumns;
import com.florianmski.tracktoid.data.database.columns.ShowColumns;
import net.simonvt.schematic.annotation.Database;
import net.simonvt.schematic.annotation.ExecOnCreate;
import net.simonvt.schematic.annotation.OnCreate;
import net.simonvt.schematic.annotation.OnUpgrade;
import net.simonvt.schematic.annotation.Table;
@Database(version = DatabaseSchematic.VERSION, fileName = DatabaseSchematic.FILE_NAME, className = "GeneratedDatabase", packageName = "com.florianmski.tracktoid.data.provider")
public final class DatabaseSchematic
{
private DatabaseSchematic()
{
}
public static final int VERSION = 1;
public static final String FILE_NAME = "traktoid.db";
// Tables
@Table(ShowColumns.class)
public static final String SHOWS = "shows";
@Table(SeasonColumns.class)
public static final String SEASONS = "seasons";
@Table(EpisodeColumns.class)
public static final String EPISODES = "episodes";
@Table(MovieColumns.class)
public static final String MOVIES = "movies";
// Indexes
// indexes for the shows table
@ExecOnCreate
public static String indexShowsId = createIndex(DatabaseSchematic.SHOWS, ShowColumns.ID_TRAKT);
@ExecOnCreate
public static String indexShowsTitle = createIndex(DatabaseSchematic.SHOWS, ShowColumns.TITLE);
// indexes for the seasons table
@ExecOnCreate
public static String indexSeasonsId = createIndex(DatabaseSchematic.SEASONS, SeasonColumns.ID_TRAKT);
@ExecOnCreate
public static String indexSeasonsShowId = createIndex(DatabaseSchematic.SEASONS, SeasonColumns.SHOW_ID);
@ExecOnCreate
public static String indexSeasonsSeason = createIndex(DatabaseSchematic.SEASONS, SeasonColumns.NUMBER);
// indexes for the episodes table
@ExecOnCreate
public static String indexEpisodesId = createIndex(DatabaseSchematic.EPISODES, EpisodeColumns.ID_TRAKT);
@ExecOnCreate
public static String indexEpisodesSeason = createIndex(DatabaseSchematic.EPISODES, EpisodeColumns.SEASON);
@ExecOnCreate
public static String indexEpisodesShowId = createIndex(DatabaseSchematic.EPISODES, EpisodeColumns.SHOW_ID);
@ExecOnCreate
public static String indexEpisodesEpisode = createIndex(DatabaseSchematic.EPISODES, EpisodeColumns.SEASON, EpisodeColumns.NUMBER);
// indexes for the movies table
@ExecOnCreate
public static String indexMoviesId = createIndex(DatabaseSchematic.MOVIES, MovieColumns.ID_TRAKT);
@ExecOnCreate
public static String indexMoviesTitle = createIndex(DatabaseSchematic.MOVIES, MovieColumns.TITLE);
// Triggers
// set watchlist = 0 on season and show if an episode is watched
@ExecOnCreate
public static String triggerWatchlist = "CREATE TRIGGER " + DatabaseSchematic.EPISODES + "_" + "update" + "_" + EpisodeColumns.WATCHED + " "
+ "BEFORE UPDATE OF " + EpisodeColumns.WATCHED + " ON " + DatabaseSchematic.EPISODES + " "
+ "WHEN " + "new." + EpisodeColumns.WATCHED + " = 1 "
+ "BEGIN "
+ "UPDATE " + DatabaseSchematic.SHOWS + " "
+ "SET " + ShowColumns.WATCHLISTED + " = 0 "
+ "WHERE " + ShowColumns.ID_TRAKT + " = old." + EpisodeColumns.SHOW_ID + "; "
+ "UPDATE " + DatabaseSchematic.SEASONS + " "
+ "SET " + SeasonColumns.WATCHLISTED + " = 0 "
+ "WHERE " + SeasonColumns.ID_TRAKT + " = old." + EpisodeColumns.SEASON_ID + "; "
+ "END" + ";";
@OnCreate
public static void onCreate(Context context, SQLiteDatabase db)
{
}
@OnUpgrade
public static void onUpgrade(Context context, SQLiteDatabase db, int oldVersion, int newVersion)
{
}
private static String createIndex(String table, String... columns)
{
return "CREATE INDEX " + table + "_" + joinColumns("_", columns) + " on " + table + "(" + joinColumns(",", columns) + ");";
}
private static String joinColumns(String separator, String... columns)
{
String join = "";
for(String column : columns)
join = separator + column;
return join.substring(1);
}
}