docs: public void index(Mutation mutation)
      {
          // Increment the cardinality for the number of rows in the table
          metrics.get(METRICS_TABLE_ROW_COUNT).incrementAndGet();
  
          // Set the first and last row values of the table based on existing row IDs
          if (firstRow == null || byteArrayComparator.compare(mutation.getRow(), firstRow) < 0) {
              firstRow = mutation.getRow();
          }
  
          if (lastRow == null || byteArrayComparator.compare(mutation.getRow(), lastRow) > 0) {
              lastRow = mutation.getRow();
          }
  
          // For each column update in this mutation
          for (ColumnUpdate columnUpdate : mutation.getUpdates()) {
              // Get the column qualifiers we want to index for this column family (if any)
              ByteBuffer family = wrap(columnUpdate.getColumnFamily());
              Collection<ByteBuffer> indexQualifiers = indexColumns.get(family);
  
              // If we have column qualifiers we want to index for this column family
              if (indexQualifiers != null) {
                  // Check if we want to index this particular qualifier
                  ByteBuffer qualifier = wrap(columnUpdate.getColumnQualifier());
                  if (indexQualifiers.contains(qualifier)) {
                      // If so, create a mutation using the following mapping:
                      // Row ID = column value
                      // Column Family = columnqualifier_columnfamily
                      // Column Qualifier = row ID
                      // Value = empty
                      ByteBuffer indexFamily = getIndexColumnFamily(columnUpdate.getColumnFamily(), columnUpdate.getColumnQualifier());
                      Type type = indexColumnTypes.get(family).get(qualifier);
                      ColumnVisibility visibility = new ColumnVisibility(columnUpdate.getColumnVisibility());
  
                      // If this is an array type, then index each individual element in the array
                      if (Types.isArrayType(type)) {
                          Type elementType = Types.getElementType(type);
                          List<?> elements = serializer.decode(type, columnUpdate.getValue());
                          for (Object element : elements) {
                              addIndexMutation(wrap(serializer.encode(elementType, element)), indexFamily, visibility, mutation.getRow());
                          }
                      }
                      else {
                          addIndexMutation(wrap(columnUpdate.getValue()), indexFamily, visibility, mutation.getRow());
                      }
                  }
              }
          }
      }