code: def validate(self, columns=None):
          
          schema = self.schema()
          if not columns:
              ignore_flags = orb.Column.Flags.Virtual | orb.Column.Flags.ReadOnly
              columns = schema.columns(flags=~ignore_flags).values()
              use_indexes = True
          else:
              use_indexes = False
  
          # validate the column values
          values = self.values(key='column', columns=columns)
          for col, value in values.items():
              if not col.validate(value):
                  return False
  
          # valide the index values
          if use_indexes:
              for index in self.schema().indexes().values():
                  if not index.validate(self, values):
                      return False
  
          return True
docs: Validates the current record object to make sure it is ok to commit to the database.  If
          the optional override dictionary is passed in, then it will use the given values vs. the one
          stored with this record object which can be useful to check to see if the record will be valid before
          it is committed.
  
          :param      overrides | <dict>
  
          :return     <bool>