package com.gettingmobile.google.reader.db; import android.database.sqlite.SQLiteDatabase; import com.gettingmobile.google.reader.ElementId; import java.util.Map; import java.util.Set; public class ItemTable extends ElementTable { public static final String TABLE_NAME = "item"; public static final String REF_ID = "refId"; public static final String FEED_ID = "feedId"; public static final String FEED_TITLE = "feedTitle"; public static final String TIMESTAMP = "timestamp"; public static final String INSERT_TIMESTAMP = "insertTimestamp"; public static final String READ = "read"; public static final String SYNCED_READ = "syncedRead"; public static final String ALTERNATE_HREF = "alternateHref"; public static final String ALTERNATE_MIME_TYPE = "alternateMimeType"; public static final String AUTHOR = "author"; public static final String HAS_SUMMARY = "hasSummary"; public static final String HAS_CONTENT = "hasContent"; public static final String TEASER = "teaser"; public static final String SUMMARY = "summary"; public static final String CONTENT = "content"; public static final String IS_EXTERNAL_CONTENT = "isExternalContent"; public static final String HAS_IMAGES = "hasImages"; public ItemTable() { super(TABLE_NAME); } @Override protected void defineColumns(Map<String, String> columns) { super.defineColumns(columns); columns.put(REF_ID, "INTEGER"); columns.put(FEED_ID, "TEXT"); columns.put(FEED_TITLE, "TEXT"); columns.put(TIMESTAMP, "INTEGER"); columns.put(INSERT_TIMESTAMP, "INTEGER"); columns.put(READ, "INTEGER"); columns.put(SYNCED_READ, "INTEGER"); columns.put(ALTERNATE_HREF, "TEXT"); columns.put(ALTERNATE_MIME_TYPE, "TEXT"); columns.put(AUTHOR, "TEXT"); columns.put(HAS_SUMMARY, "INTEGER"); columns.put(HAS_CONTENT, "INTEGER"); columns.put(TEASER, "TEXT"); columns.put(SUMMARY, "TEXT"); columns.put(CONTENT, "TEXT"); columns.put(IS_EXTERNAL_CONTENT, "INTEGER"); columns.put(HAS_IMAGES, "INTEGER"); } @Override protected void postCommands(SQLiteDatabase db) { super.postCommands(db); db.execSQL("CREATE UNIQUE INDEX refIdIndex ON " + TABLE_NAME + " (refId)"); db.execSQL("CREATE INDEX feedIdIndex ON " + TABLE_NAME + " (feedId)"); db.execSQL("CREATE INDEX readIndex ON " + TABLE_NAME + " (read)"); db.execSQL("CREATE INDEX readFlagIndex ON " + TABLE_NAME + " (read)"); db.execSQL("CREATE INDEX itemFeedTitleIndex ON " + TABLE_NAME + " (feedTitle COLLATE NOCASE ASC)"); db.execSQL("CREATE INDEX itemSignature ON " + TABLE_NAME + " (feedId, timestamp, title)"); } @Override public void upgrade(SQLiteDatabase db, int oldVersion, int newVersion) { if (oldVersion < 17) { create(db); return; } if (oldVersion < 19) { db.execSQL("CREATE INDEX readFlagIndex ON " + TABLE_NAME + " (read)"); } if (oldVersion < 21) { db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN refId INTEGER"); final Set<ElementId> ids = new ItemDatabaseAdapter().readAllIds(db); for (ElementId id : ids) { db.execSQL("UPDATE " + TABLE_NAME + " SET refId=" + Long.toString(id.getItemReferenceId()) + " WHERE id='" + id.getId() + "'"); } db.execSQL("CREATE UNIQUE INDEX refIdIndex ON " + TABLE_NAME + " (refId)"); } if (oldVersion < 26) { db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN feedTitle TEXT"); } if (oldVersion < 28) { db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + TEASER + " TEXT"); db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + SUMMARY + " TEXT"); db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + CONTENT + " TEXT"); } if (oldVersion < 29) { db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + SYNCED_READ + " INTEGER"); db.execSQL("UPDATE item SET syncedRead=1 WHERE read=1"); db.execSQL("UPDATE item SET syncedRead=0 WHERE read=0"); } if (oldVersion < 30) { /* * add feed title to all items */ new ItemDatabaseAdapter().updateFeedTitles(db); db.execSQL("CREATE INDEX itemFeedTitleIndex ON " + TABLE_NAME + " (feedTitle COLLATE NOCASE ASC)"); } if (oldVersion < 32) { db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + IS_EXTERNAL_CONTENT + " INTEGER"); db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + HAS_IMAGES + " INTEGER"); } if (oldVersion < 33) { db.execSQL("ALTER TABLE " +TABLE_NAME + " ADD COLUMN " + INSERT_TIMESTAMP + " INTEGER"); db.execSQL("UPDATE " + TABLE_NAME + " SET " + INSERT_TIMESTAMP + "=item." + TIMESTAMP); } if (oldVersion < 35) { db.execSQL("CREATE INDEX itemSignature ON " + TABLE_NAME + " (feedId, timestamp, title)"); } super.upgrade(db, oldVersion, newVersion); } }