Home | Previous Page | Next Page   Database Access > Executing SQL Statements > Processing Statement Results >

Example: The get_results( ) Function

The following user function, get_results( ), demonstrates the mi_get_result( ) row-retrieval loop, controlled with the mi_get_result( ) function. It also demonstrates the use of the mi_result_command_name( ) function to get the name of the current statement and the mi_result_row_count( ) function to get the number of rows affected by this statement.

/*
 * FUNCTION: get_results( )
 * PURPOSE: Get results of current statement. 
 *          Obtain the kind of statement and the number of
 *               rows affected.
 *          Return the number of rows affected.
 *
 * CALLED BY: send_statement( ), see page Example: The send_statement( ) Function.
 */
#include "mi.h"
 
mi_integer get_results(MI_CONNECTION *conn)
{
   mi_integer   count;
   mi_integer   result;
   char         cmd[25];

   while ( (result = mi_get_result(conn) ) 
         != MI_NO_MORE_RESULTS )
      {
      switch( result )
         {
         case MI_ERROR:
            mi_db_error_raise(conn, MI_EXCEPTION, 
      "Could not get statement results (mi_get_result)\n");

         case MI_DDL:
            count = 0;
            break;

         case MI_DML:
            count = handle_dml(conn); 
            break;

         case MI_ROWS:
            count = get_data(conn);
            break;

         default:
            mi_db_error_raise(conn, MI_EXCEPTION, 
      "Unknown statement results (mi_get_result)\n");

         } /* end switch */
      } /* end while */

   return ( count );
}

When a query returns rows of data, the mi_get_result( ) loop in get_results( ) executes three times:

  1. The first iteration of the mi_get_result( ) loop returns MI_ROWS to indicate that the query has successfully opened a cursor.

    The get_results( ) function executes the MI_ROWS case of the switch statement. This function then calls another user function, get_data( ), to iterate over all query rows. For the implementation of the get_data( ) function, see Example: The get_data( ) Function.

  2. The second iteration of the mi_get_result( ) loop returns MI_DML to indicate that the cursor processing has completed and the query has successfully completed.

    The get_data( ) function has handled the rows in the cursor so no more query rows remain to be processed. The get_results( ) function executes the MI_DML case of the switch statement, which calls the handle_dml( ) function to obtain the name and number of statements from the current statement. For the implementation of the handle_dml( ) function, see Figure 43.

  3. The third iteration of the mi_get_result( ) loop returns MI_NO_MORE_RESULTS to indicate that processing for the query is complete.

    The MI_NO_MORE_RESULTS value from mi_get_result( ) causes the mi_get_result( ) loop to terminate.

Home | [ Top of Page | Previous Page | Next Page | Contents | Index ]