/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.query.sql.symbol;
import org.teiid.designer.query.sql.ILanguageVisitor;
import org.teiid.designer.query.sql.lang.IExpression;
import org.teiid.designer.udf.IFunctionDescriptor;
/**
*
*/
public interface IFunction<F extends IFunctionDescriptor, LV extends ILanguageVisitor>
extends IExpression<LV> {
/**
* Get name of function
*
* @return name
*/
String getName();
/**
* Get function arguments
*
* @return array of arguments
*/
IExpression[] getArgs();
/**
* Get argument at given index
*
* @param index
*
* @return argument
*/
IExpression getArg(int index);
/**
* Is function implicit
*
* @return true if implicit
*/
boolean isImplicit();
/**
* Get a descriptor for his function
*
* @return descriptor
*/
F getFunctionDescriptor();
/**
* Set the function descriptor
*
* @param fd
*/
void setFunctionDescriptor(F fd);
/**
* Set type of function
*
* @param type New type
*/
void setType(Class<?> type);
}