From: <mrp...@us...> - 2011-02-15 16:35:16
|
Revision: 4199 http://bigdata.svn.sourceforge.net/bigdata/?rev=4199&view=rev Author: mrpersonick Date: 2011-02-15 16:35:10 +0000 (Tue, 15 Feb 2011) Log Message: ----------- pruning variable bindings before they are materialized into BigdataValues Modified Paths: -------------- branches/QUADS_QUERY_BRANCH/bigdata-rdf/src/java/com/bigdata/rdf/store/BigdataBindingSetResolverator.java branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/BigdataEvaluationStrategyImpl3.java Modified: branches/QUADS_QUERY_BRANCH/bigdata-rdf/src/java/com/bigdata/rdf/store/BigdataBindingSetResolverator.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-rdf/src/java/com/bigdata/rdf/store/BigdataBindingSetResolverator.java 2011-02-15 16:21:09 UTC (rev 4198) +++ branches/QUADS_QUERY_BRANCH/bigdata-rdf/src/java/com/bigdata/rdf/store/BigdataBindingSetResolverator.java 2011-02-15 16:35:10 UTC (rev 4199) @@ -30,6 +30,8 @@ public class BigdataBindingSetResolverator extends AbstractChunkedResolverator<IBindingSet, IBindingSet, AbstractTripleStore> { + + private final IVariable[] required; /** * @@ -45,13 +47,23 @@ */ public BigdataBindingSetResolverator(final AbstractTripleStore db, final IChunkedOrderedIterator<IBindingSet> src) { + + this(db, src, null); + + } + + public BigdataBindingSetResolverator(final AbstractTripleStore db, + final IChunkedOrderedIterator<IBindingSet> src, + final IVariable[] required) { super(db, src, new BlockingBuffer<IBindingSet[]>( db.getChunkOfChunksCapacity(), db.getChunkCapacity(), db.getChunkTimeout(), TimeUnit.MILLISECONDS)); - + + this.required = required; + } /** @@ -87,28 +99,49 @@ assert bindingSet != null; - final Iterator<Map.Entry<IVariable, IConstant>> itr = bindingSet - .iterator(); + if (required == null) { + + final Iterator<Map.Entry<IVariable, IConstant>> itr = + bindingSet.iterator(); - while (itr.hasNext()) { - - final Map.Entry<IVariable, IConstant> entry = itr.next(); - - final IV iv = (IV) entry.getValue().get(); - - if (iv == null) { - - throw new RuntimeException("NULL? : var=" + entry.getKey() - + ", " + bindingSet); - - } - - ids.add(iv); - + while (itr.hasNext()) { + + final Map.Entry<IVariable, IConstant> entry = itr.next(); + + final IV iv = (IV) entry.getValue().get(); + + if (iv == null) { + + throw new RuntimeException("NULL? : var=" + entry.getKey() + + ", " + bindingSet); + + } + + ids.add(iv); + + } + + } else { + + for (IVariable v : required) { + + final IV iv = (IV) bindingSet.get(v).get(); + + if (iv == null) { + + throw new RuntimeException("NULL? : var=" + v + + ", " + bindingSet); + + } + + ids.add(iv); + + } + } } - + if (log.isInfoEnabled()) log.info("Resolving " + ids.size() + " term identifiers"); @@ -171,14 +204,19 @@ if (terms == null) throw new IllegalArgumentException(); - final IBindingSet bindingSet = solution; - - if(bindingSet == null) { + if(solution == null) { throw new IllegalStateException("BindingSet was not materialized"); } + final IBindingSet bindingSet; + if (required == null) { + bindingSet = solution; + } else { + bindingSet = solution.copy(required); + } + final Iterator<Map.Entry<IVariable, IConstant>> itr = bindingSet .iterator(); @@ -214,7 +252,7 @@ value)); } - + return bindingSet; } Modified: branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/BigdataEvaluationStrategyImpl3.java =================================================================== --- branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/BigdataEvaluationStrategyImpl3.java 2011-02-15 16:21:09 UTC (rev 4198) +++ branches/QUADS_QUERY_BRANCH/bigdata-sails/src/java/com/bigdata/rdf/sail/BigdataEvaluationStrategyImpl3.java 2011-02-15 16:35:10 UTC (rev 4199) @@ -833,7 +833,7 @@ * Begin native bigdata evaluation. */ CloseableIteration<BindingSet, QueryEvaluationException> result = doEvaluateNatively( - query, bs, queryEngine);// , sesameFilters); + query, bs, queryEngine, required);// , sesameFilters); /* * Use the basic filter iterator for any remaining filters which will be @@ -868,7 +868,7 @@ CloseableIteration<BindingSet, QueryEvaluationException> doEvaluateNatively(final PipelineOp query, final BindingSet bs, - final QueryEngine queryEngine + final QueryEngine queryEngine, final IVariable[] required // , final Collection<Filter> sesameFilters ) throws QueryEvaluationException { @@ -883,7 +883,7 @@ * Wrap up the native bigdata query solution iterator as Sesame * compatible iteration with materialized RDF Values. */ - return wrapQuery(runningQuery);//, sesameFilters); + return wrapQuery(runningQuery, required);//, sesameFilters); } catch (UnsupportedOperatorException t) { if (runningQuery != null) { @@ -919,7 +919,7 @@ * @throws QueryEvaluationException */ CloseableIteration<BindingSet, QueryEvaluationException> wrapQuery( - final IRunningQuery runningQuery + final IRunningQuery runningQuery, final IVariable[] required ) throws QueryEvaluationException { // The iterator draining the query solutions. @@ -938,7 +938,7 @@ // Convert bigdata binding sets to Sesame binding sets. new Bigdata2Sesame2BindingSetIterator<QueryEvaluationException>( // Materialize IVs as RDF Values. - new BigdataBindingSetResolverator(database, it2).start( + new BigdataBindingSetResolverator(database, it2, required).start( database.getExecutorService()))); return result; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |