You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/12/07 15:18:50 UTC

svn commit: r1211447 - /incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java

Author: andy
Date: Wed Dec  7 14:18:50 2011
New Revision: 1211447

URL: http://svn.apache.org/viewvc?rev=1211447&view=rev
Log:
Bug fix: preserve order in (group) var-aggregate list.

Modified:
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java?rev=1211447&r1=1211446&r2=1211447&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/sse/builders/BuilderOp.java Wed Dec  7 14:18:50 2011
@@ -23,7 +23,6 @@ import java.util.HashMap ;
 import java.util.Iterator ;
 import java.util.List ;
 import java.util.Map ;
-import java.util.Map.Entry ;
 
 import com.hp.hpl.jena.graph.Node ;
 import com.hp.hpl.jena.graph.Triple ;
@@ -31,14 +30,46 @@ import com.hp.hpl.jena.query.Query ;
 import com.hp.hpl.jena.query.SortCondition ;
 import com.hp.hpl.jena.sparql.algebra.Op ;
 import com.hp.hpl.jena.sparql.algebra.Table ;
-import com.hp.hpl.jena.sparql.algebra.op.* ;
+import com.hp.hpl.jena.sparql.algebra.op.OpAssign ;
+import com.hp.hpl.jena.sparql.algebra.op.OpBGP ;
+import com.hp.hpl.jena.sparql.algebra.op.OpConditional ;
+import com.hp.hpl.jena.sparql.algebra.op.OpDatasetNames ;
+import com.hp.hpl.jena.sparql.algebra.op.OpDiff ;
+import com.hp.hpl.jena.sparql.algebra.op.OpDisjunction ;
+import com.hp.hpl.jena.sparql.algebra.op.OpDistinct ;
+import com.hp.hpl.jena.sparql.algebra.op.OpExtend ;
+import com.hp.hpl.jena.sparql.algebra.op.OpFilter ;
+import com.hp.hpl.jena.sparql.algebra.op.OpGraph ;
+import com.hp.hpl.jena.sparql.algebra.op.OpGroup ;
+import com.hp.hpl.jena.sparql.algebra.op.OpJoin ;
+import com.hp.hpl.jena.sparql.algebra.op.OpLabel ;
+import com.hp.hpl.jena.sparql.algebra.op.OpLeftJoin ;
+import com.hp.hpl.jena.sparql.algebra.op.OpList ;
+import com.hp.hpl.jena.sparql.algebra.op.OpMinus ;
+import com.hp.hpl.jena.sparql.algebra.op.OpN ;
+import com.hp.hpl.jena.sparql.algebra.op.OpNull ;
+import com.hp.hpl.jena.sparql.algebra.op.OpOrder ;
+import com.hp.hpl.jena.sparql.algebra.op.OpPath ;
+import com.hp.hpl.jena.sparql.algebra.op.OpProcedure ;
+import com.hp.hpl.jena.sparql.algebra.op.OpProject ;
+import com.hp.hpl.jena.sparql.algebra.op.OpPropFunc ;
+import com.hp.hpl.jena.sparql.algebra.op.OpQuad ;
+import com.hp.hpl.jena.sparql.algebra.op.OpQuadPattern ;
+import com.hp.hpl.jena.sparql.algebra.op.OpReduced ;
+import com.hp.hpl.jena.sparql.algebra.op.OpSequence ;
+import com.hp.hpl.jena.sparql.algebra.op.OpService ;
+import com.hp.hpl.jena.sparql.algebra.op.OpSlice ;
+import com.hp.hpl.jena.sparql.algebra.op.OpTable ;
+import com.hp.hpl.jena.sparql.algebra.op.OpTopN ;
+import com.hp.hpl.jena.sparql.algebra.op.OpTriple ;
+import com.hp.hpl.jena.sparql.algebra.op.OpUnion ;
 import com.hp.hpl.jena.sparql.core.BasicPattern ;
 import com.hp.hpl.jena.sparql.core.Quad ;
 import com.hp.hpl.jena.sparql.core.TriplePath ;
 import com.hp.hpl.jena.sparql.core.Var ;
 import com.hp.hpl.jena.sparql.core.VarExprList ;
-import com.hp.hpl.jena.sparql.expr.ExprAggregator ;
 import com.hp.hpl.jena.sparql.expr.Expr ;
+import com.hp.hpl.jena.sparql.expr.ExprAggregator ;
 import com.hp.hpl.jena.sparql.expr.ExprList ;
 import com.hp.hpl.jena.sparql.pfunction.PropFuncArg ;
 import com.hp.hpl.jena.sparql.sse.Item ;
@@ -569,12 +600,15 @@ public class BuilderOp
                 // Aggregations need to know the name of the variable they are associated with
                 // (so it can be set by the aggregation calculation)
                 // Bind aggregation to variable
-                for (  Entry<Var, Expr> entry : y.getExprs().entrySet() )
+                // Remember to process in order that VarExprList keeps the variables.
+                
+                for ( Var aggVar : y.getVars() )
                 {
-                    if ( ! ( entry.getValue() instanceof ExprAggregator ) )
-                        BuilderLib.broken(list, "Not a aggregate expression: "+entry.getValue()) ;
-                    ExprAggregator eAgg = (ExprAggregator)entry.getValue() ;
-                    eAgg.setVar(entry.getKey()) ;
+                    Expr e = y.getExpr(aggVar) ;
+                    if ( ! ( e instanceof ExprAggregator ) )
+                        BuilderLib.broken(list, "Not a aggregate expression: "+e) ;
+                    ExprAggregator eAgg = (ExprAggregator)e ;
+                    eAgg.setVar(aggVar) ;
                     aggregators.add(eAgg) ;    
                 }
             }