sig
  type dbd
  type db = {
    dbhost : string option;
    dbname : string option;
    dbport : int option;
    dbpwd : string option;
    dbuser : string option;
    dbsocket : string option;
  }
  val defaults : Mysql.db
  type protocol =
      PROTOCOL_DEFAULT
    | PROTOCOL_TCP
    | PROTOCOL_SOCKET
    | PROTOCOL_PIPE
    | PROTOCOL_MEMORY
  type db_option =
      OPT_COMPRESS
    | OPT_NAMED_PIPE
    | OPT_LOCAL_INFILE of bool
    | OPT_RECONNECT of bool
    | OPT_SSL_VERIFY_SERVER_CERT of bool
    | REPORT_DATA_TRUNCATION of bool
    | SECURE_AUTH of bool
    | OPT_PROTOCOL of Mysql.protocol
    | OPT_CONNECT_TIMEOUT of int
    | OPT_READ_TIMEOUT of int
    | OPT_WRITE_TIMEOUT of int
    | INIT_COMMAND of string
    | READ_DEFAULT_FILE of string
    | READ_DEFAULT_GROUP of string
    | SET_CHARSET_DIR of string
    | SET_CHARSET_NAME of string
    | SHARED_MEMORY_BASE_NAME of string
    | OPT_FOUND_ROWS
  val connect : ?options:Mysql.db_option list -> Mysql.db -> Mysql.dbd
  val quick_connect :
    ?options:Mysql.db_option list ->
    ?host:string ->
    ?database:string ->
    ?port:int ->
    ?password:string -> ?user:string -> ?socket:string -> unit -> Mysql.dbd
  val set_charset : Mysql.dbd -> string -> unit
  val change_user : Mysql.dbd -> Mysql.db -> unit
  val quick_change :
    ?user:string -> ?password:string -> ?database:string -> Mysql.dbd -> unit
  val select_db : Mysql.dbd -> string -> unit
  val disconnect : Mysql.dbd -> unit
  val ping : Mysql.dbd -> unit
  val list_dbs : Mysql.dbd -> ?pat:string -> unit -> string array option
  val client_info : unit -> string
  val host_info : Mysql.dbd -> string
  val server_info : Mysql.dbd -> string
  val proto_info : Mysql.dbd -> int
  exception Error of string
  type error_code =
      Aborting_connection
    | Access_denied_error
    | Alter_info
    | Bad_db_error
    | Bad_field_error
    | Bad_host_error
    | Bad_null_error
    | Bad_table_error
    | Blob_cant_have_default
    | Blob_key_without_length
    | Blob_used_as_key
    | Blobs_and_no_terminated
    | Cant_create_db
    | Cant_create_file
    | Cant_create_table
    | Cant_create_thread
    | Cant_delete_file
    | Cant_drop_field_or_key
    | Cant_find_dl_entry
    | Cant_find_system_rec
    | Cant_find_udf
    | Cant_get_stat
    | Cant_get_wd
    | Cant_initialize_udf
    | Cant_lock
    | Cant_open_file
    | Cant_open_library
    | Cant_read_charset
    | Cant_read_dir
    | Cant_remove_all_fields
    | Cant_reopen_table
    | Cant_set_wd
    | Checkread
    | Columnaccess_denied_error
    | Commands_out_of_sync
    | Con_count_error
    | Conn_host_error
    | Connection_error
    | Db_create_exists
    | Db_drop_delete
    | Db_drop_exists
    | Db_drop_rmdir
    | Dbaccess_denied_error
    | Delayed_cant_change_lock
    | Delayed_insert_table_locked
    | Disk_full
    | Dup_entry
    | Dup_fieldname
    | Dup_key
    | Dup_keyname
    | Dup_unique
    | Empty_query
    | Error_on_close
    | Error_on_read
    | Error_on_rename
    | Error_on_write
    | Field_specified_twice
    | File_exists_error
    | File_not_found
    | File_used
    | Filsort_abort
    | Forcing_close
    | Form_not_found
    | Function_not_defined
    | Get_errno
    | Got_signal
    | Grant_wrong_host_or_user
    | Handshake_error
    | Hashchk
    | Host_is_blocked
    | Host_not_privileged
    | Illegal_grant_for_table
    | Illegal_ha
    | Insert_info
    | Insert_table_used
    | Invalid_default
    | Invalid_group_func_use
    | Invalid_use_of_null
    | Ipsock_error
    | Key_column_does_not_exits
    | Key_not_found
    | Kill_denied_error
    | Load_info
    | Localhost_connection
    | Mix_of_group_func_and_fields
    | Multiple_pri_key
    | Namedpipe_connection
    | Namedpipeopen_error
    | Namedpipesetstate_error
    | Namedpipewait_error
    | Net_error_on_write
    | Net_fcntl_error
    | Net_packet_too_large
    | Net_packets_out_of_order
    | Net_read_error
    | Net_read_error_from_pipe
    | Net_read_interrupted
    | Net_uncompress_error
    | Net_write_interrupted
    | Nisamchk
    | No
    | No_db_error
    | No_raid_compiled
    | No_such_index
    | No_such_table
    | No_such_thread
    | No_tables_used
    | No_unique_logfile
    | Non_uniq_error
    | Nonexisting_grant
    | Nonexisting_table_grant
    | Nonuniq_table
    | Normal_shutdown
    | Not_allowed_command
    | Not_form_file
    | Not_keyfile
    | Null_column_in_index
    | Old_keyfile
    | Open_as_readonly
    | Out_of_memory
    | Out_of_resources
    | Out_of_sortmemory
    | Outofmemory
    | Parse_error
    | Password_anonymous_user
    | Password_no_match
    | Password_not_allowed
    | Primary_cant_have_null
    | Ready
    | Record_file_full
    | Regexp_error
    | Requires_primary_key
    | Server_gone_error
    | Server_handshake_err
    | Server_lost
    | Server_shutdown
    | Shutdown_complete
    | Socket_create_error
    | Stack_overrun
    | Syntax_error
    | Table_cant_handle_auto_increment
    | Table_cant_handle_blob
    | Table_exists_error
    | Table_must_have_columns
    | Table_not_locked
    | Table_not_locked_for_write
    | Tableaccess_denied_error
    | Tcp_connection
    | Textfile_not_readable
    | Too_big_fieldlength
    | Too_big_rowsize
    | Too_big_select
    | Too_big_set
    | Too_long_ident
    | Too_long_key
    | Too_long_string
    | Too_many_delayed_threads
    | Too_many_fields
    | Too_many_key_parts
    | Too_many_keys
    | Too_many_rows
    | Too_many_tables
    | Udf_exists
    | Udf_no_paths
    | Unexpected_eof
    | Unknown_character_set
    | Unknown_com_error
    | Unknown_error
    | Unknown_host
    | Unknown_procedure
    | Unknown_table
    | Unsupported_extension
    | Update_info
    | Update_without_key_in_safe_mode
    | Version_error
    | Wrong_auto_key
    | Wrong_column_name
    | Wrong_db_name
    | Wrong_field_spec
    | Wrong_field_terminators
    | Wrong_field_with_group
    | Wrong_group_field
    | Wrong_host_info
    | Wrong_key_column
    | Wrong_mrg_table
    | Wrong_outer_join
    | Wrong_paramcount_to_procedure
    | Wrong_parameters_to_procedure
    | Wrong_sub_key
    | Wrong_sum_select
    | Wrong_table_name
    | Wrong_value_count
    | Wrong_value_count_on_row
    | Yes
  type status = StatusOK | StatusEmpty | StatusError of Mysql.error_code
  val status : Mysql.dbd -> Mysql.status
  val errno : Mysql.dbd -> Mysql.error_code
  val errmsg : Mysql.dbd -> string option
  type result
  val exec : Mysql.dbd -> string -> Mysql.result
  val fetch : Mysql.result -> string option array option
  val to_row : Mysql.result -> int64 -> unit
  val size : Mysql.result -> int64
  val iter : Mysql.result -> f:(string option array -> unit) -> unit
  val iter_col :
    Mysql.result -> key:string -> f:(string option -> unit) -> unit
  val iter_cols :
    Mysql.result ->
    key:string array -> f:(string option array -> unit) -> unit
  val map : Mysql.result -> f:(string option array -> 'a) -> 'a list
  val map_col :
    Mysql.result -> key:string -> f:(string option -> 'a) -> 'a list
  val map_cols :
    Mysql.result ->
    key:string array -> f:(string option array -> 'a) -> 'a list
  val column :
    Mysql.result -> key:string -> row:string option array -> string option
  type dbty =
      IntTy
    | FloatTy
    | StringTy
    | SetTy
    | EnumTy
    | DateTimeTy
    | DateTy
    | TimeTy
    | YearTy
    | TimeStampTy
    | UnknownTy
    | Int64Ty
    | BlobTy
    | DecimalTy
  type field = {
    name : string;
    table : string option;
    def : string option;
    ty : Mysql.dbty;
    max_length : int;
    flags : int;
    decimals : int;
  }
  val pretty_type : Mysql.dbty -> string
  val affected : Mysql.dbd -> int64
  val insert_id : Mysql.dbd -> int64
  val fields : Mysql.result -> int
  val names : Mysql.result -> string array
  val types : Mysql.result -> Mysql.dbty array
  val fetch_field : Mysql.result -> Mysql.field option
  val fetch_fields : Mysql.result -> Mysql.field array option
  val fetch_field_dir : Mysql.result -> int -> Mysql.field option
  val escape : string -> string
  val real_escape : Mysql.dbd -> string -> string
  val int2ml : string -> int
  val decimal2ml : string -> string
  val int322ml : string -> int32
  val nativeint2ml : string -> nativeint
  val int642ml : string -> int64
  val float2ml : string -> float
  val str2ml : string -> string
  val enum2ml : string -> string
  val blob2ml : string -> string
  val set2ml : string -> string list
  val datetime2ml : string -> int * int * int * int * int * int
  val date2ml : string -> int * int * int
  val time2ml : string -> int * int * int
  val year2ml : string -> int
  val timestamp2ml : string -> int * int * int * int * int * int
  val opt : ('-> 'b) -> 'a option -> 'b option
  val not_null : ('-> 'b) -> 'a option -> 'b
  val ml2str : string -> string
  val ml2rstr : Mysql.dbd -> string -> string
  val ml2blob : string -> string
  val ml2rblob : Mysql.dbd -> string -> string
  val ml2int : int -> string
  val ml2decimal : string -> string
  val ml322int : int32 -> string
  val ml642int : int64 -> string
  val ml2float : float -> string
  val ml2enum : string -> string
  val ml2renum : Mysql.dbd -> string -> string
  val ml2set : string list -> string
  val ml2rset : Mysql.dbd -> string list -> string
  val ml2datetime : int * int * int * int * int * int -> string
  val ml2datetimel :
    year:int ->
    month:int -> day:int -> hour:int -> min:int -> sec:int -> string
  val ml2date : int * int * int -> string
  val ml2datel : year:int -> month:int -> day:int -> string
  val ml2time : int * int * int -> string
  val ml2timel : hour:int -> min:int -> sec:int -> string
  val ml2year : int -> string
  val ml2timestamp : int * int * int * int * int * int -> string
  val ml2timestampl :
    year:int ->
    month:int -> day:int -> hour:int -> min:int -> sec:int -> string
  val values : string list -> string
  module Prepared :
    sig
      type stmt
      type stmt_result
      val create : Mysql.dbd -> string -> Mysql.Prepared.stmt
      val execute :
        Mysql.Prepared.stmt -> string array -> Mysql.Prepared.stmt_result
      val execute_null :
        Mysql.Prepared.stmt ->
        string option array -> Mysql.Prepared.stmt_result
      val affected : Mysql.Prepared.stmt -> int64
      val insert_id : Mysql.Prepared.stmt -> int64
      val real_status : Mysql.Prepared.stmt -> int
      val fetch : Mysql.Prepared.stmt_result -> string option array option
      val result_metadata : Mysql.Prepared.stmt -> Mysql.result
      val close : Mysql.Prepared.stmt -> unit
    end
end