• Marko Mäkelä's avatar
    MDEV-13176 ALTER TABLE…CHANGE col col TIMESTAMP NOT NULL DEFAULT… fails · 29624ea3
    Marko Mäkelä authored
    When it comes to DEFAULT values of columns, InnoDB is imposing both
    unnecessary and insufficient conditions on whether ALGORITHM=INPLACE
    should be allowed for ALTER TABLE.
    
    When changing an existing column to NOT NULL, any NULL values in the
    columns only get a special treatment if the column is changed to an
    AUTO_INCREMENT column (which is not supported by ALGORITHM=INPLACE)
    or the column type is TIMESTAMP. In all other cases, an error
    must be reported for the failure to convert a NULL value to NOT NULL.
    
    InnoDB was unnecessarily interested in whether the DEFAULT value
    is not constant when altering other than TIMESTAMP columns. Also,
    when changing a TIMESTAMP column to NOT NULL, InnoDB was performing
    an insufficient check, and it was incorrectly allowing a constant
    DEFAULT value while not being able to replace NULL values with that
    constant value.
    
    Furthermore, in ADD COLUMN, InnoDB is unnecessarily rejecting certain
    nondeterministic DEFAULT expressions (depending on the session
    parameters or the current time).
    29624ea3
handler0alter.cc 261 KB