Apply correct user join and union with history table to task comments fragment

pull/14/head
Sam Bosley 13 years ago
parent 009a6420cc
commit 336ec485b3

@ -301,7 +301,7 @@ public class TagViewFragment extends TaskListFragment {
if (tagData != null) { if (tagData != null) {
long lastViewedComments = Preferences.getLong(CommentsFragment.UPDATES_LAST_VIEWED + tagData.getValue(TagData.UUID), 0); long lastViewedComments = Preferences.getLong(CommentsFragment.UPDATES_LAST_VIEWED + tagData.getValue(TagData.UUID), 0);
int unreadCount = 0; int unreadCount = 0;
TodorooCursor<UserActivity> commentCursor = tagDataService.getUpdatesWithExtraCriteria(tagData, UserActivity.CREATED_AT.gt(lastViewedComments), null); TodorooCursor<UserActivity> commentCursor = tagDataService.getUserActivityWithExtraCriteria(tagData, UserActivity.CREATED_AT.gt(lastViewedComments));
try { try {
unreadCount = commentCursor.getCount(); unreadCount = commentCursor.getCount();
} finally { } finally {

@ -2,16 +2,24 @@ package com.todoroo.astrid.actfm;
import android.content.Intent; import android.content.Intent;
import android.database.Cursor; import android.database.Cursor;
import android.text.TextUtils;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ListView; import android.widget.ListView;
import com.timsu.astrid.R; import com.timsu.astrid.R;
import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.service.Autowired; import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field;
import com.todoroo.andlib.sql.Join; import com.todoroo.andlib.sql.Join;
import com.todoroo.andlib.sql.Order;
import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.sql.Query;
import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.actfm.sync.messages.NameMaps;
import com.todoroo.astrid.adapter.UpdateAdapter; import com.todoroo.astrid.adapter.UpdateAdapter;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.History;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.data.User; import com.todoroo.astrid.data.User;
import com.todoroo.astrid.data.UserActivity; import com.todoroo.astrid.data.UserActivity;
@ -55,9 +63,29 @@ public class TaskCommentsFragment extends CommentsFragment {
@Override @Override
protected Cursor getCursor() { protected Cursor getCursor() {
return userActivityDao.query(Query.select(UserActivity.PROPERTIES) Query taskQuery = queryForTask(task, UpdateAdapter.USER_TABLE_ALIAS, UpdateAdapter.USER_ACTIVITY_PROPERTIES, UpdateAdapter.USER_PROPERTIES);
.where(UserActivity.TARGET_ID.eq(task.getUuid())) int length = UpdateAdapter.USER_ACTIVITY_PROPERTIES.length + UpdateAdapter.USER_PROPERTIES.length;
.join(Join.left(User.TABLE, UserActivity.USER_UUID.eq(User.UUID))));
Property<?>[] paddingArray = new Property<?>[Math.max(0, length - UpdateAdapter.HISTORY_PROPERTIES.length)];
for (int i = 0; i < paddingArray.length; i++) {
paddingArray[i] = UpdateAdapter.PADDING_PROPERTY;
}
Query historyQuery = Query.select(AndroidUtilities.addToArray(UpdateAdapter.HISTORY_PROPERTIES, paddingArray)).from(History.TABLE)
.where(Criterion.and(History.TABLE_ID.eq(NameMaps.TABLE_ID_TASKS), History.TARGET_ID.eq(task.getUuid())))
.from(History.TABLE);
Query resultQuery = taskQuery.union(historyQuery).orderBy(Order.desc("1")); //$NON-NLS-1$
return userActivityDao.query(resultQuery);
}
private static Query queryForTask(Task task, String userTableAlias, Property<?>[] activityProperties, Property<?>[] userProperties) {
Query result = Query.select(AndroidUtilities.addToArray(activityProperties, userProperties))
.where(Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT), UserActivity.TARGET_ID.eq(task.getUuid())));
if (!TextUtils.isEmpty(userTableAlias))
result = result.join(Join.left(User.TABLE.as(userTableAlias), UserActivity.USER_UUID.eq(Field.field(userTableAlias + "." + User.UUID.name)))); //$NON-NLS-1$
return result;
} }
@Override @Override

@ -145,14 +145,6 @@ public class TagDataService {
return tagDataDao.query(Query.select(properties).withQueryTemplate(sql)); return tagDataDao.query(Query.select(properties).withQueryTemplate(sql));
} }
/**
* Get updates for this tagData
* @return
*/
public TodorooCursor<UserActivity> getUpdates(TagData tagData, String userTableAlias, Property<?>... userProperties) {
return getUpdatesWithExtraCriteria(tagData, null, userTableAlias, userProperties);
}
private static Query queryForTagData(TagData tagData, Criterion extraCriterion, String userTableAlias, Property<?>[] activityProperties, Property<?>[] userProperties) { private static Query queryForTagData(TagData tagData, Criterion extraCriterion, String userTableAlias, Property<?>[] activityProperties, Property<?>[] userProperties) {
Criterion criteria = Criterion.or( Criterion criteria = Criterion.or(
Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TAG_COMMENT), UserActivity.TARGET_ID.eq(tagData.getUuid())), Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TAG_COMMENT), UserActivity.TARGET_ID.eq(tagData.getUuid())),
@ -168,13 +160,13 @@ public class TagDataService {
return result; return result;
} }
public TodorooCursor<UserActivity> getUpdatesWithExtraCriteria(TagData tagData, Criterion criterion, String userTableAlias, Property<?>... userProperties) { public TodorooCursor<UserActivity> getUserActivityWithExtraCriteria(TagData tagData, Criterion criterion) {
if (tagData == null) if (tagData == null)
return userActivityDao.query(Query.select(UserActivity.PROPERTIES).where( return userActivityDao.query(Query.select(UserActivity.PROPERTIES).where(
criterion). criterion).
orderBy(Order.desc(UserActivity.CREATED_AT))); orderBy(Order.desc(UserActivity.CREATED_AT)));
return userActivityDao.query(queryForTagData(tagData, criterion, userTableAlias, UserActivity.PROPERTIES, userProperties).orderBy(Order.desc(UserActivity.CREATED_AT))); return userActivityDao.query(queryForTagData(tagData, criterion, null, UserActivity.PROPERTIES, null).orderBy(Order.desc(UserActivity.CREATED_AT)));
} }
public Cursor getActivityAndHistoryForTagData(TagData tagData, Criterion extraCriterion, String userTableAlias, Property<?>...userProperties) { public Cursor getActivityAndHistoryForTagData(TagData tagData, Criterion extraCriterion, String userTableAlias, Property<?>...userProperties) {
@ -194,7 +186,6 @@ public class TagDataService {
.from(History.TABLE); .from(History.TABLE);
Query resultQuery = activityQuery.union(historyQuery).orderBy(Order.desc("1")); //$NON-NLS-1$ Query resultQuery = activityQuery.union(historyQuery).orderBy(Order.desc("1")); //$NON-NLS-1$
System.err.println("QUERY: " + resultQuery);
return userActivityDao.query(resultQuery); return userActivityDao.query(resultQuery);
} }

Loading…
Cancel
Save