diff --git a/ReactNative/RealmRPC.mm b/ReactNative/RealmRPC.mm index 6e4b3580..bf42f946 100644 --- a/ReactNative/RealmRPC.mm +++ b/ReactNative/RealmRPC.mm @@ -112,24 +112,6 @@ static JSGlobalContextRef s_context; s_objects.erase(oid); return @{}; }; - s_requests["/get_objects"] = [=](NSDictionary *dict) { - RPCObjectID realmId = [dict[@"realmId"] longValue]; - - JSValueRef arguments[2]; - long argumentCount = 1; - arguments[0] = RJSValueForString(s_context, [dict[@"type"] UTF8String]); - - NSString *query = dict[@"predicate"]; - if (query) { - arguments[1] = RJSValueForString(s_context, query.UTF8String); - } - - JSValueRef exception = NULL; - JSValueRef results = RealmObjects(s_context, NULL, s_objects[realmId], argumentCount, arguments, &exception); - RPCObjectID resultsId = [self storeObject:(JSObjectRef)results]; - size_t size = RJSGetInternal((JSObjectRef)results)->size(); - return @{@"result": @{@"resultsId": @(resultsId), @"size": @(size)}}; - }; s_requests["/get_results_size"] = [=](NSDictionary *dict) { RPCObjectID resultsId = [dict[@"resultsId"] longValue]; @@ -273,6 +255,15 @@ static JSGlobalContextRef s_context; @"schema": [self objectSchemaToJSONObject:array->object_schema] }; } + else if (JSValueIsObjectOfClass(s_context, value, RJSResultsClass())) { + realm::Results *results = RJSGetInternal(jsObject); + return @{ + @"type": @"PrivateTypesRESULTS", + @"resultsId": @(oid), + @"size": @(results->size()), + @"schema": [self objectSchemaToJSONObject:results->object_schema] + }; + } else if (RJSIsValueArray(s_context, value)) { JSObjectRef jsObject = JSValueToObject(s_context, value, NULL); size_t length = RJSValidatedArrayLength(s_context, jsObject); diff --git a/lib/realm.js b/lib/realm.js index b22cc875..ab1fe3f1 100644 --- a/lib/realm.js +++ b/lib/realm.js @@ -13,6 +13,7 @@ let realmKey = util.realmKey; rpc.registerTypeConverter(types.DATE, (_, info) => new Date(info.value)); rpc.registerTypeConverter(types.LIST, lists.create); rpc.registerTypeConverter(types.OBJECT, objects.create); +rpc.registerTypeConverter(types.RESULTS, results.create); class Realm { constructor(config) { @@ -38,13 +39,6 @@ class Realm { // TODO } - objects(type, predicate) { - let realmId = this[realmKey]; - let info = rpc.getObjects(realmId, type, predicate); - - return results.create(realmId, info); - } - write(callback) { if (typeof callback != 'function') throw new TypeError('Realm.write() must be passed a function!'); @@ -66,6 +60,7 @@ class Realm { 'create', 'delete', 'deleteAll', + 'objects', ].forEach(function(name) { Object.defineProperty(Realm.prototype, name, { value: function() { diff --git a/lib/rpc.js b/lib/rpc.js index 9412da7b..d0fb1185 100644 --- a/lib/rpc.js +++ b/lib/rpc.js @@ -21,7 +21,6 @@ exports.registerTypeConverter = registerTypeConverter; exports.createRealm = createRealm; exports.callRealmMethod = callRealmMethod; -exports.getObjects = getObjects; exports.getObjectProperty = getObjectProperty; exports.setObjectProperty = setObjectProperty; @@ -55,10 +54,6 @@ function callRealmMethod(realmId, name, args) { return deserialize(realmId, result); } -function getObjects(realmId, type, predicate) { - return sendRequest('get_objects', {realmId, type, predicate}); -} - function getObjectProperty(realmId, objectId, name) { let result = sendRequest('get_property', {realmId, objectId, name}); return deserialize(realmId, result); diff --git a/lib/types.js b/lib/types.js index 17fd5f28..51b159f5 100644 --- a/lib/types.js +++ b/lib/types.js @@ -16,4 +16,6 @@ let types = {}; types[type] = 'PropTypes' + type; }); +types['RESULTS'] = 'PrivateTypesRESULTS'; + module.exports = Object.freeze(types);