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; package com.todoroo.astrid.data;
import com.todoroo.andlib.data.AbstractModel; 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.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty; import com.todoroo.andlib.data.Property.StringProperty;
@ -46,4 +47,10 @@ abstract public class RemoteModel extends AbstractModel {
/** pushed at date property name */ /** pushed at date property name */
public static final LongProperty PUSHED_AT_PROPERTY = new LongProperty(null, PUSHED_AT_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.AbstractModel;
import com.todoroo.andlib.data.Property; 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.IntegerProperty;
import com.todoroo.andlib.data.Property.LongProperty; import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty; 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( public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME); TABLE, PUSHED_AT_PROPERTY_NAME);
/** UUID */
public static final BigIntegerProperty UUID = new BigIntegerProperty(
TABLE, UUID_PROPERTY_NAME);
/** List of all properties for this model */ /** List of all properties for this model */
public static final Property<?>[] PROPERTIES = generateProperties(TagData.class); 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.AbstractModel;
import com.todoroo.andlib.data.Property; 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.IntegerProperty;
import com.todoroo.andlib.data.Property.LongProperty; import com.todoroo.andlib.data.Property.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty; 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( public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME); TABLE, PUSHED_AT_PROPERTY_NAME);
/** UUID */
public static final BigIntegerProperty UUID = new BigIntegerProperty(
TABLE, UUID_PROPERTY_NAME);
/** List of all properties for this model */ /** List of all properties for this model */
public static final Property<?>[] PROPERTIES = generateProperties(Task.class); 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.AbstractModel;
import com.todoroo.andlib.data.Property; 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.LongProperty;
import com.todoroo.andlib.data.Property.StringProperty; import com.todoroo.andlib.data.Property.StringProperty;
import com.todoroo.andlib.data.Table; import com.todoroo.andlib.data.Table;
@ -109,6 +110,10 @@ public class Update extends RemoteModel {
public static final LongProperty PUSHED_AT = new LongProperty( public static final LongProperty PUSHED_AT = new LongProperty(
TABLE, PUSHED_AT_PROPERTY_NAME); TABLE, PUSHED_AT_PROPERTY_NAME);
/** UUID */
public static final BigIntegerProperty UUID = new BigIntegerProperty(
TABLE, UUID_PROPERTY_NAME);
/** List of all properties for this model */ /** List of all properties for this model */
public static final Property<?>[] PROPERTIES = generateProperties(Update.class); public static final Property<?>[] PROPERTIES = generateProperties(Update.class);

@ -1,5 +1,7 @@
package com.todoroo.astrid.tags; package com.todoroo.astrid.tags;
import java.math.BigInteger;
import android.util.Log; import android.util.Log;
import com.todoroo.andlib.data.DatabaseDao; 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 // 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); 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); 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); assertUUIDsExist(updatesWithoutUUIDQuery, new Update(), updateDao);
@ -134,9 +136,13 @@ public class Astrid44SyncMigrator {
try { try {
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) { for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
instance.readPropertiesFromCursor(cursor); instance.readPropertiesFromCursor(cursor);
Pair<Long, String> uuidPair = UUIDHelper.newUUID(); if (!instance.containsNonNullValue(RemoteModel.REMOTE_ID_PROPERTY)) {
instance.setValue(RemoteModel.REMOTE_ID_PROPERTY, uuidPair.getLeft()); Pair<Long, String> uuidPair = UUIDHelper.newUUID();
instance.setValue(RemoteModel.PROOF_TEXT_PROPERTY, uuidPair.getRight()); 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); dao.saveExisting(instance);
} }
} finally { } finally {

@ -340,13 +340,16 @@ public class Database extends AbstractDatabase {
database.execSQL(createTableSql(visitor, TagOutstanding.TABLE.name, TagOutstanding.PROPERTIES)); 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.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.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.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(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(User.TABLE, User.PUSHED_AT, visitor, null));
database.execSQL(addColumnSql(Update.TABLE, Update.PUSHED_AT, visitor, null));
} catch (SQLiteException e) { } catch (SQLiteException e) {
Log.e("astrid", "db-upgrade-" + oldVersion + "-" + newVersion, e); Log.e("astrid", "db-upgrade-" + oldVersion + "-" + newVersion, e);
} }

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

Loading…
Cancel
Save