94
94
*****************************************************************************/
95
95
safe_read_error_hook_func safe_read_error_hook= NULL;
97
uint32_t cli_safe_read(DRIZZLE *drizzle)
97
uint32_t drizzleclient_cli_safe_read(DRIZZLE *drizzle)
99
99
NET *net= &drizzle->net;
110
110
drizzle_disconnect(drizzle);
111
111
drizzle_set_error(drizzle, net->last_errno == CR_NET_PACKET_TOO_LARGE ?
112
112
CR_NET_PACKET_TOO_LARGE : CR_SERVER_LOST,
113
sqlstate_get_unknown());
113
drizzleclient_sqlstate_get_unknown());
114
114
return (packet_error);
116
116
if (net->read_pos[0] == 255)
133
133
(unknown error sql state).
136
strcpy(net->sqlstate, sqlstate_get_unknown());
136
strcpy(net->sqlstate, drizzleclient_sqlstate_get_unknown());
139
139
strncpy(net->last_error,(char*) pos, min((uint32_t) len,
140
140
(uint32_t) sizeof(net->last_error)-1));
143
drizzle_set_error(drizzle, CR_UNKNOWN_ERROR, sqlstate_get_unknown());
143
drizzle_set_error(drizzle, CR_UNKNOWN_ERROR, drizzleclient_sqlstate_get_unknown());
145
145
Cover a protocol design error: error packet does not
146
146
contain the server status. Therefore, the client has no way
161
cli_advanced_command(DRIZZLE *drizzle, enum enum_server_command command,
161
drizzleclient_cli_advanced_command(DRIZZLE *drizzle, enum enum_server_command command,
162
162
const unsigned char *header, uint32_t header_length,
163
163
const unsigned char *arg, uint32_t arg_length, bool skip_check)
175
175
drizzle->server_status & SERVER_MORE_RESULTS_EXISTS)
177
177
drizzle_set_error(drizzle, CR_COMMANDS_OUT_OF_SYNC,
178
sqlstate_get_unknown());
178
drizzleclient_sqlstate_get_unknown());
182
net_clear_error(net);
182
drizzleclient_drizzleclient_net_clear_error(net);
184
184
drizzle->affected_rows= ~(uint64_t) 0;
187
187
the previous command was a shutdown command, we may have the
188
188
response for the COM_QUIT already in the communication buffer
190
net_clear(&drizzle->net, (command != COM_QUIT));
190
drizzleclient_net_clear(&drizzle->net, (command != COM_QUIT));
192
if (net_write_command(net,(unsigned char) command, header, header_length,
192
if (drizzleclient_net_write_command(net,(unsigned char) command, header, header_length,
193
193
arg, arg_length))
195
195
if (net->last_errno == CR_NET_PACKET_TOO_LARGE)
197
drizzle_set_error(drizzle, CR_NET_PACKET_TOO_LARGE, sqlstate_get_unknown());
197
drizzle_set_error(drizzle, CR_NET_PACKET_TOO_LARGE, drizzleclient_sqlstate_get_unknown());
200
200
drizzle_disconnect(drizzle);
201
201
if (drizzle_reconnect(drizzle) || stmt_skip)
203
if (net_write_command(net,(unsigned char) command, header, header_length,
203
if (drizzleclient_net_write_command(net,(unsigned char) command, header, header_length,
204
204
arg, arg_length))
206
drizzle_set_error(drizzle, CR_SERVER_GONE_ERROR, sqlstate_get_unknown());
206
drizzle_set_error(drizzle, CR_SERVER_GONE_ERROR, drizzleclient_sqlstate_get_unknown());
212
result= ((drizzle->packet_length=cli_safe_read(drizzle)) == packet_error ?
212
result= ((drizzle->packet_length=drizzleclient_cli_safe_read(drizzle)) == packet_error ?
218
void free_old_query(DRIZZLE *drizzle)
218
void drizzleclient_free_old_query(DRIZZLE *drizzle)
220
220
if (drizzle->fields)
274
274
/* Read all rows (fields or data) from server */
276
DRIZZLE_DATA *cli_read_rows(DRIZZLE *drizzle, DRIZZLE_FIELD *DRIZZLE_FIELDs, uint32_t fields)
276
DRIZZLE_DATA *drizzleclient_cli_read_rows(DRIZZLE *drizzle, DRIZZLE_FIELD *DRIZZLE_FIELDs, uint32_t fields)
279
279
uint32_t pkt_len;
284
284
DRIZZLE_ROWS **prev_ptr,*cur;
285
285
NET *net = &drizzle->net;
287
if ((pkt_len= cli_safe_read(drizzle)) == packet_error)
287
if ((pkt_len= drizzleclient_cli_safe_read(drizzle)) == packet_error)
289
289
if (!(result=(DRIZZLE_DATA*) malloc(sizeof(DRIZZLE_DATA))))
291
291
drizzle_set_error(drizzle, CR_OUT_OF_MEMORY,
292
sqlstate_get_unknown());
292
drizzleclient_sqlstate_get_unknown());
295
295
memset(result, 0, sizeof(DRIZZLE_DATA));
301
301
The last EOF packet is either a 254 (0xFE) character followed by 1-7 status bytes.
303
303
This doesn't conflict with normal usage of 254 which stands for a
304
string where the length of the string is 8 bytes. (see net_field_length())
304
string where the length of the string is 8 bytes. (see drizzleclient_net_field_length())
307
307
while (*(cp=net->read_pos) != DRIZZLE_PROTOCOL_NO_MORE_DATA || pkt_len >= 8)
310
310
if (!(cur= (DRIZZLE_ROWS*) malloc(sizeof(DRIZZLE_ROWS))) ||
311
311
!(cur->data= ((DRIZZLE_ROW) malloc((fields+1)*sizeof(char *)+pkt_len))))
314
drizzle_set_error(drizzle, CR_OUT_OF_MEMORY, sqlstate_get_unknown());
313
drizzleclient_free_rows(result);
314
drizzle_set_error(drizzle, CR_OUT_OF_MEMORY, drizzleclient_sqlstate_get_unknown());
329
329
cur->data[field] = to;
330
330
if (len > (uint32_t) (end_to - to))
332
drizzleclient_free_rows(result);
333
333
drizzle_set_error(drizzle, CR_MALFORMED_PACKET,
334
sqlstate_get_unknown());
334
drizzleclient_sqlstate_get_unknown());
337
337
memcpy(to, cp, len);
375
375
unsigned char *pos, *prev_pos, *end_pos;
376
376
NET *net= &drizzle->net;
378
if ((pkt_len=cli_safe_read(drizzle)) == packet_error)
378
if ((pkt_len=drizzleclient_cli_safe_read(drizzle)) == packet_error)
380
380
if (pkt_len <= 8 && net->read_pos[0] == DRIZZLE_PROTOCOL_NO_MORE_DATA)
401
401
if (len > (uint32_t) (end_pos - pos))
403
403
drizzle_set_error(drizzle, CR_UNKNOWN_ERROR,
404
sqlstate_get_unknown());
404
drizzleclient_sqlstate_get_unknown());
407
407
row[field] = (char*) pos;
435
435
drizzle_set_error(drizzle,
436
436
res->unbuffered_fetch_cancelled ?
437
437
CR_FETCH_CANCELED : CR_COMMANDS_OUT_OF_SYNC,
438
sqlstate_get_unknown());
438
drizzleclient_sqlstate_get_unknown());
440
440
else if (!(read_one_row(drizzle, res->field_count, res->row, res->lengths)))