From cc6db6d8886d4897408b032e7d3a2e6836a2311a Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 1 Nov 2005 13:08:14 +0400 Subject: Fix for bug #14445 (analyse.test fails) mysql-test/r/analyse.result: test result fixed sql/sql_analyse.cc: missing sqrt(std_sqr) added --- sql/sql_analyse.cc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'sql/sql_analyse.cc') diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index 669f998cde5..fe77628497a 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -1036,13 +1036,19 @@ String *field_decimal::std(String *s, ha_rows rows) s->set((double) 0.0, 1,my_thd_charset); return s; } - my_decimal num, std_val, sum2, sum2d; + my_decimal num, tmp, sum2, sum2d; + double std_sqr; + int prec_increment= current_thd->variables.div_precincrement; + int2my_decimal(E_DEC_FATAL_ERROR, rows - nulls, FALSE, &num); my_decimal_mul(E_DEC_FATAL_ERROR, &sum2, sum+cur_sum, sum+cur_sum); - my_decimal_div(E_DEC_FATAL_ERROR, &std_val, &sum2, &num, 0); - my_decimal_sub(E_DEC_FATAL_ERROR, &sum2, sum_sqr+cur_sum, &std_val); - my_decimal_div(E_DEC_FATAL_ERROR, &std_val, &sum2, &num, 0); - my_decimal2string(E_DEC_FATAL_ERROR, &std_val, 0, 0, '0', s); + my_decimal_div(E_DEC_FATAL_ERROR, &tmp, &sum2, &num, prec_increment); + my_decimal_sub(E_DEC_FATAL_ERROR, &sum2, sum_sqr+cur_sum, &tmp); + my_decimal_div(E_DEC_FATAL_ERROR, &tmp, &sum2, &num, prec_increment); + my_decimal2double(E_DEC_FATAL_ERROR, &tmp, &std_sqr); + s->set(((double) std_sqr <= 0.0 ? 0.0 : sqrt(std_sqr)), + min(item->decimals + prec_increment, NOT_FIXED_DEC), my_thd_charset); + return s; } -- cgit v1.2.1 From f9dbcd558a52652692c4593c93656431e4cbf043 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 1 Nov 2005 16:14:26 +0400 Subject: Additional fix for bug #14445 (analyse.test fails) mysql-test/r/analyse.result: test result fixed mysql-test/t/disabled.def: user_var disabled sql/sql_analyse.cc: rounding added --- sql/sql_analyse.cc | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'sql/sql_analyse.cc') diff --git a/sql/sql_analyse.cc b/sql/sql_analyse.cc index fe77628497a..e1f4b8f6076 100644 --- a/sql/sql_analyse.cc +++ b/sql/sql_analyse.cc @@ -466,7 +466,9 @@ void field_real::add() void field_decimal::add() { + /*TODO - remove rounding stuff after decimal_div returns proper frac */ my_decimal dec_buf, *dec= item->val_decimal(&dec_buf); + my_decimal rounded; uint length; TREE_ELEMENT *element; @@ -476,6 +478,9 @@ void field_decimal::add() return; } + my_decimal_round(E_DEC_FATAL_ERROR, dec, item->decimals, FALSE,&rounded); + dec= &rounded; + length= my_decimal_string_length(dec); if (decimal_is_zero(dec)) @@ -1021,10 +1026,16 @@ String *field_decimal::avg(String *s, ha_rows rows) s->set((double) 0.0, 1,my_thd_charset); return s; } - my_decimal num, avg_val; + my_decimal num, avg_val, rounded_avg; + int prec_increment= current_thd->variables.div_precincrement; + int2my_decimal(E_DEC_FATAL_ERROR, rows - nulls, FALSE, &num); - my_decimal_div(E_DEC_FATAL_ERROR, &avg_val, sum+cur_sum, &num, 0); - my_decimal2string(E_DEC_FATAL_ERROR, &avg_val, 0, 0, '0', s); + my_decimal_div(E_DEC_FATAL_ERROR, &avg_val, sum+cur_sum, &num, prec_increment); + /* TODO remove this after decimal_div returns proper frac */ + my_decimal_round(E_DEC_FATAL_ERROR, &avg_val, + min(sum[cur_sum].frac + prec_increment, DECIMAL_MAX_SCALE), + FALSE,&rounded_avg); + my_decimal2string(E_DEC_FATAL_ERROR, &rounded_avg, 0, 0, '0', s); return s; } -- cgit v1.2.1