From daf28db027a8bdcb7b2b69c54639fec35a2dd259 Mon Sep 17 00:00:00 2001 From: Alexander Barkov Date: Tue, 21 Jan 2020 14:27:17 +0400 Subject: [PATCH] MDEV-21537 InnoDB INFORMATION_SCHEMA tables fail to define DEFAULT for ENUM NOT NULL - Adding a way to define I_S columns without DEFAULT. - Fixing all ENUM columns in I_S.INNODB* table definitions to have no DEFAULT. --- mysql-test/suite/innodb/disabled.def | 1 - .../innodb/r/innodb_information_schema.result | 2 +- .../suite/innodb/r/innodb_wl6326_big.result | 10 ++--- .../suite/innodb/t/innodb_wl6326_big.test | 10 ++--- .../innodb_i_s/innodb_buffer_page.result | 8 +++- .../suite/innodb_i_s/innodb_buffer_page.test | 6 +++ .../innodb_i_s/innodb_buffer_page_lru.result | 6 ++- .../innodb_i_s/innodb_buffer_page_lru.test | 6 +++ .../suite/innodb_i_s/innodb_locks.result | 8 +++- mysql-test/suite/innodb_i_s/innodb_locks.test | 6 +++ .../suite/innodb_i_s/innodb_metrics.result | 6 ++- .../suite/innodb_i_s/innodb_metrics.test | 6 +++ mysql-test/suite/innodb_i_s/innodb_trx.result | 6 ++- mysql-test/suite/innodb_i_s/innodb_trx.test | 6 +++ sql/sql_i_s.h | 43 ++++++++++++++++--- sql/sql_select.cc | 10 +++++ storage/innobase/handler/i_s.cc | 14 +++--- 17 files changed, 123 insertions(+), 31 deletions(-) diff --git a/mysql-test/suite/innodb/disabled.def b/mysql-test/suite/innodb/disabled.def index 7e04f112a8a..3c2d32765d8 100644 --- a/mysql-test/suite/innodb/disabled.def +++ b/mysql-test/suite/innodb/disabled.def @@ -12,4 +12,3 @@ create-index-debug : MDEV-13680 InnoDB may crash when btr_page_alloc() fails innodb_wl6326 : MDEV-21535 Too broad ha_innobase::records_in_range() -innodb_wl6326_big : MDEV-21537 invalid DEFAULT for ENUM NOT NULL column diff --git a/mysql-test/suite/innodb/r/innodb_information_schema.result b/mysql-test/suite/innodb/r/innodb_information_schema.result index 708108bf32c..70458758437 100644 --- a/mysql-test/suite/innodb/r/innodb_information_schema.result +++ b/mysql-test/suite/innodb/r/innodb_information_schema.result @@ -38,7 +38,7 @@ trx_lock_memory_bytes bigint(21) unsigned NO 0 trx_rows_locked bigint(21) unsigned NO 0 trx_rows_modified bigint(21) unsigned NO 0 trx_concurrency_tickets bigint(21) unsigned NO 0 -trx_isolation_level enum('READ UNCOMMITTED','READ COMMITTED','REPEATABLE READ','SERIALIZABLE') NO +trx_isolation_level enum('READ UNCOMMITTED','READ COMMITTED','REPEATABLE READ','SERIALIZABLE') NO NULL trx_unique_checks int(1) NO 0 trx_foreign_key_checks int(1) NO 0 trx_last_foreign_key_error varchar(256) YES NULL diff --git a/mysql-test/suite/innodb/r/innodb_wl6326_big.result b/mysql-test/suite/innodb/r/innodb_wl6326_big.result index 3ff6d0d0b5c..25c9357de94 100644 --- a/mysql-test/suite/innodb/r/innodb_wl6326_big.result +++ b/mysql-test/suite/innodb/r/innodb_wl6326_big.result @@ -229,7 +229,7 @@ INSERT INTO my_metrics SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT, COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET, TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET, -STATUS, 'before' +ENABLED, 'before' FROM information_schema.innodb_metrics WHERE NAME LIKE 'innodb_rwlock_sx_%'; # TC-01 There are exact three entries "innodb_rwlock_sx_%" with the @@ -254,7 +254,7 @@ INSERT INTO my_metrics SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT, COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET, TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET, -STATUS, 'before' +ENABLED, 'before' FROM information_schema.innodb_metrics WHERE NAME LIKE 'innodb_rwlock_sx_%'; SET @extra_string = '__0_'; @@ -369,7 +369,7 @@ INSERT INTO my_metrics SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT, COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET, TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET, -STATUS, 'after' +ENABLED, 'after' FROM information_schema.innodb_metrics WHERE NAME LIKE 'innodb_rwlock_sx_%'; # TC-16 The following activities happend after reset in innodb_metrics @@ -389,7 +389,7 @@ INSERT INTO my_metrics SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT, COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET, TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET, -STATUS, 'before' +ENABLED, 'before' FROM information_schema.innodb_metrics WHERE NAME LIKE 'innodb_rwlock_sx_%'; SET GLOBAL innodb_monitor_reset = "innodb_rwlock_sx_%"; @@ -397,7 +397,7 @@ INSERT INTO my_metrics SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT, COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET, TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET, -STATUS, 'after' +ENABLED, 'after' FROM information_schema.innodb_metrics WHERE NAME LIKE 'innodb_rwlock_sx_%'; # TC-08 There was a reset. COUNT_RESET = MAX_COUNT_RESET for ALL diff --git a/mysql-test/suite/innodb/t/innodb_wl6326_big.test b/mysql-test/suite/innodb/t/innodb_wl6326_big.test index 6d4b07e7cb6..43de46b4125 100644 --- a/mysql-test/suite/innodb/t/innodb_wl6326_big.test +++ b/mysql-test/suite/innodb/t/innodb_wl6326_big.test @@ -163,19 +163,19 @@ let $before_my_metrics= INSERT INTO my_metrics SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT, COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET, TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET, -STATUS, 'before' +ENABLED, 'before' FROM information_schema.innodb_metrics WHERE NAME LIKE 'innodb_rwlock_sx_%'; let $after_my_metrics= INSERT INTO my_metrics SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT, COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET, TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET, -STATUS, 'after' +ENABLED, 'after' FROM information_schema.innodb_metrics WHERE NAME LIKE 'innodb_rwlock_sx_%'; let $print_metrics= SELECT NAME, COUNT, MAX_COUNT, MIN_COUNT, AVG_COUNT, COUNT_RESET, MAX_COUNT_RESET, MIN_COUNT_RESET, AVG_COUNT_RESET, -TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET, STATUS +TIME_ENABLED, TIME_DISABLED, TIME_ELAPSED, TIME_RESET, ENABLED FROM information_schema.innodb_metrics WHERE NAME LIKE 'innodb_rwlock_sx_%' ORDER BY NAME; @@ -315,12 +315,12 @@ SELECT COUNT(*) INTO @sx_count FROM my_metrics; --echo # TC-02 Counting is now enabled. ALL = @sx_count entries show that. let $check_statement= SELECT COUNT(*) <> @sx_count FROM my_metrics -WHERE STATUS = 'enabled'; +WHERE ENABLED; if(`$check_statement`) { --echo # fail eval $check_statement; - SELECT NAME, STATUS FROM my_metrics + SELECT NAME, ENABLED FROM my_metrics ORDER BY NAME; exit; } diff --git a/mysql-test/suite/innodb_i_s/innodb_buffer_page.result b/mysql-test/suite/innodb_i_s/innodb_buffer_page.result index 6699fd9ae79..3ef5608e155 100644 --- a/mysql-test/suite/innodb_i_s/innodb_buffer_page.result +++ b/mysql-test/suite/innodb_i_s/innodb_buffer_page.result @@ -17,8 +17,12 @@ INNODB_BUFFER_PAGE CREATE TEMPORARY TABLE `INNODB_BUFFER_PAGE` ( `NUMBER_RECORDS` bigint(21) unsigned NOT NULL DEFAULT 0, `DATA_SIZE` bigint(21) unsigned NOT NULL DEFAULT 0, `COMPRESSED_SIZE` bigint(21) unsigned NOT NULL DEFAULT 0, - `PAGE_STATE` enum('NOT_USED','READY_FOR_USE','FILE_PAGE','MEMORY','REMOVE_HASH') NOT NULL DEFAULT '', - `IO_FIX` enum('IO_NONE','IO_READ','IO_WRITE','IO_PIN') NOT NULL DEFAULT '', + `PAGE_STATE` enum('NOT_USED','READY_FOR_USE','FILE_PAGE','MEMORY','REMOVE_HASH') NOT NULL, + `IO_FIX` enum('IO_NONE','IO_READ','IO_WRITE','IO_PIN') NOT NULL, `IS_OLD` int(1) NOT NULL DEFAULT 0, `FREE_PAGE_CLOCK` bigint(21) unsigned NOT NULL DEFAULT 0 ) ENGINE=MEMORY DEFAULT CHARSET=utf8 +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_BUFFER_PAGE; +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/mysql-test/suite/innodb_i_s/innodb_buffer_page.test b/mysql-test/suite/innodb_i_s/innodb_buffer_page.test index baf8571bc20..089cead2c4e 100644 --- a/mysql-test/suite/innodb_i_s/innodb_buffer_page.test +++ b/mysql-test/suite/innodb_i_s/innodb_buffer_page.test @@ -1,3 +1,9 @@ --source include/have_innodb.inc SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_BUFFER_PAGE; + +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_BUFFER_PAGE; +DROP TEMPORARY TABLE t1; + +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/mysql-test/suite/innodb_i_s/innodb_buffer_page_lru.result b/mysql-test/suite/innodb_i_s/innodb_buffer_page_lru.result index 00134233350..73871eb2eda 100644 --- a/mysql-test/suite/innodb_i_s/innodb_buffer_page_lru.result +++ b/mysql-test/suite/innodb_i_s/innodb_buffer_page_lru.result @@ -18,7 +18,11 @@ INNODB_BUFFER_PAGE_LRU CREATE TEMPORARY TABLE `INNODB_BUFFER_PAGE_LRU` ( `DATA_SIZE` bigint(21) unsigned NOT NULL DEFAULT 0, `COMPRESSED_SIZE` bigint(21) unsigned NOT NULL DEFAULT 0, `COMPRESSED` int(1) NOT NULL DEFAULT 0, - `IO_FIX` enum('IO_NONE','IO_READ','IO_WRITE','IO_PIN') NOT NULL DEFAULT '', + `IO_FIX` enum('IO_NONE','IO_READ','IO_WRITE','IO_PIN') NOT NULL, `IS_OLD` int(1) DEFAULT NULL, `FREE_PAGE_CLOCK` bigint(21) unsigned NOT NULL DEFAULT 0 ) ENGINE=MEMORY DEFAULT CHARSET=utf8 +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU; +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/mysql-test/suite/innodb_i_s/innodb_buffer_page_lru.test b/mysql-test/suite/innodb_i_s/innodb_buffer_page_lru.test index f7969fcc2d3..b969745f144 100644 --- a/mysql-test/suite/innodb_i_s/innodb_buffer_page_lru.test +++ b/mysql-test/suite/innodb_i_s/innodb_buffer_page_lru.test @@ -1,3 +1,9 @@ --source include/have_innodb.inc SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU; + +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU; +DROP TEMPORARY TABLE t1; + +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_BUFFER_PAGE_LRU LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/mysql-test/suite/innodb_i_s/innodb_locks.result b/mysql-test/suite/innodb_i_s/innodb_locks.result index abfdce08606..6811a968869 100644 --- a/mysql-test/suite/innodb_i_s/innodb_locks.result +++ b/mysql-test/suite/innodb_i_s/innodb_locks.result @@ -3,8 +3,8 @@ Table Create Table INNODB_LOCKS CREATE TEMPORARY TABLE `INNODB_LOCKS` ( `lock_id` varchar(81) NOT NULL DEFAULT '', `lock_trx_id` bigint(21) unsigned NOT NULL DEFAULT 0, - `lock_mode` enum('S','S,GAP','X','X,GAP','IS','IS,GAP','IX','IX,GAP','AUTO_INC') NOT NULL DEFAULT '', - `lock_type` enum('RECORD','TABLE') NOT NULL DEFAULT '', + `lock_mode` enum('S','S,GAP','X','X,GAP','IS','IS,GAP','IX','IX,GAP','AUTO_INC') NOT NULL, + `lock_type` enum('RECORD','TABLE') NOT NULL, `lock_table` varchar(1024) NOT NULL DEFAULT '', `lock_index` varchar(1024) DEFAULT NULL, `lock_space` int(11) unsigned DEFAULT NULL, @@ -12,3 +12,7 @@ INNODB_LOCKS CREATE TEMPORARY TABLE `INNODB_LOCKS` ( `lock_rec` int(11) unsigned DEFAULT NULL, `lock_data` varchar(8192) DEFAULT NULL ) ENGINE=MEMORY DEFAULT CHARSET=utf8 +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_LOCKS; +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/mysql-test/suite/innodb_i_s/innodb_locks.test b/mysql-test/suite/innodb_i_s/innodb_locks.test index adf45ba4642..8327ae1f912 100644 --- a/mysql-test/suite/innodb_i_s/innodb_locks.test +++ b/mysql-test/suite/innodb_i_s/innodb_locks.test @@ -1,3 +1,9 @@ --source include/have_innodb.inc SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_LOCKS; + +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_LOCKS; +DROP TEMPORARY TABLE t1; + +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/mysql-test/suite/innodb_i_s/innodb_metrics.result b/mysql-test/suite/innodb_i_s/innodb_metrics.result index 0ec3a6b7bf6..c6e0c7ac1d1 100644 --- a/mysql-test/suite/innodb_i_s/innodb_metrics.result +++ b/mysql-test/suite/innodb_i_s/innodb_metrics.result @@ -16,6 +16,10 @@ INNODB_METRICS CREATE TEMPORARY TABLE `INNODB_METRICS` ( `TIME_ELAPSED` bigint(21) DEFAULT NULL, `TIME_RESET` datetime DEFAULT NULL, `ENABLED` int(1) NOT NULL DEFAULT 0, - `TYPE` enum('value','status_counter','set_owner','set_member','counter') NOT NULL DEFAULT '', + `TYPE` enum('value','status_counter','set_owner','set_member','counter') NOT NULL, `COMMENT` varchar(193) NOT NULL DEFAULT '' ) ENGINE=MEMORY DEFAULT CHARSET=utf8 +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_METRICS; +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_METRICS LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/mysql-test/suite/innodb_i_s/innodb_metrics.test b/mysql-test/suite/innodb_i_s/innodb_metrics.test index 6a2b2cee247..446bfffbda3 100644 --- a/mysql-test/suite/innodb_i_s/innodb_metrics.test +++ b/mysql-test/suite/innodb_i_s/innodb_metrics.test @@ -1,3 +1,9 @@ --source include/have_innodb.inc SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_METRICS; + +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_METRICS; +DROP TEMPORARY TABLE t1; + +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_METRICS LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/mysql-test/suite/innodb_i_s/innodb_trx.result b/mysql-test/suite/innodb_i_s/innodb_trx.result index d9a348f132c..297899650c2 100644 --- a/mysql-test/suite/innodb_i_s/innodb_trx.result +++ b/mysql-test/suite/innodb_i_s/innodb_trx.result @@ -17,10 +17,14 @@ INNODB_TRX CREATE TEMPORARY TABLE `INNODB_TRX` ( `trx_rows_locked` bigint(21) unsigned NOT NULL DEFAULT 0, `trx_rows_modified` bigint(21) unsigned NOT NULL DEFAULT 0, `trx_concurrency_tickets` bigint(21) unsigned NOT NULL DEFAULT 0, - `trx_isolation_level` enum('READ UNCOMMITTED','READ COMMITTED','REPEATABLE READ','SERIALIZABLE') NOT NULL DEFAULT '', + `trx_isolation_level` enum('READ UNCOMMITTED','READ COMMITTED','REPEATABLE READ','SERIALIZABLE') NOT NULL, `trx_unique_checks` int(1) NOT NULL DEFAULT 0, `trx_foreign_key_checks` int(1) NOT NULL DEFAULT 0, `trx_last_foreign_key_error` varchar(256) DEFAULT NULL, `trx_is_read_only` int(1) NOT NULL DEFAULT 0, `trx_autocommit_non_locking` int(1) NOT NULL DEFAULT 0 ) ENGINE=MEMORY DEFAULT CHARSET=utf8 +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_TRX; +DROP TEMPORARY TABLE t1; +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/mysql-test/suite/innodb_i_s/innodb_trx.test b/mysql-test/suite/innodb_i_s/innodb_trx.test index 01bb141777e..90fa3467b50 100644 --- a/mysql-test/suite/innodb_i_s/innodb_trx.test +++ b/mysql-test/suite/innodb_i_s/innodb_trx.test @@ -1,3 +1,9 @@ --source include/have_innodb.inc SHOW CREATE TABLE INFORMATION_SCHEMA.INNODB_TRX; + +CREATE TEMPORARY TABLE t1 LIKE INFORMATION_SCHEMA.INNODB_TRX; +DROP TEMPORARY TABLE t1; + +CREATE TEMPORARY TABLE t1 AS SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX LIMIT 0; +DROP TEMPORARY TABLE t1; diff --git a/sql/sql_i_s.h b/sql/sql_i_s.h index 4ca669a5610..b9a768f1452 100644 --- a/sql/sql_i_s.h +++ b/sql/sql_i_s.h @@ -45,6 +45,13 @@ enum enum_show_open_table }; +enum enum_show_default +{ + DEFAULT_TYPE_IMPLICIT= 0, + DEFAULT_NONE +}; + + namespace Show { class Type { @@ -88,21 +95,30 @@ class ST_FIELD_INFO: public Show::Type protected: LEX_CSTRING m_name; // I_S column name enum_nullability m_nullability; // NULLABLE or NOT NULL + enum_show_default m_def; // Whether has a DEFAULT value LEX_CSTRING m_old_name; // SHOW column name enum_show_open_table m_open_method; public: ST_FIELD_INFO(const LEX_CSTRING &name, const Type &type, enum_nullability nullability, + enum_show_default def, LEX_CSTRING &old_name, enum_show_open_table open_method) - :Type(type), m_name(name), m_nullability(nullability), m_old_name(old_name), + :Type(type), m_name(name), + m_nullability(nullability), + m_def(def), + m_old_name(old_name), m_open_method(open_method) { } ST_FIELD_INFO(const char *name, const Type &type, enum_nullability nullability, + enum_show_default def, const char *old_name, enum_show_open_table open_method) - :Type(type), m_nullability(nullability), m_open_method(open_method) + :Type(type), + m_nullability(nullability), + m_def(def), + m_open_method(open_method) { m_name.str= name; m_name.length= safe_strlen(name); @@ -111,6 +127,7 @@ public: } const LEX_CSTRING &name() const { return m_name; } bool nullable() const { return m_nullability == NULLABLE; } + enum_show_default def() const { return m_def; } const LEX_CSTRING &old_name() const { return m_old_name; } enum_show_open_table open_method() const { return m_open_method; } bool end_marker() const { return m_name.str == NULL; } @@ -279,14 +296,30 @@ public: class Column: public ST_FIELD_INFO { public: - Column(const char *name, const Type &type, enum_nullability nullability, + Column(const char *name, const Type &type, + enum_nullability nullability, + enum_show_default def, const char *old_name, enum_show_open_table open_method= SKIP_OPEN_TABLE) - :ST_FIELD_INFO(name, type, nullability, old_name, open_method) + :ST_FIELD_INFO(name, type, nullability, def, old_name, open_method) { } Column(const char *name, const Type &type, enum_nullability nullability, + enum_show_default def, enum_show_open_table open_method= SKIP_OPEN_TABLE) - :Column(name, type, nullability, NullS, open_method) + :ST_FIELD_INFO(name, type, nullability, def, NullS, open_method) + { } + Column(const char *name, const Type &type, + enum_nullability nullability, + const char *old_name, + enum_show_open_table open_method= SKIP_OPEN_TABLE) + :ST_FIELD_INFO(name, type, nullability, DEFAULT_TYPE_IMPLICIT, + old_name, open_method) + { } + Column(const char *name, const Type &type, + enum_nullability nullability, + enum_show_open_table open_method= SKIP_OPEN_TABLE) + :ST_FIELD_INFO(name, type, nullability, DEFAULT_TYPE_IMPLICIT, + NullS, open_method) { } }; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 74eec50f34f..311125419cf 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -18897,6 +18897,16 @@ bool Create_tmp_table::add_schema_fields(THD *thd, TABLE *table, DBUG_RETURN(true); // EOM } field->init(table); + switch (def.def()) { + case DEFAULT_NONE: + field->flags|= NO_DEFAULT_VALUE_FLAG; + break; + case DEFAULT_TYPE_IMPLICIT: + break; + default: + DBUG_ASSERT(0); + break; + } add_field(table, field, fieldnr, param->force_not_null_cols); } diff --git a/storage/innobase/handler/i_s.cc b/storage/innobase/handler/i_s.cc index e6faa6e9463..5fe2307e8ac 100644 --- a/storage/innobase/handler/i_s.cc +++ b/storage/innobase/handler/i_s.cc @@ -337,7 +337,7 @@ static ST_FIELD_INFO innodb_trx_fields_info[] = #define IDX_TRX_ISOLATION_LEVEL 16 Column("trx_isolation_level", - Enum(&isolation_level_values_typelib), NOT_NULL), + Enum(&isolation_level_values_typelib), NOT_NULL, DEFAULT_NONE), #define IDX_TRX_UNIQUE_CHECKS 17 Column("trx_unique_checks", SLong(1), NOT_NULL), @@ -616,10 +616,10 @@ static ST_FIELD_INFO innodb_locks_fields_info[] = Column("lock_trx_id", ULonglong(), NOT_NULL), #define IDX_LOCK_MODE 2 - Column("lock_mode", Enum(&lock_mode_values_typelib), NOT_NULL), + Column("lock_mode", Enum(&lock_mode_values_typelib), NOT_NULL, DEFAULT_NONE), #define IDX_LOCK_TYPE 3 - Column("lock_type", Enum(&lock_type_values_typelib), NOT_NULL), + Column("lock_type", Enum(&lock_type_values_typelib), NOT_NULL, DEFAULT_NONE), #define IDX_LOCK_TABLE 4 Column("lock_table", Varchar(1024), NOT_NULL), @@ -1915,7 +1915,7 @@ static ST_FIELD_INFO innodb_metrics_fields_info[] = Column("ENABLED", SLong(1), NOT_NULL), #define METRIC_TYPE 15 - Column("TYPE", Enum(&metric_type_values_typelib), NOT_NULL), + Column("TYPE", Enum(&metric_type_values_typelib), NOT_NULL, DEFAULT_NONE), #define METRIC_DESC 16 Column("COMMENT", Varchar(NAME_LEN + 1), NOT_NULL), @@ -3990,10 +3990,10 @@ static ST_FIELD_INFO i_s_innodb_buffer_page_fields_info[] = Column("COMPRESSED_SIZE", ULonglong(), NOT_NULL), #define IDX_BUFFER_PAGE_STATE 15 + I_S_AHI - Column("PAGE_STATE", Enum(&page_state_values_typelib), NOT_NULL), + Column("PAGE_STATE", Enum(&page_state_values_typelib), NOT_NULL, DEFAULT_NONE), #define IDX_BUFFER_PAGE_IO_FIX 16 + I_S_AHI - Column("IO_FIX", Enum(&io_values_typelib), NOT_NULL), + Column("IO_FIX", Enum(&io_values_typelib), NOT_NULL, DEFAULT_NONE), #define IDX_BUFFER_PAGE_IS_OLD 17 + I_S_AHI Column("IS_OLD", SLong(1), NOT_NULL), @@ -4561,7 +4561,7 @@ static ST_FIELD_INFO i_s_innodb_buf_page_lru_fields_info[] = Column("COMPRESSED", SLong(1), NOT_NULL), #define IDX_BUF_LRU_PAGE_IO_FIX 16 + I_S_AHI - Column("IO_FIX", Enum(&io_values_typelib), NOT_NULL), + Column("IO_FIX", Enum(&io_values_typelib), NOT_NULL, DEFAULT_NONE), #define IDX_BUF_LRU_PAGE_IS_OLD 17 + I_S_AHI Column("IS_OLD", SLong(1), NULLABLE),