sig
  type db
  type st
  exception Error of exn
  exception Sqlite_error of string * Sqlite3.Rc.t
  val open_db : string -> Sqlexpr_sqlite.db
  val close_db : Sqlexpr_sqlite.db -> unit
  val sqlite_db : Sqlexpr_sqlite.db -> Sqlite3.db
  module Make :
    functor (M : Sqlexpr_concurrency.THREAD->
      sig
        type ('a, 'b) statement = {
          sql_statement : string;
          stmt_id : string option;
          directive : (Sqlexpr_sqlite.st -> 'b) -> Sqlexpr_sqlite.st -> 'a;
        }
        type ('a, 'b, 'c) expression = {
          statement : ('a, 'c) Sqlexpr_sqlite.Make.statement;
          get_data : int * (Sqlite3.Data.t array -> 'b);
        }
        exception Error of exn
        exception Sqlite_error of string * Sqlite3.Rc.t
        val open_db : string -> Sqlexpr_sqlite.db
        val close_db : Sqlexpr_sqlite.db -> unit
        val sqlite_db : Sqlexpr_sqlite.db -> Sqlite3.db
        val execute :
          Sqlexpr_sqlite.db ->
          ('a, unit M.t) Sqlexpr_sqlite.Make.statement -> 'a
        val insert :
          Sqlexpr_sqlite.db ->
          ('a, int64 M.t) Sqlexpr_sqlite.Make.statement -> 'a
        val select :
          Sqlexpr_sqlite.db ->
          ('a, 'M.t, 'b list M.t) Sqlexpr_sqlite.Make.expression -> 'a
        val select_f :
          Sqlexpr_sqlite.db ->
          ('-> 'M.t) ->
          ('c, 'a, 'b list M.t) Sqlexpr_sqlite.Make.expression -> 'c
        val select_one :
          Sqlexpr_sqlite.db ->
          ('a, 'M.t, 'M.t) Sqlexpr_sqlite.Make.expression -> 'a
        val transaction :
          Sqlexpr_sqlite.db -> (Sqlexpr_sqlite.db -> 'M.t) -> 'M.t
        val fold :
          Sqlexpr_sqlite.db ->
          ('-> '-> 'M.t) ->
          '-> ('c, 'b, 'M.t) Sqlexpr_sqlite.Make.expression -> 'c
        val iter :
          Sqlexpr_sqlite.db ->
          ('-> unit M.t) ->
          ('b, 'a, unit M.t) Sqlexpr_sqlite.Make.expression -> 'b
        module Directives :
          sig
            type ('a, 'b) directive =
                (Sqlexpr_sqlite.st -> 'b) -> Sqlexpr_sqlite.st -> 'a
            val literal :
              string -> ('a, 'a) Sqlexpr_sqlite.Make.Directives.directive
            val int :
              (int -> 'a, 'a) Sqlexpr_sqlite.Make.Directives.directive
            val text :
              (string -> 'a, 'a) Sqlexpr_sqlite.Make.Directives.directive
            val blob :
              (string -> 'a, 'a) Sqlexpr_sqlite.Make.Directives.directive
            val float :
              (float -> 'a, 'a) Sqlexpr_sqlite.Make.Directives.directive
            val int32 :
              (int32 -> 'a, 'a) Sqlexpr_sqlite.Make.Directives.directive
            val int64 :
              (int64 -> 'a, 'a) Sqlexpr_sqlite.Make.Directives.directive
            val bool :
              (bool -> 'a, 'a) Sqlexpr_sqlite.Make.Directives.directive
            val any :
              (('-> string) -> '-> 'b, 'b)
              Sqlexpr_sqlite.Make.Directives.directive
            val maybe_int :
              (int option -> 'a, 'a) Sqlexpr_sqlite.Make.Directives.directive
            val maybe_text :
              (string option -> 'a, 'a)
              Sqlexpr_sqlite.Make.Directives.directive
            val maybe_blob :
              (string option -> 'a, 'a)
              Sqlexpr_sqlite.Make.Directives.directive
            val maybe_float :
              (float option -> 'a, 'a)
              Sqlexpr_sqlite.Make.Directives.directive
            val maybe_int32 :
              (int32 option -> 'a, 'a)
              Sqlexpr_sqlite.Make.Directives.directive
            val maybe_int64 :
              (int64 option -> 'a, 'a)
              Sqlexpr_sqlite.Make.Directives.directive
            val maybe_bool :
              (bool option -> 'a, 'a)
              Sqlexpr_sqlite.Make.Directives.directive
            val maybe_any :
              (('-> string) -> 'a option -> 'b, 'b)
              Sqlexpr_sqlite.Make.Directives.directive
          end
        module Conversion :
          sig
            val text : Sqlite3.Data.t -> string M.t
            val blob : Sqlite3.Data.t -> string M.t
            val int : Sqlite3.Data.t -> int M.t
            val int32 : Sqlite3.Data.t -> int32 M.t
            val int64 : Sqlite3.Data.t -> int64 M.t
            val float : Sqlite3.Data.t -> float M.t
            val bool : Sqlite3.Data.t -> bool M.t
            val maybe :
              (Sqlite3.Data.t -> 'M.t) -> Sqlite3.Data.t -> 'a option M.t
            val maybe_text : Sqlite3.Data.t -> string option M.t
            val maybe_blob : Sqlite3.Data.t -> string option M.t
            val maybe_int : Sqlite3.Data.t -> int option M.t
            val maybe_int32 : Sqlite3.Data.t -> int32 option M.t
            val maybe_int64 : Sqlite3.Data.t -> int64 option M.t
            val maybe_float : Sqlite3.Data.t -> float option M.t
            val maybe_bool : Sqlite3.Data.t -> bool option M.t
          end
      end
end