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 2016/01/08 23:36:45 UTC
[1/3] jena git commit: JENA-1113: Only expand IN and NOT IN for lists
below a limit.
Repository: jena
Updated Branches:
refs/heads/master b1fd4f0b7 -> 83654525e
JENA-1113: Only expand IN and NOT IN for lists below a limit.
The limit is set to 250.
Large fopr jand writtern expressions,
but small enough to protect the stack.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/9c33e848
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/9c33e848
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/9c33e848
Branch: refs/heads/master
Commit: 9c33e84865ba985a62df2d5c17181a63d43a8974
Parents: b1fd4f0
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jan 8 21:34:12 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Jan 8 21:34:12 2016 +0000
----------------------------------------------------------------------
.../algebra/optimize/TransformExpandOneOf.java | 39 ++++++++++++++------
1 file changed, 27 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/9c33e848/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
index 7816f4a..9bff870 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
@@ -20,6 +20,8 @@ package org.apache.jena.sparql.algebra.optimize;
import static org.apache.jena.sparql.expr.NodeValue.FALSE ;
import static org.apache.jena.sparql.expr.NodeValue.TRUE ;
+
+import org.apache.jena.sparql.ARQInternalErrorException ;
import org.apache.jena.sparql.algebra.Op ;
import org.apache.jena.sparql.algebra.TransformCopy ;
import org.apache.jena.sparql.algebra.op.OpFilter ;
@@ -62,28 +64,39 @@ public class TransformExpandOneOf extends TransformCopy
return expand(exprList) ;
}
+ /** Prescan to see if anything to consider */
private static boolean interesting(ExprList exprList)
{
- for ( Expr e : exprList )
- {
- if ( e instanceof E_OneOf ) return true ;
- if ( e instanceof E_NotOneOf ) return true ;
- }
- return false ;
+ return exprList.getList().stream().anyMatch((e)->processable(e)) ;
}
-
+
+ private static boolean processable(Expr e) {
+ return ( e instanceof E_OneOfBase ) && ((E_OneOfBase)e).getRHS().size() < REWRITE_LIMIT ;
+ }
+
+ private static int REWRITE_LIMIT = 250 ;
+
private static ExprList expand(ExprList exprList)
{
ExprList exprList2 = new ExprList() ;
for ( Expr e : exprList)
{
+
+ if ( ! processable(e) ) {
+ exprList2.add(e) ;
+ continue ;
+ }
+
if ( e instanceof E_OneOf )
{
// ?x IN (a,b) ===> (?x == a) || (?x == b)
// ?x IN () ===> false
-
+
E_OneOf exprOneOf = (E_OneOf)e ;
+ if ( exprOneOf.getRHS().size() > REWRITE_LIMIT )
+ // Too large - leave it alone.
+ continue ;
Expr x = exprOneOf.getLHS() ;
Expr disjunction = null ;
// if ?x IN () then it's false regardless.
@@ -95,7 +108,7 @@ public class TransformExpandOneOf extends TransformCopy
else
disjunction = new E_LogicalOr(disjunction, e2) ;
}
-
+
if ( disjunction == null )
exprList2.add(FALSE) ;
else
@@ -107,6 +120,9 @@ public class TransformExpandOneOf extends TransformCopy
// ?x NOT IN (a,b) ===> (?x != a) && (?x != b)
// ?x NOT IN () ===> TRUE (or nothing)
E_NotOneOf exprNotOneOf = (E_NotOneOf)e ;
+ if ( exprNotOneOf.getRHS().size() > REWRITE_LIMIT )
+ // Too large - leave it alone.
+ continue ;
Expr x = exprNotOneOf.getLHS() ;
if ( exprNotOneOf.getRHS().size() == 0 )
exprList2.add(TRUE) ;
@@ -117,10 +133,9 @@ public class TransformExpandOneOf extends TransformCopy
}
continue ;
}
-
- exprList2.add(e) ;
+ throw new ARQInternalErrorException() ;
}
-
+
return exprList2 ;
}
}
[3/3] jena git commit: Test for JENA-1113.
Posted by an...@apache.org.
Test for JENA-1113.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/83654525
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/83654525
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/83654525
Branch: refs/heads/master
Commit: 83654525e54240b6d70b7b36728cef561520a6c8
Parents: 925ef10
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jan 8 22:36:32 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Jan 8 22:36:32 2016 +0000
----------------------------------------------------------------------
.../algebra/optimize/TransformExpandOneOf.java | 2 +-
.../algebra/optimize/TestTransformFilters.java | 24 ++++++++++++++++++++
2 files changed, 25 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/83654525/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
index 76f8c2d..16df28c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
@@ -71,7 +71,7 @@ public class TransformExpandOneOf extends TransformCopy
return (e instanceof E_OneOfBase) && ((E_OneOfBase)e).getRHS().size() < REWRITE_LIMIT;
}
- private static int REWRITE_LIMIT = 250;
+ /*package*/ static int REWRITE_LIMIT = 250;
private static ExprList expand(ExprList exprList) {
ExprList exprList2 = new ExprList() ;
http://git-wip-us.apache.org/repos/asf/jena/blob/83654525/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java
index 02ae27a..12c2903 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/algebra/optimize/TestTransformFilters.java
@@ -486,6 +486,30 @@ public class TestTransformFilters extends AbstractTestTransform
t_expandOneOf,
"(filter true (distinct (filter (exprlist (!= ?x 1) (!= ?x 2)) (bgp (triple ?s ?p ?x)) )))") ;
}
+
+ @Test
+ public void oneOf6() {
+ // JENA-1113
+ int x = TransformExpandOneOf.REWRITE_LIMIT ;
+ try {
+ TransformExpandOneOf.REWRITE_LIMIT = 3 ;
+ testOp("(filter true (distinct (filter (notin ?x 1 2) (bgp (?s ?p ?x)) )))",
+ t_expandOneOf,
+ "(filter true (distinct (filter (exprlist (!= ?x 1) (!= ?x 2)) (bgp (triple ?s ?p ?x)) )))") ;
+ testOp("(filter true (distinct (filter (notin ?x 1 2 3) (bgp (?s ?p ?x)) )))",
+ t_expandOneOf,
+ // No change.
+ "(filter true (distinct (filter (notin ?x 1 2 3) (bgp (?s ?p ?x)) )))") ;
+
+ } finally {
+ TransformExpandOneOf.REWRITE_LIMIT = x ;
+ }
+ // Check reset.
+ testOp("(filter true (distinct (filter (notin ?x 1 2 3) (bgp (?s ?p ?x)) )))",
+ t_expandOneOf,
+ "(filter true (distinct (filter (exprlist (!= ?x 1) (!= ?x 2)) (bgp (triple ?s ?p ?x)) )))") ;
+ }
+
@Test public void implicitJoin01() {
testOp(
[2/3] jena git commit: Reformat
Posted by an...@apache.org.
Reformat
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/925ef107
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/925ef107
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/925ef107
Branch: refs/heads/master
Commit: 925ef1079f60e486a71c81e4e11e5c6dcdb9cdfc
Parents: 9c33e84
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jan 8 21:36:02 2016 +0000
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Jan 8 21:36:02 2016 +0000
----------------------------------------------------------------------
.../algebra/optimize/TransformExpandOneOf.java | 116 +++++++++----------
1 file changed, 54 insertions(+), 62 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/925ef107/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
index 9bff870..76f8c2d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/algebra/optimize/TransformExpandOneOf.java
@@ -18,15 +18,15 @@
package org.apache.jena.sparql.algebra.optimize;
-import static org.apache.jena.sparql.expr.NodeValue.FALSE ;
-import static org.apache.jena.sparql.expr.NodeValue.TRUE ;
+import static org.apache.jena.sparql.expr.NodeValue.FALSE;
+import static org.apache.jena.sparql.expr.NodeValue.TRUE;
-import org.apache.jena.sparql.ARQInternalErrorException ;
-import org.apache.jena.sparql.algebra.Op ;
-import org.apache.jena.sparql.algebra.TransformCopy ;
-import org.apache.jena.sparql.algebra.op.OpFilter ;
-import org.apache.jena.sparql.algebra.op.OpLeftJoin ;
-import org.apache.jena.sparql.expr.* ;
+import org.apache.jena.sparql.ARQInternalErrorException;
+import org.apache.jena.sparql.algebra.Op;
+import org.apache.jena.sparql.algebra.TransformCopy;
+import org.apache.jena.sparql.algebra.op.OpFilter;
+import org.apache.jena.sparql.algebra.op.OpLeftJoin;
+import org.apache.jena.sparql.expr.*;
public class TransformExpandOneOf extends TransformCopy
{
@@ -35,91 +35,83 @@ public class TransformExpandOneOf extends TransformCopy
// Expressions to expand can be in two places: OpFilter and the expr of OpLeftJoin.
@Override
- public Op transform(OpFilter opFilter, Op subOp)
- {
- ExprList exprList = opFilter.getExprs() ;
- ExprList exprList2 = process(exprList) ;
+ public Op transform(OpFilter opFilter, Op subOp) {
+ ExprList exprList = opFilter.getExprs();
+ ExprList exprList2 = process(exprList);
if ( exprList2 == null )
- return super.transform(opFilter, subOp) ;
- Op opFilter2 = OpFilter.filter(exprList2, subOp) ;
- return opFilter2 ;
+ return super.transform(opFilter, subOp);
+ Op opFilter2 = OpFilter.filter(exprList2, subOp);
+ return opFilter2;
}
-
+
@Override
- public Op transform(OpLeftJoin opLeftJoin, Op opLeft, Op opRight)
- {
- ExprList exprList = opLeftJoin.getExprs() ;
+ public Op transform(OpLeftJoin opLeftJoin, Op opLeft, Op opRight) {
+ ExprList exprList = opLeftJoin.getExprs();
if ( exprList == null )
- return opLeftJoin ;
- ExprList exprList2 = process(exprList) ;
+ return opLeftJoin;
+ ExprList exprList2 = process(exprList);
if ( exprList2 == null )
- return opLeftJoin ;
- return OpLeftJoin.create(opLeft, opRight, exprList2) ;
+ return opLeftJoin;
+ return OpLeftJoin.create(opLeft, opRight, exprList2);
}
- private static ExprList process(ExprList exprList)
- {
+ private static ExprList process(ExprList exprList) {
if ( !interesting(exprList) )
- return null ;
- return expand(exprList) ;
+ return null;
+ return expand(exprList);
}
/** Prescan to see if anything to consider */
- private static boolean interesting(ExprList exprList)
- {
- return exprList.getList().stream().anyMatch((e)->processable(e)) ;
+ private static boolean interesting(ExprList exprList) {
+ return exprList.getList().stream().anyMatch((e) -> processable(e));
}
-
+
+ /** Check whether the expression is to be processed here */
private static boolean processable(Expr e) {
- return ( e instanceof E_OneOfBase ) && ((E_OneOfBase)e).getRHS().size() < REWRITE_LIMIT ;
+ return (e instanceof E_OneOfBase) && ((E_OneOfBase)e).getRHS().size() < REWRITE_LIMIT;
}
-
- private static int REWRITE_LIMIT = 250 ;
-
- private static ExprList expand(ExprList exprList)
- {
+
+ private static int REWRITE_LIMIT = 250;
+
+ private static ExprList expand(ExprList exprList) {
ExprList exprList2 = new ExprList() ;
- for ( Expr e : exprList)
- {
-
- if ( ! processable(e) ) {
- exprList2.add(e) ;
- continue ;
+ for ( Expr e : exprList ) {
+
+ if ( !processable(e) ) {
+ exprList2.add(e);
+ continue;
}
-
- if ( e instanceof E_OneOf )
- {
+
+ if ( e instanceof E_OneOf ) {
// ?x IN (a,b) ===> (?x == a) || (?x == b)
- // ?x IN () ===> false
+ // ?x IN () ===> false
E_OneOf exprOneOf = (E_OneOf)e ;
if ( exprOneOf.getRHS().size() > REWRITE_LIMIT )
// Too large - leave it alone.
- continue ;
- Expr x = exprOneOf.getLHS() ;
- Expr disjunction = null ;
- // if ?x IN () then it's false regardless.
- for ( Expr sub : exprOneOf.getRHS() )
- {
- Expr e2 = new E_Equals(x, sub) ;
+ continue;
+ Expr x = exprOneOf.getLHS();
+ Expr disjunction = null;
+ // if ?x IN () then it's false regardless.
+ for ( Expr sub : exprOneOf.getRHS() ) {
+ Expr e2 = new E_Equals(x, sub);
if ( disjunction == null )
- disjunction = e2 ;
+ disjunction = e2;
else
- disjunction = new E_LogicalOr(disjunction, e2) ;
+ disjunction = new E_LogicalOr(disjunction, e2);
}
if ( disjunction == null )
- exprList2.add(FALSE) ;
+ exprList2.add(FALSE);
else
- exprList2.add(disjunction) ;
- continue ;
+ exprList2.add(disjunction);
+ continue;
}
- if ( e instanceof E_NotOneOf )
- {
+ if ( e instanceof E_NotOneOf ) {
// ?x NOT IN (a,b) ===> (?x != a) && (?x != b)
// ?x NOT IN () ===> TRUE (or nothing)
- E_NotOneOf exprNotOneOf = (E_NotOneOf)e ;
+ E_NotOneOf exprNotOneOf = (E_NotOneOf)e;
if ( exprNotOneOf.getRHS().size() > REWRITE_LIMIT )
// Too large - leave it alone.
continue ;