package com.piusvelte.sonet.util;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.NonNull;
/**
* Created by bemmanuel on 5/25/15.
*/
public class DatabaseUtils {
private DatabaseUtils() {
// Not instantiable
}
public static String addNullCheckCaseWhen(@NonNull String alias, @NonNull String column) {
return String.format("when %s.%s is not null then %s.%s", alias, column, alias, column);
}
public static String addCase(@NonNull String[] aliases, @NonNull String column, int defaultValue, @NonNull String as) {
StringBuilder caseStatement = new StringBuilder("(case");
for (String alias : aliases) {
caseStatement.append(" ")
.append(addNullCheckCaseWhen(alias, column));
}
caseStatement.append(" else ")
.append(defaultValue)
.append(" end) as ")
.append(as);
return caseStatement.toString();
}
public static boolean growTable(SQLiteDatabase db,
String tableName,
String columnName,
String columnType,
String columnValue,
boolean quotedValue) {
boolean success = false;
Cursor sqlite_master = db
.query("sqlite_master", new String[] { "sql" }, "tbl_name=? and type='table'", new String[] { tableName }, null, null, null);
if (sqlite_master.moveToFirst()) {
// get the existing table structure
String sql = sqlite_master.getString(0);
db.execSQL("drop table if exists " + tableName + "_bkp;");
db.execSQL("create temp table " + tableName + "_bkp as select * from " + tableName + ";");
db.execSQL("drop table if exists " + tableName + ";");
// create new table
db.execSQL(sql.substring(0, sql.length() - 1) + ", " + columnName + " " + columnType + ");");
// restore data
String columnData = sql.substring(sql.indexOf("(") + 1);
if (columnData.length() > 0) {
StringBuilder insertStmt = new StringBuilder();
insertStmt.append("insert into ");
insertStmt.append(tableName);
insertStmt.append(" select ");
// interate over columns
int previousColumn = 0;
insertStmt.append(columnData.substring(previousColumn, columnData.indexOf(" ")));
insertStmt.append(",");
while ((previousColumn = columnData.indexOf(",", previousColumn)) != -1) {
previousColumn += 2;
insertStmt.append(columnData
.substring(previousColumn, (columnData.indexOf(" ", previousColumn) - previousColumn) + previousColumn));
insertStmt.append(",");
}
// add new column value
if (quotedValue) {
insertStmt.append("'");
insertStmt.append(columnValue);
insertStmt.append("'");
} else {
insertStmt.append(columnValue);
}
insertStmt.append(" from ");
insertStmt.append(tableName);
insertStmt.append("_bkp;");
db.execSQL(insertStmt.toString());
success = true;
}
db.execSQL("drop table if exists " + tableName + "_bkp;");
}
sqlite_master.close();
return success;
}
}