Beispiel #1
0
 public override object Execute(IContextProvider provider, object[] args, MemoryPool pool)
 {
     object[] keys = new object[m_params.Count + 1];
     keys[0] = provider.Context;
     for (int k = 0; k < m_params.Count; k++)
         keys[k + 1] = pool.GetData(m_params[k]);
     Key key = new Key(QueryContext.Engine, keys);
     object res;
     lock (m_cache)
     {
         if (m_cache.TryGetValue(key, out res))
             return res.CloneObject();
     }
     res = m_body.Execute(provider, args, pool);
     lock (m_cache)
     {
         if (!m_cache.ContainsKey(key))
         {
             key.CloneKeys();
             m_cache.Add(key, res);
         }
     }
     return res.CloneObject();
 }
Beispiel #2
0
        public override object Execute(IContextProvider provider, object[] args, MemoryPool pool)
        {
            XQueryNodeIterator res = (XQueryNodeIterator)pool.GetData(_cache);
            if (res != null)
                return res.Clone();
#if PF
            PerfMonitor.Global.Begin(this);
#endif
            XQueryNodeIterator rootIter = 
                XQueryNodeIterator.Create(_path[0].Execute(provider, args, pool)).CreateBufferedIterator();
            bool orderedSet = _isOrderedSet && rootIter.IsSingleIterator;
            res = new ResultIterator(this, provider, orderedSet, !orderedSet & QueryContext.EnableHPC, rootIter, args, pool);
            if (EnableCaching)
            {
                res = res.CreateBufferedIterator();
                pool.SetData(_cache, res.Clone());
            }
#if PF
            PerfMonitor.Global.End(this);
#endif
            return res;
        }
Beispiel #3
0
 public override object Execute(IContextProvider provider, object[] args, MemoryPool pool)
 {
     if (value == null)
         return args[arg_index];
     return pool.GetData(value);
 }