/* * Copyright Aduna (http://www.aduna-software.com/) (c) 2007. * * Licensed under the Aduna BSD-style license. */ package org.openrdf.query.algebra.evaluation.impl; import org.openrdf.model.Value; import org.openrdf.query.BindingSet; import org.openrdf.query.Dataset; import org.openrdf.query.algebra.TupleExpr; import org.openrdf.query.algebra.Var; import org.openrdf.query.algebra.evaluation.QueryOptimizer; import org.openrdf.query.algebra.helpers.QueryModelVisitorBase; /** * Assigns values to variables based on a supplied set of bindings. * * @author Arjohn Kampman */ public class BindingAssigner implements QueryOptimizer { public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings) { if (bindings.size() > 0) { tupleExpr.visit(new VarVisitor(bindings)); } } protected class VarVisitor extends QueryModelVisitorBase<RuntimeException> { protected BindingSet bindings; public VarVisitor(BindingSet bindings) { this.bindings = bindings; } @Override public void meet(Var var) { if (!var.hasValue() && bindings.hasBinding(var.getName())) { Value value = bindings.getValue(var.getName()); var.setValue(value); } } } }