public void attachDatabases(@Nonnull AndroidDatabase db) { for (AndroidDatabase toDb : db.getAttachedDatabases()) { db.getDatabaseWrapper().attachDatabase(toDb.getPath(), toDb.getName(), toDb.getPassword()); } }
public TestDatabaseConfig(String databaseName, String databasePath, int tableVersion, int viewVersion) { androidDatabaseList = new ArrayList<>(); androidDatabaseList.add(new AndroidDatabase(databaseName, databasePath, tableVersion, viewVersion)); }
public void beginTransaction(@Nonnull String databaseName) { AndroidDatabase database = getDatabase(databaseName); if (database != null) { database.beginTransaction(); } }
public AndroidDatabase(String name, AndroidDatabase attachMainDatabase, List<AndroidDatabase> attachedDatabases) { this.name = name; this.path = attachMainDatabase.getPath(); this.version = attachMainDatabase.getVersion(); this.viewsVersion = attachMainDatabase.getViewsVersion(); this.password = null; this.attached = true; this.attachedMainDatabase = attachMainDatabase; this.attachedDatabases = attachedDatabases; }
/** * Delete single database file, based on database name * @param databaseName name of database to delete */ public void deleteDatabaseFile(String databaseName) { for (AndroidDatabase androidDatabase : androidDatabaseList) { if (databaseName.equals(androidDatabase.getName())) { File file = new File(androidDatabase.getPath()); file.delete(); } } }
boolean databaseAlreadyExists = new File(androidDatabase.getPath()).exists(); if (!databaseAlreadyExists || !isDatabaseAlreadyOpen(androidDatabase)) { String databasePath = androidDatabase.getPath(); File databaseFile = new File(databasePath); boolean databaseExists = databaseFile.exists(); AndroidDatabase attachMainDatabase = androidDatabase.getAttachMainDatabase(); if (attachMainDatabase != null) { connectDatabase(attachMainDatabase.getName()); if (!androidDatabase.isAttached()) { onCreateViews(androidDatabase); } else if (checkForUpgrade) { onUpgrade(androidDatabase, androidDatabase.getDatabaseWrapper().getVersion(), androidDatabase.getVersion()); onUpgradeViews(androidDatabase, findViewVersion(androidDatabase), androidDatabase.getViewsVersion()); androidDatabase.getDatabaseWrapper().setVersion(androidDatabase.getVersion()); updateDatabaseMetaViewVersion(androidDatabase, androidDatabase.getViewsVersion()); } else { for (AndroidDatabase otherDb : androidDatabase.getAttachedDatabases()) { if (otherDb.isAttached()) { throw new IllegalStateException("Attached databases cannot be attach type databases (for database [" + otherDb.getName() + "]"); connectDatabase(otherDb.getName());
/** * Delete all database files */ public void deleteAllDatabaseFiles() { for (AndroidDatabase androidDatabase : androidDatabaseList) { File file = new File(androidDatabase.getPath()); file.delete(); } } }
public void createMetaTableIfNotExists(@Nonnull AndroidDatabase androidDatabase) { if (!AndroidBaseManager.tableExists(androidDatabase.getDatabaseWrapper(), DBToolsMetaData.TABLE)) { AndroidBaseManager.executeSql(androidDatabase.getDatabaseWrapper(), DBToolsMetaData.CREATE_TABLE); } }
private String getViewVersionKey(@Nonnull AndroidDatabase androidDatabase) { return androidDatabase.getName() + "_view_version"; }
public boolean mergeDatabase(@Nullable File sourceDatabaseFile, @Nullable String sourceDatabasePassword, @Nullable AndroidDatabase targetDatabase) { if (targetDatabase == null) { log.e(TAG, "Failed to merged :: targetDatabase is null"); return false; } if (sourceDatabaseFile == null) { log.e(TAG, "Failed to merged :: sourceDatabaseFile is null"); return false; } if (!sourceDatabaseFile.exists()) { log.e(TAG, "Failed to merged [" + sourceDatabaseFile.getAbsolutePath() + "] into [" + targetDatabase.getName() + "] :: Source database does not exist"); return false; } // Attach sourceDatabase with primary targetDatabase.getDatabaseWrapper().attachDatabase(sourceDatabaseFile.getAbsolutePath(), MERGE_SOURCE_DATABASE_NAME, sourceDatabasePassword); // Get a list of tables to merge List<String> sourceTableNames = findTableNames(targetDatabase, MERGE_SOURCE_DATABASE_NAME); List<String> targetTableNames = findTableNames(targetDatabase); // Merge table content (insert content from source database) targetDatabase.beginTransaction(); for (String tableName : sourceTableNames) { if (targetTableNames.contains(tableName)) { copyTableData(targetDatabase, MERGE_SOURCE_DATABASE_NAME + "." + tableName, tableName); } } targetDatabase.endTransaction(true); // Detach databases targetDatabase.getDatabaseWrapper().detachDatabase(MERGE_SOURCE_DATABASE_NAME); return true; }
public boolean closeDatabase(@Nonnull AndroidDatabase androidDatabase) { DatabaseWrapper wrapper = androidDatabase.getDatabaseWrapper(); if (wrapper != null) { if (!wrapper.isOpen()) { for (int i = 0; i < CLOSE_MAX_RETRY; i++) { try { log.w(TAG, "Trying to close database ["+ androidDatabase.getName() +"] while in transaction... waiting " + CLOSE_RETRY_MS + "..."); Thread.sleep(CLOSE_RETRY_MS); if (!wrapper.inTransaction()) { log.e(TAG, "Transaction still open on database ["+ androidDatabase.getName() +"] while closing database... closing anyway"); androidDatabase.setDatabaseWrapper(null);
public void detachDatabases(@Nonnull AndroidDatabase db) { for (AndroidDatabase toDb : db.getAttachedDatabases()) { detachDatabase(db, toDb.getName()); } }
public boolean openDatabase(@Nonnull AndroidDatabase androidDatabase) { DatabaseWrapper wrapper = androidDatabase.getDatabaseWrapper(); if (wrapper == null) { wrapper = createNewDatabaseWrapper(androidDatabase); androidDatabase.setDatabaseWrapper(wrapper); } return wrapper.isOpen(); }
/** * Close all databases that were added */ public void closeAll() { for (AndroidDatabase androidDatabase : getDatabaseMap().values()) { androidDatabase.close(); } }
public static void executeSql(@NonNull AndroidDatabase androidDatabase, @NonNull String sql) { executeSql(androidDatabase.getDatabaseWrapper(), sql); }
public void addDatabase(@Nonnull AndroidDatabase database) { databaseMap.put(database.getName(), database); }
@Nonnull public String getDatabasePath(@Nonnull String databaseName) { return getDatabaseMap().get(databaseName).getPath(); }
public void detachDatabase(@Nonnull AndroidDatabase db, @Nonnull String databaseToDetach) { db.getDatabaseWrapper().detachDatabase(databaseToDetach); }