From 6270c21bebee20a352eb726eb805e2bb95c12d7f Mon Sep 17 00:00:00 2001 From: beyondykk Date: Thu, 26 Jan 2023 13:11:52 +0900 Subject: [PATCH 01/12] [CBRD-24638] The problem of the default value of column when altering the type of column. --- src/query/execute_schema.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/query/execute_schema.c b/src/query/execute_schema.c index fb0fd39b6fb..4e720c4c609 100644 --- a/src/query/execute_schema.c +++ b/src/query/execute_schema.c @@ -13873,6 +13873,14 @@ check_change_attribute (PARSER_CONTEXT * parser, DB_CTMPL * ctemplate, PT_NODE * } } + if (is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_OLD) && + (is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_NEED_ROW_CHECK) + || is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_PSEUDO_UPGRADE))) + { + error = ER_ALTER_CHANGE_CAST_FAILED_SET_DEFAULT; + er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 0); + } + exit: db_value_clear (&def_value); return error; From 21b1938ecb3eeebe2246caad412f94015693044a Mon Sep 17 00:00:00 2001 From: beyondykk Date: Fri, 27 Jan 2023 08:41:57 +0900 Subject: [PATCH 02/12] fix: old default value only --- src/query/execute_schema.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/query/execute_schema.c b/src/query/execute_schema.c index 4e720c4c609..b83ffca15a8 100644 --- a/src/query/execute_schema.c +++ b/src/query/execute_schema.c @@ -13874,6 +13874,7 @@ check_change_attribute (PARSER_CONTEXT * parser, DB_CTMPL * ctemplate, PT_NODE * } if (is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_OLD) && + !is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_NEW) && (is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_NEED_ROW_CHECK) || is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_PSEUDO_UPGRADE))) { From e0c1fc18279c4353a60180b7d55c17a0f80cf68f Mon Sep 17 00:00:00 2001 From: beyondykk Date: Fri, 27 Jan 2023 08:43:23 +0900 Subject: [PATCH 03/12] Revert "fix: old default value only" This reverts commit 21b1938ecb3eeebe2246caad412f94015693044a. --- src/query/execute_schema.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/query/execute_schema.c b/src/query/execute_schema.c index b83ffca15a8..4e720c4c609 100644 --- a/src/query/execute_schema.c +++ b/src/query/execute_schema.c @@ -13874,7 +13874,6 @@ check_change_attribute (PARSER_CONTEXT * parser, DB_CTMPL * ctemplate, PT_NODE * } if (is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_OLD) && - !is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_NEW) && (is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_NEED_ROW_CHECK) || is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_PSEUDO_UPGRADE))) { From ef376101d44f39866e425f3bb4e37a91b9c56b86 Mon Sep 17 00:00:00 2001 From: beyondykk Date: Fri, 27 Jan 2023 08:46:12 +0900 Subject: [PATCH 04/12] fix: old default value only --- src/query/execute_schema.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/query/execute_schema.c b/src/query/execute_schema.c index 4e720c4c609..b83ffca15a8 100644 --- a/src/query/execute_schema.c +++ b/src/query/execute_schema.c @@ -13874,6 +13874,7 @@ check_change_attribute (PARSER_CONTEXT * parser, DB_CTMPL * ctemplate, PT_NODE * } if (is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_OLD) && + !is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_NEW) && (is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_NEED_ROW_CHECK) || is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_PSEUDO_UPGRADE))) { From edfffdb7bddecd13fb256093e030843c21b6c199 Mon Sep 17 00:00:00 2001 From: beyondykk Date: Fri, 3 Feb 2023 09:58:17 +0900 Subject: [PATCH 05/12] fix-temp --- src/object/class_object.c | 1 + src/object/schema_template.c | 10 ++++++++++ src/query/execute_schema.c | 12 +++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/object/class_object.c b/src/object/class_object.c index c0057708628..4e52c6a35c5 100644 --- a/src/object/class_object.c +++ b/src/object/class_object.c @@ -4523,6 +4523,7 @@ classobj_init_attribute (SM_ATTRIBUTE * src, SM_ATTRIBUTE * dest, int copy) } /* make a copy of the default value */ + src->default_value.value.domain.general_info.is_null = 0; if (pr_clone_value (&src->default_value.value, &dest->default_value.value)) { goto memory_error; diff --git a/src/object/schema_template.c b/src/object/schema_template.c index b7b6ada33f1..2514e560660 100644 --- a/src/object/schema_template.c +++ b/src/object/schema_template.c @@ -4458,6 +4458,16 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha return error; } + if (new_default_value == NULL) + { + new_default_value = &def->attributes->default_value.value; + } + + if (new_default_expr == NULL) + { + new_default_expr = &def->attributes->default_value.default_expr; + } + is_class_attr = (name_space == ID_CLASS_ATTRIBUTE); if (new_default_value != NULL || (new_default_expr != NULL && new_default_expr->default_expr_type != DB_DEFAULT_NONE)) { diff --git a/src/query/execute_schema.c b/src/query/execute_schema.c index b83ffca15a8..2bbdfa4f018 100644 --- a/src/query/execute_schema.c +++ b/src/query/execute_schema.c @@ -10486,7 +10486,15 @@ do_change_att_schema_only (PARSER_CONTEXT * parser, DB_CTMPL * ctemplate, PT_NOD { goto exit; } - +#if 0 + if (new_default == NULL) + { + attribute->info.attr_def.data_default = parser_new_node (parser, PT_DATA_DEFAULT); + attribute->info.attr_def.data_default->info.data_default.default_value = parser_new_node (parser, PT_VALUE); + attribute->info.attr_def.data_default->info.data_default.default_value->info.value.db_value = ctemplate->attributes->default_value.value; + new_default = &attribute->info.attr_def.data_default->info.data_default.default_value->info.value.db_value; + } +#endif error = smt_change_attribute_w_dflt_w_order (ctemplate, attr_name, new_name, NULL, attr_db_domain, attr_chg_prop->name_space, new_default, &new_default_expr, attribute->info.attr_def.on_update, change_first, change_after_attr, @@ -13873,6 +13881,7 @@ check_change_attribute (PARSER_CONTEXT * parser, DB_CTMPL * ctemplate, PT_NODE * } } +#if 0 if (is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_OLD) && !is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_NEW) && (is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_NEED_ROW_CHECK) @@ -13881,6 +13890,7 @@ check_change_attribute (PARSER_CONTEXT * parser, DB_CTMPL * ctemplate, PT_NODE * error = ER_ALTER_CHANGE_CAST_FAILED_SET_DEFAULT; er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 0); } +#endif exit: db_value_clear (&def_value); From d812ecab709638f28938dbbda888b66f7bf1425d Mon Sep 17 00:00:00 2001 From: beyondykk Date: Fri, 3 Feb 2023 11:21:29 +0900 Subject: [PATCH 06/12] fix: check old default --- src/object/class_object.c | 1 - src/object/schema_template.c | 4 ++-- src/query/execute_schema.c | 21 +-------------------- 3 files changed, 3 insertions(+), 23 deletions(-) diff --git a/src/object/class_object.c b/src/object/class_object.c index 4e52c6a35c5..c0057708628 100644 --- a/src/object/class_object.c +++ b/src/object/class_object.c @@ -4523,7 +4523,6 @@ classobj_init_attribute (SM_ATTRIBUTE * src, SM_ATTRIBUTE * dest, int copy) } /* make a copy of the default value */ - src->default_value.value.domain.general_info.is_null = 0; if (pr_clone_value (&src->default_value.value, &dest->default_value.value)) { goto memory_error; diff --git a/src/object/schema_template.c b/src/object/schema_template.c index 2514e560660..ce8ae708df2 100644 --- a/src/object/schema_template.c +++ b/src/object/schema_template.c @@ -4460,12 +4460,12 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha if (new_default_value == NULL) { - new_default_value = &def->attributes->default_value.value; + new_default_value = &(*found_att)->default_value.value; } if (new_default_expr == NULL) { - new_default_expr = &def->attributes->default_value.default_expr; + new_default_expr = &(*found_att)->default_value.default_expr; } is_class_attr = (name_space == ID_CLASS_ATTRIBUTE); diff --git a/src/query/execute_schema.c b/src/query/execute_schema.c index 2bbdfa4f018..fb0fd39b6fb 100644 --- a/src/query/execute_schema.c +++ b/src/query/execute_schema.c @@ -10486,15 +10486,7 @@ do_change_att_schema_only (PARSER_CONTEXT * parser, DB_CTMPL * ctemplate, PT_NOD { goto exit; } -#if 0 - if (new_default == NULL) - { - attribute->info.attr_def.data_default = parser_new_node (parser, PT_DATA_DEFAULT); - attribute->info.attr_def.data_default->info.data_default.default_value = parser_new_node (parser, PT_VALUE); - attribute->info.attr_def.data_default->info.data_default.default_value->info.value.db_value = ctemplate->attributes->default_value.value; - new_default = &attribute->info.attr_def.data_default->info.data_default.default_value->info.value.db_value; - } -#endif + error = smt_change_attribute_w_dflt_w_order (ctemplate, attr_name, new_name, NULL, attr_db_domain, attr_chg_prop->name_space, new_default, &new_default_expr, attribute->info.attr_def.on_update, change_first, change_after_attr, @@ -13881,17 +13873,6 @@ check_change_attribute (PARSER_CONTEXT * parser, DB_CTMPL * ctemplate, PT_NODE * } } -#if 0 - if (is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_OLD) && - !is_att_prop_set (attr_chg_prop->p[P_DEFAULT_VALUE], ATT_CHG_PROPERTY_PRESENT_NEW) && - (is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_NEED_ROW_CHECK) - || is_att_prop_set (attr_chg_prop->p[P_TYPE], ATT_CHG_TYPE_PSEUDO_UPGRADE))) - { - error = ER_ALTER_CHANGE_CAST_FAILED_SET_DEFAULT; - er_set (ER_ERROR_SEVERITY, ARG_FILE_LINE, error, 0); - } -#endif - exit: db_value_clear (&def_value); return error; From 1d1ace46745689dd202f46131d57b6d7e6042b21 Mon Sep 17 00:00:00 2001 From: beyondykk Date: Fri, 3 Feb 2023 13:40:41 +0900 Subject: [PATCH 07/12] fix: default_expr --- src/object/schema_template.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/object/schema_template.c b/src/object/schema_template.c index ce8ae708df2..06812afa80c 100644 --- a/src/object/schema_template.c +++ b/src/object/schema_template.c @@ -4458,13 +4458,9 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha return error; } - if (new_default_value == NULL) + if (new_default_value == NULL && new_default_expr->default_expr_type == DB_DEFAULT_NONE) { new_default_value = &(*found_att)->default_value.value; - } - - if (new_default_expr == NULL) - { new_default_expr = &(*found_att)->default_value.default_expr; } From f01adbf27fd7ff43cf4835318d62b3ed0d0b3ee4 Mon Sep 17 00:00:00 2001 From: beyondykk Date: Fri, 3 Feb 2023 14:32:14 +0900 Subject: [PATCH 08/12] fix: empty default --- src/object/schema_template.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/object/schema_template.c b/src/object/schema_template.c index 06812afa80c..b75f1f698a8 100644 --- a/src/object/schema_template.c +++ b/src/object/schema_template.c @@ -4460,8 +4460,18 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha if (new_default_value == NULL && new_default_expr->default_expr_type == DB_DEFAULT_NONE) { - new_default_value = &(*found_att)->default_value.value; - new_default_expr = &(*found_att)->default_value.default_expr; + DB_VALUE *default_value = &(*found_att)->default_value.value; + DB_DEFAULT_EXPR *default_expr = &(*found_att)->default_value.default_expr; + + if (!DB_IS_NULL (default_value)) + { + new_default_value = default_value; + } + + if (default_expr->default_expr_type != DB_DEFAULT_NONE) + { + new_default_expr = default_expr; + } } is_class_attr = (name_space == ID_CLASS_ATTRIBUTE); From 68e562a5d4e4364ffaa88a9d72f20710facbce4d Mon Sep 17 00:00:00 2001 From: beyondykk Date: Fri, 3 Feb 2023 15:16:05 +0900 Subject: [PATCH 09/12] fix: defatul value pointer --- src/object/schema_template.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/object/schema_template.c b/src/object/schema_template.c index b75f1f698a8..02cc3c66274 100644 --- a/src/object/schema_template.c +++ b/src/object/schema_template.c @@ -4442,6 +4442,8 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha int is_class_attr; DB_VALUE *orig_value = NULL; DB_VALUE *new_orig_value = NULL; + DB_VALUE default_value; + DB_DEFAULT_EXPR default_expr; TP_DOMAIN_STATUS status; *found_att = NULL; @@ -4460,17 +4462,17 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha if (new_default_value == NULL && new_default_expr->default_expr_type == DB_DEFAULT_NONE) { - DB_VALUE *default_value = &(*found_att)->default_value.value; - DB_DEFAULT_EXPR *default_expr = &(*found_att)->default_value.default_expr; + default_value = (*found_att)->default_value.value; + DB_DEFAULT_EXPR default_expr = (*found_att)->default_value.default_expr; - if (!DB_IS_NULL (default_value)) + if (!DB_IS_NULL (&default_value)) { - new_default_value = default_value; + new_default_value = &default_value; } - if (default_expr->default_expr_type != DB_DEFAULT_NONE) + if (default_expr.default_expr_type != DB_DEFAULT_NONE) { - new_default_expr = default_expr; + new_default_expr = &default_expr; } } From 4701bc1badaf1fad5b058606760ab1dd6c9f25b9 Mon Sep 17 00:00:00 2001 From: beyondykk Date: Fri, 3 Feb 2023 15:58:29 +0900 Subject: [PATCH 10/12] fix: clone value --- src/object/schema_template.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/object/schema_template.c b/src/object/schema_template.c index 02cc3c66274..13047263d73 100644 --- a/src/object/schema_template.c +++ b/src/object/schema_template.c @@ -4462,8 +4462,8 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha if (new_default_value == NULL && new_default_expr->default_expr_type == DB_DEFAULT_NONE) { - default_value = (*found_att)->default_value.value; - DB_DEFAULT_EXPR default_expr = (*found_att)->default_value.default_expr; + pr_clone_value (&(*found_att)->default_value.value, &default_value); + default_expr = (*found_att)->default_value.default_expr; if (!DB_IS_NULL (&default_value)) { From d9f71d4bbe4dfd813d20edc9ccd06e62fd8705ab Mon Sep 17 00:00:00 2001 From: beyondykk Date: Tue, 7 Feb 2023 13:15:07 +0900 Subject: [PATCH 11/12] add comment --- src/object/schema_template.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/object/schema_template.c b/src/object/schema_template.c index 13047263d73..931986a8f86 100644 --- a/src/object/schema_template.c +++ b/src/object/schema_template.c @@ -4460,6 +4460,9 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha return error; } + /* + The default value's domain should be checked even though the new default is not specified + */ if (new_default_value == NULL && new_default_expr->default_expr_type == DB_DEFAULT_NONE) { pr_clone_value (&(*found_att)->default_value.value, &default_value); From d18a267ef9113a6621b1ca8fe259ae7deaea04b2 Mon Sep 17 00:00:00 2001 From: beyondykk Date: Tue, 7 Feb 2023 17:11:27 +0900 Subject: [PATCH 12/12] clear default_value --- src/object/schema_template.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/object/schema_template.c b/src/object/schema_template.c index 931986a8f86..a25bce682d2 100644 --- a/src/object/schema_template.c +++ b/src/object/schema_template.c @@ -4463,6 +4463,7 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha /* The default value's domain should be checked even though the new default is not specified */ + db_make_null (&default_value); if (new_default_value == NULL && new_default_expr->default_expr_type == DB_DEFAULT_NONE) { pr_clone_value (&(*found_att)->default_value.value, &default_value); @@ -4485,6 +4486,8 @@ smt_change_attribute_w_dflt_w_order (DB_CTMPL * def, const char *name, const cha assert (((*found_att)->flags & SM_ATTFLAG_NEW) == 0); error = smt_set_attribute_default (def, ((new_name != NULL) ? new_name : name), is_class_attr, new_default_value, new_default_expr); + + db_value_clear (&default_value); if (error != NO_ERROR) { return error;