1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-7563 Support CHECK constraint as in (or close to) SQL Standard

MDEV-10134 Add full support for DEFAULT

- Added support for using tables with MySQL 5.7 virtual fields,
  including MySQL 5.7 syntax
- Better error messages also for old cases
- CREATE ... SELECT now also updates timestamp columns
- Blob can now have default values
- Added new system variable "check_constraint_checks", to turn of
  CHECK constraint checking if needed.
- Removed some engine independent tests in suite vcol to only test myisam
- Moved some tests from 'include' to 't'. Should some day be done for all tests.
- FRM version increased to 11 if one uses virtual fields or constraints
- Changed to use a bitmap to check if a field has got a value, instead of
  setting HAS_EXPLICIT_VALUE bit in field flags
- Expressions can now be up to 65K in total
- Ensure we are not refering to uninitialized fields when handling virtual fields or defaults
- Changed check_vcol_func_processor() to return a bitmap of used types
- Had to change some functions that calculated cached value in fix_fields to do
  this in val() or getdate() instead.
- store_now_in_TIME() now takes a THD argument
- fill_record() now updates default values
- Add a lookahead for NOT NULL, to be able to handle DEFAULT 1+1 NOT NULL
- Automatically generate a name for constraints that doesn't have a name
- Added support for ALTER TABLE DROP CONSTRAINT
- Ensure that partition functions register virtual fields used. This fixes
  some bugs when using virtual fields in a partitioning function
This commit is contained in:
Michael Widenius
2016-06-29 09:14:22 +02:00
committed by Sergei Golubchik
parent 23d03a1b1e
commit db7edfed17
165 changed files with 5793 additions and 6325 deletions

View File

@ -42,6 +42,7 @@
#include <mysql/psi/mysql_table.h>
class Alter_info;
class Virtual_column_info;
// the following is for checking tables
@ -1632,6 +1633,7 @@ struct Schema_specification_st
- LIKE another_table_name ... // Copy structure from another table
- [AS] SELECT ... // Copy structure from a subquery
*/
struct Table_scope_and_contents_source_st
{
CHARSET_INFO *table_charset;
@ -1647,6 +1649,8 @@ struct Table_scope_and_contents_source_st
ulong avg_row_length;
ulong used_fields;
ulong key_block_size;
ulong expression_lengths;
ulong field_check_constraints;
/*
number of pages to sample during
stats estimation, if used, otherwise 0.
@ -1679,6 +1683,7 @@ struct Table_scope_and_contents_source_st
ha_table_option_struct *option_struct; ///< structure with parsed table options
ha_field_option_struct **fields_option_struct; ///< array of field option structures
ha_index_option_struct **indexes_option_struct; ///< array of index option structures
List<Virtual_column_info> *constraint_list;
/* The following is used to remember the old state for CREATE OR REPLACE */
TABLE *table;
@ -1823,7 +1828,7 @@ public:
attribute has really changed we might choose to set flag
pessimistically, for example, relying on parser output only.
*/
typedef ulong HA_ALTER_FLAGS;
typedef ulonglong HA_ALTER_FLAGS;
// Add non-unique, non-primary index
static const HA_ALTER_FLAGS ADD_INDEX = 1L << 0;
@ -1932,6 +1937,10 @@ public:
// ALTER TABLE for a partitioned table
static const HA_ALTER_FLAGS ALTER_PARTITIONED = 1L << 31;
static const HA_ALTER_FLAGS ALTER_ADD_CONSTRAINT = 1LL << 32;
static const HA_ALTER_FLAGS ALTER_DROP_CONSTRAINT = 1LL << 33;
/**
Create options (like MAX_ROWS) for the new version of table.
@ -2856,6 +2865,7 @@ public:
size_t pack_frm_len);
int ha_drop_partitions(const char *path);
int ha_rename_partitions(const char *path);
virtual void register_columns_for_write() {}
void adjust_next_insert_id_after_explicit_value(ulonglong nr);
int update_auto_increment();