summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2005-09-28 11:34:53 +0200
committerunknown <msvensson@neptunus.(none)>2005-09-28 11:34:53 +0200
commit69bfcd9c400e0b00fe53aaee8da0b38b0bf5f9ad (patch)
tree5b0761b29daf8c864538d0fb55e20e9b54758e47 /sql
parent59041a2b356943bda95d38c10e9ba01f7b2c7a73 (diff)
parente4fe90bfa767366a4784adb4e7c65bca7c5c0537 (diff)
downloadmariadb-git-69bfcd9c400e0b00fe53aaee8da0b38b0bf5f9ad.tar.gz
Merge neptunus.(none):/home/msvensson/mysql/mysql-4.1
into neptunus.(none):/home/msvensson/mysql/mysql-5.0 client/mysql.cc: Auto merged client/mysqltest.c: Auto merged mysql-test/mysql-test-run.pl: Auto merged mysql-test/r/mysqltest.result: Auto merged mysql-test/t/mysqltest.test: Auto merged mysys/my_init.c: Auto merged sql/sql_update.cc: Auto merged Makefile.am: Manual merge mysql-test/r/cast.result: Manual merge mysql-test/t/cast.test: Manual merge ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp: Manual merge sql/ha_ndbcluster.cc: Manual merge sql/item.h: Manual merge sql/opt_sum.cc: Manual merge sql/sql_delete.cc: Manual merge sql/sql_lex.cc: Manual merge sql/sql_load.cc: Manual merge sql/sql_prepare.cc: Manual merge
Diffstat (limited to 'sql')
-rw-r--r--sql/item.h1
-rw-r--r--sql/opt_sum.cc10
-rw-r--r--sql/sql_delete.cc1
-rw-r--r--sql/sql_lex.cc1
-rw-r--r--sql/sql_load.cc2
-rw-r--r--sql/sql_update.cc1
6 files changed, 10 insertions, 6 deletions
diff --git a/sql/item.h b/sql/item.h
index 381ba98e193..10c1eec2db9 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -1502,6 +1502,7 @@ public:
my_decimal *val_decimal(my_decimal *);
int save_in_field(Field *field, bool no_conversions);
enum Item_result result_type () const { return STRING_RESULT; }
+ enum Item_result cast_to_int_type() const { return INT_RESULT; }
enum_field_types field_type() const { return MYSQL_TYPE_VARCHAR; }
// to prevent drop fixed flag (no need parent cleanup call)
void cleanup() {}
diff --git a/sql/opt_sum.cc b/sql/opt_sum.cc
index 2f54cce0275..37acce2934b 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).
@@ -250,7 +250,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
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 7e99a5c65ee..4001a51f459 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -313,6 +313,7 @@ bool mysql_prepare_delete(THD *thd, TABLE_LIST *table_list, Item **conds)
SELECT_LEX *select_lex= &thd->lex->select_lex;
DBUG_ENTER("mysql_prepare_delete");
+ thd->allow_sum_func= 0;
if (setup_tables(thd, &thd->lex->select_lex.context,
&thd->lex->select_lex.top_join_list,
table_list, conds, &select_lex->leaf_tables,
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 32178a0a07d..b7a2b6b0624 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -171,7 +171,6 @@ void lex_start(THD *thd, uchar *buf,uint length)
lex->sql_command= lex->orig_sql_command= SQLCOM_END;
lex->duplicates= DUP_ERROR;
lex->ignore= 0;
- thd->allow_sum_func= 0;
lex->sphead= NULL;
lex->spcont= NULL;
lex->proc_list.first= 0;
diff --git a/sql/sql_load.cc b/sql/sql_load.cc
index 30398375360..ff2be0ae6fb 100644
--- a/sql/sql_load.cc
+++ b/sql/sql_load.cc
@@ -564,6 +564,8 @@ read_fixed_length(THD *thd, COPY_INFO &info, TABLE_LIST *table_list,
{
uint length;
byte save_chr;
+ if (field == table->next_number_field)
+ table->auto_increment_field_not_null= TRUE;
if ((length=(uint) (read_info.row_end-pos)) >
field->field_length)
length=field->field_length;
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index efdf1291305..f85ef355752 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -571,6 +571,7 @@ bool mysql_prepare_update(THD *thd, TABLE_LIST *table_list,
bzero((char*) &tables,sizeof(tables)); // For ORDER BY
tables.table= table;
tables.alias= table_list->alias;
+ thd->allow_sum_func= 0;
if (setup_tables(thd, &select_lex->context, &select_lex->top_join_list,
table_list, conds, &select_lex->leaf_tables,