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);
}
public <T> Criterion in(final T[] value) {
public <T> Criterion in(final Iterable<T> value) {
final Field field = this;
return new Criterion(Operator.in) {

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

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

@ -27,6 +27,7 @@ import org.tasks.preferences.Preferences;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class SubtasksHelper {
@ -103,7 +104,7 @@ public class SubtasksHelper {
}
@Deprecated
private static Long[] getIdArray(String serializedTree) {
private static List<Long> getIdList(String serializedTree) {
ArrayList<Long> ids = new ArrayList<>();
String[] digitsOnly = serializedTree.split("[\\[\\],\\s]"); // Split on [ ] , or whitespace chars
for (String idString : digitsOnly) {
@ -115,7 +116,7 @@ public class SubtasksHelper {
log.error(e.getMessage(), e);
}
}
return ids.toArray(new Long[ids.size()]);
return ids;
}
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
*/
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);
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<>();
TodorooCursor<Task> tasks = taskService.query(Query.select(keyProperty, valueProperty).where(keyProperty.in(keys)));
try {

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

Loading…
Cancel
Save