method create_view = fun ?(view = GTree.view ()) () ->
    let name_column =
      GTree.view_column ~title:"Name"
        ~renderer:(GTree.cell_renderer_text [], [("text", c_string)])
        ()
    and nullable_column =
      GTree.view_column ~title:"Nullable ?"
        ~renderer:(GTree.cell_renderer_text [], [("text", c_nullable)])
        ()
    and type_column =
      GTree.view_column ~title:"Type"
        ~renderer:(GTree.cell_renderer_text [], [("text", c_type)])
        ()
    and ocaml_ty_column =
      GTree.view_column ~title:"OCaml type"
        ~renderer:(GTree.cell_renderer_text [], [("text", c_ocaml_ty)])
        ()
    and options_column =
      GTree.view_column ~title:"Option"
        ~renderer:(GTree.cell_renderer_text [], [("text", c_options)])
        ()
    in
      List.iter
        (fun c ->
           c#set_resizable true;
           i_int (view#append_column c))
        [name_column; nullable_column; type_column;
         ocaml_ty_column; options_column];
      view#set_model (Some self#coerce);
      { col_view     = view;
        col_name     = name_column;
        col_nullable = nullable_column;
        col_type     = type_column;
        col_ocaml_ty = ocaml_ty_column;
        col_options  = options_column; }