Loading core/java/android/content/AbstractTableMerger.java +287 −286 Original line number Diff line number Diff line Loading @@ -164,12 +164,15 @@ public abstract class AbstractTableMerger mDb.update(mDeletedTable, mSyncMarkValues, null, null); } Cursor localCursor = null; Cursor deletedCursor = null; Cursor diffsCursor = null; try { // load the local database entries, so we can merge them with the server final String[] accountSelectionArgs = new String[]{account}; Cursor localCursor = mDb.query(mTable, syncDirtyProjection, localCursor = mDb.query(mTable, syncDirtyProjection, SELECT_MARKED, accountSelectionArgs, null, null, mTable + "." + _SYNC_ID); Cursor deletedCursor; if (mDeletedTable != null) { deletedCursor = mDb.query(mDeletedTable, syncIdAndVersionProjection, SELECT_MARKED, accountSelectionArgs, null, null, Loading @@ -180,7 +183,7 @@ public abstract class AbstractTableMerger } // Apply updates and insertions from the server Cursor diffsCursor = serverDiffs.query(mTableURL, diffsCursor = serverDiffs.query(mTableURL, null, null, null, mTable + "." + _SYNC_ID); int deletedSyncIDColumn = deletedCursor.getColumnIndexOrThrow(_SYNC_ID); int deletedSyncVersionColumn = deletedCursor.getColumnIndexOrThrow(_SYNC_VERSION); Loading @@ -195,9 +198,6 @@ public abstract class AbstractTableMerger deletedCursor.moveToFirst(); while (diffsCursor.moveToNext()) { if (mIsMergeCancelled) { localCursor.close(); deletedCursor.close(); diffsCursor.close(); return; } mDb.yieldIfContended(); Loading Loading @@ -251,9 +251,6 @@ public abstract class AbstractTableMerger while (!localCursor.isAfterLast()) { if (mIsMergeCancelled) { localCursor.deactivate(); deletedCursor.deactivate(); diffsCursor.deactivate(); return; } localCount++; Loading Loading @@ -418,9 +415,6 @@ public abstract class AbstractTableMerger if (!diffsArePartial) { while (!localCursor.isAfterLast() && !TextUtils.isEmpty(localCursor.getString(2))) { if (mIsMergeCancelled) { localCursor.deactivate(); deletedCursor.deactivate(); diffsCursor.deactivate(); return; } localCount++; Loading @@ -439,29 +433,32 @@ public abstract class AbstractTableMerger mDb.yieldIfContended(); } } if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "checked " + localCount + " local entries"); diffsCursor.deactivate(); localCursor.deactivate(); deletedCursor.deactivate(); } finally { if (diffsCursor != null) diffsCursor.close(); if (localCursor != null) localCursor.close(); if (deletedCursor != null) deletedCursor.close(); } if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "applying deletions from the server"); // Apply deletions from the server if (mDeletedTableURL != null) { diffsCursor = serverDiffs.query(mDeletedTableURL, null, null, null, null); try { while (diffsCursor.moveToNext()) { if (mIsMergeCancelled) { diffsCursor.deactivate(); return; } // delete all rows that match each element in the diffsCursor fullyDeleteMatchingRows(diffsCursor, account, syncResult); mDb.yieldIfContended(); } diffsCursor.deactivate(); } finally { diffsCursor.close(); } } } Loading @@ -471,8 +468,9 @@ public abstract class AbstractTableMerger final boolean deleteBySyncId = !diffsCursor.isNull(serverSyncIdColumn); // delete the rows explicitly so that the delete operation can be overridden final Cursor c; final String[] selectionArgs; Cursor c = null; try { if (deleteBySyncId) { selectionArgs = new String[]{diffsCursor.getString(serverSyncIdColumn), account}; c = mDb.query(mTable, new String[]{BaseColumns._ID}, SELECT_BY_SYNC_ID_AND_ACCOUNT, Loading @@ -483,14 +481,13 @@ public abstract class AbstractTableMerger c = mDb.query(mTable, new String[]{BaseColumns._ID}, SELECT_BY_ID, selectionArgs, null, null, null); } try { c.moveToFirst(); while (!c.isAfterLast()) { deleteRow(c); // advances the cursor syncResult.stats.numDeletes++; } } finally { c.deactivate(); if (c != null) c.close(); } if (deleteBySyncId && mDeletedTable != null) { mDb.delete(mDeletedTable, SELECT_BY_SYNC_ID_AND_ACCOUNT, selectionArgs); Loading Loading @@ -526,12 +523,13 @@ public abstract class AbstractTableMerger // Generate the client updates and insertions // Create a cursor for dirty records long numInsertsOrUpdates = 0; Cursor localChangesCursor = mDb.query(mTable, null, SELECT_UNSYNCED, accountSelectionArgs, null, null, null); long numInsertsOrUpdates = localChangesCursor.getCount(); try { numInsertsOrUpdates = localChangesCursor.getCount(); while (localChangesCursor.moveToNext()) { if (mIsMergeCancelled) { localChangesCursor.close(); return; } if (clientDiffs == null) { Loading @@ -544,7 +542,9 @@ public abstract class AbstractTableMerger _SYNC_LOCAL_ID); clientDiffs.insert(mTableURL, mValues); } } finally { localChangesCursor.close(); } // Generate the client deletions if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "generating client deletions"); Loading @@ -555,11 +555,10 @@ public abstract class AbstractTableMerger syncIdAndVersionProjection, _SYNC_ACCOUNT + "=? AND " + _SYNC_ID + " IS NOT NULL", accountSelectionArgs, null, null, mDeletedTable + "." + _SYNC_ID); try { numDeletedEntries = deletedCursor.getCount(); while (deletedCursor.moveToNext()) { if (mIsMergeCancelled) { deletedCursor.close(); return; } if (clientDiffs == null) { Loading @@ -569,8 +568,10 @@ public abstract class AbstractTableMerger DatabaseUtils.cursorRowToContentValues(deletedCursor, mValues); clientDiffs.insert(mDeletedTableURL, mValues); } } finally { deletedCursor.close(); } } if (clientDiffs != null) { mergeResult.tempContentProvider = clientDiffs; Loading core/java/android/database/DatabaseUtils.java +17 −15 Original line number Diff line number Diff line Loading @@ -591,10 +591,12 @@ public class DatabaseUtils { public static long queryNumEntries(SQLiteDatabase db, String table) { Cursor cursor = db.query(table, countProjection, null, null, null, null, null); try { cursor.moveToFirst(); long count = cursor.getLong(0); cursor.deactivate(); return count; return cursor.getLong(0); } finally { cursor.close(); } } /** Loading packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java +9 −6 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ public class SubscribedFeedsIntentService extends IntentService { ContentResolver contentResolver = context.getContentResolver(); Cursor c = contentResolver.query(SubscribedFeeds.Accounts.CONTENT_URI, sAccountProjection, null, null, null); try { while (c.moveToNext()) { String account = c.getString(0); if (TextUtils.isEmpty(account)) { Loading @@ -162,7 +163,9 @@ public class SubscribedFeedsIntentService extends IntentService { } accounts.add(account); } c.deactivate(); } finally { c.close(); } // Clear the auth tokens for all these accounts so that we are sure // they will still be valid until the next time we refresh them. Loading Loading
core/java/android/content/AbstractTableMerger.java +287 −286 Original line number Diff line number Diff line Loading @@ -164,12 +164,15 @@ public abstract class AbstractTableMerger mDb.update(mDeletedTable, mSyncMarkValues, null, null); } Cursor localCursor = null; Cursor deletedCursor = null; Cursor diffsCursor = null; try { // load the local database entries, so we can merge them with the server final String[] accountSelectionArgs = new String[]{account}; Cursor localCursor = mDb.query(mTable, syncDirtyProjection, localCursor = mDb.query(mTable, syncDirtyProjection, SELECT_MARKED, accountSelectionArgs, null, null, mTable + "." + _SYNC_ID); Cursor deletedCursor; if (mDeletedTable != null) { deletedCursor = mDb.query(mDeletedTable, syncIdAndVersionProjection, SELECT_MARKED, accountSelectionArgs, null, null, Loading @@ -180,7 +183,7 @@ public abstract class AbstractTableMerger } // Apply updates and insertions from the server Cursor diffsCursor = serverDiffs.query(mTableURL, diffsCursor = serverDiffs.query(mTableURL, null, null, null, mTable + "." + _SYNC_ID); int deletedSyncIDColumn = deletedCursor.getColumnIndexOrThrow(_SYNC_ID); int deletedSyncVersionColumn = deletedCursor.getColumnIndexOrThrow(_SYNC_VERSION); Loading @@ -195,9 +198,6 @@ public abstract class AbstractTableMerger deletedCursor.moveToFirst(); while (diffsCursor.moveToNext()) { if (mIsMergeCancelled) { localCursor.close(); deletedCursor.close(); diffsCursor.close(); return; } mDb.yieldIfContended(); Loading Loading @@ -251,9 +251,6 @@ public abstract class AbstractTableMerger while (!localCursor.isAfterLast()) { if (mIsMergeCancelled) { localCursor.deactivate(); deletedCursor.deactivate(); diffsCursor.deactivate(); return; } localCount++; Loading Loading @@ -418,9 +415,6 @@ public abstract class AbstractTableMerger if (!diffsArePartial) { while (!localCursor.isAfterLast() && !TextUtils.isEmpty(localCursor.getString(2))) { if (mIsMergeCancelled) { localCursor.deactivate(); deletedCursor.deactivate(); diffsCursor.deactivate(); return; } localCount++; Loading @@ -439,29 +433,32 @@ public abstract class AbstractTableMerger mDb.yieldIfContended(); } } if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "checked " + localCount + " local entries"); diffsCursor.deactivate(); localCursor.deactivate(); deletedCursor.deactivate(); } finally { if (diffsCursor != null) diffsCursor.close(); if (localCursor != null) localCursor.close(); if (deletedCursor != null) deletedCursor.close(); } if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "applying deletions from the server"); // Apply deletions from the server if (mDeletedTableURL != null) { diffsCursor = serverDiffs.query(mDeletedTableURL, null, null, null, null); try { while (diffsCursor.moveToNext()) { if (mIsMergeCancelled) { diffsCursor.deactivate(); return; } // delete all rows that match each element in the diffsCursor fullyDeleteMatchingRows(diffsCursor, account, syncResult); mDb.yieldIfContended(); } diffsCursor.deactivate(); } finally { diffsCursor.close(); } } } Loading @@ -471,8 +468,9 @@ public abstract class AbstractTableMerger final boolean deleteBySyncId = !diffsCursor.isNull(serverSyncIdColumn); // delete the rows explicitly so that the delete operation can be overridden final Cursor c; final String[] selectionArgs; Cursor c = null; try { if (deleteBySyncId) { selectionArgs = new String[]{diffsCursor.getString(serverSyncIdColumn), account}; c = mDb.query(mTable, new String[]{BaseColumns._ID}, SELECT_BY_SYNC_ID_AND_ACCOUNT, Loading @@ -483,14 +481,13 @@ public abstract class AbstractTableMerger c = mDb.query(mTable, new String[]{BaseColumns._ID}, SELECT_BY_ID, selectionArgs, null, null, null); } try { c.moveToFirst(); while (!c.isAfterLast()) { deleteRow(c); // advances the cursor syncResult.stats.numDeletes++; } } finally { c.deactivate(); if (c != null) c.close(); } if (deleteBySyncId && mDeletedTable != null) { mDb.delete(mDeletedTable, SELECT_BY_SYNC_ID_AND_ACCOUNT, selectionArgs); Loading Loading @@ -526,12 +523,13 @@ public abstract class AbstractTableMerger // Generate the client updates and insertions // Create a cursor for dirty records long numInsertsOrUpdates = 0; Cursor localChangesCursor = mDb.query(mTable, null, SELECT_UNSYNCED, accountSelectionArgs, null, null, null); long numInsertsOrUpdates = localChangesCursor.getCount(); try { numInsertsOrUpdates = localChangesCursor.getCount(); while (localChangesCursor.moveToNext()) { if (mIsMergeCancelled) { localChangesCursor.close(); return; } if (clientDiffs == null) { Loading @@ -544,7 +542,9 @@ public abstract class AbstractTableMerger _SYNC_LOCAL_ID); clientDiffs.insert(mTableURL, mValues); } } finally { localChangesCursor.close(); } // Generate the client deletions if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "generating client deletions"); Loading @@ -555,11 +555,10 @@ public abstract class AbstractTableMerger syncIdAndVersionProjection, _SYNC_ACCOUNT + "=? AND " + _SYNC_ID + " IS NOT NULL", accountSelectionArgs, null, null, mDeletedTable + "." + _SYNC_ID); try { numDeletedEntries = deletedCursor.getCount(); while (deletedCursor.moveToNext()) { if (mIsMergeCancelled) { deletedCursor.close(); return; } if (clientDiffs == null) { Loading @@ -569,8 +568,10 @@ public abstract class AbstractTableMerger DatabaseUtils.cursorRowToContentValues(deletedCursor, mValues); clientDiffs.insert(mDeletedTableURL, mValues); } } finally { deletedCursor.close(); } } if (clientDiffs != null) { mergeResult.tempContentProvider = clientDiffs; Loading
core/java/android/database/DatabaseUtils.java +17 −15 Original line number Diff line number Diff line Loading @@ -591,10 +591,12 @@ public class DatabaseUtils { public static long queryNumEntries(SQLiteDatabase db, String table) { Cursor cursor = db.query(table, countProjection, null, null, null, null, null); try { cursor.moveToFirst(); long count = cursor.getLong(0); cursor.deactivate(); return count; return cursor.getLong(0); } finally { cursor.close(); } } /** Loading
packages/SubscribedFeedsProvider/src/com/android/providers/subscribedfeeds/SubscribedFeedsIntentService.java +9 −6 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ public class SubscribedFeedsIntentService extends IntentService { ContentResolver contentResolver = context.getContentResolver(); Cursor c = contentResolver.query(SubscribedFeeds.Accounts.CONTENT_URI, sAccountProjection, null, null, null); try { while (c.moveToNext()) { String account = c.getString(0); if (TextUtils.isEmpty(account)) { Loading @@ -162,7 +163,9 @@ public class SubscribedFeedsIntentService extends IntentService { } accounts.add(account); } c.deactivate(); } finally { c.close(); } // Clear the auth tokens for all these accounts so that we are sure // they will still be valid until the next time we refresh them. Loading