Tables classes in Kotlin. Rename COLUMN -> COL

This commit is contained in:
len 2016-05-20 15:49:31 +02:00
parent dba64f849b
commit ca7e5260f0
25 changed files with 315 additions and 409 deletions

View File

@ -21,21 +21,21 @@ class DbOpenHelper(context: Context)
} }
override fun onCreate(db: SQLiteDatabase) = with(db) { override fun onCreate(db: SQLiteDatabase) = with(db) {
execSQL(MangaTable.getCreateTableQuery()) execSQL(MangaTable.createTableQuery)
execSQL(ChapterTable.getCreateTableQuery()) execSQL(ChapterTable.createTableQuery)
execSQL(MangaSyncTable.getCreateTableQuery()) execSQL(MangaSyncTable.createTableQuery)
execSQL(CategoryTable.getCreateTableQuery()) execSQL(CategoryTable.createTableQuery)
execSQL(MangaCategoryTable.getCreateTableQuery()) execSQL(MangaCategoryTable.createTableQuery)
// DB indexes // DB indexes
execSQL(MangaTable.getCreateUrlIndexQuery()) execSQL(MangaTable.createUrlIndexQuery)
execSQL(MangaTable.getCreateFavoriteIndexQuery()) execSQL(MangaTable.createFavoriteIndexQuery)
execSQL(ChapterTable.getCreateMangaIdIndexQuery()) execSQL(ChapterTable.createMangaIdIndexQuery)
} }
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
if (oldVersion < 2) { if (oldVersion < 2) {
db.execSQL(ChapterTable.getSourceOrderUpdateQuery()) db.execSQL(ChapterTable.sourceOrderUpdateQuery)
} }
} }

View File

@ -10,16 +10,16 @@ import eu.kanade.tachiyomi.data.database.tables.CategoryTable;
@StorIOSQLiteType(table = CategoryTable.TABLE) @StorIOSQLiteType(table = CategoryTable.TABLE)
public class Category implements Serializable { public class Category implements Serializable {
@StorIOSQLiteColumn(name = CategoryTable.COLUMN_ID, key = true) @StorIOSQLiteColumn(name = CategoryTable.COL_ID, key = true)
public Integer id; public Integer id;
@StorIOSQLiteColumn(name = CategoryTable.COLUMN_NAME) @StorIOSQLiteColumn(name = CategoryTable.COL_NAME)
public String name; public String name;
@StorIOSQLiteColumn(name = CategoryTable.COLUMN_ORDER) @StorIOSQLiteColumn(name = CategoryTable.COL_ORDER)
public int order; public int order;
@StorIOSQLiteColumn(name = CategoryTable.COLUMN_FLAGS) @StorIOSQLiteColumn(name = CategoryTable.COL_FLAGS)
public int flags; public int flags;
public Category() {} public Category() {}

View File

@ -14,34 +14,34 @@ import eu.kanade.tachiyomi.util.UrlUtil;
@StorIOSQLiteType(table = ChapterTable.TABLE) @StorIOSQLiteType(table = ChapterTable.TABLE)
public class Chapter implements Serializable { public class Chapter implements Serializable {
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_ID, key = true) @StorIOSQLiteColumn(name = ChapterTable.COL_ID, key = true)
public Long id; public Long id;
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_MANGA_ID) @StorIOSQLiteColumn(name = ChapterTable.COL_MANGA_ID)
public Long manga_id; public Long manga_id;
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_URL) @StorIOSQLiteColumn(name = ChapterTable.COL_URL)
public String url; public String url;
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_NAME) @StorIOSQLiteColumn(name = ChapterTable.COL_NAME)
public String name; public String name;
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_READ) @StorIOSQLiteColumn(name = ChapterTable.COL_READ)
public boolean read; public boolean read;
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_LAST_PAGE_READ) @StorIOSQLiteColumn(name = ChapterTable.COL_LAST_PAGE_READ)
public int last_page_read; public int last_page_read;
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_DATE_FETCH) @StorIOSQLiteColumn(name = ChapterTable.COL_DATE_FETCH)
public long date_fetch; public long date_fetch;
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_DATE_UPLOAD) @StorIOSQLiteColumn(name = ChapterTable.COL_DATE_UPLOAD)
public long date_upload; public long date_upload;
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_CHAPTER_NUMBER) @StorIOSQLiteColumn(name = ChapterTable.COL_CHAPTER_NUMBER)
public float chapter_number; public float chapter_number;
@StorIOSQLiteColumn(name = ChapterTable.COLUMN_SOURCE_ORDER) @StorIOSQLiteColumn(name = ChapterTable.COL_SOURCE_ORDER)
public int source_order; public int source_order;
public int status; public int status;

View File

@ -14,49 +14,49 @@ import eu.kanade.tachiyomi.util.UrlUtil;
@StorIOSQLiteType(table = MangaTable.TABLE) @StorIOSQLiteType(table = MangaTable.TABLE)
public class Manga implements Serializable { public class Manga implements Serializable {
@StorIOSQLiteColumn(name = MangaTable.COLUMN_ID, key = true) @StorIOSQLiteColumn(name = MangaTable.COL_ID, key = true)
public Long id; public Long id;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_SOURCE) @StorIOSQLiteColumn(name = MangaTable.COL_SOURCE)
public int source; public int source;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_URL) @StorIOSQLiteColumn(name = MangaTable.COL_URL)
public String url; public String url;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_ARTIST) @StorIOSQLiteColumn(name = MangaTable.COL_ARTIST)
public String artist; public String artist;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_AUTHOR) @StorIOSQLiteColumn(name = MangaTable.COL_AUTHOR)
public String author; public String author;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_DESCRIPTION) @StorIOSQLiteColumn(name = MangaTable.COL_DESCRIPTION)
public String description; public String description;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_GENRE) @StorIOSQLiteColumn(name = MangaTable.COL_GENRE)
public String genre; public String genre;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_TITLE) @StorIOSQLiteColumn(name = MangaTable.COL_TITLE)
public String title; public String title;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_STATUS) @StorIOSQLiteColumn(name = MangaTable.COL_STATUS)
public int status; public int status;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_THUMBNAIL_URL) @StorIOSQLiteColumn(name = MangaTable.COL_THUMBNAIL_URL)
public String thumbnail_url; public String thumbnail_url;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_FAVORITE) @StorIOSQLiteColumn(name = MangaTable.COL_FAVORITE)
public boolean favorite; public boolean favorite;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_LAST_UPDATE) @StorIOSQLiteColumn(name = MangaTable.COL_LAST_UPDATE)
public long last_update; public long last_update;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_INITIALIZED) @StorIOSQLiteColumn(name = MangaTable.COL_INITIALIZED)
public boolean initialized; public boolean initialized;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_VIEWER) @StorIOSQLiteColumn(name = MangaTable.COL_VIEWER)
public int viewer; public int viewer;
@StorIOSQLiteColumn(name = MangaTable.COLUMN_CHAPTER_FLAGS) @StorIOSQLiteColumn(name = MangaTable.COL_CHAPTER_FLAGS)
public int chapter_flags; public int chapter_flags;
public transient int unread; public transient int unread;

View File

@ -8,13 +8,13 @@ import eu.kanade.tachiyomi.data.database.tables.MangaCategoryTable;
@StorIOSQLiteType(table = MangaCategoryTable.TABLE) @StorIOSQLiteType(table = MangaCategoryTable.TABLE)
public class MangaCategory { public class MangaCategory {
@StorIOSQLiteColumn(name = MangaCategoryTable.COLUMN_ID, key = true) @StorIOSQLiteColumn(name = MangaCategoryTable.COL_ID, key = true)
public Long id; public Long id;
@StorIOSQLiteColumn(name = MangaCategoryTable.COLUMN_MANGA_ID) @StorIOSQLiteColumn(name = MangaCategoryTable.COL_MANGA_ID)
public long manga_id; public long manga_id;
@StorIOSQLiteColumn(name = MangaCategoryTable.COLUMN_CATEGORY_ID) @StorIOSQLiteColumn(name = MangaCategoryTable.COL_CATEGORY_ID)
public int category_id; public int category_id;
public MangaCategory() {} public MangaCategory() {}

View File

@ -11,31 +11,31 @@ import eu.kanade.tachiyomi.data.mangasync.base.MangaSyncService;
@StorIOSQLiteType(table = MangaSyncTable.TABLE) @StorIOSQLiteType(table = MangaSyncTable.TABLE)
public class MangaSync implements Serializable { public class MangaSync implements Serializable {
@StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_ID, key = true) @StorIOSQLiteColumn(name = MangaSyncTable.COL_ID, key = true)
public Long id; public Long id;
@StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_MANGA_ID) @StorIOSQLiteColumn(name = MangaSyncTable.COL_MANGA_ID)
public long manga_id; public long manga_id;
@StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_SYNC_ID) @StorIOSQLiteColumn(name = MangaSyncTable.COL_SYNC_ID)
public int sync_id; public int sync_id;
@StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_REMOTE_ID) @StorIOSQLiteColumn(name = MangaSyncTable.COL_REMOTE_ID)
public int remote_id; public int remote_id;
@StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_TITLE) @StorIOSQLiteColumn(name = MangaSyncTable.COL_TITLE)
public String title; public String title;
@StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_LAST_CHAPTER_READ) @StorIOSQLiteColumn(name = MangaSyncTable.COL_LAST_CHAPTER_READ)
public int last_chapter_read; public int last_chapter_read;
@StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_TOTAL_CHAPTERS) @StorIOSQLiteColumn(name = MangaSyncTable.COL_TOTAL_CHAPTERS)
public int total_chapters; public int total_chapters;
@StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_SCORE) @StorIOSQLiteColumn(name = MangaSyncTable.COL_SCORE)
public float score; public float score;
@StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_STATUS) @StorIOSQLiteColumn(name = MangaSyncTable.COL_STATUS)
public int status; public int status;
public boolean update; public boolean update;

View File

@ -13,7 +13,7 @@ interface CategoryQueries : DbProvider {
.listOfObjects(Category::class.java) .listOfObjects(Category::class.java)
.withQuery(Query.builder() .withQuery(Query.builder()
.table(CategoryTable.TABLE) .table(CategoryTable.TABLE)
.orderBy(CategoryTable.COLUMN_ORDER) .orderBy(CategoryTable.COL_ORDER)
.build()) .build())
.prepare() .prepare()

View File

@ -19,7 +19,7 @@ interface ChapterQueries : DbProvider {
.listOfObjects(Chapter::class.java) .listOfObjects(Chapter::class.java)
.withQuery(Query.builder() .withQuery(Query.builder()
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COLUMN_MANGA_ID} = ?") .where("${ChapterTable.COL_MANGA_ID} = ?")
.whereArgs(manga.id) .whereArgs(manga.id)
.build()) .build())
.prepare() .prepare()
@ -43,11 +43,11 @@ interface ChapterQueries : DbProvider {
.`object`(Chapter::class.java) .`object`(Chapter::class.java)
.withQuery(Query.builder() .withQuery(Query.builder()
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COLUMN_MANGA_ID} = ? AND " + .where("${ChapterTable.COL_MANGA_ID} = ? AND " +
"${ChapterTable.COLUMN_CHAPTER_NUMBER} > ? AND " + "${ChapterTable.COL_CHAPTER_NUMBER} > ? AND " +
"${ChapterTable.COLUMN_CHAPTER_NUMBER} <= ?") "${ChapterTable.COL_CHAPTER_NUMBER} <= ?")
.whereArgs(chapter.manga_id, chapterNumber, chapterNumber + 1) .whereArgs(chapter.manga_id, chapterNumber, chapterNumber + 1)
.orderBy(ChapterTable.COLUMN_CHAPTER_NUMBER) .orderBy(ChapterTable.COL_CHAPTER_NUMBER)
.limit(1) .limit(1)
.build()) .build())
.prepare() .prepare()
@ -61,11 +61,11 @@ interface ChapterQueries : DbProvider {
return db.get() return db.get()
.`object`(Chapter::class.java) .`object`(Chapter::class.java)
.withQuery(Query.builder().table(ChapterTable.TABLE) .withQuery(Query.builder().table(ChapterTable.TABLE)
.where("${ChapterTable.COLUMN_MANGA_ID} = ? AND " + .where("${ChapterTable.COL_MANGA_ID} = ? AND " +
"${ChapterTable.COLUMN_CHAPTER_NUMBER} < ? AND " + "${ChapterTable.COL_CHAPTER_NUMBER} < ? AND " +
"${ChapterTable.COLUMN_CHAPTER_NUMBER} >= ?") "${ChapterTable.COL_CHAPTER_NUMBER} >= ?")
.whereArgs(chapter.manga_id, chapterNumber, chapterNumber - 1) .whereArgs(chapter.manga_id, chapterNumber, chapterNumber - 1)
.orderBy(ChapterTable.COLUMN_CHAPTER_NUMBER + " DESC") .orderBy(ChapterTable.COL_CHAPTER_NUMBER + " DESC")
.limit(1) .limit(1)
.build()) .build())
.prepare() .prepare()
@ -75,11 +75,11 @@ interface ChapterQueries : DbProvider {
.`object`(Chapter::class.java) .`object`(Chapter::class.java)
.withQuery(Query.builder() .withQuery(Query.builder()
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COLUMN_MANGA_ID} = ? AND " + .where("${ChapterTable.COL_MANGA_ID} = ? AND " +
"${ChapterTable.COLUMN_READ} = ? AND " + "${ChapterTable.COL_READ} = ? AND " +
"${ChapterTable.COLUMN_CHAPTER_NUMBER} >= ?") "${ChapterTable.COL_CHAPTER_NUMBER} >= ?")
.whereArgs(manga.id, 0, 0) .whereArgs(manga.id, 0, 0)
.orderBy(ChapterTable.COLUMN_CHAPTER_NUMBER) .orderBy(ChapterTable.COL_CHAPTER_NUMBER)
.limit(1) .limit(1)
.build()) .build())
.prepare() .prepare()

View File

@ -17,7 +17,7 @@ interface MangaCategoryQueries : DbProvider {
fun deleteOldMangasCategories(mangas: List<Manga>) = db.delete() fun deleteOldMangasCategories(mangas: List<Manga>) = db.delete()
.byQuery(DeleteQuery.builder() .byQuery(DeleteQuery.builder()
.table(MangaCategoryTable.TABLE) .table(MangaCategoryTable.TABLE)
.where("${MangaCategoryTable.COLUMN_MANGA_ID} IN (${Queries.placeholders(mangas.size)})") .where("${MangaCategoryTable.COL_MANGA_ID} IN (${Queries.placeholders(mangas.size)})")
.whereArgs(*mangas.map { it.id }.toTypedArray()) .whereArgs(*mangas.map { it.id }.toTypedArray())
.build()) .build())
.prepare() .prepare()

View File

@ -32,9 +32,9 @@ interface MangaQueries : DbProvider {
.listOfObjects(Manga::class.java) .listOfObjects(Manga::class.java)
.withQuery(Query.builder() .withQuery(Query.builder()
.table(MangaTable.TABLE) .table(MangaTable.TABLE)
.where("${MangaTable.COLUMN_FAVORITE} = ?") .where("${MangaTable.COL_FAVORITE} = ?")
.whereArgs(1) .whereArgs(1)
.orderBy(MangaTable.COLUMN_TITLE) .orderBy(MangaTable.COL_TITLE)
.build()) .build())
.prepare() .prepare()
@ -42,7 +42,7 @@ interface MangaQueries : DbProvider {
.`object`(Manga::class.java) .`object`(Manga::class.java)
.withQuery(Query.builder() .withQuery(Query.builder()
.table(MangaTable.TABLE) .table(MangaTable.TABLE)
.where("${MangaTable.COLUMN_URL} = ? AND ${MangaTable.COLUMN_SOURCE} = ?") .where("${MangaTable.COL_URL} = ? AND ${MangaTable.COL_SOURCE} = ?")
.whereArgs(url, sourceId) .whereArgs(url, sourceId)
.build()) .build())
.prepare() .prepare()
@ -51,7 +51,7 @@ interface MangaQueries : DbProvider {
.`object`(Manga::class.java) .`object`(Manga::class.java)
.withQuery(Query.builder() .withQuery(Query.builder()
.table(MangaTable.TABLE) .table(MangaTable.TABLE)
.where("${MangaTable.COLUMN_ID} = ?") .where("${MangaTable.COL_ID} = ?")
.whereArgs(id) .whereArgs(id)
.build()) .build())
.prepare() .prepare()
@ -67,7 +67,7 @@ interface MangaQueries : DbProvider {
fun deleteMangasNotInLibrary() = db.delete() fun deleteMangasNotInLibrary() = db.delete()
.byQuery(DeleteQuery.builder() .byQuery(DeleteQuery.builder()
.table(MangaTable.TABLE) .table(MangaTable.TABLE)
.where("${MangaTable.COLUMN_FAVORITE} = ?") .where("${MangaTable.COL_FAVORITE} = ?")
.whereArgs(0) .whereArgs(0)
.build()) .build())
.prepare() .prepare()

View File

@ -14,8 +14,8 @@ interface MangaSyncQueries : DbProvider {
.`object`(MangaSync::class.java) .`object`(MangaSync::class.java)
.withQuery(Query.builder() .withQuery(Query.builder()
.table(MangaSyncTable.TABLE) .table(MangaSyncTable.TABLE)
.where("${MangaSyncTable.COLUMN_MANGA_ID} = ? AND " + .where("${MangaSyncTable.COL_MANGA_ID} = ? AND " +
"${MangaSyncTable.COLUMN_SYNC_ID} = ?") "${MangaSyncTable.COL_SYNC_ID} = ?")
.whereArgs(manga.id, sync.id) .whereArgs(manga.id, sync.id)
.build()) .build())
.prepare() .prepare()
@ -24,7 +24,7 @@ interface MangaSyncQueries : DbProvider {
.listOfObjects(MangaSync::class.java) .listOfObjects(MangaSync::class.java)
.withQuery(Query.builder() .withQuery(Query.builder()
.table(MangaSyncTable.TABLE) .table(MangaSyncTable.TABLE)
.where("${MangaSyncTable.COLUMN_MANGA_ID} = ?") .where("${MangaSyncTable.COL_MANGA_ID} = ?")
.whereArgs(manga.id) .whereArgs(manga.id)
.build()) .build())
.prepare() .prepare()
@ -38,7 +38,7 @@ interface MangaSyncQueries : DbProvider {
fun deleteMangaSyncForManga(manga: Manga) = db.delete() fun deleteMangaSyncForManga(manga: Manga) = db.delete()
.byQuery(DeleteQuery.builder() .byQuery(DeleteQuery.builder()
.table(MangaSyncTable.TABLE) .table(MangaSyncTable.TABLE)
.where("${MangaSyncTable.COLUMN_MANGA_ID} = ?") .where("${MangaSyncTable.COL_MANGA_ID} = ?")
.whereArgs(manga.id) .whereArgs(manga.id)
.build()) .build())
.prepare() .prepare()

View File

@ -8,41 +8,44 @@ import eu.kanade.tachiyomi.data.database.tables.MangaTable as Manga
/** /**
* Query to get the manga from the library, with their categories and unread count. * Query to get the manga from the library, with their categories and unread count.
*/ */
val libraryQuery = val libraryQuery = """
"SELECT M.*, COALESCE(MC.${MangaCategory.COLUMN_CATEGORY_ID}, 0) AS ${Manga.COLUMN_CATEGORY} " + SELECT M.*, COALESCE(MC.${MangaCategory.COL_CATEGORY_ID}, 0) AS ${Manga.COL_CATEGORY}
"FROM (" + FROM (
"SELECT ${Manga.TABLE}.*, COALESCE(C.unread, 0) AS ${Manga.COLUMN_UNREAD} " + SELECT ${Manga.TABLE}.*, COALESCE(C.unread, 0) AS ${Manga.COL_UNREAD}
"FROM ${Manga.TABLE} " + FROM ${Manga.TABLE}
"LEFT JOIN (" + LEFT JOIN (
"SELECT ${Chapter.COLUMN_MANGA_ID}, COUNT(*) AS unread " + SELECT ${Chapter.COL_MANGA_ID}, COUNT(*) AS unread
"FROM ${Chapter.TABLE} " + FROM ${Chapter.TABLE}
"WHERE ${Chapter.COLUMN_READ} = 0 " + WHERE ${Chapter.COL_READ} = 0
"GROUP BY ${Chapter.COLUMN_MANGA_ID}" + GROUP BY ${Chapter.COL_MANGA_ID}
") AS C " + ) AS C
"ON ${Manga.COLUMN_ID} = C.${Chapter.COLUMN_MANGA_ID} " + ON ${Manga.COL_ID} = C.${Chapter.COL_MANGA_ID}
"WHERE ${Manga.COLUMN_FAVORITE} = 1 " + WHERE ${Manga.COL_FAVORITE} = 1
"GROUP BY ${Manga.COLUMN_ID} " + GROUP BY ${Manga.COL_ID}
"ORDER BY ${Manga.COLUMN_TITLE}" + ORDER BY ${Manga.COL_TITLE}
") AS M " + ) AS M
"LEFT JOIN (" + LEFT JOIN (
"SELECT * FROM ${MangaCategory.TABLE}) AS MC " + SELECT * FROM ${MangaCategory.TABLE}) AS MC
"ON MC.${MangaCategory.COLUMN_MANGA_ID} = M.${Manga.COLUMN_ID}" ON MC.${MangaCategory.COL_MANGA_ID} = M.${Manga.COL_ID}
"""
/** /**
* Query to get the recent chapters of manga from the library up to a date. * Query to get the recent chapters of manga from the library up to a date.
*/ */
fun getRecentsQuery() = fun getRecentsQuery() = """
"SELECT ${Manga.TABLE}.${Manga.COLUMN_URL} as mangaUrl, * FROM ${Manga.TABLE} JOIN ${Chapter.TABLE} " + SELECT ${Manga.TABLE}.${Manga.COL_URL} as mangaUrl, * FROM ${Manga.TABLE} JOIN ${Chapter.TABLE}
"ON ${Manga.TABLE}.${Manga.COLUMN_ID} = ${Chapter.TABLE}.${Chapter.COLUMN_MANGA_ID} " + ON ${Manga.TABLE}.${Manga.COL_ID} = ${Chapter.TABLE}.${Chapter.COL_MANGA_ID}
"WHERE ${Manga.COLUMN_FAVORITE} = 1 AND ${Chapter.COLUMN_DATE_UPLOAD} > ? " + WHERE ${Manga.COL_FAVORITE} = 1 AND ${Chapter.COL_DATE_UPLOAD} > ?
"ORDER BY ${Chapter.COLUMN_DATE_UPLOAD} DESC" ORDER BY ${Chapter.COL_DATE_UPLOAD} DESC
"""
/** /**
* Query to get the categories for a manga. * Query to get the categories for a manga.
*/ */
fun getCategoriesForMangaQuery() = fun getCategoriesForMangaQuery() = """
"SELECT ${Category.TABLE}.* FROM ${Category.TABLE} " + SELECT ${Category.TABLE}.* FROM ${Category.TABLE}
"JOIN ${MangaCategory.TABLE} ON ${Category.TABLE}.${Category.COLUMN_ID} = " + JOIN ${MangaCategory.TABLE} ON ${Category.TABLE}.${Category.COL_ID} =
"${MangaCategory.TABLE}.${MangaCategory.COLUMN_CATEGORY_ID} " + ${MangaCategory.TABLE}.${MangaCategory.COL_CATEGORY_ID}
"WHERE ${MangaCategory.COLUMN_MANGA_ID} = ?" WHERE ${MangaCategory.COL_MANGA_ID} = ?
"""

View File

@ -21,13 +21,13 @@ class ChapterProgressPutResolver : PutResolver<Chapter>() {
fun mapToUpdateQuery(chapter: Chapter) = UpdateQuery.builder() fun mapToUpdateQuery(chapter: Chapter) = UpdateQuery.builder()
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COLUMN_ID} = ?") .where("${ChapterTable.COL_ID} = ?")
.whereArgs(chapter.id) .whereArgs(chapter.id)
.build() .build()
fun mapToContentValues(chapter: Chapter) = ContentValues(2).apply { fun mapToContentValues(chapter: Chapter) = ContentValues(2).apply {
put(ChapterTable.COLUMN_READ, chapter.read) put(ChapterTable.COL_READ, chapter.read)
put(ChapterTable.COLUMN_LAST_PAGE_READ, chapter.last_page_read) put(ChapterTable.COL_LAST_PAGE_READ, chapter.last_page_read)
} }
} }

View File

@ -21,12 +21,12 @@ class ChapterSourceOrderPutResolver : PutResolver<Chapter>() {
fun mapToUpdateQuery(chapter: Chapter) = UpdateQuery.builder() fun mapToUpdateQuery(chapter: Chapter) = UpdateQuery.builder()
.table(ChapterTable.TABLE) .table(ChapterTable.TABLE)
.where("${ChapterTable.COLUMN_URL} = ? AND ${ChapterTable.COLUMN_MANGA_ID} = ?") .where("${ChapterTable.COL_URL} = ? AND ${ChapterTable.COL_MANGA_ID} = ?")
.whereArgs(chapter.url, chapter.manga_id) .whereArgs(chapter.url, chapter.manga_id)
.build() .build()
fun mapToContentValues(chapter: Chapter) = ContentValues(1).apply { fun mapToContentValues(chapter: Chapter) = ContentValues(1).apply {
put(ChapterTable.COLUMN_SOURCE_ORDER, chapter.source_order) put(ChapterTable.COL_SOURCE_ORDER, chapter.source_order)
} }
} }

View File

@ -15,10 +15,10 @@ class LibraryMangaGetResolver : MangaStorIOSQLiteGetResolver() {
override fun mapFromCursor(cursor: Cursor): Manga { override fun mapFromCursor(cursor: Cursor): Manga {
val manga = super.mapFromCursor(cursor) val manga = super.mapFromCursor(cursor)
val unreadColumn = cursor.getColumnIndex(MangaTable.COLUMN_UNREAD) val unreadColumn = cursor.getColumnIndex(MangaTable.COL_UNREAD)
manga.unread = cursor.getInt(unreadColumn) manga.unread = cursor.getInt(unreadColumn)
val categoryColumn = cursor.getColumnIndex(MangaTable.COLUMN_CATEGORY) val categoryColumn = cursor.getColumnIndex(MangaTable.COL_CATEGORY)
manga.category = cursor.getInt(categoryColumn) manga.category = cursor.getInt(categoryColumn)
return manga return manga

View File

@ -1,39 +0,0 @@
package eu.kanade.tachiyomi.data.database.tables;
import android.support.annotation.NonNull;
public class CategoryTable {
@NonNull
public static final String TABLE = "categories";
@NonNull
public static final String COLUMN_ID = "_id";
@NonNull
public static final String COLUMN_NAME = "name";
@NonNull
public static final String COLUMN_ORDER = "sort";
@NonNull
public static final String COLUMN_FLAGS = "flags";
// This is just class with Meta Data, we don't need instances
private CategoryTable() {
throw new IllegalStateException("No instances please");
}
// Better than static final field -> allows VM to unload useless String
// Because you need this string only once per application life on the device
@NonNull
public static String getCreateTableQuery() {
return "CREATE TABLE " + TABLE + "("
+ COLUMN_ID + " INTEGER NOT NULL PRIMARY KEY, "
+ COLUMN_NAME + " TEXT NOT NULL, "
+ COLUMN_ORDER + " INTEGER NOT NULL, "
+ COLUMN_FLAGS + " INTEGER NOT NULL"
+ ");";
}
}

View File

@ -0,0 +1,23 @@
package eu.kanade.tachiyomi.data.database.tables
object CategoryTable {
const val TABLE = "categories"
const val COL_ID = "_id"
const val COL_NAME = "name"
const val COL_ORDER = "sort"
const val COL_FLAGS = "flags"
val createTableQuery: String
get() = """CREATE TABLE $TABLE(
$COL_ID INTEGER NOT NULL PRIMARY KEY,
$COL_NAME TEXT NOT NULL,
$COL_ORDER INTEGER NOT NULL,
$COL_FLAGS INTEGER NOT NULL
)"""
}

View File

@ -1,73 +0,0 @@
package eu.kanade.tachiyomi.data.database.tables;
import android.support.annotation.NonNull;
public final class ChapterTable {
@NonNull
public static final String TABLE = "chapters";
@NonNull
public static final String COLUMN_ID = "_id";
@NonNull
public static final String COLUMN_MANGA_ID = "manga_id";
@NonNull
public static final String COLUMN_URL = "url";
@NonNull
public static final String COLUMN_NAME = "name";
@NonNull
public static final String COLUMN_READ = "read";
@NonNull
public static final String COLUMN_DATE_FETCH = "date_fetch";
@NonNull
public static final String COLUMN_DATE_UPLOAD = "date_upload";
@NonNull
public static final String COLUMN_LAST_PAGE_READ = "last_page_read";
@NonNull
public static final String COLUMN_CHAPTER_NUMBER = "chapter_number";
@NonNull
public static final String COLUMN_SOURCE_ORDER = "source_order";
private ChapterTable() throws InstantiationException {
throw new InstantiationException("This class is not for instantiation");
}
@NonNull
public static String getCreateTableQuery() {
return "CREATE TABLE " + TABLE + "("
+ COLUMN_ID + " INTEGER NOT NULL PRIMARY KEY, "
+ COLUMN_MANGA_ID + " INTEGER NOT NULL, "
+ COLUMN_URL + " TEXT NOT NULL, "
+ COLUMN_NAME + " TEXT NOT NULL, "
+ COLUMN_READ + " BOOLEAN NOT NULL, "
+ COLUMN_LAST_PAGE_READ + " INT NOT NULL, "
+ COLUMN_CHAPTER_NUMBER + " FLOAT NOT NULL, "
+ COLUMN_SOURCE_ORDER + " INTEGER NOT NULL, "
+ COLUMN_DATE_FETCH + " LONG NOT NULL, "
+ COLUMN_DATE_UPLOAD + " LONG NOT NULL, "
+ "FOREIGN KEY(" + COLUMN_MANGA_ID + ") REFERENCES " + MangaTable.TABLE + "(" + MangaTable.COLUMN_ID + ") "
+ "ON DELETE CASCADE"
+ ");";
}
@NonNull
public static String getCreateMangaIdIndexQuery() {
return "CREATE INDEX " + TABLE + "_" + COLUMN_MANGA_ID + "_index ON " + TABLE + "(" + COLUMN_MANGA_ID + ");";
}
@NonNull
public static String getSourceOrderUpdateQuery() {
return "ALTER TABLE " + TABLE + " ADD COLUMN " + COLUMN_SOURCE_ORDER + " INTEGER DEFAULT 0";
}
}

View File

@ -0,0 +1,49 @@
package eu.kanade.tachiyomi.data.database.tables
object ChapterTable {
const val TABLE = "chapters"
const val COL_ID = "_id"
const val COL_MANGA_ID = "manga_id"
const val COL_URL = "url"
const val COL_NAME = "name"
const val COL_READ = "read"
const val COL_DATE_FETCH = "date_fetch"
const val COL_DATE_UPLOAD = "date_upload"
const val COL_LAST_PAGE_READ = "last_page_read"
const val COL_CHAPTER_NUMBER = "chapter_number"
const val COL_SOURCE_ORDER = "source_order"
val createTableQuery: String
get() = """CREATE TABLE $TABLE(
$COL_ID INTEGER NOT NULL PRIMARY KEY,
$COL_MANGA_ID INTEGER NOT NULL,
$COL_URL TEXT NOT NULL,
$COL_NAME TEXT NOT NULL,
$COL_READ BOOLEAN NOT NULL,
$COL_LAST_PAGE_READ INT NOT NULL,
$COL_CHAPTER_NUMBER FLOAT NOT NULL,
$COL_SOURCE_ORDER INTEGER NOT NULL,
$COL_DATE_FETCH LONG NOT NULL,
$COL_DATE_UPLOAD LONG NOT NULL,
FOREIGN KEY($COL_MANGA_ID) REFERENCES ${MangaTable.TABLE} (${MangaTable.COL_ID})
ON DELETE CASCADE
)"""
val createMangaIdIndexQuery: String
get() = "CREATE INDEX ${TABLE}_${COL_MANGA_ID}_index ON $TABLE($COL_MANGA_ID)"
val sourceOrderUpdateQuery: String
get() = "ALTER TABLE $TABLE ADD COLUMN $COL_SOURCE_ORDER INTEGER DEFAULT 0"
}

View File

@ -1,40 +0,0 @@
package eu.kanade.tachiyomi.data.database.tables;
import android.support.annotation.NonNull;
public class MangaCategoryTable {
@NonNull
public static final String TABLE = "mangas_categories";
@NonNull
public static final String COLUMN_ID = "_id";
@NonNull
public static final String COLUMN_MANGA_ID = "manga_id";
@NonNull
public static final String COLUMN_CATEGORY_ID = "category_id";
// This is just class with Meta Data, we don't need instances
private MangaCategoryTable() {
throw new IllegalStateException("No instances please");
}
// Better than static final field -> allows VM to unload useless String
// Because you need this string only once per application life on the device
@NonNull
public static String getCreateTableQuery() {
return "CREATE TABLE " + TABLE + "("
+ COLUMN_ID + " INTEGER NOT NULL PRIMARY KEY, "
+ COLUMN_MANGA_ID + " INTEGER NOT NULL, "
+ COLUMN_CATEGORY_ID + " INTEGER NOT NULL, "
+ "FOREIGN KEY(" + COLUMN_CATEGORY_ID + ") REFERENCES " + CategoryTable.TABLE + "(" + CategoryTable.COLUMN_ID + ") "
+ "ON DELETE CASCADE, "
+ "FOREIGN KEY(" + COLUMN_MANGA_ID + ") REFERENCES " + MangaTable.TABLE + "(" + MangaTable.COLUMN_ID + ") "
+ "ON DELETE CASCADE"
+ ");";
}
}

View File

@ -0,0 +1,24 @@
package eu.kanade.tachiyomi.data.database.tables
object MangaCategoryTable {
const val TABLE = "mangas_categories"
const val COL_ID = "_id"
const val COL_MANGA_ID = "manga_id"
const val COL_CATEGORY_ID = "category_id"
val createTableQuery: String
get() = """CREATE TABLE $TABLE(
$COL_ID INTEGER NOT NULL PRIMARY KEY,
$COL_MANGA_ID INTEGER NOT NULL,
$COL_CATEGORY_ID INTEGER NOT NULL,
FOREIGN KEY($COL_CATEGORY_ID) REFERENCES ${CategoryTable.TABLE} (${CategoryTable.COL_ID})
ON DELETE CASCADE,
FOREIGN KEY($COL_MANGA_ID) REFERENCES ${MangaTable.TABLE} (${MangaTable.COL_ID})
ON DELETE CASCADE
)"""
}

View File

@ -1,49 +0,0 @@
package eu.kanade.tachiyomi.data.database.tables;
import android.support.annotation.NonNull;
public final class MangaSyncTable {
public static final String TABLE = "manga_sync";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_MANGA_ID = "manga_id";
public static final String COLUMN_SYNC_ID = "sync_id";
public static final String COLUMN_REMOTE_ID = "remote_id";
public static final String COLUMN_TITLE = "title";
public static final String COLUMN_LAST_CHAPTER_READ = "last_chapter_read";
public static final String COLUMN_STATUS = "status";
public static final String COLUMN_SCORE = "score";
public static final String COLUMN_TOTAL_CHAPTERS = "total_chapters";
private MangaSyncTable() throws InstantiationException {
throw new InstantiationException("This class is not for instantiation");
}
@NonNull
public static String getCreateTableQuery() {
return "CREATE TABLE " + TABLE + "("
+ COLUMN_ID + " INTEGER NOT NULL PRIMARY KEY, "
+ COLUMN_MANGA_ID + " INTEGER NOT NULL, "
+ COLUMN_SYNC_ID + " INTEGER NOT NULL, "
+ COLUMN_REMOTE_ID + " INTEGER NOT NULL, "
+ COLUMN_TITLE + " TEXT NOT NULL, "
+ COLUMN_LAST_CHAPTER_READ + " INTEGER NOT NULL, "
+ COLUMN_TOTAL_CHAPTERS + " INTEGER NOT NULL, "
+ COLUMN_STATUS + " INTEGER NOT NULL, "
+ COLUMN_SCORE + " FLOAT NOT NULL, "
+ "UNIQUE (" + COLUMN_MANGA_ID + ", " + COLUMN_SYNC_ID + ") ON CONFLICT REPLACE, "
+ "FOREIGN KEY(" + COLUMN_MANGA_ID + ") REFERENCES " + MangaTable.TABLE + "(" + MangaTable.COLUMN_ID + ") "
+ "ON DELETE CASCADE"
+ ");";
}
}

View File

@ -0,0 +1,41 @@
package eu.kanade.tachiyomi.data.database.tables
object MangaSyncTable {
const val TABLE = "manga_sync"
const val COL_ID = "_id"
const val COL_MANGA_ID = "manga_id"
const val COL_SYNC_ID = "sync_id"
const val COL_REMOTE_ID = "remote_id"
const val COL_TITLE = "title"
const val COL_LAST_CHAPTER_READ = "last_chapter_read"
const val COL_STATUS = "status"
const val COL_SCORE = "score"
const val COL_TOTAL_CHAPTERS = "total_chapters"
val createTableQuery: String
get() = """CREATE TABLE $TABLE(
$COL_ID INTEGER NOT NULL PRIMARY KEY,
$COL_MANGA_ID INTEGER NOT NULL,
$COL_SYNC_ID INTEGER NOT NULL,
$COL_REMOTE_ID INTEGER NOT NULL,
$COL_TITLE TEXT NOT NULL,
$COL_LAST_CHAPTER_READ INTEGER NOT NULL,
$COL_TOTAL_CHAPTERS INTEGER NOT NULL,
$COL_STATUS INTEGER NOT NULL,
$COL_SCORE FLOAT NOT NULL,
UNIQUE ($COL_MANGA_ID, $COL_SYNC_ID) ON CONFLICT REPLACE,
FOREIGN KEY($COL_MANGA_ID) REFERENCES ${MangaTable.TABLE} (${MangaTable.COL_ID})
ON DELETE CASCADE
)"""
}

View File

@ -1,98 +0,0 @@
package eu.kanade.tachiyomi.data.database.tables;
import android.support.annotation.NonNull;
public class MangaTable {
@NonNull
public static final String TABLE = "mangas";
@NonNull
public static final String COLUMN_ID = "_id";
@NonNull
public static final String COLUMN_SOURCE = "source";
@NonNull
public static final String COLUMN_URL = "url";
@NonNull
public static final String COLUMN_ARTIST = "artist";
@NonNull
public static final String COLUMN_AUTHOR = "author" ;
@NonNull
public static final String COLUMN_DESCRIPTION = "description";
@NonNull
public static final String COLUMN_GENRE = "genre";
@NonNull
public static final String COLUMN_TITLE = "title";
@NonNull
public static final String COLUMN_STATUS = "status";
@NonNull
public static final String COLUMN_THUMBNAIL_URL = "thumbnail_url";
@NonNull
public static final String COLUMN_FAVORITE = "favorite";
@NonNull
public static final String COLUMN_LAST_UPDATE = "last_update";
@NonNull
public static final String COLUMN_INITIALIZED = "initialized";
@NonNull
public static final String COLUMN_VIEWER = "viewer";
@NonNull
public static final String COLUMN_CHAPTER_FLAGS = "chapter_flags";
@NonNull
public static final String COLUMN_UNREAD = "unread";
@NonNull
public static final String COLUMN_CATEGORY = "category";
// This is just class with Meta Data, we don't need instances
private MangaTable() {
throw new IllegalStateException("No instances please");
}
// Better than static final field -> allows VM to unload useless String
// Because you need this string only once per application life on the device
@NonNull
public static String getCreateTableQuery() {
return "CREATE TABLE " + TABLE + "("
+ COLUMN_ID + " INTEGER NOT NULL PRIMARY KEY, "
+ COLUMN_SOURCE + " INTEGER NOT NULL, "
+ COLUMN_URL + " TEXT NOT NULL, "
+ COLUMN_ARTIST + " TEXT, "
+ COLUMN_AUTHOR + " TEXT, "
+ COLUMN_DESCRIPTION + " TEXT, "
+ COLUMN_GENRE + " TEXT, "
+ COLUMN_TITLE + " TEXT NOT NULL, "
+ COLUMN_STATUS + " INTEGER NOT NULL, "
+ COLUMN_THUMBNAIL_URL + " TEXT, "
+ COLUMN_FAVORITE + " INTEGER NOT NULL, "
+ COLUMN_LAST_UPDATE + " LONG, "
+ COLUMN_INITIALIZED + " BOOLEAN NOT NULL, "
+ COLUMN_VIEWER + " INTEGER NOT NULL, "
+ COLUMN_CHAPTER_FLAGS + " INTEGER NOT NULL"
+ ");";
}
public static String getCreateUrlIndexQuery() {
return "CREATE INDEX " + TABLE + "_" + COLUMN_URL + "_index ON " + TABLE + "(" + COLUMN_URL + ");";
}
public static String getCreateFavoriteIndexQuery() {
return "CREATE INDEX " + TABLE + "_" + COLUMN_FAVORITE + "_index ON " + TABLE + "(" + COLUMN_FAVORITE + ");";
}
}

View File

@ -0,0 +1,65 @@
package eu.kanade.tachiyomi.data.database.tables
object MangaTable {
const val TABLE = "mangas"
const val COL_ID = "_id"
const val COL_SOURCE = "source"
const val COL_URL = "url"
const val COL_ARTIST = "artist"
const val COL_AUTHOR = "author"
const val COL_DESCRIPTION = "description"
const val COL_GENRE = "genre"
const val COL_TITLE = "title"
const val COL_STATUS = "status"
const val COL_THUMBNAIL_URL = "thumbnail_url"
const val COL_FAVORITE = "favorite"
const val COL_LAST_UPDATE = "last_update"
const val COL_INITIALIZED = "initialized"
const val COL_VIEWER = "viewer"
const val COL_CHAPTER_FLAGS = "chapter_flags"
const val COL_UNREAD = "unread"
const val COL_CATEGORY = "category"
val createTableQuery: String
get() = """CREATE TABLE $TABLE(
$COL_ID INTEGER NOT NULL PRIMARY KEY,
$COL_SOURCE INTEGER NOT NULL,
$COL_URL TEXT NOT NULL,
$COL_ARTIST TEXT,
$COL_AUTHOR TEXT,
$COL_DESCRIPTION TEXT,
$COL_GENRE TEXT,
$COL_TITLE TEXT NOT NULL,
$COL_STATUS INTEGER NOT NULL,
$COL_THUMBNAIL_URL TEXT,
$COL_FAVORITE INTEGER NOT NULL,
$COL_LAST_UPDATE LONG,
$COL_INITIALIZED BOOLEAN NOT NULL,
$COL_VIEWER INTEGER NOT NULL,
$COL_CHAPTER_FLAGS INTEGER NOT NULL
)"""
val createUrlIndexQuery: String
get() = "CREATE INDEX ${TABLE}_${COL_URL}_index ON $TABLE($COL_URL)"
val createFavoriteIndexQuery: String
get() = "CREATE INDEX ${TABLE}_${COL_FAVORITE}_index ON $TABLE($COL_FAVORITE)"
}