L or PERSISTENT generated columns cannot be explicitly set to
any other values than NULL or DEFAULT. If a generated column is explicitly set
to any other value, then the outcome depends on whether strict mode is enabled
in sql_mode. If it is not enabled, then a warning will be raised and the
default generated value will be used instead. If it is enabled, then an error
will be raised instead.

* The CREATE TABLE statement has limited support for generated columns.
It supports defining generated columns in a new table.
It supports using generated columns to partition tables.
It does not support using the versioning clauses with generated columns.

* The ALTER TABLE statement has limited support for generated columns.
It supports the MODIFY and CHANGE clauses for PERSISTENT generated columns.
It does not support the MODIFY clause for VIRTUAL generated columns if
ALGORITHM is not set to COPY. See MDEV-15476 for more information.
It does not support the  CHANGE clause for VIRTUAL generated columns if
ALGORITHM is not set to COPY. See MDEV-17035 for more information.
It does not support altering a table if ALGORITHM is not set to COPY if the
table has a VIRTUAL generated column that is indexed. See MDEV-14046 for more
information.
It does not support adding a VIRTUAL generated column with the ADD clause if
the same statement is also adding other columns if ALGORITHM is not set to
COPY. See MDEV-17468 for more information.
It also does not support altering an existing column into a VIRTUAL generated
column.
It supports using generated columns to partition tables.
It does not support using the versioning clauses with generated columns.

* The SHOW CREATE TABLE statement supports generated columns.

* The DESCRIBE statement can be used to check whether a table has generated
columns.
You can tell which columns are generated by looking for the ones where the
Extra column is set to either VIRTUAL or PERSISTENT. For example:

DESCRIBE table1;
+-------+-------------+------+-----+---------+------------+
| Field | Type        | Null | Key | Default | Extra      |
+-------+-------------+------+-----+---------+------------+
| a     | int(11)     | NO   |     | NULL    |            |
| b     | varchar(32) | YES  |     | NULL    |            |
| c     | int(11)     | YES  |     | NULL    | VIRTUAL    |
| d     | varchar(5)  | YES  |     | NULL    | PERSISTENT |
+-------+-------------+------+-----+---------+------------+

* Generated columns can be properly referenced in the NEW and OLD rows in
triggers.

* Stored procedures support generated columns.

* The HANDLER statement supports generated columns.

Expression Support
------------------

* Most legal, deterministic expressions which can be calculated are supported
in expressions for generated columns.

* Most built-in functions are supported in expressions for generated columns.
However, some built-in functions can't be supported for technical reasons. For
example,  If you try to use an unsupported function in an expression, an error
is generated similar to the following:

ERROR 1901 (HY000): Function or expression 'dayname()' cannot be used in the
GENERATED ALWAYS AS clause of `v`

* Subqueries are not supported in expressions for generated columns because
the underlying data can change.

* Using anything that depends on data outside the row is not supported in
expressions for generated columns.

* Stored functions are not supported in expressions for generated columns. See
MDEV-17587 for more information.

* Non-deterministic built-in functions are supported in expressions for not
indexed VIRTUAL generated columns.

* Non-deterministic built-in functions are not supported in expressions for
PERSISTENT or indexed VIRTUAL generated columns.

* User-defined functions (UDFs) are supported in expressions for generated
columns.
However, MariaDB can't check whether a UDF is deterministic, so it is up to
the user to be sure that they do not use non-deterministic UDFs with VIRTUAL
generated columns.

* Defining a generated column based on other generated columns defined before
it in the ta