delete can now take a results object as an argument
This commit is contained in:
parent
3e0a1572f4
commit
df05636e7a
|
@ -19,6 +19,7 @@
|
|||
#import "RJSRealm.hpp"
|
||||
#import "RJSObject.hpp"
|
||||
#import "RJSResults.hpp"
|
||||
#import "RJSArray.hpp"
|
||||
#import "RJSSchema.hpp"
|
||||
|
||||
#import "shared_realm.hpp"
|
||||
|
@ -234,12 +235,18 @@ JSValueRef RealmDelete(JSContextRef ctx, JSObjectRef function, JSObjectRef thisO
|
|||
try {
|
||||
RJSValidateArgumentCount(argumentCount, 1);
|
||||
|
||||
if (RJSIsValueArray(ctx, arguments[0])) {
|
||||
if (RJSIsValueArray(ctx, arguments[0]) ||
|
||||
JSValueIsObjectOfClass(ctx, arguments[0], RJSResultsClass()) ||
|
||||
JSValueIsObjectOfClass(ctx, arguments[0], RJSArrayClass()))
|
||||
{
|
||||
JSObjectRef array = RJSValidatedValueToObject(ctx, arguments[0]);
|
||||
size_t length = RJSValidatedArrayLength(ctx, array);
|
||||
for (size_t i = 0; i < length; i++) {
|
||||
for (long i = length-1; i >= 0; i--) {
|
||||
JSValueRef object = RJSValidatedObjectAtIndex(ctx, array, (unsigned int)i);
|
||||
RealmDelete(ctx, function, thisObject, 1, &object, jsException);
|
||||
if (*jsException) {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -257,7 +264,7 @@ JSValueRef RealmDelete(JSContextRef ctx, JSObjectRef function, JSObjectRef thisO
|
|||
}
|
||||
|
||||
realm::TableRef table = ObjectStore::table_for_object_type(realm->read_group(), object->object_schema.name);
|
||||
table->remove(object->row.get_index());
|
||||
table->move_last_over(object->row.get_index());
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -87,14 +87,12 @@ var RealmTests = {
|
|||
testRealmDelete: function() {
|
||||
var realm = new Realm({schema: [TestObjectSchema]});
|
||||
realm.write(function() {
|
||||
realm.create('TestObject', [1]);
|
||||
realm.create('TestObject', [2]);
|
||||
realm.create('TestObject', [3]);
|
||||
realm.create('TestObject', [4]);
|
||||
for (var i = 0; i < 10; i++) {
|
||||
realm.create('TestObject', [i]);
|
||||
}
|
||||
});
|
||||
|
||||
var objects = realm.objects('TestObject');
|
||||
TestCase.assertEqual(objects.length, 4, 'wrong object count');
|
||||
TestCase.assertThrows(function() {
|
||||
realm.delete(objects[0]);
|
||||
}, "can only delete in a write transaction");
|
||||
|
@ -105,11 +103,20 @@ var RealmTests = {
|
|||
});
|
||||
|
||||
realm.delete(objects[0]);
|
||||
TestCase.assertEqual(objects.length, 3, 'wrong object count');
|
||||
TestCase.assertEqual(objects[0].doubleCol, 2);
|
||||
TestCase.assertEqual(objects.length, 9, 'wrong object count');
|
||||
TestCase.assertEqual(objects[0].doubleCol, 9, "wrong property value");
|
||||
TestCase.assertEqual(objects[1].doubleCol, 1, "wrong property value");
|
||||
|
||||
realm.delete([objects[0], objects[1]]);
|
||||
TestCase.assertEqual(objects.length, 1, 'wrong object count');
|
||||
TestCase.assertEqual(objects.length, 7, 'wrong object count');
|
||||
TestCase.assertEqual(objects[0].doubleCol, 7, "wrong property value");
|
||||
TestCase.assertEqual(objects[1].doubleCol, 8, "wrong property value");
|
||||
|
||||
var threeObjects = realm.objects('TestObject', "doubleCol < 5");
|
||||
TestCase.assertEqual(threeObjects.length, 3, "wrong results count");
|
||||
realm.delete(threeObjects);
|
||||
TestCase.assertEqual(objects.length, 4, 'wrong object count');
|
||||
TestCase.assertEqual(threeObjects.length, 0, 'threeObject should have been deleted');
|
||||
});
|
||||
},
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ var TestUtil = {
|
|||
var TestCase = {
|
||||
assertEqual: function() {
|
||||
if (arguments[0] !== arguments[1]) {
|
||||
var message = "'" + arguments[0] + "' does not equal '" + arguments[1] + "'";
|
||||
var message = "'" + arguments[0] + "' does not equal expected value '" + arguments[1] + "'";
|
||||
if (arguments.length == 3) {
|
||||
message = arguments[2] + "\n" + message;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue