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);