This is a read-only copy of the MariaDB Knowledgebase generated on 2024-11-24. For the latest, interactive version please visit https://mariadb.com/kb/.

Guida di riferimento dell'API non-bloccante

Ecco una lista di tutte le funzioni dell'API client non-bloccante e dei loro parametri. Nonostante operino in modo non-bloccante, funzionano esattamente allo stesso modo delle loro controparti bloccanti, quindi si può trovare la semantica esatta nella documentazione della normale API client.

L'API contiene anche le due funzioni seguenti, utili per ottenere i valori fd e timeout del socket e attendere il verificarsi degli eventi:

my_socket mysql_get_socket(const MYSQL *mysql)

Restituisce il descrittore del socket usato dalla connessione.

unsigned int STDCALL mysql_get_timeout_value(const MYSQL *mysql)

Dovrebbe essere usato solo se una funzione a _start() o _cont() restituisce un valore con il flag MYSQL_WAIT_TIMEOUT. In questo caso restituisce un valore in secondi, dopo il quale un timeout sarà scaduto e l'applicazione dovrà chiamare la funzione _cont() opportuna, passando MYSQL_WAIT_TIMEOUT come evento.

Si usa per gestire i timeout della connessione e delle letture.

Alla fine della pagina c'è una lista di tutte le funzioni dell'API normale che possono essere utilizzate in modo sicuro in un programma non-bloccante, purché non abbiano mai bisogno di bloccare.

int mysql_real_connect_start(MYSQL **ret, MYSQL *mysql, const char *host,
                         const char *user, const char *passwd, const char *db,
                         unsigned int port, const char *unix_socket,
                         unsigned long client_flags)
int mysql_real_connect_cont(MYSQL **ret, MYSQL *mysql, int ready_status)

mysql_real_connect_start() inizializza la richiesta di una connessione non-bloccante a un server.

Quando mysql_real_connect_start() o mysql_real_connect_cont() restituiscono zero, in *ret viene registrata una copia dell'argomento 'mysql'.

int mysql_real_query_start(int *ret, MYSQL *mysql, const char *stmt_str,
unsigned long length)
int mysql_real_query_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_fetch_row_start(MYSQL_ROW *ret, MYSQL_RES *result)
int mysql_fetch_row_cont(MYSQL_ROW *ret, MYSQL_RES *result, int ready_status)

Effettua il fetch di una nuova riga dopo una query di tipo SELECT.

Se MYSQL_RES è stato ottenuto da mysql_use_result(), questa funzione permette un'elaborazione in stream, in cui le righe iniziali vengono ricevute dall'applicazione mentre il server sta ancora inviando i record seguenti. Quando non vi sono più dati da leggere nel socket, mysql_fetch_row_start() o mysql_fetch_row_cont() restituisce MYSQL_WAIT_READ (oppure MYSQL_WAIT_WRITE se si sta utilizzando la SSL e c'è bisogno di una ri-negoziazione; anche MYSQL_WAIT_TIMEOUT potrebbe essere impostato, se il timeout in lettura è abilitato). Quando altri dati saranno disponibili, si potrà effettuare il fetch delle altre righe con mysql_fetch_row_cont().

Se MYSQL_RES è stato ottenuto da mysql_store_result() / mysql_store_result_start() / mysql_store_result_cont(), questa funzione non può bloccare mysql_fetch_row_start() restituirà sempre 0 (e volendo si potrà usare plain mysql_fetch_row() con lo stesso effetto).

int mysql_set_character_set_start(int *ret, MYSQL *mysql, const char *csname)
int mysql_set_character_set_cont(int *ret, MYSQL *mysql, int ready_status)
mysql_select_db_start(int *ret, MYSQL *mysql, const char *db)
int mysql_select_db_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_send_query_start(int *ret, MYSQL *mysql, const char *q, unsigned long length)
int mysql_send_query_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_store_result_start(MYSQL_RES **ret, MYSQL *mysql)
int mysql_store_result_cont(MYSQL_RES **ret, MYSQL *mysql, int ready_status)
int mysql_free_result_start(MYSQL_RES *result)
int mysql_free_result_cont(MYSQL_RES *result, int ready_status)

Questa funzione potrebbe aver bisogno di attendere se quando è stata chiamata non era stato effettuato il fetch di tutte le righe (dovrà poi esaurire le righe inviate dal server perché non interferiscano con le query successive).

Se è stato effettuato il fetch di tutte le righe, questa funzione non dovrà attendere. mysql_free_result_start() restituisce zero (volendo, si potrà usare mysql_free_result() in alternativa).

Si noti che mysql_free_result() non restituisce alcun valore, so perciò non ha il parametro 'ret' come mysql_free_result_start() e mysql_free_result_cont().

int mysql_close_start(MYSQL *sock)
int mysql_close_cont(MYSQL *sock, int ready_status)

mysql_close() invia una richiesta COM_QUIT al server, ma non aspetta la risposta.

Perciò in teoria può essere bloccante (se il buffer dei socket è pieno), ma in pratica questo non accade di frequente.

La veersione non-bloccante di mysql_close() è presente per completezza; per molte applicazioni sarà probabilmente sufficiente (e più semplice) usare il normale mysql_close().

Si noti che mysql_close() non restituisce alcun valore, perciò non ha il parametro 'ret' come mysql_close_start() e mysql_close_cont().

int mysql_change_user_start(my_bool *ret, MYSQL *mysql, const char *user, const
                            char *passwd, const char *db)
int mysql_change_user_cont(my_bool *ret, MYSQL *mysql, int ready_status)
int mysql_query_start(int *ret, MYSQL *mysql, const char *q)
int mysql_query_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_shutdown_start(int *ret, MYSQL *mysql, enum mysql_enum_shutdown_level
                        shutdown_level)
int mysql_shutdown_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_dump_debug_info_start(int *ret, MYSQL *mysql)
int mysql_dump_debug_info_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_refresh_start(int *ret, MYSQL *mysql, unsigned int refresh_options)
int mysql_refresh_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_kill_start(int *ret, MYSQL *mysql, unsigned long pid)
int mysql_kill_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_set_server_option_start(int *ret, MYSQL *mysql,
                              enum enum_mysql_set_option option)
int mysql_set_server_option_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_ping_start(int *ret, MYSQL *mysql)
int mysql_ping_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_stat_start(const char **ret, MYSQL *mysql)
int mysql_stat_cont(const char **ret, MYSQL *mysql, int ready_status)
int mysql_list_dbs_start(MYSQL_RES **ret, MYSQL *mysql, const char *wild)
int mysql_list_dbs_cont(MYSQL_RES **ret, MYSQL *mysql, int ready_status)
int mysql_list_tables_start(MYSQL_RES **ret, MYSQL *mysql, const char *wild)
int mysql_list_tables_cont(MYSQL_RES **ret, MYSQL *mysql, int ready_status)
int mysql_list_processes_start(MYSQL_RES **ret, MYSQL *mysql)
int mysql_list_processes_cont(MYSQL_RES **ret, MYSQL *mysql, int ready_status)
int mysql_list_fields_start(MYSQL_RES **ret, MYSQL *mysql, const char *table,
                        const char *wild)
int mysql_list_fields_cont(MYSQL_RES **ret, MYSQL *mysql, int ready_status)
int mysql_read_query_result_start(my_bool *ret, MYSQL *mysql)
int mysql_read_query_result_cont(my_bool *ret, MYSQL *mysql, int ready_status)
int mysql_stmt_prepare_start(int *ret, MYSQL_STMT *stmt, const char *query,
                         unsigned long length)
int mysql_stmt_prepare_cont(int *ret, MYSQL_STMT *stmt, int ready_status)
int mysql_stmt_execute_start(int *ret, MYSQL_STMT *stmt)
int mysql_stmt_execute_cont(int *ret, MYSQL_STMT *stmt, int ready_status)
int mysql_stmt_fetch_start(int *ret, MYSQL_STMT *stmt)
int mysql_stmt_fetch_cont(int *ret, MYSQL_STMT *stmt, int ready_status)
int mysql_stmt_store_result_start(int *ret, MYSQL_STMT *stmt)
int mysql_stmt_store_result_cont(int *ret, MYSQL_STMT *stmt, int ready_status)
int mysql_stmt_close_start(my_bool *ret, MYSQL_STMT *stmt)
int mysql_stmt_close_cont(my_bool *ret, MYSQL_STMT *stmt, int ready_status)
int mysql_stmt_reset_start(my_bool *ret, MYSQL_STMT *stmt)
int mysql_stmt_reset_cont(my_bool *ret, MYSQL_STMT *stmt, int ready_status)
int mysql_stmt_free_result_start(my_bool *ret, MYSQL_STMT *stmt)
int mysql_stmt_free_result_cont(my_bool *ret, MYSQL_STMT *stmt, int ready_status)
int mysql_stmt_send_long_data_start(my_bool *ret, MYSQL_STMT *stmt,
                                unsigned int param_number,
                                const char *data, unsigned long length)
int mysql_stmt_send_long_data_cont(my_bool *ret, MYSQL_STMT *stmt, int ready_status)
int mysql_commit_start(my_bool *ret, MYSQL *mysql)
int mysql_commit_cont(my_bool *ret, MYSQL *mysql, int ready_status)
int mysql_rollback_start(my_bool *ret, MYSQL *mysql)
int mysql_rollback_cont(my_bool *ret, MYSQL *mysql, int ready_status)
int mysql_autocommit_start(my_bool *ret, MYSQL *mysql, my_bool auto_mode)
int mysql_autocommit_cont(my_bool *ret, MYSQL *mysql, int ready_status)
int mysql_next_result_start(int *ret, MYSQL *mysql)
int mysql_next_result_cont(int *ret, MYSQL *mysql, int ready_status)
int mysql_stmt_next_result_start(int *ret, MYSQL_STMT *stmt)
int mysql_stmt_next_result_cont(int *ret, MYSQL_STMT *stmt, int ready_status)

Le funzioni non-bloccanti dell'API client

Le seguenti funzioni dell'API client non hanno mai bisogno di effettuare operazioni di I/O, pertanto non sono mai bloccanti. Di conseguenza possono essere utilizzate normalmente nei programmi che usano le operazioni non-bloccanti; non hanno bisogno di chiamare una speciale variante _start(). (Anche se tale variante esiste, restituisce sempre zero, perciò non vi è mai bisogno di chiamare _cont()).

  • mysql_num_rows()
  • mysql_num_fields()
  • mysql_eof()
  • mysql_fetch_field_direct()
  • mysql_fetch_fields()
  • mysql_row_tell()
  • mysql_field_tell()
  • mysql_field_count()
  • mysql_affected_rows()
  • mysql_insert_id()
  • mysql_errno()
  • mysql_error()
  • mysql_sqlstate()
  • mysql_warning_count()
  • mysql_info()
  • mysql_thread_id()
  • mysql_character_set_name()
  • mysql_init()
  • mysql_ssl_set()
  • mysql_get_ssl_cipher()
  • mysql_use_result()
  • mysql_get_character_set_info()
  • mysql_set_local_infile_handler()
  • mysql_set_local_infile_default()
  • mysql_get_server_info()
  • mysql_get_server_name()
  • mysql_get_client_info()
  • mysql_get_client_version()
  • mysql_get_host_info()
  • mysql_get_server_version()
  • mysql_get_proto_info()
  • mysql_options()
  • mysql_data_seek()
  • mysql_row_seek()
  • mysql_field_seek()
  • mysql_fetch_lengths()
  • mysql_fetch_field()
  • mysql_escape_string()
  • mysql_hex_string()
  • mysql_real_escape_string()
  • mysql_debug()
  • myodbc_remove_escape()
  • mysql_thread_safe()
  • mysql_embedded()
  • mariadb_connection()
  • mysql_stmt_init()
  • mysql_stmt_fetch_column()
  • mysql_stmt_param_count()
  • mysql_stmt_attr_set()
  • mysql_stmt_attr_get()
  • mysql_stmt_bind_param()
  • mysql_stmt_bind_result()
  • mysql_stmt_result_metadata()
  • mysql_stmt_param_metadata()
  • mysql_stmt_errno()
  • mysql_stmt_error()
  • mysql_stmt_sqlstate()
  • mysql_stmt_row_seek()
  • mysql_stmt_row_tell()
  • mysql_stmt_data_seek()
  • mysql_stmt_num_rows()
  • mysql_stmt_affected_rows()
  • mysql_stmt_insert_id()
  • mysql_stmt_field_count()
  • mysql_more_results()
  • mysql_get_socket()
  • mysql_get_timeout_value
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.