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=b2a01f4d4f7bdf4e985ba3c81477aa96911f6b2e;hpb=29fa90b17cbb87f0b16f3607f0628fe0057d6560;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 b2a01f4d..911c2034 100644 --- a/app/src/main/java/net/ktnx/mobileledger/utils/MobileLedgerDatabase.java +++ b/app/src/main/java/net/ktnx/mobileledger/utils/MobileLedgerDatabase.java @@ -1,5 +1,5 @@ /* - * Copyright © 2020 Damyan Ivanov. + * Copyright © 2021 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -18,91 +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 java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.Locale; +import androidx.lifecycle.MutableLiveData; + +import net.ktnx.mobileledger.db.DB; import static net.ktnx.mobileledger.utils.Logger.debug; public class MobileLedgerDatabase extends SQLiteOpenHelper { - private static final String DB_NAME = "MoLe.db"; - private static final int LATEST_REVISION = 35; - private static final String CREATE_DB_SQL = "create_db"; - - private final Application mContext; - + public static final MutableLiveData initComplete = new MutableLiveData<>(false); 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); + throw new IllegalStateException("Should not happen. Where's Room!?"); } - @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - debug("db", "onUpgrade called"); - for (int i = oldVersion + 1; i <= newVersion; i++) applyRevision(db, i); + throw new IllegalStateException("Should not happen. Where's Room!?"); } - private void applyRevision(SQLiteDatabase db, int rev_no) { - String rev_file = String.format(Locale.US, "sql_%d", rev_no); - - applyRevisionFile(db, rev_file); - } - 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); - - String line; - int line_no = 1; - while ((line = reader.readLine()) != null) { - if (line.startsWith("--")) { - line_no++; - continue; - } - if (line.isEmpty()) { - line_no++; - continue; - } - try { - db.execSQL(line); - } - catch (Exception e) { - throw new RuntimeException( - String.format("Error applying %s, line %d", rev_file, line_no), e); - } - line_no++; - } - - 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"); } }