Data sent with STMT_SEND_LONG_DATA was lost #1283

Values were incorrectly set to NULL
pull/1287/head
René Cannaò 8 years ago
parent 2ed7808dc3
commit 6302628772

@ -114,6 +114,7 @@ typedef struct _stmt_long_data_t {
uint16_t param_id;
void *data;
unsigned long size;
my_bool is_null;
} stmt_long_data_t;
@ -125,7 +126,7 @@ class StmtLongDataHandler {
~StmtLongDataHandler();
unsigned int reset(uint32_t _stmt_id);
bool add(uint32_t _stmt_id, uint16_t _param_id, void *_data, unsigned long _size);
void *get(uint32_t _stmt_id, uint16_t _param_id, unsigned long **_size);
void *get(uint32_t _stmt_id, uint16_t _param_id, unsigned long **_size, my_bool **_is_null);
};
// server side, metadata related to STMT_EXECUTE are stored in MYSQL_STMT itself

@ -93,6 +93,7 @@ bool StmtLongDataHandler::add(uint32_t _stmt_id, uint16_t _param_id,
sld->param_id = _param_id;
sld->size = _size;
sld->data = malloc(_size);
sld->is_null = 0; // because the client is sending data, the field cannot be NULL
memcpy(sld->data, _data, _size);
long_datas->add(sld);
return false; // a new entry was created
@ -117,7 +118,7 @@ unsigned int StmtLongDataHandler::reset(uint32_t _stmt_id) {
}
void *StmtLongDataHandler::get(uint32_t _stmt_id, uint16_t _param_id,
unsigned long **_size) {
unsigned long **_size, my_bool **_is_null) {
stmt_long_data_t *sld = NULL;
unsigned int i;
for (i = 0; i < long_datas->len; i++) {
@ -125,6 +126,7 @@ void *StmtLongDataHandler::get(uint32_t _stmt_id, uint16_t _param_id,
if (sld->stmt_id == _stmt_id && sld->param_id == _param_id) {
// we found it!
*_size = &sld->size;
*_is_null = &sld->is_null;
return sld->data;
}
}

@ -2318,10 +2318,12 @@ __get_pkts_from_client:
for (uint16_t ii=0; ii<stmt_meta->num_params; ii++) {
void *_data=NULL;
unsigned long *_l=0;
_data=SLDH->get(stmt_global_id,ii,&_l);
my_bool * _is_null;
_data=SLDH->get(stmt_global_id,ii,&_l, &_is_null);
if (_data) { // data was sent via STMT_SEND_LONG_DATA
stmt_meta->binds[ii].length=_l;
stmt_meta->binds[ii].buffer=_data;
stmt_meta->binds[ii].is_null = _is_null;
}
}
if (stmt_meta_found==false) {

Loading…
Cancel
Save