You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlbeans-cvs@xml.apache.org by da...@apache.org on 2004/03/03 03:03:50 UTC
cvs commit: xml-xmlbeans/v1/test/src/drt/drtcases JaxenXPathTests.java
daveremy 2004/03/02 18:03:50
Modified: v1/src/xmlpublic/org/apache/xmlbeans XmlBeans.java
XmlOptions.java
v1/src/xmlstore/org/apache/xmlbeans/impl/store Path.java
XqrlDelegate.java
v1/test/src/drt/drtcases JaxenXPathTests.java
Log:
on behalf of Kevin Krouse
adding option for xqrl external variable binding
DRTs: passed
Revision Changes Path
1.4 +3 -1 xml-xmlbeans/v1/src/xmlpublic/org/apache/xmlbeans/XmlBeans.java
Index: XmlBeans.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v1/src/xmlpublic/org/apache/xmlbeans/XmlBeans.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XmlBeans.java 12 Feb 2004 20:06:01 -0000 1.3
+++ XmlBeans.java 3 Mar 2004 02:03:50 -0000 1.4
@@ -191,7 +191,9 @@
* @param options Options for the query. For example, you can call
* the {@link XmlOptions#setXqueryCurrentNodeVar(String) XmlOptions.setXqueryCurrentNodeVar(String)}
* method to specify a particular name for the expression
- * variable that indicates the context node.
+ * variable that indicates the context node and the
+ * {@link XmlOptions#setXqueryVariables(Map) XmlOptions.setXqueryVariables(Map)}
+ * method to map external variable names to values.
*/
public static String compileQuery ( String queryExpr, XmlOptions options )
throws XmlException
1.5 +19 -0 xml-xmlbeans/v1/src/xmlpublic/org/apache/xmlbeans/XmlOptions.java
Index: XmlOptions.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v1/src/xmlpublic/org/apache/xmlbeans/XmlOptions.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- XmlOptions.java 12 Feb 2004 20:06:01 -0000 1.4
+++ XmlOptions.java 3 Mar 2004 02:03:50 -0000 1.5
@@ -426,6 +426,23 @@
}
/**
+ * Map the names and values of external variables in an xquery
+ * expression. The keys of the map are the variable names
+ * in the query without the '$' prefix. The values of the map
+ * are objects and can be any of the primitive wrapper classes,
+ * String, XmlObject, or XmlCursor. The mapping only applies to
+ * xquery and has no effect on xpath expressions.
+ *
+ * @param varMap a map from <code>String</code>s to variable instances.
+ *
+ * @see XmlObject#execQuery
+ * @see XmlCursor#execQuery
+ */
+ public XmlOptions setXqueryVariables (Map varMap) {
+ return set( XQUERY_VARIABLE_MAP, varMap );
+ }
+
+ /**
* This option sets the document source name into the xml store
* when parsing a document. If a document is parsed from a
* File or URI, it is automatically set to the URI of the
@@ -594,6 +611,8 @@
/** @exclude */
public static final String XQUERY_CURRENT_NODE_VAR = "XQUERY_CURRENT_NODE_VAR";
+ /** @exclude */
+ public static final String XQUERY_VARIABLE_MAP = "XQUERY_VARIABLE_MAP";
/** @exclude */
public static final String CHARACTER_ENCODING = "CHARACTER_ENCODING";
1.5 +14 -5 xml-xmlbeans/v1/src/xmlstore/org/apache/xmlbeans/impl/store/Path.java
Index: Path.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v1/src/xmlstore/org/apache/xmlbeans/impl/store/Path.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Path.java 12 Feb 2004 20:06:04 -0000 1.4
+++ Path.java 3 Mar 2004 02:03:50 -0000 1.5
@@ -121,6 +121,16 @@
options = XmlOptions.maskNull( options );
+ // ensure options doesn't contain XQuery variable mapping.
+ // someday we should implement this in all the pathing engines
+ // but for now it only applies to the xqrl.
+ if (options.hasOption( XmlOptions.XQUERY_VARIABLE_MAP ))
+ {
+ throw
+ new XmlRuntimeException(
+ "XmlOptions.XQUERY_VARIABLE_MAP is not allowed in XPath expressions.");
+ }
+
String currentNodeVar = getCurrentNodeVar( options );
synchronized ( _xbeanPathCache )
@@ -155,7 +165,7 @@
if (path == null)
{
- path = XqrlPathImpl.create( pathExpr, currentNodeVar );
+ path = XqrlPathImpl.create( pathExpr, options );
if (path != null)
_xqrlPathCache.put( path.getPathExpr(), path );
@@ -202,7 +212,6 @@
public static String getCompiledQuery ( String queryExpr, XmlOptions options )
{
Query query = null;
- String currentNodeVar = getCurrentNodeVar( options );
synchronized ( _xqrlQueryCache )
{
@@ -210,7 +219,7 @@
if (query == null)
{
- query = XqrlDelegate.compileQuery( queryExpr, currentNodeVar );
+ query = XqrlDelegate.compileQuery( queryExpr, options );
if (query != null)
_xqrlQueryCache.put( query.getQueryExpr(), query );
@@ -250,11 +259,11 @@
private String _pathExpr;
private Query _compiledPath;
- static Path create ( String pathExpr, String currentNodeVar )
+ static Path create ( String pathExpr, XmlOptions options )
{
return new XqrlPathImpl(
pathExpr,
- XqrlDelegate.compilePath( pathExpr, currentNodeVar ) );
+ XqrlDelegate.compilePath( pathExpr, options ) );
}
protected PathEngine execute (
1.4 +7 -6 xml-xmlbeans/v1/src/xmlstore/org/apache/xmlbeans/impl/store/XqrlDelegate.java
Index: XqrlDelegate.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v1/src/xmlstore/org/apache/xmlbeans/impl/store/XqrlDelegate.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XqrlDelegate.java 12 Feb 2004 20:06:04 -0000 1.3
+++ XqrlDelegate.java 3 Mar 2004 02:03:50 -0000 1.4
@@ -16,6 +16,7 @@
package org.apache.xmlbeans.impl.store;
import java.lang.reflect.Method;
+import org.apache.xmlbeans.XmlOptions;
public final class XqrlDelegate
{
@@ -33,19 +34,19 @@
}
}
- static Path.Query compilePath ( String path, String currentNodeVar )
+ static Path.Query compilePath ( String path, XmlOptions options )
{
return
(Path.Query)
- invoke( _compilePath, new Object[] { path, currentNodeVar } );
+ invoke( _compilePath, new Object[] { path, options } );
}
- static Path.Query compileQuery ( String queryExpr, String currentNodeVar )
+ static Path.Query compileQuery ( String queryExpr, XmlOptions options )
{
return
(Path.Query)
invoke(
- _compileQuery, new Object[] { queryExpr, currentNodeVar, new Boolean(true) } );
+ _compileQuery, new Object[] { queryExpr, options, new Boolean(true) } );
}
private static void throwRuntimeException ( Throwable e )
@@ -113,12 +114,12 @@
_compilePath =
xqrlImpl.getDeclaredMethod(
"compilePath",
- new Class[] { String.class, String.class } );
+ new Class[] { String.class, XmlOptions.class } );
_compileQuery =
xqrlImpl.getDeclaredMethod(
"compileQuery",
- new Class[] { String.class, String.class, Boolean.class } );
+ new Class[] { String.class, XmlOptions.class, Boolean.class } );
}
catch ( Exception e )
1.4 +1 -1 xml-xmlbeans/v1/test/src/drt/drtcases/JaxenXPathTests.java
Index: JaxenXPathTests.java
===================================================================
RCS file: /home/cvs/xml-xmlbeans/v1/test/src/drt/drtcases/JaxenXPathTests.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- JaxenXPathTests.java 12 Feb 2004 20:06:04 -0000 1.3
+++ JaxenXPathTests.java 3 Mar 2004 02:03:50 -0000 1.4
@@ -42,7 +42,7 @@
}
catch (ClassNotFoundException e)
{
- System.out.println("\n\nWARNING!!!\n\nJaxen.jar not on classpath skipping this test.\n\n");
+ System.out.println("\n\nWARNING!!!\n\nJaxen.jar not on classpath skipping JaxenXPathTests.\n\n");
return new TestSuite();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xmlbeans-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xmlbeans-cvs-help@xml.apache.org