|
From: <jer...@us...> - 2013-09-26 14:52:57
|
Revision: 7418
http://bigdata.svn.sourceforge.net/bigdata/?rev=7418&view=rev
Author: jeremy_carroll
Date: 2013-09-26 14:52:49 +0000 (Thu, 26 Sep 2013)
Log Message:
-----------
Test and fix for optimizing optionals with ALPP. trac746
Modified Paths:
--------------
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/ASTComplexOptionalOptimizer.java
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/TestASTNamedSubqueryOptimizer.java
branches/BIGDATA_RELEASE_1_3_0/bigdata-sails/src/test/com/bigdata/rdf/sail/sparql/AbstractBigdataExprBuilderTestCase.java
Added Paths:
-----------
branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/ticket746.txt
Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/ASTComplexOptionalOptimizer.java
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/ASTComplexOptionalOptimizer.java 2013-09-21 12:39:31 UTC (rev 7417)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/java/com/bigdata/rdf/sparql/ast/optimizers/ASTComplexOptionalOptimizer.java 2013-09-26 14:52:49 UTC (rev 7418)
@@ -36,6 +36,7 @@
import com.bigdata.bop.IBindingSet;
import com.bigdata.bop.IVariable;
import com.bigdata.rdf.sparql.ast.ASTBase;
+import com.bigdata.rdf.sparql.ast.ArbitraryLengthPathNode;
import com.bigdata.rdf.sparql.ast.AssignmentNode;
import com.bigdata.rdf.sparql.ast.FilterNode;
import com.bigdata.rdf.sparql.ast.GraphPatternGroup;
@@ -346,7 +347,8 @@
|| t instanceof NamedSubqueryInclude
|| t instanceof SubqueryRoot
|| t instanceof ServiceNode
- || t instanceof UnionNode) {
+ || t instanceof UnionNode
+ || t instanceof ArbitraryLengthPathNode ) {
// Moved to the named subquery.
// move.add(t);
group.removeChild(t);
Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/TestASTNamedSubqueryOptimizer.java
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/TestASTNamedSubqueryOptimizer.java 2013-09-21 12:39:31 UTC (rev 7417)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/TestASTNamedSubqueryOptimizer.java 2013-09-26 14:52:49 UTC (rev 7418)
@@ -27,17 +27,28 @@
package com.bigdata.rdf.sparql.ast.optimizers;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Iterator;
import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import org.apache.commons.io.IOUtils;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.model.vocabulary.RDF;
import org.openrdf.model.vocabulary.RDFS;
+import org.openrdf.query.MalformedQueryException;
import org.openrdf.query.algebra.StatementPattern.Scope;
+import com.bigdata.bop.BOpUtility;
import com.bigdata.bop.IBindingSet;
import com.bigdata.bop.IVariable;
import com.bigdata.bop.Var;
import com.bigdata.rdf.internal.IV;
+import com.bigdata.rdf.sail.sparql.Bigdata2ASTSPARQLParser;
+import com.bigdata.rdf.sail.sparql.TestSubqueryPatterns;
+import com.bigdata.rdf.sail.sparql.ast.ParseException;
+import com.bigdata.rdf.sail.sparql.ast.TokenMgrError;
import com.bigdata.rdf.sparql.ast.ASTContainer;
import com.bigdata.rdf.sparql.ast.AbstractASTEvaluationTestCase;
import com.bigdata.rdf.sparql.ast.ConstantNode;
@@ -52,6 +63,7 @@
import com.bigdata.rdf.sparql.ast.StatementPatternNode;
import com.bigdata.rdf.sparql.ast.StaticAnalysis;
import com.bigdata.rdf.sparql.ast.SubqueryRoot;
+import com.bigdata.rdf.sparql.ast.ValueExpressionNode;
import com.bigdata.rdf.sparql.ast.VarNode;
import com.bigdata.rdf.sparql.ast.eval.AST2BOpContext;
import com.bigdata.rdf.vocab.decls.FOAFVocabularyDecl;
@@ -830,4 +842,33 @@
}
+
+ /**
+ * Unit test for WITH {subquery} AS "name" and INCLUDE. The WITH must be in
+ * the top-level query.
+ *
+ * This is specifically for Trac 746 which crashed out during optimize.
+ * So the test simply runs that far, and does not verify anything
+ * other than the ability to optimize without an exception
+ * @throws IOException
+ */
+ public void test_namedSubquery746() throws MalformedQueryException,
+ TokenMgrError, ParseException, IOException {
+
+ final String sparql = IOUtils.toString(getClass().getResourceAsStream("ticket746.txt"));
+
+
+ final QueryRoot ast = new Bigdata2ASTSPARQLParser(store).parseQuery2(sparql,
+ baseURI).getOriginalAST();
+
+
+ final IASTOptimizer rewriter = new DefaultOptimizerList();
+
+ final AST2BOpContext context = new AST2BOpContext(new ASTContainer(
+ ast), store);
+ rewriter.optimize(context, ast/* queryNode */, null);
+
+
+ }
+
}
Added: branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/ticket746.txt
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/ticket746.txt (rev 0)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-rdf/src/test/com/bigdata/rdf/sparql/ast/optimizers/ticket746.txt 2013-09-26 14:52:49 UTC (rev 7418)
@@ -0,0 +1,35 @@
+base <http://example.org/>
+prefix sys: </bdm/api/kbobject/sys:>
+prefix base: </bdm/api/kbobject/base:>
+prefix syapse: </graph/syapse#>
+prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
+prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
+
+SELECT *
+
+WITH {
+SELECT *
+
+WHERE {
+
+ OPTIONAL {
+ base:disease syapse:hasLiteralProperty $j2 .
+ ?Sample_A $j2 ?j1
+ }
+ OPTIONAL {
+ base:species syapse:hasLiteralProperty $j4 .
+ ?Sample_A $j4 ?j3
+ }
+ OPTIONAL {
+ ?Sample_A sys:name ?j5
+ }
+ ?Sample_A rdf:type / rdfs:subClassOf * base:MammalianCellLineSample
+}
+
+} AS %__UserQuery
+
+WHERE {
+
+INCLUDE %__UserQuery
+
+}
Modified: branches/BIGDATA_RELEASE_1_3_0/bigdata-sails/src/test/com/bigdata/rdf/sail/sparql/AbstractBigdataExprBuilderTestCase.java
===================================================================
--- branches/BIGDATA_RELEASE_1_3_0/bigdata-sails/src/test/com/bigdata/rdf/sail/sparql/AbstractBigdataExprBuilderTestCase.java 2013-09-21 12:39:31 UTC (rev 7417)
+++ branches/BIGDATA_RELEASE_1_3_0/bigdata-sails/src/test/com/bigdata/rdf/sail/sparql/AbstractBigdataExprBuilderTestCase.java 2013-09-26 14:52:49 UTC (rev 7418)
@@ -237,7 +237,7 @@
/**
* Applies the {@link Bigdata2ASTSPARQLParser}.
*/
- protected QueryRoot parse(final String queryStr, final String baseURI)
+ public QueryRoot parse(final String queryStr, final String baseURI)
throws MalformedQueryException {
final QueryRoot ast = new Bigdata2ASTSPARQLParser(tripleStore).parseQuery2(queryStr,
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|