package org.wikipedia.savedpages;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.NonNull;
import org.wikipedia.database.DatabaseTable;
import org.wikipedia.database.column.Column;
import org.wikipedia.database.contract.SavedPageContract;
import org.wikipedia.database.contract.SavedPageContract.Col;
import org.wikipedia.util.log.L;
/**
* No longer used, but upgrade logic reserved for database version upgrades which occur sequentially
* (see discussion at https://phabricator.wikimedia.org/rAPAWaf070d5914d3614b91be6b033961e39372241a92).
*/
@Deprecated public class SavedPageDatabaseTable extends DatabaseTable<SavedPage> {
private static final int DB_VER_INTRODUCED = 4;
private static final int DB_VER_NAMESPACE_ADDED = 6;
private static final int DB_VER_NORMALIZED_TITLES = 8;
private static final int DB_VER_LANG_ADDED = 10;
private static final int DB_VER_DROPPED = 16;
SavedPageDatabaseTable() {
super(SavedPageContract.TABLE, SavedPageContract.Page.URI);
}
@Override
protected void upgradeSchema(@NonNull SQLiteDatabase db, int toVersion) {
switch (toVersion) {
case DB_VER_NORMALIZED_TITLES:
convertAllTitlesToUnderscores(db);
break;
case DB_VER_LANG_ADDED:
addLangToAllSites(db);
break;
default:
super.upgradeSchema(db, toVersion);
}
}
/**
* Converts all titles stored in the database to follow the underscore_format instead of the
* normalized (or display) format.
*
* Preserved for database migrations from legacy versions.
*
* @param db Database object
*/
private void convertAllTitlesToUnderscores(SQLiteDatabase db) {
Cursor cursor = db.query(getTableName(), null, null, null, null, null, null);
ContentValues values = new ContentValues();
while (cursor.moveToNext()) {
String titleStr = Col.TITLE.val(cursor);
if (titleStr.contains(" ")) {
values.put(Col.TITLE.getName(), titleStr.replace(" ", "_"));
String id = Long.toString(Col.ID.val(cursor));
db.updateWithOnConflict(getTableName(), values, Col.ID.getName() + " = ?",
new String[]{id}, SQLiteDatabase.CONFLICT_REPLACE);
}
}
cursor.close();
}
/**
* Preserved for database migrations from legacy versions.
*
* @param db Database object
*/
private void addLangToAllSites(@NonNull SQLiteDatabase db) {
L.i("Adding language codes to " + getTableName());
Cursor cursor = db.query(getTableName(), null, null, null, null, null, null);
try {
while (cursor.moveToNext()) {
String site = Col.SITE.val(cursor);
ContentValues values = new ContentValues();
values.put(Col.LANG.getName(), site.split("\\.")[0]);
String id = Long.toString(Col.ID.val(cursor));
db.updateWithOnConflict(getTableName(), values, Col.ID.getName() + " = ?",
new String[]{id}, SQLiteDatabase.CONFLICT_REPLACE);
}
} finally {
cursor.close();
}
}
@NonNull
@Override
public Column<?>[] getColumnsAdded(int version) {
switch (version) {
case DB_VER_INTRODUCED:
return new Column<?>[] {Col.ID, Col.SITE, Col.TITLE, Col.TIMESTAMP};
case DB_VER_NAMESPACE_ADDED:
return new Column<?>[] {Col.NAMESPACE};
case DB_VER_LANG_ADDED:
return new Column<?>[] {Col.LANG};
default:
return super.getColumnsAdded(version);
}
}
public Cursor queryAll(SQLiteDatabase db) {
return db.query(getTableName(), null, null, null, null, null, null);
}
@Override
protected int getDBVersionIntroducedAt() {
return DB_VER_INTRODUCED;
}
@Override
protected int getDBVersionDroppedAt() {
return DB_VER_DROPPED;
}
@Override
public SavedPage fromCursor(Cursor cursor) {
throw new UnsupportedOperationException();
}
@Override
protected ContentValues toContentValues(SavedPage obj) {
throw new UnsupportedOperationException();
}
@Override
public String getPrimaryKeySelection(@NonNull SavedPage obj, @NonNull String[] selectionArgs) {
throw new UnsupportedOperationException();
}
@Override
protected String[] getUnfilteredPrimaryKeySelectionArgs(@NonNull SavedPage obj) {
throw new UnsupportedOperationException();
}
}