|
From: <pm_...@us...> - 2011-12-19 13:23:35
|
Revision: 4500
http://mxquery.svn.sourceforge.net/mxquery/?rev=4500&view=rev
Author: pm_fischer
Date: 2011-12-19 13:23:24 +0000 (Mon, 19 Dec 2011)
Log Message:
-----------
Foundations of projection path generator
Modified Paths:
--------------
trunk/MXQuery/src/ch/ethz/mxquery/iterators/CompareIterator.java
trunk/MXQuery/src/ch/ethz/mxquery/iterators/IfThenElseIterator.java
trunk/MXQuery/src/ch/ethz/mxquery/iterators/VariableIterator.java
trunk/MXQuery/src/ch/ethz/mxquery/model/Iterator.java
trunk/MXQuery/src/ch/ethz/mxquery/model/TokenBasedIterator.java
trunk/MXQuery/src/ch/ethz/mxquery/model/VariableHolder.java
trunk/MXQuery/src/ch/ethz/mxquery/model/XDMIterator.java
trunk/MXQuery/src/ch/ethz/mxquery/model/updatePrimitives/PendingUpdateList.java
Modified: trunk/MXQuery/src/ch/ethz/mxquery/iterators/CompareIterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/iterators/CompareIterator.java 2011-10-21 20:16:23 UTC (rev 4499)
+++ trunk/MXQuery/src/ch/ethz/mxquery/iterators/CompareIterator.java 2011-12-19 13:23:24 UTC (rev 4500)
@@ -33,6 +33,8 @@
import ch.ethz.mxquery.model.TokenBasedIterator;
import ch.ethz.mxquery.model.XDMIterator;
import ch.ethz.mxquery.util.KXmlSerializer;
+import ch.ethz.mxquery.util.ObjectObjectPair;
+import ch.ethz.mxquery.util.Set;
/**
*
@@ -319,5 +321,17 @@
public TypeInfo getStaticType() {
return new TypeInfo(Type.BOOLEAN,Type.OCCURRENCE_IND_ZERO_OR_ONE);
}
+
+ public ObjectObjectPair getProjectionPaths() {
+ Set returned = new Set();
+ Set used = new Set();
+ for (int i=0;i<subIters.length;i++){
+ ObjectObjectPair cur = subIters[i].getProjectionPaths();
+ used.addAll((Set)cur.getFirst());
+ used.addAll((Set)cur.getSecond());
+ }
+ return new ObjectObjectPair(returned, used);
+ }
+
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/iterators/IfThenElseIterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/iterators/IfThenElseIterator.java 2011-10-21 20:16:23 UTC (rev 4499)
+++ trunk/MXQuery/src/ch/ethz/mxquery/iterators/IfThenElseIterator.java 2011-12-19 13:23:24 UTC (rev 4500)
@@ -26,6 +26,8 @@
import ch.ethz.mxquery.model.XDMIterator;
import ch.ethz.mxquery.model.updatePrimitives.PendingUpdateList;
import ch.ethz.mxquery.util.KXmlSerializer;
+import ch.ethz.mxquery.util.ObjectObjectPair;
+import ch.ethz.mxquery.util.Set;
/**
*
@@ -123,6 +125,22 @@
}
}
+ public ObjectObjectPair getProjectionPaths() {
+ Set returned = new Set();
+ Set used = new Set();
+ ObjectObjectPair cur = subIters[0].getProjectionPaths();
+ // Conditionals used and returned go to to used
+ used.addAll((Set)cur.getFirst());
+ used.addAll((Set)cur.getSecond());
+ for (int i=1;i<subIters.length;i++){
+ cur = subIters[i].getProjectionPaths();
+ returned.addAll((Set)cur.getFirst());
+ used.addAll((Set)cur.getSecond());
+ }
+ return new ObjectObjectPair(returned, used);
+ }
+
+
// public TypeInfo getReturnType() {
// // TODO Auto-generated method stub
// return super.getReturnType();
Modified: trunk/MXQuery/src/ch/ethz/mxquery/iterators/VariableIterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/iterators/VariableIterator.java 2011-10-21 20:16:23 UTC (rev 4499)
+++ trunk/MXQuery/src/ch/ethz/mxquery/iterators/VariableIterator.java 2011-12-19 13:23:24 UTC (rev 4500)
@@ -35,6 +35,7 @@
import ch.ethz.mxquery.model.Window;
import ch.ethz.mxquery.model.XDMIterator;
import ch.ethz.mxquery.util.KXmlSerializer;
+import ch.ethz.mxquery.util.ObjectObjectPair;
/**
*
@@ -258,5 +259,7 @@
return false;
}
-
+ public ObjectObjectPair getProjectionPaths() {
+ return valueHolder.getProjectionPaths();
+ }
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/model/Iterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/model/Iterator.java 2011-10-21 20:16:23 UTC (rev 4499)
+++ trunk/MXQuery/src/ch/ethz/mxquery/model/Iterator.java 2011-12-19 13:23:24 UTC (rev 4500)
@@ -43,6 +43,8 @@
import ch.ethz.mxquery.sms.interfaces.MaterializingStore;
import ch.ethz.mxquery.util.ContextPair;
import ch.ethz.mxquery.util.KXmlSerializer;
+import ch.ethz.mxquery.util.ObjectObjectPair;
+import ch.ethz.mxquery.util.Set;
import ch.ethz.mxquery.util.Utils;
/**
@@ -875,5 +877,22 @@
if (source.next().getEventType() != Type.END_SEQUENCE)
throw new TypeException(ErrorCodes.E0004_TYPE_INAPPROPRIATE_TYPE, "Single Item expected", loc);
return arg.getText();
+ }
+
+ public ObjectObjectPair getProjectionPaths() {
+ XDMIterator [] subs = getAllSubIters();
+ if (subs != null && subs.length == 1)
+ return subs[0].getProjectionPaths();
+ else {
+ Set returned = new Set();
+ Set used = new Set();
+ if (subs != null)
+ for (int i=0;i<subs.length;i++){
+ ObjectObjectPair cur = subs[i].getProjectionPaths();
+ returned.addAll((Set)cur.getFirst());
+ used.addAll((Set)cur.getSecond());
+ }
+ return new ObjectObjectPair(returned, used);
+ }
}
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/model/TokenBasedIterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/model/TokenBasedIterator.java 2011-10-21 20:16:23 UTC (rev 4499)
+++ trunk/MXQuery/src/ch/ethz/mxquery/model/TokenBasedIterator.java 2011-12-19 13:23:24 UTC (rev 4500)
@@ -20,6 +20,8 @@
import ch.ethz.mxquery.datamodel.xdm.TokenInterface;
import ch.ethz.mxquery.exceptions.MXQueryException;
import ch.ethz.mxquery.exceptions.QueryLocation;
+import ch.ethz.mxquery.util.ObjectObjectPair;
+import ch.ethz.mxquery.util.Set;
public abstract class TokenBasedIterator extends Iterator{
@@ -80,5 +82,5 @@
protected void resetImpl() throws MXQueryException {
super.resetImpl();
currentToken = Token.START_SEQUENCE_TOKEN;
- }
+ }
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/model/VariableHolder.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/model/VariableHolder.java 2011-10-21 20:16:23 UTC (rev 4499)
+++ trunk/MXQuery/src/ch/ethz/mxquery/model/VariableHolder.java 2011-12-19 13:23:24 UTC (rev 4500)
@@ -31,6 +31,7 @@
import ch.ethz.mxquery.exceptions.StaticException;
import ch.ethz.mxquery.iterators.VariableIterator;
import ch.ethz.mxquery.util.Hashtable;
+import ch.ethz.mxquery.util.ObjectObjectPair;
public class VariableHolder {
@@ -47,6 +48,7 @@
private int contextPos;
private Context ctx;
private XDMIterator seqTypeIt = null;
+ private ObjectObjectPair projectionPaths;
@@ -251,4 +253,13 @@
public Hashtable getAnnotations(){
return annotations;
}
+
+ public void setProjectionPaths(ObjectObjectPair paths) {
+ projectionPaths = paths;
+ }
+
+ public ObjectObjectPair getProjectionPaths() {
+ return projectionPaths;
+ }
+
}
Modified: trunk/MXQuery/src/ch/ethz/mxquery/model/XDMIterator.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/model/XDMIterator.java 2011-10-21 20:16:23 UTC (rev 4499)
+++ trunk/MXQuery/src/ch/ethz/mxquery/model/XDMIterator.java 2011-12-19 13:23:24 UTC (rev 4500)
@@ -26,6 +26,7 @@
import ch.ethz.mxquery.exceptions.QueryLocation;
import ch.ethz.mxquery.model.updatePrimitives.PendingUpdateList;
import ch.ethz.mxquery.util.KXmlSerializer;
+import ch.ethz.mxquery.util.ObjectObjectPair;
import ch.ethz.mxquery.util.Traversable;
/**
@@ -205,5 +206,13 @@
public KXmlSerializer traverseIteratorTree(KXmlSerializer serializer) throws Exception;
public abstract boolean isScoring();
+ /**
+ * Get the projection path (=minimum requirement document fragments)
+ * There are two types of paths:
+ * - returned
+ * - used
+ * @return Pair of Path Sets, first is returned, second is used
+ */
+ public abstract ObjectObjectPair getProjectionPaths();
}
\ No newline at end of file
Modified: trunk/MXQuery/src/ch/ethz/mxquery/model/updatePrimitives/PendingUpdateList.java
===================================================================
--- trunk/MXQuery/src/ch/ethz/mxquery/model/updatePrimitives/PendingUpdateList.java 2011-10-21 20:16:23 UTC (rev 4499)
+++ trunk/MXQuery/src/ch/ethz/mxquery/model/updatePrimitives/PendingUpdateList.java 2011-12-19 13:23:24 UTC (rev 4500)
@@ -387,6 +387,9 @@
throw new DynamicException(ErrorCodes.U0021_UPDATE_DYNAMIC_INVALID_XDM,"Duplicate attribute names in updates",null);
else
seenAttrNames.add(attName);
+ } else {
+ if (seenAttrNames.size() > 0)
+ seenAttrNames = new Set();
}
else {
if (seenAttrNames.size() > 0)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|