@Override public void meet(Extension node) throws RDFHandlerException { if (inlineBindings != null && inlineBindings.extension == node) { // this is the first Extension node and has already been handled // by meetExtension() // to produce inline bindings in SELECT so we can skip it here node.getArg().visit(this); } else { // any further Extension nodes produce BIND() clauses node.getArg().visit(this); for (ExtensionElem elem : node.getElements()) { elem.visit(this); } } }
private void addSourceExpressions(UnaryTupleOperator op, Collection<ProjectionElem> elems) { Extension ext = null; for (ProjectionElem projElem : elems) { ExtensionElem extElem = projElem.getSourceExpression(); if (extElem != null) { if (ext == null) { ext = new Extension(op.getArg()); op.setArg(ext); } ext.addElement(extElem); } } }
@Override public void meet(Extension extensionNode) throws Exception { extensionNode.visitChildren(this); if (extensionNode.getArg() instanceof AggregationPipelineQueryNode && extensionNode.getParentNode() != null) { AggregationPipelineQueryNode pipelineNode = (AggregationPipelineQueryNode) extensionNode.getArg(); if (pipelineNode.extend(extensionNode.getElements())) { extensionNode.replaceWith(pipelineNode); } } }
@Override public Extension clone() { Extension clone = (Extension)super.clone(); clone.elements = new ArrayList<ExtensionElem>(getElements().size()); for (ExtensionElem elem : getElements()) { clone.addElement(elem.clone()); } return clone; } }
@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); }
for (final Extension extension : extractNodes(expr, Extension.class, null, null)) { TupleExpr arg = extension.getArg(); while (arg instanceof Extension) { arg = ((Filter) arg).getArg(); for (final ExtensionElem elem : new ArrayList<>(extension.getElements())) { final Set<String> elemVars = extractVariables(elem.getExpr()); Extension newArg = null; if (join.getLeftArg().getAssuredBindingNames().containsAll(elemVars)) { newArg = join.getLeftArg() instanceof Extension ? (Extension) join .getLeftArg() : new Extension(join.getLeftArg()); join.setLeftArg(newArg); } else if (join.getRightArg().getAssuredBindingNames().contains(elemVars)) { newArg = join.getRightArg() instanceof Extension ? (Extension) join .getRightArg() : new Extension(join.getRightArg()); join.setRightArg(newArg); newArg.addElement(elem.clone()); extension.getElements().remove(elem); dirty = true; if (extension.getElements().isEmpty()) { expr = (TupleExpr) replaceNode(expr, extension, extension.getArg());
@Override public boolean equals(Object other) { if (other instanceof Extension && super.equals(other)) { Extension o = (Extension)other; return elements.equals(o.getElements()); } return false; }
private void visitBind(Resource r) throws OpenRDFException { Value expr = Statements.singleValue(r, SP.EXPRESSION_PROPERTY, store); ValueExpr valueExpr = visitExpression(expr); Value varValue = Statements.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)); }
collector.meet(orderElem); Extension extension = new Extension(); extension.addElement(pe); group.addGroupElement(ge); extension.setArg(tupleExpr); tupleExpr = extension;
@Override public void updateQueryModelNodes(boolean hasResult) { QueryModelNode replacementNode = hasResult ? new SingletonSet() : new EmptySet(); geoStatement.replaceWith(replacementNode); if(hasResult) { filter.replaceWith(filter.getArg()); } else { filter.replaceWith(new EmptySet()); } if(functionParent instanceof ExtensionElem) { Extension extension = (Extension) functionParent.getParentNode(); List<ExtensionElem> elements = extension.getElements(); if(elements.size() > 1) { elements.remove(functionParent); } else { extension.replaceWith(extension.getArg()); } } } }
final List<ExtensionElem> elems = ((Extension) e).getElements(); final Set<String> vars = new HashSet<>(); for (final ExtensionElem elem : elems) { result[i] = new Extension(result[i], elems); fixed = true; break; result[partition] = new Extension(result[partition], elems); fixed = true;
@Override public void meet(Extension node) throws RDFHandlerException { node.getArg().visit(this); }
aExt = new Extension(); aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getSubjectVar().getValue()), aPattern.getSubjectVar().getName())); aExt = new Extension(); aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getPredicateVar().getValue()), aPattern.getPredicateVar().getName())); aExt = new Extension(); aExt.addElements(new ExtensionElem(new ValueConstant(aPattern.getObjectVar().getValue()), aPattern.getObjectVar().getName()));
public void addElements(ExtensionElem... elements) { for (ExtensionElem pe : elements) { addElement(pe); } }
Extension ex = new Extension(); for (Var var: s.getMap().keySet()) { String name = var.getName(); ex.addElement(new ExtensionElem(expr, name)); if (!ex.getElements().isEmpty()) { ex.setArg(body); newExpression = ex; } else {
@Override public void meet(Extension node) { extension = node; List<ExtensionElem> elements = node.getElements(); // NB: preserve ExtensionElem order extensionExprs = new LinkedHashMap<String, ValueExpr>(elements.size()); for (ExtensionElem elem : elements) { extensionExprs.put(elem.getName(), elem.getExpr()); } }
RR.STAR_SELECT_GRAPH.stringValue(), filterGraphVars), new Var("_const-" + UUID.randomUUID(), RDF.NIL), CompareOp.NE)); body = new Extension(body, new ExtensionElem(new FunctionCall( RR.STAR_SELECT_GRAPH.stringValue(), bindGraphVars), prefix));
String alias = ((ASTVar)aliasNode).getName(); Extension extension = new Extension(); extension.addElement(new ExtensionElem(ve, alias)); extension.setArg(((Filter)arg).getArg()); ((Filter)arg).setArg(extension); extension.setArg(arg); result = extension;
@Override public void updateQueryModelNodes(boolean hasResult) { QueryModelNode replacementNode = hasResult ? new SingletonSet() : new EmptySet(); geoStatement.replaceWith(replacementNode); if(hasResult) { filter.replaceWith(filter.getArg()); } else { filter.replaceWith(new EmptySet()); } if(functionParent instanceof ExtensionElem) { Extension extension = (Extension) functionParent.getParentNode(); List<ExtensionElem> elements = extension.getElements(); if(elements.size() > 1) { elements.remove(functionParent); } else { extension.replaceWith(extension.getArg()); } } } }