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 2012/04/27 17:36:07 UTC

svn commit: r1331471 - in /incubator/jena/Jena2/ARQ/trunk: Grammar/ src/main/java/com/hp/hpl/jena/query/ src/main/java/com/hp/hpl/jena/sparql/algebra/ src/main/java/com/hp/hpl/jena/sparql/core/ src/main/java/com/hp/hpl/jena/sparql/lang/ src/main/java/c...

Author: andy
Date: Fri Apr 27 15:36:06 2012
New Revision: 1331471

URL: http://svn.apache.org/viewvc?rev=1331471&view=rev
Log:
Implement inline data in queries (keyword DATA).  ARQ language.  Will track SPARQ-WG decisions.

Added:
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementData.java
Modified:
    incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj
    incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Query.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryFactory.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryVisitor.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraGenerator.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryHashCode.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserQueryBase.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/resultset/ResultSetCompare.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/FormatterElement.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitor.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitorBase.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementWalker.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/PatternVarsVisitor.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/RecursiveElementVisitor.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/NodeIsomorphismMap.java
    incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java

Modified: incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj (original)
+++ incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj Fri Apr 27 15:36:06 2012
@@ -378,37 +378,47 @@ Node DataBlockValue() : { Node n ; Strin
 | n = BooleanLiteral() { return n ; }
 | <UNDEF> { return null ; }
 }
-Element InlineData() : {}
+Element InlineData() : { ElementData el ; Token t ; }
 {
-  <DATA>
-  ( InlineDataOneVar() | InlineDataFull() )
-  { return null ; }
+  t = <DATA>
+  { el = new ElementData() ;
+    startInlineData(el.getVars(), el.getRows(), t.beginLine, t.beginColumn) ; }
+  ( InlineDataOneVar(el) | InlineDataFull(el) )
+  { finishInlineData(t.beginLine, t.beginColumn) ;
+    return el ; }
 }
-void InlineDataOneVar() : { Var v ; Node n ; Token t ; }
+void InlineDataOneVar(ElementData el) : { Var v ; Node n ; Token t ; }
 {
   v = Var()
+  { emitDataBlockVariable(v) ; }
   t = <LBRACE>
-  ( n = DataBlockValue() )*
+  (
+    n = DataBlockValue()
+    { startDataBlockValueRow(-1, -1) ;
+      emitDataBlockValue(n, -1, -1) ;
+      finishDataBlockValueRow(-1, -1) ;
+    }
+  )*
   t = <RBRACE>
 }
-void InlineDataFull() : { Var v ; Node n ; Token t ; }
+void InlineDataFull(ElementData el) : { Var v ; Node n ; Token t ; }
 {
   t = <LPAREN>
-  (v = Var())*
+  (v = Var() { emitDataBlockVariable(v) ; })*
   t = <RPAREN>
   t = <LBRACE>
   (
     t = <LPAREN>
-    //{ startDataBlockValueRow(t.beginLine, t.beginColumn) ; }
+    { startDataBlockValueRow(t.beginLine, t.beginColumn) ; }
     (n = DataBlockValue()
-        //{ emitDataBlockValue(n, t.beginLine, t.beginColumn) ; }
+        { emitDataBlockValue(n, t.beginLine, t.beginColumn) ; }
     ) *
     t = <RPAREN>
-    //{ finishDataBlockValueRow(t.beginLine, t.beginColumn) ; }
+      { finishDataBlockValueRow(t.beginLine, t.beginColumn) ; }
   |
     t = <NIL>
-    //{ startDataBlockValueRow(t.beginLine, t.beginColumn) ; }
-    //{ finishDataBlockValueRow(t.beginLine, t.beginColumn) ; }
+      { startDataBlockValueRow(t.beginLine, t.beginColumn) ; }
+      { finishDataBlockValueRow(t.beginLine, t.beginColumn) ; }
    )*
   t = <RBRACE>
 }

Modified: incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj (original)
+++ incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj Fri Apr 27 15:36:06 2012
@@ -467,39 +467,49 @@ Node DataBlockValue() : { Node n ; Strin
 }
 
 #ifdef ARQ
-Element InlineData() : {}
+Element InlineData() : { ElementData el ; Token t ; }
 {
-  <DATA>
-  ( InlineDataOneVar() |  InlineDataFull() )
-  { return null ; }
+  t = <DATA>
+  { el = new ElementData() ;
+    startInlineData(el.getVars(), el.getRows(), t.beginLine, t.beginColumn) ; }
+  ( InlineDataOneVar(el) |  InlineDataFull(el) )
+  { finishInlineData(t.beginLine, t.beginColumn) ;
+    return el ; }
 }
 
-void InlineDataOneVar() : { Var v ; Node n ; Token t ; }
+void InlineDataOneVar(ElementData el) : { Var v ; Node n ; Token t ; }
 {
   v = Var()
+  { emitDataBlockVariable(v) ; }
   t = <LBRACE>
-  ( n = DataBlockValue() )*
+  ( 
+    n = DataBlockValue() 
+    { startDataBlockValueRow(-1, -1) ;
+      emitDataBlockValue(n, -1, -1) ;
+      finishDataBlockValueRow(-1, -1) ;
+    }
+  )*
   t = <RBRACE>
 }  
   
-void InlineDataFull() : { Var v ; Node n ; Token t ; }
+void InlineDataFull(ElementData el) : { Var v ; Node n ; Token t ; }
 {
   t = <LPAREN>
-  (v = Var())*
+  (v = Var() { emitDataBlockVariable(v) ; })*
   t = <RPAREN>
   t = <LBRACE>
   (
     t = <LPAREN> 
-    //{ startDataBlockValueRow(t.beginLine, t.beginColumn) ; }
+    { startDataBlockValueRow(t.beginLine, t.beginColumn) ; }
     (n = DataBlockValue() 
-        //{ emitDataBlockValue(n, t.beginLine, t.beginColumn) ; }
+        { emitDataBlockValue(n, t.beginLine, t.beginColumn) ; }
     ) *
     t = <RPAREN> 
-    //{ finishDataBlockValueRow(t.beginLine, t.beginColumn) ; }
+      { finishDataBlockValueRow(t.beginLine, t.beginColumn) ; }
   |
     t = <NIL>
-    //{ startDataBlockValueRow(t.beginLine, t.beginColumn) ; }
-    //{ finishDataBlockValueRow(t.beginLine, t.beginColumn) ; }
+      { startDataBlockValueRow(t.beginLine, t.beginColumn) ; }
+      { finishDataBlockValueRow(t.beginLine, t.beginColumn) ; }
    )*
   t = <RBRACE>
 }  

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Query.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Query.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Query.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/Query.java Fri Apr 27 15:36:06 2012
@@ -75,9 +75,6 @@ public class Query extends Prologue impl
     private List<String> graphURIs = new ArrayList<String>() ;
     private List<String> namedGraphURIs = new ArrayList<String>() ;
     
-    // The Original Raw Query as provided to the API
-    private String rawQuery = null;
-    
     // The WHERE clause
     private Element queryPattern = null ;
     
@@ -98,8 +95,8 @@ public class Query extends Prologue impl
 
     // BINDINGS
     protected TableData bindingsDataBlock = null ;
-    // VALUES
-    protected TableData valuesDataBlock = null ;
+//    // VALUES
+//    protected TableData valuesDataBlock = null ;
     
 //    // BINDINGS
 //        protected List<Var> bindingVariables = null ;
@@ -142,30 +139,6 @@ public class Query extends Prologue impl
         usePrologueFrom(prologue) ;
     }
     
-    /**
-     * Creates a new empty query with the given raw query string
-     * <p>
-     * <strong>Important:</strong> This constructor does not cause the query to be parsed, this only stores a reference to the original query string in the query which may be useful if you want to see the original unaltered syntax (including comments) at some later point.
-     * </p>
-     */
-    public Query(String queryString)
-    {
-    	this();
-    	rawQuery = queryString;
-    }
-    
-    /**
-     * Creates a new empty query with the given raw query string and prologue
-     * <p>
-     * <strong>Important:</strong> This constructor does not cause the query to be parsed, this only stores a reference to the original query string in the query which may be useful if you want to see the original unaltered syntax (including comments) at some later point.
-     * </p>
-     */
-    public Query(String queryString, Prologue prologue)
-    {
-    	this(prologue);
-    	rawQuery = queryString;
-    }
-    
     // Allocate variables that are unique to this query.
     private VarAlloc varAlloc = new VarAlloc(ARQConstants.allocVarMarker) ;
     private Var allocInternVar() { return varAlloc.allocVar() ; }
@@ -223,22 +196,6 @@ public class Query extends Prologue impl
     public void setReduced(boolean b) { reduced = b ; }
     public boolean isReduced()        { return reduced ; }
     
-    /**
-     * Sets the raw query string
-     */
-    protected void setRawQuery(String queryString)
-    {
-    	rawQuery = queryString;
-    }
-    
-    /**
-     * Gets the original raw query string from which this instance was populated, may be null depending on how the query was created
-     */
-    public String getRawQuery()
-    {
-    	return rawQuery;
-    }
-
     /** @return Returns the syntax. */
     public Syntax getSyntax()         { return syntax ; }
 
@@ -661,24 +618,24 @@ public class Query extends Prologue impl
         bindingsDataBlock = new TableData(variables, values) ;
     }
     
-    // ---- Values
-
-    /** Does the query have any BINDINGS? */
-    public boolean hasValues()                  { return valuesDataBlock != null ; }
-    
-    /** VALUES variables */
-    public List<Var> getValuesVariables()       { return valuesDataBlock==null ? null : valuesDataBlock.getVars() ; }
-    
-    /** VALUES - null for a Node means undef */ 
-    public List<Binding> getValuesData()        { return valuesDataBlock==null ? null : valuesDataBlock.getRows() ; }
-    
-    //public TableData getValuesDataBlock()          { return valuesDataBlock ; }
-    
-    public void setValuesDataBlock(List<Var> variables, List<Binding> values)
-    {
-        checkDataBlock(variables, values) ;
-        valuesDataBlock = new TableData(variables, values) ;
-    }
+//    // ---- Values
+//
+//    /** Does the query have any VALUES? */
+//    public boolean hasValues()                  { return valuesDataBlock != null ; }
+//    
+//    /** VALUES variables */
+//    public List<Var> getValuesVariables()       { return valuesDataBlock==null ? null : valuesDataBlock.getVars() ; }
+//    
+//    /** VALUES - null for a Node means undef */ 
+//    public List<Binding> getValuesData()        { return valuesDataBlock==null ? null : valuesDataBlock.getRows() ; }
+//    
+//    //public TableData getValuesDataBlock()          { return valuesDataBlock ; }
+//    
+//    public void setValuesDataBlock(List<Var> variables, List<Binding> values)
+//    {
+//        checkDataBlock(variables, values) ;
+//        valuesDataBlock = new TableData(variables, values) ;
+//    }
     
     private static void checkDataBlock(List<Var> variables, List<Binding> values)
     {
@@ -786,8 +743,8 @@ public class Query extends Prologue impl
             PatternVars.vars(queryVars, this.getQueryPattern()) ;
             if ( this.hasBindings() )
                 queryVars.addAll(getBindingsVariables()) ;
-            if ( this.hasValues() )
-                queryVars.addAll(getValuesVariables()) ;
+//            if ( this.hasValues() )
+//                queryVars.addAll(getValuesVariables()) ;
             varIter = queryVars.iterator() ;
         }
         
@@ -824,7 +781,6 @@ public class Query extends Prologue impl
         visitor.visitOffset(this) ;
         visitor.visitLimit(this) ;
         visitor.visitBindings(this) ;
-        visitor.visitValues(this) ;
         visitor.finishVisit(this) ;
     }
 
@@ -848,19 +804,10 @@ public class Query extends Prologue impl
      */
     public Query cloneQuery(boolean useRawQuery)
     {
-    	String qs;
-    	if (useRawQuery && this.rawQuery != null && !this.rawQuery.equals(""))
-    	{
-    		//If specified (and is present) clone from raw query rather than the serialized query
-    		qs = this.rawQuery;
-    	}
-    	else
-    	{
-    		// A little crude.
-    		IndentedLineBuffer buff = new IndentedLineBuffer() ;
-    		serialize(buff, getSyntax()) ;
-    		qs = buff.toString() ;
-    	}
+        // A little crude.
+        IndentedLineBuffer buff = new IndentedLineBuffer() ;
+        serialize(buff, getSyntax()) ;
+        String qs = buff.toString() ;
         return QueryFactory.create(qs, getSyntax()) ;
     }
     

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryFactory.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryFactory.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryFactory.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryFactory.java Fri Apr 27 15:36:06 2012
@@ -61,7 +61,7 @@ public class QueryFactory
     
     static public Query create(String queryString, String baseURI)
     {
-        Query query = new Query(queryString) ;
+        Query query = new Query() ;
         parse(query, queryString, baseURI, Syntax.defaultQuerySyntax) ;
         return query ;
         
@@ -77,7 +77,7 @@ public class QueryFactory
    
    static public Query create(String queryString, String baseURI, Syntax syntax)
    {
-       Query query = new Query(queryString) ;
+       Query query = new Query() ;
        parse(query, queryString, baseURI, syntax) ;
        return query ;
        
@@ -142,7 +142,6 @@ public class QueryFactory
         else
             query.setSyntax(syntaxURI) ;
 
-        query.setRawQuery(queryString);
         Parser parser = Parser.createParser(syntaxURI) ;
         
         if ( parser == null )

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryVisitor.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryVisitor.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryVisitor.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/query/QueryVisitor.java Fri Apr 27 15:36:06 2012
@@ -42,7 +42,6 @@ public interface QueryVisitor
     public void visitLimit(Query query) ;
     public void visitOffset(Query query) ;
     public void visitBindings(Query query) ;
-    public void visitValues(Query query) ;
     
     public void finishVisit(Query query) ;
 }

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraGenerator.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraGenerator.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraGenerator.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/algebra/AlgebraGenerator.java Fri Apr 27 15:36:06 2012
@@ -22,7 +22,6 @@ import java.util.ArrayList ;
 import java.util.Iterator ;
 import java.util.List ;
 
-import org.openjena.atlas.lib.NotImplemented ;
 import org.openjena.atlas.logging.Log ;
 
 import com.hp.hpl.jena.graph.Node ;
@@ -286,6 +285,7 @@ public class AlgebraGenerator 
             groupElts.add(elt) ;
         }
         //End of group - put in any accumulated filters
+        
         if ( filters != null )
             groupElts.addAll(filters) ;
         return groupElts ;
@@ -370,8 +370,17 @@ public class AlgebraGenerator 
             Op op = compileElementMinus(current, elt2) ;
             return op ;
         }
+
+        if ( elt instanceof ElementData)
+        {
+            // Accumulate, like filters.
+            ElementData elt2 = (ElementData)elt ;
+            Op op = compileElementData(current, elt2) ;
+            return op ;
+        }
+
         
-//        // SPARQL 1.1 UNION -- did no tmake SPARQL 
+//        // SPARQL 1.1 UNION -- did not make SPARQL 
 //        if ( elt instanceof ElementUnion )
 //        {
 //            ElementUnion elt2 = (ElementUnion)elt ;
@@ -392,6 +401,8 @@ public class AlgebraGenerator 
             Op op = compileElement(elt) ;
             return join(current, op) ;
         }
+
+        
         
         broken("compile/Element not recognized: "+Utils.className(elt)) ;
         return null ;
@@ -419,6 +430,12 @@ public class AlgebraGenerator 
         return opMinus ;
     }
 
+    private Op compileElementData(Op current, ElementData elt2)
+    {
+        OpTable opTable = OpTable.create(elt2.getTable()) ;
+        return OpJoin.create(current, opTable) ;
+    }
+
     private Op compileElementUnion(Op current, ElementUnion elt2)
     {
         // Special SPARQL 1.1 case.
@@ -582,17 +599,6 @@ public class AlgebraGenerator 
             op = OpJoin.create(op, opTable) ;
         }
         
-        // ---- VALUES
-        if ( query.hasValues() )
-        {
-            if ( true ) throw new NotImplemented("VALUES Not implemented yet") ;
-            Table table = TableFactory.create() ;
-            for ( Binding binding : query.getValuesData() )
-                table.addBinding(binding) ;
-            OpTable opTable = OpTable.create(table) ;
-            // NOT THIS op = OpJoin.create(op, opTable) ;
-        }
-        
         // ---- ToList
         if ( context.isTrue(ARQ.generateToList) )
             // Listify it.

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryCompare.java Fri Apr 27 15:36:06 2012
@@ -177,17 +177,6 @@ public class QueryCompare implements Que
     }
 
     @Override
-    public void visitValues(Query query1)
-    {
-        // Must be same order for now.
-        check("VALUES/variables", query1.getValuesVariables(), query2.getValuesVariables()) ;
-        check("VALUES/values", query1.getValuesData(), query2.getValuesData()) ;
-    }
-
-
-    
-    
-    @Override
     public void finishVisit(Query query1)
     {}
     

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryHashCode.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryHashCode.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryHashCode.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/core/QueryHashCode.java Fri Apr 27 15:36:06 2012
@@ -139,16 +139,6 @@ public class QueryHashCode
         }
 
         @Override
-        public void visitValues(Query query)
-        {
-            if ( query.hasValues() )
-            {
-                x ^= query.getValuesVariables().hashCode() ;
-                x ^= query.getValuesData().hashCode() ;
-            }
-        }
-
-        @Override
         public void finishVisit(Query query)
         {}
 

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserQueryBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserQueryBase.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserQueryBase.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/ParserQueryBase.java Fri Apr 27 15:36:06 2012
@@ -169,18 +169,16 @@ public class ParserQueryBase extends Par
     {
         getQuery().setBindingsDataBlock(variables, values) ;
     }
-
-    protected void startValuesBlock(int line, int col)               
-    { 
-        variables = new ArrayList<Var>() ;
-        values = new ArrayList<Binding>() ;
-    }
     
-    protected void finishValuesBlock(int line, int col)
+    protected void startInlineData(List<Var> vars, List<Binding> rows, int line, int col)
     {
-        getQuery().setValuesDataBlock(variables, values) ;
+        variables = vars ;
+        values = rows ;
     }
 
+    protected void finishInlineData(int line, int col)
+    {}
+    
     private BindingMap currentValueRow()                            { return (BindingMap)values.get(values.size()-1) ; }
     
     protected void emitDataBlockVariable(Var v)                     { variables.add(v) ; }

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/SyntaxVarScope.java Fri Apr 27 15:36:06 2012
@@ -97,8 +97,6 @@ public class SyntaxVarScope
         Collection<Var> vars = PatternVars.vars(query.getQueryPattern()) ;
         if ( query.hasBindings() )
             vars.addAll(query.getBindingsVariables()) ;
-        if ( query.hasValues() )
-            vars.addAll(query.getValuesVariables()) ;
         return vars ;
     }
     

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java Fri Apr 27 15:36:06 2012
@@ -1498,27 +1498,32 @@ public class ARQParser extends ARQParser
   }
 
   final public Element InlineData() throws ParseException {
-    jj_consume_token(DATA);
+                         ElementData el ; Token t ;
+    t = jj_consume_token(DATA);
+    el = new ElementData() ;
+    startInlineData(el.getVars(), el.getRows(), t.beginLine, t.beginColumn) ;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case VAR1:
     case VAR2:
-      InlineDataOneVar();
+      InlineDataOneVar(el);
       break;
     case LPAREN:
-      InlineDataFull();
+      InlineDataFull(el);
       break;
     default:
       jj_la1[43] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
-    {if (true) return null ;}
+    finishInlineData(t.beginLine, t.beginColumn) ;
+    {if (true) return el ;}
     throw new Error("Missing return statement in function");
   }
 
-  final public void InlineDataOneVar() throws ParseException {
-                            Var v ; Node n ; Token t ;
+  final public void InlineDataOneVar(ElementData el) throws ParseException {
+                                          Var v ; Node n ; Token t ;
     v = Var();
+    emitDataBlockVariable(v) ;
     t = jj_consume_token(LBRACE);
     label_15:
     while (true) {
@@ -1549,12 +1554,15 @@ public class ARQParser extends ARQParser
         break label_15;
       }
       n = DataBlockValue();
+      startDataBlockValueRow(-1, -1) ;
+      emitDataBlockValue(n, -1, -1) ;
+      finishDataBlockValueRow(-1, -1) ;
     }
     t = jj_consume_token(RBRACE);
   }
 
-  final public void InlineDataFull() throws ParseException {
-                          Var v ; Node n ; Token t ;
+  final public void InlineDataFull(ElementData el) throws ParseException {
+                                        Var v ; Node n ; Token t ;
     t = jj_consume_token(LPAREN);
     label_16:
     while (true) {
@@ -1568,6 +1576,7 @@ public class ARQParser extends ARQParser
         break label_16;
       }
       v = Var();
+               emitDataBlockVariable(v) ;
     }
     t = jj_consume_token(RPAREN);
     t = jj_consume_token(LBRACE);
@@ -1585,6 +1594,7 @@ public class ARQParser extends ARQParser
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case LPAREN:
         t = jj_consume_token(LPAREN);
+      startDataBlockValueRow(t.beginLine, t.beginColumn) ;
         label_18:
         while (true) {
           switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1614,11 +1624,15 @@ public class ARQParser extends ARQParser
             break label_18;
           }
           n = DataBlockValue();
+          emitDataBlockValue(n, t.beginLine, t.beginColumn) ;
         }
         t = jj_consume_token(RPAREN);
+        finishDataBlockValueRow(t.beginLine, t.beginColumn) ;
         break;
       case NIL:
         t = jj_consume_token(NIL);
+        startDataBlockValueRow(t.beginLine, t.beginColumn) ;
+        finishDataBlockValueRow(t.beginLine, t.beginColumn) ;
         break;
       default:
         jj_la1[48] = jj_gen;
@@ -5427,189 +5441,6 @@ public class ARQParser extends ARQParser
     finally { jj_save(3, xla); }
   }
 
-  private boolean jj_3R_43() {
-    if (jj_scan_token(STR)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_42() {
-    if (jj_3R_100()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_40() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_42()) {
-    jj_scanpos = xsp;
-    if (jj_3R_43()) {
-    jj_scanpos = xsp;
-    if (jj_3R_44()) {
-    jj_scanpos = xsp;
-    if (jj_3R_45()) {
-    jj_scanpos = xsp;
-    if (jj_3R_46()) {
-    jj_scanpos = xsp;
-    if (jj_3R_47()) {
-    jj_scanpos = xsp;
-    if (jj_3R_48()) {
-    jj_scanpos = xsp;
-    if (jj_3R_49()) {
-    jj_scanpos = xsp;
-    if (jj_3R_50()) {
-    jj_scanpos = xsp;
-    if (jj_3R_51()) {
-    jj_scanpos = xsp;
-    if (jj_3R_52()) {
-    jj_scanpos = xsp;
-    if (jj_3R_53()) {
-    jj_scanpos = xsp;
-    if (jj_3R_54()) {
-    jj_scanpos = xsp;
-    if (jj_3R_55()) {
-    jj_scanpos = xsp;
-    if (jj_3R_56()) {
-    jj_scanpos = xsp;
-    if (jj_3R_57()) {
-    jj_scanpos = xsp;
-    if (jj_3R_58()) {
-    jj_scanpos = xsp;
-    if (jj_3R_59()) {
-    jj_scanpos = xsp;
-    if (jj_3R_60()) {
-    jj_scanpos = xsp;
-    if (jj_3R_61()) {
-    jj_scanpos = xsp;
-    if (jj_3R_62()) {
-    jj_scanpos = xsp;
-    if (jj_3R_63()) {
-    jj_scanpos = xsp;
-    if (jj_3R_64()) {
-    jj_scanpos = xsp;
-    if (jj_3R_65()) {
-    jj_scanpos = xsp;
-    if (jj_3R_66()) {
-    jj_scanpos = xsp;
-    if (jj_3R_67()) {
-    jj_scanpos = xsp;
-    if (jj_3R_68()) {
-    jj_scanpos = xsp;
-    if (jj_3R_69()) {
-    jj_scanpos = xsp;
-    if (jj_3R_70()) {
-    jj_scanpos = xsp;
-    if (jj_3R_71()) {
-    jj_scanpos = xsp;
-    if (jj_3R_72()) {
-    jj_scanpos = xsp;
-    if (jj_3R_73()) {
-    jj_scanpos = xsp;
-    if (jj_3R_74()) {
-    jj_scanpos = xsp;
-    if (jj_3R_75()) {
-    jj_scanpos = xsp;
-    if (jj_3R_76()) {
-    jj_scanpos = xsp;
-    if (jj_3R_77()) {
-    jj_scanpos = xsp;
-    if (jj_3R_78()) {
-    jj_scanpos = xsp;
-    if (jj_3R_79()) {
-    jj_scanpos = xsp;
-    if (jj_3R_80()) {
-    jj_scanpos = xsp;
-    if (jj_3R_81()) {
-    jj_scanpos = xsp;
-    if (jj_3R_82()) {
-    jj_scanpos = xsp;
-    if (jj_3R_83()) {
-    jj_scanpos = xsp;
-    if (jj_3R_84()) {
-    jj_scanpos = xsp;
-    if (jj_3R_85()) {
-    jj_scanpos = xsp;
-    if (jj_3R_86()) {
-    jj_scanpos = xsp;
-    if (jj_3R_87()) {
-    jj_scanpos = xsp;
-    if (jj_3R_88()) {
-    jj_scanpos = xsp;
-    if (jj_3R_89()) {
-    jj_scanpos = xsp;
-    if (jj_3R_90()) {
-    jj_scanpos = xsp;
-    if (jj_3R_91()) {
-    jj_scanpos = xsp;
-    if (jj_3R_92()) {
-    jj_scanpos = xsp;
-    if (jj_3R_93()) {
-    jj_scanpos = xsp;
-    if (jj_3R_94()) {
-    jj_scanpos = xsp;
-    if (jj_3R_95()) {
-    jj_scanpos = xsp;
-    if (jj_3R_96()) {
-    jj_scanpos = xsp;
-    if (jj_3R_97()) return true;
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    }
-    return false;
-  }
-
   private boolean jj_3R_127() {
     if (jj_scan_token(LBRACKET)) return true;
     return false;
@@ -5677,11 +5508,6 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3_1() {
-    if (jj_3R_40()) return true;
-    return false;
-  }
-
   private boolean jj_3R_111() {
     if (jj_scan_token(COUNT)) return true;
     if (jj_scan_token(LPAREN)) return true;
@@ -5713,6 +5539,11 @@ public class ARQParser extends ARQParser
     return false;
   }
 
+  private boolean jj_3_1() {
+    if (jj_3R_40()) return true;
+    return false;
+  }
+
   private boolean jj_3R_99() {
     if (jj_3R_110()) return true;
     return false;
@@ -6454,6 +6285,189 @@ public class ARQParser extends ARQParser
     return false;
   }
 
+  private boolean jj_3R_43() {
+    if (jj_scan_token(STR)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_42() {
+    if (jj_3R_100()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_40() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_42()) {
+    jj_scanpos = xsp;
+    if (jj_3R_43()) {
+    jj_scanpos = xsp;
+    if (jj_3R_44()) {
+    jj_scanpos = xsp;
+    if (jj_3R_45()) {
+    jj_scanpos = xsp;
+    if (jj_3R_46()) {
+    jj_scanpos = xsp;
+    if (jj_3R_47()) {
+    jj_scanpos = xsp;
+    if (jj_3R_48()) {
+    jj_scanpos = xsp;
+    if (jj_3R_49()) {
+    jj_scanpos = xsp;
+    if (jj_3R_50()) {
+    jj_scanpos = xsp;
+    if (jj_3R_51()) {
+    jj_scanpos = xsp;
+    if (jj_3R_52()) {
+    jj_scanpos = xsp;
+    if (jj_3R_53()) {
+    jj_scanpos = xsp;
+    if (jj_3R_54()) {
+    jj_scanpos = xsp;
+    if (jj_3R_55()) {
+    jj_scanpos = xsp;
+    if (jj_3R_56()) {
+    jj_scanpos = xsp;
+    if (jj_3R_57()) {
+    jj_scanpos = xsp;
+    if (jj_3R_58()) {
+    jj_scanpos = xsp;
+    if (jj_3R_59()) {
+    jj_scanpos = xsp;
+    if (jj_3R_60()) {
+    jj_scanpos = xsp;
+    if (jj_3R_61()) {
+    jj_scanpos = xsp;
+    if (jj_3R_62()) {
+    jj_scanpos = xsp;
+    if (jj_3R_63()) {
+    jj_scanpos = xsp;
+    if (jj_3R_64()) {
+    jj_scanpos = xsp;
+    if (jj_3R_65()) {
+    jj_scanpos = xsp;
+    if (jj_3R_66()) {
+    jj_scanpos = xsp;
+    if (jj_3R_67()) {
+    jj_scanpos = xsp;
+    if (jj_3R_68()) {
+    jj_scanpos = xsp;
+    if (jj_3R_69()) {
+    jj_scanpos = xsp;
+    if (jj_3R_70()) {
+    jj_scanpos = xsp;
+    if (jj_3R_71()) {
+    jj_scanpos = xsp;
+    if (jj_3R_72()) {
+    jj_scanpos = xsp;
+    if (jj_3R_73()) {
+    jj_scanpos = xsp;
+    if (jj_3R_74()) {
+    jj_scanpos = xsp;
+    if (jj_3R_75()) {
+    jj_scanpos = xsp;
+    if (jj_3R_76()) {
+    jj_scanpos = xsp;
+    if (jj_3R_77()) {
+    jj_scanpos = xsp;
+    if (jj_3R_78()) {
+    jj_scanpos = xsp;
+    if (jj_3R_79()) {
+    jj_scanpos = xsp;
+    if (jj_3R_80()) {
+    jj_scanpos = xsp;
+    if (jj_3R_81()) {
+    jj_scanpos = xsp;
+    if (jj_3R_82()) {
+    jj_scanpos = xsp;
+    if (jj_3R_83()) {
+    jj_scanpos = xsp;
+    if (jj_3R_84()) {
+    jj_scanpos = xsp;
+    if (jj_3R_85()) {
+    jj_scanpos = xsp;
+    if (jj_3R_86()) {
+    jj_scanpos = xsp;
+    if (jj_3R_87()) {
+    jj_scanpos = xsp;
+    if (jj_3R_88()) {
+    jj_scanpos = xsp;
+    if (jj_3R_89()) {
+    jj_scanpos = xsp;
+    if (jj_3R_90()) {
+    jj_scanpos = xsp;
+    if (jj_3R_91()) {
+    jj_scanpos = xsp;
+    if (jj_3R_92()) {
+    jj_scanpos = xsp;
+    if (jj_3R_93()) {
+    jj_scanpos = xsp;
+    if (jj_3R_94()) {
+    jj_scanpos = xsp;
+    if (jj_3R_95()) {
+    jj_scanpos = xsp;
+    if (jj_3R_96()) {
+    jj_scanpos = xsp;
+    if (jj_3R_97()) return true;
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    }
+    return false;
+  }
+
   /** Generated Token Manager. */
   public ARQParserTokenManager token_source;
   JavaCharStream jj_input_stream;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/resultset/ResultSetCompare.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/resultset/ResultSetCompare.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/resultset/ResultSetCompare.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/resultset/ResultSetCompare.java Fri Apr 27 15:36:06 2012
@@ -20,7 +20,6 @@ package com.hp.hpl.jena.sparql.resultset
 
 import java.util.ArrayList ;
 import java.util.Collection ;
-import java.util.HashMap ;
 import java.util.Iterator ;
 import java.util.List ;
 
@@ -36,6 +35,7 @@ import com.hp.hpl.jena.rdf.model.Model ;
 import com.hp.hpl.jena.sparql.core.Var ;
 import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.engine.binding.BindingUtils ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
 import com.hp.hpl.jena.sparql.util.NodeUtils ;
 import com.hp.hpl.jena.sparql.util.NodeUtils.EqualityTest ;
 
@@ -148,8 +148,6 @@ public class ResultSetCompare
         rs1a.reset() ;    
         rs2a.reset() ;
         return isomorphic(rs1, rs2) ;
-
-        
     }
 
     
@@ -296,12 +294,12 @@ public class ResultSetCompare
     
     public static class BNodeIso implements EqualityTest
     {
-        private HashMap<Node, Node> mapping ;
+        private NodeIsomorphismMap mapping ;
         private EqualityTest literalTest ;
     
         public BNodeIso(EqualityTest literalTest)
         { 
-            this.mapping = new HashMap<Node, Node>() ;
+            this.mapping = new NodeIsomorphismMap() ;
             this.literalTest = literalTest ;
         }
     
@@ -319,16 +317,7 @@ public class ResultSetCompare
                 return literalTest.equal(n1, n2) ;
             
             if ( n1.isBlank() && n2.isBlank() )
-            {
-                Node x = mapping.get(n1) ;
-                if ( x == null )
-                {
-                    // Not present: map n1 to n2.
-                    mapping.put(n1, n2) ;
-                    return true ;
-                }
-                return x.equals(n2) ;
-            }
+                return  mapping.makeIsomorphic(n1, n2) ;
             
             return false ;
         }

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/FormatterElement.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/FormatterElement.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/FormatterElement.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/FormatterElement.java Fri Apr 27 15:36:06 2012
@@ -30,9 +30,12 @@ import com.hp.hpl.jena.graph.Triple ;
 import com.hp.hpl.jena.sparql.core.BasicPattern ;
 import com.hp.hpl.jena.sparql.core.PathBlock ;
 import com.hp.hpl.jena.sparql.core.TriplePath ;
+import com.hp.hpl.jena.sparql.core.Var ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
 import com.hp.hpl.jena.sparql.expr.Expr ;
 import com.hp.hpl.jena.sparql.path.PathWriter ;
 import com.hp.hpl.jena.sparql.syntax.* ;
+import com.hp.hpl.jena.sparql.util.FmtUtils ;
 
 
 public class FormatterElement extends FormatterBase
@@ -226,6 +229,69 @@ public class FormatterElement extends Fo
     }
 
     @Override
+    public void visit(ElementData el)
+    {
+        // QuerySrializer.outputDataBlock.
+        
+        List<Var> variables = el.getVars() ;
+        out.print("DATA ") ;
+        if ( variables.size() == 1 )
+        {
+            // Short form.
+            out.print("?") ;
+            out.print(variables.get(0).getVarName()) ;
+            out.print(" {") ;
+            out.incIndent() ;
+            for ( Binding valueRow : el.getRows() )
+            {
+                // A value may be null for UNDEF
+                for ( Var var : variables )
+                {
+                    out.print(" ") ;
+                    Node value = valueRow.get(var) ; 
+                    if ( value == null )
+                        out.print("UNDEF") ;
+                    else
+                        out.print(FmtUtils.stringForNode(value, context)) ;
+                }
+            }
+            out.decIndent() ;
+            out.print("}") ;
+            return ;
+        }
+        // Long form.
+        out.print("(") ;
+        for ( Var v : variables )
+        {
+            out.print(" ") ;
+            out.print(v) ;
+        }
+        out.print(" )") ;
+        out.print(" {") ;
+        out.incIndent() ;
+        for ( Binding valueRow : el.getRows() )
+        {
+            out.println() ;
+            // A value may be null for UNDEF
+            out.print("(") ;
+            for ( Var var : variables )
+            {
+                out.print(" ") ;
+                Node value = valueRow.get(var) ; 
+                if ( value == null )
+                    out.print("UNDEF") ;
+                else
+                    out.print(FmtUtils.stringForNode(value, context)) ;
+            }
+            out.print(" )") ;
+        }
+        out.decIndent() ;
+        out.ensureStartOfLine() ;
+        out.print("}") ;
+        
+    }
+
+    @Override
     public void visit(ElementUnion el)
     {
         if ( el.getElements().size() == 1 )

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/serializer/QuerySerializer.java Fri Apr 27 15:36:06 2012
@@ -266,16 +266,6 @@ public class QuerySerializer implements 
         }
     }
 
-    @Override
-    public void visitValues(Query query)
-    {
-        if ( query.hasValues() )
-        {
-            out.print("VALUES") ;
-            outputDataBlock(out, query.getValuesVariables(), query.getValuesData(),query) ;
-        }
-    }
-    
     private static void outputDataBlock(IndentedWriter out, List<Var> variables, List<Binding> values, Query query)
     {
         for ( Var v : variables )

Added: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementData.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementData.java?rev=1331471&view=auto
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementData.java (added)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementData.java Fri Apr 27 15:36:06 2012
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.hp.hpl.jena.sparql.syntax;
+
+import java.util.ArrayList ;
+import java.util.Iterator ;
+import java.util.List ;
+
+import com.hp.hpl.jena.sparql.ARQException ;
+import com.hp.hpl.jena.sparql.algebra.Table ;
+import com.hp.hpl.jena.sparql.algebra.table.TableData ;
+import com.hp.hpl.jena.sparql.core.Var ;
+import com.hp.hpl.jena.sparql.engine.binding.Binding ;
+import com.hp.hpl.jena.sparql.resultset.ResultSetCompare ;
+import com.hp.hpl.jena.sparql.util.NodeIsomorphismMap ;
+import com.hp.hpl.jena.sparql.util.NodeUtils ;
+
+public class ElementData extends Element
+{
+    private List<Var> vars = new ArrayList<Var>() ;
+    private List<Binding> rows = new ArrayList<Binding>() ;
+    
+    public ElementData()
+    {
+    }
+
+    public Table getTable()
+    {
+        return new TableData(vars, rows) ;
+    }
+
+    public List<Var> getVars()      { return vars ; }
+    public List<Binding> getRows()  { return rows ; }
+    
+    public void add(Var var)
+    { 
+        if ( ! vars.contains(var) ) 
+            vars.add(var) ; 
+    }
+    
+    public void add(Binding binding)
+    {
+        Iterator<Var> iter = binding.vars() ;
+        while(iter.hasNext())
+        {
+            Var v = iter.next() ;
+            if ( ! vars.contains(v) )
+                throw new ARQException("Variable "+v+" not already declared for ElementData") ;
+        }
+        rows.add(binding) ;
+    }
+    
+    @Override
+    public boolean equalTo(Element el2, NodeIsomorphismMap isoMap)
+    {
+        if ( ! ( el2 instanceof ElementData ) )
+            return false ;
+        ElementData f2 = (ElementData)el2 ;
+        if ( ! vars.equals(f2.vars) )
+            return false ;
+        if ( ! ResultSetCompare.equalsByTest(rows, f2.rows, new ResultSetCompare.BNodeIso(NodeUtils.sameTerm)) )
+            return false ;
+        return true ;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        return vars.hashCode()^rows.hashCode() ;
+    }
+
+    @Override
+    public void visit(ElementVisitor v)
+    {
+        v.visit(this) ;
+    }
+}

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitor.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitor.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitor.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitor.java Fri Apr 27 15:36:06 2012
@@ -25,6 +25,7 @@ public interface ElementVisitor
     public void visit(ElementFilter el) ;
     public void visit(ElementAssign el) ;
     public void visit(ElementBind el) ;
+    public void visit(ElementData el) ;
     public void visit(ElementUnion el) ;
     public void visit(ElementOptional el) ;
     public void visit(ElementGroup el) ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitorBase.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitorBase.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitorBase.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementVisitorBase.java Fri Apr 27 15:36:06 2012
@@ -37,6 +37,9 @@ public class ElementVisitorBase implemen
     public void visit(ElementBind el)           { }
 
     @Override
+    public void visit(ElementData el)           { }
+
+    @Override
     public void visit(ElementUnion el)          { }
 
     @Override

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementWalker.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementWalker.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementWalker.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/ElementWalker.java Fri Apr 27 15:36:06 2012
@@ -79,6 +79,12 @@ public class ElementWalker 
         }
         
         @Override
+        public void visit(ElementData el)
+        {
+            proc.visit(el) ;
+        }
+        
+        @Override
         public void visit(ElementUnion el)
         {
             for ( Element e : el.getElements() )

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/PatternVarsVisitor.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/PatternVarsVisitor.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/PatternVarsVisitor.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/PatternVarsVisitor.java Fri Apr 27 15:36:06 2012
@@ -91,7 +91,14 @@ public class PatternVarsVisitor extends 
     {
         acc.add(el.getVar()) ;
     }
-        
+
+    @Override
+    public void visit(ElementData el)
+    {
+        acc.addAll(el.getVars()) ;
+    }
+
+    
 //    @Override
 //    public void visit(ElementService el)
 //    {

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/RecursiveElementVisitor.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/RecursiveElementVisitor.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/RecursiveElementVisitor.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/syntax/RecursiveElementVisitor.java Fri Apr 27 15:36:06 2012
@@ -60,6 +60,9 @@ public class RecursiveElementVisitor imp
     public void startElement(ElementBind el) {} 
     public void endElement  (ElementBind el) {} 
 
+    public void startElement(ElementData el) {} 
+    public void endElement  (ElementData el) {} 
+
     public void startElement(ElementUnion el) {}
     public void endElement  (ElementUnion el) {}
     public void startSubElement(ElementUnion el, Element subElt) {}
@@ -144,6 +147,13 @@ public class RecursiveElementVisitor imp
     }
     
     @Override
+    public void visit(ElementData el)
+    {
+        startElement(el) ;
+        endElement(el) ;
+    }
+    
+    @Override
     public final void visit(ElementUnion el)
     {
         startElement(el) ;

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/NodeIsomorphismMap.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/NodeIsomorphismMap.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/NodeIsomorphismMap.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/NodeIsomorphismMap.java Fri Apr 27 15:36:06 2012
@@ -34,7 +34,7 @@ public class NodeIsomorphismMap //extend
     private Node get(Node key) { return map.get(key) ; }
     private void put(Node key, Node value) { map.put(key, value) ; }
     
-    public boolean makeIsomorhpic(Node n1, Node n2)
+    public boolean makeIsomorphic(Node n1, Node n2)
     {
         if ( n1.isBlank() && n2.isBlank() )
         {

Modified: incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java?rev=1331471&r1=1331470&r2=1331471&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/main/java/com/hp/hpl/jena/sparql/util/Utils.java Fri Apr 27 15:36:06 2012
@@ -243,7 +243,7 @@ public class Utils
     public static boolean nodeIso(Node n1, Node n2, NodeIsomorphismMap isoMap)
     {
         if ( isoMap != null && Var.isBlankNodeVar(n1) && Var.isBlankNodeVar(n2) )
-            return isoMap.makeIsomorhpic(n1, n2) ;
+            return isoMap.makeIsomorphic(n1, n2) ;
         return n1.equals(n2) ;
     }
 }