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)); }
@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; } }
public static ValueExpr parseValueExpr(final String string, @Nullable final String baseURI, @Nullable final Map<String, String> namespaces) throws MalformedQueryException { Objects.requireNonNull(string); final TupleExpr expr = parseQuery("SELECT ((" + string + ") AS ?dummy) WHERE {}", baseURI, namespaces).getTupleExpr(); return ((Extension) ((Projection) expr).getArg()).getElements().get(0).getExpr(); }
@Override public void meet(ExtensionElem node) throws RuntimeException { if(node.getName().equals(needle)) { found = true; } // don't recurse to the children, as this would project non-grouped elements }
Var anonVar = createAnonVar(); expr.replaceChildNode(operator, anonVar); anonymousExtension.addElement(new ExtensionElem(operator, anonVar.getName())); ExtensionElem extElem = new ExtensionElem(valueExpr, alias); extension.addElement(extElem); elem.setSourceExpression(extElem); ExtensionElem extElem = new ExtensionElem(projVar, projVar.getName()); extension.addElement(extElem); elem.setSourceExpression(extElem); ValueExpr expr = extElem.getExpr();
final Join join = (Join) arg; 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.addElement(elem.clone()); extension.getElements().remove(elem); dirty = true;
@Override public void replaceChildNode(QueryModelNode current, QueryModelNode replacement) { if (expr == current) { setExpr((ValueExpr)replacement); } else { super.replaceChildNode(current, replacement); } }
private static Var extractConstructVar(final Map<String, ExtensionElem> extensions, final ProjectionElem projection) { final ExtensionElem extension = extensions.get(projection.getSourceName()); String name = projection.getSourceName(); if (name.startsWith("-anon-")) { name += "-construct"; } if (extension == null || extension.getExpr() instanceof BNodeGenerator) { final Var var = new Var(name); var.setAnonymous(name.startsWith("-anon-")); return var; } else if (extension.getExpr() instanceof ValueConstant) { final ValueConstant constant = (ValueConstant) extension.getExpr(); return new Var(name, constant.getValue()); } else { throw new UnsupportedOperationException( "Unsupported extension in construct query: " + extension); } }
@Override public Set<String> getBindingNames() { Set<String> bindingNames = new LinkedHashSet<String>(arg.getBindingNames()); for (ExtensionElem pe : elements) { bindingNames.add(pe.getName()); } return bindingNames; }
ex.addElement(new ExtensionElem(expr, name));
private static Var extractConstructVar(final Map<String, ExtensionElem> extensions, final ProjectionElem projection) { final ExtensionElem extension = extensions.get(projection.getSourceName()); String name = projection.getSourceName(); if (name.startsWith("-anon-")) { name += "-construct"; } if (extension == null || extension.getExpr() instanceof BNodeGenerator) { final Var var = new Var(name); var.setAnonymous(name.startsWith("-anon-")); return var; } else if (extension.getExpr() instanceof ValueConstant) { final ValueConstant constant = (ValueConstant) extension.getExpr(); return new Var(name, constant.getValue()); } else { throw new UnsupportedOperationException( "Unsupported extension in construct query: " + extension); } }
@Override public void meet(ExtensionElem node) throws RuntimeException { neededVariables.add(node.getName()); valueNeeded++; super.meet(node); valueNeeded--; }
union.add(new Extension( sp, new ExtensionElem( new ValueConstant(vf.createURI(a)), p.getName())));
private Var createVar(String varName) { if (projElems != null) { ProjectionElem projElem = projElems.get(varName); if (projElem != null) { ExtensionElem extElem = projElem.getSourceExpression(); if (extElem != null && extElem.getExpr() instanceof Var) { projElem.setSourceExpression(null); } } } return new Var(varName); } }