mirror of
https://github.com/oxen-io/session-android.git
synced 2025-02-20 07:28:27 +00:00
Don't copy column to sqlcipher db if it doesn't exist there
Fixes #7386
This commit is contained in:
parent
2b651ee323
commit
0bbe83f8f2
@ -25,6 +25,8 @@ import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
|||||||
import org.whispersystems.libsignal.InvalidMessageException;
|
import org.whispersystems.libsignal.InvalidMessageException;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
public class SQLCipherMigrationHelper {
|
public class SQLCipherMigrationHelper {
|
||||||
|
|
||||||
@ -180,6 +182,8 @@ public class SQLCipherMigrationHelper {
|
|||||||
@NonNull net.sqlcipher.database.SQLiteDatabase modernDb,
|
@NonNull net.sqlcipher.database.SQLiteDatabase modernDb,
|
||||||
@Nullable BiFunction<ContentValues, Pair<Integer, Integer>, ContentValues> transformer)
|
@Nullable BiFunction<ContentValues, Pair<Integer, Integer>, ContentValues> transformer)
|
||||||
{
|
{
|
||||||
|
Set<String> destinationColumns = getTableColumns(tableName, modernDb);
|
||||||
|
|
||||||
try (Cursor cursor = legacyDb.query(tableName, null, null, null, null, null, null)) {
|
try (Cursor cursor = legacyDb.query(tableName, null, null, null, null, null, null)) {
|
||||||
int count = (cursor != null) ? cursor.getCount() : 0;
|
int count = (cursor != null) ? cursor.getCount() : 0;
|
||||||
int progress = 1;
|
int progress = 1;
|
||||||
@ -190,11 +194,13 @@ public class SQLCipherMigrationHelper {
|
|||||||
for (int i=0;i<cursor.getColumnCount();i++) {
|
for (int i=0;i<cursor.getColumnCount();i++) {
|
||||||
String columnName = cursor.getColumnName(i);
|
String columnName = cursor.getColumnName(i);
|
||||||
|
|
||||||
switch (cursor.getType(i)) {
|
if (destinationColumns.contains(columnName)) {
|
||||||
case Cursor.FIELD_TYPE_STRING: row.put(columnName, cursor.getString(i)); break;
|
switch (cursor.getType(i)) {
|
||||||
case Cursor.FIELD_TYPE_FLOAT: row.put(columnName, cursor.getFloat(i)); break;
|
case Cursor.FIELD_TYPE_STRING: row.put(columnName, cursor.getString(i)); break;
|
||||||
case Cursor.FIELD_TYPE_INTEGER: row.put(columnName, cursor.getLong(i)); break;
|
case Cursor.FIELD_TYPE_FLOAT: row.put(columnName, cursor.getFloat(i)); break;
|
||||||
case Cursor.FIELD_TYPE_BLOB: row.put(columnName, cursor.getBlob(i)); break;
|
case Cursor.FIELD_TYPE_INTEGER: row.put(columnName, cursor.getLong(i)); break;
|
||||||
|
case Cursor.FIELD_TYPE_BLOB: row.put(columnName, cursor.getBlob(i)); break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,6 +233,18 @@ public class SQLCipherMigrationHelper {
|
|||||||
return new Pair<>(type, body);
|
return new Pair<>(type, body);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Set<String> getTableColumns(String tableName, net.sqlcipher.database.SQLiteDatabase database) {
|
||||||
|
Set<String> results = new HashSet<>();
|
||||||
|
|
||||||
|
try (Cursor cursor = database.rawQuery("PRAGMA table_info(" + tableName + ")", null)) {
|
||||||
|
while (cursor != null && cursor.moveToNext()) {
|
||||||
|
results.add(cursor.getString(1));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
private static int getTotalProgress(int sectionOffset, int sectionProgress, int sectionTotal) {
|
private static int getTotalProgress(int sectionOffset, int sectionProgress, int sectionTotal) {
|
||||||
double percentOfSectionComplete = ((double)sectionProgress) / ((double)sectionTotal);
|
double percentOfSectionComplete = ((double)sectionProgress) / ((double)sectionTotal);
|
||||||
return sectionOffset + (int)(((double)1000) * percentOfSectionComplete);
|
return sectionOffset + (int)(((double)1000) * percentOfSectionComplete);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user