Commit c172fe2c authored by unknown's avatar unknown
Browse files

Merge ssmith@bk-internal.mysql.com:/home/bk/mysql-5.0-jonas

into  mysql.com:/home/stewart/Documents/MySQL/5.0/jonas

parents cfee84be cc12c914
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -4811,6 +4811,17 @@ begin
declare x int;
select id from t1 order by x;
end|
drop procedure if exists bug14945|
create table t3 (id int not null auto_increment primary key)|
create procedure bug14945() deterministic truncate t3|
insert into t3 values (null)|
call bug14945()|
insert into t3 values (null)|
select * from t3|
id
1
drop table t3|
drop procedure bug14945|
create procedure bug16474_2(x int)
select id from t1 order by x|
call bug16474_1()|
+15 −0
Original line number Diff line number Diff line
@@ -5666,6 +5666,21 @@ begin
  select id from t1 order by x;
end|

# 
# BUG#14945: Truncate table doesn't reset the auto_increment counter
#
--disable_warnings
drop procedure if exists bug14945|
--enable_warnings
create table t3 (id int not null auto_increment primary key)|
create procedure bug14945() deterministic truncate t3|
insert into t3 values (null)|
call bug14945()|
insert into t3 values (null)|
select * from t3|
drop table t3|
drop procedure bug14945|

# This does NOT order by column index; variable is an expression.
create procedure bug16474_2(x int)
  select id from t1 order by x|
+7 −20
Original line number Diff line number Diff line
@@ -123,8 +123,11 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
      If the storage manager of 'tl' gives exact row count, compute the total
      number of rows. If there are no outer table dependencies, this count
      may be used as the real count.
      Schema tables are filled after this function is invoked, so we can't
      get row count 
    */
    if (tl->table->file->table_flags() & HA_NOT_EXACT_COUNT)
    if ((tl->table->file->table_flags() & HA_NOT_EXACT_COUNT) ||
        tl->schema_table)
    {
      is_exact_count= FALSE;
      count= 1;                                 // ensure count != 0
@@ -149,32 +152,16 @@ int opt_sum_query(TABLE_LIST *tables, List<Item> &all_fields,COND *conds)
      switch (item_sum->sum_func()) {
      case Item_sum::COUNT_FUNC:
        /*
          If the expr in count(expr) can never be null we can change this
          If the expr in COUNT(expr) can never be null we can change this
          to the number of rows in the tables if this number is exact and
          there are no outer joins.
        */
        if (!conds && !((Item_sum_count*) item)->args[0]->maybe_null &&
            !outer_tables && is_exact_count)
        {
          longlong count= 1;
          TABLE_LIST *table;
          for (table= tables; table; table= table->next_leaf)
          {
            if (outer_tables || (table->table->file->table_flags() &
                                 HA_NOT_EXACT_COUNT) || table->schema_table)
            {
              const_result= 0;			// Can't optimize left join
              break;
            }
            tables->table->file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK);
            count*= table->table->file->records;
          }
          if (!table)
        {
          ((Item_sum_count*) item)->make_const(count);
          recalc_const_item= 1;
        }
        }
        else
          const_result= 0;
        break;
+1 −2
Original line number Diff line number Diff line
@@ -842,8 +842,7 @@ bool mysql_truncate(THD *thd, TABLE_LIST *table_list, bool dont_send_ok)
               table_list->db, table_list->table_name);
      DBUG_RETURN(TRUE);
    }
    if (!ha_check_storage_engine_flag(table_type, HTON_CAN_RECREATE)
        || thd->lex->sphead)
    if (!ha_check_storage_engine_flag(table_type, HTON_CAN_RECREATE))
      goto trunc_by_del;
    if (lock_and_wait_for_table_name(thd, table_list))
      DBUG_RETURN(TRUE);
+1 −1
Original line number Diff line number Diff line
@@ -3350,7 +3350,7 @@ mysql_execute_command(THD *thd)
      Don't allow this within a transaction because we want to use
      re-generate table
    */
    if ((thd->locked_tables && !lex->sphead) || thd->active_transaction())
    if (thd->locked_tables || thd->active_transaction())
    {
      my_message(ER_LOCK_OR_ACTIVE_TRANSACTION,
                 ER(ER_LOCK_OR_ACTIVE_TRANSACTION), MYF(0));
Loading