fixing equals on array columns in live query (#3089)

This commit is contained in:
David Poetzsch-Heffter
2016-11-25 02:42:53 +01:00
committed by Florent Vilmart
parent d800ff85e2
commit 8f1c1f419b
2 changed files with 39 additions and 15 deletions

View File

@@ -112,6 +112,19 @@ function matchesQuery(object: any, query: any): boolean {
return true;
}
function equalObjectsGeneric(obj, compareTo, eqlFn) {
if (Array.isArray(obj)) {
for (var i = 0; i < obj.length; i++) {
if (eqlFn(obj[i], compareTo)) {
return true;
}
}
return false;
}
return eqlFn(obj, compareTo);
}
/**
* Determines whether an object matches a single key's constraints
@@ -143,22 +156,16 @@ function matchesKeyConstraints(object, key, constraints) {
var compareTo;
if (constraints.__type) {
if (constraints.__type === 'Pointer') {
return (
typeof object[key] !== 'undefined' &&
constraints.className === object[key].className &&
constraints.objectId === object[key].objectId
);
return equalObjectsGeneric(object[key], constraints, function(obj, ptr) {
return (
typeof obj !== 'undefined' &&
ptr.className === obj.className &&
ptr.objectId === obj.objectId
);
});
}
compareTo = Parse._decode(key, constraints);
if (Array.isArray(object[key])) {
for (i = 0; i < object[key].length; i++) {
if (equalObjects(object[key][i], compareTo)) {
return true;
}
}
return false;
}
return equalObjects(object[key], compareTo);
return equalObjectsGeneric(object[key], Parse._decode(key, constraints), equalObjects);
}
// More complex cases
for (var condition in constraints) {