/// <summary> /// Replace or add the variable as requested. /// </summary> /// <param name="varName"></param> /// <param name="replacementExpr"></param> /// <returns></returns> public IVariableScopeHolder AddInternal(IQuerySource query, Expression replacementExpr) { Debug.WriteLine("Caching QS {0} => {1}", query.ToString(), replacementExpr.ToString()); // If this QS is referenced by a QM cache line, then we need to invalidate that QM. if (_queryReplacement.ContainsKey(query)) { var badQM = (from q in _queryModelCache where q.Value._referencedQS.Contains(query) select q.Key).ToArray(); Debug.Indent(); foreach (var qm in badQM) { Debug.WriteLine("Removing QM due to change in QS {0}{1}", qm.ToString(), ""); _queryModelCache.Remove(qm); } Debug.Unindent(); } /// /// Somethign to get us back to this state /// IVariableScopeHolder popper = null; if (_queryReplacement.ContainsKey(query)) { popper = new CCReplacementQuery(this, query, _queryReplacement[query]); } else { popper = new CCReplacementQuery(this, query, null); } /// /// And save the expression for future lookup /// if (replacementExpr != null) { _queryReplacement[query] = replacementExpr; } else { _queryReplacement.Remove(query); } return(popper); }
/// <summary> /// Replace or add the variable as requested. /// </summary> /// <param name="varName"></param> /// <param name="replacementExpr"></param> /// <returns></returns> public IVariableScopeHolder AddInternal(IQuerySource query, Expression replacementExpr) { Debug.WriteLine("Caching QS {0} => {1}", query.ToString(), replacementExpr.ToString()); // If this QS is referenced by a QM cache line, then we need to invalidate that QM. if (_queryReplacement.ContainsKey(query)) { var badQM = (from q in _queryModelCache where q.Value._referencedQS.Contains(query) select q.Key).ToArray(); Debug.Indent(); foreach (var qm in badQM) { Debug.WriteLine("Removing QM due to change in QS {0}{1}", qm.ToString(), ""); _queryModelCache.Remove(qm); } Debug.Unindent(); } /// /// Somethign to get us back to this state /// IVariableScopeHolder popper = null; if (_queryReplacement.ContainsKey(query)) { popper = new CCReplacementQuery(this, query, _queryReplacement[query]); } else { popper = new CCReplacementQuery(this, query, null); } /// /// And save the expression for future lookup /// if (replacementExpr != null) { _queryReplacement[query] = replacementExpr; } else { _queryReplacement.Remove(query); } return popper; }