1998-02-23 04:42:23 -08:00
|
|
|
(***********************************************************************)
|
|
|
|
(* *)
|
|
|
|
(* Objective Caml *)
|
|
|
|
(* *)
|
|
|
|
(* Francois Rouaix, projet Cristal, INRIA Rocquencourt *)
|
|
|
|
(* *)
|
|
|
|
(* Copyright 1996 Institut National de Recherche en Informatique et *)
|
1999-11-17 10:59:06 -08:00
|
|
|
(* en Automatique. All rights reserved. This file is distributed *)
|
|
|
|
(* under the terms of the GNU Library General Public License. *)
|
1998-02-23 04:42:23 -08:00
|
|
|
(* *)
|
|
|
|
(***********************************************************************)
|
|
|
|
|
1999-11-17 11:25:38 -08:00
|
|
|
(* $Id$ *)
|
1998-02-23 04:42:23 -08:00
|
|
|
|
|
|
|
(* Module [Db]: interface to the DB databases of type btree. Cf dbopen(3) *)
|
|
|
|
|
|
|
|
(* this collides with Unix *)
|
|
|
|
type open_flag =
|
|
|
|
O_CREAT
|
|
|
|
| O_EXCL
|
|
|
|
| O_RDONLY
|
|
|
|
| O_RDWR
|
|
|
|
| O_TRUNC
|
|
|
|
|
|
|
|
type routine_flag =
|
|
|
|
R_CURSOR
|
|
|
|
| R_FIRST
|
|
|
|
| R_LAST
|
|
|
|
| R_NEXT
|
|
|
|
| R_NOOVERWRITE
|
|
|
|
| R_PREV
|
|
|
|
| R_SETCURSOR
|
|
|
|
|
1998-03-16 01:45:37 -08:00
|
|
|
(* All other fields have default values *)
|
|
|
|
type btree_flag =
|
|
|
|
Duplicates (* means R_DUP *)
|
|
|
|
| Cachesize of int
|
|
|
|
|
1998-02-23 04:42:23 -08:00
|
|
|
type file_perm = int
|
|
|
|
|
|
|
|
exception DB_error of string
|
|
|
|
(* Raised by the following functions when an error is encountered. *)
|
|
|
|
|
|
|
|
type key = string
|
|
|
|
type data = string
|
|
|
|
|
|
|
|
type t
|
|
|
|
|
|
|
|
(* Raw access *)
|
1998-03-16 01:45:37 -08:00
|
|
|
external dbopen : string -> open_flag list -> file_perm -> btree_flag list -> t
|
1998-02-23 04:42:23 -08:00
|
|
|
= "caml_db_open"
|
|
|
|
(* [dbopen file flags mode] *)
|
|
|
|
|
|
|
|
(* The common subset of available primitives *)
|
|
|
|
external close : t -> unit
|
|
|
|
= "caml_db_close"
|
|
|
|
|
|
|
|
external del : t -> key -> routine_flag list -> unit
|
|
|
|
= "caml_db_del"
|
|
|
|
(* raise Not_found if the key was not in the file *)
|
|
|
|
|
|
|
|
external get : t -> key -> routine_flag list -> data
|
|
|
|
= "caml_db_get"
|
|
|
|
(* raise Not_found if the key was not in the file *)
|
|
|
|
|
|
|
|
external put : t -> key -> data -> routine_flag list -> unit
|
|
|
|
= "caml_db_put"
|
|
|
|
|
|
|
|
external seq : t -> key -> routine_flag list -> (key * data)
|
|
|
|
= "caml_db_seq"
|
|
|
|
|
|
|
|
external sync : t -> unit
|
|
|
|
= "caml_db_sync"
|
|
|
|
|
|
|
|
|
|
|
|
val add : t -> key -> data -> unit
|
|
|
|
val find : t -> key -> data
|
|
|
|
val find_all : t -> key -> data list
|
|
|
|
val remove : t -> key -> unit
|
|
|
|
val iter : (string -> string -> unit) -> t -> unit
|