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;
 }