Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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;
        }