00001 /* 00002 * Copyright (c) 2001, 2008, 00003 * DecisionSoft Limited. All rights reserved. 00004 * Copyright (c) 2004, 2011, 00005 * Oracle and/or its affiliates. All rights reserved. 00006 * 00007 * Licensed under the Apache License, Version 2.0 (the "License"); 00008 * you may not use this file except in compliance with the License. 00009 * You may obtain a copy of the License at 00010 * 00011 * http://www.apache.org/licenses/LICENSE-2.0 00012 * 00013 * Unless required by applicable law or agreed to in writing, software 00014 * distributed under the License is distributed on an "AS IS" BASIS, 00015 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00016 * See the License for the specific language governing permissions and 00017 * limitations under the License. 00018 */ 00019 00020 #ifndef _STACKFRAME_HPP 00021 #define _STACKFRAME_HPP 00022 00023 #include <string> 00024 00025 #include <xqilla/framework/XQillaExport.hpp> 00026 #include <xqilla/items/Item.hpp> 00027 00028 #include <xercesc/util/XercesDefs.hpp> 00029 00030 class ASTNode; 00031 class TupleNode; 00032 class LocationInfo; 00033 class DynamicContext; 00034 class EventHandler; 00035 class Sequence; 00036 class VariableStore; 00037 00038 XERCES_CPP_NAMESPACE_BEGIN 00039 class DOMXPathNSResolver; 00040 XERCES_CPP_NAMESPACE_END 00041 00045 class XQILLA_API StackFrame 00046 { 00047 public: 00048 virtual ~StackFrame() {} 00049 00050 const LocationInfo *getLocationInfo() const { return location_; } 00051 const StackFrame *getPreviousFrame() const { return prev_; } 00052 00053 virtual Sequence query(const XMLCh *query) const; 00054 virtual void query(const XMLCh *query, EventHandler *events) const; 00055 00056 virtual const ASTNode *getASTNode() const = 0; 00057 virtual const TupleNode *getTupleNode() const = 0; 00058 virtual std::string getQueryPlan() const = 0; 00059 00060 protected: 00061 StackFrame(const LocationInfo *location, DynamicContext *context); 00062 00063 const LocationInfo *location_; 00064 00065 DynamicContext *context_; 00066 Item::Ptr contextItem_; 00067 size_t contextPosition_; 00068 size_t contextSize_; 00069 const VariableStore *variables_; 00070 const XERCES_CPP_NAMESPACE_QUALIFIER DOMXPathNSResolver *nsResolver_; 00071 const XMLCh *defaultElementNS_; 00072 00073 const StackFrame *prev_; 00074 00075 private: 00076 StackFrame(const StackFrame &); 00077 StackFrame &operator=(const StackFrame&); 00078 }; 00079 00080 #endif