package eu.dnetlib.dlms.jdbc.ast;

import java.sql.SQLException;

import eu.dnetlib.dlms.jdbc.ExecutorContext;
import eu.dnetlib.dlms.jdbc.server.IExpressionExecutor;

/**
 * Node that represent a parameter of a query.
 * <p>
 * A Parameter is a Ref whose value is to be search in the part of the context dedicated to query parameters, not where
 * the references to already declared variables (Ref instances) are.
 * </p>
 * 
 * @author lexis
 * 
 */
public class Parameter extends Ref {

	/**
	 * 
	 * {@inheritDoc}
	 * 
	 * @see eu.dnetlib.dlms.jdbc.ast.Ref#evaluate(eu.dnetlib.dlms.jdbc.server.IExpressionExecutor,
	 *      eu.dnetlib.dlms.jdbc.ExecutorContext)
	 */
	@Override
	public Object evaluate(final IExpressionExecutor executor, final ExecutorContext context) throws SQLException {
		return executor.evaluate(this, context);
	}

	/**
	 * Constructor.
	 * 
	 * @param ref
	 *            parameter name
	 */
	public Parameter(final String ref) {
		super(ref);
	}

	@Override
	public String toString() {
		return "Parameter [name=" + this.getRef() + "]";
	}

}
