final String queryString = astContainer.getQueryString(); if (astContainer.isQuery()) { log.info(astContainer.getOriginalAST()); log.info(astContainer.getOriginalUpdateAST());
/** * Variant on {@link #test_hash_join_1()} where we force the use of the * {@link HTree}. */ public void test_hash_join_1b() throws Exception { final ASTContainer astContainer = new TestHelper("hash-join-1b") .runTest(); final PipelineOp queryPlan = astContainer.getQueryPlan(); if (!BOpUtility.visitAll(queryPlan, HTreeHashJoinOp.class).hasNext()) { fail("Expecting an HTree-based hash join in the query plan: " + astContainer.toString()); } }
/** * Determines the {@link UUID} which will be associated with the * {@link IRunningQuery}. If {@link QueryHints#QUERYID} has already been * used by the application to specify the {@link UUID} then that * {@link UUID} is noted. Otherwise, a random {@link UUID} is generated and * assigned to the query by binding it on the query hints. * <p> * Note: The ability to provide metadata from the {@link ASTContainer} in * the {@link StatusServlet} or the "EXPLAIN" page depends on the ability to * cross walk the queryIds as established by this method. * * @param query * The query. * * @param queryUuid * * @return The {@link UUID} which will be associated with the * {@link IRunningQuery} and never <code>null</code>. */ protected UUID setQueryId(final ASTContainer astContainer, UUID queryUuid) { // Figure out the effective UUID under which the query will run. final String queryIdStr = astContainer.getQueryHint(QueryHints.QUERYID); if (queryIdStr == null) { // Not specified, so generate and set on query hint. queryUuid = UUID.randomUUID(); } astContainer.setQueryHint(QueryHints.QUERYID, queryUuid.toString()); return queryUuid; }
final String actualIdStr = astContainer.getQueryHint(QueryHints.QUERYID); assertEquals(2, astContainer.getOptimizedAST().getWhereClause().arity()); expectedId, astContainer .getQueryPlan() .getProperty( com.bigdata.bop.engine.QueryEngine.Annotations.QUERY_ID));
/** * Assert that the explain hint is attached for unsatisfiable MINUS: * * SELECT * WHERE { ?s ?p ?o MINUS { ?a ?b ?c } } * * @throws Exception */ public void testUnsatisfiableMinusExplainHint01() throws Exception { final ASTContainer container = new TestHelper( "explainHints-unsatisfiableminus01",// name "explainHints-unsatisfiableminus01.rq",// query URL "explainHints.trig",// data URL "explainHints-unsatisfiableminus01.srx"// results URL ).runTest(); assertCarriesExactlyOneExplainHintOfType( container.getOptimizedAST(), UnsatisfiableMinusExplainHint.class); }
/** * Applies the {@link Bigdata2ASTSPARQLParser}. */ public QueryRoot parse(final String queryStr, final String baseURI) throws MalformedQueryException { final Bigdata2ASTSPARQLParser parser = new Bigdata2ASTSPARQLParser(); final ASTContainer astContainer = parser.parseQuery2(queryStr, baseURI); ASTDeferredIVResolution.resolveQuery(tripleStore, astContainer); final QueryRoot ast = astContainer.getOriginalAST(); final Collection<ValueExpressionNode> nodes = new LinkedList<ValueExpressionNode>(); final Iterator<ValueExpressionNode> itr = BOpUtility.visitAll( ast, ValueExpressionNode.class); while (itr.hasNext()) { final ValueExpressionNode node = itr.next(); nodes.add(node); } for (ValueExpressionNode node : nodes) { node.invalidate(); } return ast; }
/** * Use pipelined hash join for inlined VALUES node. */ public void testPipelinedHashJoinUsedForValues() throws Exception { final ASTContainer astContainer = new TestHelper( "pipelined-hashjoin-used-values",// testURI "pipelined-hashjoin-used-values.rq", // queryURI "pipelined-hashjoin.trig", // dataURI "pipelined-hashjoin-values.srx" // resultURI ).runTest(); final PipelineOp queryPlan = astContainer.getQueryPlan(); assertPipelinedPlanOrNot(queryPlan, astContainer, true, false); }
helper.getASTContainer().setQueryHint(QueryHints.QUERYID, queryId.toString()); final PipelineOp queryPlan = astContainer.getQueryPlan();
cxn.prepareUpdate(QueryLanguage.SPARQL, queryStr); final UpdateRoot original = query.getASTContainer().getOriginalUpdateAST(); message.append("Original AST:\n"+original); message.append("\n=========================================\n");
if (Boolean.TRUE.equals(ast.getProperty(Annotations.RESOLVED))) { final UpdateRoot qc = (UpdateRoot)ast.getProperty(Annotations.ORIGINAL_AST); if (ast.getOriginalUpdateAST().getPrefixDecls()!=null && !ast.getOriginalUpdateAST().getPrefixDecls().isEmpty()) { qc.setPrefixDecls(ast.getOriginalUpdateAST().getPrefixDecls()); ast.setOriginalUpdateAST(qc); ast.setResolveValuesTime(System.nanoTime() - beginNanos); ast.setProperty(Annotations.RESOLVED, Boolean.TRUE);
@Override public String toString() { return astContainer.toString(); }
AST2BOpContext getAST2BOpContext(QueryRoot given) { return new AST2BOpContext(new ASTContainer(given), store) { @Override public ISolutionSetStats getSolutionSetStats(final String localName) { if ("solutionSet".equals(localName)) { return sss; } return super.getSolutionSetStats(localName); } }; } }
final String queryString = astContainer.getQueryString(); .getParseTree()); .getOriginalUpdateAST();
astContainer.setQueryHint(QueryHints.ANALYTIC, "true"); astContainer.setQueryHint(QueryHints.OPTIMIZER, QueryOptimizerEnum.Runtime.toString());
final String actualIdStr = astContainer.getQueryHint(QueryHints.QUERYID); assertEquals(2, astContainer.getOptimizedAST().getWhereClause().arity()); expectedId, astContainer .getQueryPlan() .getProperty( com.bigdata.bop.engine.QueryEngine.Annotations.QUERY_ID));
/** * Explain hint rendering & bottom up rewriting broken for subqueries, * see https://jira.blazegraph.com/browse/BLZG-1463. * * @throws Exception */ public void testTicketBlzg463a() throws Exception { final ASTContainer container = new TestHelper( "explainHints-blzg1463a",// name "explainHints-blzg1463a.rq",// query URL "empty.trig",// data URL "explainHints-blzg1463a.srx"// results URL ).runTest(); final Iterator<BOp> explainHintAnnotatedBOps = ExplainHints.explainHintAnnotatedBOpIterator(container.getOptimizedAST()); assertTrue(explainHintAnnotatedBOps.hasNext()); }
/** * Applies the {@link Bigdata2ASTSPARQLParser}. */ public QueryRoot parse(final String queryStr, final String baseURI) throws MalformedQueryException { final Bigdata2ASTSPARQLParser parser = new Bigdata2ASTSPARQLParser(); final ASTContainer astContainer = parser.parseQuery2(queryStr, baseURI); ASTDeferredIVResolution.resolveQuery(tripleStore, astContainer); final QueryRoot ast = astContainer.getOriginalAST(); final Collection<ValueExpressionNode> nodes = new LinkedList<ValueExpressionNode>(); final Iterator<ValueExpressionNode> itr = BOpUtility.visitAll( ast, ValueExpressionNode.class); while (itr.hasNext()) { final ValueExpressionNode node = itr.next(); nodes.add(node); } for (ValueExpressionNode node : nodes) { node.invalidate(); } return ast; }
/** * Do use pipelined hash join for NOT EXISTS clause if LIMIT in query. */ public void testPipelinedHashJoinUsedForNotExists() throws Exception { final ASTContainer astContainer = new TestHelper( "pipelined-hashjoin-used-notexists",// testURI "pipelined-hashjoin-used-notexists.rq", // queryURI "pipelined-hashjoin.trig", // dataURI "pipelined-hashjoin-notexists.srx" // resultURI ).runTest(); final PipelineOp queryPlan = astContainer.getQueryPlan(); assertPipelinedPlanOrNot(queryPlan, astContainer, true, false); }
helper.getASTContainer().setQueryHint(QueryHints.QUERYID, queryId.toString()); final PipelineOp queryPlan = astContainer.getQueryPlan();
final UpdateRoot updateRoot = astContainer.getOriginalUpdateAST();