From 7cd78a8eeb9b26c34f23edd11d235b54ea9ef702 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Mon, 2 Dec 2019 19:37:19 +0100 Subject: [PATCH] Bugs fixed --- udfs/value.cc | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/udfs/value.cc b/udfs/value.cc index 0ffc048..a9da76c 100644 --- a/udfs/value.cc +++ b/udfs/value.cc @@ -2,7 +2,7 @@ // Value handling functions #define INT(ptr) (*((long long *) ptr)) -#define DOUBLE(ptr) (*((double *) ptr)) +#define REAL(ptr) (*((double *) ptr)) #define min(a,b) (a < b ? a : b) typedef union { @@ -27,7 +27,10 @@ void value_init(Value * value) { } void value_free_val(Value *value) { - if (value->free) free(value->val.s); + if (value->free) { + free(value->val.s); + value->free = 0; + } } void value_set_null(Value *value) { @@ -37,7 +40,6 @@ void value_set_null(Value *value) { void value_set(Value * value, UDF_ARGS *args, int arg_index, int copy) { char * arg = args->args[arg_index]; - value->free = 0; if (arg != NULL) { value->is_null = 0; @@ -48,12 +50,12 @@ void value_set(Value * value, UDF_ARGS *args, int arg_index, int copy) { value->val.i = INT(arg); break; case REAL_RESULT: - value->val.d = DOUBLE(arg); + value->val.d = REAL(arg); break; default: - value->free = copy; value->len = args->lengths[arg_index]; if (copy) { + value->free = 1; value->val.s = (char *) malloc(value->len); memcpy(value->val.s, arg, value->len); } else @@ -64,6 +66,7 @@ void value_set(Value * value, UDF_ARGS *args, int arg_index, int copy) { } void value_from_arg(Value * value, UDF_ARGS *args, int arg_index) { + value->free = 0; value_set(value, args, arg_index, 0); }