crystal-wallet-android/app/src/main/java/cy/agorise/crystalwallet/dao/CrystalDatabase.java

142 lines
6.1 KiB
Java

package cy.agorise.crystalwallet.dao;
import android.arch.persistence.db.SupportSQLiteDatabase;
import android.arch.persistence.room.Database;
import android.arch.persistence.room.Room;
import android.arch.persistence.room.RoomDatabase;
import android.arch.persistence.room.TypeConverters;
import android.arch.persistence.room.migration.Migration;
import android.content.Context;
import cy.agorise.crystalwallet.dao.converters.Converters;
import cy.agorise.crystalwallet.models.AccountSeed;
import cy.agorise.crystalwallet.models.BitcoinAddress;
import cy.agorise.crystalwallet.models.BitcoinTransaction;
import cy.agorise.crystalwallet.models.BitcoinTransactionGTxIO;
import cy.agorise.crystalwallet.models.BitsharesAccountNameCache;
import cy.agorise.crystalwallet.models.BitsharesAssetInfo;
import cy.agorise.crystalwallet.models.Contact;
import cy.agorise.crystalwallet.models.ContactAddress;
import cy.agorise.crystalwallet.models.CryptoCoinBalance;
import cy.agorise.crystalwallet.models.CryptoCoinTransaction;
import cy.agorise.crystalwallet.models.CryptoCurrency;
import cy.agorise.crystalwallet.models.CryptoCurrencyEquivalence;
import cy.agorise.crystalwallet.models.CryptoNetAccount;
import cy.agorise.crystalwallet.models.GeneralSetting;
import cy.agorise.crystalwallet.models.GrapheneAccountInfo;
/**
* Manage the Database
* Created by Henry Varona on 4/9/2017.
*/
@Database(entities = {
AccountSeed.class,
CryptoNetAccount.class,
CryptoCoinTransaction.class,
Contact.class,
ContactAddress.class,
CryptoCurrency.class,
CryptoCoinBalance.class,
GrapheneAccountInfo.class,
BitsharesAssetInfo.class,
BitsharesAccountNameCache.class,
CryptoCurrencyEquivalence.class,
GeneralSetting.class,
BitcoinTransaction.class,
BitcoinTransactionGTxIO.class,
BitcoinAddress.class
}, version = 6, exportSchema = false)
@TypeConverters({Converters.class})
public abstract class CrystalDatabase extends RoomDatabase {
private static CrystalDatabase instance;
public abstract AccountSeedDao accountSeedDao();
public abstract CryptoNetAccountDao cryptoNetAccountDao();
public abstract GrapheneAccountInfoDao grapheneAccountInfoDao();
public abstract TransactionDao transactionDao();
public abstract ContactDao contactDao();
public abstract CryptoCoinBalanceDao cryptoCoinBalanceDao();
public abstract CryptoCurrencyDao cryptoCurrencyDao();
public abstract BitsharesAssetDao bitsharesAssetDao();
public abstract BitsharesAccountNameCacheDao bitsharesAccountNameCacheDao();
public abstract CryptoCurrencyEquivalenceDao cryptoCurrencyEquivalenceDao();
public abstract GeneralSettingDao generalSettingDao();
public abstract BitcoinTransactionDao bitcoinTransactionDao();
public abstract BitcoinAddressDao bitcoinAddressDao();
public static CrystalDatabase getAppDatabase(Context context) {
if (instance == null) {
instance =
Room.databaseBuilder(context,
CrystalDatabase.class, "CrystalWallet.db")
.allowMainThreadQueries()
//.addMigrations(MIGRATION_2_3)
//.addMigrations(MIGRATION_3_4)
//.addMigrations(MIGRATION_4_5)
//.addMigrations(MIGRATION_5_6)
.build();
}
return instance;
}
static final Migration MIGRATION_2_3 = new Migration(2, 3) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE graphene_account ADD COLUMN upgraded_to_ltm INTEGER NOT NULL DEFAULT 0");
}
};
static final Migration MIGRATION_3_4 = new Migration(3, 4) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE bitshares_account_name_cache ("
+"id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"
+"account_id TEXT UNIQUE NOT NULL,"
+"name TEXT)");
database.execSQL("CREATE UNIQUE INDEX index_bitshares_account_name_cache_account_id ON bitshares_account_name_cache (account_id)");
}
};
static final Migration MIGRATION_4_5 = new Migration(4, 5) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE bitcoin_transaction ("
+"crypto_coin_transaction_id INTEGER PRIMARY KEY NOT NULL,"
+"tx_id TEXT NOT NULL,"
+"block INTEGER NOT NULL,"
+"fee INTEGER NOT NULL,"
+"confirmations INTEGER NOT NULL,"
+"FOREIGN KEY (crypto_coin_transaction_id) REFERENCES crypto_coin_transaction(id) ON DELETE CASCADE)");
database.execSQL("CREATE TABLE bitcoin_transaction_gt_io ("
+"bitcoin_transaction_id INTEGER NOT NULL,"
+"io_index INTEGER NOT NULL,"
+"address TEXT,"
+"is_output INTEGER NOT NULL,"
+"amount INTEGER NOT NULL,"
+"script_hex TEXT,"
+"original_txid TEXT,"
+"PRIMARY KEY (bitcoin_transaction_id, io_index, is_output),"
+"FOREIGN KEY (bitcoin_transaction_id) REFERENCES bitcoin_transaction(crypto_coin_transaction_id) ON DELETE CASCADE)");
}
};
static final Migration MIGRATION_5_6 = new Migration(5, 6) {
@Override
public void migrate(SupportSQLiteDatabase database) {
database.execSQL("CREATE TABLE bitcoin_address ("
+"account_id INTEGER NOT NULL,"
+"address_index INTEGER NOT NULL,"
+"is_change INTEGER NOT NULL,"
+"address TEXT NOT NULL,"
+"PRIMARY KEY (account_id, address_index, is_change),"
+"FOREIGN KEY (account_id) REFERENCES crypto_net_account(id) ON DELETE CASCADE)");
}
};
}