sig
  exception Sqlite3_error of string
  exception Sqlite3_range_error of (int * int)
  type db
  type stmt
  type rc =
      RC_ok
    | RC_error
    | RC_internal
    | RC_perm
    | RC_abort
    | RC_busy
    | RC_locked
    | RC_nomem
    | RC_readonly
    | RC_interrupt
    | RC_ioerr
    | RC_corrupt
    | RC_notfound
    | RC_full
    | RC_cantopen
    | RC_protocol
    | RC_empty
    | RC_schema
    | RC_toobig
    | RC_constraint
    | RC_mismatch
    | RC_misuse
    | RC_nofls
    | RC_auth
    | RC_format
    | RC_range
    | RC_notadb
    | RC_row
    | RC_done
  type data =
      Data_none
    | Data_null
    | Data_int of int64
    | Data_float of float
    | Data_text of string
    | Data_blob of string
  type row = Sqlite3.data array
  type header = string array
  external db_open : string -> Sqlite3.db = "caml_sqlite3_open"
  external db_close : Sqlite3.db -> unit = "caml_sqlite3_close"
  external errcode : Sqlite3.db -> Sqlite3.rc = "caml_sqlite3_errcode"
  external errmsg : Sqlite3.db -> string = "caml_sqlite3_errmsg"
  external last_insert_rowid : Sqlite3.db -> int64
    = "caml_sqlite3_last_insert_rowid"
  external exec :
    Sqlite3.db ->
    string -> (string option array -> Sqlite3.header -> unit) -> Sqlite3.rc
    = "caml_sqlite3_exec"
  external prepare : Sqlite3.db -> string -> Sqlite3.stmt
    = "caml_sqlite3_prepare"
  external prepare_tail : Sqlite3.stmt -> Sqlite3.stmt option
    = "caml_sqlite3_prepare_tail"
  external recompile : Sqlite3.stmt -> unit = "caml_sqlite3_recompile"
  external step : Sqlite3.stmt -> Sqlite3.rc = "caml_sqlite3_step"
  external finalize : Sqlite3.stmt -> Sqlite3.rc
    = "caml_sqlite3_stmt_finalize"
  external reset : Sqlite3.stmt -> Sqlite3.rc = "caml_sqlite3_stmt_reset"
  external expired : Sqlite3.stmt -> bool = "caml_sqlite3_expired"
  external data_count : Sqlite3.stmt -> int = "caml_sqlite3_data_count"
  external column : Sqlite3.stmt -> int -> Sqlite3.data
    = "caml_sqlite3_column"
  external column_name : Sqlite3.stmt -> int -> string
    = "caml_sqlite3_column_name"
  external column_decltype : Sqlite3.stmt -> int -> string
    = "caml_sqlite3_column_decltype"
  external bind : Sqlite3.stmt -> int -> Sqlite3.data -> Sqlite3.rc
    = "caml_sqlite3_bind"
  external bind_parameter_count : Sqlite3.stmt -> int
    = "caml_sqlite3_bind_parameter_count"
  external bind_parameter_name : Sqlite3.stmt -> int -> string option
    = "caml_sqlite3_bind_parameter_name"
  external bind_parameter_index : Sqlite3.stmt -> string -> int
    = "caml_sqlite3_bind_parameter_index"
  external transfer_bindings : Sqlite3.stmt -> Sqlite3.stmt -> Sqlite3.rc
    = "caml_sqlite3_transfer_bindings"
  val string_of_data : Sqlite3.data -> string
  val string_of_rc : Sqlite3.rc -> string
  val exec_sql : (Sqlite3.stmt -> unit) -> Sqlite3.db -> string -> unit
  val row_data : Sqlite3.stmt -> Sqlite3.data array
  val row_names : Sqlite3.stmt -> string array
  val row_decltypes : Sqlite3.stmt -> string array
end