|
From: <pm_...@us...> - 2011-05-14 15:31:41
|
Revision: 4340
http://mxquery.svn.sourceforge.net/mxquery/?rev=4340&view=rev
Author: pm_fischer
Date: 2011-05-14 15:31:32 +0000 (Sat, 14 May 2011)
Log Message:
-----------
Merge branch 'XQ3.0-functions'
Modified Paths:
--------------
trunk/MXQuery/build.xml
trunk/MXQuery/midp_src/ch/ethz/mxquery/util/IOLib.java
trunk/MXQuery/midp_src/ch/ethz/mxquery/xdmio/XDMInputFactory.java
trunk/MXQuery/src/ch/ethz/mxquery/cmdline/MXQuery.java
trunk/MXQuery/src/ch/ethz/mxquery/datamodel/MXQueryDouble.java
trunk/MXQuery/src/ch/ethz/mxquery/exceptions/MXQueryException.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/FG.xml
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/DataValuesIterator.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Doc.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/DocumentUri.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Node_Name.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/SubSequenceIterator.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/math/TransMath.java
trunk/MXQuery/src/ch/ethz/mxquery/model/Iterator.java
trunk/MXQuery/src/ch/ethz/mxquery/query/parser/Parser.java
trunk/MXQuery/src/ch/ethz/mxquery/util/FileReader.java
trunk/MXQuery/src/ch/ethz/mxquery/util/IOLib.java
trunk/MXQuery_Testing/XQTests/Queries/inserttest.xml
trunk/MXQuery_Testing/XQTests/Sources/doc.xml
trunk/MXQuery_Testing/src/ch/ethz/mxquery/test/XQ11FunctionsTest.java
trunk/MXQuery_Testing/src/ch/ethz/mxquery/test/scripting/ScriptingUseCases.java
trunk/MXQuery_Testing/src/ch/ethz/mxquery/testsuite/TestSuite.java
trunk/MXQuery_Testing/src/ch/ethz/mxquery/testsuite/internal/DictionaryBasedStemmer.java
Added Paths:
-----------
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/AvailEnvVars.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/EnvVar.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Head.java
trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Tail.java
trunk/MXQuery_Testing/XQTests/Sources/iso.txt
Modified: trunk/MXQuery/build.xml
===================================================================
--- trunk/MXQuery/build.xml 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/build.xml 2011-05-14 15:31:32 UTC (rev 4340)
@@ -184,7 +184,7 @@
<delete file="${customtmp.dir}/ch/ethz/mxquery/sms/activeStore/ReadDataThread.java" />
<delete file="${customtmp.dir}/ch/ethz/mxquery/functions/fn/NormalizeUnicode.java" />
-
+ <delete file="${customtmp.dir}/ch/ethz/mxquery/functions/fn/AvailEnvVars.java"/>
<delete file="${customtmp.dir}/ch/ethz/mxquery/iterators/PFFLWORIterator.java" />
<delete file="${customtmp.dir}/ch/ethz/mxquery/iterators/PGFLWORIterator.java"/>
<delete file="${customtmp.dir}/ch/ethz/mxquery/iterators/PGroupBy.java"/>
@@ -444,6 +444,8 @@
<delete file="${midptmp.dir}/ch/ethz/mxquery/functions/fn/Round.java"/>
<delete file="${midptmp.dir}/ch/ethz/mxquery/functions/fn/Put.java"/>
<delete file="${midptmp.dir}/ch/ethz/mxquery/functions/fn/Matches.java"/>
+ <delete file="${midptmp.dir}/ch/ethz/mxquery/functions/fn/AvailEnvVars.java"/>
+ <delete file="${midptmp.dir}/ch/ethz/mxquery/functions/fn/EnvVar.java"/>
<delete file="${midptmp.dir}/ch/ethz/mxquery/functions/fn/IRItoURI.java"/>
<delete file="${midptmp.dir}/ch/ethz/mxquery/functions/fn/DocAvailable.java"/>
<delete file="${midptmp.dir}/ch/ethz/mxquery/functions/fn/NormalizeUnicode.java"/>
Modified: trunk/MXQuery/midp_src/ch/ethz/mxquery/util/IOLib.java
===================================================================
--- trunk/MXQuery/midp_src/ch/ethz/mxquery/util/IOLib.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/midp_src/ch/ethz/mxquery/util/IOLib.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -137,15 +137,16 @@
return encoding;
}
- public static Reader getInput (String uri, boolean xquery, QueryLocation loc) throws MXQueryException {
- String encoding = "utf-8";
+ public static Reader getInput (String uri, boolean xquery, String encoding, QueryLocation loc) throws MXQueryException {
+ if (encoding == null)
+ encoding = "utf-8";
InputStream ins = null;
try {
ins = Connector.openInputStream(uri);
- encoding = "iso-8859-1";
+ //encoding = "iso-8859-1";
String tempEncoding = IOLib.snoopEncoding8bit(ins, xquery);
if (tempEncoding != null) {
encoding = tempEncoding;
Modified: trunk/MXQuery/midp_src/ch/ethz/mxquery/xdmio/XDMInputFactory.java
===================================================================
--- trunk/MXQuery/midp_src/ch/ethz/mxquery/xdmio/XDMInputFactory.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/midp_src/ch/ethz/mxquery/xdmio/XDMInputFactory.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -49,7 +49,7 @@
public static XMLSource createXMLInput(Context ctx, String uri, boolean doc, int valMode, QueryLocation location) throws MXQueryException {
if (valMode == Context.NO_VALIDATION || valMode == Context.IGNORE_DTD)
- return new XPPImportAdapter(ctx,IOLib.getInput(uri, false, location),doc,location);
+ return new XPPImportAdapter(ctx,IOLib.getInput(uri, false, null,location),doc,location);
else {
throw new MXQueryException(ErrorCodes.A0002_EC_NOT_SUPPORTED,"XML Input validation not supported on CLDC",location);
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/cmdline/MXQuery.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/cmdline/MXQuery.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/cmdline/MXQuery.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -536,7 +536,7 @@
throw new Exception(errorMsg+compString[j]);
QName varName = getVar(ctx, argValPair);
String uri = URIUtils.resolveURI(ctx.getBaseURI(),argValPair[1],QueryLocation.OUTSIDE_QUERY_LOC);
- Reader rd = IOLib.getInput(uri, false, QueryLocation.OUTSIDE_QUERY_LOC);
+ Reader rd = IOLib.getInput(uri, false, null, QueryLocation.OUTSIDE_QUERY_LOC);
VariableHolder vh = ctx.getVariable(varName);
XDMIterator xmlIt;
if (vh != null && vh.getType() != null && Type.isAtomicType(vh.getType().getType(),Context.getDictionary())) {
Modified: trunk/MXQuery/src/ch/ethz/mxquery/datamodel/MXQueryDouble.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/datamodel/MXQueryDouble.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/datamodel/MXQueryDouble.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -108,6 +108,8 @@
public MXQueryDouble(double d) {
val = d;
+ if ((new Float(d)).equals(new Float(-0.0)))
+ negativeZero = true;
}
/** Methods: */
Modified: trunk/MXQuery/src/ch/ethz/mxquery/exceptions/MXQueryException.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/exceptions/MXQueryException.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/exceptions/MXQueryException.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -93,7 +93,7 @@
if (loc.getFile()!=null) {
str.append("Error was not caused in main query module, but in the imported query module ").append(loc.getFile()).append("\n");
try {
- query = FileReader.getContents(IOLib.getInput(loc.getFile(), true, QueryLocation.OUTSIDE_QUERY_LOC));
+ query = FileReader.getContents(IOLib.getInput(loc.getFile(), true, null, QueryLocation.OUTSIDE_QUERY_LOC));
} catch (MXQueryException e) {
str.append("Could not retrieve module contents, bailing out");
return str.toString();
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/FG.xml
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/FG.xml 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/FG.xml 2011-05-14 15:31:32 UTC (rev 4340)
@@ -62,6 +62,11 @@
<className type="xs:time">DateTimeAdjustTimezone</className>
</functionDescription>
<functionDescription>
+ <functionName>available-environment-variables</functionName>
+ <parameters/>
+ <className>AvailEnvVars</className>
+ </functionDescription>
+ <functionDescription>
<functionName>avg</functionName>
<parameters>
<paramType>xs:anyAtomicType*</paramType>
@@ -185,6 +190,11 @@
<parameters> </parameters>
<className>CurrentTime</className>
</functionDescription>
+ <functionDescription>
+ <functionName>data</functionName>
+ <parameters/>
+ <className>DataValuesIterator</className>
+ </functionDescription>
<functionDescription>
<functionName>data</functionName>
<parameters>
@@ -272,6 +282,11 @@
</parameters>
<className>DocAvailable</className>
</functionDescription>
+ <functionDescription>
+ <functionName>document-uri</functionName>
+ <parameters/>
+ <className>DocumentUri</className>
+ </functionDescription>
<functionDescription>
<functionName>document-uri</functionName>
<parameters>
@@ -326,6 +341,13 @@
<className>EndsWith</className>
</functionDescription>
<functionDescription>
+ <functionName>environment-variable</functionName>
+ <parameters>
+ <paramType>xs:string</paramType>
+ </parameters>
+ <className>EnvVar</className>
+ </functionDescription>
+ <functionDescription>
<functionName>error</functionName>
<parameters>
<paramType>xs:QName?</paramType>
@@ -414,6 +436,13 @@
<className>GenerateId</className>
</functionDescription>
<functionDescription>
+ <functionName>head</functionName>
+ <parameters>
+ <paramType>item()?</paramType>
+ </parameters>
+ <className>Head</className>
+ </functionDescription>
+ <functionDescription>
<functionName>hours-from-dateTime</functionName>
<parameters>
<paramType>xs:dateTime?</paramType>
@@ -692,6 +721,11 @@
</functionDescription>
<functionDescription>
<functionName>node-name</functionName>
+ <parameters/>
+ <className>Node_Name</className>
+ </functionDescription>
+ <functionDescription>
+ <functionName>node-name</functionName>
<parameters>
<paramType>node()?</paramType>
</parameters>
@@ -751,14 +785,14 @@
<className>One_or_more</className>
</functionDescription>
<functionDescription>
- <functionName>parse</functionName>
+ <functionName>parse-xml</functionName>
<parameters>
<paramType>string</paramType>
</parameters>
<className>Parse</className>
</functionDescription>
<functionDescription>
- <functionName>parse</functionName>
+ <functionName>parse-xml</functionName>
<parameters>
<paramType>string</paramType>
<paramType>string</paramType>
@@ -1081,6 +1115,13 @@
</parameters>
<className>Sum</className>
</functionDescription>
+ <functionDescription>
+ <functionName>tail</functionName>
+ <parameters>
+ <paramType>item()*</paramType>
+ </parameters>
+ <className>Tail</className>
+ </functionDescription>
<functionDescription>
<functionName>timezone-from-date</functionName>
<parameters>
@@ -1149,6 +1190,44 @@
<className>Unordered</className>
</functionDescription>
<functionDescription>
+ <functionName>unparsed-text</functionName>
+ <parameters>
+ <paramType>xs:string?</paramType>
+ </parameters>
+ <className op="unparsed-text">Doc</className>
+ </functionDescription>
+ <functionDescription>
+ <functionName>unparsed-text</functionName>
+ <parameters>
+ <paramType>xs:string?</paramType>
+ <paramType>xs:string</paramType>
+ </parameters>
+ <className op="unparsed-text">Doc</className>
+ </functionDescription>
+ <functionDescription>
+ <functionName>unparsed-text-lines</functionName>
+ <parameters>
+ <paramType>xs:string?</paramType>
+ </parameters>
+ <className op="unparsed-text-lines">Doc</className>
+ </functionDescription>
+ <functionDescription>
+ <functionName>unparsed-text-lines</functionName>
+ <parameters>
+ <paramType>xs:string?</paramType>
+ <paramType>xs:string</paramType>
+ </parameters>
+ <className op="unparsed-text-lines">Doc</className>
+ </functionDescription>
+ <functionDescription>
+ <functionName>unparsed-text-available</functionName>
+ <parameters>
+ <paramType>xs:string?</paramType>
+ </parameters>
+ <className>DocAvailable</className>
+ </functionDescription>
+
+ <functionDescription>
<functionName>upper-case</functionName>
<parameters>
<paramType>xs:string?</paramType>
@@ -1512,7 +1591,8 @@
<functionDescription>
<functionName>atan2</functionName>
<parameters>
- <paramType>xs:double?</paramType>
+ <paramType>xs:double</paramType>
+ <paramType>xs:double</paramType>
</parameters>
<className op="atan2">TransMath</className>
</functionDescription>
@@ -1635,4 +1715,4 @@
<className>SubFiles2</className>
</functionDescription>
</functionGroup>
-</functionGallery>
\ No newline at end of file
+</functionGallery>
Added: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/AvailEnvVars.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/AvailEnvVars.java (rev 0)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/AvailEnvVars.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -0,0 +1,38 @@
+package ch.ethz.mxquery.functions.fn;
+
+import java.util.Vector;
+
+import ch.ethz.mxquery.contextConfig.Context;
+import ch.ethz.mxquery.datamodel.xdm.TextToken;
+import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
+import ch.ethz.mxquery.exceptions.MXQueryException;
+import ch.ethz.mxquery.model.CurrentBasedIterator;
+import ch.ethz.mxquery.model.TokenSequenceIterator;
+import ch.ethz.mxquery.model.XDMIterator;
+
+public class AvailEnvVars extends CurrentBasedIterator {
+
+ public TokenInterface next() throws MXQueryException {
+ if (called == 0) {
+ called++;
+ Vector vars = new Vector();
+ java.util.Iterator envVars = System.getenv().keySet().iterator();
+ // create a snapshot of the environment variables
+ while (envVars.hasNext()) {
+ TokenInterface tok = new TextToken(null,(String)envVars.next());
+ vars.add(tok);
+ }
+ current = new TokenSequenceIterator(vars);
+ }
+ return current.next();
+ }
+
+ protected XDMIterator copy(Context context, XDMIterator[] subIters,
+ Vector nestedPredCtxStack) throws MXQueryException {
+ AvailEnvVars copy = new AvailEnvVars();
+ copy.setContext(context, true);
+ copy.setSubIters(subIters);
+ return copy;
+ }
+
+}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/DataValuesIterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/DataValuesIterator.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/DataValuesIterator.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -64,9 +64,6 @@
DataValuesIterator(Context ctx, XDMIterator iter, QueryLocation location) {
super(ctx, location);
- if (iter == null) {
- throw new IllegalArgumentException();
- }
this.subIters = new XDMIterator[] { iter };
}
@@ -74,10 +71,8 @@
super(null, location);
this.fnData = true;
- if (iter == null) {
- throw new IllegalArgumentException();
- }
- this.subIters = new XDMIterator[] { iter };
+ if (iter != null)
+ this.subIters = new XDMIterator[] { iter };
}
public DataValuesIterator() {
@@ -89,7 +84,7 @@
if (!evalComplete) {
if (!(current instanceof SequenceIterator))
- current = getValue(subIters[0]);
+ current = getValue(getNodeIteratorOrContext(subIters, 1,context, loc));
TokenInterface e = current.next();
if (e.getEventType() == Type.END_SEQUENCE) {
evalComplete = true;
@@ -740,7 +735,11 @@
protected XDMIterator copy(Context context, XDMIterator[] subIters,
Vector nestedPredCtxStack) throws MXQueryException {
- XDMIterator copy = new DataValuesIterator(subIters[0], loc);
+ XDMIterator copy ;
+ if (subIters != null && subIters.length > 0)
+ copy = new DataValuesIterator(subIters[0], loc);
+ else
+ copy = new DataValuesIterator(null,loc);
copy.setContext(context, false);
return copy;
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Doc.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Doc.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Doc.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -22,17 +22,20 @@
import ch.ethz.mxquery.contextConfig.Context;
import ch.ethz.mxquery.datamodel.types.Type;
import ch.ethz.mxquery.datamodel.types.TypeInfo;
+import ch.ethz.mxquery.datamodel.xdm.TextToken;
import ch.ethz.mxquery.datamodel.xdm.Token;
import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
import ch.ethz.mxquery.exceptions.DynamicException;
import ch.ethz.mxquery.exceptions.ErrorCodes;
import ch.ethz.mxquery.exceptions.MXQueryException;
-import ch.ethz.mxquery.exceptions.TypeException;
import ch.ethz.mxquery.functions.RequestTypeMulti;
+import ch.ethz.mxquery.iterators.TokenIterator;
import ch.ethz.mxquery.model.CurrentBasedIterator;
import ch.ethz.mxquery.model.EmptySequenceIterator;
+import ch.ethz.mxquery.model.TokenSequenceIterator;
import ch.ethz.mxquery.model.XDMIterator;
import ch.ethz.mxquery.util.IOLib;
+import ch.ethz.mxquery.util.LineReader;
import ch.ethz.mxquery.util.URIUtils;
import ch.ethz.mxquery.xdmio.XDMInputFactory;
import ch.ethz.mxquery.xdmio.XMLSource;
@@ -43,8 +46,12 @@
*
*/
public class Doc extends CurrentBasedIterator implements RequestTypeMulti{
- private boolean inValidateExpression = false;
- private boolean tidyInput = false;
+ private final int OPERATION_DOC = 0;
+ private final int OPERATION_TIDY =1;
+ private final int OPERATION_UNPARSED=2;
+ private final int OPERATION_UNPARSED_LINES=3;
+private boolean inValidateExpression = false;
+ private int operation = OPERATION_DOC;
private String docURI = null;
private Reader rd = null; // keep around to close
@@ -60,10 +67,6 @@
public void setInValidateExpression(boolean inValidateExpression) {
this.inValidateExpression = inValidateExpression;
}
-
- public void setTidyInput (boolean tidyInput) {
- this.tidyInput = tidyInput;
- }
public TokenInterface next() throws MXQueryException {
if (called == 0) {
@@ -93,54 +96,90 @@
protected void init() throws MXQueryException {
- XDMIterator parameter = subIters[0];
- if (parameter == null) {
- // this should never happen!!!
- throw new IllegalArgumentException("No parameter for fn:doc() function given!");
- }
- TokenInterface tok = parameter.next();
- int type = Type.getEventTypeSubstituted(tok.getEventType(), Context.getDictionary());
+
+ String add = getStringValueOrEmpty(subIters[0]);
+
- if (type == Type.END_SEQUENCE) {
+ if (add == null) {
current = new EmptySequenceIterator(context, loc);
return;
}
- if (Type.typePromoteableTo(type, Type.STRING,Context.getDictionary())|| type == Type.UNTYPED_ATOMIC) {
-
- String add = tok.getText();
- String uri = null;
- try {
- uri = URIUtils.resolveURI(context.getBaseURI(),add,loc);
- } catch (DynamicException de) {
- if (de.getErrorCode().equals(ErrorCodes.E0004_TYPE_INAPPROPRIATE_TYPE)) {
- throw new DynamicException(ErrorCodes.F0017_INVALID_ARGUMENT_TO_FN_DOC, "Invalid URI given to fn:doc(): "+add, loc);
- }
- else
- throw de;
- }
- if (tidyInput)
- rd = IOLib.getInput(uri, false, loc);
- XMLSource cur;
- try {
+
+ String encoding = null;
+
+ if (subIters.length > 1) {
+ encoding = getStringValue(subIters[1]);
+ }
+
+ String uri = null;
+ try {
+ uri = URIUtils.resolveURI(context.getBaseURI(),add,loc);
+ } catch (DynamicException de) {
+ if (de.getErrorCode().equals(ErrorCodes.E0004_TYPE_INAPPROPRIATE_TYPE)) {
+ throw new DynamicException(ErrorCodes.F0017_INVALID_ARGUMENT_TO_FN_DOC, "Invalid URI given to fn:doc(): "+add, loc);
+ }
+ else
+ throw de;
+ }
+ if (operation!=OPERATION_DOC)
+ rd = IOLib.getInput(uri, false, encoding, loc);
+ XDMIterator cur = null;
+ try {
+ switch(operation) {
+ case OPERATION_DOC:
if (isInValidateExpression())
- cur = XDMInputFactory.createXMLInput(context, rd, true, Context.SCHEMA_VALIDATION_STRICT, loc);
- else if (tidyInput)
- cur = XDMInputFactory.createTidyInput(context, rd, loc);
- else cur = XDMInputFactory.createXMLInput(context, uri, true, context.getInputValidationMode(), loc);
- cur.setURI(uri);
- docURI = uri;
- current = cur;
- } catch (MXQueryException me) {
- try {
- rd.close();
- } catch (IOException ie) {
- //
- }
- throw me;
+ cur = XDMInputFactory.createXMLInput(context, rd, true, Context.SCHEMA_VALIDATION_STRICT, loc);
+ else
+ cur = XDMInputFactory.createXMLInput(context, uri, true, context.getInputValidationMode(), loc);
+ ((XMLSource)cur).setURI(uri);
+ break;
+ case OPERATION_TIDY:
+ cur = XDMInputFactory.createTidyInput(context, rd, loc);
+ ((XMLSource)cur).setURI(uri);
+ break;
+ case OPERATION_UNPARSED:
+ StringBuffer sb = new StringBuffer();
+ LineReader lr = new LineReader(rd);
+ String line = lr.readLine();
+ boolean first = true;
+ while(line!=null) {
+ if (first)
+ first=false;
+ else
+ sb.append('\n');
+ sb.append(line);
+ line = lr.readLine();
}
+ cur = new TokenIterator(context,sb.toString(),loc);
+ break;
+ case OPERATION_UNPARSED_LINES:
+ Vector lines = new Vector();
+ lr = new LineReader(rd);
+ line = lr.readLine();
+ while(line!=null) {
+ lines.addElement(new TextToken(null, line));
+ line = lr.readLine();
+ }
+ cur = new TokenSequenceIterator(lines);
+ break;
- } else {
- throw new TypeException(ErrorCodes.E0004_TYPE_INAPPROPRIATE_TYPE,"Invalid argument given to fn:doc", loc);
+ }
+ docURI = uri;
+ current = cur;
+ } catch (MXQueryException me) {
+ try {
+ rd.close();
+ } catch (IOException ie) {
+ //
+ }
+ throw me;
+ } catch (IOException e) {
+ try {
+ rd.close();
+ } catch (IOException ie) {
+ //
+ }
+ throw new MXQueryException(ErrorCodes.F0014_ERROR_RETRIEVING_RESOURCE, e.toString(), loc);
}
}
@@ -152,7 +191,7 @@
Doc copy = new Doc();
copy.setContext(context, true);
copy.setInValidateExpression(inValidateExpression);
- copy.setTidyInput(this.tidyInput);
+ copy.operation = operation;
copy.setConstModePreserve(this.constModePreserve);
copy.setSubIters(subIters);
return copy;
@@ -182,7 +221,11 @@
public void setOperation(String type) throws MXQueryException {
if (type.equals("tidy"))
- tidyInput = true;
+ operation = OPERATION_TIDY;
+ else if (type.equals("unparsed-text"))
+ operation = OPERATION_UNPARSED;
+ else if (type.equals("unparsed-text-lines"))
+ operation = OPERATION_UNPARSED_LINES;
else throw new MXQueryException(ErrorCodes.A0009_EC_EVALUATION_NOT_POSSIBLE, "Incorrect operation for Doc", loc);
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/DocumentUri.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/DocumentUri.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/DocumentUri.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -31,7 +31,8 @@
public class DocumentUri extends TokenBasedIterator {
protected void init() throws MXQueryException {
- TokenInterface tok = subIters[0].next();
+ XDMIterator iter = getNodeIteratorOrContext(subIters, 1, context, loc);
+ TokenInterface tok = iter.next();
if (tok.getEventType() == Type.START_DOCUMENT) {
// Take advantage of our Node ID implementation -
// each node ID has a reference to the store it comes from,
Added: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/EnvVar.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/EnvVar.java (rev 0)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/EnvVar.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -0,0 +1,32 @@
+package ch.ethz.mxquery.functions.fn;
+
+import java.util.Vector;
+
+import ch.ethz.mxquery.contextConfig.Context;
+import ch.ethz.mxquery.datamodel.xdm.TextToken;
+import ch.ethz.mxquery.datamodel.xdm.Token;
+import ch.ethz.mxquery.exceptions.MXQueryException;
+import ch.ethz.mxquery.model.TokenBasedIterator;
+import ch.ethz.mxquery.model.XDMIterator;
+
+public class EnvVar extends TokenBasedIterator {
+
+ protected void init() throws MXQueryException {
+ String varName = getStringValue(subIters[0]);
+ String varValue = System.getenv(varName);
+ if (varValue != null)
+ currentToken = new TextToken(null,varValue);
+ else
+ currentToken = Token.END_SEQUENCE_TOKEN;
+
+ }
+
+ protected XDMIterator copy(Context context, XDMIterator[] subIters,
+ Vector nestedPredCtxStack) throws MXQueryException {
+ EnvVar copy = new EnvVar();
+ copy.setContext(context, true);
+ copy.setSubIters(subIters);
+ return copy;
+ }
+
+}
Added: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Head.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Head.java (rev 0)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Head.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -0,0 +1,60 @@
+package ch.ethz.mxquery.functions.fn;
+
+import java.util.Vector;
+
+import ch.ethz.mxquery.contextConfig.Context;
+import ch.ethz.mxquery.datamodel.types.Type;
+import ch.ethz.mxquery.datamodel.xdm.Token;
+import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
+import ch.ethz.mxquery.exceptions.MXQueryException;
+import ch.ethz.mxquery.model.CurrentBasedIterator;
+import ch.ethz.mxquery.model.XDMIterator;
+
+public class Head extends CurrentBasedIterator {
+ int position = 0;
+ public TokenInterface next() throws MXQueryException {
+ TokenInterface retToken;
+
+ if (endOfSeq)
+ return Token.END_SEQUENCE_TOKEN;
+
+ if (called == 0) {
+ called++;
+ current = subIters[0];
+ }
+ retToken = sub0Next();
+
+ if(position <=1) {
+ if (retToken.getEventType() == Type.END_SEQUENCE){
+ }
+ return retToken;
+ }
+ else {
+ //current = null;
+ endOfSeq = true;
+ return Token.END_SEQUENCE_TOKEN;
+ }
+ }
+
+ protected void resetImpl() throws MXQueryException {
+ super.resetImpl();
+ position = 0;
+ }
+
+
+ protected XDMIterator copy(Context context, XDMIterator[] subIters,
+ Vector nestedPredCtxStack) throws MXQueryException {
+ XDMIterator copy = new Head();
+ copy.setContext(context, true);
+ copy.setSubIters(subIters);
+ return copy;
+ }
+
+ private TokenInterface sub0Next() throws MXQueryException {
+ if (depth == 0) {
+ position++;
+ }
+ return super.getNext();
+ }
+
+}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Node_Name.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Node_Name.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Node_Name.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -32,12 +32,8 @@
public class Node_Name extends TokenBasedIterator {
protected void init() throws MXQueryException {
- if (subIters == null || subIters.length == 0) {
- currentToken = Token.END_SEQUENCE_TOKEN;
- return;
- }
- XDMIterator input = subIters[0];
+ XDMIterator input = getNodeIteratorOrContext(subIters, 1,context, loc);
TokenInterface inputToken = input.next();
int i = inputToken.getEventType();
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/SubSequenceIterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/SubSequenceIterator.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/SubSequenceIterator.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -19,7 +19,6 @@
import ch.ethz.mxquery.contextConfig.Context;
import ch.ethz.mxquery.datamodel.MXQueryDouble;
import ch.ethz.mxquery.datamodel.types.Type;
-import ch.ethz.mxquery.datamodel.types.TypeInfo;
import ch.ethz.mxquery.datamodel.xdm.Token;
import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
import ch.ethz.mxquery.exceptions.ErrorCodes;
@@ -161,9 +160,6 @@
startPos = -1;
len = -1;
position = 0;
- }
- public TypeInfo getStaticType() {
- return new TypeInfo(Type.ITEM,Type.OCCURRENCE_IND_ZERO_OR_MORE);
}
protected XDMIterator copy(Context context, XDMIterator[] subIters, Vector nestedPredCtxStack) throws MXQueryException {
Added: trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Tail.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Tail.java (rev 0)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/fn/Tail.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -0,0 +1,65 @@
+package ch.ethz.mxquery.functions.fn;
+
+import java.util.Vector;
+
+import ch.ethz.mxquery.contextConfig.Context;
+import ch.ethz.mxquery.datamodel.types.Type;
+import ch.ethz.mxquery.datamodel.xdm.Token;
+import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
+import ch.ethz.mxquery.exceptions.MXQueryException;
+import ch.ethz.mxquery.model.CurrentBasedIterator;
+import ch.ethz.mxquery.model.XDMIterator;
+
+public class Tail extends CurrentBasedIterator {
+ int position = 0;
+ public TokenInterface next() throws MXQueryException {
+ TokenInterface retToken;
+
+ if (endOfSeq)
+ return Token.END_SEQUENCE_TOKEN;
+
+ if (called == 0) {
+ called++;
+ current = subIters[0];
+ retToken = skipToStart();
+ } else {
+ retToken = sub0Next();
+ }
+ if (retToken.getEventType() == Type.END_SEQUENCE){
+ endOfSeq = true;
+ return Token.END_SEQUENCE_TOKEN;
+ }
+ return retToken;
+ }
+
+ protected void resetImpl() throws MXQueryException {
+ super.resetImpl();
+ position = 0;
+ }
+
+
+ protected XDMIterator copy(Context context, XDMIterator[] subIters,
+ Vector nestedPredCtxStack) throws MXQueryException {
+ XDMIterator copy = new Tail();
+ copy.setContext(context, true);
+ copy.setSubIters(subIters);
+ return copy;
+ }
+
+ private TokenInterface sub0Next() throws MXQueryException {
+ if (depth == 0) {
+ position++;
+ }
+ return super.getNext();
+ }
+
+ private TokenInterface skipToStart() throws MXQueryException{
+ while(true) {
+ TokenInterface tok = sub0Next();
+ if(position > 1 || tok.getEventType() == Type.END_SEQUENCE)
+ return tok;
+ }
+ }
+
+
+}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/functions/math/TransMath.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/functions/math/TransMath.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/functions/math/TransMath.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -146,7 +146,7 @@
break;
case TRANSMATH_ATAN2:
MXQueryDouble y = null;
- XDMIterator input2 = subIters[0];
+ XDMIterator input2 = subIters[1];
TokenInterface inputToken2 = input2.next();
int type2 = Type.getEventTypeSubstituted(inputToken2.getEventType(), Context.getDictionary());
@@ -155,16 +155,16 @@
currentToken = Token.END_SEQUENCE_TOKEN;
return;
case Type.INTEGER:
- y = new MXQueryDouble(inputToken.getLong());
+ y = new MXQueryDouble(inputToken2.getLong());
break;
case Type.UNTYPED_ATOMIC:
case Type.UNTYPED:
- y = new MXQueryDouble(inputToken.getText());
+ y = new MXQueryDouble(inputToken2.getText());
break;
case Type.DOUBLE:
case Type.FLOAT:
case Type.DECIMAL:
- y = inputToken.getDouble();
+ y = inputToken2.getDouble();
break;
default:
throw new TypeException(ErrorCodes.E0004_TYPE_INAPPROPRIATE_TYPE, "Invalid argument type"+Type.getTypeQName(type, Context.getDictionary()), loc);
Modified: trunk/MXQuery/src/ch/ethz/mxquery/model/Iterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/model/Iterator.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/model/Iterator.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -768,7 +768,7 @@
protected static XDMIterator getNodeIteratorOrContext(XDMIterator [] subIts, int pos,XQDynamicContext ctx, QueryLocation loc) throws MXQueryException,
DynamicException {
XDMIterator it;
- if (subIts != null && subIts.length == pos) {
+ if (subIts != null && subIts.length >= pos) {
it = subIts[pos-1];
} else {
VariableHolder contextVarHolder = ctx.getContextItem();
@@ -858,7 +858,7 @@
throws MXQueryException {
TokenInterface arg = source.next();
int aType = Type.getEventTypeSubstituted(arg.getEventType(),Context.getDictionary());
- if ( !(aType == Type.STRING ||aType == Type.UNTYPED_ATOMIC || aType == Type.END_SEQUENCE)) {
+ if ( !(Type.typePromoteableTo(aType, Type.STRING,Context.getDictionary()) ||aType == Type.UNTYPED_ATOMIC || aType == Type.END_SEQUENCE)) {
throw new TypeException(ErrorCodes.E0004_TYPE_INAPPROPRIATE_TYPE, "Single element of type "+"xs:string"+" expected", loc);
}
return arg.getText();
@@ -867,7 +867,7 @@
protected String getStringValue(XDMIterator source) throws MXQueryException {
TokenInterface arg = source.next();
int aType = Type.getEventTypeSubstituted(arg.getEventType(),Context.getDictionary());
- if ( !(aType == Type.STRING ||aType == Type.UNTYPED_ATOMIC )) {
+ if ( !(Type.typePromoteableTo(aType, Type.STRING,Context.getDictionary()) ||aType == Type.UNTYPED_ATOMIC )) {
throw new TypeException(ErrorCodes.E0004_TYPE_INAPPROPRIATE_TYPE, "Single element of type "+"xs:string"+" expected", loc);
}
return arg.getText();
Modified: trunk/MXQuery/src/ch/ethz/mxquery/query/parser/Parser.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/query/parser/Parser.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/query/parser/Parser.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -399,7 +399,7 @@
if (index < queryLen) {
throw new StaticException(
ErrorCodes.E0003_STATIC_NOT_A_VALID_GRAMMAR_ELEMENT,
- "Error while parsing: could not parse query completely",
+ "Error while parsing: could not parse query completely, trailing part: '"+query.substring(index)+"'",
getCurrentLoc());
}
return result;
Modified: trunk/MXQuery/src/ch/ethz/mxquery/util/FileReader.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/util/FileReader.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/util/FileReader.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -33,7 +33,7 @@
public class FileReader {
public static String getFileContent(String uri, boolean xquery) throws MXQueryException{
- Reader ir = IOLib.getInput(uri, xquery, QueryLocation.OUTSIDE_QUERY_LOC);
+ Reader ir = IOLib.getInput(uri, xquery, null, QueryLocation.OUTSIDE_QUERY_LOC);
return getContents(ir);
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/util/IOLib.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/util/IOLib.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery/src/ch/ethz/mxquery/util/IOLib.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -160,8 +160,9 @@
return encoding;
}
- public static Reader getInput (String toOpen, boolean xquery, QueryLocation loc) throws MXQueryException {
- String encoding = "utf-8";
+ public static Reader getInput (String toOpen, boolean xquery,String encoding, QueryLocation loc) throws MXQueryException {
+ if (encoding == null)
+ encoding = "utf-8";
InputStream ins = null;
URI uri;
try {
@@ -205,7 +206,7 @@
try {
ins = new FileInputStream(xml);
// snoop encoding
- encoding = "utf-8";
+ //encoding = "utf-8";
String tempEncoding = IOLib.snoopEncoding8bit(ins, xquery);
if (tempEncoding != null) {
encoding = tempEncoding;
Modified: trunk/MXQuery_Testing/XQTests/Queries/inserttest.xml
===================================================================
--- trunk/MXQuery_Testing/XQTests/Queries/inserttest.xml 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery_Testing/XQTests/Queries/inserttest.xml 2011-05-14 15:31:32 UTC (rev 4340)
@@ -1,2 +1,2 @@
<?xml version='1.0' encoding='UTF-8' ?><doc>
-<NEW>2009-04-22T12:24:14.024+01:00</NEW><bla/><bla/><bla/><NEW>2011-04-28T12:45:40.129+01:00</NEW><NEW>2011-04-28T12:45:40.539+01:00</NEW><bla/></doc>
\ No newline at end of file
+<NEW>2009-04-22T12:24:14.024+01:00</NEW><bla/><bla/><bla/><NEW>2011-04-28T12:45:40.129+01:00</NEW><NEW>2011-04-28T12:45:40.539+01:00</NEW><bla/><NEW>2011-05-13T08:34:41.919+01:00</NEW><NEW>2011-05-13T08:34:42.747+01:00</NEW><bla/></doc>
\ No newline at end of file
Modified: trunk/MXQuery_Testing/XQTests/Sources/doc.xml
===================================================================
--- trunk/MXQuery_Testing/XQTests/Sources/doc.xml 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery_Testing/XQTests/Sources/doc.xml 2011-05-14 15:31:32 UTC (rev 4340)
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8' ?><catalog>
- <book id="bk101"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk101"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
@@ -8,7 +8,7 @@
<description>An in-depth look at creating applications
with XML.</description>
</book>
- <book id="bk102"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk102"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
@@ -18,7 +18,7 @@
an evil sorceress, and her own childhood to become queen
of the world.</description>
</book>
- <book id="bk103"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk103"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Corets, Eva</author>
<title>Maeve Ascendant</title>
<genre>Fantasy</genre>
@@ -28,7 +28,7 @@
society in England, the young survivors lay the
foundation for a new society.</description>
</book>
- <book id="bk104"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk104"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Corets, Eva</author>
<title>Oberon's Legacy</title>
<genre>Fantasy</genre>
@@ -39,7 +39,7 @@
for the inhabitants of London. Sequel to Maeve
Ascendant.</description>
</book>
- <book id="bk105"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk105"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Corets, Eva</author>
<title>The Sundered Grail</title>
<genre>Fantasy</genre>
@@ -49,7 +49,7 @@
battle one another for control of England. Sequel to
Oberon's Legacy.</description>
</book>
- <book id="bk106"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk106"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Randall, Cynthia</author>
<title>Lover Birds</title>
<genre>Romance</genre>
@@ -58,7 +58,7 @@
<description>When Carla meets Paul at an ornithology
conference, tempers fly as feathers get ruffled.</description>
</book>
- <book id="bk107"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk107"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Thurman, Paula</author>
<title>Splish Splash</title>
<genre>Romance</genre>
@@ -67,7 +67,7 @@
<description>A deep sea diver finds true love twenty
thousand leagues beneath the sea.</description>
</book>
- <book id="bk108"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk108"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Knorr, Stefan</author>
<title>Creepy Crawlies</title>
<genre>Horror</genre>
@@ -76,7 +76,7 @@
<description>An anthology of horror stories about roaches,
centipedes, scorpions and other insects.</description>
</book>
- <book id="bk109"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk109"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Kress, Peter</author>
<title>Paradox Lost</title>
<genre>Science Fiction</genre>
@@ -86,7 +86,7 @@
Uncertainty Device, James Salway discovers the problems
of being quantum.</description>
</book>
- <book id="bk110"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk110"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>O'Brien, Tim</author>
<title>Microsoft .NET: The Programming Bible</title>
<genre>Computer</genre>
@@ -95,7 +95,7 @@
<description>Microsoft's .NET initiative is explored in
detail in this deep programmer's reference.</description>
</book>
- <book id="bk111"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk111"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>O'Brien, Tim</author>
<title>MSXML3: A Comprehensive Guide</title>
<genre>Computer</genre>
@@ -105,7 +105,7 @@
detail, with attention to XML DOM interfaces, XSLT processing,
SAX and more.</description>
</book>
- <book id="bk112"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
+ <book id="bk112"><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/><test/>
<author>Galos, Mike</author>
<title>Visual Studio 7: A Comprehensive Guide</title>
<genre>Computer</genre>
Added: trunk/MXQuery_Testing/XQTests/Sources/iso.txt
===================================================================
--- trunk/MXQuery_Testing/XQTests/Sources/iso.txt (rev 0)
+++ trunk/MXQuery_Testing/XQTests/Sources/iso.txt 2011-05-14 15:31:32 UTC (rev 4340)
@@ -0,0 +1,2 @@
+g\xE4nzlich
+fr\xF6hlich
\ No newline at end of file
Modified: trunk/MXQuery_Testing/src/ch/ethz/mxquery/test/XQ11FunctionsTest.java
===================================================================
--- trunk/MXQuery_Testing/src/ch/ethz/mxquery/test/XQ11FunctionsTest.java 2011-05-14 13:30:29 UTC (rev 4339)
+++ trunk/MXQuery_Testing/src/ch/ethz/mxquery/test/XQ11FunctionsTest.java 2011-05-14 15:31:32 UTC (rev 4340)
@@ -9,7 +9,7 @@
public void test_fn_round_half() throws Exception{
String query = "fn:round-half-to-even(<a>1.5</a>)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("2", resultBuffer.toString() );
};
@@ -17,32 +17,32 @@
public void test_fn_round_two_1() throws Exception{
String query = "fn:round(1,0)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("1", resultBuffer.toString() );
};
public void test_fn_round_two_2() throws Exception{
String query = "fn:round(1.511111,0) eq fn:round(1.511111)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("true", resultBuffer.toString());
};
public void test_fn_round_two_3() throws Exception{
String query = "fn:round(1.511111,1)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("1.5", resultBuffer.toString());
};
public void test_fn_round_two_4() throws Exception{
String query = "fn:round(1.511111,2)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("1.51", resultBuffer.toString());
};
public void test_string_join_one_1() throws Exception{
String query = "fn:string-join(('Hello','World'))";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("HelloWorld", resultBuffer.toString());
};
// add format-* functions
@@ -52,21 +52,21 @@
public void test_generate_id_1() throws Exception{
String query = "generate-id(<a/>) castable as xs:NCName";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("true", resultBuffer.toString() );
};
public void test_generate_id_2() throws Exception{
String query = "let $src := <a><b/><b/></a> return generate-id($src/b[1]) eq generate-id($src/b[2])";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("false", resultBuffer.toString() );
};
public void test_generate_id_3() throws Exception{
String query = "string-length(<a><b/><b/></a>/generate-id()) gt 0 ";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("true", resultBuffer.toString() );
};
@@ -74,28 +74,28 @@
public void test_math_pi_1() throws Exception{
String query = "math:pi()";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("3.141592653589793", resultBuffer.toString() );
};
public void test_math_sqrt_1() throws Exception{
String query = "math:sqrt(0)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("0", resultBuffer.toString() );
};
public void test_math_sqrt_2() throws Exception{
String query = "math:sqrt(-1)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("NaN", resultBuffer.toString() );
};
public void test_math_sqrt_3() throws Exception{
String query = "math:sqrt(16) eq 4";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("true", resultBuffer.toString() );
};
@@ -103,7 +103,7 @@
public void test_math_sqrt_4() throws Exception{
String query = "math:sqrt(xs:double('INF'))";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("INF", resultBuffer.toString() );
};
@@ -111,137 +111,216 @@
public void test_math_sin_1() throws Exception{
String query = "math:sin(0)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("0", resultBuffer.toString() );
};
public void test_math_sin_2() throws Exception{
String query = "math:sin(math:pi()) lt 2e-16";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("true", resultBuffer.toString() );
};
public void test_math_cos_1() throws Exception{
String query = "math:cos(0)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("1", resultBuffer.toString() );
};
public void test_math_cos_2() throws Exception{
String query = "math:cos(math:pi())";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("-1", resultBuffer.toString() );
};
public void test_math_tan_1() throws Exception{
String query = "math:tan(0)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("0", resultBuffer.toString() );
};
public void test_math_tan_2() throws Exception{
String query = "abs(1-math:tan(math:pi() div 4)) lt 2e-16";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("true", resultBuffer.toString() );
};
public void test_math_asin_1() throws Exception{
String query = "math:asin(0)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("0", resultBuffer.toString() );
};
public void test_math_asin_2() throws Exception{
String query = "abs(math:asin(1) - math:pi() div 2)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("0", resultBuffer.toString() );
};
public void test_math_acos_1() throws Exception{
String query = "abs(math:acos(0) - math:pi() div 2)";
doQuery(prepareQuery(query, false,false, false, true, false));
- //System.out.println(myBuffer.toString());
+ //System.out.println(resultBuffer.toString());
assertEquals("0", resultBuffer.toString() );
};
public void test_math_acos_2() throws Exception{
String query = "math:acos(...
[truncated message content] |