![]() 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 recognized and saved in the table metadata, but ignored - START WITH num - INCREMENT BY num - MAXVALUE num - MINVALUE num - ORDER, NOORDER - CYCLE, NOCYCLE - NOMINVALUE, NO MINVALUE - NOMAXVALUE, NO MAXVALUE The following identity_props 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 for other GENERATED ALWAYS columns. * It honors INSERT_ID and uses it, which is important for statement-based replication to work. * START WITH and INCREMENT BY are ignored. auto_increment_increment and auto_increment_offset are being followed instead, exactly as for AUTO_INCREMENT. * Since IDENTITY behaves as DEFAULT, it cannot follow NO_AUTO_VALUE_ON_ZERO and should accept user-set keyword with zeroes, even when it is off, otherwise, `default` will not work. See test "Zeroes and defaults handling". * 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. * AUTO_INCREMENT is not transformed into default_value and works completely as before. * IDENTITY should work without the key, and moreover should generate new values without repetition. If no suitable key is created by user, one is created implicitly. * New IDENTITY keyword is added as not-reserved. handler::update_auto_increment: extract a part checking for explicit value and zeroes. Invoke only for AUTO_INCREMENT. The rest is contained in handler::update_auto_increment_impl, which will be invoked by IDENTITY. Add field argument to use instead of next_number_field. Note that for IDENTITY, field is not always next_number_field (Item_default_value can create its own field). * show_create.cc: changes make it possible to output Field's default_value as GENERATED BY DEFAULT, instead of DEFAULT (expr). * Item_field::check_vcol_func_processor: allow default on IDENTITY fields (they still have AUTO_INCREMENT properties, like unireg_check) * Item_default_value::tie_field: forbid default(x) exprs. Item_default_value distinguishes `default` and `default(x)` by the vcol_assignment_ok flag. * mysql_prepare_create_table_finalize: make sure there is at least one key where IDENTITY field goes as a first key_part. If there's none - create one. Known issues: * LAST_INSERT_ID() is not working for now. Limitations: * default(identity_column), is disabled, because persistent write is not properly done in that case. |
||
---|---|---|
.github | ||
BUILD | ||
client | ||
cmake | ||
dbug | ||
debian | ||
Docs | ||
extra | ||
include | ||
libmariadb@b5a2c9f3c2 | ||
libmysqld | ||
libservices | ||
man | ||
mysql-test | ||
mysys | ||
mysys_ssl | ||
plugin | ||
randgen/conf | ||
scripts | ||
sql | ||
sql-bench | ||
sql-common | ||
storage | ||
strings | ||
support-files | ||
tests | ||
tpool | ||
unittest | ||
vio | ||
win | ||
wsrep-lib@e55f01ce1e | ||
zlib | ||
.clang-format | ||
.gitattributes | ||
.gitignore | ||
.gitlab-ci.yml | ||
.gitmodules | ||
appveyor.yml | ||
BUILD-CMAKE | ||
CMakeLists.txt | ||
CODING_STANDARDS.md | ||
config.h.cmake | ||
configure.cmake | ||
CONTRIBUTING.md | ||
COPYING | ||
CREDITS | ||
INSTALL-SOURCE | ||
INSTALL-WIN-SOURCE | ||
KNOWN_BUGS.txt | ||
README.md | ||
SECURITY.md | ||
THIRDPARTY | ||
VERSION |
Code status:
MariaDB: The innovative open source database
MariaDB was designed as a drop-in replacement of MySQL(R) with more features, new storage engines, fewer bugs, and better performance.
MariaDB is brought to you by the MariaDB Foundation and the MariaDB Corporation. Please read the CREDITS file for details about the MariaDB Foundation, and who is developing MariaDB.
MariaDB is developed by many of the original developers of MySQL who now work for the MariaDB Corporation, the MariaDB Foundation and by many people in the community.
MySQL, which is the base of MariaDB, is a product and trademark of Oracle Corporation, Inc. For a list of developers and other contributors, see the Credits appendix. You can also run 'SHOW authors' to get a list of active contributors.
A description of the MariaDB project and a manual can be found at:
https://mariadb.com/kb/en/mariadb-vs-mysql-features/
https://mariadb.com/kb/en/mariadb-versus-mysql-compatibility/
https://mariadb.com/kb/en/new-and-old-releases/
Getting the code, building it and testing it
Refer to the following guide: https://mariadb.org/get-involved/getting-started-for-developers/get-code-build-test/ which outlines how to build the source code correctly and run the MariaDB testing framework, as well as which branch to target for your contributions.
Help
More help is available from the Maria Discuss mailing list https://lists.mariadb.org/postorius/lists/discuss.lists.mariadb.org/ and MariaDB's Zulip instance, https://mariadb.zulipchat.com/
Licensing
MariaDB is specifically available only under version 2 of the GNU General Public License (GPLv2). (I.e. Without the "any later version" clause.) This is inherited from MySQL. Please see the README file in the MySQL distribution for more information.
License information can be found in the COPYING file. Third party license information can be found in the THIRDPARTY file.
Bug Reports
Bug and/or error reports regarding MariaDB should be submitted at: https://jira.mariadb.org
For reporting security vulnerabilities, see our security-policy.
The code for MariaDB, including all revision history, can be found at: https://github.com/MariaDB/server