diff options
author | Sachin Setiya <sachin.setiya@mariadb.com> | 2018-02-01 18:58:55 +0530 |
---|---|---|
committer | Sachin Setiya <sachin.setiya@mariadb.com> | 2018-02-02 14:45:44 +0530 |
commit | c8299e6278e42bdd2540e75305ba4effb7259f6e (patch) | |
tree | c06ce089bbfc5f3d0b56ea1495bb728ec4a81533 | |
parent | 16be7469ac7b98b5706623d81829b349fb901b1f (diff) | |
download | mariadb-git-c8299e6278e42bdd2540e75305ba4effb7259f6e.tar.gz |
This commit solves a couple of issues
1st. Create_field does not have function vers_sys_field() kind of handy
function, second I think Create_field and Field should not divert much , and
Field does have this function.
2nd. Versioning column does not have NOT_NULL_FLAG, since they can never be
null. So I have added NOT_NULL_FLAG.
3rd. Since I added NOT_NULL_FLAG this created one issue , versioning column
of datatype bigint unsigned were getting NO_DEFAULT_VALUE_FLAG. This makes
test like versioning.insert to fail, Reason being If a column gets this
flag if we insert 'default' value it will generate error(that is why ) test
was failing. So now versioning column wont get NO_DEFAULT_VALUE_FLAG flag.
-rw-r--r-- | sql/field.cc | 4 | ||||
-rw-r--r-- | sql/field.h | 4 | ||||
-rw-r--r-- | sql/sql_table.cc | 3 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 4 |
4 files changed, 10 insertions, 5 deletions
diff --git a/sql/field.cc b/sql/field.cc index 82a75e98f46..4accd26127e 100644 --- a/sql/field.cc +++ b/sql/field.cc @@ -10475,8 +10475,8 @@ bool Column_definition::check(THD *thd) TIMESTAMP columns get implicit DEFAULT value when explicit_defaults_for_timestamp is not set. */ - if (opt_explicit_defaults_for_timestamp || - !is_timestamp_type()) + if ((opt_explicit_defaults_for_timestamp || + !is_timestamp_type()) && !vers_sys_field()) { flags|= NO_DEFAULT_VALUE_FLAG; } diff --git a/sql/field.h b/sql/field.h index e1017f04c27..43b3aab1ff4 100644 --- a/sql/field.h +++ b/sql/field.h @@ -4214,6 +4214,10 @@ public: length*= charset->mbmaxlen; key_length= pack_length; } + bool vers_sys_field() const + { + return flags & (VERS_SYS_START_FLAG | VERS_SYS_END_FLAG); + } void create_length_to_internal_length_bit(); void create_length_to_internal_length_newdecimal(); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 16bd1dc0bf0..1ad9be1ea93 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4206,7 +4206,8 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info, !sql_field->has_default_function() && (sql_field->flags & NOT_NULL_FLAG) && (!sql_field->is_timestamp_type() || - opt_explicit_defaults_for_timestamp)) + opt_explicit_defaults_for_timestamp)&& + !sql_field->vers_sys_field()) { sql_field->flags|= NO_DEFAULT_VALUE_FLAG; sql_field->pack_flag|= FIELDFLAG_NO_DEFAULT; diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 7bf8d614553..792968d7c44 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -6586,7 +6586,7 @@ field_def: my_yyabort_error((ER_VERS_DUPLICATE_ROW_START_END, MYF(0), "START", field_name.str)); } - lex->last_field->flags|= VERS_SYS_START_FLAG; + lex->last_field->flags|= VERS_SYS_START_FLAG | NOT_NULL_FLAG; break; case 0: p= &info.as_row.end; @@ -6595,7 +6595,7 @@ field_def: my_yyabort_error((ER_VERS_DUPLICATE_ROW_START_END, MYF(0), "END", field_name.str)); } - lex->last_field->flags|= VERS_SYS_END_FLAG; + lex->last_field->flags|= VERS_SYS_END_FLAG | NOT_NULL_FLAG; break; default: /* Not Reachable */ |