summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2015-03-07 19:30:19 +0300
committerSergei Petrunia <psergey@askmonty.org>2015-03-07 19:30:19 +0300
commit66ad265f3b58121d5a48c492dff79f48863df7c0 (patch)
tree4f4406098bb04379f57bcb94bc9684a4daf40144 /sql
parent143f5d9172647a43cdcf5c27b8a78f32c9f639c0 (diff)
downloadmariadb-git-66ad265f3b58121d5a48c492dff79f48863df7c0.tar.gz
MDEV-7674: ANALYZE shows r_rows=0
Change r_rows to be double
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_class.cc3
-rw-r--r--sql/sql_explain.cc27
-rw-r--r--sql/sql_explain.h4
3 files changed, 14 insertions, 20 deletions
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index 37060a6e133..5b0d04dc4a9 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -2454,8 +2454,7 @@ void THD::make_explain_field_list(List<Item> &field_list, uint8 explain_flags,
MYSQL_TYPE_LONGLONG));
if (is_analyze)
{
- field_list.push_back(item= new Item_return_int("r_rows", 10,
- MYSQL_TYPE_LONGLONG));
+ field_list.push_back(item= new Item_float("r_rows", 0.1234, 10, 4));
item->maybe_null=1;
}
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc
index c68f86ce72c..aa16a744e83 100644
--- a/sql/sql_explain.cc
+++ b/sql/sql_explain.cc
@@ -298,7 +298,7 @@ int print_explain_row(select_result_sink *result,
const char *key_len,
const char *ref,
ha_rows *rows,
- ha_rows *r_rows,
+ double *r_rows,
double r_filtered,
const char *extra)
{
@@ -356,10 +356,7 @@ int print_explain_row(select_result_sink *result,
if (is_analyze)
{
if (r_rows)
- {
- item_list.push_back(new Item_int(*r_rows,
- MY_INT64_NUM_DECIMAL_DIGITS));
- }
+ item_list.push_back(new Item_float(*r_rows, 2));
else
item_list.push_back(item_null);
}
@@ -472,9 +469,8 @@ int Explain_union::print_explain(Explain_query *query,
/* `r_rows` */
if (is_analyze)
{
- ha_rows avg_rows= fake_select_lex_tracker.get_avg_rows();
- item_list.push_back(new Item_int((longlong) (ulonglong) avg_rows,
- MY_INT64_NUM_DECIMAL_DIGITS));
+ double avg_rows= fake_select_lex_tracker.get_avg_rows();
+ item_list.push_back(new Item_float(avg_rows, 2));
}
/* `filtered` */
@@ -1004,9 +1000,8 @@ int Explain_table_access::print_explain(select_result_sink *output, uint8 explai
}
else
{
- ha_rows avg_rows= tracker.get_avg_rows();
- item_list.push_back(new Item_int((longlong) (ulonglong) avg_rows,
- MY_INT64_NUM_DECIMAL_DIGITS));
+ double avg_rows= tracker.get_avg_rows();
+ item_list.push_back(new Item_float(avg_rows, 2));
}
}
@@ -1289,8 +1284,8 @@ void Explain_table_access::print_explain_json(Explain_query *query,
writer->add_member("r_rows");
if (tracker.has_scans())
{
- ha_rows avg_rows= tracker.get_avg_rows();
- writer->add_ll(avg_rows);
+ double avg_rows= tracker.get_avg_rows();
+ writer->add_double(avg_rows);
}
else
writer->add_null();
@@ -1756,7 +1751,7 @@ int Explain_update::print_explain(Explain_query *query,
"Using index condition" is also not possible (which is an unjustified limitation)
*/
double r_filtered= 100 * tracker.get_filtered_after_where();
- ha_rows r_rows= tracker.get_avg_rows();
+ double r_rows= tracker.get_avg_rows();
print_explain_row(output, explain_flags, is_analyze,
1, /* id */
@@ -1877,8 +1872,8 @@ void Explain_update::print_explain_json(Explain_query *query,
/* `r_rows` */
if (is_analyze && tracker.has_scans())
{
- ha_rows avg_rows= tracker.get_avg_rows();
- writer->add_member("r_rows").add_ll(avg_rows);
+ double avg_rows= tracker.get_avg_rows();
+ writer->add_member("r_rows").add_double(avg_rows);
}
/* UPDATE/DELETE do not produce `filtered` estimate */
diff --git a/sql/sql_explain.h b/sql/sql_explain.h
index c4bfa4d09bf..970edf7800d 100644
--- a/sql/sql_explain.h
+++ b/sql/sql_explain.h
@@ -44,9 +44,9 @@ public:
bool has_scans() { return (r_scans != 0); }
ha_rows get_loops() { return r_scans; }
- ha_rows get_avg_rows()
+ double get_avg_rows()
{
- return r_scans ? (ha_rows)rint((double) r_rows / r_scans): 0;
+ return r_scans ? ((double)r_rows / r_scans): 0;
}
double get_filtered_after_where()