use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class TupleExprBuilder method createPath.
private TupleExpr createPath(Scope scope, Var subjVar, TupleExpr pathExpression, Var endVar, Var contextVar, long length) throws VisitorException {
if (pathExpression instanceof StatementPattern) {
Var predVar = ((StatementPattern) pathExpression).getPredicateVar();
if (length == 0L) {
return new ZeroLengthPath(scope, subjVar, endVar, contextVar);
} else {
GraphPattern gp = new GraphPattern();
gp.setContextVar(contextVar);
gp.setStatementPatternScope(scope);
Var nextVar = null;
for (long i = 0L; i < length; i++) {
if (i < length - 1) {
nextVar = createAnonVar();
} else {
nextVar = endVar;
}
gp.addRequiredSP(subjVar, predVar, nextVar);
subjVar = nextVar;
}
return gp.buildTupleExpr();
}
} else {
if (length == 0L) {
return new ZeroLengthPath(scope, subjVar, endVar, contextVar);
} else {
GraphPattern gp = new GraphPattern();
gp.setContextVar(contextVar);
gp.setStatementPatternScope(scope);
Var nextVar = null;
for (long i = 0L; i < length; i++) {
if (i < length - 1L) {
nextVar = createAnonVar();
} else {
nextVar = endVar;
}
// create a clone of the path expression.
TupleExpr clone = pathExpression.clone();
VarReplacer replacer = new VarReplacer(endVar, nextVar);
clone.visit(replacer);
gp.addRequiredTE(clone);
subjVar = nextVar;
}
return gp.buildTupleExpr();
}
}
}
use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class TupleExprBuilder method replaceSameTermVars.
private List<StatementPattern> replaceSameTermVars(List<StatementPattern> statementPatterns, Set<SameTerm> sameTermConstraints) {
if (sameTermConstraints != null) {
for (SameTerm st : sameTermConstraints) {
Var left = (Var) st.getLeftArg();
Var right = (Var) st.getRightArg();
for (StatementPattern sp : statementPatterns) {
Var subj = sp.getSubjectVar();
Var obj = sp.getObjectVar();
if (subj.equals(left) || subj.equals(right)) {
if (obj.equals(left) || obj.equals(right)) {
sp.setObjectVar(subj);
}
}
}
}
}
return statementPatterns;
}
use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class TupleExprBuilder method visit.
@Override
public Var visit(ASTCollection node, Object data) throws VisitorException {
Var rootListVar = createAnonVar();
Var listVar = rootListVar;
int childCount = node.jjtGetNumChildren();
for (int i = 0; i < childCount; i++) {
ValueExpr childValue = (ValueExpr) node.jjtGetChild(i).jjtAccept(this, null);
Var childVar = mapValueExprToVar(childValue);
graphPattern.addRequiredSP(listVar, TupleExprs.createConstVar(RDF.FIRST), childVar);
Var nextListVar;
if (i == childCount - 1) {
nextListVar = TupleExprs.createConstVar(RDF.NIL);
} else {
nextListVar = createAnonVar();
}
graphPattern.addRequiredSP(listVar, TupleExprs.createConstVar(RDF.REST), nextListVar);
listVar = nextListVar;
}
return rootListVar;
}
use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class TupleExprBuilder method visit.
@Override
public BindingSetAssignment visit(ASTInlineData node, Object data) throws VisitorException {
BindingSetAssignment bsa = new BindingSetAssignment();
List<ASTVar> varNodes = node.jjtGetChildren(ASTVar.class);
List<Var> vars = new ArrayList<Var>(varNodes.size());
// preserve order in query
Set<String> bindingNames = new LinkedHashSet<String>(varNodes.size());
for (ASTVar varNode : varNodes) {
Var var = (Var) varNode.jjtAccept(this, data);
vars.add(var);
bindingNames.add(var.getName());
}
bsa.setBindingNames(bindingNames);
List<ASTBindingSet> bindingNodes = node.jjtGetChildren(ASTBindingSet.class);
List<BindingSet> bindingSets = new ArrayList<BindingSet>(bindingNodes.size());
for (ASTBindingSet bindingNode : bindingNodes) {
BindingSet bindingSet = (BindingSet) bindingNode.jjtAccept(this, vars);
bindingSets.add(bindingSet);
}
bsa.setBindingSets(bindingSets);
graphPattern.addRequiredTE(bsa);
return bsa;
}
use of org.eclipse.rdf4j.query.algebra.Var in project rdf4j by eclipse.
the class TupleExprBuilder method processOrderClause.
private TupleExpr processOrderClause(ASTOrderClause orderNode, TupleExpr tupleExpr, Group group) throws VisitorException {
if (orderNode != null) {
@SuppressWarnings("unchecked") List<OrderElem> orderElements = (List<OrderElem>) orderNode.jjtAccept(this, null);
for (OrderElem orderElem : orderElements) {
// retrieve any aggregate operators from the order element.
AggregateCollector collector = new AggregateCollector();
collector.meet(orderElem);
Extension extension = new Extension();
for (AggregateOperator operator : collector.getOperators()) {
Var var = createAnonVar();
// replace occurrence of the operator in the order condition
// with the variable.
AggregateOperatorReplacer replacer = new AggregateOperatorReplacer(operator, var);
replacer.meet(orderElem);
// create an extension linking the operator to the variable
// name.
String alias = var.getName();
ExtensionElem pe = new ExtensionElem(operator, alias);
extension.addElement(pe);
// add the aggregate operator to the group.
GroupElem ge = new GroupElem(alias, operator);
group.addGroupElement(ge);
}
if (!extension.getElements().isEmpty()) {
extension.setArg(tupleExpr);
tupleExpr = extension;
}
}
tupleExpr = new Order(tupleExpr, orderElements);
}
return tupleExpr;
}
Aggregations