Author: jpz6311whu
Date: Wed Jul  9 01:52:13 2014
New Revision: 1608984

URL: http://svn.apache.org/r1608984
Log:
implement the whole row querying for property table

Added:
    
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTable.java
   (with props)
    
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTableRow.java
   (with props)
    
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/RowMatch.java
   (with props)
    
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/StageGeneratorPropertyTable.java
   (with props)
Modified:
    
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/PropertyTable.java
    
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/Row.java
    
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/GraphPropertyTable.java
    
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableBuilder.java
    
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableImpl.java
    
jena/Experimental/jena-csv/src/test/java/com/hp/hpl/jena/propertytable/impl/GraphCSVTest.java

Modified: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/PropertyTable.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/PropertyTable.java?rev=1608984&r1=1608983&r2=1608984&view=diff
==============================================================================
--- 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/PropertyTable.java
 (original)
+++ 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/PropertyTable.java
 Wed Jul  9 01:52:13 2014
@@ -93,4 +93,17 @@ public interface PropertyTable {
        Row getRow(Node s);
        
        
+       /**
+        * Create Row by its rowKey Node of the subject
+        * @param s, rowKey Node of the subject
+        * @return the Row created
+        */
+       Row createRow(Node s);
+       
+       
+       /**
+        * Get all of the rows as an iterator
+        */
+       ExtendedIterator<Row> getRowIterator();
+       
 }

Modified: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/Row.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/Row.java?rev=1608984&r1=1608983&r2=1608984&view=diff
==============================================================================
--- 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/Row.java 
(original)
+++ 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/Row.java 
Wed Jul  9 01:52:13 2014
@@ -18,6 +18,8 @@
 
 package com.hp.hpl.jena.propertytable;
 
+import java.util.Collection;
+
 import com.hp.hpl.jena.graph.Node;
 import com.hp.hpl.jena.graph.Triple;
 import com.hp.hpl.jena.util.iterator.ExtendedIterator;
@@ -47,6 +49,14 @@ public interface Row {
         */
        Node getValue(Column column);
        
+       
+       /**
+        * Get the value of the Column in this Row
+        * @param ColumnKey
+        * @return value
+        */
+       Node getValue(Node ColumnKey);
+       
        /**
         * @return the rowKey Node of the subject
         */
@@ -56,5 +66,10 @@ public interface Row {
         * @return the Triple Iterator over the values in this Row
         */
        ExtendedIterator<Triple> getTripleIterator();
+       
+       /**
+        * @return all of the Columns of the PropertyTable
+        */
+       Collection<Column> getColumns();
 
 }

Modified: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/GraphPropertyTable.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/GraphPropertyTable.java?rev=1608984&r1=1608983&r2=1608984&view=diff
==============================================================================
--- 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/GraphPropertyTable.java
 (original)
+++ 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/GraphPropertyTable.java
 Wed Jul  9 01:52:13 2014
@@ -18,6 +18,7 @@
 
 package com.hp.hpl.jena.propertytable.impl;
 
+import java.util.ArrayList;
 import java.util.Locale;
 
 import com.hp.hpl.jena.graph.Node;
@@ -27,9 +28,12 @@ import com.hp.hpl.jena.graph.TripleMatch
 import com.hp.hpl.jena.graph.impl.GraphBase;
 import com.hp.hpl.jena.propertytable.Column;
 import com.hp.hpl.jena.propertytable.PropertyTable;
+import com.hp.hpl.jena.propertytable.Row;
+import com.hp.hpl.jena.sparql.core.BasicPattern;
 import com.hp.hpl.jena.util.iterator.ExtendedIterator;
 import com.hp.hpl.jena.util.iterator.Filter;
 import com.hp.hpl.jena.util.iterator.NullIterator;
+import com.hp.hpl.jena.util.iterator.WrappedIterator;
 
 public class GraphPropertyTable extends GraphBase {
 
@@ -39,6 +43,10 @@ public class GraphPropertyTable extends 
                this.pt = pt;
        }
 
+       public PropertyTable getPropertyTable() {
+               return pt;
+       }
+
        @Override
        protected ExtendedIterator<Triple> graphBaseFind(TripleMatch m) {
                //System.out.println(m);
@@ -75,6 +83,63 @@ public class GraphPropertyTable extends 
                return iter.filterKeep(new 
TripleMatchFilterEquality(m.asTriple()));
 
        }
+       
+       protected ExtendedIterator<Row> propertyTableBaseFind(RowMatch m) {
+               
+               if (this.pt == null) {
+                       return NullIterator.instance();
+               }
+               
+               ExtendedIterator<Row> iter = null;
+
+               Node s = m.getMatchSubject();
+
+               if ( isConcrete(s) ){
+                       Row row= pt.getRow(s);
+                       if (row == null){
+                               return NullIterator.instance();
+                       } else {
+                               ArrayList<Row> rows = new ArrayList<Row>();
+                               rows.add(row);
+                               return WrappedIterator.create(rows.iterator());
+                       }
+               } else {
+                       iter = pt.getRowIterator();
+               }
+               
+               return iter.filterKeep(new RowMatchFilterEquality( m ));
+               
+       }
+       
+       static class RowMatchFilterEquality extends Filter<Row> {
+               final protected RowMatch rMatch;
+
+               public RowMatchFilterEquality(RowMatch rMatch) {
+                       this.rMatch = rMatch;
+               }
+
+               @Override
+               public boolean accept(Row r) {
+                       return rowContained(rMatch, r);
+               }
+
+       }
+       
+       static boolean rowContained(RowMatch rMatch, Row row) {
+                       
+               boolean contained = equalNode(rMatch.getSubject(), 
row.getRowKey());
+               if(contained){
+                       BasicPattern pattern =rMatch.getBasicPattern();
+                       for(Triple triple: pattern ){
+                               contained = equalNode(triple.getObject(), 
row.getValue( triple.getPredicate()) );
+                               if (! contained){
+                                       break;
+                               }
+                       }
+               } 
+               return contained;
+       }
+       
 
        static class TripleMatchFilterEquality extends Filter<Triple> {
                final protected Triple tMatch;

Modified: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableBuilder.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableBuilder.java?rev=1608984&r1=1608983&r2=1608984&view=diff
==============================================================================
--- 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableBuilder.java
 (original)
+++ 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableBuilder.java
 Wed Jul  9 01:52:13 2014
@@ -57,7 +57,7 @@ public class PropertyTableBuilder {
                                }
                        } else {
                                Node subject = LangCSV.caculateSubject(rowNum, 
csvFilePath);
-                               Row row = table.getRow(subject);
+                               Row row = table.createRow(subject);
                                
                                row.setValue(table.getColumn(CSV_ROW_NODE), 
NodeFactory.createLiteral(
                                                (rowNum + ""), 
XSDDatatype.XSDinteger));

Modified: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableImpl.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableImpl.java?rev=1608984&r1=1608983&r2=1608984&view=diff
==============================================================================
--- 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableImpl.java
 (original)
+++ 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/PropertyTableImpl.java
 Wed Jul  9 01:52:13 2014
@@ -129,7 +129,12 @@ public class PropertyTableImpl implement
        @Override
        public ExtendedIterator<Triple> getTripleIterator(Row row) {
                // use PSO index ( O(n), n= column count )
-               return row.getTripleIterator();
+               ArrayList<Triple> triples = new ArrayList<Triple>();
+               for (Column column : getColumns()) {
+                       Node value = row.getValue(column);
+                       triples.add(Triple.create(row.getRowKey(), 
column.getColumnKey(), value));
+               }
+               return WrappedIterator.create(triples.iterator());
        }
 
        @Override
@@ -162,6 +167,13 @@ public class PropertyTableImpl implement
                if (s == null)
                        throw new NullPointerException("subject node is null");
                Row row = rowIndex.get(s);
+               return row;
+
+       }
+       
+       @Override
+       public Row createRow(final Node s){
+               Row row = this.getRow(s);
                if (row != null)
                        return row;
 
@@ -171,6 +183,11 @@ public class PropertyTableImpl implement
 
                return row;
        }
+       
+       @Override
+       public ExtendedIterator<Row> getRowIterator() {
+               return WrappedIterator.create(rowList.iterator());
+       }
 
        private final void setX(final Node s, final Node p, final Node value) {
                if (p == null)
@@ -245,6 +262,11 @@ public class PropertyTableImpl implement
                public Node getValue(Column column) {
                        return getX(key, column.getColumnKey());
                }
+               
+               @Override
+               public Node getValue(Node columnKey) {
+                       return getX(key, columnKey);
+               }
 
                @Override
                public PropertyTable getTable() {
@@ -257,6 +279,12 @@ public class PropertyTableImpl implement
                }
 
                @Override
+               public Collection<Column> getColumns() {
+                       // TODO Auto-generated method stub
+                       return PropertyTableImpl.this.getColumns();
+               }
+
+               @Override
                public ExtendedIterator<Triple> getTripleIterator() {
                        ArrayList<Triple> triples = new ArrayList<Triple>();
                        for (Column column : getColumns()) {
@@ -268,4 +296,6 @@ public class PropertyTableImpl implement
 
        }
 
+
+
 }

Added: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTable.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTable.java?rev=1608984&view=auto
==============================================================================
--- 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTable.java
 (added)
+++ 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTable.java
 Wed Jul  9 01:52:13 2014
@@ -0,0 +1,102 @@
+package com.hp.hpl.jena.propertytable.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.jena.atlas.io.IndentedWriter;
+
+import com.hp.hpl.jena.graph.Graph;
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.sparql.core.BasicPattern;
+import com.hp.hpl.jena.sparql.engine.ExecutionContext;
+import com.hp.hpl.jena.sparql.engine.QueryIterator;
+import com.hp.hpl.jena.sparql.engine.binding.Binding;
+import com.hp.hpl.jena.sparql.engine.iterator.QueryIter1;
+import com.hp.hpl.jena.sparql.serializer.SerializationContext;
+import com.hp.hpl.jena.sparql.util.FmtUtils;
+import com.hp.hpl.jena.sparql.util.Utils;
+
+public class QueryIterPropertyTable extends QueryIter1
+       {
+           private BasicPattern pattern ;
+           private Graph graph ;
+           private QueryIterator output ;
+           
+           public static QueryIterator create(QueryIterator input,
+                                              BasicPattern pattern , 
+                                              ExecutionContext execContext)
+           {
+               return new QueryIterPropertyTable(input, pattern, execContext) ;
+           }
+           
+           private QueryIterPropertyTable(QueryIterator input,
+                                           BasicPattern pattern , 
+                                           ExecutionContext execContext)
+           {
+               super(input, execContext) ;
+               this.pattern = pattern ;
+               graph = execContext.getActiveGraph() ;
+               // Create a chain of triple iterators.
+               QueryIterator chain = getInput() ;
+               Collection<BasicPattern> patterns = sort(pattern);
+               for (BasicPattern p : patterns)
+                   chain = new QueryIterPropertyTableRow(chain, p, 
execContext) ;
+               output = chain ;
+           }
+           
+           private Collection<BasicPattern> sort(BasicPattern pattern){
+               HashMap<Node, BasicPattern> map= new HashMap<Node, 
BasicPattern>();
+               for(Triple triple: pattern.getList()){
+                       Node subject = triple.getSubject();
+                       if(! map.containsKey(subject)){
+                               List<Triple> triples = new ArrayList<Triple>();
+                               BasicPattern p = BasicPattern.wrap(triples);
+                               map.put(subject, p);
+                               p.add(triple);
+                       }else {
+                               map.get(subject).add(triple);
+                       }
+               }
+               return map.values();
+           }
+
+           @Override
+           protected boolean hasNextBinding()
+           {
+               return output.hasNext() ;
+           }
+
+           @Override
+           protected Binding moveToNextBinding()
+           {
+               return output.nextBinding() ;
+           }
+
+           @Override
+           protected void closeSubIterator()
+           {
+               if ( output != null )
+                   output.close() ;
+               output = null ;
+           }
+           
+           @Override
+           protected void requestSubCancel()
+           {
+               if ( output != null )
+                   output.cancel();
+           }
+
+           @Override
+           protected void details(IndentedWriter out, SerializationContext 
sCxt)
+           {
+               out.print(Utils.className(this)) ;
+               out.println() ;
+               out.incIndent() ;
+               FmtUtils.formatPattern(out, pattern, sCxt) ;
+               out.decIndent() ;
+           }
+}

Propchange: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTable.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTableRow.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTableRow.java?rev=1608984&view=auto
==============================================================================
--- 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTableRow.java
 (added)
+++ 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTableRow.java
 Wed Jul  9 01:52:13 2014
@@ -0,0 +1,217 @@
+package com.hp.hpl.jena.propertytable.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.graph.Triple;
+import com.hp.hpl.jena.propertytable.PropertyTable;
+import com.hp.hpl.jena.propertytable.Row;
+import com.hp.hpl.jena.sparql.ARQInternalErrorException;
+import com.hp.hpl.jena.sparql.core.BasicPattern;
+import com.hp.hpl.jena.sparql.core.Var;
+import com.hp.hpl.jena.sparql.engine.ExecutionContext;
+import com.hp.hpl.jena.sparql.engine.QueryIterator;
+import com.hp.hpl.jena.sparql.engine.binding.Binding;
+import com.hp.hpl.jena.sparql.engine.binding.BindingFactory;
+import com.hp.hpl.jena.sparql.engine.binding.BindingMap;
+import com.hp.hpl.jena.sparql.engine.iterator.QueryIter;
+import com.hp.hpl.jena.sparql.engine.iterator.QueryIterRepeatApply;
+import com.hp.hpl.jena.util.iterator.ClosableIterator;
+import com.hp.hpl.jena.util.iterator.ExtendedIterator;
+import com.hp.hpl.jena.util.iterator.NiceIterator;
+import com.hp.hpl.jena.util.iterator.WrappedIterator;
+
+public class QueryIterPropertyTableRow  extends QueryIterRepeatApply{
+    private final BasicPattern pattern ;
+    
+    public QueryIterPropertyTableRow( QueryIterator input,
+                                   BasicPattern pattern , 
+                                   ExecutionContext cxt)
+    {
+        super(input, cxt) ;
+        this.pattern = pattern ;
+    }
+
+    @Override
+    protected QueryIterator nextStage(Binding binding)
+    {
+        return new RowMapper(binding, pattern, getExecContext()) ;
+    }
+    
+    static int countMapper = 0 ; 
+    static class RowMapper extends QueryIter
+    {   
+       private PropertyTable table;
+       
+       private BasicPattern pattern;
+        private Binding binding ;
+        private ClosableIterator<Row> graphIter ;
+        private Binding slot = null ;
+        private boolean finished = false ;
+        private volatile boolean cancelled = false ;
+
+        RowMapper(Binding binding, BasicPattern pattern, ExecutionContext cxt)
+        {
+            super(cxt) ;
+            GraphPropertyTable graph = 
(GraphPropertyTable)cxt.getActiveGraph() ;
+            
+            this.pattern = substitute(pattern, binding);
+            this.binding = binding ;
+            BasicPattern pattern2 = tripleNode(pattern);
+            
+            ExtendedIterator<Row> iter = graph.propertyTableBaseFind( new 
RowMatch( pattern2) );
+            
+            if ( false )
+            {
+                // Materialize the results now. Debugging only.
+                List<Row> x = iter.toList() ;
+                this.graphIter = WrappedIterator.create(x.iterator()) ;
+                iter.close();
+            }
+            else
+                // Stream.
+                this.graphIter = iter ;
+        }
+
+        private static Node tripleNode(Node node)
+        {
+            if ( node.isVariable() )
+                return Node.ANY ;
+            return node ;
+        }
+        
+        private static BasicPattern tripleNode(BasicPattern pattern)
+        {
+               List<Triple> triples = new ArrayList<Triple>();
+               for (Triple triple: pattern){
+                       triples.add( tripleNode(triple) );
+               }
+               return BasicPattern.wrap(triples);
+        }
+        
+        private static Triple tripleNode(Triple triple){
+            Node s = tripleNode(triple.getSubject()) ;
+            Node p = tripleNode(triple.getPredicate()) ;
+            Node o = tripleNode(triple.getObject()) ;
+            return Triple.create(s, p, o);
+        }
+
+        private static Node substitute(Node node, Binding binding)
+        {
+            if ( Var.isVar(node) )
+            {
+                Node x = binding.get(Var.alloc(node)) ;
+                if ( x != null )
+                    return x ;
+            }
+            return node ;
+        }
+        
+        private static Triple substitute(Triple triple, Binding binding){
+            Node s = substitute(triple.getSubject(), binding) ;
+            Node p = substitute(triple.getPredicate(), binding) ;
+            Node o = substitute(triple.getObject(), binding) ;
+            return Triple.create(s, p, o);
+        }
+        
+        private static BasicPattern substitute(BasicPattern pattern , Binding 
binding)
+        {
+               List<Triple> triples = new ArrayList<Triple>();
+               for (Triple triple: pattern){
+                       triples.add( substitute(triple,binding) );
+               }
+               return BasicPattern.wrap(triples);
+        }
+        
+        private Binding mapper(Row r)
+        {
+            BindingMap results = BindingFactory.create(binding) ;
+
+            if ( ! insert(pattern, r, results) )
+                return null ; 
+            return results ;
+        }
+        
+        private static boolean insert(BasicPattern input, Row output, 
BindingMap results)
+        {      
+               for (Triple triple: input){
+                       if (! insert(triple, output, results) ){
+                               return false;
+                       }
+               }
+               return true;
+        }
+        
+        private static boolean insert(Triple input, Row output, BindingMap 
results){
+               if ( ! insert(input.getSubject(), output.getRowKey(), results) )
+                return false ;
+//             if ( ! insert(input.getPredicate(), output.get, results) )
+//                return false ;
+            if ( ! insert(input.getObject(), output.getValue( 
input.getPredicate() ), results) )
+                return false ;
+            return true;
+        }
+
+        private static boolean insert(Node inputNode, Node outputNode, 
BindingMap results)
+        {
+            if ( ! Var.isVar(inputNode) )
+                return true ;
+            
+            Var v = Var.alloc(inputNode) ;
+            Node x = results.get(v) ;
+            if ( x != null )
+                return outputNode.equals(x) ;
+            
+            results.add(v, outputNode) ;
+            return true ;
+        }
+        
+        @Override
+        protected boolean hasNextBinding()
+        {
+            if ( finished ) return false ;
+            if ( slot != null ) return true ;
+            if ( cancelled )
+            {
+                graphIter.close() ;
+                finished = true ;
+                return false ;
+            }
+
+            while(graphIter.hasNext() && slot == null )
+            {
+                Row r = graphIter.next() ;
+                slot = mapper(r) ;
+            }
+            if ( slot == null )
+                finished = true ;
+            return slot != null ;
+        }
+
+        @Override
+        protected Binding moveToNextBinding()
+        {
+            if ( ! hasNextBinding() ) 
+                throw new ARQInternalErrorException() ;
+            Binding r = slot ;
+            slot = null ;
+            return r ;
+        }
+
+        @Override
+        protected void closeIterator()
+        {
+            if ( graphIter != null )
+                NiceIterator.close(graphIter) ;
+            graphIter = null ;
+        }
+        
+        @Override
+        protected void requestCancel()
+        {
+            // The QueryIteratorBase machinary will do the real work.
+            cancelled = true ;
+        }
+    }
+}

Propchange: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/QueryIterPropertyTableRow.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/RowMatch.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/RowMatch.java?rev=1608984&view=auto
==============================================================================
--- 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/RowMatch.java
 (added)
+++ 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/RowMatch.java
 Wed Jul  9 01:52:13 2014
@@ -0,0 +1,26 @@
+package com.hp.hpl.jena.propertytable.impl;
+
+import com.hp.hpl.jena.graph.Node;
+import com.hp.hpl.jena.sparql.core.BasicPattern;
+
+public class RowMatch {
+       
+       private BasicPattern pattern;
+       
+       public RowMatch( BasicPattern pattern ){                
+               this.pattern=pattern;
+       }
+
+       public Node getMatchSubject(){
+               return pattern.get(0).getMatchSubject();
+       }
+       
+       public Node getSubject(){
+               return pattern.get(0).getSubject();
+       }
+       
+       public BasicPattern getBasicPattern(){
+               return pattern;
+       }
+
+}

Propchange: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/RowMatch.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/StageGeneratorPropertyTable.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/StageGeneratorPropertyTable.java?rev=1608984&view=auto
==============================================================================
--- 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/StageGeneratorPropertyTable.java
 (added)
+++ 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/StageGeneratorPropertyTable.java
 Wed Jul  9 01:52:13 2014
@@ -0,0 +1,37 @@
+package com.hp.hpl.jena.propertytable.impl;
+
+import com.hp.hpl.jena.graph.Graph;
+import com.hp.hpl.jena.sparql.core.BasicPattern;
+import com.hp.hpl.jena.sparql.engine.ExecutionContext;
+import com.hp.hpl.jena.sparql.engine.QueryIterator;
+import com.hp.hpl.jena.sparql.engine.main.StageGenerator;
+
+public class StageGeneratorPropertyTable implements StageGenerator {
+
+    // Using OpExecutor is preferred.
+    StageGenerator above = null ;
+    
+    public StageGeneratorPropertyTable(StageGenerator original)
+    {
+        above = original ;
+    }
+    
+    @Override
+    public QueryIterator execute(BasicPattern pattern, QueryIterator input, 
ExecutionContext execCxt)
+    {
+        // --- In case this isn't for GraphPropertyTable
+        Graph g = execCxt.getActiveGraph() ;
+        
+        if ( ! ( g instanceof GraphPropertyTable ) )
+            // Not us - bounce up the StageGenerator chain
+            return above.execute(pattern, input, execCxt) ;
+        if (pattern.size() <= 1){
+               System.out.println( "<=1 "+ pattern);
+               return above.execute(pattern, input, execCxt) ;
+        }
+        System.out.println( ">1" + pattern);
+        return QueryIterPropertyTable.create(input, pattern, execCxt);
+    }
+    
+
+}

Propchange: 
jena/Experimental/jena-csv/src/main/java/com/hp/hpl/jena/propertytable/impl/StageGeneratorPropertyTable.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: 
jena/Experimental/jena-csv/src/test/java/com/hp/hpl/jena/propertytable/impl/GraphCSVTest.java
URL: 
http://svn.apache.org/viewvc/jena/Experimental/jena-csv/src/test/java/com/hp/hpl/jena/propertytable/impl/GraphCSVTest.java?rev=1608984&r1=1608983&r2=1608984&view=diff
==============================================================================
--- 
jena/Experimental/jena-csv/src/test/java/com/hp/hpl/jena/propertytable/impl/GraphCSVTest.java
 (original)
+++ 
jena/Experimental/jena-csv/src/test/java/com/hp/hpl/jena/propertytable/impl/GraphCSVTest.java
 Wed Jul  9 01:52:13 2014
@@ -18,9 +18,10 @@ package com.hp.hpl.jena.propertytable.im
  */
 
 import org.junit.Assert;
+import org.junit.Ignore;
 import org.junit.Test;
 
-import com.hp.hpl.jena.propertytable.impl.GraphCSV;
+import com.hp.hpl.jena.query.ARQ;
 import com.hp.hpl.jena.query.Query;
 import com.hp.hpl.jena.query.QueryExecution;
 import com.hp.hpl.jena.query.QueryExecutionFactory;
@@ -29,10 +30,14 @@ import com.hp.hpl.jena.query.QuerySoluti
 import com.hp.hpl.jena.query.ResultSet;
 import com.hp.hpl.jena.rdf.model.Model;
 import com.hp.hpl.jena.rdf.model.ModelFactory;
-import com.hp.hpl.jena.util.PrintUtil;
+import com.hp.hpl.jena.sparql.algebra.Algebra;
+import com.hp.hpl.jena.sparql.algebra.Op;
+import com.hp.hpl.jena.sparql.engine.main.StageBuilder;
+import com.hp.hpl.jena.sparql.engine.main.StageGenerator;
 
 public class GraphCSVTest extends Assert {
        
+       @Ignore
        @Test
        public void testGraphCSV() throws Exception {
                String file = "src/test/resources/test.csv";
@@ -53,4 +58,16 @@ public class GraphCSVTest extends Assert
                
                assertFalse(results.hasNext());
        }
+       
+       @Test 
+       public void stageGeneratorTest() throws Exception{
+               wireIntoExecution();
+               testGraphCSV();
+       }
+       
+    private static void wireIntoExecution() {
+        StageGenerator orig = 
(StageGenerator)ARQ.getContext().get(ARQ.stageGenerator) ;
+        StageGenerator stageGenerator = new StageGeneratorPropertyTable(orig) ;
+        StageBuilder.setGenerator(ARQ.getContext(), stageGenerator) ;
+    }
 }


Reply via email to