mariadb/mysql-test/suite/versioning
Nikita Malyavin 6a653d5bb7 MDEV-36274 Implement IDENTITY column
This patch implements basic IDENTITY feature, with the following
syntax:

<col> GENERATED {ALWAYS AS | BY DEFAULT [ON NULL]} identity_props

The following identity_props are acknowleged:
- START WITH num - Supported, only positive values
- INCREMENT BY num - Supported, only positive values
- MAXVALUE num - Supported, only positive values. Engine treating may
vary.

The following identity_props are recognized and saved in
the table metadata, but ignored
- ORDER
- CYCLE
- MINVALUE num

The following identity_props are recognized and fully ignored at the
parser level.
These properties are newly added keywords, however they are not
reserved, i.e. can be used as identifiers, column names, etc. just as
before:
- KEEP
- SCALE
- SHARD
- EXTEND
- NOKEEP
- NOSCALE
- NOSHARD
- NOEXTEND

The patch is designed in minimalistic manner, re-using existing
AUTO_INCREMENT implementation, yet utilizing the default values
evaluation mechanism. As a result, it grants usage of CHECK constraints
and other table expressions: vcols, default values with identity column.

Some notes:
* IDENTITY is evaluated as Field's default_value. Even GENERATED ALWAYS
is considered "default", since the IDENTITY expression is not
determistic.
* However, the GENERATED ALWAYS kind cannot be assigned in DMLs in
STRICT SQL_MODE. That is, the behavior for users is like other GENERATED
 ALWAYS columns.
* It honors INSERT_ID and uses it.
* IDENTITY column is always replicated and saved in mariadb-dump, which
is guaranteed by using default_value instead of vcol_expr (vcols, even
stored, are usually not replicated)
* In frm, it is loaded and saved as a default expression. For that,
parse_vcol_expr definition was extended to support things like GENERATED
 BY DEFAULT, and even GENERATED ALWAYS. That is, no EXTRA2 header had to
 be added.
* struct Autoinc_spec is stored in Item_dentity_next, so table
 structures are preserved as they were.
* New IDENTITY keyword is not reserved

Known issues:
* LAST_INSERT_ID() is not working for now.
* update t set col=default(identity_column) is broken, as reported in
MDEV-31854 for nextval.
2025-06-18 12:09:31 +02:00
..
r MDEV-36274 Implement IDENTITY column 2025-06-18 12:09:31 +02:00
t Merge 11.4 into 11.8 2025-04-02 14:07:01 +03:00
common.inc Merge 11.4 into 11.6 2024-10-03 16:09:56 +03:00
common.opt Tests: versioning suite fix when no test_versioning plugin 2019-07-09 10:01:54 +03:00
common_finish.inc Merge branch '10.6' into 10.9 2023-08-04 08:01:06 +02:00
disabled.def MDEV-14820 System versioning is applied incorrectly to CTEs 2018-05-12 10:16:45 +02:00
engines.combinations MDEV-16937 Strict SQL with system versioned tables causes issues (10.4) 2020-05-29 11:45:19 +03:00
engines.inc
innodb.combinations MDEV-17038 ALTER TABLE CHANGE COLUMN c1 c1 bigint NOT NULL - generates error if table uses SYSTEM VERSIONING 2018-11-01 16:42:06 +02:00
innodb.inc MDEV-17038 ALTER TABLE CHANGE COLUMN c1 c1 bigint NOT NULL - generates error if table uses SYSTEM VERSIONING 2018-11-01 16:42:06 +02:00
key_type.combinations versioning test suite fixes 2019-10-10 00:20:34 +03:00
key_type.inc versioning test suite fixes 2019-10-10 00:20:34 +03:00
sys_time.inc MDEV-32188 make TIMESTAMP use whole 32-bit unsigned range 2024-05-27 12:39:02 +02:00
wait_system_clock.inc fix tests on windows 2018-01-13 02:01:35 +01:00