Revision: 4071
http://bigdata.svn.sourceforge.net/bigdata/?rev=4071&view=rev
Author: thompsonbry
Date: 2011-01-10 22:09:06 +0000 (Mon, 10 Jan 2011)
Log Message:
-----------
Added 'optional' annotation to OptionalJoinGroup. This operator should perhaps be renamed 'SubqueryOp'.
Modified Paths:
--------------
branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/controller/OptionalJoinGroup.java
Modified: branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/controller/OptionalJoinGroup.java
===================================================================
--- branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/controller/OptionalJoinGroup.java 2011-01-09 21:21:38 UTC (rev 4070)
+++ branches/QUADS_QUERY_BRANCH/bigdata/src/java/com/bigdata/bop/controller/OptionalJoinGroup.java 2011-01-10 22:09:06 UTC (rev 4071)
@@ -78,6 +78,15 @@
String SUBQUERY = OptionalJoinGroup.class.getName() + ".subquery";
/**
+ * When <code>true</code> the subquery has optional semantics (if the
+ * subquery fails, the original binding set will be passed along to the
+ * downstream sink anyway).
+ */
+ String OPTIONAL = OptionalJoinGroup.class.getName() + ".optional";
+
+ boolean DEFAULT_OPTIONAL = true;
+
+ /**
* The maximum parallelism with which the subqueries will be evaluated
* (default {@value #DEFAULT_MAX_PARALLEL}).
*/
@@ -163,6 +172,7 @@
private final BOpContext<IBindingSet> context;
// private final List<FutureTask<IRunningQuery>> tasks = new LinkedList<FutureTask<IRunningQuery>>();
// private final CountDownLatch latch;
+ private final boolean optional;
private final int nparallel;
private final PipelineOp subquery;
private final Executor executor;
@@ -179,6 +189,9 @@
this.context = context;
+ this.optional = controllerOp.getProperty(Annotations.OPTIONAL,
+ Annotations.DEFAULT_OPTIONAL);
+
this.nparallel = controllerOp.getProperty(Annotations.MAX_PARALLEL,
Annotations.DEFAULT_MAX_PARALLEL);
@@ -385,7 +398,7 @@
// wait for the subquery.
runningQuery.get();
- if (ncopied == 0L) {
+ if (ncopied == 0L && optional) {
/*
* Since there were no solutions for the subquery, copy
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|