public RexNode getIObject() { if (object == null) { RelDataTypeFactory typeFactory = getCluster().getTypeFactory(); RexBuilder b = getBuilder(); final SqlFunction GET_IOBJECT = new SqlUserDefinedFunction( new SqlIdentifier("GET_IOBJECT", SqlParserPos.ZERO), ReturnTypes.explicit( typeFactory.createTypeWithNullability( typeFactory.createJavaType(IObject.class), false)), null, OperandTypes.ANY_ANY, ImmutableList.of( typeFactory.createTypeWithNullability( typeFactory.createJavaType(ISnapshot.class), false), typeFactory.createJavaType(int.class)), ScalarFunctionImpl.create(ISnapshotMethods.class, "getIObject")); object = b.makeCall(GET_IOBJECT, getSnapshot(), getIObjectId()); } return object; }