zorba::XQuery

#include <zorba/xquery.h>

Inherited from: zorba::SmartObject

This class is the representation of an XQuery program in the Zorba engine. To compile and execute an XQuery program, an instance of this class must be created. This is done by using either the createQuery or compileQuery methods of the Zorba class. These methods return an instance of XQuery_t, which is a reference counted smart pointer to a dynamically allocated XQuery object. The XQuery object is deleted when all XQuery_t objects that point to it are destroyed.The file simple.cpp contains some basic examples the demonstrate the use of this class.Note: This class is reference counted. When writing multi-threaded clients, it is the responibility of the client code to synchronize assignments to the SmartPtr holding this object.

Public Functions

void

addReference() const

XQuery_t

clone() const =0

Clone this query object in order to execute the query in another thread.

void

close()=0

Close the query and release all of its aquired ressources.

void

compile(const String &aQuery)=0

Compile a query given as a String.

void

compile(const String &aQuery, const Zorba_CompilerHints_t &aHints)=0

Compile a query given as a String, using the given compiler hints.

void

compile(std::istream &aQuery, const Zorba_CompilerHints_t &aHints)=0

Compile a query given as an input stream, using the given compiler hints.

void

compile(const String &aQuery, const StaticContext_t &aStaticContext, const Zorba_CompilerHints_t &aHints)=0

Compile a query given as a String, using a given static context and compiler hints.

void

compile(std::istream &aQuery, const StaticContext_t &aStaticContext, const Zorba_CompilerHints_t &aHints)=0

Compile a query given as an input stream, using a given static context and compiler hints.

void

execute(std::ostream &aOutStream, const Zorba_SerializerOptions_t *aSerOptions=NULL)=0

Execute the query and write the result to the given output stream.

void

execute(std::ostream &aOutStream, itemHandler aCallbackFunction, void *aCallbackData, const Zorba_SerializerOptions_t *aSerOptions=NULL)=0

Execute the query and write the result to the given output stream.

void

execute()=0

Execute the (updating) query.

void

executeSAX(SAX2_ContentHandler *aContentHandler)=0

Serialize the query result as SAX events and call the callbacks of the SAX2_ContentHandler that is given as input.

void

executeSAX()=0

Serialize the query result as SAX events and call the callbacks of the SAX2_ContentHandler that has been set using registerSAXHandler.

void

free()

double

getDocLoadingTime() const =0

double

getDocLoadingUserTime() const =0

DynamicContext *

getDynamicContext() const =0

Get the dynamic context of this query.

void

getExternalVariables(Iterator_t &aVarsIter) const =0

Returns the QName of all external variables.

std::string

getProfileName() const =0

Get the filename of the profile.

long

getRefCount() const

StaticCollectionManager *

getStaticCollectionManager() const =0

Returns a CollectionManager responsible for all collections which are statically declared in the static context of this query (main module) or any transitively imported library module.

const StaticContext *

getStaticContext() const =0

Get the static context of this query.

bool

isClosed() const =0

Check if this query object has already been closed.

bool

isSequential() const =0

Check if this query is a sequential query.

bool

isUpdating() const =0

Check if this query is an updating query.

Iterator_t

iterator()=0

Get an iterator for the result of the query.

bool

loadExecutionPlan(std::istream &is, SerializationCallback *aCallback=0)=0

Load execution plan.

void

parse(std::istream &aQuery)=0

Parse the given query String.

void

parse(std::istream &aQuery, ModuleInfo_t &aResult)=0

Parse the given module String.

void

printPlan(std::ostream &aStream, bool aDotFormat=false) const =0

Print the execution plan of this query to the given output stream.

void

registerDiagnosticHandler(DiagnosticHandler *handler)=0

Register an DiagnosticHandler to which errors during compilation or execution/serialization are reported.

void

registerSAXHandler(SAX2_ContentHandler *aContentHandler)=0

Register a SAX2_ContentHandler for retrieving the serialized query result as SAX events when executeSAX() is called.

void

removeReference()

void

resetDiagnosticHandler()=0

Reset the error handling mechanism back to the default, i.e. behave as if no DiagnosticHandler had been set.

bool

saveExecutionPlan(std::ostream &os)=0

Save the compiled execution plan.

void

setFileName(const String &flename)=0

Set the filename of a query.

void

setProfileName(std::string aProfileName)=0

Set the filename of the profile.

void

setTimeout(long aTimeout=-1)=0

Set a timeout, after which the execution of the query will be aborted.

~XQuery()

Destructor.

Protected Attributes

unsigned int

theRefCount

Public Functions

addReference

void addReference() const

clone

XQuery_t clone() const =0

Clone this query object in order to execute the query in another thread.

Although two or more threads may invoke one of the execute methods on the same XQuery object, these invocations are serialized internally. For true parallel excetution of a query by multiple threads, the XQuery object needs to be cloned, using this method. However, note that if an DiagnosticHandler has been provided by the user (see registerDiagnosticHandler()), this DiagnosticHandler will also be used in the cloned query, and as a result, the user should provide a thread-safe DiagnosticHandler. Alternatively, a new DiagnosticHandler can be registered in the cloned query by using registerDiagnosticHandler again. Or, the cloned query can be reset to use the default DiagnosticHandler (which just throws exceptions) by calling resetDiagnosticHandler.This function also clones the StaticContext and DynamicContext of the XQuery object. In the DynamicContext of the cloned query different variable values can be used, e.g. set different external variable values. For an example of cloning a query and setting different values in the dynamic context see example_10 in file simple.cpp.

Returns

The cloned XQuery object.

Parameters

SystemException if the query has not been compiled or is closed.

close

void close()=0

Close the query and release all of its aquired ressources.

While a query is compiled and/or active, it holds on to a number of resources. Before Zorba can be safely shutdown, all resources must be released. For queries this can be done by calling close. However, if close is not called explicitly, it will be automatically called by the XQuery object's destructor, when the last smart pointer pointing this XQuery object is destroyed.Note: After an XQuery object is closed, calling close() again on the same object is a noop. However, calling any method other than close() on a closed XQuery object is prohibited (an error will be raised).Note: if an iterator has been created to retreive the result of an XQuery object (

Returns

iterator()), that itrator will be closed when the query is closed, and the association between XQuery object and Iterator object will be destroyed.

compile

void compile(const String &aQuery)=0

Compile a query given as a String.

Parameters

aQuery the query String to compile.

Parameters

if the query has been closed, is already compiled, or an error occurs while compiling the query.

compile

void compile(const String &aQuery, const Zorba_CompilerHints_t &aHints)=0

Compile a query given as a String, using the given compiler hints.

Parameters

aQuery the query String to compile.
aHints hints passed to the query compiler.

Parameters

if the query has been closed, is already compiled, or an error occurs while compiling the query.

compile

void compile(std::istream &aQuery, const Zorba_CompilerHints_t &aHints)=0

Compile a query given as an input stream, using the given compiler hints.

Parameters

aQuery the query input stream.
aHints hints passed to the query compiler.

Parameters

if the query has been closed, is already compiled, or an error occurs while compiling the query.

compile

void compile(const String &aQuery, const StaticContext_t &aStaticContext, const Zorba_CompilerHints_t &aHints)=0

Compile a query given as a String, using a given static context and compiler hints.

Parameters

aQuery the query String to compile.
aStaticContext the static context.
aHints hints passed to the query compiler.

Parameters

if the query has been closed, is already compiled, or an error occurs while compiling the query.

compile

void compile(std::istream &aQuery, const StaticContext_t &aStaticContext, const Zorba_CompilerHints_t &aHints)=0

Compile a query given as an input stream, using a given static context and compiler hints.

Parameters

aQuery the query input stream.
aStaticContext the static context.
aHints hints passed to the query compiler.

Parameters

if the query has been closed, is already compiled, or an error occurs while compiling the query.

execute

void execute(std::ostream &aOutStream, const Zorba_SerializerOptions_t *aSerOptions=NULL)=0

Execute the query and write the result to the given output stream.

The query only has a result if it's a non-updating query.

Parameters

aOutStream the output stream on which the result is written.
aSerOptions an optional set of serialization options.

Parameters

if an error occurs (e.g. the query is closed or has not been compiled)

execute

void execute(std::ostream &aOutStream, itemHandler aCallbackFunction, void *aCallbackData, const Zorba_SerializerOptions_t *aSerOptions=NULL)=0

Execute the query and write the result to the given output stream.

A handler function gets called before the serialization of each item.

Parameters

aOutStream the output stream on which the result is written.
aCallbackFunction a call back function which is called every time, before the serialization of an item.
aCallbackData data which is passed to the call back function.
aSerOptions Serializer options.

Parameters

if an error occurs (e.g. the query is closed or has not been compiled)

execute

void execute()=0

Execute the (updating) query.

The query can be executed with this function only if it is an updating query.

Returns

isUpdating

Parameters

if an error occurs (e.g. the query is closed or has not been compiled or is not updating)

executeSAX

void executeSAX(SAX2_ContentHandler *aContentHandler)=0

Serialize the query result as SAX events and call the callbacks of the SAX2_ContentHandler that is given as input.

Parameters

aContentHandler the content handler on which SAX callbacks are called.

executeSAX

void executeSAX()=0

Serialize the query result as SAX events and call the callbacks of the SAX2_ContentHandler that has been set using registerSAXHandler.

Parameters

if an error occurs (e.g. no SAX2_ContentHandler has been registered).

free

void free()

getDocLoadingTime

double getDocLoadingTime() const =0

getDocLoadingUserTime

double getDocLoadingUserTime() const =0

getDynamicContext

DynamicContext * getDynamicContext() const =0

Get the dynamic context of this query.

This function returns the dynamic context that belongs to this query and is used during query execution. The context can be used, for example, to set values of external variables, the default collation, or the current datetime. It is only available if the query has been compiled, otherwise an error is reported. Moreover, the context must not be modified during the execution of a query (i.e. if a Iterator is opened). The lifetime of the context returned by this function is restricted by the lifetime of the according query object.

Parameters

SystemException if the query has not been compiled or is closed.

Returns

DynamicContext of this query.

getExternalVariables

void getExternalVariables(Iterator_t &aVarsIter) const =0

Returns the QName of all external variables.

Parameters

aVarsIter iterator to store the results.

Parameters

if an error occured.

getProfileName

std::string getProfileName() const =0

Get the filename of the profile.

This file will contain the output of Zorba profiler.

getRefCount

long getRefCount() const

getStaticCollectionManager

StaticCollectionManager * getStaticCollectionManager() const =0

Returns a CollectionManager responsible for all collections which are statically declared in the static context of this query (main module) or any transitively imported library module.

The collection manager provides a set of functions for managing collections and their contents.

Returns

The collection manager responsible for managing collections of this query.

getStaticContext

const StaticContext * getStaticContext() const =0

Get the static context of this query.

This function returns the static context that belongs to this query. The static context is only available if the query has been compiled, otherwise an error is reported. The context has all the components and values that were set in the static context that was passed when creating the query and those that were set in the prolog of the query. Note that after compilation of the query the static context is a read only structure. Moreover, the lifetime of the context returned by this function is restricted by the lifetime of the corresponding query object.

Parameters

SystemException if the query has not been compiled or is closed.

Returns

StaticContext of this query.

isClosed

bool isClosed() const =0

Check if this query object has already been closed.

Returns

true if the query has been closed already or false otherwise.

isSequential

bool isSequential() const =0

Check if this query is a sequential query.

Returns

true if the query is a sequential query, false otherwise.

Parameters

SystemException if the query is not compiled or has been closed.

Returns

close() compile(...)

isUpdating

bool isUpdating() const =0

Check if this query is an updating query.

Returns

true if the query is an updating query, false otherwise.

Parameters

SystemException if the query is not compiled or has been closed.

Returns

close() compile(...)

iterator

Iterator_t iterator()=0

Get an iterator for the result of the query.

Allows an application to lazily execute the query, retrieving the result one item at a time.

Returns

Iterator iterator over the result sequence.

Parameters

if an error occurs (e.g. the query is closed or has not been compiled).

loadExecutionPlan

bool loadExecutionPlan(std::istream &is, SerializationCallback *aCallback=0)=0

Load execution plan.

The serialized execution plan contains a general version for the entire archive and specific versions for each class. Zorba does not quarantee that it can load execution plans saved with previous versions of Zorba. In most cases there will be no problems, but the complete backward compatibility cannot be quaranteed.The engine automatically detects the format of the input, either XML or binary.

Parameters

is Reference to std::istream.
aCallback optional callback handler (see SerializationCallback) that is used to retrieve information that has not been serialized (e.g. external modules).

Returns

true if success.

Parameters

if there are problems loading the execution plan.

parse

void parse(std::istream &aQuery)=0

Parse the given query String.

Parameters

aQuery the query file to parse.

Parameters

if an error occurs while parsing the query.

parse

void parse(std::istream &aQuery, ModuleInfo_t &aResult)=0

Parse the given module String.

This function parses the module string and returns some information about the module.

Parameters

aQuery the query file to parse.
aResult some information about the module

Parameters

if an error occurs while parsing the query.

printPlan

void printPlan(std::ostream &aStream, bool aDotFormat=false) const =0

Print the execution plan of this query to the given output stream.

Parameters

aStream the output stream to which the execution plan is printed
aDotFormat specifies the format of the printed execution plan. If this is true, then the execution plan is printed in the DOT format. If this is false, the plan is printed as XML.

Parameters

if the query has been closed or is not compiled.

registerDiagnosticHandler

void registerDiagnosticHandler(DiagnosticHandler *handler)=0

Register an DiagnosticHandler to which errors during compilation or execution/serialization are reported.

If no DiagnosticHandler has been set via this function, the default error handling mechanism is to throw instances of the ZorbaException class.

Parameters

handler DiagnosticHandler to which errors are reported. The caller retains ownership over the DiagnosticHandler passed as parameter.

Parameters

SystemException if the query has been closed.

Returns

close()

registerSAXHandler

void registerSAXHandler(SAX2_ContentHandler *aContentHandler)=0

Register a SAX2_ContentHandler for retrieving the serialized query result as SAX events when executeSAX() is called.

Parameters

aContentHandler the content handler on which SAX callbacks are called.

removeReference

void removeReference()

resetDiagnosticHandler

void resetDiagnosticHandler()=0

Reset the error handling mechanism back to the default, i.e. behave as if no DiagnosticHandler had been set.

Parameters

SystemException if the query has been closed already.

saveExecutionPlan

bool saveExecutionPlan(std::ostream &os)=0

Save the compiled execution plan.

After compiling an XQuery program you can save the execution plan in some persistent storage. The execution plan is saved in a platform-independent format. You can later load this execution plan into a different XQuery object (potentially on a different machine) and execute it like it was compiled in place.

Parameters

os The output stream into which the execution plan is saved.

Returns

true if success.

Parameters

if the query has not been compiled or there are problems serializing the execution plan.

setFileName

void setFileName(const String &flename)=0

Set the filename of a query.

This (after URI-encoding) becomes the encapsulating entity's retrieval URI (in RFC 3986 terms), and may be used in the computation of the program's static base URI property, as described at http://www.w3.org/TR/xquery-30/#dt-base-uri-decl

setProfileName

void setProfileName(std::string aProfileName)=0

Set the filename of the profile.

This file will contain the output of Zorba profiler.

setTimeout

void setTimeout(long aTimeout=-1)=0

Set a timeout, after which the execution of the query will be aborted.

Parameters

aTimeout is an optional argument, which declares, that the execution of a query will be aborted after aTimeout number of seconds. If aTimeout is set to -1 (default), the query will never abort.

~XQuery

 ~XQuery()

Destructor.

The destructor is called automatically when there are no more XQuery_t smart pointers pointing to this XQuery instance.

Protected Attributes

theRefCount

unsigned int theRefCount