public MaterializedField getOtherNullableVersion() {
   MajorType mt = def.getMajorType();
   DataMode newDataMode = null;
   switch (mt.getMode()) {
     case OPTIONAL:
       newDataMode = DataMode.REQUIRED;
       break;
     case REQUIRED:
       newDataMode = DataMode.OPTIONAL;
       break;
     default:
       throw new UnsupportedOperationException();
   }
   return new MaterializedField(
       def.toBuilder().setMajorType(mt.toBuilder().setMode(newDataMode).build()).build());
 }
 public DataMode getDataMode() {
   return def.getMajorType().getMode();
 }
 public boolean isNullable() {
   return def.getMajorType().getMode() == DataMode.OPTIONAL;
 }
 public MajorType getType() {
   return def.getMajorType();
 }
 public int getWidth() {
   return def.getMajorType().getWidth();
 }
 public MaterializedField clone(FieldReference ref) {
   return create(ref, def.getMajorType());
 }