/* * Copyright (c) 2001, 2008, * DecisionSoft Limited. All rights reserved. * Copyright (c) 2004, 2018 Oracle and/or its affiliates. All rights reserved. * * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _XQILLA_07637_HPP #define _XQILLA_07637_HPP #include #include #include #include class DynamicContext; class XPath2MemoryManager; class XQillaConfiguration; class Optimizer; class DelayedFuncFactory; class XQQuery; XERCES_CPP_NAMESPACE_BEGIN class InputSource; class XMLBuffer; XERCES_CPP_NAMESPACE_END namespace CompileDelayedModule { void compile(const XMLCh *queryFile); } /** * Provides factory methods for creating XQQuery and DynamicContext objects. * * This class calls XQillaPlatformUtils::initialize() when it is constructed, and * XQillaPlatformUtils::terminate() when it destructs, so there is no need to seperately * initialize or terminate either Xerces or XQilla. */ class XQILLA_API XQilla : public XERCES_CPP_NAMESPACE_QUALIFIER XMemory { public: /// Flags used by the XQilla methods. These are used by bitwise OR-ing (|) their values together. enum Flags { NO_STATIC_RESOLUTION = 0x1, ///< Don't perform static resolution or any optimization NO_ADOPT_CONTEXT = 0x2, ///< Don't adopt the context and delete it when the XQQuery is deleted DEBUG_QUERY = 0x4, ///< Build debugging hooks into the query to enable the use of DebugListener NO_OPTIMIZATION = 0x8, ///< Don't perform optimization NO_DEFAULT_MODULES = 0x10 ///< Don't automatically import the default modules }; /// Enumeration used to select a language to parse enum Language { XQUERY = 0x00, XPATH2 = 0x01, FULLTEXT = 0x02, UPDATE = 0x04, EXTENSIONS = 0x08, XSLT2 = 0x10, VERSION3 = 0x20, XQUERY_FULLTEXT = (XQUERY | FULLTEXT), XQUERY_UPDATE = (XQUERY | UPDATE), XQUERY_FULLTEXT_UPDATE = (XQUERY | FULLTEXT | UPDATE), XPATH2_FULLTEXT = (XPATH2 | FULLTEXT), XSLT2_FULLTEXT = (XSLT2 | FULLTEXT), XQUERY3 = (XQUERY | VERSION3), XQUERY3_FULLTEXT = (XQUERY | VERSION3 | FULLTEXT), XQUERY3_UPDATE = (XQUERY | VERSION3 | UPDATE), XQUERY3_FULLTEXT_UPDATE = (XQUERY | VERSION3 | FULLTEXT | UPDATE), XPATH3 = (XPATH2 | VERSION3), XPATH3_FULLTEXT = (XPATH2 | VERSION3 | FULLTEXT), XSLT3 = (XSLT2 | VERSION3), XSLT3_FULLTEXT = (XSLT2 | VERSION3 | FULLTEXT), }; /** * Constructs the object. In the process, XQillaPlatformUtils::initialize() is * called to initialize XQilla and Xerces. * * @param memMgr If provided, this is the MemoryManager used to initialize Xerces. */ XQilla(XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager *memMgr = 0); /** * Destructs the object. In the process, XQillaPlatformUtils::terminate() is * called to terminate XQilla and Xerces. */ ~XQilla(); /** @name Parsing Methods */ // @{ /** * Parse the expression contained in the given query string. * * @param query A string containing the expression to parse. * @param context If specified, the context to use for parsing this expression. A * default context is used if this parameter is 0. * @param queryFile The name of the file that query originates in. This is passed * back to the user in an XQException if an error occurs. * @param flags A bitwise OR of the Flags constants, that control aspects of how * the XQQuery object is created. * @param memMgr If specified, the memory manager used to create the XQQuery object. * * @return The object that represents the parsed expression. * * @exception XQException If a parse error occurs. */ static XQQuery* parse(const XMLCh* query, DynamicContext* context = 0, const XMLCh* queryFile = NULL, unsigned int flags = 0, XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager *memMgr = XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::fgMemoryManager, XQQuery *result = 0); /** * Parse the expression from the given InputSource. * * @param querySrc An InputSource which the expression will be parsed from. * @param context If specified, the context to use for parsing this expression. A * default context is used if this parameter is 0. * @param flags A bitwise OR of the Flags constants, that control aspects of how * the XQQuery object is created. * @param memMgr If specified, the memory manager used to create the XQQuery object. * * @return The object that represents the parsed expression. * * @exception XQException If a parse error occurs. */ static XQQuery* parse(const XERCES_CPP_NAMESPACE_QUALIFIER InputSource& querySrc, DynamicContext* context = 0, unsigned int flags = 0, XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager *memMgr = XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::fgMemoryManager, XQQuery *result = 0); /** * Parse the expression residing at the given URL. * * @param queryFile The URL of the expression to parse. * @param context If specified, the context to use for parsing this expression. A * default context is used if this parameter is 0. * @param flags A bitwise OR of the Flags constants, that control aspects of how * the XQQuery object is created. * @param memMgr If specified, the memory manager used to create the XQQuery object. * * @return The object that represents the parsed expression. * * @exception XQException If a parse error occurs. */ static XQQuery* parseFromURI(const XMLCh* queryFile, DynamicContext* context = 0, unsigned int flags = 0, XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager *memMgr = XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::fgMemoryManager, XQQuery *result = 0); //@} /** @name Factory Methods */ // @{ /** * Creates a context suitable for parsing an expression with. * @param memMgr The memory manager used to create the DynamicContext. * @return An implementation of DynamicContext */ static DynamicContext *createContext(Language language = XQUERY, XQillaConfiguration *conf = 0, XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager *memMgr = XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::fgMemoryManager); //@} private: static bool readQuery(const XMLCh* queryFile, XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager* memMgr, XERCES_CPP_NAMESPACE_QUALIFIER XMLBuffer& queryText); static bool readQuery(const XERCES_CPP_NAMESPACE_QUALIFIER InputSource& querySrc, XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager* memMgr, XERCES_CPP_NAMESPACE_QUALIFIER XMLBuffer& queryText); static Optimizer *createOptimizer(DynamicContext *context, unsigned int flags); static void compileDelayedModule(const XMLCh* queryFile, XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager *memMgr = XERCES_CPP_NAMESPACE_QUALIFIER XMLPlatformUtils::fgMemoryManager); friend void CompileDelayedModule::compile(const XMLCh *queryFile); friend class DelayedFuncFactory; }; #endif