A transition descriptor

The transition descriptor, MI_TRANSITION_DESC, stores information about a transition in the processing state of the database server. It holds information for all state-transition events.

The following state-transition events are held by the transition descriptor. (The first six state-transition events are for the server only)
  • MI_EVENT_SAVEPOINT
  • MI_EVENT_COMMIT_ABORT
  • MI_EVENT_POST_XACT
  • MI_EVENT_END_STMT
  • MI_EVENT_END_XACT
  • MI_EVENT_END_SESSION
  • MI_Xact_State_Change

The milib.h header file defines the MI_TRANSITION_DESC structure.

When a state transition event occurs, the DataBlade® API invokes the appropriate callback. To this callback, the DataBlade API passes an initialized transition descriptor as the third callback argument. The transition descriptor contains the transition type that initiated the state-transition event. To obtain the transition type from the descriptor, use the mi_transition_type() function. This function returns a value of type MI_TRANSITION_TYPE to indicate the transition type of the event that occurred. For a list of valid MI_TRANSITION_TYPE values, see Understanding state-transition events.
Important: The MI_TRANSITION_DESC structure is an opaque structure to DataBlade API modules. Do not access its internal fields directly. The internal structure of MI_TRANSITION_DESC might change in future releases. Therefore, to create portable code, always use the mi_transition_type() accessor function to obtain the transition type from this structure.
The following code fragment uses the mi_transition_type() function to determine which action to take when it receives a state-transition event:
MI_TRANSITION_DESC *event_data;
MI_TRANSITION_TYPE trans_type;
mi_string s[30];
...
trans_type = mi_transition_type(event_data);
switch ( trans_type )
   {
   case MI_BEGIN: /* client LIBMI apps only */
      s = "Transaction started.";
      break;
   case MI_NORMAL_END:
      s = "Successful event";
      break;
   case MI_ABORT_END:
      s = "Event failed and rolled back,";
      break;
   default:
      s = "Unknown transition type";
      break;
   }
fprintf(stderr, "%s\n", s);