let unlink_column = fun column ->
let (columns, to_be_removed) =
List.partition (fun c -> c.col_name <> column.col_name)
column.col_table.ta_columns
in
let (t_use, t_dont_use) = vtables_using_column_part column
and (i_use, i_dont_use) = indexes_using_column_part column
and (pk_use, pk_dont_use) =
List.partition (fun c -> c == column) column.col_table.ta_pkey
in
column.col_table.ta_columns <- columns;
column.col_table.ta_pkey <- pk_dont_use;
column.col_table.ta_db.db_vtables <- t_dont_use;
column.col_table.ta_db.db_indexes <- i_dont_use;
match to_be_removed with
| [c] -> c.col_table <- (Obj.magic 0); (t_use, i_use, pk_use <> [])
| _ -> Dbf_misc.ie ()