X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Futils%2FMobileLedgerDatabase.java;h=911c2034bd13b34fab7f30c8cd74c8f3372336f1;hb=804f1fa43c2feb45a80cc281f39cd981953785db;hp=32269fea612e7904b8daebade3fd2a87a47d3f24;hpb=3ed17d6ccfa6aba1795d77ef24167fb9ef6a9ca1;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/utils/MobileLedgerDatabase.java b/app/src/main/java/net/ktnx/mobileledger/utils/MobileLedgerDatabase.java index 32269fea..911c2034 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/MobileLedgerDatabase.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/MobileLedgerDatabase.java @@ -18,125 +18,38 @@ package net.ktnx.mobileledger.utils; import android.app.Application; -import android.content.res.Resources; -import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; -import android.util.Log; import androidx.lifecycle.MutableLiveData; -import net.ktnx.mobileledger.BuildConfig; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Locale; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import net.ktnx.mobileledger.db.DB; import static net.ktnx.mobileledger.utils.Logger.debug; public class MobileLedgerDatabase extends SQLiteOpenHelper { public static final MutableLiveData initComplete = new MutableLiveData<>(false); - public static final String DB_NAME = "MoLe.db"; - private static final int LATEST_REVISION = 55; - private static final String CREATE_DB_SQL = "create_db"; - private final Application mContext; - public MobileLedgerDatabase(Application context) { - super(context, DB_NAME, null, LATEST_REVISION); + super(context, DB.DB_NAME, null, DB.REVISION); debug("db", "creating helper instance"); - mContext = context; super.setWriteAheadLoggingEnabled(true); } @Override public void onCreate(SQLiteDatabase db) { - debug("db", "onCreate called"); - applyRevisionFile(db, CREATE_DB_SQL); - } - - @Override - public void onConfigure(SQLiteDatabase db) { - super.onConfigure(db); - db.execSQL("pragma case_sensitive_like=ON;"); - if (BuildConfig.DEBUG) - db.execSQL("PRAGMA foreign_keys=ON"); + throw new IllegalStateException("Should not happen. Where's Room!?"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - debug("db", - String.format(Locale.US, "needs upgrade from version %d to version %d", oldVersion, - newVersion)); - for (int i = oldVersion + 1; i <= newVersion; i++) - applyRevision(db, i); - } - private void applyRevision(SQLiteDatabase db, int rev_no) { - String rev_file = String.format(Locale.US, "sql_%d", rev_no); - - applyRevisionFile(db, rev_file); + throw new IllegalStateException("Should not happen. Where's Room!?"); } - private void applyRevisionFile(SQLiteDatabase db, String rev_file) { - final Resources rm = mContext.getResources(); - int res_id = rm.getIdentifier(rev_file, "raw", mContext.getPackageName()); - if (res_id == 0) - throw new SQLException(String.format(Locale.US, "No resource for %s", rev_file)); - db.beginTransaction(); - try (InputStream res = rm.openRawResource(res_id)) { - debug("db", "Applying " + rev_file); - InputStreamReader isr = new InputStreamReader(res); - BufferedReader reader = new BufferedReader(isr); - Pattern continuation = Pattern.compile("\\\\\\s*$"); - - String line; - String sqlStatement = null; - int line_no = 1; - while ((line = reader.readLine()) != null) { - if (line.startsWith("--")) { - line_no++; - continue; - } - if (line.isEmpty()) { - line_no++; - continue; - } - if (sqlStatement == null) - sqlStatement = line; - else - sqlStatement = sqlStatement.concat(line); - - Matcher m = continuation.matcher(line); - if (m.matches()) { - line_no++; - continue; - } - - try { - db.execSQL(sqlStatement); - sqlStatement = null; - } - catch (Exception e) { - throw new RuntimeException( - String.format("Error applying %s, line %d", rev_file, line_no), e); - } - line_no++; - } - - if (sqlStatement != null) - throw new RuntimeException( - String.format("Error applying %s: EOF after continuation", rev_file)); - - db.setTransactionSuccessful(); - } - catch (IOException e) { - Log.e("db", String.format("Error opening raw resource for %s", rev_file)); - e.printStackTrace(); - } - finally { - db.endTransaction(); - } + @Override + public void onConfigure(SQLiteDatabase db) { + super.onConfigure(db); + // force a check by Room to ensure everything is OK + // TODO: remove when all DB access is via Room + DB.get() + .compileStatement("SELECT COUNT(*) FROM profiles"); } }