Hi sinisa,

I tried this patch.
It came up with undefined symbol for ER_MULTI_TABLE_UPDATE_DELETE_WITH_INNODB on 
compile
so i went ahead and added to include/mysqld_error.h for testing. 
i'm not sure if it's the right place or the right error code but it made mysql compile

***************
256a257
> #define ER_MULTI_TABLE_UPDATE_DELETE_WITH_INNODB 1238
***************

then ran the query again.

drop table parent;
drop table child;
 
CREATE TABLE parent(id INT NOT NULL,
                       PRIMARY KEY (id)) TYPE=INNODB;
CREATE TABLE child(id  INT PRIMARY KEY, parent_id INT,
                       INDEX par_ind (parent_id),
                       FOREIGN KEY (parent_id) REFERENCES parent(id)
                       ON DELETE CASCADE
) TYPE=INNODB; 
 
 insert into parent set id=1;
 insert into child set id=1, parent_id=1;
 delete parent,child from parent,child where parent.id=child.parent_id;

now i get 
ERROR 2013: Lost connection to MySQL server during query
mysql>
Number of processes running now: 0
030213 15:54:20  mysqld restarted


regards,
Scott Wong



-----Original Message-----
From: Sinisa Milivojevic [mailto:[EMAIL PROTECTED]]
Sent: Thursday, February 13, 2003 1:31 PM
To: Scott Wong
Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]
Subject: Re: Bug with innodb multi-table delete and foreign keys.


Scott Wong writes:
> Version: Mysql  4.0.10-gamma
> 
> 
> Description: ERROR 1105: Unknown error after issuing a multi-table delete on 
>parent/child table.
> if there's no foreign keys .. works ok.
> 
> How to Repeat :
> 
> drop table parent;
> drop table child;
> 
> CREATE TABLE parent(id INT NOT NULL,
>                       PRIMARY KEY (id)) TYPE=INNODB;
> CREATE TABLE child(id  INT PRIMARY KEY, parent_id INT,
>                       INDEX par_ind (parent_id),
>                       FOREIGN KEY (parent_id) REFERENCES parent(id)
>                       ON DELETE CASCADE
> ) TYPE=INNODB; 
> 
> 
> insert into parent set id=1;
> insert into child set id=1, parent_id=1;
> insert into grandchild set id=1, child_id=1;
> 
> delete parent,child from parent,child where parent.id=child.parent_id;
> ERROR 1105: Unknown error 
> 
> 
> fix
> ?
> 
> 
> Thank you for your time
> 
> Scott Wong
> Meiko America, INC

You have got an error due to the fact that cascading deletes deleted
matching rows already.

I have fixed this by introducing a correct error message:

===== sql/sql_delete.cc 1.91 vs edited =====
*** /tmp/sql_delete.cc-1.91-1826        Fri Nov 29 16:40:15 2002
--- edited/sql/sql_delete.cc    Thu Feb 13 21:28:24 2003
***************
*** 429,436 ****
        deleted++;
      }
      end_read_record(&info);
!     if (local_error == -1)                            // End of file
!       local_error = 0;
    }
    return local_error;
  }
--- 429,441 ----
        deleted++;
      }
      end_read_record(&info);
!     if (local_error)
!     {
!       if (local_error == -1)                          // End of file
!       local_error = 0;
!       else if (table->db_type == DB_TYPE_INNODB  && local_error < 1000)
!       local_error = ER_MULTI_TABLE_UPDATE_DELETE_WITH_INNODB;
!     }
    }
    return local_error;
  }
***************
*** 475,487 ****
    /* Commit or rollback the current SQL statement */ 
    if (transactional_tables)
      if (ha_autocommit_or_rollback(thd,local_error > 0))
!       local_error=1;
    
    if (deleted)
      query_cache_invalidate3(thd, delete_tables, 1);
  
!   if (local_error)
!     ::send_error(&thd->net);
    else
      ::send_ok(&thd->net,deleted);
    return 0;
--- 480,492 ----
    /* Commit or rollback the current SQL statement */ 
    if (transactional_tables)
      if (ha_autocommit_or_rollback(thd,local_error > 0))
!       error=(error) ? error : local_error;
    
    if (deleted)
      query_cache_invalidate3(thd, delete_tables, 1);
  
!   if (error)
!     ::send_error(&thd->net, error);
    else
      ::send_ok(&thd->net,deleted);
    return 0;


-- 
   __  ___     ___ ____  __
  /  |/  /_ __/ __/ __ \/ /    Mr. Sinisa Milivojevic <[EMAIL PROTECTED]>
 / /|_/ / // /\ \/ /_/ / /__   MySQL AB, Fulltime Developer
/_/  /_/\_, /___/\___\_\___/   Larnaca, Cyprus
       <___/   www.mysql.com

Join MySQL Users Conference and Expo:
http://www.mysql.com/events/uc2003/


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to