You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2014/05/24 20:37:56 UTC
svn commit: r1597334 - in
/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena: query/ARQ.java
sparql/algebra/optimize/Optimize.java
Author: andy
Date: Sat May 24 18:37:55 2014
New Revision: 1597334
URL: http://svn.apache.org/r1597334
Log:
Move expansion of simply property paths to be very early in the transformation order.
Add context synbol to control the path expansion step.
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
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=1597334&r1=1597333&r2=1597334&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 Sat May 24 18:37:55 2014
@@ -274,11 +274,18 @@ public class ARQ
public static final Symbol optimization = ARQConstants.allocSymbol("optimization") ;
/**
+ * Context key controlling whether the main query engine flattens simple paths
+ * (e.g. <tt>?x :p/:q ?z => ?x :p ?.0 . ?.0 ?q ?z</tt>)
+ * <p>Default is "true"
+ */
+ public static final Symbol optPathFlatten = ARQConstants.allocSymbol("optPathFlatten") ;
+
+ /**
* Context key controlling whether the main query engine moves filters to the "best" place.
* Default is "true" - filter placement is done.
*/
public static final Symbol optFilterPlacement = ARQConstants.allocSymbol("optFilterPlacement") ;
-
+
/**
* Context key controlling whether to do filter placement within BGP and quad blocks.
* Modies the effect of optFilterPlacement.
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=1597334&r1=1597333&r2=1597334&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 Sat May 24 18:37:55 2014
@@ -163,6 +163,10 @@ public class Optimize implements Rewrite
// Prepare expressions.
OpWalker.walk(op, new OpVisitorExprPrepare(context)) ;
+ // Convert paths to triple patterns if possible.
+ if ( context.isTrueOrUndef(ARQ.optPathFlatten) )
+ op = apply("Path flattening", new TransformPathFlattern(), op) ;
+
// Expression constant folding
if ( context.isTrueOrUndef(ARQ.optExprConstantFolding) )
op = Transformer.transform(new TransformCopy(), new ExprTransformConstantFold(), op);
@@ -206,10 +210,6 @@ public class Optimize implements Rewrite
if ( context.isTrueOrUndef(ARQ.optDistinctToReduced) )
op = apply("Distinct replaced with reduced", new TransformDistinctToReduced(), op) ;
- // Convert paths to triple patterns.
- // Also done in the AlgebraGenerator so this transform step catches programmatically built op expressions
- op = apply("Path flattening", new TransformPathFlattern(), op) ;
-
// Find joins/leftJoin that can be done by index joins (generally preferred as fixed memory overhead).
if ( context.isTrueOrUndef(ARQ.optIndexJoinStrategy) )
op = apply("Index Join strategy", new TransformJoinStrategy(), op) ;