Cleanup Provider Message in preparation for upload

* Remove mServerIntId and its special logic
* Add mServerTimeStamp
* Add column dynamically so we don't lose accounts

Bug # 2097471
This commit is contained in:
Andrew Stadler 2009-09-22 18:31:10 -07:00
parent 39ec429862
commit 0d00889f83
5 changed files with 41 additions and 21 deletions

View File

@ -60,6 +60,7 @@ public class LegacyConversions {
Address[] replyTo = message.getReplyTo();
String subject = message.getSubject();
Date sentDate = message.getSentDate();
Date internalDate = message.getInternalDate();
if (from != null && from.length > 0) {
localMessage.mDisplayName = from[0].toFriendly();
@ -86,7 +87,9 @@ public class LegacyConversions {
// public int mFlags = 0;
localMessage.mServerId = message.getUid();
// public int mServerIntId;
if (internalDate != null) {
localMessage.mServerTimeStamp = internalDate.getTime();
}
// public String mClientId;
// public String mMessageId;

View File

@ -171,6 +171,8 @@ public abstract class EmailContent {
public static final String ID = "_id";
// source id (string) : the source's name of this item
public static final String SERVER_ID = "syncServerId";
// source's timestamp (long) for this item
public static final String SERVER_TIMESTAMP = "syncServerTimeStamp";
}
public interface BodyColumns {
@ -419,6 +421,7 @@ public abstract class EmailContent {
public static final int CONTENT_CC_LIST_COLUMN = 16;
public static final int CONTENT_BCC_LIST_COLUMN = 17;
public static final int CONTENT_REPLY_TO_COLUMN = 18;
public static final int CONTENT_SERVER_TIMESTAMP_COLUMN = 19;
public static final String[] CONTENT_PROJECTION = new String[] {
RECORD_ID,
@ -431,6 +434,7 @@ public abstract class EmailContent {
MessageColumns.ACCOUNT_KEY, MessageColumns.FROM_LIST,
MessageColumns.TO_LIST, MessageColumns.CC_LIST,
MessageColumns.BCC_LIST, MessageColumns.REPLY_TO_LIST,
SyncColumns.SERVER_TIMESTAMP,
};
public static final int LIST_ID_COLUMN = 0;
@ -476,7 +480,7 @@ public abstract class EmailContent {
public int mFlags = 0;
public String mServerId;
public int mServerIntId;
public long mServerTimeStamp;
public String mClientId;
public String mMessageId;
@ -534,12 +538,8 @@ public abstract class EmailContent {
values.put(MessageColumns.FLAG_ATTACHMENT, mFlagAttachment);
values.put(MessageColumns.FLAGS, mFlags);
if (mServerId != null) {
values.put(SyncColumns.SERVER_ID, mServerId);
} else {
values.put(SyncColumns.SERVER_ID, mServerIntId);
}
values.put(SyncColumns.SERVER_ID, mServerId);
values.put(SyncColumns.SERVER_TIMESTAMP, mServerTimeStamp);
values.put(MessageColumns.CLIENT_ID, mClientId);
values.put(MessageColumns.MESSAGE_ID, mMessageId);
@ -585,7 +585,7 @@ public abstract class EmailContent {
mFlagAttachment = c.getInt(CONTENT_FLAG_ATTACHMENT_COLUMN) == 1;
mFlags = c.getInt(CONTENT_FLAGS_COLUMN);
mServerId = c.getString(CONTENT_SERVER_ID_COLUMN);
mServerIntId = c.getInt(CONTENT_SERVER_ID_COLUMN);
mServerTimeStamp = c.getLong(CONTENT_SERVER_TIMESTAMP_COLUMN);
mClientId = c.getString(CONTENT_CLIENT_ID_COLUMN);
mMessageId = c.getString(CONTENT_MESSAGE_ID_COLUMN);
mMailboxKey = c.getLong(CONTENT_MAILBOX_KEY_COLUMN);

View File

@ -60,12 +60,15 @@ public class EmailProvider extends ContentProvider {
// Any changes to the database format *must* include update-in-place code.
// Original version: 3
// Version 4: Database wipe required; changing AccountManager interface w/Exchange
public static final int DATABASE_VERSION = 5;
// Version 5: Database wipe required; changing AccountManager interface w/Exchange
// Version 6: Adding Message.mServerTimeStamp column
public static final int DATABASE_VERSION = 6;
// Any changes to the database format *must* include update-in-place code.
// Original version: 2
// Version 3: Add "sourceKey" column
// Version 4: Database wipe required; changing AccountManager interface w/Exchange
// Version 5: Database wipe required; changing AccountManager interface w/Exchange
public static final int BODY_DATABASE_VERSION = 5;
public static final String EMAIL_AUTHORITY = "com.android.email.provider";
@ -276,14 +279,16 @@ public class EmailProvider extends ContentProvider {
// This String and the following String MUST have the same columns, except for the type
// of those columns!
String createString = " (" + EmailContent.RECORD_ID + " integer primary key autoincrement, "
+ SyncColumns.SERVER_ID + " integer, "
+ SyncColumns.SERVER_ID + " text, "
+ SyncColumns.SERVER_TIMESTAMP + " integer, "
+ messageColumns;
// For the updated and deleted tables, the id is assigned, but we do want to keep track
// of the ORDER of updates using an autoincrement primary key. We use the DATA column
// at this point; it has no other function
String altCreateString = " (" + EmailContent.RECORD_ID + " integer unique, "
+ SyncColumns.SERVER_ID + " integer, "
+ SyncColumns.SERVER_ID + " text, "
+ SyncColumns.SERVER_TIMESTAMP + " integer, "
+ messageColumns;
// The three tables have the same schema
@ -505,9 +510,6 @@ public class EmailProvider extends ContentProvider {
}
}
private final int mDatabaseVersion = DATABASE_VERSION;
private final int mBodyDatabaseVersion = BODY_DATABASE_VERSION;
private SQLiteDatabase mDatabase;
private SQLiteDatabase mBodyDatabase;
@ -532,7 +534,7 @@ public class EmailProvider extends ContentProvider {
private class BodyDatabaseHelper extends SQLiteOpenHelper {
BodyDatabaseHelper(Context context, String name) {
super(context, name, null, mBodyDatabaseVersion);
super(context, name, null, BODY_DATABASE_VERSION);
}
@Override
@ -555,7 +557,7 @@ public class EmailProvider extends ContentProvider {
Context mContext;
DatabaseHelper(Context context, String name) {
super(context, name, null, mDatabaseVersion);
super(context, name, null, DATABASE_VERSION);
mContext = context;
}
@ -584,6 +586,17 @@ public class EmailProvider extends ContentProvider {
resetMailboxTable(db, oldVersion, newVersion);
resetHostAuthTable(db, oldVersion, newVersion);
resetAccountTable(db, oldVersion, newVersion);
return;
}
if (oldVersion == 5) {
// Message Tables: Add SyncColumns.SERVER_TIMESTAMP
db.execSQL("alter table " + Message.TABLE_NAME
+ " add column " + SyncColumns.SERVER_TIMESTAMP + " integer" + ";");
db.execSQL("alter table " + Message.UPDATED_TABLE_NAME
+ " add column " + SyncColumns.SERVER_TIMESTAMP + " integer" + ";");
db.execSQL("alter table " + Message.DELETED_TABLE_NAME
+ " add column " + SyncColumns.SERVER_TIMESTAMP + " integer" + ";");
oldVersion = 6;
}
}

View File

@ -123,7 +123,7 @@ public class ProviderTestUtils extends Assert {
Message message = new Message();
message.mDisplayName = name;
message.mTimeStamp = 1;
message.mTimeStamp = 100 + name.length();
message.mSubject = "subject " + name;
message.mFlagRead = true;
message.mFlagLoaded = Message.FLAG_LOADED_UNLOADED;
@ -132,7 +132,7 @@ public class ProviderTestUtils extends Assert {
message.mFlags = 2;
message.mServerId = "serverid " + name;
message.mServerIntId = 0;
message.mServerTimeStamp = 300 + name.length();
message.mClientId = "clientid " + name;
message.mMessageId = "messageid " + name;
@ -150,7 +150,7 @@ public class ProviderTestUtils extends Assert {
message.mHtml = "body html " + name;
message.mTextReply = "reply text " + name;
message.mHtmlReply = "reply html " + name;
message.mSourceKey = 1000;
message.mSourceKey = 400 + name.length();
}
if (saveIt) {
@ -296,7 +296,7 @@ public class ProviderTestUtils extends Assert {
assertEquals(caller + " mFlags", expect.mFlags, actual.mFlags);
assertEquals(caller + " mServerId", expect.mServerId, actual.mServerId);
assertEquals(caller + " mServerIntId", expect.mServerIntId, actual.mServerIntId);
assertEquals(caller + " mServerTimeStamp", expect.mServerTimeStamp,actual.mServerTimeStamp);
assertEquals(caller + " mClientId", expect.mClientId, actual.mClientId);
assertEquals(caller + " mMessageId", expect.mMessageId, actual.mMessageId);

View File

@ -69,6 +69,10 @@ public class ProviderTests extends ProviderTestCase2<EmailProvider> {
super.tearDown();
}
/**
* TODO: Database upgrade tests
*/
/**
* Test simple account save/retrieve
*/