public void Init(MemoryPool pool) { SymbolLink self = new SymbolLink(typeof(IContextProvider)); pool.Bind(self); pool.SetData(self, this); SetValue(ID.Context, self); }
public override object Execute(IContextProvider provider, object[] args, MemoryPool pool) { object value = QueryContext.Engine.Apply(null, null, m_expr, args, m_valueExpr, pool); if (value == null) value = DataEngine.CoreServices.Generation.RuntimeOps.False; if (m_varType != XQuerySequenceType.Item && m_convert) value = Core.TreatAs(QueryContext.Engine, value, m_varType); XQueryNodeIterator iter = value as XQueryNodeIterator; if (iter != null && !(iter is BufferedNodeIterator)) value = iter.CreateBufferedIterator(); pool.SetData(m_value, value); if (m_conditionExpr != null && !Core.BooleanValue(QueryContext.Engine.Apply(null, null, ConditionExpr, args, m_conditionExpr, pool))) return EmptyIterator.Shared; return m_bodyExpr.Execute(provider, args, pool); }
public override object Execute(IContextProvider provider, object[] args, MemoryPool pool) { pool.SetData(m_context, provider); if (Annotation != null) { object[] annotation = new object[Annotation.Length]; for (int k = 0; k < Annotation.Length; k++) { object res = QueryContext.Engine.Apply(null, null, Annotation[k], args, m_compiledAnnotation[k], pool); if (res != Undefined.Value) if (res == null) annotation[k] = false; else annotation[k] = Core.Atomize(res); } return new XQueryExprIterator(this, args, annotation, pool); } if (m_expr.Length == 1) return QueryContext.Engine.Apply(null, null, m_expr[0], args, m_compiledBody[0], pool); return new XQueryExprIterator(this, args, null, pool); }
private Task<Object> BeginMoveNext(IContextProvider provider, object[] args, MemoryPool pool, XPathItem curr, Integer index) { object value; if (curr.IsNode) value = curr.Clone(); else value = curr.TypedValue; if (m_varType != XQuerySequenceType.Item && m_convert) { if (m_varType.IsNode && !Core.InstanceOf(QueryContext.Engine, value, m_varType)) throw new XQueryException(Properties.Resources.XPTY0004, new XQuerySequenceType(curr.XmlType.TypeCode), m_varType); value = XQueryConvert.TreatValueAs(value, m_varType); if (m_varType.Cardinality == XmlTypeCardinality.ZeroOrMore || m_varType.Cardinality == XmlTypeCardinality.OneOrMore) value = XQueryNodeIterator.Create(value); } pool.SetData(m_value, value); if (m_pos != null) pool.SetData(m_posValue, index); if (m_conditionExpr == null || Core.BooleanValue(QueryContext.Engine.Apply(null, null, ConditionExpr, args, m_conditionExpr, pool))) { MemoryPool taskPool = pool.Clone(); return Task<Object>.Factory.StartNew(() => { object res = m_bodyExpr.Execute(provider, args, taskPool); XQueryNodeIterator iter = res as XQueryNodeIterator; if (iter != null) { BufferedNodeIterator resIter = new BufferedNodeIterator(iter, false); resIter.Fill(); return resIter; } return res; }, QueryContext.Token); } return null; }
private bool MoveNext(IContextProvider provider, object[] args, MemoryPool pool, XPathItem curr, Integer index, out object res) { object value; if (curr.IsNode) value = curr; else value = curr.TypedValue; if (m_varType != XQuerySequenceType.Item && m_convert) { if (m_varType.IsNode && !Core.InstanceOf(QueryContext.Engine, value, m_varType)) throw new XQueryException(Properties.Resources.XPTY0004, new XQuerySequenceType(curr.XmlType.TypeCode), m_varType); value = XQueryConvert.TreatValueAs(value, m_varType); if (m_varType.Cardinality == XmlTypeCardinality.ZeroOrMore || m_varType.Cardinality == XmlTypeCardinality.OneOrMore) value = XQueryNodeIterator.Create(value); } pool.SetData(m_value, value); if (m_pos != null) pool.SetData(m_posValue, index); res = null; if (m_conditionExpr == null || Core.BooleanValue(QueryContext.Engine.Apply(null, null, ConditionExpr, args, m_conditionExpr, pool))) { res = m_bodyExpr.Execute(provider, args, pool); if (res != Undefined.Value) return true; } return false; }
private void OnChangeValue(SymbolLink line, MemoryPool pool) { pool.SetData(_cache, null); }
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; }