Started building stuff for separate uuid column (can't reuse remoteId column because of size)

pull/14/head
Sam Bosley 12 years ago
parent b6902e6c90
commit 48d9c46d72

@ -6,6 +6,7 @@
package com.todoroo.astrid.data;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property.BigIntegerProperty;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty;
@ -46,4 +47,10 @@ abstract public class RemoteModel extends AbstractModel {
/** pushed at date property name */
public static final LongProperty PUSHED_AT_PROPERTY = new LongProperty(null, PUSHED_AT_PROPERTY_NAME);
/** new uuid property */
public static final String UUID_PROPERTY_NAME = "uuid"; //$NON-NLS-1$
/** new uuid property */
public static final BigIntegerProperty UUID_PROPERTY = new BigIntegerProperty(null, UUID_PROPERTY_NAME);
}

@ -11,6 +11,7 @@ import android.net.Uri;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.BigIntegerProperty;
import com.todoroo.andlib.data.Property.IntegerProperty;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty;
@ -125,6 +126,10 @@ public final class TagData extends RemoteModel {
public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME);
/** UUID */
public static final BigIntegerProperty UUID = new BigIntegerProperty(
TABLE, UUID_PROPERTY_NAME);
/** List of all properties for this model */
public static final Property<?>[] PROPERTIES = generateProperties(TagData.class);

@ -14,6 +14,7 @@ import android.net.Uri;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.BigIntegerProperty;
import com.todoroo.andlib.data.Property.IntegerProperty;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty;
@ -170,6 +171,10 @@ public final class Task extends RemoteModel {
public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME);
/** UUID */
public static final BigIntegerProperty UUID = new BigIntegerProperty(
TABLE, UUID_PROPERTY_NAME);
/** List of all properties for this model */
public static final Property<?>[] PROPERTIES = generateProperties(Task.class);

@ -11,6 +11,7 @@ import android.net.Uri;
import com.todoroo.andlib.data.AbstractModel;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.data.Property.BigIntegerProperty;
import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.data.Table;
@ -109,6 +110,10 @@ public class Update extends RemoteModel {
public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME);
/** UUID */
public static final BigIntegerProperty UUID = new BigIntegerProperty(
TABLE, UUID_PROPERTY_NAME);
/** List of all properties for this model */
public static final Property<?>[] PROPERTIES = generateProperties(Update.class);

@ -1,5 +1,7 @@
package com.todoroo.astrid.tags;
import java.math.BigInteger;
import android.util.Log;
import com.todoroo.andlib.data.DatabaseDao;
@ -74,13 +76,13 @@ public class Astrid44SyncMigrator {
// --------------
// Then ensure that every remote model has a remote id, by generating one using the uuid generator for all those without one
// --------------
Query tagsWithoutUUIDQuery = Query.select(TagData.ID, TagData.REMOTE_ID).where(Criterion.or(TagData.REMOTE_ID.isNull(), TagData.REMOTE_ID.eq(0)));
Query tagsWithoutUUIDQuery = Query.select(TagData.ID, TagData.REMOTE_ID).where(Criterion.all);
assertUUIDsExist(tagsWithoutUUIDQuery, new TagData(), tagDataDao);
Query tasksWithoutUUIDQuery = Query.select(Task.ID, Task.REMOTE_ID).where(Criterion.or(Task.REMOTE_ID.isNull(), Task.REMOTE_ID.eq(0)));
Query tasksWithoutUUIDQuery = Query.select(Task.ID, Task.REMOTE_ID).where(Criterion.all);
assertUUIDsExist(tasksWithoutUUIDQuery, new Task(), taskDao);
Query updatesWithoutUUIDQuery = Query.select(Update.ID, Update.REMOTE_ID).where(Criterion.or(Update.REMOTE_ID.isNull(), Update.REMOTE_ID.eq(0)));
Query updatesWithoutUUIDQuery = Query.select(Update.ID, Update.REMOTE_ID).where(Criterion.all);
assertUUIDsExist(updatesWithoutUUIDQuery, new Update(), updateDao);
@ -134,9 +136,13 @@ public class Astrid44SyncMigrator {
try {
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
instance.readPropertiesFromCursor(cursor);
Pair<Long, String> uuidPair = UUIDHelper.newUUID();
instance.setValue(RemoteModel.REMOTE_ID_PROPERTY, uuidPair.getLeft());
instance.setValue(RemoteModel.PROOF_TEXT_PROPERTY, uuidPair.getRight());
if (!instance.containsNonNullValue(RemoteModel.REMOTE_ID_PROPERTY)) {
Pair<Long, String> uuidPair = UUIDHelper.newUUID();
instance.setValue(RemoteModel.REMOTE_ID_PROPERTY, uuidPair.getLeft());
instance.setValue(RemoteModel.PROOF_TEXT_PROPERTY, uuidPair.getRight());
}
// Migrate remote id to uuid field
instance.setValue(RemoteModel.UUID_PROPERTY, BigInteger.valueOf(instance.getValue(RemoteModel.REMOTE_ID_PROPERTY)));
dao.saveExisting(instance);
}
} finally {

@ -340,13 +340,16 @@ public class Database extends AbstractDatabase {
database.execSQL(createTableSql(visitor, TagOutstanding.TABLE.name, TagOutstanding.PROPERTIES));
database.execSQL(addColumnSql(Task.TABLE, Task.PROOF_TEXT, visitor, null));
database.execSQL(addColumnSql(Task.TABLE, Task.PUSHED_AT, visitor, null));
database.execSQL(addColumnSql(Task.TABLE, Task.UUID, visitor, null));
database.execSQL(addColumnSql(TagData.TABLE, TagData.PROOF_TEXT, visitor, null));
database.execSQL(addColumnSql(TagData.TABLE, TagData.PUSHED_AT, visitor, null));
database.execSQL(addColumnSql(TagData.TABLE, TagData.UUID, visitor, null));
database.execSQL(addColumnSql(Update.TABLE, Update.PROOF_TEXT, visitor, null));
database.execSQL(addColumnSql(Update.TABLE, Update.PUSHED_AT, visitor, null));
database.execSQL(addColumnSql(Update.TABLE, Update.UUID, visitor, null));
database.execSQL(addColumnSql(Metadata.TABLE, Metadata.DELETION_DATE, visitor, "0"));
database.execSQL(addColumnSql(Task.TABLE, Task.PUSHED_AT, visitor, null));
database.execSQL(addColumnSql(TagData.TABLE, TagData.PUSHED_AT, visitor, null));
database.execSQL(addColumnSql(User.TABLE, User.PUSHED_AT, visitor, null));
database.execSQL(addColumnSql(Update.TABLE, Update.PUSHED_AT, visitor, null));
} catch (SQLiteException e) {
Log.e("astrid", "db-upgrade-" + oldVersion + "-" + newVersion, e);
}

@ -1,5 +1,7 @@
package com.todoroo.astrid.sync;
import java.math.BigInteger;
import android.text.TextUtils;
import com.todoroo.andlib.data.Property;
@ -25,7 +27,7 @@ public class Astrid44MigrationTest extends NewSyncTestCase {
public void testAstrid44Migration() {
setupOldDatabase();
new Astrid44SyncMigrator().performMigration();
assertAllModelsHaveRemoteId();
assertAllModelsHaveUUID();
assertAllTagsHaveTagData();
assertAllMetadataHasAllFields();
}
@ -91,9 +93,9 @@ public class Astrid44MigrationTest extends NewSyncTestCase {
// Task 5: Tag 5, New tag 2
}
private void assertAllModelsHaveRemoteId() {
assertRemoteIds(Task.TABLE, new Task(), taskDao, Task.ID, Task.REMOTE_ID);
assertRemoteIds(TagData.TABLE, new TagData(), tagDataDao, TagData.ID, TagData.REMOTE_ID);
private void assertAllModelsHaveUUID() {
assertRemoteIds(Task.TABLE, new Task(), taskDao, Task.ID, Task.UUID);
assertRemoteIds(TagData.TABLE, new TagData(), tagDataDao, TagData.ID, TagData.UUID);
}
private <TYPE extends RemoteModel> void assertRemoteIds(Table table, TYPE instance, RemoteModelDao<TYPE> dao, Property<?>... properties) {
@ -102,9 +104,9 @@ public class Astrid44MigrationTest extends NewSyncTestCase {
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
instance.clear();
instance.readPropertiesFromCursor(cursor);
Long remoteId = instance.getValue(RemoteModel.REMOTE_ID_PROPERTY);
if (remoteId == null || remoteId == 0) {
fail(instance.getClass().getName() + instance.getId() + " didn't have a remote id");
BigInteger uuid = instance.getValue(RemoteModel.UUID_PROPERTY);
if (uuid == null || uuid.intValue() == 0) {
fail(instance.getClass().getName() + instance.getId() + " didn't have a uuid");
}
}
} finally {

Loading…
Cancel
Save