private void visitBind(Resource r) throws RDF4JException { Value expr = TripleSources.singleValue(r, SP.EXPRESSION_PROPERTY, store); ValueExpr valueExpr = visitExpression(expr); Value varValue = TripleSources.singleValue(r, SP.VARIABLE_PROPERTY, store); if (!(varValue instanceof Resource)) { throw new MalformedSpinException( String.format("Value of %s is not a resource", SP.VARIABLE_PROPERTY)); } String varName = getVarName((Resource)varValue); tupleNode = new Extension(tupleNode, new ExtensionElem(valueExpr, varName)); }
lostVar.setValue(value); ext.addElement(new ExtensionElem(lostVar, name));
lostVar.setValue(value); ext.addElement(new ExtensionElem(lostVar, name));
@Override public TupleExpr visit(ASTDescribe node, Object data) throws VisitorException { TupleExpr tupleExpr = (TupleExpr)data; if (tupleExpr == null) { tupleExpr = new SingletonSet(); } Extension e = new Extension(); ProjectionElemList projectionElements = new ProjectionElemList(); for (int i = 0; i < node.jjtGetNumChildren(); i++) { ValueExpr resource = (ValueExpr)node.jjtGetChild(i).jjtAccept(this, null); if (resource instanceof Var) { projectionElements.addElement(new ProjectionElem(((Var)resource).getName())); } else { String alias = "_describe_" + UUID.randomUUID().toString().replaceAll("-", "_"); ExtensionElem elem = new ExtensionElem(resource, alias); e.addElement(elem); projectionElements.addElement(new ProjectionElem(alias)); } } if (!e.getElements().isEmpty()) { e.setArg(tupleExpr); tupleExpr = e; } Projection p = new Projection(tupleExpr, projectionElements); return new DescribeOperator(p); }
@Override public TupleExpr visit(ASTDescribe node, Object data) throws VisitorException { TupleExpr tupleExpr = (TupleExpr)data; if (tupleExpr == null) { tupleExpr = new SingletonSet(); } Extension e = new Extension(); ProjectionElemList projectionElements = new ProjectionElemList(); for (int i = 0; i < node.jjtGetNumChildren(); i++) { ValueExpr resource = (ValueExpr)node.jjtGetChild(i).jjtAccept(this, null); if (resource instanceof Var) { projectionElements.addElement(new ProjectionElem(((Var)resource).getName())); } else { String alias = "_describe_" + UUID.randomUUID().toString().replaceAll("-", "_"); ExtensionElem elem = new ExtensionElem(resource, alias); e.addElement(elem); projectionElements.addElement(new ProjectionElem(alias)); } } if (!e.getElements().isEmpty()) { e.setArg(tupleExpr); tupleExpr = e; } Projection p = new Projection(tupleExpr, projectionElements); return new DescribeOperator(p); }
@Override public TupleExpr visit(ASTDescribe node, Object data) throws VisitorException { TupleExpr tupleExpr = (TupleExpr)data; if (tupleExpr == null) { tupleExpr = new SingletonSet(); } Extension e = new Extension(); ProjectionElemList projectionElements = new ProjectionElemList(); for (int i = 0; i < node.jjtGetNumChildren(); i++) { ValueExpr resource = (ValueExpr)node.jjtGetChild(i).jjtAccept(this, null); if (resource instanceof Var) { projectionElements.addElement(new ProjectionElem(((Var)resource).getName())); } else { String alias = "_describe_" + UUID.randomUUID().toString().replaceAll("-", "_"); ExtensionElem elem = new ExtensionElem(resource, alias); e.addElement(elem); projectionElements.addElement(new ProjectionElem(alias)); } } if (!e.getElements().isEmpty()) { e.setArg(tupleExpr); tupleExpr = e; } Projection p = new Projection(tupleExpr, projectionElements); return new DescribeOperator(p); }
@Test public void testExtension() throws Exception { QueryRoot queryTree = new QueryRoot(new Extension( new StatementPattern(new Var("x"), constant(TAKES), new Var("c")), new ExtensionElem(new Var("x"), "renamed"), new ExtensionElem(new ValueConstant(TAKES), "constant"))); SparqlToPipelineTransformVisitor visitor = new SparqlToPipelineTransformVisitor(collection); queryTree.visit(visitor); Assert.assertTrue(queryTree.getArg() instanceof AggregationPipelineQueryNode); AggregationPipelineQueryNode pipelineNode = (AggregationPipelineQueryNode) queryTree.getArg(); Assert.assertEquals(Sets.newHashSet("x", "c", "renamed", "constant"), pipelineNode.getAssuredBindingNames()); }
private void renameVar(Var oldVar, Var newVar, Filter filter) { filter.getArg().visit(new VarRenamer(oldVar, newVar)); // TODO: skip this step if old variable name is not used // Replace SameTerm-filter with an Extension, the old variable name // might still be relevant to nodes higher in the tree Extension extension = new Extension(filter.getArg()); extension.addElement(new ExtensionElem(new Var(newVar.getName()), oldVar.getName())); filter.replaceWith(extension); }
private void renameVar(Var oldVar, Var newVar, Filter filter) { filter.getArg().visit(new VarRenamer(oldVar, newVar)); // TODO: skip this step if old variable name is not used // Replace SameTerm-filter with an Extension, the old variable name // might still be relevant to nodes higher in the tree Extension extension = new Extension(filter.getArg()); extension.addElement(new ExtensionElem(new Var(newVar.getName()), oldVar.getName())); filter.replaceWith(extension); }
@Test public void testExtend() { final AggregationPipelineQueryNode base = new AggregationPipelineQueryNode( collection, new LinkedList<>(), Sets.newHashSet("x", "y"), Sets.newHashSet("x", "y", "opt"), HashBiMap.create()); // Extend with a mix of variables and constants List<ExtensionElem> extensionElements = Arrays.asList( new ExtensionElem(new Var("x"), "subject"), new ExtensionElem(new ValueConstant(RDF.TYPE), "predicate"), new ExtensionElem(new Var("y"), "object")); AggregationPipelineQueryNode node = base.clone(); boolean success = node.extend(extensionElements); Assert.assertTrue(success); Assert.assertEquals(1, node.getPipeline().size()); Assert.assertEquals(Sets.newHashSet("x", "y", "subject", "predicate", "object"), node.getAssuredBindingNames()); Assert.assertEquals(Sets.newHashSet("x", "y", "subject", "predicate", "object", "opt"), node.getBindingNames()); // Attempt to extend with an unsupported expression extensionElements = Arrays.asList( new ExtensionElem(new Var("x"), "subject"), new ExtensionElem(new Not(new ValueConstant(VF.createLiteral(true))), "notTrue")); node = base.clone(); success = node.extend(extensionElements); Assert.assertFalse(success); Assert.assertEquals(base, node); }
if (alias != null) { extension.addElement(new ExtensionElem(valueExpr, alias)); projElemList.addElement(new ProjectionElem(alias));
ExtensionElem pe = new ExtensionElem(operator, alias); extension.addElement(pe);
ExtensionElem pe = new ExtensionElem(operator, alias); extension.addElement(pe);
ExtensionElem pe = new ExtensionElem(operator, alias); extension.addElement(pe);
ExtensionElem elem = new ExtensionElem(ve, name); extension.addElement(elem);
@Test public void testUnsupportedExtension() throws Exception { StatementPattern sp = new StatementPattern(new Var("x"), constant(TAKES), new Var("c")); List<ExtensionElem> elements = Arrays.asList(new ExtensionElem(new Var("x"), "renamed"), new ExtensionElem(new Not(new ValueConstant(VF.createLiteral(true))), "notTrue"), new ExtensionElem(new ValueConstant(TAKES), "constant")); Extension extensionNode = new Extension(sp, elements); QueryRoot queryTree = new QueryRoot(extensionNode); SparqlToPipelineTransformVisitor visitor = new SparqlToPipelineTransformVisitor(collection); queryTree.visit(visitor); Assert.assertTrue(queryTree.getArg() instanceof Extension); Assert.assertEquals(elements, ((Extension) queryTree.getArg()).getElements()); TupleExpr innerQuery = ((Extension) queryTree.getArg()).getArg(); Assert.assertTrue(innerQuery instanceof AggregationPipelineQueryNode); AggregationPipelineQueryNode pipelineNode = (AggregationPipelineQueryNode) innerQuery; Assert.assertEquals(Sets.newHashSet("x", "c"), pipelineNode.getAssuredBindingNames()); } }
aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getSubjectVar().getValue()), aPattern.getSubjectVar().getName())); aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getPredicateVar().getValue()), aPattern.getPredicateVar().getName())); aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getObjectVar().getValue()), aPattern.getObjectVar().getName()));
aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getSubjectVar().getValue()), aPattern.getSubjectVar().getName())); aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getPredicateVar().getValue()), aPattern.getPredicateVar().getName())); aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getObjectVar().getValue()), aPattern.getObjectVar().getName()));
aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getSubjectVar().getValue()), aPattern.getSubjectVar().getName())); aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getPredicateVar().getValue()), aPattern.getPredicateVar().getName())); aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getObjectVar().getValue()), aPattern.getObjectVar().getName()));
ExtensionElem pe = new ExtensionElem(operator, alias); extension.addElement(pe);