| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 | 
							- "use strict";
 
- var PipelineD = module.exports = (function(){
 
- 	// CONSTRUCTOR
 
- 	var klass = function PipelineD(){
 
- 		if(this.constructor == PipelineD) throw new Error("Never create instances of this! Use the static helpers only.");
 
- 	}, base = Object, proto = klass.prototype = Object.create(base.prototype, {constructor:{value:klass}});
 
- 	var DocumentSource = require('./documentSources/DocumentSource'),
 
- 		CursorDocumentSource = require('./documentSources/CursorDocumentSource'),
 
- 		Cursor = require('../Cursor');
 
- 		
 
- 	/**
 
- 	 * Create a Cursor wrapped in a DocumentSourceCursor, which is suitable
 
- 	 * to be the first source for a pipeline to begin with.  This source
 
- 	 * will feed the execution of the pipeline.
 
- 	 * 
 
- 	 * <<Note: Below does not happen in munge>>
 
- 	 * This method looks for early pipeline stages that can be folded into
 
- 	 * the underlying cursor, and when a cursor can absorb those, they
 
- 	 * are removed from the head of the pipeline.  For example, an
 
- 	 * early match can be removed and replaced with a Cursor that will
 
- 	 * do an index scan.
 
- 	 * 
 
- 	 * @param {Pipeline}	pPipeline the logical "this" for this operation
 
- 	 * @param {Array}	db the data we are going to be munging
 
- 	 * @returns {CursorDocumentSource} the cursor that was created
 
- 	**/
 
- 	klass.prepareCursorSource = function prepareCursorSource(pPipeline, db){
 
- 	
 
-         var sources = pPipeline.sourceVector;
 
- 		//note that this is a deviation from the mongo implementation to facilitate pipeline reuse
 
- 		sources.forEach(function(source){
 
- 			source.reset();
 
- 			source.pSource = null;
 
- 		});
 
- 		//TODO: should this go earlier in the execution so that we dont need to do it every time?
 
-         var projection = {};
 
-         var deps = [];
 
-         var status = DocumentSource.GetDepsReturn.SEE_NEXT;
 
-         for (var i=0; i < sources.length && status == DocumentSource.GetDepsReturn.SEE_NEXT; i++) {
 
-             status = sources[i].getDependencies(deps);
 
-         }
 
-         if (status == DocumentSource.GetDepsReturn.EXHAUSTIVE) {
 
-             projection = DocumentSource.depsToProjection(deps);
 
-         }
 
-         var cursorWithContext = new CursorDocumentSource.CursorWithContext( );
 
-         cursorWithContext._cursor = new Cursor( db );
 
-         /* wrap the cursor with a DocumentSource and return that */
 
-         var source = new CursorDocumentSource( cursorWithContext );
 
-         
 
-         if (projection && Object.keys(projection).length)
 
-             source.setProjection(projection);
 
-         return source;
 
- 	};
 
- 	return klass;
 
- })();
 
 
  |