|
|
@@ -185,47 +185,6 @@ proto.getDependencies = function getDependencies(deps) {
|
|
|
return klass.GetDepsReturn.NOT_SUPPORTED;
|
|
|
};
|
|
|
|
|
|
-/**
|
|
|
- * This takes dependencies from getDependencies and
|
|
|
- * returns a projection that includes all of them
|
|
|
- *
|
|
|
- * @method depsToProjection
|
|
|
- * @param {Object} deps set (unique array) of strings
|
|
|
- * @returns {Object} JSONObj
|
|
|
- **/
|
|
|
-klass.depsToProjection = function depsToProjection(deps) {
|
|
|
- var needId = false,
|
|
|
- bb = {};
|
|
|
- if (deps._id === undefined)
|
|
|
- bb._id = 0;
|
|
|
-
|
|
|
- var last = "";
|
|
|
- Object.keys(deps).sort().forEach(function(it){
|
|
|
- if (it.indexOf('_id') === 0 && (it.length === 3 || it[3] === '.')) {
|
|
|
- needId = true;
|
|
|
- return;
|
|
|
- } else {
|
|
|
- if (last !== "" && it.slice(0, last.length) === last){
|
|
|
- // we are including a parent of *it so we don't need to
|
|
|
- // include this field explicitly. In fact, due to
|
|
|
- // SERVER-6527 if we included this field, the parent
|
|
|
- // wouldn't be fully included.
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- last = it + ".";
|
|
|
- bb[it] = 1;
|
|
|
- });
|
|
|
-
|
|
|
- if (needId) // we are explicit either way
|
|
|
- bb._id = 1;
|
|
|
- else
|
|
|
- bb._id = 0;
|
|
|
-
|
|
|
-
|
|
|
- return bb;
|
|
|
-};
|
|
|
-
|
|
|
proto._serialize = function _serialize(explain) {
|
|
|
throw new Error("not implemented");
|
|
|
};
|
|
|
@@ -237,23 +196,6 @@ proto.serializeToArray = function serializeToArray(array, explain) {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
-klass.parseDeps = function parseDeps(deps) {
|
|
|
- var md = {};
|
|
|
-
|
|
|
- var last,
|
|
|
- depKeys = Object.keys(deps);
|
|
|
- for (var i = 0; i < depKeys.length; i++) {
|
|
|
- var it = depKeys[i],
|
|
|
- value = deps[it];
|
|
|
-
|
|
|
- if (!last && it.indexOf(last) >= 0)
|
|
|
- continue;
|
|
|
- last = it + '.';
|
|
|
- md[it] = true;
|
|
|
- }
|
|
|
- return md;
|
|
|
-};
|
|
|
-
|
|
|
/**
|
|
|
* A function compatible as a getNext for document sources.
|
|
|
* Does nothing except pass the documents through. To use,
|
|
|
@@ -274,59 +216,3 @@ klass.GET_NEXT_PASS_THROUGH = function GET_NEXT_PASS_THROUGH(callback) {
|
|
|
});
|
|
|
return out; // For the sync people in da house
|
|
|
};
|
|
|
-
|
|
|
-klass.documentFromJsonWithDeps = function documentFromJsonWithDeps(bson, neededFields) {
|
|
|
- var arrayHelper = function(bson, neededFields) {
|
|
|
- var values = [];
|
|
|
-
|
|
|
- var bsonKeys = Object.keys(bson);
|
|
|
- for (var i = 0; i < bsonKeys.length; i++) {
|
|
|
- var key = bsonKeys[i],
|
|
|
- bsonElement = bson[key];
|
|
|
-
|
|
|
- if (bsonElement instanceof Object) {
|
|
|
- var sub = klass.documentFromJsonWithDeps(bsonElement, isNeeded);
|
|
|
- values.push(sub);
|
|
|
- }
|
|
|
-
|
|
|
- if (bsonElement instanceof Array) {
|
|
|
- values.push(arrayHelper(bsonElement, neededFields));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return values;
|
|
|
- };
|
|
|
-
|
|
|
- var md = {};
|
|
|
-
|
|
|
- var bsonKeys = Object.keys(bson);
|
|
|
- for (var i = 0; i < bsonKeys.length; i++) {
|
|
|
- var fieldName = bsonKeys[i],
|
|
|
- bsonElement = bson[fieldName],
|
|
|
- isNeeded = neededFields ? neededFields[fieldName] : null;
|
|
|
-
|
|
|
- if (!isNeeded)
|
|
|
- continue;
|
|
|
-
|
|
|
- if (typeof(isNeeded) === 'boolean') {
|
|
|
- md[fieldName] = bsonElement;
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- if (!isNeeded instanceof Object)
|
|
|
- throw new Error("instanceof should be an instance of Object");
|
|
|
-
|
|
|
- if (bsonElement instanceof Object) {
|
|
|
- var sub = klass.documentFromJsonWithDeps(bsonElement, isNeeded);
|
|
|
-
|
|
|
- md[fieldName] = sub;
|
|
|
- }
|
|
|
-
|
|
|
- if (bsonElement instanceof Array) {
|
|
|
- md[fieldName] = arrayHelper(bsonElement, isNeeded);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return md;
|
|
|
-
|
|
|
-};
|