summaryrefslogtreecommitdiff
path: root/sql/opt_sum.cc
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2005-09-25 21:22:23 +0300
committerunknown <monty@mysql.com>2005-09-25 21:22:23 +0300
commit466b46a66af37310b7d050448ab08913cb09671e (patch)
tree8f55cf36de04a78555166306a41f58ce8628a240 /sql/opt_sum.cc
parentb337566babce87b4a5854f18586206525a4ba1b7 (diff)
downloadmariadb-git-466b46a66af37310b7d050448ab08913cb09671e.tar.gz
Fixed error found during review of new pushed code
client/mysql.cc: Don't use c_ptr() for cgets() and ensure buffer is not overwritten mysql-test/r/cast.result: More test for CAST(0x.... as signed) sql/opt_sum.cc: Fix bugs found during review - Changed code to be able to remove one if - Ensure that count == 0 only if is_exact_count == TRUE sql/sql_delete.cc: Ensure 'allow_sum_func' is reset before call to setup_conds sql/sql_lex.cc: allow_sum_func doesn't have to be reset for each query (It's to be reset in setup_fields() or before call to setup_conds() sql/sql_load.cc: Move set of auto_increment_field_not_null so that it's not set if field value is NULL sql/sql_prepare.cc: allow_sum_func doesn't have to be reset for each query (It's to be reset in setup_fields() or before call to setup_conds() sql/sql_update.cc: Ensure 'allow_sum_func' is reset before call to setup_conds
Diffstat (limited to 'sql/opt_sum.cc')
-rw-r--r--sql/opt_sum.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc
index 3ac72e5a6f9..cfb5b3695a3 100644
--- a/sql/opt_sum.cc
+++ b/sql/opt_sum.cc
@@ -108,7 +108,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
WHERE t2.field IS NULL;
*/
if (tl->table->map & where_tables)
- const_result= 0;
+ return 0;
}
else
used_tables|= tl->table->map;
@@ -119,7 +119,10 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
may be used as the real count.
*/
if (tl->table->file->table_flags() & HA_NOT_EXACT_COUNT)
+ {
is_exact_count= FALSE;
+ count= 1; // ensure count != 0
+ }
else
{
tl->table->file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK);
@@ -127,9 +130,6 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
}
}
- if (!const_result)
- return 0;
-
/*
Iterate through all items in the SELECT clause and replace
COUNT(), MIN() and MAX() with constants (if possible).
@@ -150,8 +150,8 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
if (!conds && !((Item_sum_count*) item)->args[0]->maybe_null &&
!outer_tables && is_exact_count)
{
- ((Item_sum_count*) item)->make_const(count);
- recalc_const_item= 1;
+ ((Item_sum_count*) item)->make_const(count);
+ recalc_const_item= 1;
}
else
const_result= 0;
@@ -234,7 +234,7 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
}
if (!count)
{
- /* If count != 1, then we know that is_exact_count == TRUE. */
+ /* If count == 0, then we know that is_exact_count == TRUE. */
((Item_sum_min*) item_sum)->clear(); /* Set to NULL. */
}
else