/** * Declares a variable, and binds it lazily, so it only gets initialized if it is actually used. * * @return the Variable so declared */ public Variable bind( RelNode rel, StatementList statementList, final VariableInitializer initializer) { VariableInitializerThunk thunk = new VariableInitializerThunk() { public VariableInitializer getInitializer() { return initializer; } }; Variable variable = newVariable(); LazyBind bind = new LazyBind(variable, statementList, getTypeFactory(), rel.getRowType(), thunk); bind(rel, bind); return bind.getVariable(); }