Remove array conversions from in criterion

pull/189/head
Alex Baker 10 years ago
parent 7a17119020
commit c2d1b02761

@ -78,7 +78,7 @@ public class Field extends DBObject<Field> {
return UnaryCriterion.like(this, value, escape); return UnaryCriterion.like(this, value, escape);
} }
public <T> Criterion in(final T[] value) { public <T> Criterion in(final Iterable<T> value) {
final Field field = this; final Field field = this;
return new Criterion(Operator.in) { return new Criterion(Operator.in) {

@ -126,8 +126,7 @@ public final class GtasksMetadataService extends SyncMetadataService<GtasksTaskC
taskIds.remove(metadata.get(Metadata.TASK)); taskIds.remove(metadata.get(Metadata.TASK));
} }
return taskDao.query(Query.select(Task.ID).where( return taskDao.query(Query.select(Task.ID).where(Task.ID.in(taskIds)));
Task.ID.in(taskIds.toArray(new Long[taskIds.size()]))));
} }
// --- list iterating helpers // --- list iterating helpers

@ -279,10 +279,9 @@ public class GtasksSyncV2Provider extends SyncV2Provider {
storeObjectDao.persist(list); storeObjectDao.persist(list);
if(lastSyncDate == 0 && !isImport) { if(lastSyncDate == 0 && !isImport) {
Long[] localIdArray = localIds.toArray(new Long[localIds.size()]);
Criterion delete = Criterion.and(Metadata.KEY.eq(GtasksMetadata.METADATA_KEY), Criterion delete = Criterion.and(Metadata.KEY.eq(GtasksMetadata.METADATA_KEY),
GtasksMetadata.LIST_ID.eq(listId), GtasksMetadata.LIST_ID.eq(listId),
Criterion.not(Metadata.TASK.in(localIdArray))); Criterion.not(Metadata.TASK.in(localIds)));
taskDeleter.deleteWhere( taskDeleter.deleteWhere(
Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE). Task.ID.in(Query.select(Metadata.TASK).from(Metadata.TABLE).
where(delete))); where(delete)));

@ -27,6 +27,7 @@ import org.tasks.preferences.Preferences;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
public class SubtasksHelper { public class SubtasksHelper {
@ -103,7 +104,7 @@ public class SubtasksHelper {
} }
@Deprecated @Deprecated
private static Long[] getIdArray(String serializedTree) { private static List<Long> getIdList(String serializedTree) {
ArrayList<Long> ids = new ArrayList<>(); ArrayList<Long> ids = new ArrayList<>();
String[] digitsOnly = serializedTree.split("[\\[\\],\\s]"); // Split on [ ] , or whitespace chars String[] digitsOnly = serializedTree.split("[\\[\\],\\s]"); // Split on [ ] , or whitespace chars
for (String idString : digitsOnly) { for (String idString : digitsOnly) {
@ -115,7 +116,7 @@ public class SubtasksHelper {
log.error(e.getMessage(), e); log.error(e.getMessage(), e);
} }
} }
return ids.toArray(new Long[ids.size()]); return ids;
} }
public static String[] getStringIdArray(String serializedTree) { public static String[] getStringIdArray(String serializedTree) {
@ -133,7 +134,7 @@ public class SubtasksHelper {
* Takes a subtasks string containing local ids and remaps it to one containing UUIDs * Takes a subtasks string containing local ids and remaps it to one containing UUIDs
*/ */
public static String convertTreeToRemoteIds(TaskService taskService, String localTree) { public static String convertTreeToRemoteIds(TaskService taskService, String localTree) {
Long[] localIds = getIdArray(localTree); List<Long> localIds = getIdList(localTree);
HashMap<Long, String> idMap = getIdMap(taskService, localIds, Task.ID, Task.UUID); HashMap<Long, String> idMap = getIdMap(taskService, localIds, Task.ID, Task.UUID);
idMap.put(-1L, "-1"); //$NON-NLS-1$ idMap.put(-1L, "-1"); //$NON-NLS-1$
@ -178,7 +179,7 @@ public class SubtasksHelper {
}); });
} }
private static <A, B> HashMap<A, B> getIdMap(TaskService taskService, A[] keys, Property<A> keyProperty, Property<B> valueProperty) { private static <A, B> HashMap<A, B> getIdMap(TaskService taskService, Iterable<A> keys, Property<A> keyProperty, Property<B> valueProperty) {
HashMap<A, B> map = new HashMap<>(); HashMap<A, B> map = new HashMap<>();
TodorooCursor<Task> tasks = taskService.query(Query.select(keyProperty, valueProperty).where(keyProperty.in(keys))); TodorooCursor<Task> tasks = taskService.query(Query.select(keyProperty, valueProperty).where(keyProperty.in(keys)));
try { try {

@ -105,10 +105,7 @@ abstract public class SyncMetadataService<TYPE extends SyncContainer> {
try { try {
ArrayList<Long> matchingRows = new ArrayList<>(); ArrayList<Long> matchingRows = new ArrayList<>();
joinRows(tasks, metadata, matchingRows, both); joinRows(tasks, metadata, matchingRows, both);
return taskDao.query(Query.select(properties).where(Task.ID.in(matchingRows)));
return
taskDao.query(Query.select(properties).where(Task.ID.in(
matchingRows.toArray(new Long[matchingRows.size()]))));
} finally { } finally {
metadata.close(); metadata.close();
} }

Loading…
Cancel
Save