let update_index = fun index ~name ~columns ~unique ->
    if index.idx_name <> name then begin
      validate_name_exn name;
      begin
        match index_by_name_opt index.idx_db name with
          | None   -> index.idx_name <- name
          | Some _ -> raise (Duplicated_name name)
      end;
    end;
    if columns = [] then
      raise (Invalid_args "An index must contain at least one column");
    index.idx_name <- name;
    index.idx_columns <- columns;
    index.idx_unique <- unique