code: def _ReadTable(self, tables, file_object, table_offset):
      
      table_header = self._ReadTableHeader(file_object, table_offset)
  
      for record_offset in table_header.record_offsets:
        if record_offset == 0:
          continue
  
        record_offset += table_offset
  
        if table_header.record_type == self._RECORD_TYPE_CSSM_DL_DB_SCHEMA_INFO:
          self._ReadRecordSchemaInformation(tables, file_object, record_offset)
        elif table_header.record_type == (
            self._RECORD_TYPE_CSSM_DL_DB_SCHEMA_INDEXES):
          self._ReadRecordSchemaIndexes(tables, file_object, record_offset)
        elif table_header.record_type == (
            self._RECORD_TYPE_CSSM_DL_DB_SCHEMA_ATTRIBUTES):
          self._ReadRecordSchemaAttributes(tables, file_object, record_offset)
        else:
          self._ReadRecord(
              tables, file_object, record_offset, table_header.record_type)
docs: Reads the table.
  
      Args:
        tables (dict[int, KeychainDatabaseTable]): tables per identifier.
        file_object (file): file-like object.
        table_offset (int): offset of the table relative to the start of
            the file.
  
      Raises:
        ParseError: if the table cannot be read.