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. |