/* ML type : dbconn_ -> string -> dbresult_ */ EXTERNML value db_exec(value conn, value query) { if (mysql_real_query(DBconn_val(conn), String_val(query), string_length(query))) failwith("db_exec query failed"); else { MYSQL_RES *dbres = mysql_store_result(DBconn_val(conn)); return dbresult_alloc(dbres); } }
/* ML type : dbconn_ -> string option */ EXTERNML value db_errormessage(value conn) { char* msg = mysql_error(DBconn_val(conn)); if (msg == NULL || msg[0] == '\0') msg = NULL; return Val_stringornull(msg); }
/* ML type : dbconn_ -> string */ EXTERNML value db_port(value conn) { char strport[5]; sprintf(strport,"%i",(DBconn_val(conn))->port); strport[4]='\0'; return copy_string(strport); }
/* ML type : dbconn_ -> dbresultstatus */ EXTERNML value db_resultstatus(value conn) { MYSQL *mysql = DBconn_val(conn); switch (mysql_errno(mysql)) { case ER_EMPTY_QUERY: return Atom(Empty_query); case 0: /* No error */ { /* If mysql_num_fields==0, query was a command */ if (mysql_num_fields(mysql) == 0) return Atom(Command_ok); else return Atom(Tuples_ok); } default: return Atom(Nonfatal_error); } }
/* ML type : dbconn_ -> dbresultstatus */ EXTERNML value db_resultstatus(value conn) { MYSQL *mysql = DBconn_val(conn); switch (mysql_errno(mysql)) { case ER_EMPTY_QUERY: return Atom(Empty_query); case 0: /* No error */ { /* If mysql_field_count==0, query was a command */ /* 2002-07-25: In MySQL 3.23 and later, must use mysql_field_count */ if (mysql_field_count(mysql) == 0) return Atom(Command_ok); else return Atom(Tuples_ok); } default: return Atom(Nonfatal_error); } }
/* ML type : dbresult_ -> int */ EXTERNML value db_cmdtuples(value conn) { /* NB: Cast from long long int to long int: */ long cmdtuples = (long)(mysql_affected_rows(DBconn_val(conn))); return Val_long(cmdtuples); }
/* ML type : dbconn_ -> unit */ EXTERNML value db_status(value conn) { mysql_ping(DBconn_val(conn)); return Val_bool(mysql_ping(DBconn_val(conn))); }
/* ML type : dbconn_ -> unit */ EXTERNML value db_reset(value conn) { mysql_ping(DBconn_val(conn)); return Val_unit; }
/* ML type : dbconn_ -> unit */ EXTERNML value db_finish(value conn) { mysql_close(DBconn_val(conn)); return Val_unit; }
/* ML type : dbconn_ -> string */ EXTERNML value db_host(value conn) { return Val_stringornull((DBconn_val(conn))->host); }
/* ML type : dbconn_ -> string */ EXTERNML value db_db(value conn) { return copy_string((DBconn_val(conn))->db); }