serialize Results like other types, use common method rpc call for objects()

This commit is contained in:
Ari Lazier 2015-10-08 11:04:50 -06:00
parent ed3cf01432
commit afa974ccc6
4 changed files with 13 additions and 30 deletions

View File

@ -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<realm::Results *>((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<realm::Results *>(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);

View File

@ -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() {

View File

@ -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);

View File

@ -16,4 +16,6 @@ let types = {};
types[type] = 'PropTypes' + type;
});
types['RESULTS'] = 'PrivateTypesRESULTS';
module.exports = Object.freeze(types);