class TableFunctionImplementation<T> extends Scalar<Iterable<Row>, T> {

    protected TableFunctionImplementation(Signature signature, BoundSignature boundSignature) {
        super(signature, boundSignature);
    }

    /**
     * An ObjectType which describes the result of the table function.
     *
     * This can be the same as {@link #boundSignature()#returnType()},
     * but if there is only a single inner type, then {@link #boundSignature()#returnType()} will return that inner-type directly.
     *
     * See the class documentation for more information about that behavior.
     */
    public abstract RowType returnType();

    /**
     * @return true if the records returned by this table function are generated on-demand.
     *         See also {@link BatchIterator#hasLazyResultSet()}
     */
    public abstract boolean hasLazyResultSet();

    @Override
    public Symbol normalizeSymbol(Function function, TransactionContext txnCtx, NodeContext nodeCtx) {<FILL_FUNCTION_BODY>}
}

        // Never normalize table functions;
        // The RelationAnalyzer expects a function symbol and can't deal with Literals
        return function;
    
<methods>public BoundSignature boundSignature() ,public Scalar<Iterable<io.crate.data.Row>,T> compile(List<io.crate.expression.symbol.Symbol>, java.lang.String, io.crate.role.Roles) ,public transient abstract Iterable<io.crate.data.Row> evaluate(io.crate.metadata.TransactionContext, io.crate.metadata.NodeContext, Input<T>[]) ,public io.crate.expression.symbol.Symbol normalizeSymbol(io.crate.expression.symbol.Function, io.crate.metadata.TransactionContext, io.crate.metadata.NodeContext) ,public io.crate.metadata.functions.Signature signature() <variables>public static final Set<io.crate.metadata.Scalar.Feature> DETERMINISTIC_AND_COMPARISON_REPLACEMENT,public static final Set<io.crate.metadata.Scalar.Feature> DETERMINISTIC_ONLY,public static final Set<io.crate.metadata.Scalar.Feature> NO_FEATURES,protected final non-sealed BoundSignature boundSignature,protected final non-sealed io.crate.metadata.functions.Signature signature