| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- "use strict";
- /**
- * This class represents the Variables that are defined in an Expression tree.
- *
- * All copies from a given instance share enough information to ensure unique Ids are assigned
- * and to propagate back to the original instance enough information to correctly construct a
- * Variables instance.
- *
- * @class VariablesParseState
- * @namespace mungedb-aggregate.pipeline.expressions
- * @module mungedb-aggregate
- * @constructor
- */
- var Variables = require("./Variables"),
- VariablesIdGenerator = require("./VariablesIdGenerator");
- var VariablesParseState = module.exports = function VariablesParseState(idGenerator){
- if (!(idGenerator instanceof VariablesIdGenerator)) throw new Error("idGenerator is required and must be of type VariablesIdGenerator");
- this._idGenerator = idGenerator;
- this._variables = {};
- }, klass = VariablesParseState, proto = klass.prototype;
- /**
- * Assigns a named variable a unique Id. This differs from all other variables, even
- * others with the same name.
- *
- * The special variables ROOT and CURRENT are always implicitly defined with CURRENT
- * equivalent to ROOT. If CURRENT is explicitly defined by a call to this function, it
- * breaks that equivalence.
- *
- * NOTE: Name validation is responsibility of caller.
- */
- proto.defineVariable = function defineVariable(name) {
- // caller should have validated before hand by using Variables::uassertValidNameForUserWrite
- if (name === "ROOT")
- throw new Error("Can't redefine ROOT; massert code 17275");
- var id = this._idGenerator.generateId();
- this._variables[name] = id;
- return id;
- };
- /**
- * Returns the current Id for a variable. uasserts if the variable isn't defined.
- * @method getVariable
- * @param name {String} The name of the variable
- */
- proto.getVariable = function getVariable(name) {
- var it = this._variables[name];
- if (typeof it === "number")
- return it;
- if (name !== "ROOT" && name !== "CURRENT")
- throw new Error("Use of undefined variable " + name + "; uassert code 17276");
- return Variables.ROOT_ID;
- };
|