Prechádzať zdrojové kódy

refs #1004: Fixed bad ports of set<string> -> array to set<string> -> object.

http://source.rd.rcg.local/trac/eagle6/changeset/1355/Eagle6_SVN
Jared Hall 12 rokov pred
rodič
commit
5cb70de505

+ 2 - 4
lib/pipeline/documentSources/ProjectDocumentSource.js

@@ -17,10 +17,9 @@ var ProjectDocumentSource = module.exports = (function(){
 	}, base = require('./DocumentSource'), proto = klass.prototype = Object.create(base.prototype, {constructor:{value:klass}});
 
 	// DEPENDENCIES
+	var Expression = require('../expressions/Expression');
 	var ObjectExpression = require('../expressions/ObjectExpression');
 	var Value = require('../Value');
-	var Expression = require('../expressions/Expression');
-
 
 	/**
 	 *	Returns the name of project
@@ -93,8 +92,7 @@ var ProjectDocumentSource = module.exports = (function(){
 	 * @return
 	**/
 	proto.sourceToJson = function sourceToJson(builder, explain) {
-		var insides = {};
-		this.EO.documentToJSON(insides, true);
+		var insides = this.EO.toJson(true);
         builder[this.getSourceName()] = insides;
     };
 

+ 1 - 1
lib/pipeline/expressions/FieldPathExpression.js

@@ -75,7 +75,7 @@ var FieldPathExpression = module.exports = (function(){
 	};
 
 	proto.addDependencies = function addDependencies(deps){
-		deps.push(this.path.getPath());
+		deps[this.path.getPath()] = 1;
 		return deps;
 	};
 

+ 4 - 1
lib/pipeline/expressions/ObjectExpression.js

@@ -100,7 +100,10 @@ var ObjectExpression = module.exports = (function(){
 				depsSet[pathStr + key] = 1;
 			}
 		}
-		Array.prototype.push.apply(deps, Object.getOwnPropertyNames(depsSet));
+		//Array.prototype.push.apply(deps, Object.getOwnPropertyNames(depsSet));
+		for(key in depsSet) {
+			deps[key] = 1;
+		}
 		return deps;	// NOTE: added to munge as a convenience
 	};
 

+ 5 - 17
test/lib/pipeline/documentSources/ProjectDocumentSource.js

@@ -92,7 +92,6 @@ module.exports = {
                 assert.ok(pds.advance());
             },
 
-            /*
             "can retrieve values from the project when advance is first function call": function testAdvanceFirst() {
                 var cwc = new CursorDocumentSource.CursorWithContext();
                 var input = [{_id: 0, a: 1}, {_id: 1, a: 2}];
@@ -103,14 +102,12 @@ module.exports = {
                 assert.ok(pds.advance()); 
                 assert.equal(2, pds.getCurrent().a);
             }
-            */
 
         },
 
         /* TODO : copy mongo tests, they will probably be more involved */
         "#getCurrent()": {
 
-            /*
             "should work when getCurrent is the first function call": function getCurrentCalledFirst() {
                 var cwc = new CursorDocumentSource.CursorWithContext();
                 var input = [{_id: 0, a: 1}];
@@ -121,13 +118,11 @@ module.exports = {
                 assert.ok(pds.getCurrent()); 
                 assert.equal(1, pds.getCurrent().a);                
             }
-            */
 
         },
 
         "combined": {
 
-            /*
             "The a and c.d fields are included but the b field is not": function testFullProject1() {
                 var cwc = new CursorDocumentSource.CursorWithContext();
                 var input = [{_id:0,a:1,b:1,c:{d:1}}];
@@ -152,27 +147,22 @@ module.exports = {
                 assert.ok(!pds.eof());
                 assert.equal(1, pds.getCurrent().a);  
                 assert.ok(!pds.getCurrent().b);
-                assert.equal(0, pds.getCurrent()._id);
-                assert.equal(1, pds.getCurrent().c.d); 
                 assert.ok(pds.advance());
                 assert.ok(!pds.eof());
                 assert.equal(3, pds.getCurrent().a); 
                 assert.ok(!pds.getCurrent().b);
-                assert.ok(!project.advance());
+                assert.ok(!pds.advance());
                 assertExhausted(pds);
             }
-            */
         },
 
         "#optimize()": {
             
-            /*
             "Optimize the projection": function optimizeProject() {
                 var pds = createProject({a:{$and: [true]}});
                 pds.optimize();
                 checkJsonRepresentation(pds, {$project:{a:{$const:true}}});
             }
-            */
 
         },
 
@@ -210,21 +200,19 @@ module.exports = {
 
         "#getDependencies()": {
 
-            /*
-            "should return a new ProjectDocumentSource object from an input object": function createTest(){
+            "should properly detect dependencies in project": function testGetDependencies(){
                 var cwc = new CursorDocumentSource.CursorWithContext();
-                var input = [{a:true,x:'$b',y:{$and:['$c','$d']}}];
+                var input = {a:true,x:'$b',y:{$and:['$c','$d']}};
                 var pds = createProject(input);
                 var dependencies = {};
-                assert.equals(DocumentSource.GetDepsReturn.EXHAUSTIVE, pds.getDependencies(dependencies));
-                assert.equals(5, dependencies.length);
+                assert.equal(DocumentSource.GetDepsReturn.EXHAUSTIVE, pds.getDependencies(dependencies));
+                assert.equal(5, Object.keys(dependencies).length);
                 assert.ok(dependencies._id);
                 assert.ok(dependencies.a);
                 assert.ok(dependencies.b);
                 assert.ok(dependencies.c);
                 assert.ok(dependencies.d);
             }
-            */
 
         }
 

+ 4 - 4
test/lib/pipeline/documentSources/SortDocumentSource.js

@@ -334,11 +334,11 @@ module.exports = {
 				var sds = new SortDocumentSource();
 				sds.addKey("a", true);
 				sds.addKey("b.c", false);
-				var deps = [];
+				var deps = {};
 				assert.equal("SEE_NEXT", sds.getDependencies(deps));
-				assert.equal(2, deps.length);
-				assert.equal(1, deps.filter(function(val) { return "a" == val; }).length);
-				assert.equal(1, deps.filter(function(val) { return "a" == val; }).length);
+				assert.equal(2, Object.keys(deps).length);
+				assert.ok(deps.a);
+				assert.ok(deps["b.c"]);
 			}
 		}
 

+ 3 - 3
test/lib/pipeline/expressions/CoerceToBoolExpression.js

@@ -35,9 +35,9 @@ module.exports = {
 
 			"should forward dependencies of nested expression": function testDependencies(){
 				var expr = new CoerceToBoolExpression(new FieldPathExpression('a.b')),
-					deps = expr.addDependencies([]);
-				assert.equal(deps.length, 1);
-				assert.equal(deps[0], 'a.b');
+					deps = expr.addDependencies({});
+				assert.equal(Object.keys(deps).length, 1);
+				assert.ok(deps['a.b']);
 			}
 
 		},

+ 5 - 3
test/lib/pipeline/expressions/FieldPathExpression.js

@@ -107,9 +107,11 @@ module.exports = {
 		"#addDependencies()": {
 
 			"should return the field path itself as a dependency": function testDependencies(){
-				var deps = new FieldPathExpression('a.b').addDependencies([]);
-				assert.strictEqual(deps.length, 1);
-				assert.strictEqual(deps[0], 'a.b');
+				var deps = {};
+				var fpe = new FieldPathExpression('a.b');
+				fpe.addDependencies(deps);
+				assert.strictEqual(Object.keys(deps).length, 1);
+				assert.ok(deps['a.b']);
 			}
 
 		},

+ 3 - 3
test/lib/pipeline/expressions/FieldRangeExpression.js

@@ -117,9 +117,9 @@ module.exports = {
 		"#addDependencies()": {
 
 			"should return the range's path as a dependency": function testDependencies(){
-				var deps = new FieldRangeExpression(new FieldPathExpression("a.b.c"), "$eq", 0).addDependencies([]);
-				assert.strictEqual(deps.length, 1);
-				assert.strictEqual(deps[0], "a.b.c");
+				var deps = new FieldRangeExpression(new FieldPathExpression("a.b.c"), "$eq", 0).addDependencies({});
+				assert.strictEqual(Object.keys(deps).length, 1);
+				assert.ok(deps['a.b.c']);
 			}
 
 		},

+ 39 - 38
test/lib/pipeline/expressions/ObjectExpression.js

@@ -6,7 +6,8 @@ var assert = require("assert"),
 
 
 function assertEqualJson(actual, expected, message){
-	assert.strictEqual(message + ":  " + JSON.stringify(actual), message + ":  " + JSON.stringify(expected));
+	//assert.strictEqual(message + ":  " + JSON.stringify(actual), message + ":  " + JSON.stringify(expected));
+	assert.deepEqual(actual, expected, message);
 }
 
 /// An assertion for `ObjectExpression` instances based on Mongo's `ExpectedResultBase` class
@@ -25,8 +26,8 @@ function assertExpectedResult(args) {
 	// run implementation
 	var result = args.expression.addToDocument({}, args.source, args.source);
 	assertEqualJson(result, args.expected, "unexpected results");
-	var dependencies = args.expression.addDependencies([], [/*FAKING: includePath=true*/]);
-	dependencies.sort(), args.expectedDependencies.sort();	// NOTE: this is a minor hack added for munge because I'm pretty sure order doesn't matter for this anyhow
+	var dependencies = args.expression.addDependencies({}, [/*FAKING: includePath=true*/]);
+	//dependencies.sort(), args.expectedDependencies.sort();	// NOTE: this is a minor hack added for munge because I'm pretty sure order doesn't matter for this anyhow
 	assertEqualJson(dependencies, args.expectedDependencies, "unexpected dependencies");
 	assertEqualJson(args.expression.toJson(true), args.expectedJsonRepresentation, "unexpected JSON representation");
 	assertEqualJson(args.expression.getIsSimple(), args.expectedIsSimple, "unexpected isSimple status");
@@ -53,20 +54,20 @@ module.exports = {
 				/** Dependencies for non inclusion expressions. */
 				var expr = new ObjectExpression();
 				expr.addField("a", new ConstantExpression(5));
-				assertEqualJson(expr.addDependencies([], [/*FAKING: includePath=true*/]), ["_id"], "unexpected dependencies (including _id)");
-				assertEqualJson(expr.addDependencies([]), [], "unexpected dependencies (excluding _id)");
+				assertEqualJson(expr.addDependencies({}, [/*FAKING: includePath=true*/]), {"_id":1}, "unexpected dependencies (including _id)");
+				assertEqualJson(expr.addDependencies({}), {}, "unexpected dependencies (excluding _id)");
 				expr.addField("b", new FieldPathExpression("c.d"));
-				assertEqualJson(expr.addDependencies([], [/*FAKING: includePath=true*/]), ["c.d", "_id"], "unexpected dependencies (including _id)");
-				assertEqualJson(expr.addDependencies([]), ["c.d"], "unexpected dependencies (excluding _id)");
+				assertEqualJson(expr.addDependencies({}, [/*FAKING: includePath=true*/]), {"c.d":1, "_id":1}, "unexpected dependencies (including _id)");
+				assertEqualJson(expr.addDependencies({}), {"c.d":1}, "unexpected dependencies (excluding _id)");
 			},
 
 			"should be able to get dependencies for inclusion expressions": function testInclusionDependencies(){
 				/** Dependencies for inclusion expressions. */
 				var expr = new ObjectExpression();
 				expr.includePath( "a" );
-				assertEqualJson(expr.addDependencies([], [/*FAKING: includePath=true*/]), ["_id", "a"], "unexpected dependencies (including _id)");
+				assertEqualJson(expr.addDependencies({}, [/*FAKING: includePath=true*/]), {"_id":1, "a":1}, "unexpected dependencies (including _id)");
 				assert.throws(function(){
-					expr.addDependencies([]);
+					expr.addDependencies({});
 				}, Error);
 			},
 
@@ -107,7 +108,7 @@ module.exports = {
 				assertExpectedResult({
 					expression: expr,
 					expected: {"_id":0},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {},
 				});
 			},
@@ -119,7 +120,7 @@ module.exports = {
 				assertExpectedResult({
 					expression: expr,
 					expected: {"_id":0, "a":1},
-					expectedDependencies: ["_id", "a"],
+					expectedDependencies: {"_id":1, "a":1},
 					expectedJsonRepresentation: {"a":true},
 				});
 			},
@@ -132,7 +133,7 @@ module.exports = {
 					source: {"_id":0, "b":2},
 					expression: expr,
 					expected: {"_id":0},
-					expectedDependencies: ["_id", "a"],
+					expectedDependencies: {"_id":1, "a":1},
 					expectedJsonRepresentation: {"a":true},
 				});
 			},
@@ -144,7 +145,7 @@ module.exports = {
 				assertExpectedResult({
 					expression: expr,
 					expected: {"_id":0},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"_id":true},
 				});
 			},
@@ -157,7 +158,7 @@ module.exports = {
 				assertExpectedResult({
 					expression: expr,
 					expected: {"b":2},
-					expectedDependencies: ["b"],
+					expectedDependencies: {"b":1},
 					expectedJsonRepresentation: {"_id":false, "b":true},
 				});
 			},
@@ -170,7 +171,7 @@ module.exports = {
 				assertExpectedResult({
 					expression: expr,
 					get expected() { return this.source; },
-					expectedDependencies: ["_id", "a", "b"],
+					expectedDependencies: {"_id":1, "a":1, "b":1},
 					expectedJsonRepresentation: {"b":true, "a":true},
 				});
 			},
@@ -183,7 +184,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "b":5, "c":6}, "z":2 },
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":5} },
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 			},
@@ -197,7 +198,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "b":5, "c":6}, "z":2 },
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":5, "c":6} },
-					expectedDependencies: ["_id", "a.b", "a.c"],
+					expectedDependencies: {"_id":1, "a.b":1, "a.c":1},
 					expectedJsonRepresentation: {"a":{ "b":true, "c":true} },
 				});
 			},
@@ -211,7 +212,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "b":5 }, "c":{"d":6} },
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":5}, "c":{"d":6} },
-					expectedDependencies: ["_id", "a.b", "c.d"],
+					expectedDependencies: {"_id":1, "a.b":1, "c.d":1},
 					expectedJsonRepresentation: {"a":{"b":true}, "c":{"d":true} }
 				});
 			},
@@ -224,7 +225,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "c":6}, "z":2 },
 					expression: expr,
 					expected: {"_id":0, "a":{} },
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 			},
@@ -237,7 +238,7 @@ module.exports = {
 					source: {"_id":0, "a":2, "z":2},
 					expression: expr,
 					expected: {"_id":0},
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 			},
@@ -250,7 +251,7 @@ module.exports = {
 					source: {_id:0,a:[{b:5,c:6},{b:2,c:9},{c:7},[],2],z:1},
 					expression: expr,
 					expected: {_id:0,a:[{b:5},{b:2},{}]},
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 			},
@@ -263,7 +264,7 @@ module.exports = {
 					source: {"_id":0, "a":{ "_id":1, "b":1} },
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":1} },
-					expectedDependencies: ["_id", "a.b"],
+					expectedDependencies: {"_id":1, "a.b":1},
 					expectedJsonRepresentation: {"a":{ "b":true} },
 				});
 			},
@@ -276,7 +277,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":5},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a":{ "$const":5} },
 					expectedIsSimple: false
 				});
@@ -290,7 +291,7 @@ module.exports = {
 					source: {"_id":0, "a":99},
 					expression: expr,
 					expected: {"_id": 0, "a": 5},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a": {"$const": 5}},
 					expectedIsSimple: false
 				});
@@ -304,7 +305,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{$const:undefined}},
 					expectedIsSimple: false
 				});
@@ -318,7 +319,7 @@ module.exports = {
 					source: {"_id":0, "a":99},
 					expression: expr,
 					expected: {"_id":0, "a":5},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a":{"$const":5}},
 					expectedIsSimple: false
 				});
@@ -332,7 +333,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":null},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a":{"$const":null}},
 					expectedIsSimple: false
 				});
@@ -346,7 +347,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":{"b":5}},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {"a":{"b":{"$const":5}}},
 					expectedIsSimple: false
 				});
@@ -360,7 +361,7 @@ module.exports = {
 					source: {"_id":0, "x":4},
 					expression: expr,
 					expected: {"_id":0, "a":4},
-					expectedDependencies: ["_id", "x"],
+					expectedDependencies: {"_id":1, "x":1},
 					expectedJsonRepresentation: {"a":"$x"},
 					expectedIsSimple: false
 				});
@@ -374,7 +375,7 @@ module.exports = {
 					source: {"_id":0, "x":{"y":4}},
 					expression: expr,
 					expected: {"_id":0, "a":{"b":4}},
-					expectedDependencies: ["_id", "x.y"],
+					expectedDependencies: {"_id":1, "x.y":1},
 					expectedJsonRepresentation: {"a":{"b":"$x.y"}},
 					expectedIsSimple: false
 				});
@@ -391,7 +392,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:undefined}}},
 					expectedIsSimple: false
 				});
@@ -408,7 +409,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6}}},
 					expectedIsSimple: false
 				});
@@ -423,7 +424,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedIsSimple: false
 				});
@@ -440,7 +441,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedIsSimple: false
 				});
@@ -457,7 +458,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedIsSimple: false
 				});
@@ -476,7 +477,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "c":7} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},c:{$const:7}}},
 					expectedIsSimple: false
 				});
@@ -495,7 +496,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":6, "d":7, "c":8} },
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{$const:6},d:{$const:7},c:{$const:8}}},
 					expectedIsSimple: false
 				});
@@ -514,7 +515,7 @@ module.exports = {
 					source: {"_id":0},
 					expression: expr,
 					expected: {"_id":0, "a":{ "b":{ "c":6, "d":7}}},
-					expectedDependencies: ["_id"],
+					expectedDependencies: {"_id":1},
 					expectedJsonRepresentation: {a:{b:{c:{$const:6},d:{$const:7}}}},
 					expectedIsSimple: false
 				});