Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » Ultra Light - C/C++ プログラミング » API リファレンス » Ultra Light C/C++ 共通 API リファレンス

 

ULRegisterSQLPassthroughCallback のコールバック関数

このコールバックは、SQL パススルー・スクリプトの実行時に、スクリプト実行の進行状況 (ステータス) を提供します。

構文
void ul_sql_passthrough_observer_fn( ul_sql_passthrough_status * status ); 
パラメータ
  • ul_sql_passthrough_status   スクリプト実行の現在のステータスを提供します。これには、状態、実行するスクリプトの数、現在実行されているスクリプト、登録呼び出しで提供されたユーザ・データが含まれます。

進行状況 observer コールバックは、次のように定義されます。

typedef void(UL_CALLBACK_FN * ul_sql_passthrough_observer_fn)
    (ul_sql_passthrough_status * status);

ul_sql_passthrough_status 構造体は、次のように定義されます。

typedef struct {
    ul_sql_passthrough_state	   state; // current state
    ul_u_long   script_count;          // total number of scripts to execute
    ul_u_long   cur_script;            // current script being executed (1-based)
    ul_bool     stop;                  // set to true to stop script execution
                                       // can only be set in the starting state
    ul_void *   user_data;             // user data provided in register call
    SQLCA *     sqlca;
} ul_sql_passthrough_status;

進行状況 observer コールバックは、次のメソッドによって登録されます。

UL_FN_SPEC ul_ret_void UL_FN_MOD ULRegisterSQLPassthroughCallback(
SQLCA *                         sqlca,
ul_sql_passthrough_observer_fn  callback,
ul_void *                       user_data );

ULRegisterSQLPassthroughCallback を呼び出すコールバックとコードのサンプルを次に示します。

static void UL_GENNED_FN_MOD passthroughCallback(ul_sql_passthrough_status * status) {
    switch( status->state ) {
        case UL_SQL_PASSTHROUGH_STATE_STARTING:
            printf( "SQL Passthrough script execution starting\n" );
            break;
        case UL_SQL_PASSTHROUGH_STATE_RUNNING_SCRIPT:
            printf( "Executing script %d of %d\n", status->cur_script, status->script_count );
            break;
        case UL_SQL_PASSTHROUGH_STATE_DONE:
            printf( "Finished executing SQL Passthrough scripts\n" );
            break;
        default:
            printf( "SQL Passthrough script execution has failed\n" );
            break;
    }
}

int main() {
    ULSqlca sqlca;

    sqlca.Initialize();
    ULRegisterSQLPassthroughCallback( sqlca.GetCA(), passthroughCallback, NULL );
    DatabaseManager * dm = ULInitDatabaseManager( sqlca );
    ...
}
戻り値

次のいずれかのアクションが返されます。

  • UL_ERROR_ACTION_CANCEL   エラーを引き起こした操作をキャンセルします。

  • UL_ERROR_ACTION_CONTINUE   エラーを引き起こした操作を無視して、実行を続けます。

  • UL_ERROR_ACTION_DEFAULT   エラー・コールバックがない場合と同じように動作します。

  • UL_ERROR_ACTION_TRY_AGAIN   エラーを引き起こした操作をリトライします。

参照