From 061416999fe1674e48019df824850242453cd39b Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 27 Oct 2022 14:37:53 +0000 Subject: [PATCH] fix ddl rule for generated column. --- src/rootserver/ob_ddl_service.cpp | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/src/rootserver/ob_ddl_service.cpp b/src/rootserver/ob_ddl_service.cpp index 98541580d..ddf077ed1 100644 --- a/src/rootserver/ob_ddl_service.cpp +++ b/src/rootserver/ob_ddl_service.cpp @@ -6034,20 +6034,26 @@ int ObDDLService::check_generated_column_modify_authority( { int ret = OB_SUCCESS; if (old_column_schema.is_generated_column() && alter_column_schema.is_generated_column()) { - ObString old_def; - ObString alter_def; - if (OB_FAIL(old_column_schema.get_cur_default_value().get_string(old_def))) { - LOG_WARN("get old generated column definition failed", K(ret), K(old_column_schema)); - } else if (OB_FAIL(alter_column_schema.get_cur_default_value().get_string(alter_def))) { - LOG_WARN("get new generated column definition failed", K(ret), K(alter_column_schema)); - } else if (!ObCharset::case_insensitive_equal(old_def, alter_def)) { - ret = OB_NOT_SUPPORTED; - LOG_USER_ERROR(OB_NOT_SUPPORTED, "Modify generated column definition"); - LOG_WARN("generated column schema definition changed", K(ret), K(old_column_schema), K(alter_column_schema)); + if ((old_column_schema.is_virtual_generated_column() && alter_column_schema.is_virtual_generated_column()) + || (old_column_schema.is_stored_generated_column() && alter_column_schema.is_stored_generated_column())) { + ObString old_def; + ObString alter_def; + if (OB_FAIL(old_column_schema.get_cur_default_value().get_string(old_def))) { + LOG_WARN("get old generated column definition failed", K(ret), K(old_column_schema)); + } else if (OB_FAIL(alter_column_schema.get_cur_default_value().get_string(alter_def))) { + LOG_WARN("get new generated column definition failed", K(ret), K(alter_column_schema)); + } else if (!ObCharset::case_insensitive_equal(old_def, alter_def)) { + ret = OB_NOT_SUPPORTED; + LOG_USER_ERROR(OB_NOT_SUPPORTED, "Modify generated column definition"); + LOG_WARN("generated column schema definition changed", K(ret), K(old_column_schema), K(alter_column_schema)); + } + } else { + ret = OB_ERR_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN; + LOG_USER_ERROR(OB_ERR_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN, "Changing the STORED status"); } } else if (old_column_schema.is_generated_column() || alter_column_schema.is_generated_column()) { - ret = OB_NOT_SUPPORTED; - LOG_USER_ERROR(OB_NOT_SUPPORTED, "Changing the STORED status for generated columns"); + ret = OB_ERR_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN; + LOG_USER_ERROR(OB_ERR_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN, "Changing the STORED status"); } return ret; }