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) ;
+ }
}