Exceptions in a client LIBMI application (Client)
If the client LIBMI application has not registered a callback that handles the MI_Exception event on the current connection, the client LIBMI calls the system-default callback.
- A client LIBMI application executes a DataBlade® API function that throws an MI_Exception event.
- An exception occurs in a UDR that is invoked from a statement in the client LIBMI application and any exception callbacks that the UDR has registered return the MI_CB_CONTINUE return status.
Function descriptions in the Informix® DataBlade® API Function Reference contain a section titled Return Values. This section lists the possible return values for the DataBlade® API function. In a C UDR, DataBlade® API function calls might or might not return a value, depending on whether the DataBlade® API function throws an MI_Exception event when it encounters a runtime error. However, DataBlade® API function calls in a client LIBMI application always indicate failure because client-side callbacks always return to the DataBlade® API function that generated the error.
- MI_ERROR if the return value is an integer.
- NULL if the return value is a pointer.
The client LIBMI application can check for these error values and take any appropriate actions.
The client LIBMI application registers callbacks with the mi_register_callback() function. You must provide a valid connection descriptor to mi_register_callback() for all valid event types.
int main (argc, arcv)
int argc;
char *argv;
{
MI_CONNECTION *client_conn;
MI_CALLBACK_HANDLE *client_cback;
mi_integer ret;
/* Open a connection to the database server */
client_conn = mi_open(argv[1], NULL, NULL);
/* Register the exception callback */
client_cback = mi_register_callback(client_conn,
MI_Exception, (MI_VOID *)clntexcpt_callback, NULL, NULL);
if ( client_cback == NULL )
/* do something appropriate */
...
ret = mi_exec(client_conn, "bad SQL statement",
MI_QUERY_NORMAL);
if ( ret == MI_ERROR )
/* perform error recovery */
...
}