62
62
static DRIZZLE_METHODS client_methods=
64
cli_read_query_result, /* read_query_result */
65
cli_advanced_command, /* advanced_command */
66
cli_read_rows, /* read_rows */
67
cli_use_result, /* use_result */
68
cli_fetch_lengths, /* fetch_lengths */
69
cli_flush_use_result, /* flush_use_result */
70
cli_list_fields, /* list_fields */
71
cli_unbuffered_fetch, /* unbuffered_fetch */
72
cli_read_statistics, /* read_statistics */
73
cli_read_query_result, /* next_result */
74
cli_read_change_user_result, /* read_change_user_result */
64
drizzleclient_cli_read_query_result, /* read_query_result */
65
drizzleclient_cli_advanced_command, /* advanced_command */
66
drizzleclient_cli_read_rows, /* read_rows */
67
drizzleclient_cli_use_result, /* use_result */
68
drizzleclient_cli_fetch_lengths, /* fetch_lengths */
69
drizzleclient_cli_flush_use_result, /* flush_use_result */
70
drizzleclient_cli_list_fields, /* list_fields */
71
drizzleclient_cli_unbuffered_fetch, /* unbuffered_fetch */
72
drizzleclient_cli_read_statistics, /* read_statistics */
73
drizzleclient_cli_read_query_result, /* next_result */
74
drizzleclient_cli_read_change_user_result, /* read_change_user_result */
127
drizzle_set_error(NULL, CR_OUT_OF_MEMORY, sqlstate_get_unknown());
127
drizzle_set_error(NULL, CR_OUT_OF_MEMORY, drizzleclient_sqlstate_get_unknown());
130
130
memset(ptr, 0, sizeof(DRIZZLE));
138
138
ptr->options.connect_timeout= CONNECT_TIMEOUT;
139
strcpy(ptr->net.sqlstate, sqlstate_get_not_error());
139
strcpy(ptr->net.sqlstate, drizzleclient_sqlstate_get_not_error());
142
142
Only enable LOAD DATA INFILE by default if configured with
263
263
if (gai_errno != 0)
265
drizzle_set_extended_error(drizzle, CR_UNKNOWN_HOST, sqlstate_get_unknown(),
265
drizzle_set_extended_error(drizzle, CR_UNKNOWN_HOST, drizzleclient_sqlstate_get_unknown(),
266
266
ER(CR_UNKNOWN_HOST), host, errno);
285
if (connect_with_timeout(sock, t_res->ai_addr, t_res->ai_addrlen, drizzle->options.connect_timeout))
285
if (drizzleclient_connect_with_timeout(sock, t_res->ai_addr, t_res->ai_addrlen, drizzle->options.connect_timeout))
287
287
drizzleclient_vio_delete(net->vio);
299
drizzle_set_extended_error(drizzle, CR_CONN_HOST_ERROR, sqlstate_get_unknown(),
299
drizzle_set_extended_error(drizzle, CR_CONN_HOST_ERROR, drizzleclient_sqlstate_get_unknown(),
300
300
ER(CR_CONN_HOST_ERROR), host, errno);
306
306
drizzleclient_vio_delete(net->vio);
308
drizzle_set_error(drizzle, CR_OUT_OF_MEMORY, sqlstate_get_unknown());
308
drizzle_set_error(drizzle, CR_OUT_OF_MEMORY, drizzleclient_sqlstate_get_unknown());
311
311
drizzleclient_vio_keepalive(net->vio,true);
326
326
if (drizzle->options.connect_timeout &&
327
327
drizzleclient_vio_poll_read(net->vio, drizzle->options.connect_timeout))
329
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, sqlstate_get_unknown(),
329
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, drizzleclient_sqlstate_get_unknown(),
330
330
ER(CR_SERVER_LOST_INITIAL_COMM_WAIT),
336
336
Part 1: Connection established, read and parse first packet
339
if ((pkt_length=cli_safe_read(drizzle)) == packet_error)
339
if ((pkt_length=drizzleclient_cli_safe_read(drizzle)) == packet_error)
341
341
if (drizzle->net.last_errno == CR_SERVER_LOST)
342
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, sqlstate_get_unknown(),
342
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, drizzleclient_sqlstate_get_unknown(),
343
343
ER(CR_SERVER_LOST_INITIAL_COMM_READ),
349
349
drizzle->protocol_version= net->read_pos[0];
350
350
if (drizzle->protocol_version != PROTOCOL_VERSION)
352
drizzle_set_extended_error(drizzle, CR_VERSION_ERROR, sqlstate_get_unknown(),
352
drizzle_set_extended_error(drizzle, CR_VERSION_ERROR, drizzleclient_sqlstate_get_unknown(),
353
353
ER(CR_VERSION_ERROR), drizzle->protocol_version,
354
354
PROTOCOL_VERSION);
383
383
if (drizzle->options.secure_auth && passwd[0] &&
384
384
!(drizzle->server_capabilities & CLIENT_SECURE_CONNECTION))
386
drizzle_set_error(drizzle, CR_SECURE_AUTH, sqlstate_get_unknown());
386
drizzle_set_error(drizzle, CR_SECURE_AUTH, drizzleclient_sqlstate_get_unknown());
393
393
!(drizzle->user=strdup(user)) ||
394
394
!(drizzle->passwd=strdup(passwd)))
396
drizzle_set_error(drizzle, CR_OUT_OF_MEMORY, sqlstate_get_unknown());
396
drizzle_set_error(drizzle, CR_OUT_OF_MEMORY, drizzleclient_sqlstate_get_unknown());
399
399
drizzle->host= drizzle->host_info+strlen(host_info)+1;
466
466
/* Write authentication package */
467
if (drizzleclient_net_write(net, (unsigned char*) buff, (size_t) (end-buff)) || net_flush(net))
467
if (drizzleclient_net_write(net, (unsigned char*) buff, (size_t) (end-buff)) || drizzleclient_net_flush(net))
469
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, sqlstate_get_unknown(),
469
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, drizzleclient_sqlstate_get_unknown(),
470
470
ER(CR_SERVER_LOST_SEND_AUTH),
477
477
OK-packet, or re-request scrambled password.
480
if ((pkt_length=cli_safe_read(drizzle)) == packet_error)
480
if ((pkt_length=drizzleclient_cli_safe_read(drizzle)) == packet_error)
482
482
if (drizzle->net.last_errno == CR_SERVER_LOST)
483
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, sqlstate_get_unknown(),
483
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, drizzleclient_sqlstate_get_unknown(),
484
484
ER(CR_SERVER_LOST_READ_AUTH),
493
493
if (db && drizzle_select_db(drizzle, db))
495
495
if (drizzle->net.last_errno == CR_SERVER_LOST)
496
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, sqlstate_get_unknown(),
496
drizzle_set_extended_error(drizzle, CR_SERVER_LOST, drizzleclient_sqlstate_get_unknown(),
497
497
ER(CR_SERVER_LOST_SETTING_DB),
545
545
/* Allow reconnect next time */
546
546
drizzle->server_status&= ~SERVER_STATUS_IN_TRANS;
547
drizzle_set_error(drizzle, CR_SERVER_GONE_ERROR, sqlstate_get_unknown());
547
drizzle_set_error(drizzle, CR_SERVER_GONE_ERROR, drizzleclient_sqlstate_get_unknown());
550
550
drizzle_create(&tmp_drizzle);
644
644
/* If connection is still up, send a QUIT message */
645
645
if (drizzle->net.vio != 0)
647
free_old_query(drizzle);
647
drizzleclient_free_old_query(drizzle);
648
648
drizzle->status=DRIZZLE_STATUS_READY; /* Force command */
649
649
drizzle->reconnect=0;
650
650
simple_command(drizzle,COM_QUIT,(unsigned char*) 0,0,1);
662
bool cli_read_query_result(DRIZZLE *drizzle)
662
bool drizzleclient_cli_read_query_result(DRIZZLE *drizzle)
664
664
unsigned char *pos;
665
665
uint32_t field_count;
666
666
DRIZZLE_DATA *fields;
669
if ((length = cli_safe_read(drizzle)) == packet_error)
669
if ((length = drizzleclient_cli_safe_read(drizzle)) == packet_error)
671
free_old_query(drizzle); /* Free old result */
671
drizzleclient_free_old_query(drizzle); /* Free old result */
673
673
pos=(unsigned char*) drizzle->net.read_pos;
674
if ((field_count= net_field_length(&pos)) == 0)
674
if ((field_count= drizzleclient_net_field_length(&pos)) == 0)
676
drizzle->affected_rows= net_field_length_ll(&pos);
677
drizzle->insert_id= net_field_length_ll(&pos);
676
drizzle->affected_rows= drizzleclient_drizzleclient_net_field_length_ll(&pos);
677
drizzle->insert_id= drizzleclient_drizzleclient_net_field_length_ll(&pos);
679
679
drizzle->server_status= uint2korr(pos); pos+=2;
680
680
drizzle->warning_count= uint2korr(pos); pos+=2;
682
if (pos < drizzle->net.read_pos+length && net_field_length(&pos))
682
if (pos < drizzle->net.read_pos+length && drizzleclient_net_field_length(&pos))
683
683
drizzle->info=(char*) pos;
690
690
if (!(drizzle->options.client_flag & CLIENT_LOCAL_FILES))
692
drizzle_set_error(drizzle, CR_MALFORMED_PACKET, sqlstate_get_unknown());
692
drizzle_set_error(drizzle, CR_MALFORMED_PACKET, drizzleclient_sqlstate_get_unknown());
696
error= handle_local_infile(drizzle,(char*) pos);
697
if ((length= cli_safe_read(drizzle)) == packet_error || error)
696
error= drizzleclient_handle_local_infile(drizzle,(char*) pos);
697
if ((length= drizzleclient_cli_safe_read(drizzle)) == packet_error || error)
699
699
goto get_info; /* Get info packet */
701
701
if (!(drizzle->server_status & SERVER_STATUS_AUTOCOMMIT))
702
702
drizzle->server_status|= SERVER_STATUS_IN_TRANS;
704
if (!(fields=cli_read_rows(drizzle,(DRIZZLE_FIELD*)0, 7)))
704
if (!(fields=drizzleclient_cli_read_rows(drizzle,(DRIZZLE_FIELD*)0, 7)))
706
706
if (!(drizzle->fields= drizzleclient_unpack_fields(fields, (uint32_t) field_count, 0)))
747
747
if (drizzle->status != DRIZZLE_STATUS_GET_RESULT)
749
drizzle_set_error(drizzle, CR_COMMANDS_OUT_OF_SYNC, sqlstate_get_unknown());
749
drizzle_set_error(drizzle, CR_COMMANDS_OUT_OF_SYNC, drizzleclient_sqlstate_get_unknown());
752
752
drizzle->status=DRIZZLE_STATUS_READY; /* server is ready */
754
754
sizeof(uint32_t) *
755
755
drizzle->field_count))))
757
drizzle_set_error(drizzle, CR_OUT_OF_MEMORY, sqlstate_get_unknown());
757
drizzle_set_error(drizzle, CR_OUT_OF_MEMORY, drizzleclient_sqlstate_get_unknown());
760
760
memset(result, 0,(sizeof(DRIZZLE_RES)+ sizeof(uint32_t) *
790
790
have to wait for the client (and will not wait more than 30 sec/packet).
791
791
**************************************************************************/
793
DRIZZLE_RES * cli_use_result(DRIZZLE *drizzle)
793
DRIZZLE_RES * drizzleclient_cli_use_result(DRIZZLE *drizzle)
795
795
DRIZZLE_RES *result;
799
799
if (drizzle->status != DRIZZLE_STATUS_GET_RESULT)
801
drizzle_set_error(drizzle, CR_COMMANDS_OUT_OF_SYNC, sqlstate_get_unknown());
801
drizzle_set_error(drizzle, CR_COMMANDS_OUT_OF_SYNC, drizzleclient_sqlstate_get_unknown());
804
804
if (!(result=(DRIZZLE_RES*) malloc(sizeof(*result)+
873
873
@param drizzle connection handle
874
874
@param errcode CR_* errcode, for client errors
875
@param sqlstate SQL standard sql state, sqlstate_get_unknown() for the
875
@param sqlstate SQL standard sql state, drizzleclient_sqlstate_get_unknown() for the
876
876
majority of client errors.
877
877
@param format error message template, in sprintf format
878
878
@param ... variable number of arguments
903
903
Flush result set sent from server
906
void cli_flush_use_result(DRIZZLE *drizzle)
906
void drizzleclient_cli_flush_use_result(DRIZZLE *drizzle)
908
908
/* Clear the current execution status */
911
911
uint32_t pkt_len;
912
if ((pkt_len=cli_safe_read(drizzle)) == packet_error)
912
if ((pkt_len=drizzleclient_cli_safe_read(drizzle)) == packet_error)
914
914
if (pkt_len <= 8 && drizzle->net.read_pos[0] == DRIZZLE_PROTOCOL_NO_MORE_DATA)
929
929
else the lengths are calculated from the offset between pointers.
930
930
**************************************************************************/
932
void cli_fetch_lengths(uint32_t *to, DRIZZLE_ROW column, uint32_t field_count)
932
void drizzleclient_cli_fetch_lengths(uint32_t *to, DRIZZLE_ROW column, uint32_t field_count)
934
934
uint32_t *prev_length;