1. 06 Sep, 2006 2 commits
    • unknown's avatar
      Merge gbichot@bk-internal.mysql.com:/home/bk/mysql-5.1-maint · 5d4c2e58
      unknown authored
      into  gbichot3.local:/home/mysql_src/mysql-5.1-2
      
      5d4c2e58
    • unknown's avatar
      New way to fix BUG#19243 "wrong LAST_INSERT_ID() after ON DUPLICATE KEY UPDATE". · 79e1c0fd
      unknown authored
      This bug report was two problems:
      1) LAST_INSERT_ID() returns a value which does not exist in the table
      2) the reporter would want it to return the autoinc id of the updated
      row.
      1) is a real bug, 2) is a feature request.
      In July I implemented 2) in 5.1 (which automatically fixes 1).
      This has not yet been documented or released, so is changeable.
      Precisely, recently Paul and a user found an easy workaround to give
      2), which works in 4.1-5.0-5.1. So I can revert my code for 2),
      because it's not needed, that's what I do here;
      we forget about 2) (we will document the workaround).
      But when I revert my code for 2), 1) comes back. We solve 1) by saying
      that if INSERT ON DUPLICATE KEY UPDATE updates a row, it's like a
      regular UPDATE: LAST_INSERT_ID() should not be affected (instead of
      returning a non-existent value).
      So note: no behaviour change compared to the last released 5.1; just
      a bugfix for 1).
      
      
      mysql-test/r/innodb_mysql.result:
        result update
      mysql-test/t/innodb_mysql.test:
            test for the new way to fix BUG#19243: that if INSERT ON DUPLICATE
            KEY UPDATE updates a row, SELECT LAST_INSERT_ID() is not affected.
            Test of the workaround for people who want SELECT LAST_INSERT_ID()
            to return the autoinc id of the updated row.
      sql/sql_insert.cc:
        No need to change LAST_INSERT_ID() if INSERT ON DUPLICATE KEY UPDATE
        updates a row, there is a workaround to achieve this without changing
        code: just add "autoinc_col=LAST_INSERT_ID(autoinc_col)" to your
        ON DUPLICATE KEY UPDATE clause.
        Prevent LAST_INSERT_ID() to contain an inexistent value in this case:
        if the row is updated it should be like a regular UPDATE: don't
        affect LAST_INSERT_ID() (achieved by marking that we didn't generate
        an id for this row: insert_id_for_cur_row=0).
      79e1c0fd
  2. 05 Sep, 2006 38 commits