1 (** Global list of tables *)
8 let all : table list
ref = ref []
10 (** FIXME table names case sensitivity? *)
11 let by_name name
= fun (n
,_
) -> n
= name
13 (** @raise Error when no such table *)
14 let get_from tables name
=
16 List.find
(by_name name
) tables
17 with Not_found
-> failwith
(sprintf
"no such table %s" name
)
19 let get name
= get_from !all name
20 let get_schema name
= snd
(get name
)
21 let check name
= ignore
(get name
)
25 match List.find_all
(by_name name
) !all with
26 | [] -> all := v
:: !all
27 | _
-> failwith
(sprintf
"table %s already exists" name
)
29 let drop name
= check name
; all := List.remove_if
(by_name name
) !all
33 let alter_scheme ((n
,s
) as table
) =
39 all := List.map
alter_scheme !all
41 let alter_add name col pos
= alter name
(fun s
-> Sql.Schema.add s col pos
)
42 let alter_drop name col
= alter name
(fun s
-> Sql.Schema.drop s col
)
43 let alter_change name oldcol col pos
= alter name
(fun s
-> Sql.Schema.change s oldcol col pos
)
45 let print ch tables
= let out = IO.output_channel ch
in List.iter
(Sql.print_table
out) tables
; IO.flush
out
46 let print_all () = print stdout
!all
47 let print1 name
= print stdout
[get name
]
49 let reset () = all := []