示例#1
0
        public virtual XPathSequence Evaluate(XPathSequence iter, ExprSequence args)
        {
            object [] instParams = new object [args.Count];
            for (int i = 0; i < args.Count; i++)
            {
                XPathSequence val = args [i].Evaluate(iter);
                instParams [i] = Args [i].Type.ToRuntimeType(val);
            }
            object o = Invoke(iter, instParams);

            if (o == null)
            {
                return(new XPathEmptySequence(iter.Context));
            }
            if (o is XPathSequence)
            {
                return((XPathSequence)o);
            }
            XPathItem item = o as XPathItem;

            if (item == null)
            {
                item = new XPathAtomicValue(o, ReturnType.SchemaType);
            }
            return(new SingleItemIterator(item, iter.Context));
        }
示例#2
0
 internal XQueryUserFunction(XmlQualifiedName name,
                             XQueryFunctionArgument [] parameters,
                             ExprSequence expr,
                             SequenceType returnType)
     : base(name, parameters, returnType)
 {
     this.expr = expr;
 }
示例#3
0
 private ExprSequence CompileExprSequence(ExprSequence expr)
 {
     for (int i = 0; i < expr.Count; i++)
     {
         expr [i] = expr [i].Compile(this);
     }
     return(expr);
 }
示例#4
0
        public override XPathSequence Evaluate(XPathSequence iter, ExprSequence args)
        {
            for (int i = 0; i < Args.Length; i++)
            {
                iter.Context.PushVariable(Args [i].Name, args [i].Evaluate(iter));
            }
            XPathSequence seq = new ExprSequenceIterator(iter, expr);

            for (int i = 0; i < Args.Length; i++)
            {
                iter.Context.PopVariable();
            }
            return(seq);
        }
示例#5
0
        // Don't keep XQueryCompileOptions and XQueryMainModule
        // inside this class. I don't want them affect this instance
        // by being modified externally after the compilation.

        public XQueryStaticContext(
            XQueryCompileOptions options,
            XQueryCompileContext compileContext,
            ExprSequence queryBody,
            XmlSchemaSet inScopeSchemas,
            IDictionary inScopeVariables,
            XQueryFunctionTable functionSignatures,
            IXmlNamespaceResolver nsResolver,
            string defaultFunctionNamespace,
            bool preserveWhitespace,
            bool constructionSpace,
            bool defaultOrdered,
            string baseUri,
            Evidence evidence,
            XQueryCommandImpl commandImpl)
        {
            // Initialization phase.
            compat          = options.Compatibility;
            nameTable       = options.NameTable;
            this.queryBody  = queryBody;
            this.nsResolver = nsResolver;
            this.defaultFunctionNamespace = defaultFunctionNamespace;
//			elemNSManager = new XmlNamespaceManager (nameTable);
//			funcNSManager = new XmlNamespaceManager (nameTable);
            xqueryFlagger       = options.XQueryFlagger;
            xqueryStaticFlagger = options.XQueryStaticFlagger;
//			xqueryResolver = options.KnownDocumentResolver;
            knownCollections               = (IDictionary)options.KnownCollections.Clone();
            functions                      = functionSignatures;
            this.compileContext            = compileContext;
            this.inScopeSchemas            = inScopeSchemas;
            this.inScopeVariables          = inScopeVariables;
            this.preserveWhitespace        = preserveWhitespace;
            this.preserveConstructionSpace = constructionSpace;
            this.defaultOrdered            = defaultOrdered;
            this.baseUri                   = baseUri;
            this.defaultCollation          = options.DefaultCollation;
            // FIXME: set contextItemStaticType
            // FIXME: set extDocResolver

            this.evidence    = evidence;
            this.commandImpl = commandImpl;
        }
示例#6
0
        // methods.

        private XQueryStaticContext Compile()
        {
            CompileProlog();

            XQueryMainModule main = module as XQueryMainModule;
            ExprSequence     expr = (main != null) ?
                                    CompileExprSequence(main.QueryBody) : null;

            return(new XQueryStaticContext(
                       options,
                       compileContext,
                       expr,
                       inScopeSchemas,
                       localVariables,
                       localFunctions,
                       module.NSResolver,
                       module.Prolog.DefaultFunctionNamespace,
                       preserveWhitespace,
                       constructionSpace,
                       defaultOrdered,
                       baseUri,
                       evidence,
                       commandImpl));
        }
示例#7
0
 public XmlCommentConstructor(ExprSequence content)
     : base(content)
 {
 }
示例#8
0
 public XmlConstructorExpr(ExprSequence content)
 {
     this.content = content;
 }
示例#9
0
 public XmlDocConstructor(ExprSequence content)
     : base(content)
 {
 }
示例#10
0
 public XmlNSConstructor(string prefix, ExprSequence content)
     : base(content)
 {
 }
示例#11
0
 public XmlAttrConstructor(XmlQualifiedName name, ExprSequence content)
     : base(content)
 {
     this.name = name;
 }
示例#12
0
 public XmlElemConstructor(ExprSequence name, ExprSequence content)
     : base(content)
 {
     this.name     = XmlQualifiedName.Empty;
     this.nameExpr = name;
 }
 public DefaultFunctionCall(XQueryStaticContext ctx, string name, int minArgs, int maxArgs, SequenceType type, ExprSequence args)
     : base(GetName(name), args)
 {
     this.type    = type;
     this.minArgs = minArgs;
     this.maxArgs = maxArgs;
 }
示例#14
0
 public XmlPIConstructor(string name, ExprSequence content)
     : base(content)
 {
     this.name = name;
 }
 public FnNodeNameCall(XQueryStaticContext ctx, ExprSequence args)
     : base(ctx, "node-name", 1, 1, SequenceType.Create(XmlSchemaSimpleType.XsQName, Occurence.Optional), args)
 {
 }
示例#16
0
 public XmlPIConstructor(ExprSequence name, ExprSequence content)
     : base(content)
 {
     this.nameExpr = name;
 }
示例#17
0
 public XQueryVariable(XmlQualifiedName name, SequenceType type, ExprSequence varBody)
 {
     this.name    = name;
     this.type    = type;
     this.varBody = varBody;             // might be null (just declaration).
 }