System.Xml.Xsl.Qil.QilTypeChecker.CheckLoop C# (CSharp) Method

CheckLoop() public method

public CheckLoop ( QilLoop node ) : XmlQueryType
node QilLoop
return XmlQueryType
        public XmlQueryType CheckLoop(QilLoop node) {
            CheckClass(node[0], typeof(QilIterator));
            Check(node.Variable.NodeType == QilNodeType.For || node.Variable.NodeType == QilNodeType.Let, node, "Loop variable must be a For or Let iterator");

            XmlQueryType bodyType = node.Body.XmlType;
            XmlQueryCardinality variableCard = node.Variable.NodeType == QilNodeType.Let ? XmlQueryCardinality.One : node.Variable.Binding.XmlType.Cardinality;

            // Loops do not preserve DocOrderDistinct
            if (bodyType.IsDod)
                return XmlQueryTypeFactory.PrimeProduct(XmlQueryTypeFactory.NodeNotRtfS, variableCard * bodyType.Cardinality);

            return XmlQueryTypeFactory.PrimeProduct(bodyType, variableCard * bodyType.Cardinality);
        }
        

Usage Example

Exemplo n.º 1
0
        //-----------------------------------------------
        // loops
        //-----------------------------------------------
        public QilLoop Loop(QilNode variable, QilNode body)
        {
            QilLoop n = new QilLoop(QilNodeType.Loop, variable, body);

            n.XmlType = _typeCheck.CheckLoop(n);
            TraceNode(n);
            return(n);
        }
QilTypeChecker