Better blob handling (also better debug viewing)
This commit is contained in:
@@ -240,8 +240,13 @@ void freeColumn(struct column_data_t *col)
|
|||||||
if (col->hasPointers) {
|
if (col->hasPointers) {
|
||||||
for (unsigned int r = 0; r < col->n_values; r++) {
|
for (unsigned int r = 0; r < col->n_values; r++) {
|
||||||
if (!columnRowIsNull(col, r)) {
|
if (!columnRowIsNull(col, r)) {
|
||||||
free(*(col->data.ptr_str + r));
|
if (col->type == TYPE_STRING) {
|
||||||
*(col->data.ptr_str + r) = 0;
|
free(*(col->data.ptr_str + r));
|
||||||
|
*(col->data.ptr_str + r) = 0;
|
||||||
|
} else {
|
||||||
|
free(*(col->data.ptr_blob + r));
|
||||||
|
*(col->data.ptr_blob + r) = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,12 +383,13 @@ int setColumnValue(struct column_data_t *col, uint64_t row, const char *value, s
|
|||||||
case TYPE_BLOB:
|
case TYPE_BLOB:
|
||||||
case TYPE_RAW:
|
case TYPE_RAW:
|
||||||
{
|
{
|
||||||
*(col->data.ptr_str + row) = (char *)malloc(value_size);
|
*(col->data.ptr_blob + row) = (char *)malloc(value_size);
|
||||||
if (*(col->data.ptr_str + row) == 0) {
|
if (*(col->data.ptr_blob + row) == 0) {
|
||||||
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||||
return -errno;
|
return -errno;
|
||||||
}
|
}
|
||||||
memcpy(*(col->data.ptr_str + row), value, value_size);
|
memcpy(*(col->data.ptr_blob + row), value, value_size);
|
||||||
|
*(col->data_lens + row) = value_size;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ struct column_data_t {
|
|||||||
double *ptr_double;
|
double *ptr_double;
|
||||||
|
|
||||||
char **ptr_str;
|
char **ptr_str;
|
||||||
|
|
||||||
|
char **ptr_blob;
|
||||||
} data;
|
} data;
|
||||||
size_t *data_lens;
|
size_t *data_lens;
|
||||||
|
|
||||||
|
|||||||
@@ -116,13 +116,15 @@ void db_value_sbva(str_builder *sb, e_column_type type, uint32_t n_args, va_list
|
|||||||
|
|
||||||
tmp_len = va_arg(args, size_t);
|
tmp_len = va_arg(args, size_t);
|
||||||
|
|
||||||
esc_str = (char *)malloc(tmp_len * 2 + 1);
|
esc_str = (char *)malloc(tmp_len * 2 + 1 + 2);
|
||||||
if (esc_str == 0) {
|
if (esc_str == 0) {
|
||||||
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
fprintf(stderr, "[%d]malloc: (%d) %s\n", __LINE__, errno, strerror(errno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
esc_len = mysql_hex_string(esc_str, tmp_str, tmp_len);
|
esc_str[0] = '0';
|
||||||
|
esc_str[1] = 'x';
|
||||||
|
esc_len = mysql_hex_string(esc_str + 2, tmp_str, tmp_len);
|
||||||
strbld_str(sb, esc_str, esc_len);
|
strbld_str(sb, esc_str, esc_len);
|
||||||
free(esc_str);
|
free(esc_str);
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user