Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-3845

Virtual Columns are always NULL is Triggers

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 10.0.0, 5.5.28, 5.3.8, 5.2.12
    • Fix Version/s: 10.0.1, 5.5.28a, 5.3.10, 5.2.13
    • Component/s: None
    • Labels:
      None

      Description

      Virtual columns are always NULL in Triggers. I beilive this is a bug, because documentation says:
      "Triggers, stored procedures, informational commands (...), and partitioning based on virtual columns are all fully supported."

      Example:

      DROP VIEW   IF EXISTS  `t1`;
      DROP TABLE  IF EXISTS  `t1`;
      CREATE TABLE `t1` (
      	`a`      INTEGER UNSIGNED  NULL  DEFAULT NULL,
      	`b`      INTEGER UNSIGNED  GENERATED ALWAYS AS (`a`) VIRTUAL
      )
      	ENGINE      = MyISAM;
      DROP VIEW   IF EXISTS  `t2`;
      DROP TABLE  IF EXISTS  `t2`;
      CREATE TABLE `t2` (
      	`c1`      INTEGER UNSIGNED  NOT NULL
      )
      	ENGINE      = MyISAM;
      
      
      DELIMITER ||
      
      CREATE TRIGGER `t1_ins_aft`
      	AFTER INSERT
      	ON `t1`
      	FOR EACH ROW
      BEGIN
      	INSERT INTO `t2` (`c1`) VALUES (NEW.`b`);
      END ||
      
      CREATE TRIGGER `t1_del_bef`
      	BEFORE DELETE
      	ON `t1`
      	FOR EACH ROW
      BEGIN
      	INSERT INTO `t2` (`c1`) VALUES (OLD.`b`);
      END ||
      
      DELIMITER ;
      

      – Then I try those:

      INSERT INTO `t1` (`a`) VALUES (1), (2), (3);
      DELETE FROM t1;
      

      It looks that b is treated as NULL.

        Gliffy Diagrams

          Attachments

            Activity

            Hide
            elenst Elena Stepanova added a comment -

            Igor,

            Also reproducible with MyISAM and InnoDB (I've changed the test case to MyISAM).

            The last two statements indeed attempt to insert NULL into t2.c1 and throw an error because the column is not nullable. If you remove NOT NULL clause and try SELECT * FROM t2 afterwards, all inserted values are NULL.

            Show
            elenst Elena Stepanova added a comment - Igor, Also reproducible with MyISAM and InnoDB (I've changed the test case to MyISAM). The last two statements indeed attempt to insert NULL into t2.c1 and throw an error because the column is not nullable. If you remove NOT NULL clause and try SELECT * FROM t2 afterwards, all inserted values are NULL.
            Hide
            sanja Oleksandr Byelkin added a comment -

            OK to push

            Show
            sanja Oleksandr Byelkin added a comment - OK to push
            Hide
            igor Igor Babaev added a comment -

            The fix for the bug was pushed into 5.2 (rev 3187).

            Show
            igor Igor Babaev added a comment - The fix for the bug was pushed into 5.2 (rev 3187).

              People

              • Assignee:
                igor Igor Babaev
                Reporter:
                f_razzoli Federico Razzoli
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: