@Override public boolean equals(Object other) { if (other instanceof ExtensionElem) { ExtensionElem o = (ExtensionElem)other; return name.equals(o.getName()) && expr.equals(o.getExpr()); } return false; }
/** * @inheritDoc */ @Override public void meet(final ExtensionElem theExtensionElem) throws Exception { mExtensions.put(theExtensionElem.getName(), theExtensionElem.getExpr()); }
@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()); } }
@Override public void meet(final ExtensionElem node) throws RuntimeException { if (node.getName().equals(name)) { result.set(node.getExpr()); } else { super.meet(node); } }
@Override public void meet(final ExtensionElem node) throws RuntimeException { if (node.getName().equals(name)) { result.set(node.getExpr()); } else { super.meet(node); } }
@Override public void meet(Extension node) throws RuntimeException { // visit children before, as there might be dependencies super.meet(node); for(ExtensionElem elem : node.getElements()) { if(elem.getExpr() instanceof Var && ((Var) elem.getExpr()).getName().equals(elem.getName())) { log.debug("ignoring self-aliasing of variable {}", elem.getName()); } else { elements.add(elem); } } }
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(); }
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); } }
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); } }
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); } }
private static Map<String, ExtensionElem> extractExtensions(final TupleExpr rootNode) { final Map<String, ExtensionElem> map = Maps.newHashMap(); for (final UnaryTupleOperator node : extractQueryNodes(rootNode, true)) { if (node instanceof Extension) { for (final ExtensionElem elem : ((Extension) node).getElements()) { final String variable = elem.getName(); final ValueExpr expression = elem.getExpr(); if (!(expression instanceof Var) || !((Var) expression).getName().equals(variable)) { map.put(variable, elem); } } } } return map; }
private static Map<String, ExtensionElem> extractExtensions(final TupleExpr rootNode) { final Map<String, ExtensionElem> map = new HashMap<>(); for (final UnaryTupleOperator node : extractQueryNodes(rootNode, true)) { if (node instanceof Extension) { for (final ExtensionElem elem : ((Extension) node).getElements()) { final String variable = elem.getName(); final ValueExpr expression = elem.getExpr(); if (!(expression instanceof Var) || !((Var) expression).getName().equals(variable)) { map.put(variable, elem); } } } } return map; }
@Override public ExtensionElem clone() { ExtensionElem clone = (ExtensionElem)super.clone(); clone.setExpr(getExpr().clone()); return clone; } }
@Override public BindingSet convert(BindingSet sourceBindings) throws QueryEvaluationException { QueryBindingSet targetBindings = new QueryBindingSet(sourceBindings); for (ExtensionElem extElem : extension.getElements()) { ValueExpr expr = extElem.getExpr(); if (!(expr instanceof AggregateOperator)) { try { // we evaluate each extension element over the targetbindings, so that bindings from // a previous extension element in this same extension can be used by other extension elements. // e.g. if a projection contains (?a + ?b as ?c) (?c * 2 as ?d) Value targetValue = strategy.evaluate(extElem.getExpr(), targetBindings); if (targetValue != null) { // Potentially overwrites bindings from super targetBindings.setBinding(extElem.getName(), targetValue); } } catch (ValueExprEvaluationException e) { // silently ignore type errors in extension arguments. They should not cause the // query to fail but just result in no additional binding. } } } return targetBindings; } }
@Override public void meet(ExtensionElem node) { handleType(SeRQO.EXTENSIONELEM); handleLiteral(SeRQO.NAME, node.getName()); handleChild(SeRQO.ARG, node.getExpr()); super.meet(node); }
@Override public void meet(ExtensionElem node) throws RDFHandlerException { listEntry(); handler.handleStatement(valueFactory.createStatement(subject, RDF.TYPE, SP.BIND_CLASS)); Resource var = getVar(node.getName()); handler.handleStatement(valueFactory.createStatement(subject, SP.VARIABLE_PROPERTY, var)); meet(node.getExpr()); }
@Override public void meet(final Extension n) { emit(n.getArg()); if (!(n.getArg() instanceof SingletonSet)) { newline(); } boolean first = true; for (final ExtensionElem e : n.getElements()) { final ValueExpr expr = e.getExpr(); if (!(expr instanceof Var) || !((Var) expr).getName().equals(e.getName())) { if (!first) { newline(); } emit("BIND (").emit(expr).emit(" AS ?").emit(e.getName()).emit(")"); first = false; } } }
@Override public void meet(final Extension n) { emit(n.getArg()); if (!(n.getArg() instanceof SingletonSet)) { newline(); } boolean first = true; for (final ExtensionElem e : n.getElements()) { final ValueExpr expr = e.getExpr(); if (!(expr instanceof Var) || !((Var) expr).getName().equals(e.getName())) { if (!first) { newline(); } emit("BIND (").emit(expr).emit(" AS ?").emit(e.getName()).emit(")"); first = false; } } }
@Override public void meet(final ProjectionElem n) { final String source = n.getSourceName(); final String target = n.getTargetName(); final ValueExpr expr = n.getSourceExpression() == null ? null : n .getSourceExpression().getExpr(); if (target.startsWith("-")) { if (expr != null) { emit("(").emit(expr).emit(" AS ?").emit(sanitize(target)).emit(")"); } } else if (expr != null) { emit("(").emit(expr).emit(" AS ?").emit(target).emit(")"); } else if (!equalOrNull(source, target)) { emit("(?").emit(source).emit(" AS ?").emit(target).emit(")"); } else { emit("?").emit(target); } }
@Override public void meet(final ProjectionElem n) { final String source = n.getSourceName(); final String target = n.getTargetName(); final ValueExpr expr = n.getSourceExpression() == null ? null : n .getSourceExpression().getExpr(); if (target.startsWith("-")) { if (expr != null) { emit("(").emit(expr).emit(" AS ?").emit(sanitize(target)).emit(")"); } } else if (expr != null) { emit("(").emit(expr).emit(" AS ?").emit(target).emit(")"); } else if (!equalOrNull(source, target)) { emit("(?").emit(source).emit(" AS ?").emit(target).emit(")"); } else { emit("?").emit(target); } }