00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _STACKFRAME_HPP
00023 #define _STACKFRAME_HPP
00024
00025 #include <string>
00026
00027 #include <xqilla/framework/XQillaExport.hpp>
00028 #include <xqilla/items/Item.hpp>
00029
00030 #include <xercesc/util/XercesDefs.hpp>
00031
00032 class ASTNode;
00033 class TupleNode;
00034 class LocationInfo;
00035 class DynamicContext;
00036 class EventHandler;
00037 class Sequence;
00038 class VariableStore;
00039
00040 XERCES_CPP_NAMESPACE_BEGIN
00041 class DOMXPathNSResolver;
00042 XERCES_CPP_NAMESPACE_END
00043
00047 class XQILLA_API StackFrame
00048 {
00049 public:
00050 virtual ~StackFrame() {}
00051
00052 const LocationInfo *getLocationInfo() const { return location_; }
00053 const StackFrame *getPreviousFrame() const { return prev_; }
00054
00055 virtual Sequence query(const XMLCh *query) const;
00056 virtual void query(const XMLCh *query, EventHandler *events) const;
00057
00058 virtual const ASTNode *getASTNode() const = 0;
00059 virtual const TupleNode *getTupleNode() const = 0;
00060 virtual std::string getQueryPlan() const = 0;
00061
00062 protected:
00063 StackFrame(const LocationInfo *location, DynamicContext *context);
00064
00065 const LocationInfo *location_;
00066
00067 DynamicContext *context_;
00068 Item::Ptr contextItem_;
00069 size_t contextPosition_;
00070 size_t contextSize_;
00071 const VariableStore *variables_;
00072 const XERCES_CPP_NAMESPACE_QUALIFIER DOMXPathNSResolver *nsResolver_;
00073 const XMLCh *defaultElementNS_;
00074
00075 const StackFrame *prev_;
00076
00077 private:
00078 StackFrame(const StackFrame &);
00079 StackFrame &operator=(const StackFrame&);
00080 };
00081
00082 #endif