void test_value_single_decimal(const char *num) { char *end= (((char*)num) + strlen(num)); char buff[80]; int rc= FALSE; int length= 80; uint ids[1]= {1}; DYNAMIC_COLUMN_VALUE val, res; DYNAMIC_COLUMN str; /* init values */ mariadb_dyncol_prepare_decimal(&val); // special procedure for decimal!!! if (string2decimal(num, &val.x.decimal.value, &end) != E_DEC_OK) goto err; mariadb_dyncol_value_init(&res); /* create column */ if (mariadb_dyncol_create_many_num(&str, 1, ids, &val, 1)) goto err; dynstr_append(&str, "\1"); str.length--; //check for overflow /* read column */ if (mariadb_dyncol_get_num(&str, 1, &res)) goto err; rc= ((res.type == DYN_COL_DECIMAL) && (decimal_cmp(&res.x.decimal.value, &val.x.decimal.value) == 0)); decimal2string(&res.x.decimal.value, buff, &length, 0, 0, ' '); err: ok(rc, "%s - %s", num, buff); /* cleanup */ mariadb_dyncol_free(&str); }
inline void print_decimal(byte *value, field_def_t *field) { char string_buf[256]; decimal_digit_t dec_buf[256]; int len = 255; decimal_t dec; dec.buf = dec_buf; dec.len = 256; bin2decimal((char*)value, &dec, field->decimal_precision, field->decimal_digits); decimal2string(&dec, string_buf, &len, field->decimal_precision, field->decimal_digits, ' '); print_string(string_buf, len, field); }