• unknown's avatar
    Bug #24010: INSERT INTO ... SELECT fails on unique constraint with data · ddb5a563
    unknown authored
    it doesn't select.
    
    This bug was fixed along with bug #16861: User defined variable can 
    have a wrong value if a tmp table was used.
    
    There the fix consisted of Item_func_set_user_var overloading the method
    Item::save_in_field. Consider the query from the test case:
    
    
    INSERT INTO foo( bar, baz )
    SELECT 
      bar,
      @newBaz := 1 + baz
    FROM 
      foo
    WHERE 
      quux <= 0.1;
    
    Here the assignment expression '@newBaz := 1 + baz' is represented by an 
    Item_func_set_user_var. Its member method save_in_field, which writes the 
    value of this assignment into the result field, writes the val_xxx() value, 
    which is not updated at this point. In the fix introduced by the patch,
    the save_in_field method reads the actual variable value instead.
    
    See also comment for 
    ChangeSet@1.2368.1.3, 2007-01-09 23:24:56+03:00, evgen@moonbone.local +4 -0
    and comment for
    Item_func_set_user_var::save_in_field (item_func.cc)
    
    
    mysql-test/r/update.result:
      BUG#24010
      The correct, and expected, result
    mysql-test/t/update.test:
      BUG#24010
      The test case for this bug. When the bug is active, the INSERT ... SELECT 
      statement will try to insert the values <1, 2> which gives an error
    ddb5a563
update.test 10.8 KB