此回调函数可在 SQL 直通脚本执行期间提供脚本执行进度(状态)。
void ul_sql_passthrough_observer_fn( ul_sql_passthrough_status * status );
ul_sql_passthrough_status 提供脚本的当前执行状态,包括状态、要执行的脚本数、当前正在执行的脚本以及注册调用中提供的任何用户数据。
进度观察器回调函数定义如下:
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; |
进度观察器回调函数通过以下方法注册:
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 ); ... } |
返回以下操作之一 (*** Are these valid? ***):
UL_ERROR_ACTION_CANCEL 取消引发错误的操作。
UL_ERROR_ACTION_CONTINUE 继续执行,忽略引发错误的操作。
UL_ERROR_ACTION_DEFAULT 行为与没有错误回调时一样。
UL_ERROR_ACTION_TRY_AGAIN 重试引发错误的操作。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |