javax.xml.xquery
Interface XQExpression

All Superinterfaces:
XQDynamicContext
All Known Implementing Classes:
SaxonXQExpression

public interface XQExpression
extends XQDynamicContext

This interface describes the execute immediate functionality for expressions. This object can be created from the XQConnection and the execution can be done using the executeQuery() or executeCommand() method, passing in the XQuery expression.

All external variables defined in the prolog of the expression to be executed must be set in the dynamic context of this expression using the bind methods. Also, variables bound in this expression but not defined as external in the prolog of the expression to be executed, are simply ignored. For example, if variables $var1 and $var2 are bound, but the query only defines $var1 as external, no error will be reported for the binding of $var2. It will simply be ignored. When the expression is executed using the executeQuery method, if the execution is successful, then an XQResultSequence object is returned. The XQResultSequence object is tied to the XQExpression from which it was prepared and is closed implicitly if that XQExpression is either closed or re-executed.

The XQExpression object is dependent on the XQConnection object from which it was created and is only valid for the duration of that object. Thus, if the XQConnection object is closed then this XQExpression object will be implicitly closed and it can no longer be used.

An XQJ driver is not required to provide finalizer methods for the connection and other objects. Hence it is strongly recommended that users call close method explicitly to free any resources. It is also recommended that they do so under a final block to ensure that the object is closed even when there are exceptions. Not closing this object implicitly or explicitly might result in serious memory leaks.

When the XQExpression is closed any XQResultSequence object obtained from it is also implicitly closed.

Example -

  XQConnection conn = XQDatasource.getConnection();
  XQExpression expr = conn.createExpression();
 
  expr.bindInt(new QName("x"), 21, null);
 
  XQSequence result = expr.executeQuery(
     "declare variable $x as xs:integer external;
     for $i in $x return $i");
   
  while (result.next())
  {
     // process results ...
  }
 
  // Execute some other expression on the same object
  XQSequence result = expr.executeQuery("for $i in doc('foo.xml') return $i");
  ... 

  result.close(); // close the result
  expr.close(); 
  conn.close(); 
 


Method Summary
 void cancel()
          Attempts to cancel the execution if both the XQuery engine and XQJ driver support aborting the execution of an XQExpression.
 void close()
          Closes the expression object and release associated resources.
 void executeCommand(Reader cmd)
          Executes an implementation-defined command.
 void executeCommand(String cmd)
          Executes an implementation-defined command.
 XQResultSequence executeQuery(InputStream query)
          Executes a query expression.
 XQResultSequence executeQuery(Reader query)
          Executes a query expression.
 XQResultSequence executeQuery(String query)
          Executes a query expression.
 XQStaticContext getStaticContext()
          Gets an XQStaticContext representing the values for all expression properties.
 boolean isClosed()
          Checks if the expression is in a closed state.
 
Methods inherited from interface javax.xml.xquery.XQDynamicContext
bindAtomicValue, bindBoolean, bindByte, bindDocument, bindDocument, bindDocument, bindDocument, bindDocument, bindDouble, bindFloat, bindInt, bindItem, bindLong, bindNode, bindObject, bindSequence, bindShort, bindString, getImplicitTimeZone, setImplicitTimeZone
 

Method Detail

cancel

void cancel()
            throws XQException
Attempts to cancel the execution if both the XQuery engine and XQJ driver support aborting the execution of an XQExpression. This method can be used by one thread to cancel an XQExpression, that is being executed in another thread. If cancellation is not supported or the attempt to cancel the execution was not successful, the method returns without any error. If the cancellation is successful, an XQException is thrown, to indicate that it has been aborted, by executeQuery, executeCommand or any method accessing the XQResultSequence returned by executeQuery. If applicable, any open XQResultSequence and XQResultItem objects will also be implicitly closed in this case.

Throws:
XQException - if the expression is in a closed state

isClosed

boolean isClosed()
Checks if the expression is in a closed state.

Returns:
true if the expression is in a closed state, false otherwise

close

void close()
           throws XQException
Closes the expression object and release associated resources. Once the expression is closed, all methods on this object other than the close or isClosed will raise exceptions. This also closes any result sequences obtained from this expression. Calling close on an XQExpression object that is already closed has no effect.

Throws:
XQException - if there are errors when closing the expression

executeCommand

void executeCommand(String cmd)
                    throws XQException
Executes an implementation-defined command. Calling this method implicitly closes any previous result sequence obtained from this expression.

Parameters:
cmd - the input command as a string
Throws:
XQException - if (1) there are errors when executing the command, or (2) the expression is in a closed state

executeCommand

void executeCommand(Reader cmd)
                    throws XQException
Executes an implementation-defined command. Calling this method implicitly closes any previous result sequence obtained from this expression.

Parameters:
cmd - the input command as a string reader
Throws:
XQException - if (1) there are errors when executing the command, (2) the expression is in a closed state, or (3) the execution is cancelled

executeQuery

XQResultSequence executeQuery(String query)
                              throws XQException
Executes a query expression. This implicitly closes any previous result sequences obtained from this expression.

Parameters:
query - the input query expression string. Cannot be null
Returns:
an XQResultSequence object containing the result of the query execution
Throws:
XQException - if (1) there are errors when executing the query, (2) the expression is in a closed state, (3) the execution is cancelled, (4) the query parameter is null

executeQuery

XQResultSequence executeQuery(Reader query)
                              throws XQException
Executes a query expression. This implicitly closes any previous result sequences obtained from this expression.

Parameters:
query - the input query expression as a reader object. Cannot be null
Returns:
an XQResultSequence object containing the result of the query execution
Throws:
XQException - if (1) there are errors when executing the query, (2) the expression is in a closed state, (3) the execution is cancelled, or (4) the query parameter is null

executeQuery

XQResultSequence executeQuery(InputStream query)
                              throws XQException
Executes a query expression. This implicitly closes any previous result sequences obtained from this expression. If the query specifies a version declaration including an encoding, the XQJ implementation may try use this information to parse the query. In absence of the version declaration, the assumed encoding is implementation dependent.

Parameters:
query - the input query expression as a input stream object. Cannot be null
Returns:
an XQResultSequence containing the result of the query execution
Throws:
XQException - if (1) there are errors when executing the query, (2) the expression is in a closed state, (3) the execution is cancelled, or (4) the xquery parameter is null

getStaticContext

XQStaticContext getStaticContext()
                                 throws XQException
Gets an XQStaticContext representing the values for all expression properties. Note that these properties cannot be changed; in order to change, a new XQExpression needs to be created.

Returns:
an XQStaticContext representing the values for all expression properties
Throws:
XQException - if the expression is in a closed state


Copyright (c) 2004-2010 Saxonica Limited. All rights reserved.