Author: rvesse
Date: Wed Oct 16 15:01:27 2013
New Revision: 1532787
URL: http://svn.apache.org/r1532787
Log:
Enable new optimization which promotes table empty up the algebra where
possible allowing the query engine to avoid as much work as possible
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java?rev=1532787&r1=1532786&r2=1532787&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/query/ARQ.java Wed Oct 16
15:01:27 2013
@@ -347,6 +347,11 @@ public class ARQ
public static final Symbol optFilterDisjunction =
ARQConstants.allocSymbol("optFilterDisjunction") ;
/**
+ * Context key controlling whether the standard optimizer applies table
empty promotion
+ */
+ public static final Symbol optPromoteTableEmpty =
ARQConstants.allocSymbol("optPromoteTableEmpty") ;
+
+ /**
* Context key controlling whether the standard optimizer applies
optimizations to the evaluation
* of joins to favour index joins wherever possible
*/
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java?rev=1532787&r1=1532786&r2=1532787&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/Optimize.java
Wed Oct 16 15:01:27 2013
@@ -166,9 +166,7 @@ public class Optimize implements Rewrite
// Either, do filter placement and other sequence generating
transformations.
// or improve to place in a sequence (latter is better?)
-
- // Currently implicit join optimizations must be explicitly enabled
-
+
if ( context.isTrueOrUndef(ARQ.optFilterImplicitJoin) )
op = apply("Filter Implicit Join", new
TransformFilterImplicitJoin(), op);
@@ -181,6 +179,11 @@ public class Optimize implements Rewrite
op = apply("Filter Equality", new TransformFilterEquality(), op) ;
}
+ // Can promote table empty at this point since only the implicit join
optimizations
+ // are currently capable of introducing it
+ if ( context.isTrueOrUndef(ARQ.optPromoteTableEmpty) )
+ op = apply("Table Empty Promotion", new
TransformPromoteTableEmpty(), op) ;
+
if ( context.isTrueOrUndef(ARQ.optFilterDisjunction) )
op = apply("Filter Disjunction", new TransformFilterDisjunction(),
op) ;
Modified:
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java?rev=1532787&r1=1532786&r2=1532787&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java
(original)
+++
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/algebra/TS_Algebra.java
Wed Oct 16 15:01:27 2013
@@ -23,6 +23,7 @@ import com.hp.hpl.jena.sparql.algebra.op
import com.hp.hpl.jena.sparql.algebra.optimize.TestTransformFilters ;
import com.hp.hpl.jena.sparql.algebra.optimize.TestOptimizer ;
import com.hp.hpl.jena.sparql.algebra.optimize.TestTransformMergeBGPs ;
+import com.hp.hpl.jena.sparql.algebra.optimize.TestTransformPromoteTableEmpty;
import com.hp.hpl.jena.sparql.algebra.optimize.TestVarRename ;
import junit.framework.TestSuite ;
@@ -41,6 +42,7 @@ import org.junit.runners.Suite ;
, TestVarRename.class
, TestOptimizer.class
, TestTransformMergeBGPs.class
+ , TestTransformPromoteTableEmpty.class
, TestPattern2Join.class
// , TestUnionGraph.class